[webkit-changes] [WebKit/WebKit] 65e4c3: Add support for Web Extensions permissions.request...

kiaraarose noreply at github.com
Thu Feb 16 08:53:35 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 65e4c3db6cba94a2f2d131433033cf3e15f30c1a
      https://github.com/WebKit/WebKit/commit/65e4c3db6cba94a2f2d131433033cf3e15f30c1a
  Author: Kiara Rose <kiara_rose at apple.com>
  Date:   2023-02-16 (Thu, 16 Feb 2023)

  Changed paths:
    M Source/WebKit/Platform/cocoa/CocoaHelpers.h
    M Source/WebKit/Platform/cocoa/CocoaHelpers.mm
    M Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionControllerDelegate.h
    M Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIEventCocoa.mm
    M Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIPermissionsCocoa.mm
    M Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionContextCocoa.mm
    M Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionControllerCocoa.mm
    M Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionMatchPatternCocoa.mm
    M Source/WebKit/UIProcess/Extensions/WebExtensionContext.h
    M Source/WebKit/UIProcess/Extensions/WebExtensionMatchPattern.h
    M Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIPermissionsCocoa.mm
    M Source/WebKit/WebProcess/Extensions/Cocoa/WebExtensionContextProxyCocoa.mm
    M Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.h
    M Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.messages.in
    M Tools/TestWebKitAPI/SourcesCocoa.txt
    M Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
    A Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPIPermissions.mm
    A Tools/TestWebKitAPI/cocoa/TestWebExtensionsDelegate.h
    A Tools/TestWebKitAPI/cocoa/TestWebExtensionsDelegate.mm

  Log Message:
  -----------
  Add support for Web Extensions permissions.request() API.
https://bugs.webkit.org/show_bug.cgi?id=250135
Reviewed by Timothy Hatcher.

This patch implements the permissions.request() API. This includes delegating the action of requesting
permissions from the users to the browsers. Once that action has been fulfilled and the user grants
all requested permissions, we add them to the extension's granted permissions and match pattern sets.

* Source/WebKit/Platform/cocoa/CocoaHelpers.h:
* Source/WebKit/Platform/cocoa/CocoaHelpers.mm:
(WebKit::toAPI): Helper method to convert from HashSet<String> to NSSet<String>.
(WebKit::toAPIArray):Helper method to convert from HashSet<String> to NSArray<String>.

* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionControllerDelegate.h:
Define the delegate methods used to prompt users to grant permissions.

* Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIEventCocoa.mm:
Remove unnecessary file import.

* Source/WebKit/UIProcess/Extensions/Cocoa/API/WebExtensionContextAPIPermissionsCocoa.mm:
(WebKit::WebExtensionContext::permissionsContains):

(WebKit::WebExtensionContext::permissionsRequest):
Call delegate methods to determine if permissions should be granted.

(WebKit::WebExtensionContext::permissionsRemove):

(WebKit::WebExtensionContext::firePermissionsEventListenerIfNecessary):
Fire permissions onAdded or onRemoved events if permissions are granted or removed.

(WebKit::WebExtensionContext::parseMatchPatterns): Deleted.

* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionContextCocoa.mm:
(WebKit::WebExtensionContext::postAsyncNotification):
Call firePermissionsEventListenerIfNecessary whenever a notification is posted for a change in an
extension's permissions.

(WebKit::WebExtensionContext::hasPermissions):
(WebKit::WebExtensionContext::wakeUpBackgroundContentIfNecessaryToFireEvents):
`fireEvents` isn’t an accurate name for this method since it doesn’t actually fire any events.
We should rename this to better describe what’s happening in this method
(WebKit::WebExtensionContext::fireEvents): Deleted.

* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionControllerCocoa.mm:
(WebKit::WebExtensionController::didStartProvisionalLoadForFrame):
(WebKit::WebExtensionController::didCommitLoadForFrame):
(WebKit::WebExtensionController::didFinishLoadForFrame):
(WebKit::WebExtensionController::didFailLoadForFrame):

* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionMatchPatternCocoa.mm:
(WebKit::WebExtensionMatchPattern::matchPatternStrings):
(WebKit::WebExtensionMatchPattern::matchPatternsForOrigins):

* Source/WebKit/UIProcess/Extensions/WebExtensionContext.h:
* Source/WebKit/UIProcess/Extensions/WebExtensionMatchPattern.h:
* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIPermissionsCocoa.mm:
Validate permissions details for these APIs.
(WebKit::WebExtensionAPIPermissions::contains):
(WebKit::WebExtensionAPIPermissions::request):
(WebKit::WebExtensionAPIPermissions::remove):
(WebKit::WebExtensionAPIPermissions::verifyRequestedPermissions):

(WebKit::WebExtensionAPIPermissions::onAdded):
(WebKit::WebExtensionAPIPermissions::onRemoved):
Pass in the WebExtensionEventListenerType when creating these events.

* Source/WebKit/WebProcess/Extensions/Cocoa/WebExtensionContextProxyCocoa.mm:
(WebKit::WebExtensionContextProxy::dispatchPermissionsEvent):
Enumerate through the namespace objects and invoke the listeners for the event listener.

* Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.h:
* Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.messages.in:
* Tools/TestWebKitAPI/SourcesCocoa.txt:
* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPIPermissions.mm: Added.
(TestWebKitAPI::runScriptWithUserGesture):
(TestWebKitAPI::TEST):
Add WebKit tests for Permissions API.

* Tools/TestWebKitAPI/cocoa/TestWebExtensionsDelegate.h:
Copied from Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionControllerDelegate.h.

* Tools/TestWebKitAPI/cocoa/TestWebExtensionsDelegate.mm:
Copied from Source/WebKit/WebProcess/Extensions/WebExtensionContextProxy.messages.in.
(-[TestWebExtensionsDelegate
webExtensionController:promptForPermissions:inTab:forExtensionContext:completionHandler:]):
(-[TestWebExtensionsDelegate
webExtensionController:promptForPermissionMatchPatterns:inTab:forExtensionContext:completionHandler:]):

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




More information about the webkit-changes mailing list