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());