From 14ccb24be5dc2df42bf514c6c8cfc70be50bf9a0 Mon Sep 17 00:00:00 2001 From: Benedikt Christoph Wolters Date: Wed, 1 Feb 2017 15:54:15 +0100 Subject: [PATCH] add support for link rel="preload" for --get-assets --- src/HtmlParser.cc | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/HtmlParser.cc b/src/HtmlParser.cc index 2a13738d..57a4bdf3 100644 --- a/src/HtmlParser.cc +++ b/src/HtmlParser.cc @@ -55,6 +55,22 @@ StringRef get_attr(const xmlChar **attrs, const StringRef &name) { } } // namespace + +namespace { +ResourceType get_resource_type_for_preload_as(const StringRef &attribute_value) { + if (util::strieq_l("image", attribute_value)) { + return REQ_IMG; + } else if (util::strieq_l("style", attribute_value)) { + return REQ_CSS; + } else if (util::strieq_l("script", attribute_value)) { + return REQ_UNBLOCK_JS; + } else { + return REQ_OTHERS; + } +} +} // namespace + + namespace { void add_link(ParserData *parser_data, const StringRef &uri, ResourceType res_type) { @@ -88,6 +104,12 @@ void start_element_func(void *user_data, const xmlChar *src_name, add_link(parser_data, href_attr, REQ_OTHERS); } else if (util::strieq_l("stylesheet", rel_attr)) { add_link(parser_data, href_attr, REQ_CSS); + } else if (util::strieq_l("preload", rel_attr)) { + auto as_attr = get_attr(attrs, StringRef::from_lit("as")); + if (as_attr.empty()) { + return; + } + add_link(parser_data, href_attr, get_resource_type_for_preload_as(as_attr)); } } else if (util::strieq_l("img", name)) { auto src_attr = get_attr(attrs, StringRef::from_lit("src"));