Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add preload tests from Blink. #4316

Merged
merged 16 commits into from
Dec 19, 2016
Merged
13 changes: 13 additions & 0 deletions preload/avoid_delaying_onload_link_preload.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
var t = async_test('Makes sure link preload preloaded resources are not delaying onload');
</script>
<link rel=preload href="resources/dummy.js?pipe=trickle(d2)" as=script>
<script>
window.addEventListener("load", t.step_func(function() {
assert_equals(performance.getEntriesByType("resource").length, 2);
t.done();
}));
</script>
20 changes: 20 additions & 0 deletions preload/delaying_onload_link_preload_after_discovery.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
var t = async_test('Makes sure link preload preloaded resources are delaying onload after discovery');
</script>
<link rel=preload href="resources/dummy.js?pipe=trickle(d1)" as=script>
<link rel=preload href="resources/square.png?pipe=trickle(d1)" as=image>
<body>
<script>
window.addEventListener("load", t.step_func(function() {
assert_equals(performance.getEntriesByType("resource").length, 4);
t.done();
}));
var script = document.createElement("script");
script.src = "resources/dummy.js?pipe=trickle(d1)";
document.body.appendChild(script);
var img = new Image();
img.src = "resources/square.png?pipe=trickle(d1)";
</script>
26 changes: 26 additions & 0 deletions preload/download_resources.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<!DOCTYPE html>

<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
var t = async_test('Makes sure that preloaded resources are downloaded');
</script>
<link rel=preload href="resources/dummy.js" as=script>
<link rel=preload href="resources/dummy.css" as=style>
<link rel=preload href="resources/square.png" as=image>
<link rel=preload href="/fonts/CanvasTest.ttf" as=font crossorigin>
<link rel=preload href="/media/white.mp4" as=media>
<link rel=preload href="/media/sound_5.oga" as=media>
<link rel=preload href="/media/foo.vtt" as=media>
<link rel=preload href="resources/dummy.xml?foo=bar" as=foobarxmlthing>
<link rel=preload href="resources/dummy.xml">
<body>
<script src="resources/dummy.js?pipe=trickle(d1)"></script>
<script>
window.addEventListener("load", t.step_func(function() {
var entries = performance.getEntriesByType("resource");
assert_equals(performance.getEntriesByType("resource").length, 11);
t.done();
}));
</script>
</body>
19 changes: 19 additions & 0 deletions preload/dynamic_adding_preload.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
var t = async_test('Makes sure that a dynamically added preloaded resource is downloaded');
</script>
<body>
<script>
var link = document.createElement("link");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wrap everything in t.step(function() { ... }) (or use async_test(function(t) { ... }))

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

link.as = "script";
link.rel = "preload";
link.href = "resources/dummy.js";
link.onload = t.step_func(function() {
assert_equals(performance.getEntriesByType("resource").length, 3);
t.done();
});
document.body.appendChild(link);
</script>
</body>
23 changes: 23 additions & 0 deletions preload/dynamic_remove_preload_href.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
var t = async_test('Makes sure that dynamically removed preloaded resource stop downloading');
</script>
<body>
<script>
var link = document.createElement("link");
link.as = "script";
link.rel = "preload";
var url = "resources/dummy.js?pipe=trickle(d0.3)";
link.href = url;
document.body.appendChild(link);
link.href = "";
window.addEventListener("load", t.step_func(function() {
var entries = performance.getEntriesByName(new URL(url, location.href).href);
assert_equals(entries.length, 0);
t.done();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure I follow this test. How does this verify that the preload response is aborted? Meta: does abort even make sense? The browser should start a new download if href is mutated, but it's not clear that the old one can/should be stopped.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It verifies that by seeing 3 resources in RT rather than 4. I could make it explicit looking at a particular URL.

I was following the spec's processing model: "The user agent should abort the current request if the href attribute of the link element of a preload link is changed, removed, or its value is set to an empty string." (which IMO makes sense)

}));
</script>
<script src="resources/dummy.js?pipe=trickle(d1)"></script>
</body>
23 changes: 23 additions & 0 deletions preload/dynamic_removing_preload.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
var t = async_test('Makes sure that dynamically removed preloaded resource stop downloading');
</script>
<body>
<script>
var link = document.createElement("link");
link.as = "script";
link.rel = "preload";
var url = "resources/dummy.js?pipe=trickle(d0.3)";
link.href = url;
document.body.appendChild(link);
document.body.removeChild(link);
window.addEventListener("load", t.step_func(function() {
var entries = performance.getEntriesByName(new URL(url, location.href).href);
assert_equals(entries.length, 0);
t.done();
}));
</script>
<script src="resources/dummy.js?pipe=trickle(d0.5)"></script>
</body>
16 changes: 16 additions & 0 deletions preload/link_header_preload.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
var t = async_test('Makes sure that Link headers preload resources');
</script>
<body>
<script src="resources/dummy.js?pipe=trickle(d0.2)"></script>
<script>
window.addEventListener("load", t.step_func(function() {
var entries = performance.getEntriesByType("resource");
assert_equals(entries.length, 6);
t.done();
}));
</script>
</body>
4 changes: 4 additions & 0 deletions preload/link_header_preload.html.headers
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Link: </preload/resources/dummy.js>;rel=preload;as=script
Link: </preload/resources/dummy.css>;rel=preload;as=style
Link: </preload/resources/square.png>;rel=preload;as=image

