Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for Web Extensions permissions.request() API. #8333

Commits on Feb 16, 2023

  1. 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
    kiaraarose committed Feb 16, 2023
    Configuration menu
    Copy the full SHA
    65e4c3d View commit details
    Browse the repository at this point in the history