[webkit-changes] [WebKit/WebKit] c796ed: Add support for tabs.connect and runtime.connect i...

Timothy Hatcher noreply at github.com
Mon Sep 25 11:49:01 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: c796edb0c90214638dc7865d5e078eb04ea735af
      https://github.com/WebKit/WebKit/commit/c796edb0c90214638dc7865d5e078eb04ea735af
  Author: Timothy Hatcher <timothy at apple.com>
  Date:   2023-09-25 (Mon, 25 Sep 2023)

  Changed paths:
    M Source/WebKit/DerivedSources-input.xcfilelist
    M Source/WebKit/DerivedSources-output.xcfilelist
    M Source/WebKit/DerivedSources.make
    M Source/WebKit/Platform/cocoa/CocoaHelpers.h
    M Source/WebKit/Platform/cocoa/CocoaHelpers.mm
    M Source/WebKit/Scripts/webkit/messages.py
    M Source/WebKit/Scripts/webkit/tests/MessageArgumentDescriptions.cpp
    M Source/WebKit/Shared/Extensions/WebExtensionContentWorldType.h
    M Source/WebKit/Shared/Extensions/WebExtensionContentWorldType.serialization.in
    A Source/WebKit/Shared/Extensions/WebExtensionPortChannelIdentifier.h
    M Source/WebKit/Shared/Extensions/WebExtensionWindow.serialization.in
    M Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIEventCocoa.mm
    A Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIPortCocoa.mm
    M Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIRuntimeCocoa.mm
    M Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPITabsCocoa.mm
    M Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionCocoa.mm
    M Source/WebKit/UIProcess/Extensions/WebExtensionContext.h
    M Source/WebKit/UIProcess/Extensions/WebExtensionContext.messages.in
    M Source/WebKit/UIProcess/Extensions/WebExtensionWindow.h
    M Source/WebKit/WebKit.xcodeproj/project.pbxproj
    M Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIEventCocoa.mm
    A Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIPortCocoa.mm
    M Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIRuntimeCocoa.mm
    M Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPITabsCocoa.mm
    M Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIWebNavigationEventCocoa.mm
    M Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIWindowsEventCocoa.mm
    M Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIEvent.h
    M Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIObject.h
    A Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIPort.h
    M Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIRuntime.h
    M Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIScripting.h
    M Source/WebKit/WebProcess/Extensions/API/WebExtensionAPITabs.h
    M Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIWebNavigationEvent.h
    M Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIWindowsEvent.h
    M Source/WebKit/WebProcess/Extensions/Bindings/Cocoa/JSWebExtensionWrapperCocoa.mm
    M Source/WebKit/WebProcess/Extensions/Bindings/Scripts/CodeGeneratorExtensions.pm
    A Source/WebKit/WebProcess/Extensions/Interfaces/WebExtensionAPIPort.idl
    M Source/WebKit/WebProcess/Extensions/Interfaces/WebExtensionAPIRuntime.idl
    M Source/WebKit/WebProcess/Extensions/Interfaces/WebExtensionAPITabs.idl
    M Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.h
    M Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.messages.in
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPIRuntime.mm
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPITabs.mm

  Log Message:
  -----------
  Add support for tabs.connect and runtime.connect in Web Extensions.
https://bugs.webkit.org/show_bug.cgi?id=262022
rdar://115967048

Reviewed by Brian Weinstein.

* Added support for tabs.connect, tabs.onConnect, runtime.connect and runtime.onConnect.
* Added the WebExtensionAPIPort interface and implementation with onMessage and onDisconnect.
* Added support for unregistering all listeners, which is needed for ports since they can be
  garbaged collected and otherwise the UIProcess would think there are still port listeners.
* Improved the logging for function calls in the generator to log the world type (main vs content).
* Fixed generated code for ports since there is no optional callback last argument, but a optional
  last options argument instead.
* Fixed runtime.sendMessage, tabs.sendMessage and port.postMessage so the message can be any JSON
  value, not just object types. This matches Chrome and Firefox. Safari has always had this bug.

