Title: [190510] trunk
Revision
190510
Author
[email protected]
Date
2015-10-02 10:46:25 -0700 (Fri, 02 Oct 2015)

Log Message

Source/WebCore:
Reloading without content blockers doesn't apply to resource loads after the main frame finishes
https://bugs.webkit.org/show_bug.cgi?id=149430
rdar://problem/22742222

Reviewed by Geoffrey Garen.

Test: http/tests/contentextensions/disable-blocker.html

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::loadResource):
* loader/DocumentLoader.h:
(WebCore::DocumentLoader::userContentExtensionsEnabled):
(WebCore::DocumentLoader::setUserContentExtensionsEnabled):
Store and use the state of whether content blockers are enabled or not on the DocumentLoader
so that it stays constant for a document's entire life.  This state comes from the Page when
making the DocumentLoader in WebKit2.
* loader/FrameLoader.cpp:
(WebCore::FrameLoader::loadResourceSynchronously):
* loader/ResourceLoader.cpp:
(WebCore::ResourceLoader::willSendRequestInternal):
* loader/cache/CachedResourceLoader.cpp:
(WebCore::CachedResourceLoader::requestResource):
* page/DOMWindow.cpp:
(WebCore::DOMWindow::open):
* page/UserContentController.cpp:
(WebCore::UserContentController::removeAllUserContentExtensions):
(WebCore::UserContentController::processContentExtensionRulesForLoad):
(WebCore::UserContentController::actionsForResourceLoad):
* page/UserContentController.h:

Source/WebKit2:
Reloading without content blockers doesn't apply to resource loads after the main frame finishes
https://bugs.webkit.org/show_bug.cgi?id=149430
rdar://problem/22742222

Reviewed by Geoffrey Garen.

* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::createDocumentLoader):
Copy the state of whether content extensions are disabled from the Page to the DocumentLoader
when making a DocumentLoader.

Tools:
Reloading without content blockers doesn't apply to resource loads after the main frame finishes
https://bugs.webkit.org/show_bug.cgi?id=149430
rdar://problem/22742222

Reviewed by Geoffrey Garen.

* WebKitTestRunner/cocoa/TestControllerCocoa.mm:
(WTR::TestController::cocoaResetStateToConsistentValues):
* WebKitTestRunner/mac/TestControllerMac.mm:
(WTR::TestController::platformConfigureViewForTest):
Test what happens when you disable content blockers from the SPI.

LayoutTests:
Reloading without content blockers doesn’t apply to resource loads after the main frame finishes
https://bugs.webkit.org/show_bug.cgi?id=149430
rdar://problem/22742222

Reviewed by Geoffrey Garen.

* http/tests/contentextensions/disable-blocker-expected.txt: Added.
* http/tests/contentextensions/disable-blocker.html: Added.
* http/tests/contentextensions/disable-blocker.html.json: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (190509 => 190510)


--- trunk/LayoutTests/ChangeLog	2015-10-02 17:30:02 UTC (rev 190509)
+++ trunk/LayoutTests/ChangeLog	2015-10-02 17:46:25 UTC (rev 190510)
@@ -1,3 +1,15 @@
+2015-10-02  Alex Christensen  <[email protected]>
+
+        Reloading without content blockers doesn’t apply to resource loads after the main frame finishes
+        https://bugs.webkit.org/show_bug.cgi?id=149430
+        rdar://problem/22742222
+
+        Reviewed by Geoffrey Garen.
+
+        * http/tests/contentextensions/disable-blocker-expected.txt: Added.
+        * http/tests/contentextensions/disable-blocker.html: Added.
+        * http/tests/contentextensions/disable-blocker.html.json: Added.
+
 2015-10-02  Antoine Quint  <[email protected]>
 
         popstate is fired at the wrong time on load

Added: trunk/LayoutTests/http/tests/contentextensions/disable-blocker-expected.txt (0 => 190510)


--- trunk/LayoutTests/http/tests/contentextensions/disable-blocker-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/http/tests/contentextensions/disable-blocker-expected.txt	2015-10-02 17:46:25 UTC (rev 190510)
@@ -0,0 +1,9 @@
+CONSOLE MESSAGE: line 12: status: 0, readyState:1, responseText: 
+CONSOLE MESSAGE: line 12: status: 200, readyState:2, responseText: 
+CONSOLE MESSAGE: line 12: status: 200, readyState:3, responseText: 
+CONSOLE MESSAGE: line 12: status: 200, readyState:4, responseText: This page should load.
+<script>
+    console.log("This page should load.");
+</script>
+
+This page should load successfully. The content blocker is disabled in WebKitTestRunner before loading the page.

