[webkit-changes] [WebKit/WebKit] ba5431: Add Web Extension API to support conditionally all...

Timothy Hatcher noreply at github.com
Fri Oct 6 16:53:30 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: ba5431e64e76f654740b95a1f454ee55a1c3b58e
      https://github.com/WebKit/WebKit/commit/ba5431e64e76f654740b95a1f454ee55a1c3b58e
  Author: Timothy Hatcher <timothy at apple.com>
  Date:   2023-10-06 (Fri, 06 Oct 2023)

  Changed paths:
    M Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionContext.h
    M Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionContext.mm
    M Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionWindow.h
    M Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionWindowCreationOptions.h
    M Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPITabsCocoa.mm
    M Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIWindowsCocoa.mm
    M Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionContextCocoa.mm
    M Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionControllerCocoa.mm
    M Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionTabCocoa.mm
    M Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionWindowCocoa.mm
    M Source/WebKit/UIProcess/Extensions/WebExtensionContext.h
    M Source/WebKit/UIProcess/Extensions/WebExtensionController.h
    M Source/WebKit/UIProcess/Extensions/WebExtensionTab.h
    M Source/WebKit/UIProcess/Extensions/WebExtensionWindow.h
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPITabs.mm
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPIWindows.mm
    M Tools/TestWebKitAPI/cocoa/WebExtensionUtilities.h
    M Tools/TestWebKitAPI/cocoa/WebExtensionUtilities.mm

  Log Message:
  -----------
  Add Web Extension API to support conditionally allowing extensions in private windows and tabs.
https://webkit.org/b/262812
rdar://problem/116598191

Reviewed by Brian Weinstein.

- Added a `hasAccessInPrivateBrowsing` property to `_WKWebExtensionContext` so an extension can
  be given access to private windows and tabs or just normal windows and tabs.
- Segregate the `UserContentControllers` so we don't inject content into private tabs when the
  extension does not have access.
- Prevent returning the window when creating a private window.
- Don't fire events if the extension does not have access to that window or tab.
- Don't include tabs in `tabs.query` results when access isn't granted.
- Don't include windows in `windows.getAll` if access isn't granted.
- Also prevent getting a window or tab by ID if access isn't granted.
- Adopted `makeBlockPtr` in all delegate calls to avoid memory issues if the block escapes.

* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionContext.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionContext.mm:
(-[_WKWebExtensionContext hasAccessInPrivateBrowsing]): Added.
(-[_WKWebExtensionContext setHasAccessInPrivateBrowsing:]): Added.
(-[_WKWebExtensionContext focusedWindow]): Ignore access since this is native API.
* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionWindow.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionWindowCreationOptions.h:
* Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPITabsCocoa.mm:
(WebKit::WebExtensionContext::tabsCreate):
(WebKit::WebExtensionContext::tabsCaptureVisibleTab):
* Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIWindowsCocoa.mm:
(WebKit::WebExtensionContext::windowsCreate):
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionContextCocoa.mm:
(WebKit::WebExtensionContext::getWindow):
(WebKit::WebExtensionContext::getTab):
(WebKit::WebExtensionContext::openWindows const):
(WebKit::WebExtensionContext::focusedWindow):
(WebKit::WebExtensionContext::frontmostWindow):
(WebKit::WebExtensionContext::didOpenWindow):
(WebKit::WebExtensionContext::didCloseWindow):
(WebKit::WebExtensionContext::didFocusWindow):
(WebKit::WebExtensionContext::didOpenTab):
(WebKit::WebExtensionContext::didCloseTab):
(WebKit::WebExtensionContext::didActivateTab):
(WebKit::WebExtensionContext::didSelectOrDeselectTabs):
(WebKit::WebExtensionContext::didMoveTab):
(WebKit::WebExtensionContext::didReplaceTab):
(WebKit::WebExtensionContext::didChangeTabProperties):
(WebKit::WebExtensionContext::addInjectedContent):
(WebKit::WebExtensionContext::removeInjectedContent):
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionControllerCocoa.mm:
(WebKit::WebExtensionController::addPage):
(WebKit::WebExtensionController::removePage):
(WebKit::WebExtensionController::addUserContentController):
(WebKit::WebExtensionController::removeUserContentController):
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionTabCocoa.mm:
(WebKit::WebExtensionTab::WebExtensionTab):
(WebKit::WebExtensionTab::parameters const):
(WebKit::WebExtensionTab::changedParameters const):
(WebKit::WebExtensionTab::matches const):
(WebKit::WebExtensionTab::extensionHasAccess const):
(WebKit::WebExtensionTab::extensionHasPermission const):
(WebKit::WebExtensionTab::setParentTab):
(WebKit::WebExtensionTab::pin):
(WebKit::WebExtensionTab::unpin):
(WebKit::WebExtensionTab::isPrivate const):
(WebKit::WebExtensionTab::toggleReaderMode):
(WebKit::WebExtensionTab::mute):
(WebKit::WebExtensionTab::unmute):
(WebKit::WebExtensionTab::setZoomFactor):
(WebKit::WebExtensionTab::detectWebpageLocale):
(WebKit::WebExtensionTab::loadURL):
(WebKit::WebExtensionTab::reload):
(WebKit::WebExtensionTab::reloadFromOrigin):
(WebKit::WebExtensionTab::goBack):
(WebKit::WebExtensionTab::goForward):
(WebKit::WebExtensionTab::activate):
(WebKit::WebExtensionTab::select):
(WebKit::WebExtensionTab::deselect):
(WebKit::WebExtensionTab::duplicate):
(WebKit::WebExtensionTab::close):
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionWindowCocoa.mm:
(WebKit::WebExtensionWindow::matches const):
(WebKit::WebExtensionWindow::extensionHasAccess const):
(WebKit::WebExtensionWindow::setState):
(WebKit::WebExtensionWindow::focus):
(WebKit::WebExtensionWindow::isPrivate const):
(WebKit::WebExtensionWindow::setFrame):
(WebKit::WebExtensionWindow::close):
* Source/WebKit/UIProcess/Extensions/WebExtensionContext.h:
(WebKit::WebExtensionContext::hasAccessInPrivateBrowsing const):
(WebKit::WebExtensionContext::setHasAccessInPrivateBrowsing):
* Source/WebKit/UIProcess/Extensions/WebExtensionController.h:
(WebKit::WebExtensionController::allUserContentControllers const):
(WebKit::WebExtensionController::normalUserContentControllers const):
* Source/WebKit/UIProcess/Extensions/WebExtensionTab.h:
* Source/WebKit/UIProcess/Extensions/WebExtensionWindow.h:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPITabs.mm:
(TestWebKitAPI::TEST):
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPIWindows.mm:
(TestWebKitAPI::TEST):
* Tools/TestWebKitAPI/cocoa/WebExtensionUtilities.h:
* Tools/TestWebKitAPI/cocoa/WebExtensionUtilities.mm:
(-[TestWebExtensionManager initForExtension:]):
(-[TestWebExtensionManager openNewWindow]):
(-[TestWebExtensionManager openNewWindowUsingPrivateBrowsing:]):
(userContentController):
(-[TestWebExtensionTab initWithWindow:extensionController:]):
(-[TestWebExtensionWindow init]):
(-[TestWebExtensionWindow initWithExtensionController:usesPrivateBrowsing:]):
(-[TestWebExtensionWindow initWithExtensionController:]): Deleted.

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




More information about the webkit-changes mailing list