35 changes: 35 additions & 0 deletions preload/link_header_preload_delay_onload.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
var t = async_test('Makes sure that Link headers preload resources and block window.onload after resource discovery');
</script>
<body>
<script src="resources/dummy.js?pipe=trickle(d0.2)"></script>
<style>
#background {
width: 200px;
height: 200px;
background-image: url(resources/square.png?background);
}
</style>
<link rel="stylesheet" href="resources/dummy.css">
<script src="resources/dummy.js"></script>
<div id="background"></div>
<script>
document.write('<img src="resources/square.png">');
window.addEventListener("load", t.step_func(function() {
var entries = performance.getEntriesByType("resource");
var found_background_first = false;
for (var i = 0; i < entries.length; ++i) {
var entry = entries[i];
if (entry.name.indexOf("square") != -1) {
if (entry.name.indexOf("background") != -1)
found_background_first = true;
}
}
assert_true(found_background_first);
assert_equals(entries.length, 7);
t.done();
}));
</script>
5 changes: 5 additions & 0 deletions preload/link_header_preload_delay_onload.html.headers
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Link: </preload/resources/square.png?background>;rel=preload;as=image
Link: </preload/resources/dummy.js>;rel=preload;as=script
Link: </preload/resources/dummy.css>;rel=preload;as=style
Link: </preload/resources/square.png>;rel=preload;as=image