Added: trunk/LayoutTests/http/tests/contentextensions/disable-blocker.html (0 => 190510)


--- trunk/LayoutTests/http/tests/contentextensions/disable-blocker.html	                        (rev 0)
+++ trunk/LayoutTests/http/tests/contentextensions/disable-blocker.html	2015-10-02 17:46:25 UTC (rev 190510)
@@ -0,0 +1,25 @@
+<head>
+<script>
+if (window.testRunner) {
+    testRunner.dumpAsText();
+    testRunner.waitUntilDone();
+}
+
+function sendRequest()
+{
+    var xhr = new XMLHttpRequest();
+    xhr._onreadystatechange_ = function() {
+        console.log("status: " + xhr.status + ", readyState:" + xhr.readyState + ", responseText: " + xhr.responseText);
+        if (xhr.readyState == 4) {
+            testRunner.notifyDone();
+        }
+    }
+    
+    xhr.open("GET", "resources/should-load.html", true);
+	xhr.send();
+}
+</script>
+</head>
+<body _onload_="sendRequest()">
+This page should load successfully.  The content blocker is disabled in WebKitTestRunner before loading the page.
+</body>

Added: trunk/LayoutTests/http/tests/contentextensions/disable-blocker.html.json (0 => 190510)


--- trunk/LayoutTests/http/tests/contentextensions/disable-blocker.html.json	                        (rev 0)
+++ trunk/LayoutTests/http/tests/contentextensions/disable-blocker.html.json	2015-10-02 17:46:25 UTC (rev 190510)
@@ -0,0 +1,10 @@
+[
+    {
+        "action": {
+            "type": "block"
+        },
+        "trigger": {
+            "url-filter": ".*"
+        }
+    }
+]

Modified: trunk/Source/WebCore/ChangeLog (190509 => 190510)


--- trunk/Source/WebCore/ChangeLog	2015-10-02 17:30:02 UTC (rev 190509)
+++ trunk/Source/WebCore/ChangeLog	2015-10-02 17:46:25 UTC (rev 190510)
@@ -1,3 +1,35 @@
+2015-10-02  Alex Christensen  <[email protected]>
+
+        Reloading without content blockers doesn't apply to resource loads after the main frame finishes
+        https://bugs.webkit.org/show_bug.cgi?id=149430
+        rdar://problem/22742222
+
+        Reviewed by Geoffrey Garen.
+
+        Test: http/tests/contentextensions/disable-blocker.html
+
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::loadResource):
+        * loader/DocumentLoader.h:
+        (WebCore::DocumentLoader::userContentExtensionsEnabled):
+        (WebCore::DocumentLoader::setUserContentExtensionsEnabled):
+        Store and use the state of whether content blockers are enabled or not on the DocumentLoader
+        so that it stays constant for a document's entire life.  This state comes from the Page when
+        making the DocumentLoader in WebKit2.
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::loadResourceSynchronously):
+        * loader/ResourceLoader.cpp:
+        (WebCore::ResourceLoader::willSendRequestInternal):
+        * loader/cache/CachedResourceLoader.cpp:
+        (WebCore::CachedResourceLoader::requestResource):
+        * page/DOMWindow.cpp:
+        (WebCore::DOMWindow::open):
+        * page/UserContentController.cpp:
+        (WebCore::UserContentController::removeAllUserContentExtensions):
+        (WebCore::UserContentController::processContentExtensionRulesForLoad):
+        (WebCore::UserContentController::actionsForResourceLoad):
+        * page/UserContentController.h:
+
 2015-10-02  Antoine Quint  <[email protected]>
 
         popstate is fired at the wrong time on load

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (190509 => 190510)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2015-10-02 17:30:02 UTC (rev 190509)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2015-10-02 17:46:25 UTC (rev 190510)
@@ -1226,7 +1226,7 @@
     DocumentLoader* documentLoader = frame->loader().documentLoader();
 
     if (page->userContentController() && documentLoader)
