Fix preloader issue with srcdoc documents.
authoryoav@yoav.ws <yoav@yoav.ws@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 2 Dec 2015 22:41:21 +0000 (22:41 +0000)
committeryoav@yoav.ws <yoav@yoav.ws@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 2 Dec 2015 22:41:21 +0000 (22:41 +0000)
https://bugs.webkit.org/show_bug.cgi?id=151744

Reviewed by Ryosuke Niwa.

Source/WebCore:

Make sure that PreloadRequest is resolving URLs based on the document's
baseURL() rather than using url() as the base URL, which is not how URLs
are resolved by the parser, and fails when document->url() diverges from
the document's base URL (e.g. in the case of srcdoc based documents).

Test: fast/preloader/iframe-srcdoc.html

* html/parser/HTMLResourcePreloader.cpp:
(WebCore::PreloadRequest::completeURL):

LayoutTests:

Added a test that makes sure that srcdoc based subresources are properly preloaded.

* fast/preloader/iframe-srcdoc-expected.txt: Added.
* fast/preloader/iframe-srcdoc.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@192969 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/preloader/iframe-srcdoc-expected.txt [new file with mode: 0644]
LayoutTests/fast/preloader/iframe-srcdoc.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/html/parser/HTMLResourcePreloader.cpp

index 4eefc30..d7ad5de 100644 (file)
@@ -1,3 +1,15 @@
+2015-12-02  Yoav Weiss  <yoav@yoav.ws>
+
+        Fix preloader issue with srcdoc documents.
+        https://bugs.webkit.org/show_bug.cgi?id=151744
+
+        Reviewed by Ryosuke Niwa.
+
+        Added a test that makes sure that srcdoc based subresources are properly preloaded.
+
+        * fast/preloader/iframe-srcdoc-expected.txt: Added.
+        * fast/preloader/iframe-srcdoc.html: Added.
+
 2015-12-02  Jer Noble  <jer.noble@apple.com>
 
         Add a setting and restriction which will pause invisible autoplaying video
diff --git a/LayoutTests/fast/preloader/iframe-srcdoc-expected.txt b/LayoutTests/fast/preloader/iframe-srcdoc-expected.txt
new file mode 100644 (file)
index 0000000..d9c48ed
--- /dev/null
@@ -0,0 +1,7 @@
+CONSOLE MESSAGE: line 1: PASS
+This test has to be run as a layout test in order to see if resources were loaded and the test passed. 
+
+--------
+Frame: '<!--framePath //<!--frame0-->-->'
+--------
+ <script src=resources/script1.js></script>
diff --git a/LayoutTests/fast/preloader/iframe-srcdoc.html b/LayoutTests/fast/preloader/iframe-srcdoc.html
new file mode 100644 (file)
index 0000000..b3f43ab
--- /dev/null
@@ -0,0 +1,10 @@
+<body>
+<script>
+    if (window.testRunner) {
+        testRunner.dumpChildFramesAsText();
+        testRunner.dumpAsText();
+    }
+
+</script>
+This test has to be run as a layout test in order to see if resources were loaded and the test passed.
+<iframe srcdoc="<script> window.addEventListener('DOMContentLoaded', function() { if (window.internals) console.log(internals.isPreloaded('resources/script1.js') ? 'PASS' : 'FAIL'); }, false); </script><script src=resources/non-existant.js></script><script>document.write('<plaintext>');</script> <script src=resources/script1.js></script>" />
index d58596f..01fe882 100644 (file)
@@ -1,3 +1,20 @@
+2015-12-02  Yoav Weiss  <yoav@yoav.ws>
+
+        Fix preloader issue with srcdoc documents.
+        https://bugs.webkit.org/show_bug.cgi?id=151744
+
+        Reviewed by Ryosuke Niwa.
+
+        Make sure that PreloadRequest is resolving URLs based on the document's
+        baseURL() rather than using url() as the base URL, which is not how URLs
+        are resolved by the parser, and fails when document->url() diverges from
+        the document's base URL (e.g. in the case of srcdoc based documents).
+
+        Test: fast/preloader/iframe-srcdoc.html
+
+        * html/parser/HTMLResourcePreloader.cpp:
+        (WebCore::PreloadRequest::completeURL):
+
 2015-12-02  Jer Noble  <jer.noble@apple.com>
 
         Add a setting and restriction which will pause invisible autoplaying video
index 5e79d4c..46d8db6 100644 (file)
@@ -37,7 +37,7 @@ namespace WebCore {
 
 URL PreloadRequest::completeURL(Document& document)
 {
-    return document.completeURL(m_resourceURL, m_baseURL.isEmpty() ? document.url() : m_baseURL);
+    return document.completeURL(m_resourceURL, m_baseURL.isEmpty() ? document.baseURL() : m_baseURL);
 }
 
 CachedResourceRequest PreloadRequest::resourceRequest(Document& document)