[webkit-changes] [WebKit/WebKit] b1df66: Handle competing header rules for Declarative Net ...

EWS noreply at github.com
Fri Oct 7 16:00:06 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: b1df66e91dd53bf38a21c041093cde90e959d1cc
      https://github.com/WebKit/WebKit/commit/b1df66e91dd53bf38a21c041093cde90e959d1cc
  Author: Ellie Epskamp-Hunt <eepskamphunt at apple.com>
  Date:   2022-10-07 (Fri, 07 Oct 2022)

  Changed paths:
    M Source/WebCore/contentextensions/ContentExtensionActions.cpp
    M Source/WebCore/contentextensions/ContentExtensionActions.h
    M Source/WebCore/contentextensions/ContentExtensionError.cpp
    M Source/WebCore/contentextensions/ContentExtensionError.h
    M Source/WebCore/contentextensions/ContentExtensionsBackend.cpp
    M Source/WebKit/UIProcess/API/APIContentRuleListStore.h
    M Tools/TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/WKContentExtensionStore.mm

  Log Message:
  -----------
  Handle competing header rules for Declarative Net Request.
https://bugs.webkit.org/show_bug.cgi?id=246177
rdar://98149238

Reviewed by Timothy Hatcher.

Add a priority field to rules that modify headers. This priority is used to determine how headers
should be modified if multiple rules want to change the same header. This patch implements the
behavior Chrome details in their Declarative Net Request documentation:
> If a rule has appended to a header, then lower priority rules can only append to that header.
    set and remove operations are not permitted
> If a rule has set a header, then lower priority rules cannot further modify the header,
    except for append rules.
> If a rule has removed a header, then lower priority rules cannot further modify the header.

* Source/WebCore/contentextensions/ContentExtensionActions.cpp:
(WebCore::ContentExtensions::ModifyHeadersAction::parse):
    Parse the new priority field from the JSON.
(WebCore::ContentExtensions::ModifyHeadersAction::isolatedCopy const):
(WebCore::ContentExtensions::ModifyHeadersAction::isolatedCopy):
(WebCore::ContentExtensions::ModifyHeadersAction::operator== const):
(WebCore::ContentExtensions::ModifyHeadersAction::serialize const):
(WebCore::ContentExtensions::ModifyHeadersAction::deserialize):
    When serializing a modify headers action, put the priority at the beginning of the vector.
    Modify the rest of serializing logic to take in account the extra bytes at the beginning.
(WebCore::ContentExtensions::ModifyHeadersAction::applyToRequest):
(WebCore::ContentExtensions::ModifyHeadersAction::ModifyHeaderInfo::applyToRequest):
    Pass around a map that contains headers names to the first operation applied to that header
    {append, set, remove}. Use that map to determine if the current operation should be applied.
* Source/WebCore/contentextensions/ContentExtensionActions.h:
(WebCore::ContentExtensions::add):
* Source/WebCore/contentextensions/ContentExtensionError.cpp:
(WebCore::ContentExtensions::contentExtensionErrorCategory):
* Source/WebCore/contentextensions/ContentExtensionError.h:
* Source/WebCore/contentextensions/ContentExtensionsBackend.cpp:
(WebCore::ContentExtensions::applyResultsToRequest):
    Process the header rules from highest priority to lowest.
* Tools/TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:
(TestWebKitAPI::TEST_F):
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKContentExtensionStore.mm:
(TEST_F):
    Add new tests where each rule targets the same header.

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




More information about the webkit-changes mailing list