Changeset 244794 in webkit


Ignore:
Timestamp:
Apr 30, 2019 12:42:34 PM (5 years ago)
Author:
achristensen@apple.com
Message:

Add WKContentRuleList ping resource-type
https://bugs.webkit.org/show_bug.cgi?id=197325
<rdar://problem/49841404>

Reviewed by Geoff Garen.

Source/WebCore:

Tests: http/tests/contentextensions/block-ping-resource-type-ping.html and http/tests/contentextensions/block-ping-resource-type-raw.html

  • contentextensions/ContentExtensionsBackend.cpp:

(WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForLoad):

  • contentextensions/ContentExtensionsBackend.h:
  • loader/PingLoader.cpp:

(WebCore::processContentRuleListsForLoad):
(WebCore::PingLoader::sendPing):

  • loader/ResourceLoadInfo.cpp:

(WebCore::ContentExtensions::readResourceType):
(WebCore::ContentExtensions::ResourceLoadInfo::getResourceFlags const):

  • loader/ResourceLoadInfo.h:
  • page/UserContentProvider.cpp:

(WebCore::UserContentProvider::processContentRuleListsForLoad):

  • page/UserContentProvider.h:

LayoutTests:

  • http/tests/contentextensions/block-ping-resource-type-raw--expected.txt: Copied from LayoutTests/http/tests/contentextensions/block-ping-expected.txt.
  • http/tests/contentextensions/block-ping-resource-type-raw.html: Copied from LayoutTests/http/tests/contentextensions/block-ping.html.
  • http/tests/contentextensions/block-ping-resource-type-raw.html.json: Copied from LayoutTests/http/tests/contentextensions/block-ping.html.json.
  • http/tests/contentextensions/block-ping-resource-type-ping-expected.txt: Copied from LayoutTests/http/tests/contentextensions/block-ping-expected.txt.
  • http/tests/contentextensions/block-ping-resource-type-ping.html: Copied from LayoutTests/http/tests/contentextensions/block-ping.html.
  • http/tests/contentextensions/block-ping-resource-type-ping.html.json: Copied from LayoutTests/http/tests/contentextensions/block-ping.html.json.