* Source/WebKit/DerivedSources-input.xcfilelist:
* Source/WebKit/DerivedSources-output.xcfilelist:
* Source/WebKit/DerivedSources.make:
* Source/WebKit/Platform/cocoa/CocoaHelpers.h:
(WebKit::parseJSON):
(WebKit::encodeJSONString):
(WebKit::encodeJSONData):
* Source/WebKit/Platform/cocoa/CocoaHelpers.mm:
(WebKit::toReadingImpl):
(WebKit::toWritingImpl):
(WebKit::parseJSON):
(WebKit::encodeJSONString):
(WebKit::encodeJSONData):
* Source/WebKit/Scripts/webkit/messages.py:
(serialized_identifiers):
* Source/WebKit/Scripts/webkit/tests/MessageArgumentDescriptions.cpp:
(IPC::serializedIdentifiers):
* Source/WebKit/Shared/Extensions/WebExtensionContentWorldType.h:
(WebKit::toDebugString):
* Source/WebKit/Shared/Extensions/WebExtensionContentWorldType.serialization.in:
* Source/WebKit/Shared/Extensions/WebExtensionPortChannelIdentifier.h: Added.
* Source/WebKit/Shared/Extensions/WebExtensionWindow.serialization.in:
* Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIEventCocoa.mm:
(WebKit::WebExtensionContext::addListener):
(WebKit::WebExtensionContext::removeListener):
* Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIPortCocoa.mm: Added.
(WebKit::WebExtensionContext::portPostMessage):
(WebKit::WebExtensionContext::portDisconnect):
(WebKit::WebExtensionContext::addPorts):
(WebKit::WebExtensionContext::isPortConnected):
(WebKit::WebExtensionContext::fireQueuedPortMessageEventIfNeeded):
(WebKit::WebExtensionContext::clearQueuedPortMessages):
(WebKit::WebExtensionContext::firePortDisconnectEventIfNeeded):
* Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIRuntimeCocoa.mm:
(WebKit::WebExtensionContext::runtimeSendMessage):
(WebKit::WebExtensionContext::runtimeConnect):
* Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPITabsCocoa.mm:
(WebKit::WebExtensionContext::tabsSendMessage):
(WebKit::WebExtensionContext::tabsConnect):
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionCocoa.mm:
(WebKit::WebExtension::parseManifest):
* Source/WebKit/UIProcess/Extensions/WebExtensionContext.h:
* Source/WebKit/UIProcess/Extensions/WebExtensionContext.messages.in:
* Source/WebKit/UIProcess/Extensions/WebExtensionWindow.h:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIEventCocoa.mm:
(WebKit::WebExtensionAPIEvent::addListener):
(WebKit::WebExtensionAPIEvent::removeListener):
(WebKit::WebExtensionAPIEvent::removeAllListeners):
* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIPortCocoa.mm: Added.
(WebKit::webExtensionPorts):
(WebKit::WebExtensionAPIPort::get):
(WebKit::WebExtensionAPIPort::add):
(WebKit::WebExtensionAPIPort::remove):
(WebKit::WebExtensionAPIPort::name):
(WebKit::WebExtensionAPIPort::sender):
(WebKit::WebExtensionAPIPort::error):
(WebKit::WebExtensionAPIPort::setError):
(WebKit::WebExtensionAPIPort::postMessage):
(WebKit::WebExtensionAPIPort::disconnect):
(WebKit::WebExtensionAPIPort::fireMessageEventIfNeeded):
(WebKit::WebExtensionAPIPort::fireDisconnectEventIfNeeded):
(WebKit::WebExtensionAPIPort::onMessage):
(WebKit::WebExtensionAPIPort::onDisconnect):
(WebKit::WebExtensionContextProxy::dispatchPortMessageEvent):
(WebKit::WebExtensionContextProxy::dispatchPortDisconnectEvent):
* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIRuntimeCocoa.mm:
(WebKit::WebExtensionAPIRuntimeBase::reportError):
(WebKit::WebExtensionAPIRuntime::parseConnectOptions):
(WebKit::WebExtensionAPIRuntime::lastError):
(WebKit::WebExtensionAPIRuntime::sendMessage):
(WebKit::WebExtensionAPIRuntime::connect):
(WebKit::WebExtensionAPIRuntime::onConnect):
(WebKit::toWebAPI):
(WebKit::WebExtensionContextProxy::internalDispatchRuntimeMessageEvent):
(WebKit::WebExtensionContextProxy::dispatchRuntimeMessageEvent):
(WebKit::WebExtensionContextProxy::internalDispatchRuntimeConnectEvent):
(WebKit::WebExtensionContextProxy::dispatchRuntimeConnectEvent):
(WebKit::WebExtensionAPIRuntimeBase::reportErrorForCallbackHandler): Deleted.
(WebKit::WebExtensionContextProxy::dispatchRuntimeMainWorldMessageEvent): Deleted.
(WebKit::WebExtensionContextProxy::dispatchRuntimeContentScriptMessageEvent): Deleted.
* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPITabsCocoa.mm:
(WebKit::WebExtensionAPITabs::parseConnectOptions):
(WebKit::WebExtensionAPITabs::sendMessage):
(WebKit::WebExtensionAPITabs::connect):
* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIWebNavigationEventCocoa.mm:
(WebKit::WebExtensionAPIWebNavigationEvent::addListener):
(WebKit::WebExtensionAPIWebNavigationEvent::removeListener):
(WebKit::WebExtensionAPIWebNavigationEvent::removeAllListeners):
* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIWindowsEventCocoa.mm:
(WebKit::WebExtensionAPIWindowsEvent::addListener):
(WebKit::WebExtensionAPIWindowsEvent::removeListener):
(WebKit::WebExtensionAPIWindowsEvent::removeAllListeners):
* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIEvent.h:
(WebKit::WebExtensionAPIEvent::~WebExtensionAPIEvent):
* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIObject.h:
* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIPort.h: Added.
(WebKit::WebExtensionAPIPort::targetContentWorldType const):
(WebKit::WebExtensionAPIPort::channelIdentifier const):
(WebKit::WebExtensionAPIPort::disconnected const):
(WebKit::WebExtensionAPIPort::WebExtensionAPIPort):
(WebKit::WebExtensionAPIPort::~WebExtensionAPIPort):
* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIRuntime.h:
* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIScripting.h:
* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPITabs.h:
* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIWebNavigationEvent.h:
(WebKit::WebExtensionAPIWebNavigationEvent::~WebExtensionAPIWebNavigationEvent):
* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIWindowsEvent.h:
(WebKit::WebExtensionAPIWindowsEvent::~WebExtensionAPIWindowsEvent):
* Source/WebKit/WebProcess/Extensions/Bindings/Cocoa/JSWebExtensionWrapperCocoa.mm:
(WebKit::WebExtensionCallbackHandler::reportError):
* Source/WebKit/WebProcess/Extensions/Bindings/Scripts/CodeGeneratorExtensions.pm:
(_generateImplementationFile):
(_installAutomaticExceptions):
(_javaScriptTypeCondition):
* Source/WebKit/WebProcess/Extensions/Interfaces/WebExtensionAPIPort.idl: Copied from Source/WebKit/Shared/Extensions/WebExtensionContentWorldType.h.
* Source/WebKit/WebProcess/Extensions/Interfaces/WebExtensionAPIRuntime.idl:
* Source/WebKit/WebProcess/Extensions/Interfaces/WebExtensionAPITabs.idl:
* Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.h:
* Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.messages.in:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPIRuntime.mm:
(TestWebKitAPI::TEST):
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPITabs.mm:
(TestWebKitAPI::TEST):

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




More information about the webkit-changes mailing list