Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

EmberJS Web Extension fails to detect Ember application. #24899

Merged
merged 1 commit into from
Feb 21, 2024

Conversation

xeenon
Copy link
Contributor

@xeenon xeenon commented Feb 21, 2024

7c0a7f0

EmberJS Web Extension fails to detect Ember application.
https://webkit.org/b/269816
rdar://problem/123338506

Reviewed by Brian Weinstein.

DevTools extensions need to use a custom content world type, that is similar to
Main but distinct since it has less APIs. Previously we were just using the
ContentScript world type to limit the APIs. This prevented message passing
from being delivered properly to the Inspector pages.

We also need the pass the Inspector page, tab, and window identifiers to the
web process so browser.devtools.inspectedWindow.tabId returns the correct value.

* Source/WebKit/Shared/Extensions/WebExtensionContentWorldType.h:
(WebKit::toDebugString):
* Source/WebKit/Shared/Extensions/WebExtensionContentWorldType.serialization.in:
* Source/WebKit/Shared/Extensions/WebExtensionContextParameters.h:
* Source/WebKit/Shared/Extensions/WebExtensionContextParameters.serialization.in:
* Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIPortCocoa.mm:
(WebKit::WebExtensionContext::portPostMessage):
(WebKit::WebExtensionContext::firePortDisconnectEventIfNeeded):
* Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIRuntimeCocoa.mm:
(WebKit::WebExtensionContext::runtimeSendMessage):
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionContextCocoa.mm:
(WebKit::WebExtensionContext::inspectorPageIdentifiers const):
(WebKit::WebExtensionContext::wakeUpBackgroundContentIfNecessaryToFireEvents):
(WebKit::WebExtensionContext::loadInspectorBackgroundPage):
* Source/WebKit/UIProcess/Extensions/WebExtensionContext.cpp:
(WebKit::WebExtensionContext::parameters const):
(WebKit::WebExtensionContext::pageListensForEvent const):
(WebKit::WebExtensionContext::processes const):
* Source/WebKit/UIProcess/Extensions/WebExtensionContext.h:
(WebKit::WebExtensionContext::processes const):
(WebKit::WebExtensionContext::sendToProcessesForEvents const):
* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIRuntimeCocoa.mm:
(WebKit::WebExtensionContextProxy::dispatchRuntimeMessageEvent):
(WebKit::WebExtensionContextProxy::dispatchRuntimeConnectEvent):
* Source/WebKit/WebProcess/Extensions/Cocoa/WebExtensionContextProxyCocoa.mm:
(WebKit::WebExtensionContextProxy::toDOMWrapperWorld):
* Source/WebKit/WebProcess/Extensions/Cocoa/WebExtensionControllerProxyCocoa.mm:
(WebKit::WebExtensionControllerProxy::globalObjectIsAvailableForFrame):
* Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.cpp:
(WebKit::WebExtensionContextProxy::tabIdentifier const):
(WebKit::WebExtensionContextProxy::addInspectorPage):
(WebKit::WebExtensionContextProxy::addInspectorPageIdentifier):
* Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.h:
* Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.messages.in:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPIDevTools.mm:
(TEST(WKWebExtensionAPIDevTools, MessagePassingToBackground)): Added.
(TEST(WKWebExtensionAPIDevTools, MessagePassingFromPanelToBackground)): Added.
(TEST(WKWebExtensionAPIDevTools, MessagePassingFromPanelToDevToolsBackground)): Added.
(TEST(WKWebExtensionAPIDevTools, PortMessagePassingToBackground)): Added.
(TEST(WKWebExtensionAPIDevTools, PortMessagePassingFromPanelToBackground)): Added.
(TEST(WKWebExtensionAPIDevTools, PortMessagePassingFromPanelToDevToolsBackground)): Added.

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

593374d

Misc iOS, tvOS & watchOS macOS Linux Windows
βœ… πŸ§ͺ style βœ… πŸ›  ios   πŸ›  mac βœ… πŸ›  wpe   πŸ›  wincairo
❌ πŸ§ͺ bindings βœ… πŸ›  ios-sim βœ… πŸ›  mac-AS-debug   πŸ§ͺ wpe-wk2
❌ πŸ§ͺ webkitperl   πŸ§ͺ ios-wk2   πŸ§ͺ api-mac   πŸ§ͺ api-wpe
  πŸ§ͺ ios-wk2-wpt   πŸ§ͺ mac-wk1 βœ… πŸ›  gtk
  πŸ§ͺ api-ios   πŸ§ͺ mac-wk2   πŸ§ͺ gtk-wk2
  πŸ›  tv   πŸ§ͺ mac-AS-debug-wk2   πŸ§ͺ api-gtk
  πŸ›  tv-sim   πŸ§ͺ mac-wk2-stress
  πŸ›  watch
