Changeset 232884 in webkit


Ignore:
Timestamp:
Jun 15, 2018 11:47:32 AM (6 years ago)
Author:
pvollan@apple.com
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):

Location:
trunk/Source/WebKit
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r232881 r232884  
     12018-06-15  Per Arne Vollan  <pvollan@apple.com>
     2
     3        DisplayRefreshMonitorMac should hold a weak pointer to WebPage.
     4        https://bugs.webkit.org/show_bug.cgi?id=186683
     5
     6        Reviewed by Brent Fulgham.
     7
     8        Instead of DisplayRefreshMonitorMac having a RefPtr to WebPage, it should have a weak pointer.
     9        Having a RefPtr could in theory create reference cycles. This potential problem has not been
     10        observed in practice, but it is safer to use a weak pointer.
     11
     12        * WebProcess/WebPage/WebPage.h:
     13        * WebProcess/WebPage/mac/DrawingAreaMac.cpp:
     14        (WebKit::DisplayRefreshMonitorMac::DisplayRefreshMonitorMac):
     15        (WebKit::DisplayRefreshMonitorMac::~DisplayRefreshMonitorMac):
     16        (WebKit::DisplayRefreshMonitorMac::requestRefreshCallback):
     17
    1182018-06-15  Carlos Alberto Lopez Perez  <clopez@igalia.com>
    219
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.h

    r232730 r232884  
    247247using WKEventModifiers = uint32_t;
    248248
    249 class WebPage : public API::ObjectImpl<API::Object::Type::BundlePage>, public IPC::MessageReceiver, public IPC::MessageSender {
     249class WebPage : public API::ObjectImpl<API::Object::Type::BundlePage>, public IPC::MessageReceiver, public IPC::MessageSender, public CanMakeWeakPtr<WebPage> {
    250250public:
    251251    static Ref<WebPage> create(uint64_t pageID, WebPageCreationParameters&&);
  • trunk/Source/WebKit/WebProcess/WebPage/mac/DrawingAreaMac.cpp

    r232652 r232884  
    5858    bool hasRequestedRefreshCallback() const override { return m_hasSentMessage; }
    5959
    60     Ref<WebPage> m_webPage;
     60    WeakPtr<WebPage> m_webPage;
    6161    bool m_hasSentMessage { false };
    6262    unsigned m_observerID;
     
    7070DisplayRefreshMonitorMac::DisplayRefreshMonitorMac(PlatformDisplayID displayID, WebPage& webPage)
    7171    : DisplayRefreshMonitor(displayID)
    72     , m_webPage(webPage)
     72    , m_webPage(makeWeakPtr(webPage))
    7373    , m_observerID(++m_counterID)
    7474{
     
    7777DisplayRefreshMonitorMac::~DisplayRefreshMonitorMac()
    7878{
     79    ASSERT(m_webPage);
     80    if (!m_webPage)
     81        return;
     82   
    7983    m_webPage->send(Messages::WebPageProxy::StopDisplayLink(m_observerID));
    8084}
     
    8286bool DisplayRefreshMonitorMac::requestRefreshCallback()
    8387{
     88    ASSERT(m_webPage);
     89    if (!m_webPage)
     90        return false;
     91
    8492    if (!isActive())
    8593        return false;
Note: See TracChangeset for help on using the changeset viewer.