Bug 1425878 - Don't expose raw pointers to refcounted vsync dispatcher object. r?sotaro
MozReview-Commit-ID: 5ywkZqfY8uZ
--- a/widget/nsBaseWidget.cpp
+++ b/widget/nsBaseWidget.cpp
@@ -1250,20 +1250,21 @@ void nsBaseWidget::CreateCompositorVsync
// Parent directly listens to the vsync source whereas
// child process communicate via IPC
// Should be called AFTER gfxPlatform is initialized
if (XRE_IsParentProcess()) {
mCompositorVsyncDispatcher = new CompositorVsyncDispatcher();
}
}
-CompositorVsyncDispatcher*
+already_AddRefed<CompositorVsyncDispatcher>
nsBaseWidget::GetCompositorVsyncDispatcher()
{
- return mCompositorVsyncDispatcher;
+ RefPtr<CompositorVsyncDispatcher> dispatcher = mCompositorVsyncDispatcher;
+ return dispatcher.forget();
}
already_AddRefed<LayerManager>
nsBaseWidget::CreateCompositorSession(int aWidth,
int aHeight,
CompositorOptions* aOptionsOut)
{
MOZ_ASSERT(aOptionsOut);
--- a/widget/nsBaseWidget.h
+++ b/widget/nsBaseWidget.h
@@ -204,17 +204,17 @@ public:
// A remote compositor session tied to this window has been lost and IPC
// messages will no longer work. The widget must clean up any lingering
// resources and possibly schedule another paint.
//
// A reference to the session object is held until this function has
// returned.
void NotifyCompositorSessionLost(mozilla::layers::CompositorSession* aSession);
- mozilla::CompositorVsyncDispatcher* GetCompositorVsyncDispatcher();
+ already_AddRefed<mozilla::CompositorVsyncDispatcher> GetCompositorVsyncDispatcher();
void CreateCompositorVsyncDispatcher();
virtual void CreateCompositor();
virtual void CreateCompositor(int aWidth, int aHeight);
virtual void SetCompositorWidgetDelegate(CompositorWidgetDelegate* delegate) {}
virtual void PrepareWindowEffects() override {}
virtual void UpdateThemeGeometries(const nsTArray<ThemeGeometry>& aThemeGeometries) override {}
virtual void SetModal(bool aModal) override {}
virtual uint32_t GetMaxTouchPoints() const override;