-        page->userContentController()->processContentExtensionRulesForLoad(*page, request, ResourceType::Media, *documentLoader);
+        page->userContentController()->processContentExtensionRulesForLoad(request, ResourceType::Media, *documentLoader);
 
     if (request.isNull()) {
         mediaLoadingFailed(MediaPlayer::FormatError);

Modified: trunk/Source/WebCore/loader/DocumentLoader.h (190509 => 190510)


--- trunk/Source/WebCore/loader/DocumentLoader.h	2015-10-02 17:30:02 UTC (rev 190509)
+++ trunk/Source/WebCore/loader/DocumentLoader.h	2015-10-02 17:46:25 UTC (rev 190510)
@@ -227,6 +227,9 @@
         void stopLoadingPlugIns();
         void stopLoadingSubresources();
 
+        bool userContentExtensionsEnabled() const { return m_userContentExtensionsEnabled; }
+        void setUserContentExtensionsEnabled(bool enabled) { m_userContentExtensionsEnabled = enabled; }
+
         void addSubresourceLoader(ResourceLoader*);
         void removeSubresourceLoader(ResourceLoader*);
         void addPlugInStreamLoader(ResourceLoader&);
@@ -451,6 +454,7 @@
         HashMap<String, RefPtr<StyleSheetContents>> m_pendingNamedContentExtensionStyleSheets;
         HashMap<String, Vector<std::pair<String, uint32_t>>> m_pendingContentExtensionDisplayNoneSelectors;
 #endif
+        bool m_userContentExtensionsEnabled { true };
 
 #ifndef NDEBUG
         bool m_hasEverBeenAttached { false };

Modified: trunk/Source/WebCore/loader/FrameLoader.cpp (190509 => 190510)


--- trunk/Source/WebCore/loader/FrameLoader.cpp	2015-10-02 17:30:02 UTC (rev 190509)
+++ trunk/Source/WebCore/loader/FrameLoader.cpp	2015-10-02 17:46:25 UTC (rev 190510)
@@ -2710,7 +2710,7 @@
         if (m_documentLoader) {
             if (auto* page = m_frame.page()) {
                 if (auto* controller = page->userContentController())
-                    controller->processContentExtensionRulesForLoad(*page, newRequest, ResourceType::Raw, *m_documentLoader);
+                    controller->processContentExtensionRulesForLoad(newRequest, ResourceType::Raw, *m_documentLoader);
             }
         }
         

Modified: trunk/Source/WebCore/loader/ResourceLoader.cpp (190509 => 190510)


--- trunk/Source/WebCore/loader/ResourceLoader.cpp	2015-10-02 17:30:02 UTC (rev 190509)
+++ trunk/Source/WebCore/loader/ResourceLoader.cpp	2015-10-02 17:46:25 UTC (rev 190510)
@@ -342,7 +342,7 @@
         if (page && m_documentLoader) {
             auto* userContentController = page->userContentController();
             if (userContentController)
-                userContentController->processContentExtensionRulesForLoad(*page, request, m_resourceType, *m_documentLoader);
+                userContentController->processContentExtensionRulesForLoad(request, m_resourceType, *m_documentLoader);
         }
     }
 #endif

Modified: trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp (190509 => 190510)


--- trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp	2015-10-02 17:30:02 UTC (rev 190509)
+++ trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp	2015-10-02 17:46:25 UTC (rev 190510)
@@ -514,7 +514,7 @@
 
 #if ENABLE(CONTENT_EXTENSIONS)
     if (frame() && frame()->mainFrame().page() && frame()->mainFrame().page()->userContentController() && m_documentLoader)
-        frame()->mainFrame().page()->userContentController()->processContentExtensionRulesForLoad(*frame()->mainFrame().page(), request.mutableResourceRequest(), toResourceType(type), *m_documentLoader);
+        frame()->mainFrame().page()->userContentController()->processContentExtensionRulesForLoad(request.mutableResourceRequest(), toResourceType(type), *m_documentLoader);
 
     if (request.mutableResourceRequest().isNull())
         return nullptr;

Modified: trunk/Source/WebCore/page/DOMWindow.cpp (190509 => 190510)


