summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwolfbeast <mcwerewolf@gmail.com>2018-11-01 20:16:11 +0100
committerwolfbeast <mcwerewolf@gmail.com>2018-11-01 20:16:11 +0100
commite0de8181d9d51cff079f9b54fd6fa276d6aeb094 (patch)
tree260dea667bc815c9e80543faf6c50a1bf85f4916
parent24a83a813641a6500e91f9fcf1ea3ca0aecc047a (diff)
downloaduxp-e0de8181d9d51cff079f9b54fd6fa276d6aeb094.tar.gz
Protect main thread in-process access to WinCompositorWidget transparent surface.
-rw-r--r--widget/windows/InProcessWinCompositorWidget.cpp25
-rw-r--r--widget/windows/InProcessWinCompositorWidget.h4
2 files changed, 29 insertions, 0 deletions
diff --git a/widget/windows/InProcessWinCompositorWidget.cpp b/widget/windows/InProcessWinCompositorWidget.cpp
index 685eaf5ca6..a11790b328 100644
--- a/widget/windows/InProcessWinCompositorWidget.cpp
+++ b/widget/windows/InProcessWinCompositorWidget.cpp
@@ -23,6 +23,31 @@ InProcessWinCompositorWidget::InProcessWinCompositorWidget(const CompositorWidge
MOZ_ASSERT(mWindow);
}
+void
+InProcessWinCompositorWidget::OnDestroyWindow()
+{
+ EnterPresentLock();
+ WinCompositorWidget::OnDestroyWindow();
+ LeavePresentLock();
+}
+
+void
+InProcessWinCompositorWidget::UpdateTransparency(nsTransparencyMode aMode)
+{
+ EnterPresentLock();
+ WinCompositorWidget::UpdateTransparency(aMode);
+ LeavePresentLock();
+}
+
+void
+InProcessWinCompositorWidget::ClearTransparentWindow()
+{
+ EnterPresentLock();
+ WinCompositorWidget::ClearTransparentWindow();
+ LeavePresentLock();
+}
+
+
nsIWidget*
InProcessWinCompositorWidget::RealWidget()
{
diff --git a/widget/windows/InProcessWinCompositorWidget.h b/widget/windows/InProcessWinCompositorWidget.h
index 2ce6ba0be1..afe5a7f535 100644
--- a/widget/windows/InProcessWinCompositorWidget.h
+++ b/widget/windows/InProcessWinCompositorWidget.h
@@ -22,6 +22,10 @@ class InProcessWinCompositorWidget final : public WinCompositorWidget
public:
InProcessWinCompositorWidget(const CompositorWidgetInitData& aInitData, nsWindow* aWindow);
+ void OnDestroyWindow() override;
+ void UpdateTransparency(nsTransparencyMode aMode) override;
+ void ClearTransparentWindow() override;
+
void ObserveVsync(VsyncObserver* aObserver) override;
nsIWidget* RealWidget() override;