Title: [211755] trunk
Revision
211755
Author
[email protected]
Date
2017-02-06 15:47:51 -0800 (Mon, 06 Feb 2017)

Log Message

http/tests/preload/dynamic_removing_preload.html fails to test what it should
https://bugs.webkit.org/show_bug.cgi?id=167792

Reviewed by Ryosuke Niwa.

Source/WebCore:

Cancel the link preload resource load when the link element is removed from the DOM.

No new tests, but unskipping an existing test: http/tests/preload/dynamic_removing_preload.html

* html/HTMLLinkElement.cpp:
(WebCore::HTMLLinkElement::removedFrom): Call m_linkLoader.cancelLoad().
* loader/LinkLoader.cpp:
(WebCore::LinkLoader::cancelLoad): Clear m_preloadResourceClient.
* loader/LinkLoader.h:
* loader/LinkPreloadResourceClients.h:
(WebCore::LinkPreloadResourceClient::clearResource): Call m_resource->cancelLoad().
* loader/SubresourceLoader.cpp:
(WebCore::LinkPreloadResourceClient::didFinishLoading): Change ASSERT to exempt cancelled loads.

LayoutTests:

* TestExpectations: Unskip dynamic_removing_preload.html
* http/tests/preload/dynamic_removing_preload-expected.txt:
* http/tests/preload/dynamic_removing_preload.html: Switch test to use ResourceTiming.

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (211754 => 211755)


--- trunk/LayoutTests/ChangeLog	2017-02-06 23:47:26 UTC (rev 211754)
+++ trunk/LayoutTests/ChangeLog	2017-02-06 23:47:51 UTC (rev 211755)
@@ -1,3 +1,14 @@
+2017-02-06  Yoav Weiss  <[email protected]>
+
+        http/tests/preload/dynamic_removing_preload.html fails to test what it should
+        https://bugs.webkit.org/show_bug.cgi?id=167792
+
+        Reviewed by Ryosuke Niwa.
+
+        * TestExpectations: Unskip dynamic_removing_preload.html
+        * http/tests/preload/dynamic_removing_preload-expected.txt:
+        * http/tests/preload/dynamic_removing_preload.html: Switch test to use ResourceTiming.
+
 2017-02-06  Alex Christensen  <[email protected]>
 
         credentials should be partitioned by main document domain

Modified: trunk/LayoutTests/TestExpectations (211754 => 211755)


--- trunk/LayoutTests/TestExpectations	2017-02-06 23:47:26 UTC (rev 211754)
+++ trunk/LayoutTests/TestExpectations	2017-02-06 23:47:51 UTC (rev 211755)
@@ -1045,7 +1045,6 @@
 webkit.org/b/81826 fast/table/double-height-table-no-tbody.html [ Skip ]
 webkit.org/b/56140 fast/text/large-text-composed-char-dos.html [ Skip ]
 webkit.org/b/63268 http/tests/multipart/win-boundary-crash.html [ Skip ]
-webkit.org/b/167792 http/tests/preload/dynamic_removing_preload.html [ Skip ]
 webkit.org/b/35700 java/lc3/ArrayMethods/object-001.html [ Skip ]
 webkit.org/b/35700 java/lc3/forin/array-001.html [ Skip ]
 webkit.org/b/56080 jquery/effects.html [ Skip ]

Modified: trunk/LayoutTests/http/tests/preload/dynamic_removing_preload-expected.txt (211754 => 211755)


--- trunk/LayoutTests/http/tests/preload/dynamic_removing_preload-expected.txt	2017-02-06 23:47:26 UTC (rev 211754)
+++ trunk/LayoutTests/http/tests/preload/dynamic_removing_preload-expected.txt	2017-02-06 23:47:51 UTC (rev 211755)
@@ -1,4 +1,4 @@
-PASS internals.isPreloaded('../resources/dummy.js'); is false
+PASS downloadedScript is false
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: trunk/LayoutTests/http/tests/preload/dynamic_removing_preload.html (211754 => 211755)


--- trunk/LayoutTests/http/tests/preload/dynamic_removing_preload.html	2017-02-06 23:47:26 UTC (rev 211754)
+++ trunk/LayoutTests/http/tests/preload/dynamic_removing_preload.html	2017-02-06 23:47:51 UTC (rev 211755)
@@ -1,6 +1,10 @@
 <!DOCTYPE html>
 <html>
 <head>
+<script>
+    if (window.internals)
+        window.internals.settings.setResourceTimingEnabled(true);
+</script>
 <script src=""
 <body>
 <script>
@@ -7,12 +11,18 @@
     var link = document.createElement("link");
     link.as = "script";
     link.rel = "preload";
-    link.href = ""
+    link.href = ""
     document.body.appendChild(link);
     document.body.removeChild(link);
+    var downloadedScript = false;
     window.addEventListener("load", function() {
-        shouldBeFalse("internals.isPreloaded('../resources/dummy.js');");
+        var entries = performance.getEntriesByType("resource");
+        for (var i = 0; i < entries.length; ++i) {
+            if (entries[i].name.indexOf("slow-script.pl?delay=100") != -1)
+                downloadedScript = true;
+        }
+        shouldBeFalse("downloadedScript");
     });
 </script>
-<script src=""
+<script src=""
 </body>

