[webkit-changes] [WebKit/WebKit] 70c03f: Use UserContentURLPattern as the backing for WebEx...

Timothy Hatcher noreply at github.com
Tue Jan 17 16:57:01 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 70c03f5cf50d47716f2ef5f2b11c6452f0a9f216
      https://github.com/WebKit/WebKit/commit/70c03f5cf50d47716f2ef5f2b11c6452f0a9f216
  Author: Timothy Hatcher <timothy at apple.com>
  Date:   2023-01-17 (Tue, 17 Jan 2023)

  Changed paths:
    M Source/WebCore/page/UserContentURLPattern.cpp
    M Source/WebCore/page/UserContentURLPattern.h
    M Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionMatchPattern.mm
    M Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionMatchPatternCocoa.mm
    M Source/WebKit/UIProcess/Extensions/WebExtensionMatchPattern.h
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/WKContentExtensionStore.mm
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionMatchPattern.mm

  Log Message:
  -----------
  Use UserContentURLPattern as the backing for WebExtensionMatchPattern.
https://bugs.webkit.org/show_bug.cgi?id=250624

Reviewed by Brian Weinstein.

WebExtensionMatchPattern has been made a thin wrapper around UserContentURLPattern by creating an internal pattern and using
UserContentURLPattern's matching methods to support WebExtensionMatchPattern's matching options (ignoring scheme, path, etc).

UserContentURLPattern now only matches HTTP-family schemes with the '*' scheme for Web Extensions compatibility. This change
impacted a few API tests that expected '*://*/*' to match custom schemes. I've changed those tests to use the expected scheme.
Extensions and apps are not be impacted since HTTP-family URLs match like before, and only Safari specific SPIs use or expose
the UserContentURLPattern class and matching.

UserContentURLPattern now normalizes 'file://localhost/*' to 'file:///*' to match how URLParser parses URLs, so that matching
these URLs work universally. Additionally, hosts are now supported for file URLs, as expected by some unit tests.

Creating a pattern with the three components (scheme, host, path) is now supported.

This is significantly more efficient for WebExtensionMatchPattern. It has been observed to be 17x faster in a micro-benchmark.

* Source/WebCore/page/UserContentURLPattern.cpp:
(WebCore::UserContentURLPattern::UserContentURLPattern): Added.
(WebCore::UserContentURLPattern::operator== const): Added.
(WebCore::UserContentURLPattern::normalizeHostAndSetMatchSubdomains): Added.
(WebCore::UserContentURLPattern::parse): Use normalizeHostAndSetMatchSubdomains and return errors instead of bool.
(WebCore::UserContentURLPattern::originalHost const): Added.
(WebCore::UserContentURLPattern::matches const):
(WebCore::UserContentURLPattern::matchesScheme const):
(WebCore::UserContentURLPattern::matchesHost const):
(WebCore::MatchTester::test):
(WebCore::UserContentURLPattern::matchesPath const):
* Source/WebCore/page/UserContentURLPattern.h:
(WebCore::UserContentURLPattern::UserContentURLPattern):
(WebCore::UserContentURLPattern::isValid const):
(WebCore::UserContentURLPattern::error const):
(WebCore::UserContentURLPattern::matchesHost const):
(WebCore::UserContentURLPattern::matchesPath const):
* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionMatchPattern.mm:
(-[_WKWebExtensionMatchPattern scheme]): Return nil if the String is null.
(-[_WKWebExtensionMatchPattern host]): Ditto.
(-[_WKWebExtensionMatchPattern path]): Ditto.
(-[_WKWebExtensionMatchPattern matchesURL:options:]): Add assert for option that can't be used.
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionMatchPatternCocoa.mm:
(WebKit::WebExtensionMatchPattern::registerCustomURLScheme):
(WebKit::WebExtensionMatchPattern::getOrCreate):
(WebKit::WebExtensionMatchPattern::WebExtensionMatchPattern):
(WebKit::WebExtensionMatchPattern::isSupported const):
(WebKit::WebExtensionMatchPattern::operator== const):
(WebKit::WebExtensionMatchPattern::scheme const): Added.
(WebKit::WebExtensionMatchPattern::host const): Added.
(WebKit::WebExtensionMatchPattern::path const): Added.
(WebKit::WebExtensionMatchPattern::stringWithScheme const):
(WebKit::WebExtensionMatchPattern::expandedStrings const):
(WebKit::WebExtensionMatchPattern::matchesAllHosts const):
(WebKit::WebExtensionMatchPattern::isValidScheme):
(WebKit::WebExtensionMatchPattern::matchesURL const):
(WebKit::WebExtensionMatchPattern::matchesPattern const):
(WebKit::WebExtensionMatchPattern::schemeMatches const):
(WebKit::WebExtensionMatchPattern::hostMatches const):
(WebKit::WebExtensionMatchPattern::pathMatches const):
(WebKit::WebExtensionMatchPattern::isValidHost): Deleted.
(WebKit::WebExtensionMatchPattern::isValidPath): Deleted.
(WebKit::WebExtensionMatchPattern::parse): Deleted.
(WebKit::WebExtensionMatchPattern::matchesURL): Deleted.
(WebKit::WebExtensionMatchPattern::matchesPattern): Deleted.
(WebKit::WebExtensionMatchPattern::schemeMatches): Deleted.
(WebKit::WebExtensionMatchPattern::hostMatches): Deleted.
(WebKit::WebExtensionMatchPattern::pathMatches): Deleted.
* Source/WebKit/UIProcess/Extensions/WebExtensionMatchPattern.h:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionMatchPattern.mm:
(TestWebKitAPI::TEST): Change some expectations to match new results for file URLs and URL percent encodings.
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKContentExtensionStore.mm:
(navigationDelegateAllowingActiveActionsOnTestHost): Changed wildcard scheme in pattern to 'testscheme' scheme expected by the test.
(TestWebKitAPI::TEST_F(WKContentRuleListStoreTest, NullPatternSet)): Ditto.
(TestWebKitAPI::TEST_F(WKContentRuleListStoreTest, ExtensionPath)): Ditto.
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
(TestWebKitAPI::TEST(URLSchemeHandler, DisableCORSCanvas)): Changed wildcard scheme in pattern to 'cors' scheme expected by the test.

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




More information about the webkit-changes mailing list