https://bugs.webkit.org/show_bug.cgi?id=144640
Reviewed by Dean Jackson.
Source/WebCore:
Add support for the <meta> tag to the HTMLPreloadScanner
and when the meta tag's name is viewport, get the document
to process the tag's attribute value, and set its ViewportArgument.
Tests: fast/dom/HTMLMetaElement/meta-preloader.html
* html/parser/HTMLPreloadScanner.cpp:
(WebCore::TokenPreloadScanner::tagIdFor): Added meta.
(WebCore::TokenPreloadScanner::initiatorFor): Added meta.
(WebCore::TokenPreloadScanner::StartTagScanner::StartTagScanner): Call document.processViewport is meta viewport encountered.
(WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
(WebCore::TokenPreloadScanner::StartTagScanner::processAttribute): Keep track of meta viewport tags.
(WebCore::testPreloadScannerViewportSupport): Testing function that makes sure this functionality is working.
* html/parser/HTMLPreloadScanner.h:
* testing/Internals.cpp:
(WebCore::Internals::testPreloaderSettingViewport): Calls the testing function.
* testing/Internals.h:
* testing/Internals.idl:
LayoutTests:
Added a layout test that is simply calling an internals method
that tests the HTMLPreloadScanner.
* fast/dom/HTMLMetaElement/meta-preloader-expected.txt: Added.
* fast/dom/HTMLMetaElement/meta-preloader.html: Added.
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@183951
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2015-05-07 Yoav Weiss <yoav@yoav.ws>
+
+ Handle meta viewport in HTMLPreloadScanner
+ https://bugs.webkit.org/show_bug.cgi?id=144640
+
+ Reviewed by Dean Jackson.
+
+ Added a layout test that is simply calling an internals method
+ that tests the HTMLPreloadScanner.
+
+ * fast/dom/HTMLMetaElement/meta-preloader-expected.txt: Added.
+ * fast/dom/HTMLMetaElement/meta-preloader.html: Added.
+
2015-05-07 Zalan Bujtas <zalan@apple.com>
REGRESSION (r164449): Subpixel rendering: http://www.apple.com/iphone-6/ "Faster wireless." image displays vertical black line on 1x displays at specific window width.
--- /dev/null
+You should see 1 line with "SUCCESS" below:
+SUCCESS (value: "true")
--- /dev/null
+<html>
+<head>
+</head>
+<body>
+You should see 1 line with "SUCCESS" below:
+<div id=result></div>
+<script>
+if (window.testRunner)
+ testRunner.dumpAsText();
+
+function checkExpected(actual, expected)
+{
+ var result = document.getElementById("result");
+ if (actual != expected)
+ result.innerHTML = "<p>FAILURE: expected \"" + expected + "\", actual \"" + actual + "\"</p>";
+ else
+ result.innerHTML = "<p>SUCCESS (value: \"" + actual + "\")</p>";
+}
+
+if (window.internals)
+ checkExpected(internals.testPreloaderSettingViewport(), true);
+</script>
+</body>
+</html>
+2015-05-07 Yoav Weiss <yoav@yoav.ws>
+
+ Handle meta viewport in HTMLPreloadScanner
+ https://bugs.webkit.org/show_bug.cgi?id=144640
+
+ Reviewed by Dean Jackson.
+
+ Add support for the <meta> tag to the HTMLPreloadScanner
+ and when the meta tag's name is viewport, get the document
+ to process the tag's attribute value, and set its ViewportArgument.
+
+ Tests: fast/dom/HTMLMetaElement/meta-preloader.html
+
+ * html/parser/HTMLPreloadScanner.cpp:
+ (WebCore::TokenPreloadScanner::tagIdFor): Added meta.
+ (WebCore::TokenPreloadScanner::initiatorFor): Added meta.
+ (WebCore::TokenPreloadScanner::StartTagScanner::StartTagScanner): Call document.processViewport is meta viewport encountered.
+ (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
+ (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute): Keep track of meta viewport tags.
+ (WebCore::testPreloadScannerViewportSupport): Testing function that makes sure this functionality is working.
+ * html/parser/HTMLPreloadScanner.h:
+ * testing/Internals.cpp:
+ (WebCore::Internals::testPreloaderSettingViewport): Calls the testing function.
+ * testing/Internals.h:
+ * testing/Internals.idl:
+
2015-05-07 Zalan Bujtas <zalan@apple.com>
REGRESSION (r164449): Subpixel rendering: http://www.apple.com/iphone-6/ "Faster wireless." image displays vertical black line on 1x displays at specific window width.
return TagId::Base;
if (tagName == templateTag)
return TagId::Template;
+ if (tagName == metaTag)
+ return TagId::Meta;
return TagId::Unknown;
}
case TagId::Style:
case TagId::Base:
case TagId::Template:
+ case TagId::Meta:
ASSERT_NOT_REACHED();
return "unknown";
}
explicit StartTagScanner(TagId tagId, float deviceScaleFactor = 1.0)
: m_tagId(tagId)
, m_linkIsStyleSheet(false)
+ , m_metaIsViewport(false)
, m_inputIsImage(false)
, m_deviceScaleFactor(deviceScaleFactor)
{
ImageCandidate imageCandidate = bestFitSourceForImageAttributes(m_deviceScaleFactor, m_urlToLoad, m_srcSetAttribute, sourceSize);
setUrlToLoad(imageCandidate.string.toString(), true);
}
+
+ if (m_metaIsViewport && !m_metaContent.isNull())
+ document.processViewport(m_metaContent, ViewportArguments::ViewportMeta);
}
std::unique_ptr<PreloadRequest> createPreloadRequest(const URL& predictedBaseURL)
setUrlToLoad(attributeValue);
else if (match(attributeName, typeAttr))
m_inputIsImage = equalIgnoringCase(attributeValue, InputTypeNames::image());
+ } else if (m_tagId == TagId::Meta) {
+ if (match(attributeName, contentAttr))
+ m_metaContent = attributeValue;
+ else if (match(attributeName, nameAttr))
+ m_metaIsViewport = equalIgnoringCase(attributeValue, "viewport");
}
}
String m_crossOriginMode;
bool m_linkIsStyleSheet;
String m_mediaAttribute;
+ String m_metaContent;
+ bool m_metaIsViewport;
bool m_inputIsImage;
float m_deviceScaleFactor;
};
preloader.preload(WTF::move(requests));
}
+bool testPreloadScannerViewportSupport(Document* document)
+{
+ ASSERT(document);
+ HTMLParserOptions options(*document);
+ HTMLPreloadScanner scanner(options, document->url());
+ HTMLResourcePreloader preloader(*document);
+ scanner.appendToEnd(String("<meta name=viewport content='width=400'>"));
+ scanner.scan(preloader, *document);
+ return (document->viewportArguments().width == 400);
+}
+
}
Input,
Link,
Script,
+ Meta,
// These tags are not scanned by the StartTagScanner.
Unknown,
HTMLTokenizer m_tokenizer;
};
+WEBCORE_EXPORT bool testPreloadScannerViewportSupport(Document*);
+
}
#endif
#include "HTMLInputElement.h"
#include "HTMLNames.h"
#include "HTMLPlugInElement.h"
+#include "HTMLPreloadScanner.h"
#include "HTMLSelectElement.h"
#include "HTMLTextAreaElement.h"
#include "HTMLVideoElement.h"
}
#endif
+bool Internals::testPreloaderSettingViewport()
+{
+ return testPreloadScannerViewportSupport(contextDocument());
+}
+
}
RefPtr<File> createFile(const String&);
void queueMicroTask(int);
+ bool testPreloaderSettingViewport();
#if ENABLE(CONTENT_FILTERING)
MockContentFilterSettings& mockContentFilterSettings();
File createFile(DOMString url);
void queueMicroTask(long testNumber);
+ boolean testPreloaderSettingViewport();
[Conditional=CONTENT_FILTERING] readonly attribute MockContentFilterSettings mockContentFilterSettings;