44 changes: 44 additions & 0 deletions preload/onerror_event.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<!DOCTYPE html>
<html>
<head></head>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
var t = async_test('Makes sure that preloaded resources trigger the onerror event');
var scriptFailed = false;
var styleFailed = false;
var imageFailed = false;
var fontFailed = false;
var videoFailed = false;
var audioFailed = false;
var trackFailed = false;
var gibberishFailed = false;
var noTypeFailed = false;
</script>
<link rel=preload href="non-existent/dummy.js" as=script onerror="scriptFailed = true;">
<link rel=preload href="non-existent/dummy.css" as=style onerror="styleFailed = true;">
<link rel=preload href="non-existent/square.png" as=image onerror="imageFailed = true;">
<link rel=preload href="non-existent/Ahem.ttf" as=font crossorigin onerror="fontFailed = true;">
<link rel=preload href="non-existent/test.mp4" as=video onerror="videoFailed = true;">
<link rel=preload href="non-existent/test.oga" as=audio onerror="audioFailed = true;">
<link rel=preload href="non-existent/security/captions.vtt" as=media onerror="trackFailed = true;">
<link rel=preload href="non-existent/dummy.xml" as=foobarxmlthing onerror="gibberishFailed = true;">
<link rel=preload href="non-existent/dummy.xml" onerror="noTypeFailed = true;">
<script src="resources/dummy.js?pipe=trickle(d0.5)"></script>
<script>
window.onload = t.step(function(){
assert_true(styleFailed, "style triggered error event");
assert_true(scriptFailed, "script triggered error event");
assert_true(imageFailed, "image triggered error event");
assert_true(fontFailed, "font triggered error event");
assert_true(videoFailed, "video triggered error event");
assert_true(audioFailed, "audio triggered error event");
assert_true(trackFailed, "track triggered error event");
assert_true(gibberishFailed, "gibberish as value triggered error event");
assert_true(noTypeFailed, "empty as triggered error event");
t.done();
});
</script>
</body>
</html>
43 changes: 43 additions & 0 deletions preload/onload_event.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
var t = async_test('Makes sure that preloaded resources trigger the onload event');
var scriptLoaded = false;
var styleLoaded = false;
var imageLoaded = false;
var fontLoaded = false;
var videoLoaded = false;
var audioLoaded = false;
var trackLoaded = false;
var gibberishLoaded = false;
var gibberishErrored = false;
var noTypeLoaded = false;
</script>
<link rel=preload href="resources/dummy.js" as=script onload="scriptLoaded = true;">
<link rel=preload href="resources/dummy.css" as=style onload="styleLoaded = true;">
<link rel=preload href="resources/square.png" as=image onload="imageLoaded = true;">
<link rel=preload href="/fonts/CanvasTest.ttf" as=font crossorigin onload="fontLoaded = true;">
<link rel=preload href="/media/white.mp4" as=media onload="videoLoaded = true;">
<link rel=preload href="/media/sound_5.oga" as=media onload="audioLoaded = true;">
<link rel=preload href="/media/foo.vtt" as=media onload="trackLoaded = true;">
<link rel=preload href="resources/dummy.xml?foo=bar" as=foobarxmlthing onload="gibberishLoaded = true;" onerror="gibberishErrored = true;">
<link rel=preload href="resources/dummy.xml" onload="noTypeLoaded = true;">
<body>
<script src="resources/dummy.js?pipe=trickle(d0.5)"></script>
<script>
window.onload = t.step(function(){
assert_true(styleLoaded, "style triggered load event");
assert_true(scriptLoaded, "script triggered load event");
assert_true(imageLoaded, "image triggered load event");
assert_true(fontLoaded, "font triggered load event");
assert_true(videoLoaded, "video triggered load event");
assert_true(audioLoaded, "audio triggered load event");
assert_true(trackLoaded, "track triggered load event");
assert_false(gibberishLoaded, "gibberish as value triggered load event");
assert_true(gibberishErrored, "gibberish as value triggered error event");
assert_true(noTypeLoaded, "empty as triggered load event");
t.done();
});
</script>
</body>
36 changes: 36 additions & 0 deletions preload/preload-csp.sub.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<!DOCTYPE html>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'; font-src 'none'; style-src 'none'; img-src 'none'; media-src 'none'; connect-src 'none'">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
var t = async_test('Makes sure that preload requests respect CSP');
</script>
<link rel=preload href="{{host}}:{{ports[http][1]}}/preload/resources/dummy.js" as=style>
<link rel=preload href="resources/dummy.css" as=style>
<link rel=preload href="resources/square.png" as=image>
<link rel=preload href="/fonts/CanvasTest.ttf" as=font crossorigin>
<link rel=preload href="/media/white.mp4" as=media>
<link rel=preload href="/media/sound_5.oga" as=media>
<link rel=preload href="/media/foo.vtt" as=media>
<link rel=preload href="resources/dummy.xml?foo=bar" as=foobarxmlthing>
<link rel=preload href="resources/dummy.xml">
<body>
<script src="resources/dummy.js?pipe=trickle(d0.2)"></script>
<script>
var assertRequestTerminated = function(url) {
var entries = performance.getEntriesByName(new URL(url, location.href).href);
assert_equals(entries.length, 0);
};
window.onload = t.step(function(){
assertRequestTerminated("{{host}}:{{ports[http][1]}}/preload/resources/dummy.js");
assertRequestTerminated("resources/dummy.css");
assertRequestTerminated("resources/square.png");
assertRequestTerminated("/fonts/CanvasTest.ttf");
assertRequestTerminated("/media/white.mp4");
assertRequestTerminated("/media/sound_5.oga");
assertRequestTerminated("/media/foo.vtt");
assertRequestTerminated("resources/dummy.xml");
t.done();
});
</script>

36 changes: 36 additions & 0 deletions preload/preload-default-csp.sub.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<!DOCTYPE html>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'; default-src 'none'">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
var t = async_test('Makes sure that preload requests respect CSP');
</script>
<link rel=preload href="{{host}}:{{ports[http][1]}}/preload/resources/dummy.js" as=style>
<link rel=preload href="resources/dummy.css" as=style>
<link rel=preload href="resources/square.png" as=image>
<link rel=preload href="/fonts/CanvasTest.ttf" as=font crossorigin>
<link rel=preload href="/media/white.mp4" as=media>
<link rel=preload href="/media/sound_5.oga" as=media>
<link rel=preload href="/media/foo.vtt" as=media>
<link rel=preload href="resources/dummy.xml?foo=bar" as=foobarxmlthing>
<link rel=preload href="resources/dummy.xml">
<body>
<script src="resources/dummy.js?pipe=trickle(d0.2)"></script>
<script>
var assertRequestTerminated = function(url) {
var entries = performance.getEntriesByName(new URL(url, location.href).href);
assert_equals(entries.length, 0);
};
window.onload = t.step(function(){
assertRequestTerminated("{{host}}:{{ports[http][1]}}/preload/resources/dummy.js");
assertRequestTerminated("resources/dummy.css");
assertRequestTerminated("resources/square.png");
assertRequestTerminated("/fonts/CanvasTest.ttf");
assertRequestTerminated("/media/white.mp4");
assertRequestTerminated("/media/sound_5.oga");
assertRequestTerminated("/media/foo.vtt");
assertRequestTerminated("resources/dummy.xml");
t.done();
});
</script>

Loading