Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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
- Loading branch information