Modified: trunk/Source/WebCore/ChangeLog (211754 => 211755)


--- trunk/Source/WebCore/ChangeLog	2017-02-06 23:47:26 UTC (rev 211754)
+++ trunk/Source/WebCore/ChangeLog	2017-02-06 23:47:51 UTC (rev 211755)
@@ -1,3 +1,24 @@
+2017-02-06  Yoav Weiss  <[email protected]>
+
+        http/tests/preload/dynamic_removing_preload.html fails to test what it should
+        https://bugs.webkit.org/show_bug.cgi?id=167792
+
+        Reviewed by Ryosuke Niwa.
+
+        Cancel the link preload resource load when the link element is removed from the DOM.
+
+        No new tests, but unskipping an existing test: http/tests/preload/dynamic_removing_preload.html
+
+        * html/HTMLLinkElement.cpp:
+        (WebCore::HTMLLinkElement::removedFrom): Call m_linkLoader.cancelLoad().
+        * loader/LinkLoader.cpp:
+        (WebCore::LinkLoader::cancelLoad): Clear m_preloadResourceClient.
+        * loader/LinkLoader.h:
+        * loader/LinkPreloadResourceClients.h:
+        (WebCore::LinkPreloadResourceClient::clearResource): Call m_resource->cancelLoad().
+        * loader/SubresourceLoader.cpp:
+        (WebCore::LinkPreloadResourceClient::didFinishLoading): Change ASSERT to exempt cancelled loads.
+
 2017-02-06  Alex Christensen  <[email protected]>
 
         More build fixes after r211751

Modified: trunk/Source/WebCore/html/HTMLLinkElement.cpp (211754 => 211755)


--- trunk/Source/WebCore/html/HTMLLinkElement.cpp	2017-02-06 23:47:26 UTC (rev 211754)
+++ trunk/Source/WebCore/html/HTMLLinkElement.cpp	2017-02-06 23:47:51 UTC (rev 211755)
@@ -320,6 +320,8 @@
     if (!insertionPoint.isConnected() || isConnected())
         return;
 
+    m_linkLoader.cancelLoad();
+
     if (m_sheet)
         clearSheet();
 

Modified: trunk/Source/WebCore/loader/LinkLoader.cpp (211754 => 211755)


--- trunk/Source/WebCore/loader/LinkLoader.cpp	2017-02-06 23:47:26 UTC (rev 211754)
+++ trunk/Source/WebCore/loader/LinkLoader.cpp	2017-02-06 23:47:51 UTC (rev 211755)
@@ -190,6 +190,12 @@
     return nullptr;
 }
 
+void LinkLoader::cancelLoad()
+{
+    if (m_preloadResourceClient)
+        m_preloadResourceClient->clear();
+}
+
 bool LinkLoader::loadLink(const LinkRelAttribute& relAttribute, const URL& href, const String& as, const String& crossOrigin, Document& document)
 {
     if (relAttribute.isDNSPrefetch) {

Modified: trunk/Source/WebCore/loader/LinkLoader.h (211754 => 211755)


--- trunk/Source/WebCore/loader/LinkLoader.h	2017-02-06 23:47:26 UTC (rev 211754)
+++ trunk/Source/WebCore/loader/LinkLoader.h	2017-02-06 23:47:51 UTC (rev 211755)
@@ -57,6 +57,7 @@
 
     WeakPtr<LinkLoader> createWeakPtr() { return m_weakPtrFactory.createWeakPtr(); }
     void triggerEvents(const CachedResource&);
+    void cancelLoad();
 
 private:
     void notifyFinished(CachedResource&) override;

Modified: trunk/Source/WebCore/loader/LinkPreloadResourceClients.h (211754 => 211755)


--- trunk/Source/WebCore/loader/LinkPreloadResourceClients.h	2017-02-06 23:47:26 UTC (rev 211754)
+++ trunk/Source/WebCore/loader/LinkPreloadResourceClients.h	2017-02-06 23:47:51 UTC (rev 211755)
@@ -61,8 +61,10 @@
 
     void clearResource(CachedResourceClient& client)
     {
-        if (m_resource)
+        if (m_resource) {
+            m_resource->cancelLoad();
             m_resource->removeClient(client);
+        }
         m_resource = nullptr;
     }
 

Modified: trunk/Source/WebCore/loader/SubresourceLoader.cpp (211754 => 211755)


--- trunk/Source/WebCore/loader/SubresourceLoader.cpp	2017-02-06 23:47:26 UTC (rev 211754)
+++ trunk/Source/WebCore/loader/SubresourceLoader.cpp	2017-02-06 23:47:51 UTC (rev 211755)
@@ -523,7 +523,7 @@
     ASSERT(!reachedTerminalState());
     ASSERT(!m_resource->resourceToRevalidate());
     // FIXME (129394): We should cancel the load when a decode error occurs instead of continuing the load to completion.
-    ASSERT(!m_resource->errorOccurred() || m_resource->status() == CachedResource::DecodeError);
+    ASSERT(!m_resource->errorOccurred() || m_resource->status() == CachedResource::DecodeError || !m_resource->isLoading());
     LOG(ResourceLoading, "Received '%s'.", m_resource->url().string().latin1().data());
     logResourceLoaded(m_frame.get(), m_resource->type());
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to