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,