βœ… πŸ›  πŸ§ͺ unsafe-merge   πŸ›  watch-sim

@xeenon xeenon self-assigned this Feb 21, 2024
@xeenon xeenon added the WebKit Extensions Bugs related to extension support. label Feb 21, 2024
Copy link
Contributor

@b-weinstein b-weinstein left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice tests!

@xeenon xeenon added the unsafe-merge-queue Applied to send a pull request to merge-queue, but skip building and testing label Feb 21, 2024
https://webkit.org/b/269816
rdar://problem/123338506

Reviewed by Brian Weinstein.

DevTools extensions need to use a custom content world type, that is similar to
Main but distinct since it has less APIs. Previously we were just using the
ContentScript world type to limit the APIs. This prevented message passing
from being delivered properly to the Inspector pages.

We also need the pass the Inspector page, tab, and window identifiers to the
web process so browser.devtools.inspectedWindow.tabId returns the correct value.

* Source/WebKit/Shared/Extensions/WebExtensionContentWorldType.h:
(WebKit::toDebugString):
* Source/WebKit/Shared/Extensions/WebExtensionContentWorldType.serialization.in:
* Source/WebKit/Shared/Extensions/WebExtensionContextParameters.h:
* Source/WebKit/Shared/Extensions/WebExtensionContextParameters.serialization.in:
* Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIPortCocoa.mm:
(WebKit::WebExtensionContext::portPostMessage):
(WebKit::WebExtensionContext::firePortDisconnectEventIfNeeded):
* Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIRuntimeCocoa.mm:
(WebKit::WebExtensionContext::runtimeSendMessage):
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionContextCocoa.mm:
(WebKit::WebExtensionContext::inspectorPageIdentifiers const):
(WebKit::WebExtensionContext::wakeUpBackgroundContentIfNecessaryToFireEvents):
(WebKit::WebExtensionContext::loadInspectorBackgroundPage):
* Source/WebKit/UIProcess/Extensions/WebExtensionContext.cpp:
(WebKit::WebExtensionContext::parameters const):
(WebKit::WebExtensionContext::pageListensForEvent const):
(WebKit::WebExtensionContext::processes const):
* Source/WebKit/UIProcess/Extensions/WebExtensionContext.h:
(WebKit::WebExtensionContext::processes const):
(WebKit::WebExtensionContext::sendToProcessesForEvents const):
* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIRuntimeCocoa.mm:
(WebKit::WebExtensionContextProxy::dispatchRuntimeMessageEvent):
(WebKit::WebExtensionContextProxy::dispatchRuntimeConnectEvent):
* Source/WebKit/WebProcess/Extensions/Cocoa/WebExtensionContextProxyCocoa.mm:
(WebKit::WebExtensionContextProxy::toDOMWrapperWorld):
* Source/WebKit/WebProcess/Extensions/Cocoa/WebExtensionControllerProxyCocoa.mm:
(WebKit::WebExtensionControllerProxy::globalObjectIsAvailableForFrame):
* Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.cpp:
(WebKit::WebExtensionContextProxy::tabIdentifier const):
(WebKit::WebExtensionContextProxy::addInspectorPage):
(WebKit::WebExtensionContextProxy::addInspectorPageIdentifier):
* Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.h:
* Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.messages.in:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPIDevTools.mm:
(TEST(WKWebExtensionAPIDevTools, MessagePassingToBackground)): Added.
(TEST(WKWebExtensionAPIDevTools, MessagePassingFromPanelToBackground)): Added.
(TEST(WKWebExtensionAPIDevTools, MessagePassingFromPanelToDevToolsBackground)): Added.
(TEST(WKWebExtensionAPIDevTools, PortMessagePassingToBackground)): Added.
(TEST(WKWebExtensionAPIDevTools, PortMessagePassingFromPanelToBackground)): Added.
(TEST(WKWebExtensionAPIDevTools, PortMessagePassingFromPanelToDevToolsBackground)): Added.

Canonical link: https://commits.webkit.org/275135@main
@webkit-commit-queue
Copy link
Collaborator

Committed 275135@main (7c0a7f0): https://commits.webkit.org/275135@main

Reviewed commits have been landed. Closing PR #24899 and removing active labels.

@webkit-commit-queue webkit-commit-queue merged commit 7c0a7f0 into WebKit:main Feb 21, 2024
@webkit-commit-queue webkit-commit-queue removed the unsafe-merge-queue Applied to send a pull request to merge-queue, but skip building and testing label Feb 21, 2024
@xeenon xeenon deleted the bug/269816 branch February 21, 2024 23:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
WebKit Extensions Bugs related to extension support.
Projects
None yet
4 participants