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);
+}
+
}