Location:
trunk
Files:
9 edited
6 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r244787 r244794  
     12019-04-30  Alex Christensen  <achristensen@webkit.org>
     2
     3        Add WKContentRuleList ping resource-type
     4        https://bugs.webkit.org/show_bug.cgi?id=197325
     5        <rdar://problem/49841404>
     6
     7        Reviewed by Geoff Garen.
     8
     9        * http/tests/contentextensions/block-ping-resource-type-raw--expected.txt: Copied from LayoutTests/http/tests/contentextensions/block-ping-expected.txt.
     10        * http/tests/contentextensions/block-ping-resource-type-raw.html: Copied from LayoutTests/http/tests/contentextensions/block-ping.html.
     11        * http/tests/contentextensions/block-ping-resource-type-raw.html.json: Copied from LayoutTests/http/tests/contentextensions/block-ping.html.json.
     12        * http/tests/contentextensions/block-ping-resource-type-ping-expected.txt: Copied from LayoutTests/http/tests/contentextensions/block-ping-expected.txt.
     13        * http/tests/contentextensions/block-ping-resource-type-ping.html: Copied from LayoutTests/http/tests/contentextensions/block-ping.html.
     14        * http/tests/contentextensions/block-ping-resource-type-ping.html.json: Copied from LayoutTests/http/tests/contentextensions/block-ping.html.json.
     15
    1162019-04-30  Shawn Roberts  <sroberts@apple.com>
    217
  • trunk/LayoutTests/http/tests/contentextensions/block-ping-resource-type-ping-expected.txt

    r244759 r244794  
    1 CONSOLE MESSAGE: line 34: Content blocker prevented frame displaying http://127.0.0.1:8000/contentextensions/block-ping.html from loading a resource from http://127.0.0.1:8000/contentextensions/resources/save-ping.php?test=contentextensions-block-ping
     1CONSOLE MESSAGE: line 34: Content blocker prevented frame displaying http://127.0.0.1:8000/contentextensions/block-ping-resource-type-ping.html from loading a resource from http://127.0.0.1:8000/contentextensions/resources/save-ping.php?test=contentextensions-block-ping-resource-type-ping
     2ALERT: PASS: successfully loaded ping url with fetch
    23This test follows a link with a ping attribute where the ping URL matches a 'block' rule. 
    34
  • trunk/LayoutTests/http/tests/contentextensions/block-ping-resource-type-ping.html

    r244759 r244794  
    1212    var iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
    1313    iframeDoc.write('' +
    14         '<img src="resources/delete-ping.php?test=contentextensions-block-ping" ' +
     14        '<img src="resources/delete-ping.php?test=contentextensions-block-ping-resource-type-ping" ' +
    1515            'onerror="parent.clickOnLinkWithPing();">' +
    1616        '<a id="a" ' +
    1717            'href="resources/check-ping.html" ' + // check-ping.html calls showPingResult()
    18             'ping="resources/save-ping.php?test=contentextensions-block-ping"> ' +
     18            'ping="resources/save-ping.php?test=contentextensions-block-ping-resource-type-ping"> ' +
    1919            'Link with ping' +
    2020        '</a>'
     
    3939    var iframe = document.getElementById("result_frame");
    4040    iframe.onload = function() {
    41         if (window.testRunner) { testRunner.notifyDone(); }
     41        fetch("resources/save-ping.php?test=contentextensions-block-ping-resource-type-ping").then(()=>{
     42            fetch("resources/delete-ping.php?test=contentextensions-block-ping-resource-type-ping").then(()=>{
     43                alert("PASS: successfully loaded ping url with fetch");
     44                if (window.testRunner) { testRunner.notifyDone(); }
     45            })
     46        }).catch(error => { alert("FAIL:" + error); if (window.testRunner) { testRunner.notifyDone(); } });
    4247    }
    43     iframe.src = "resources/get-ping-data.php?test=contentextensions-block-ping&timeout_ms=1000";
     48    iframe.src = "resources/get-ping-data.php?test=contentextensions-block-ping-resource-type-ping&timeout_ms=1000";
    4449    // Why timeout_ms=1000:
    4550    // To pass the test, the ping shouldn't arrive, so we need to
  • trunk/LayoutTests/http/tests/contentextensions/block-ping-resource-type-ping.html.json

    r244759 r244794  
    22    {
    33        "trigger": {
    4             "url-filter": "save-ping.php"
     4            "url-filter": "save-ping.php",
     5            "resource-type": ["ping"]
    56        },
    67        "action": {
  • trunk/LayoutTests/http/tests/contentextensions/block-ping-resource-type-raw-expected.txt

    r244759 r244794  
    1 CONSOLE MESSAGE: line 34: Content blocker prevented frame displaying http://127.0.0.1:8000/contentextensions/block-ping.html from loading a resource from http://127.0.0.1:8000/contentextensions/resources/save-ping.php?test=contentextensions-block-ping
     1CONSOLE MESSAGE: line 34: Content blocker prevented frame displaying http://127.0.0.1:8000/contentextensions/block-ping-resource-type-raw.html from loading a resource from http://127.0.0.1:8000/contentextensions/resources/save-ping.php?test=contentextensions-block-ping-resource-type-raw
     2CONSOLE MESSAGE: line 41: Content blocker prevented frame displaying http://127.0.0.1:8000/contentextensions/block-ping-resource-type-raw.html from loading a resource from http://127.0.0.1:8000/contentextensions/resources/save-ping.php?test=contentextensions-block-ping-resource-type-raw
     3CONSOLE MESSAGE: line 41: Resource blocked by content blocker
     4CONSOLE MESSAGE: line 41: Fetch API cannot load http://127.0.0.1:8000/contentextensions/resources/save-ping.php?test=contentextensions-block-ping-resource-type-raw due to access control checks.
     5ALERT: PASS:TypeError: Resource blocked by content blocker
    26This test follows a link with a ping attribute where the ping URL matches a 'block' rule. 
    37
  • trunk/LayoutTests/http/tests/contentextensions/block-ping-resource-type-raw.html

    r244759 r244794  
    1212    var iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
    1313    iframeDoc.write('' +
    14         '<img src="resources/delete-ping.php?test=contentextensions-block-ping" ' +
     14        '<img src="resources/delete-ping.php?test=contentextensions-block-ping-resource-type-raw" ' +
    1515            'onerror="parent.clickOnLinkWithPing();">' +
    1616        '<a id="a" ' +
    1717            'href="resources/check-ping.html" ' + // check-ping.html calls showPingResult()
    18             'ping="resources/save-ping.php?test=contentextensions-block-ping"> ' +
     18            'ping="resources/save-ping.php?test=contentextensions-block-ping-resource-type-raw"> ' +
    1919            'Link with ping' +
    2020        '</a>'
     
    3939    var iframe = document.getElementById("result_frame");
    4040    iframe.onload = function() {
    41         if (window.testRunner) { testRunner.notifyDone(); }
     41        fetch("resources/save-ping.php?test=contentextensions-block-ping-resource-type-raw").then(()=>{
     42            fetch("resources/delete-ping.php?test=contentextensions-block-ping-resource-type-raw").then(()=>{
     43                alert("FAIL: successfully loaded ping url with fetch");
     44                if (window.testRunner) { testRunner.notifyDone(); }
     45            })
     46        }).catch(error => { alert("PASS:" + error); if (window.testRunner) { testRunner.notifyDone(); } });
    4247    }
    43     iframe.src = "resources/get-ping-data.php?test=contentextensions-block-ping&timeout_ms=1000";
     48    iframe.src = "resources/get-ping-data.php?test=contentextensions-block-ping-resource-type-raw&timeout_ms=1000";
    4449    // Why timeout_ms=1000:
    4550    // To pass the test, the ping shouldn't arrive, so we need to
  • trunk/LayoutTests/http/tests/contentextensions/block-ping-resource-type-raw.html.json

    r244759 r244794  
    22    {
    33        "trigger": {
    4             "url-filter": "save-ping.php"
     4            "url-filter": "save-ping.php",
     5            "resource-type": ["raw"]
    56        },
    67        "action": {
  • trunk/Source/WebCore/ChangeLog

    r244777 r244794  
     12019-04-30  Alex Christensen  <achristensen@webkit.org>
     2
     3        Add WKContentRuleList ping resource-type
     4        https://bugs.webkit.org/show_bug.cgi?id=197325
     5        <rdar://problem/49841404>
     6
     7        Reviewed by Geoff Garen.
     8
     9        Tests: http/tests/contentextensions/block-ping-resource-type-ping.html and http/tests/contentextensions/block-ping-resource-type-raw.html
     10
     11        * contentextensions/ContentExtensionsBackend.cpp:
     12        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForLoad):
     13        * contentextensions/ContentExtensionsBackend.h:
     14        * loader/PingLoader.cpp:
     15        (WebCore::processContentRuleListsForLoad):
     16        (WebCore::PingLoader::sendPing):
     17        * loader/ResourceLoadInfo.cpp:
     18        (WebCore::ContentExtensions::readResourceType):
     19        (WebCore::ContentExtensions::ResourceLoadInfo::getResourceFlags const):
     20        * loader/ResourceLoadInfo.h:
     21        * page/UserContentProvider.cpp:
     22        (WebCore::UserContentProvider::processContentRuleListsForLoad):
     23        * page/UserContentProvider.h:
     24
    1252019-04-30  Justin Fan  <justin_fan@apple.com>
    226
  • trunk/Source/WebCore/contentextensions/ContentExtensionsBackend.cpp

    r243319 r244794  
    151151}
    152152
    153 ContentRuleListResults ContentExtensionsBackend::processContentRuleListsForLoad(const URL& url, ResourceType resourceType, DocumentLoader& initiatingDocumentLoader)
     153ContentRuleListResults ContentExtensionsBackend::processContentRuleListsForLoad(const URL& url, OptionSet<ResourceType> resourceType, DocumentLoader& initiatingDocumentLoader)
    154154{
    155155    if (m_contentExtensions.isEmpty())
  • trunk/Source/WebCore/contentextensions/ContentExtensionsBackend.h

    r244695 r244794  
    6363    WEBCORE_EXPORT StyleSheetContents* globalDisplayNoneStyleSheet(const String& identifier) const;
    6464
    65     ContentRuleListResults processContentRuleListsForLoad(const URL&, ResourceType, DocumentLoader& initiatingDocumentLoader);
     65    ContentRuleListResults processContentRuleListsForLoad(const URL&, OptionSet<ResourceType>, DocumentLoader& initiatingDocumentLoader);
    6666    WEBCORE_EXPORT ContentRuleListResults processContentRuleListsForPingLoad(const URL&, const URL& mainDocumentURL);
    6767
  • trunk/Source/WebCore/loader/PingLoader.cpp

    r244700 r244794  
    6464
    6565// Returns true if we should block the load.
    66 static bool processContentRuleListsForLoad(const Frame& frame, ResourceRequest& request, ContentExtensions::ResourceType resourceType)
     66static bool processContentRuleListsForLoad(const Frame& frame, ResourceRequest& request, OptionSet<ContentExtensions::ResourceType> resourceType)
    6767{
    6868    auto* documentLoader = frame.loader().documentLoader();
     
    120120    ResourceRequest request(pingURL);
    121121#if ENABLE(CONTENT_EXTENSIONS)
    122     if (processContentRuleListsForLoad(frame, request, ContentExtensions::ResourceType::Raw))
     122    if (processContentRuleListsForLoad(frame, request, { ContentExtensions::ResourceType::Raw, ContentExtensions::ResourceType::Ping }))
    123123        return;
    124124#endif
  • trunk/Source/WebCore/loader/ResourceLoadInfo.cpp

    r244700 r244794  
    103103    if (name == "popup")
    104104        return static_cast<uint16_t>(ResourceType::Popup);
     105    if (name == "ping")
     106        return static_cast<uint16_t>(ResourceType::Ping);
    105107    return static_cast<uint16_t>(ResourceType::Invalid);
    106108}
     
    127129    ResourceFlags flags = 0;
    128130    ASSERT(type != ResourceType::Invalid);
    129     flags |= static_cast<ResourceFlags>(type);
     131    flags |= type.toRaw();
    130132    flags |= isThirdParty() ? static_cast<ResourceFlags>(LoadType::ThirdParty) : static_cast<ResourceFlags>(LoadType::FirstParty);
    131133    return flags;
  • trunk/Source/WebCore/loader/ResourceLoadInfo.h

    r244695 r244794  
    2929
    3030#include "CachedResource.h"
     31#include <wtf/OptionSet.h>
    3132#include <wtf/URL.h>
    3233
     
    4647    PlugInStream = 0x0100,
    4748    Popup = 0x0200,
     49    // 0x0400 and 0x0800 are used by LoadType.
     50    Ping = 0x1000,
    4851};
    49 const uint16_t ResourceTypeMask = 0x03FF;
     52const uint16_t ResourceTypeMask = 0x13FF;
    5053
    5154enum class LoadType : uint16_t {
     
    5558};
    5659const uint16_t LoadTypeMask = 0x0C00;
     60
     61static_assert(!(ResourceTypeMask & LoadTypeMask), "ResourceTypeMask and LoadTypeMask should be mutually exclusive because they are stored in the same uint16_t");
    5762
    5863typedef uint16_t ResourceFlags;
     
    7580    URL resourceURL;
    7681    URL mainDocumentURL;
    77     ResourceType type;
     82    OptionSet<ResourceType> type;
    7883
    7984    bool isThirdParty() const;
  • trunk/Source/WebCore/page/UserContentProvider.cpp

    r244695 r244794  
    103103}
    104104   
    105 ContentRuleListResults UserContentProvider::processContentRuleListsForLoad(const URL& url, ContentExtensions::ResourceType resourceType, DocumentLoader& initiatingDocumentLoader)
     105ContentRuleListResults UserContentProvider::processContentRuleListsForLoad(const URL& url, OptionSet<ContentExtensions::ResourceType> resourceType, DocumentLoader& initiatingDocumentLoader)
    106106{
    107107    if (!contentExtensionsEnabled(initiatingDocumentLoader))
  • trunk/Source/WebCore/page/UserContentProvider.h

    r244695 r244794  
    8989    // FIXME: These don't really belong here. They should probably bundled up in the ContentExtensionsBackend
    9090    // which should always exist.
    91     ContentRuleListResults processContentRuleListsForLoad(const URL&, ContentExtensions::ResourceType, DocumentLoader& initiatingDocumentLoader);
     91    ContentRuleListResults processContentRuleListsForLoad(const URL&, OptionSet<ContentExtensions::ResourceType>, DocumentLoader& initiatingDocumentLoader);
    9292    Vector<ContentExtensions::ActionsFromContentRuleList> actionsForResourceLoad(const ContentExtensions::ResourceLoadInfo&, DocumentLoader& initiatingDocumentLoader);
    9393    WEBCORE_EXPORT void forEachContentExtension(const Function<void(const String&, ContentExtensions::ContentExtension&)>&, DocumentLoader& initiatingDocumentLoader);
Note: See TracChangeset for help on using the changeset viewer.