Commit 1f101f51 authored by Felipe Erias's avatar Felipe Erias Committed by Commit Bot

Warning when link preload uses unsupported "as"

Show a more informative warning message when a link preload uses an
"as" attribute that is valid but currently unsupported.

Test: link-preload-unsupported-destination.html

Bug: 1047945
Change-Id: I6473bc91fb51581358e530ca41a6ffb00b0aa559
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2041715
Commit-Queue: Yoav Weiss <yoavweiss@chromium.org>
Reviewed-by: default avatarYutaka Hirano <yhirano@chromium.org>
Reviewed-by: default avatarYoav Weiss <yoavweiss@chromium.org>
Reviewed-by: default avatarDominic Farolino <dom@chromium.org>
Cr-Commit-Position: refs/heads/master@{#740588}
parent 24156892
...@@ -284,6 +284,7 @@ Evgeniy Dushistov <dushistov@gmail.com> ...@@ -284,6 +284,7 @@ Evgeniy Dushistov <dushistov@gmail.com>
Evgeny Agafonchikov <evgeny.agafonchikov@akvelon.com> Evgeny Agafonchikov <evgeny.agafonchikov@akvelon.com>
Fabian Henneke <fabian.henneke@gmail.com> Fabian Henneke <fabian.henneke@gmail.com>
Fabien Tassin <fta@sofaraway.org> Fabien Tassin <fta@sofaraway.org>
Felipe Erias Morandeira <felipeerias@gmail.com>
Felix H. Dahlke <fhd@ubercode.de> Felix H. Dahlke <fhd@ubercode.de>
Fengrong Fang <fr.fang@samsung.com> Fengrong Fang <fr.fang@samsung.com>
Fernando Jiménez Moreno <ferjmoreno@gmail.com> Fernando Jiménez Moreno <ferjmoreno@gmail.com>
......
...@@ -123,6 +123,17 @@ KURL GetBestFitImageURL(const Document& document, ...@@ -123,6 +123,17 @@ KURL GetBestFitImageURL(const Document& document,
: KURL(base_url, candidate.ToString()); : KURL(base_url, candidate.ToString());
} }
// Check whether the `as` attribute is valid according to the spec, even if we
// don't currently support it yet.
bool IsValidButUnsupportedAsAttribute(const String& as) {
DCHECK(as != "fetch" && as != "image" && as != "font" && as != "script" &&
as != "style" && as != "track");
return as == "audio" || as == "audioworklet" || as == "document" ||
as == "embed" || as == "manifest" || as == "object" ||
as == "paintworklet" || as == "report" || as == "sharedworker" ||
as == "video" || as == "worker" || as == "xslt";
}
} // namespace } // namespace
void PreloadHelper::DnsPrefetchIfNeeded( void PreloadHelper::DnsPrefetchIfNeeded(
...@@ -267,13 +278,17 @@ Resource* PreloadHelper::PreloadIfNeeded( ...@@ -267,13 +278,17 @@ Resource* PreloadHelper::PreloadIfNeeded(
if (caller == kLinkCalledFromHeader) if (caller == kLinkCalledFromHeader)
UseCounter::Count(document, WebFeature::kLinkHeaderPreload); UseCounter::Count(document, WebFeature::kLinkHeaderPreload);
if (resource_type == base::nullopt) { if (resource_type == base::nullopt) {
String message;
if (IsValidButUnsupportedAsAttribute(params.as)) {
message = String("<link rel=preload> uses an unsupported `as` value");
} else {
message = String("<link rel=preload> must have a valid `as` value");
}
document.AddConsoleMessage(ConsoleMessage::Create( document.AddConsoleMessage(ConsoleMessage::Create(
mojom::ConsoleMessageSource::kOther, mojom::blink::ConsoleMessageSource::kOther,
mojom::ConsoleMessageLevel::kWarning, mojom::blink::ConsoleMessageLevel::kWarning, message));
String("<link rel=preload> must have a valid `as` value")));
return nullptr; return nullptr;
} }
if (!IsSupportedType(resource_type.value(), params.type)) { if (!IsSupportedType(resource_type.value(), params.type)) {
document.AddConsoleMessage(ConsoleMessage::Create( document.AddConsoleMessage(ConsoleMessage::Create(
mojom::ConsoleMessageSource::kOther, mojom::ConsoleMessageSource::kOther,
......
CONSOLE WARNING: line 6: <link rel=preload> must have a valid `as` value
CONSOLE WARNING: line 7: <link rel=preload> uses an unsupported `as` value
CONSOLE WARNING: line 8: <link rel=preload> uses an unsupported `as` value
CONSOLE WARNING: line 9: <link rel=preload> uses an unsupported `as` value
<!DOCTYPE html>
<script>
if (window.testRunner)
testRunner.dumpAsText();
</script>
<link rel=preload href="resources/empty.html">
<link rel=preload href="resources/empty.html" as="document">
<link rel=preload href="../../../media/content/test.mp4" as="audio">
<link rel=preload href="../../../media/content/test.wav" as="video">
<!--This test verifies that specific warnings are shown when preload
resources use unsupported (but valid) destinations. -->
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment