Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1305)

Unified Diff: Source/core/html/parser/HTMLPreloadScanner.cpp

Issue 14449003: Picture element initial implementation (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@picture_after_rebase
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/html/parser/HTMLPreloadScanner.h ('k') | Source/core/html/parser/HTMLResourcePreloader.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/html/parser/HTMLPreloadScanner.cpp
diff --git a/Source/core/html/parser/HTMLPreloadScanner.cpp b/Source/core/html/parser/HTMLPreloadScanner.cpp
index 79fb5611b843bf476ac278893b53deb26426128c..b0b463421340106ed9600079963e2ec3a8609df5 100644
--- a/Source/core/html/parser/HTMLPreloadScanner.cpp
+++ b/Source/core/html/parser/HTMLPreloadScanner.cpp
@@ -85,20 +85,37 @@ static String initiatorFor(const StringImpl* tagImpl)
return linkTag.localName();
if (match(tagImpl, scriptTag))
return scriptTag.localName();
+#if ENABLE(PICTURE)
+ if (match(tagImpl, sourceTag))
+ return sourceTag.localName();
+ if (match(tagImpl, pictureTag))
+ return pictureTag.localName();
+#endif
ASSERT_NOT_REACHED();
return "unknown";
}
class TokenPreloadScanner::StartTagScanner {
public:
- explicit StartTagScanner(const StringImpl* tagImpl)
+ explicit StartTagScanner(const StringImpl* tagImpl
+#if ENABLE(PICTURE)
+ , bool inPicture
+#endif
+ )
: m_tagImpl(tagImpl)
, m_linkIsStyleSheet(false)
, m_inputIsImage(false)
+#if ENABLE(PICTURE)
+ , m_tagInPicture(inPicture)
+#endif
{
if (!match(m_tagImpl, imgTag)
&& !match(m_tagImpl, inputTag)
&& !match(m_tagImpl, linkTag)
+#if ENABLE(PICTURE)
+ && !match(m_tagImpl, pictureTag)
+ && !match(m_tagImpl, sourceTag)
+#endif
&& !match(m_tagImpl, scriptTag))
m_tagImpl = 0;
}
@@ -134,6 +151,9 @@ public:
return request.release();
}
+#if ENABLE(PICTURE)
+ bool inPicture() { return m_tagInPicture; }
+#endif
private:
template<typename NameType>
void processAttribute(const NameType& attributeName, const String& attributeValue)
@@ -141,11 +161,27 @@ private:
if (match(attributeName, charsetAttr))
m_charset = attributeValue;
- if (match(m_tagImpl, scriptTag) || match(m_tagImpl, imgTag)) {
- if (match(attributeName, srcAttr))
+ if (match(m_tagImpl, scriptTag)
+ || match(m_tagImpl, imgTag)
+#if ENABLE(PICTURE)
+ || match(m_tagImpl, pictureTag)
+#endif
+ ) {
+ if (match(attributeName, srcAttr)) {
setUrlToLoad(attributeValue);
+#if ENABLE(PICTURE)
+ m_tagInPicture = false;
+#endif
+ }
else if (match(attributeName, crossoriginAttr) && !attributeValue.isNull())
m_crossOriginMode = stripLeadingAndTrailingHTMLSpaces(attributeValue);
+#if ENABLE(PICTURE)
+ } else if (match(m_tagImpl, sourceTag) && m_tagInPicture) {
+ if (match(attributeName, srcAttr))
+ setUrlToLoad(attributeValue);
+ else if (match(attributeName, mediaAttr))
+ m_mediaAttribute = attributeValue;
+#endif
} else if (match(m_tagImpl, linkTag)) {
if (match(attributeName, hrefAttr))
setUrlToLoad(attributeValue);
@@ -188,7 +224,13 @@ private:
{
if (match(m_tagImpl, scriptTag))
return CachedResource::Script;
- if (match(m_tagImpl, imgTag) || (match(m_tagImpl, inputTag) && m_inputIsImage))
+ if (match(m_tagImpl, imgTag)
+ || (match(m_tagImpl, inputTag) && m_inputIsImage)
+#if ENABLE(PICTURE)
+ || (match(m_tagImpl, pictureTag))
+ || (match(m_tagImpl, sourceTag))
+#endif
+ )
return CachedResource::ImageResource;
if (match(m_tagImpl, linkTag) && m_linkIsStyleSheet)
return CachedResource::CSSStyleSheet;
@@ -219,8 +261,18 @@ private:
bool m_linkIsStyleSheet;
String m_mediaAttribute;
bool m_inputIsImage;
+#if ENABLE(PICTURE)
+ bool m_tagInPicture;
+#endif
};
+static void appendBundleRequest(PreloadRequestStream& requests, bool start, bool end)
+{
+ OwnPtr<PreloadRequest> request = PreloadRequest::create(start, end);
+ if (request)
+ requests.append(request.release());
+}
+
TokenPreloadScanner::TokenPreloadScanner(const KURL& documentURL)
: m_documentURL(documentURL)
, m_inStyle(false)
@@ -250,18 +302,18 @@ void TokenPreloadScanner::rewindTo(TokenPreloadScannerCheckpoint checkpointIndex
m_checkpoints.clear();
}
-void TokenPreloadScanner::scan(const HTMLToken& token, Vector<OwnPtr<PreloadRequest> >& requests)
+void TokenPreloadScanner::scan(const HTMLToken& token, PreloadRequestStream& requests)
{
scanCommon(token, requests);
}
-void TokenPreloadScanner::scan(const CompactHTMLToken& token, Vector<OwnPtr<PreloadRequest> >& requests)
+void TokenPreloadScanner::scan(const CompactHTMLToken& token, PreloadRequestStream& requests)
{
scanCommon(token, requests);
}
template<typename Token>
-void TokenPreloadScanner::scanCommon(const Token& token, Vector<OwnPtr<PreloadRequest> >& requests)
+void TokenPreloadScanner::scanCommon(const Token& token, PreloadRequestStream& requests)
{
switch (token.type()) {
case HTMLToken::Character: {
@@ -282,6 +334,12 @@ void TokenPreloadScanner::scanCommon(const Token& token, Vector<OwnPtr<PreloadRe
m_cssScanner.reset();
m_inStyle = false;
}
+#if ENABLE(PICTURE)
+ else if (match(tagImpl, pictureTag)) {
+ m_inPicture = false;
+ appendBundleRequest(requests, false, true);
+ }
+#endif
return;
}
case HTMLToken::StartTag: {
@@ -296,6 +354,12 @@ void TokenPreloadScanner::scanCommon(const Token& token, Vector<OwnPtr<PreloadRe
m_inStyle = true;
return;
}
+#if ENABLE(PICTURE)
+ if (match(tagImpl, pictureTag)) {
+ m_inPicture = true;
+ appendBundleRequest(requests, true, false);
+ }
+#endif
if (match(tagImpl, baseTag)) {
// The first <base> element is the one that wins.
if (!m_predictedBaseElementURL.isEmpty())
@@ -304,8 +368,15 @@ void TokenPreloadScanner::scanCommon(const Token& token, Vector<OwnPtr<PreloadRe
return;
}
- StartTagScanner scanner(tagImpl);
+ StartTagScanner scanner(tagImpl
+#if ENABLE(PICTURE)
+ , m_inPicture
+#endif
+ );
scanner.processAttributes(token.attributes());
+#if ENABLE(PICTURE)
+ m_inPicture = scanner.inPicture();
+#endif
OwnPtr<PreloadRequest> request = scanner.createPreloadRequest(m_predictedBaseElementURL);
if (request)
requests.append(request.release());
« no previous file with comments | « Source/core/html/parser/HTMLPreloadScanner.h ('k') | Source/core/html/parser/HTMLResourcePreloader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698