[webkit-changes] [WebKit/WebKit] a3e842: Messages sent to a Web Extension port should not b...
Timothy Hatcher
noreply at github.com
Fri Feb 9 16:50:26 PST 2024
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: a3e8427b4707498583267f2f0b9f42f82ec0f30a
https://github.com/WebKit/WebKit/commit/a3e8427b4707498583267f2f0b9f42f82ec0f30a
Author: Timothy Hatcher <timothy at apple.com>
Date: 2024-02-09 (Fri, 09 Feb 2024)
Changed paths:
M Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIPortCocoa.mm
M Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionMessagePortCocoa.mm
M Source/WebKit/UIProcess/Extensions/WebExtensionContext.h
M Source/WebKit/UIProcess/Extensions/WebExtensionContext.messages.in
M 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/WebExtensionAPIPort.h
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:
-----------
Messages sent to a Web Extension port should not be delivered to itself.
https://webkit.org/b/269049
rdar://122583434
Reviewed by Brian Weinstein.
Track the port's owning page proxy identifier, to identify the sending page, and
then prevent ports from delivering a message to its own page. This was causing a
loop because the ports array in the same extension web process had both the sender
and receiver port. Also make sure the port's sender is null when it is the port
returned by calling tabs.connect() or runtime.connect().
* Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIPortCocoa.mm:
(WebKit::WebExtensionContext::portPostMessage):
(WebKit::WebExtensionContext::fireQueuedPortMessageEventsIfNeeded):
(WebKit::WebExtensionContext::sendQueuedNativePortMessagesIfNeeded):
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionMessagePortCocoa.mm:
(WebKit::WebExtensionMessagePort::sendMessage):
* Source/WebKit/UIProcess/Extensions/WebExtensionContext.h:
* Source/WebKit/UIProcess/Extensions/WebExtensionContext.messages.in:
* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIPortCocoa.mm:
(WebKit::WebExtensionAPIPort::postMessage):
(WebKit::WebExtensionContextProxy::dispatchPortMessageEvent):
(WebKit::WebExtensionContextProxy::dispatchPortDisconnectEvent):
* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIRuntimeCocoa.mm:
(WebKit::WebExtensionAPIRuntime::sendMessage):
(WebKit::WebExtensionAPIRuntime::connect):
(WebKit::WebExtensionAPIRuntime::connectNative):
(WebKit::WebExtensionContextProxy::internalDispatchRuntimeConnectEvent):
* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPITabsCocoa.mm:
(WebKit::WebExtensionAPITabs::sendMessage):
(WebKit::WebExtensionAPITabs::connect):
* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIPort.h:
(WebKit::WebExtensionAPIPort::owningPageProxyIdentifier const): Added.
(WebKit::WebExtensionAPIPort::senderParameters const): Added.
(WebKit::WebExtensionAPIPort::WebExtensionAPIPort):
* Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.h:
* Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.messages.in:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPIRuntime.mm:
(TEST(WKWebExtensionAPIRuntime, ConnectFromPopup)): Added.
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPITabs.mm:
(TestWebKitAPI::TEST): Added sender checks.
Canonical link: https://commits.webkit.org/274403@main
More information about the webkit-changes
mailing list