Title: [191180] trunk
Revision
191180
Author
cdu...@apple.com
Date
2015-10-16 10:06:06 -0700 (Fri, 16 Oct 2015)

Log Message

HTMLPreloadScanner should preload iframes
https://bugs.webkit.org/show_bug.cgi?id=150097
<rdar://problem/23094475>

Reviewed by Antti Koivisto.

Source/WebCore:

HTMLPreloadScanner should preload iframes to decrease page load time.

Tests:
- fast/preloader/frame-src.html
- http/tests/loading/preload-no-store-frame-src.html

* html/parser/HTMLPreloadScanner.cpp:
(WebCore::TokenPreloadScanner::tagIdFor):
(WebCore::TokenPreloadScanner::initiatorFor):
(WebCore::TokenPreloadScanner::StartTagScanner::createPreloadRequest):
(WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
(WebCore::TokenPreloadScanner::StartTagScanner::resourceType):
(WebCore::TokenPreloadScanner::StartTagScanner::setUrlToLoad): Deleted.
(WebCore::TokenPreloadScanner::StartTagScanner::charset): Deleted.
* html/parser/HTMLPreloadScanner.h:

LayoutTests:

Add layout test to check that iframes are indeed preloaded.

* fast/preloader/frame-src-expected.txt: Added.
* fast/preloader/frame-src.html: Added.
* fast/preloader/resources/testFrame.html: Added.
* http/tests/loading/preload-no-store-frame-src-expected.txt: Added.
* http/tests/loading/preload-no-store-frame-src.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (191179 => 191180)


--- trunk/LayoutTests/ChangeLog	2015-10-16 16:30:41 UTC (rev 191179)
+++ trunk/LayoutTests/ChangeLog	2015-10-16 17:06:06 UTC (rev 191180)
@@ -1,3 +1,19 @@
+2015-10-16  Chris Dumez  <cdu...@apple.com>
+
+        HTMLPreloadScanner should preload iframes
+        https://bugs.webkit.org/show_bug.cgi?id=150097
+        <rdar://problem/23094475>
+
+        Reviewed by Antti Koivisto.
+
+        Add layout test to check that iframes are indeed preloaded.
+
+        * fast/preloader/frame-src-expected.txt: Added.
+        * fast/preloader/frame-src.html: Added.
+        * fast/preloader/resources/testFrame.html: Added.
+        * http/tests/loading/preload-no-store-frame-src-expected.txt: Added.
+        * http/tests/loading/preload-no-store-frame-src.html: Added.
+
 2015-10-16  Csaba Osztrogonác  <o...@webkit.org>
 
         Unreviewed fix after r191175.

Added: trunk/LayoutTests/fast/preloader/frame-src-expected.txt (0 => 191180)


--- trunk/LayoutTests/fast/preloader/frame-src-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/preloader/frame-src-expected.txt	2015-10-16 17:06:06 UTC (rev 191180)
@@ -0,0 +1,6 @@
+js-test-pre.js has MIME type text/_javascript_
+testFrame.html has MIME type text/html
+PASS internals.isPreloaded("resources/testFrame.html"); is true
+Tests that iframes are preloaded.
+
+

Added: trunk/LayoutTests/fast/preloader/frame-src.html (0 => 191180)


--- trunk/LayoutTests/fast/preloader/frame-src.html	                        (rev 0)
+++ trunk/LayoutTests/fast/preloader/frame-src.html	2015-10-16 17:06:06 UTC (rev 191180)
@@ -0,0 +1,18 @@
+<html>
+<head>
+<script>
+if (window.testRunner)
+    testRunner.dumpResourceResponseMIMETypes();
+</script>
+<script src=""
+<script src=""
+<script>
+    shouldBeTrue('internals.isPreloaded("resources/testFrame.html");');
+</script>
+</head>
+<body>
+<p>Tests that iframes are preloaded.</p>
+<iframe src=""
+</body>
+</html>
+

Added: trunk/LayoutTests/fast/preloader/resources/testFrame.html (0 => 191180)


--- trunk/LayoutTests/fast/preloader/resources/testFrame.html	                        (rev 0)
+++ trunk/LayoutTests/fast/preloader/resources/testFrame.html	2015-10-16 17:06:06 UTC (rev 191180)
@@ -0,0 +1,4 @@
+<!DOCTYPE html>
+<body>
+<p>Test frame</p>
+</body>

Added: trunk/LayoutTests/http/tests/loading/preload-no-store-frame-src-expected.txt (0 => 191180)


--- trunk/LayoutTests/http/tests/loading/preload-no-store-frame-src-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/http/tests/loading/preload-no-store-frame-src-expected.txt	2015-10-16 17:06:06 UTC (rev 191180)
@@ -0,0 +1,17 @@
+main frame - didStartProvisionalLoadForFrame
+main frame - didCommitLoadForFrame
+js-test-pre.js has MIME type application/x-_javascript_
+slow-script.pl has MIME type application/_javascript_
+frame "<!--framePath //<!--frame0-->-->" - didStartProvisionalLoadForFrame
+main frame - didFinishDocumentLoadForFrame
+no-store-frame.php has MIME type text/html
+frame "<!--framePath //<!--frame0-->-->" - didCommitLoadForFrame
+frame "<!--framePath //<!--frame0-->-->" - didFinishDocumentLoadForFrame
+frame "<!--framePath //<!--frame0-->-->" - didHandleOnloadEventsForFrame
+main frame - didHandleOnloadEventsForFrame
+frame "<!--framePath //<!--frame0-->-->" - didFinishLoadForFrame
+main frame - didFinishLoadForFrame
+PASS internals.isPreloaded("/navigation/resources/no-store-frame.php"); is true
+Tests that 'no-store' iframes are preloaded.
+
+

Added: trunk/LayoutTests/http/tests/loading/preload-no-store-frame-src.html (0 => 191180)


--- trunk/LayoutTests/http/tests/loading/preload-no-store-frame-src.html	                        (rev 0)
+++ trunk/LayoutTests/http/tests/loading/preload-no-store-frame-src.html	2015-10-16 17:06:06 UTC (rev 191180)
@@ -0,0 +1,18 @@
+<html>
+<head>
+<script>
+if (window.testRunner)
+    testRunner.dumpResourceResponseMIMETypes();
+</script>
+<script src=""
+<script src=""
+<script>
+    shouldBeTrue('internals.isPreloaded("/navigation/resources/no-store-frame.php");');
+</script>
+</head>
+<body>
+<p>Tests that 'no-store' iframes are preloaded.</p>
+<iframe src=""
+</body>
+</html>
+

Modified: trunk/Source/WebCore/ChangeLog (191179 => 191180)


--- trunk/Source/WebCore/ChangeLog	2015-10-16 16:30:41 UTC (rev 191179)
+++ trunk/Source/WebCore/ChangeLog	2015-10-16 17:06:06 UTC (rev 191180)
@@ -1,3 +1,27 @@
+2015-10-16  Chris Dumez  <cdu...@apple.com>
+
+        HTMLPreloadScanner should preload iframes
+        https://bugs.webkit.org/show_bug.cgi?id=150097
+        <rdar://problem/23094475>
+
+        Reviewed by Antti Koivisto.
+
+        HTMLPreloadScanner should preload iframes to decrease page load time.
+
+        Tests:
+        - fast/preloader/frame-src.html
+        - http/tests/loading/preload-no-store-frame-src.html
+
+        * html/parser/HTMLPreloadScanner.cpp:
+        (WebCore::TokenPreloadScanner::tagIdFor):
+        (WebCore::TokenPreloadScanner::initiatorFor):
+        (WebCore::TokenPreloadScanner::StartTagScanner::createPreloadRequest):
+        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
+        (WebCore::TokenPreloadScanner::StartTagScanner::resourceType):
+        (WebCore::TokenPreloadScanner::StartTagScanner::setUrlToLoad): Deleted.
+        (WebCore::TokenPreloadScanner::StartTagScanner::charset): Deleted.
+        * html/parser/HTMLPreloadScanner.h:
+
 2015-10-16  David Hyatt  <hy...@apple.com>
 
         Implement the "all" CSS property.

Modified: trunk/Source/WebCore/html/parser/HTMLPreloadScanner.cpp (191179 => 191180)


--- trunk/Source/WebCore/html/parser/HTMLPreloadScanner.cpp	2015-10-16 16:30:41 UTC (rev 191179)
+++ trunk/Source/WebCore/html/parser/HTMLPreloadScanner.cpp	2015-10-16 17:06:06 UTC (rev 191180)
@@ -44,6 +44,8 @@
 TokenPreloadScanner::TagId TokenPreloadScanner::tagIdFor(const HTMLToken::DataVector& data)
 {
     AtomicString tagName(data);
+    if (tagName == iframeTag)
+        return TagId::Iframe;
     if (tagName == imgTag)
         return TagId::Img;
     if (tagName == inputTag)
@@ -66,6 +68,8 @@
 String TokenPreloadScanner::initiatorFor(TagId tagId)
 {
     switch (tagId) {
+    case TagId::Iframe:
+        return "iframe";
     case TagId::Img:
         return "img";
     case TagId::Input:
@@ -153,6 +157,10 @@
     void processAttribute(const AtomicString& attributeName, const String& attributeValue)
     {
         switch (m_tagId) {
+        case TagId::Iframe:
+            if (match(attributeName, srcAttr))
+                setUrlToLoad(attributeValue);
+            break;
         case TagId::Img:
             if (match(attributeName, srcsetAttr) && m_srcSetAttribute.isNull()) {
                 m_srcSetAttribute = attributeValue;
@@ -222,12 +230,25 @@
 
     CachedResource::Type resourceType() const
     {
-        if (m_tagId == TagId::Script)
+        switch (m_tagId) {
+        case TagId::Iframe:
+            return CachedResource::MainResource;
+        case TagId::Script:
             return CachedResource::Script;
-        if (m_tagId == TagId::Img || (m_tagId == TagId::Input && m_inputIsImage))
+        case TagId::Img:
+        case TagId::Input:
+            ASSERT(m_tagId != TagId::Input || m_inputIsImage);
             return CachedResource::ImageResource;
-        if (m_tagId == TagId::Link && m_linkIsStyleSheet)
+        case TagId::Link:
+            ASSERT(m_linkIsStyleSheet);
             return CachedResource::CSSStyleSheet;
+        case TagId::Meta:
+        case TagId::Unknown:
+        case TagId::Style:
+        case TagId::Base:
+        case TagId::Template:
+            break;
+        }
         ASSERT_NOT_REACHED();
         return CachedResource::RawResource;
     }
@@ -237,7 +258,7 @@
         if (m_urlToLoad.isEmpty())
             return false;
 
-        if (protocolIs(m_urlToLoad, "data"))
+        if (protocolIs(m_urlToLoad, "data") || protocolIs(m_urlToLoad, "about"))
             return false;
 
         if (m_tagId == TagId::Link && !m_linkIsStyleSheet)

Modified: trunk/Source/WebCore/html/parser/HTMLPreloadScanner.h (191179 => 191180)


--- trunk/Source/WebCore/html/parser/HTMLPreloadScanner.h	2015-10-16 16:30:41 UTC (rev 191179)
+++ trunk/Source/WebCore/html/parser/HTMLPreloadScanner.h	2015-10-16 17:06:06 UTC (rev 191180)
@@ -45,6 +45,7 @@
 private:
     enum class TagId {
         // These tags are scanned by the StartTagScanner.
+        Iframe,
         Img,
         Input,
         Link,
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to