Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 109d3f887b571085b14b333091e7283dacc7f8b1
      
https://github.com/WebKit/WebKit/commit/109d3f887b571085b14b333091e7283dacc7f8b1
  Author: Timothy Hatcher <[email protected]>
  Date:   2025-06-12 (Thu, 12 Jun 2025)

  Changed paths:
    M Source/WebCore/bindings/js/DOMWrapperWorld.h
    M Source/WebCore/dom/Element.cpp
    M Source/WebCore/dom/Element.h
    M Source/WebCore/dom/Element.idl
    M Source/WebCore/dom/Event.cpp
    M Source/WebKit/CMakeLists.txt
    M Source/WebKit/DerivedSources-input.xcfilelist
    M Source/WebKit/DerivedSources-output.xcfilelist
    M Source/WebKit/DerivedSources.make
    M Source/WebKit/WebKit.xcodeproj/project.pbxproj
    A Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIDOMCocoa.mm
    M 
Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPINamespaceCocoa.mm
    A Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIDOM.h
    M Source/WebKit/WebProcess/Extensions/API/WebExtensionAPINamespace.h
    M 
Source/WebKit/WebProcess/Extensions/Cocoa/WebExtensionControllerProxyCocoa.mm
    A Source/WebKit/WebProcess/Extensions/Interfaces/WebExtensionAPIDOM.idl
    M 
Source/WebKit/WebProcess/Extensions/Interfaces/WebExtensionAPINamespace.idl
    M Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.cpp
    M Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.h
    M 
Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorld.mm
    M Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp
    M Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.h
    M Source/WebKit/WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp
    M Source/WebKit/WebProcess/InjectedBundle/InjectedBundleScriptWorld.h
    M Tools/TestWebKitAPI/SourcesCocoa.txt
    M Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
    A Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPIDOM.mm
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPITest.mm

  Log Message:
  -----------
  Add support for dom.openOrClosedShadowRoot() and 
element.openOrClosedShadowRoot.
https://webkit.org/b/294340
rdar://problem/153118095

Reviewed by Ryosuke Niwa.

Chrome supports `dom.openOrClosedShadowRoot()`, and Firefox supports 
`element.openOrClosedShadowRoot`.
Both APIs allow the same access to closed shadow roots from the extension 
content script world.

By adding a new `closedShadowRootIsExposedForExtensions` option on 
`DOMWrapperWorld` for extension content
script worlds, we can support both APIs with minimal additional work. We want 
to support both for broad
compatibility with existing extensions.

Added tests for both APIs.

This fixes the following WECG issue for Safari: 
https://github.com/w3c/webextensions/issues/815

* Source/WebCore/bindings/js/DOMWrapperWorld.h:
(WebCore::DOMWrapperWorld::canAccessAnyShadowRoot const): Added.
(WebCore::DOMWrapperWorld::setClosedShadowRootIsExposedForExtensions): Added.
(WebCore::DOMWrapperWorld::closedShadowRootIsExposedForExtensions const): Added.
* Source/WebCore/dom/Element.cpp:
(WebCore::Element::openOrClosedShadowRoot const): Added.
* Source/WebCore/dom/Element.h:
* Source/WebCore/dom/Element.idl:
* Source/WebCore/dom/Event.cpp:
(WebCore::Event::composedPath const): Use canAccessAnyShadowRoot().
* Source/WebKit/CMakeLists.txt: Added WebExtensionAPIDOM.
* Source/WebKit/DerivedSources-input.xcfilelist: Updated.
* Source/WebKit/DerivedSources-output.xcfilelist: Updated.
* Source/WebKit/DerivedSources.make: Added WebExtensionAPIDOM.
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIDOMCocoa.mm: 
Copied from Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.h.
(WebKit::WebExtensionAPIDOM::openOrClosedShadowRoot):
* 
Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPINamespaceCocoa.mm:
(WebKit::WebExtensionAPINamespace::dom):
* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIDOM.h: Added.
* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPINamespace.h:
* Source/WebKit/WebProcess/Extensions/Cocoa/WebExtensionControllerProxyCocoa.mm:
(WebKit::WebExtensionControllerProxy::globalObjectIsAvailableForFrame):
* Source/WebKit/WebProcess/Extensions/Interfaces/WebExtensionAPIDOM.idl: Added.
* Source/WebKit/WebProcess/Extensions/Interfaces/WebExtensionAPINamespace.idl:
* Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.cpp:
(WebKit::WebExtensionContextProxy::setContentScriptWorld):
* Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.h:
* 
Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorld.mm:
(-[WKWebProcessPlugInScriptWorld exposeClosedShadowRootsForExtensions]): Added.
* Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp:
(WKBundleScriptWorldExposeClosedShadowRootsForExtensions): Added.
* Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.h:
* Source/WebKit/WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp:
(WebKit::InjectedBundleScriptWorld::exposeClosedShadowRootsForExtensions): 
Added.
* Source/WebKit/WebProcess/InjectedBundle/InjectedBundleScriptWorld.h:
* Tools/TestWebKitAPI/SourcesCocoa.txt: Added WKWebExtensionAPIDOM.mm.
* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPIDOM.mm: Added.
(TestWebKitAPI::TEST(WKWebExtensionAPIDOM, OpenOrClosedShadowRoot)): Added.
(TestWebKitAPI::TEST(WKWebExtensionAPIDOM, OpenOrClosedShadowRootViaElement)): 
Added.
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPITest.mm: Added missing 
include.

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to