Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 0b8cd1e53947aed4b0679d330162f563f190b828
https://github.com/WebKit/WebKit/commit/0b8cd1e53947aed4b0679d330162f563f190b828
Author: Brian Weinstein <[email protected]>
Date: 2022-12-14 (Wed, 14 Dec 2022)
Changed paths:
A Source/WebKit/Shared/Extensions/_WKWebExtensionUtilities.h
A Source/WebKit/Shared/Extensions/_WKWebExtensionUtilities.mm
M Source/WebKit/WebKit.xcodeproj/project.pbxproj
M
Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIWebNavigationEventCocoa.mm
M
Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIWebNavigationEvent.h
A
Source/WebKit/WebProcess/Extensions/Cocoa/_WKWebExtensionWebNavigationURLFilter.h
A
Source/WebKit/WebProcess/Extensions/Cocoa/_WKWebExtensionWebNavigationURLFilter.mm
M Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPIWebNavigation.mm
Log Message:
-----------
Add filtering for WebNavigation events.
https://bugs.webkit.org/show_bug.cgi?id=249258
rdar://102820594
Reviewed by Timothy Hatcher.
When a webNavigation event listener is added, parse and save the filter that
was included with the listener.
When attempting to fire a webNavigation event, check the given URL and see if
it passes the included filter.
The filter parsing + managing code is written in Objective-C, and more tests
are coming in upcoming patches.
* Source/WebKit/Shared/Extensions/_WKWebExtensionUtilities.h: Added.
* Source/WebKit/Shared/Extensions/_WKWebExtensionUtilities.mm: Added.
(classToClassString):
(+[_WKWebExtensionUtilities
validateContentsOfDictionary:requiredKeys:optionalKeys:keyToExpectedValueType:outExceptionString:]):
Validates
the contents of the given dictionary, checking for the presence of required
keys, possible optional keys, and type checking.
* Source/WebKit/WebKit.xcodeproj/project.pbxproj: Add new files.
*
Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIWebNavigationEventCocoa.mm:
(WebKit::WebExtensionAPIWebNavigationEvent::invokeListenersWithArgument): If
the listener has a filter, only invoke the listener if the filter
matches the target URL.
(WebKit::WebExtensionAPIWebNavigationEvent::addListener): Handle the filter.
(WebKit::WebExtensionAPIWebNavigationEvent::removeListener): Ditto.
(WebKit::WebExtensionAPIWebNavigationEvent::hasListener): Ditto.
* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIWebNavigationEvent.h:
Change the listener vector to a vector of pairs.
*
Source/WebKit/WebProcess/Extensions/Cocoa/_WKWebExtensionWebNavigationURLFilter.h:
Copied from
Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIWebNavigationEvent.h.
*
Source/WebKit/WebProcess/Extensions/Cocoa/_WKWebExtensionWebNavigationURLFilter.mm:
Added.
(-[_WKWebExtensionWebNavigationURLPredicate
initWithTypeString:value:outErrorMessage:]):
(-[_WKWebExtensionWebNavigationURLPredicate matchesURL:]):
(-[_WKWebExtensionWebNavigationURLFilter initWithDictionary:outErrorMessage:]):
(-[_WKWebExtensionWebNavigationURLFilter matchesURL:]):
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPIWebNavigation.mm:
(TestWebKitAPI::TEST): Add some basic tests around filtering.
Canonical link: https://commits.webkit.org/257875@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes