[webkit-changes] [WebKit/WebKit] 24abd2: Clean up ModelProcessModelPlayerProxy properly in ...

Ada Chan noreply at github.com
Sat Sep 21 20:41:39 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 24abd21e0c1118fa539b2fbbd45796c110ec01da
      https://github.com/WebKit/WebKit/commit/24abd21e0c1118fa539b2fbbd45796c110ec01da
  Author: Ada Chan <adachan at apple.com>
  Date:   2024-09-21 (Sat, 21 Sep 2024)

  Changed paths:
    M Source/WebCore/Modules/model-element/HTMLModelElement.cpp
    M Source/WebCore/Modules/model-element/HTMLModelElement.h
    M Source/WebCore/Modules/model-element/ModelPlayer.h
    M Source/WebCore/Modules/model-element/ModelPlayerProvider.h
    M Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.cpp
    M Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.h
    M Source/WebCore/Modules/model-element/dummy/DummyModelPlayerProvider.cpp
    M Source/WebCore/Modules/model-element/dummy/DummyModelPlayerProvider.h
    M Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.h
    M Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.mm
    M Source/WebKit/ModelProcess/cocoa/WKModelProcessModelLayer.mm
    M Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.h
    M Source/WebKit/WebProcess/Model/ModelProcessModelPlayerManager.cpp
    M Source/WebKit/WebProcess/Model/ModelProcessModelPlayerManager.h
    M Source/WebKit/WebProcess/Model/WebModelPlayerProvider.cpp
    M Source/WebKit/WebProcess/Model/WebModelPlayerProvider.h

  Log Message:
  -----------
  Clean up ModelProcessModelPlayerProxy properly in the model process
https://bugs.webkit.org/show_bug.cgi?id=280128
rdar://136424138

Reviewed by Mike Wyrzykowski.

There are two reasons why ModelProcessModelPlayerProxy can’t get
released properly:

- ModelProcessModelPlayerManagerProxy never removes it from the
m_proxies hashmap
- There’s a strong reference cycle between ModelProcessModelPlayerProxy
and WKModelProcessModelLayer

When the HTMLModelElement is done with the ModelProcessModelPlayer, we need
to notify the model process to clean up the corresponding ModelProcessModelPlayerProxy.
HTMLModelElement::deleteModelPlayer() is added to handle that cleanup.
It calls ModelPlayerProvider::deleteModelPlayer(), which for the model process
case, calls ModelProcessModelPlayerManager::deleteModelProcessModelPlayer().
That cleans up the model player on the web process side and sends a message
to the model process to clean up the corresponding ModelProcessModelPlayerProxy.
ModelProcessModelPlayerProxy::invalidate() then sets the WKModelProcessModelLayer's
player to be null to break the reference cycle.

* Source/WebCore/Modules/model-element/HTMLModelElement.cpp:
(WebCore::HTMLModelElement::setSourceURL):
(WebCore::HTMLModelElement::deleteModelPlayer):
* Source/WebCore/Modules/model-element/HTMLModelElement.h:
* Source/WebCore/Modules/model-element/ModelPlayer.h:
* Source/WebCore/Modules/model-element/ModelPlayerProvider.h:
* Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.cpp:
(WebCore::DummyModelPlayer::identifier const):
* Source/WebCore/Modules/model-element/dummy/DummyModelPlayer.h:
* Source/WebCore/Modules/model-element/dummy/DummyModelPlayerProvider.cpp:
(WebCore::DummyModelPlayerProvider::deleteModelPlayer):
* Source/WebCore/Modules/model-element/dummy/DummyModelPlayerProvider.h:
* Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.h:
* Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.mm:
(WebKit::ModelProcessModelPlayerProxy::invalidate):
* Source/WebKit/ModelProcess/cocoa/WKModelProcessModelLayer.mm:
(-[WKModelProcessModelLayer setOpacity:]):
(-[WKModelProcessModelLayer layoutSublayers]):
* Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.h:
(WebKit::ModelProcessModelPlayer::identifier): Deleted.
* Source/WebKit/WebProcess/Model/ModelProcessModelPlayerManager.cpp:
(WebKit::ModelProcessModelPlayerManager::deleteModelProcessModelPlayer):
* Source/WebKit/WebProcess/Model/ModelProcessModelPlayerManager.h:
* Source/WebKit/WebProcess/Model/WebModelPlayerProvider.cpp:
(WebKit::WebModelPlayerProvider::deleteModelPlayer):
* Source/WebKit/WebProcess/Model/WebModelPlayerProvider.h:

Canonical link: https://commits.webkit.org/284048@main



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list