Title: [232884] trunk/Source/WebKit
Revision
232884
Author
pvol...@apple.com
Date
2018-06-15 11:47:32 -0700 (Fri, 15 Jun 2018)

Log Message

DisplayRefreshMonitorMac should hold a weak pointer to WebPage.
https://bugs.webkit.org/show_bug.cgi?id=186683

Reviewed by Brent Fulgham.

Instead of DisplayRefreshMonitorMac having a RefPtr to WebPage, it should have a weak pointer.
Having a RefPtr could in theory create reference cycles. This potential problem has not been
observed in practice, but it is safer to use a weak pointer.

* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/mac/DrawingAreaMac.cpp:
(WebKit::DisplayRefreshMonitorMac::DisplayRefreshMonitorMac):
(WebKit::DisplayRefreshMonitorMac::~DisplayRefreshMonitorMac):
(WebKit::DisplayRefreshMonitorMac::requestRefreshCallback):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (232883 => 232884)


--- trunk/Source/WebKit/ChangeLog	2018-06-15 18:31:54 UTC (rev 232883)
+++ trunk/Source/WebKit/ChangeLog	2018-06-15 18:47:32 UTC (rev 232884)
@@ -1,3 +1,20 @@
+2018-06-15  Per Arne Vollan  <pvol...@apple.com>
+
+        DisplayRefreshMonitorMac should hold a weak pointer to WebPage.
+        https://bugs.webkit.org/show_bug.cgi?id=186683
+
+        Reviewed by Brent Fulgham.
+
+        Instead of DisplayRefreshMonitorMac having a RefPtr to WebPage, it should have a weak pointer.
+        Having a RefPtr could in theory create reference cycles. This potential problem has not been
+        observed in practice, but it is safer to use a weak pointer.
+
+        * WebProcess/WebPage/WebPage.h:
+        * WebProcess/WebPage/mac/DrawingAreaMac.cpp:
+        (WebKit::DisplayRefreshMonitorMac::DisplayRefreshMonitorMac):
+        (WebKit::DisplayRefreshMonitorMac::~DisplayRefreshMonitorMac):
+        (WebKit::DisplayRefreshMonitorMac::requestRefreshCallback):
+
 2018-06-15  Carlos Alberto Lopez Perez  <clo...@igalia.com>
 
         [GTK][WKE] Disable memory pressure handling when running layout tests (WTR)

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (232883 => 232884)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2018-06-15 18:31:54 UTC (rev 232883)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2018-06-15 18:47:32 UTC (rev 232884)
@@ -246,7 +246,7 @@
 using SnapshotOptions = uint32_t;
 using WKEventModifiers = uint32_t;
 
-class WebPage : public API::ObjectImpl<API::Object::Type::BundlePage>, public IPC::MessageReceiver, public IPC::MessageSender {
+class WebPage : public API::ObjectImpl<API::Object::Type::BundlePage>, public IPC::MessageReceiver, public IPC::MessageSender, public CanMakeWeakPtr<WebPage> {
 public:
     static Ref<WebPage> create(uint64_t pageID, WebPageCreationParameters&&);
     virtual ~WebPage();

Modified: trunk/Source/WebKit/WebProcess/WebPage/mac/DrawingAreaMac.cpp (232883 => 232884)


--- trunk/Source/WebKit/WebProcess/WebPage/mac/DrawingAreaMac.cpp	2018-06-15 18:31:54 UTC (rev 232883)
+++ trunk/Source/WebKit/WebProcess/WebPage/mac/DrawingAreaMac.cpp	2018-06-15 18:47:32 UTC (rev 232884)
@@ -57,7 +57,7 @@
     
     bool hasRequestedRefreshCallback() const override { return m_hasSentMessage; }
 
-    Ref<WebPage> m_webPage;
+    WeakPtr<WebPage> m_webPage;
     bool m_hasSentMessage { false };
     unsigned m_observerID;
     static unsigned m_counterID;
@@ -69,7 +69,7 @@
 
 DisplayRefreshMonitorMac::DisplayRefreshMonitorMac(PlatformDisplayID displayID, WebPage& webPage)
     : DisplayRefreshMonitor(displayID)
-    , m_webPage(webPage)
+    , m_webPage(makeWeakPtr(webPage))
     , m_observerID(++m_counterID)
 {
 }
@@ -76,11 +76,19 @@
 
 DisplayRefreshMonitorMac::~DisplayRefreshMonitorMac()
 {
+    ASSERT(m_webPage);
+    if (!m_webPage)
+        return;
+    
     m_webPage->send(Messages::WebPageProxy::StopDisplayLink(m_observerID));
 }
 
 bool DisplayRefreshMonitorMac::requestRefreshCallback()
 {
+    ASSERT(m_webPage);
+    if (!m_webPage)
+        return false;
+
     if (!isActive())
         return false;
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to