--- trunk/Source/WebCore/page/DOMWindow.cpp	2015-10-02 17:30:02 UTC (rev 190509)
+++ trunk/Source/WebCore/page/DOMWindow.cpp	2015-10-02 17:46:25 UTC (rev 190510)
@@ -2144,9 +2144,10 @@
     if (firstFrame->document()
         && firstFrame->mainFrame().page()
         && firstFrame->mainFrame().page()->userContentController()
-        && firstFrame->mainFrame().document()) {
+        && firstFrame->mainFrame().document()
+        && firstFrame->mainFrame().document()->loader()) {
         ResourceLoadInfo resourceLoadInfo = {firstFrame->document()->completeURL(urlString), firstFrame->mainFrame().document()->url(), ResourceType::Popup};
-        Vector<ContentExtensions::Action> actions = firstFrame->mainFrame().page()->userContentController()->actionsForResourceLoad(*firstFrame->mainFrame().page(), resourceLoadInfo);
+        Vector<ContentExtensions::Action> actions = firstFrame->mainFrame().page()->userContentController()->actionsForResourceLoad(resourceLoadInfo, *firstFrame->mainFrame().document()->loader());
         for (const ContentExtensions::Action& action : actions) {
             if (action.type() == ContentExtensions::ActionType::BlockLoad)
                 return nullptr;

Modified: trunk/Source/WebCore/page/UserContentController.cpp (190509 => 190510)


--- trunk/Source/WebCore/page/UserContentController.cpp	2015-10-02 17:30:02 UTC (rev 190509)
+++ trunk/Source/WebCore/page/UserContentController.cpp	2015-10-02 17:46:25 UTC (rev 190510)
@@ -28,6 +28,7 @@
 
 #include "DOMWrapperWorld.h"
 #include "Document.h"
+#include "DocumentLoader.h"
 #include "ExtensionStyleSheets.h"
 #include "MainFrame.h"
 #include "Page.h"
@@ -207,23 +208,23 @@
     m_contentExtensionBackend->removeAllContentExtensions();
 }
 
-void UserContentController::processContentExtensionRulesForLoad(Page& page, ResourceRequest& request, ResourceType resourceType, DocumentLoader& initiatingDocumentLoader)
+void UserContentController::processContentExtensionRulesForLoad(ResourceRequest& request, ResourceType resourceType, DocumentLoader& initiatingDocumentLoader)
 {
     if (!m_contentExtensionBackend)
         return;
 
-    if (!page.userContentExtensionsEnabled())
+    if (!initiatingDocumentLoader.userContentExtensionsEnabled())
         return;
 
     m_contentExtensionBackend->processContentExtensionRulesForLoad(request, resourceType, initiatingDocumentLoader);
 }
 
-Vector<ContentExtensions::Action> UserContentController::actionsForResourceLoad(Page& page, const ResourceLoadInfo& resourceLoadInfo)
+Vector<ContentExtensions::Action> UserContentController::actionsForResourceLoad(const ResourceLoadInfo& resourceLoadInfo, DocumentLoader& initiatingDocumentLoader)
 {
     if (!m_contentExtensionBackend)
         return Vector<ContentExtensions::Action>();
     
-    if (!page.userContentExtensionsEnabled())
+    if (!initiatingDocumentLoader.userContentExtensionsEnabled())
         return Vector<ContentExtensions::Action>();
 
     return m_contentExtensionBackend->actionsForResourceLoad(resourceLoadInfo);

Modified: trunk/Source/WebCore/page/UserContentController.h (190509 => 190510)


--- trunk/Source/WebCore/page/UserContentController.h	2015-10-02 17:30:02 UTC (rev 190509)
+++ trunk/Source/WebCore/page/UserContentController.h	2015-10-02 17:46:25 UTC (rev 190510)
@@ -92,8 +92,8 @@
     WEBCORE_EXPORT void removeUserContentExtension(const String& name);
     WEBCORE_EXPORT void removeAllUserContentExtensions();
 
-    void processContentExtensionRulesForLoad(Page&, ResourceRequest&, ResourceType, DocumentLoader& initiatingDocumentLoader);
-    Vector<ContentExtensions::Action> actionsForResourceLoad(Page&, const ResourceLoadInfo&);
+    void processContentExtensionRulesForLoad(ResourceRequest&, ResourceType, DocumentLoader& initiatingDocumentLoader);
+    Vector<ContentExtensions::Action> actionsForResourceLoad(const ResourceLoadInfo&, DocumentLoader& initiatingDocumentLoader);
 #endif
 
 private:

Modified: trunk/Source/WebKit2/ChangeLog (190509 => 190510)


--- trunk/Source/WebKit2/ChangeLog	2015-10-02 17:30:02 UTC (rev 190509)
+++ trunk/Source/WebKit2/ChangeLog	2015-10-02 17:46:25 UTC (rev 190510)
@@ -1,3 +1,16 @@
+2015-10-02  Alex Christensen  <[email protected]>
+
+        Reloading without content blockers doesn't apply to resource loads after the main frame finishes
+        https://bugs.webkit.org/show_bug.cgi?id=149430
+        rdar://problem/22742222
+
+        Reviewed by Geoffrey Garen.
+
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::createDocumentLoader):
+        Copy the state of whether content extensions are disabled from the Page to the DocumentLoader
+        when making a DocumentLoader.
+
 2015-10-02  Antoine Quint  <[email protected]>
 
         popstate is fired at the wrong time on load

Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (190509 => 190510)


--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2015-10-02 17:30:02 UTC (rev 190509)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2015-10-02 17:46:25 UTC (rev 190510)
@@ -4896,9 +4896,13 @@
 {
     Ref<WebDocumentLoader> documentLoader = WebDocumentLoader::create(request, substituteData);
 
-    if (m_pendingNavigationID && frame.isMainFrame()) {
-        documentLoader->setNavigationID(m_pendingNavigationID);
-        m_pendingNavigationID = 0;
+    if (frame.isMainFrame()) {
+        if (m_pendingNavigationID) {
+            documentLoader->setNavigationID(m_pendingNavigationID);
+            m_pendingNavigationID = 0;
+        }
+        if (frame.page())
+            documentLoader->setUserContentExtensionsEnabled(frame.page()->userContentExtensionsEnabled());
     }
 
     return WTF::move(documentLoader);

Modified: trunk/Tools/ChangeLog (190509 => 190510)


--- trunk/Tools/ChangeLog	2015-10-02 17:30:02 UTC (rev 190509)
+++ trunk/Tools/ChangeLog	2015-10-02 17:46:25 UTC (rev 190510)
@@ -1,3 +1,17 @@
+2015-10-02  Alex Christensen  <[email protected]>
+
+        Reloading without content blockers doesn't apply to resource loads after the main frame finishes
+        https://bugs.webkit.org/show_bug.cgi?id=149430
+        rdar://problem/22742222
+
+        Reviewed by Geoffrey Garen.
+
+        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
+        (WTR::TestController::cocoaResetStateToConsistentValues):
+        * WebKitTestRunner/mac/TestControllerMac.mm:
+        (WTR::TestController::platformConfigureViewForTest):
+        Test what happens when you disable content blockers from the SPI.
+
 2015-10-01  Brent Fulgham  <[email protected]>
 
         [Win] Unreviewed build fix for run-api-tests

Modified: trunk/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm (190509 => 190510)


--- trunk/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm	2015-10-02 17:30:02 UTC (rev 190509)
+++ trunk/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm	2015-10-02 17:46:25 UTC (rev 190510)
@@ -39,6 +39,7 @@
 #import <WebKit/WKWebView.h>
 #import <WebKit/WKWebViewConfiguration.h>
 #import <WebKit/WKWebViewConfigurationPrivate.h>
+#import <WebKit/WKWebViewPrivate.h>
 #import <WebKit/_WKProcessPoolConfiguration.h>
 #import <WebKit/_WKUserContentExtensionStore.h>
 #import <WebKit/_WKUserContentExtensionStorePrivate.h>
@@ -119,8 +120,10 @@
     platformRunUntil(doneRemoving, 0);
     [[_WKUserContentExtensionStore defaultStore] _removeAllContentExtensions];
 
-    if (PlatformWebView* webView = mainWebView())
+    if (PlatformWebView* webView = mainWebView()) {
         [webView->platformView().configuration.userContentController _removeAllUserContentFilters];
+        webView->platformView()._userContentExtensionsEnabled = true;
+    }
 #endif
 }
 

Modified: trunk/Tools/WebKitTestRunner/mac/TestControllerMac.mm (190509 => 190510)


--- trunk/Tools/WebKitTestRunner/mac/TestControllerMac.mm	2015-10-02 17:30:02 UTC (rev 190509)
+++ trunk/Tools/WebKitTestRunner/mac/TestControllerMac.mm	2015-10-02 17:46:25 UTC (rev 190510)
@@ -40,6 +40,7 @@
 #import <WebKit/WKWebView.h>
 #import <WebKit/WKWebViewConfiguration.h>
 #import <WebKit/WKWebViewConfigurationPrivate.h>
+#import <WebKit/WKWebViewPrivate.h>
 #import <WebKit/_WKUserContentExtensionStore.h>
 #import <WebKit/_WKUserContentExtensionStorePrivate.h>
 #import <mach-o/dyld.h>
@@ -122,6 +123,11 @@
         doneCompiling = true;
     }];
     platformRunUntil(doneCompiling, 0);
+
+    // This is for http/tests/contentextensions/disable-blocker.html
+    if (!test.urlContains("disable-blocker"))
+        return;
+    mainWebView()->platformView()._userContentExtensionsEnabled = false;
 #endif
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to