-
Notifications
You must be signed in to change notification settings - Fork 3.1k
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
Changes from 7 commits
f361d19
3089bb5
e5e0e2d
16af548
40606e6
6a6c183
55cfe04
38012c6
f672fc8
1c22918
baa2a97
ce67a3e
8e2b844
14948cc
1d65917
9ca024f
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
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> |
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> |
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> |
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"); | ||
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> |
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(); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. There was a problem hiding this comment. Choose a reason for hiding this commentThe 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> |
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> |
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> |
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 | ||
|
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> |
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 | ||
|
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> |
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> |
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> | ||
|
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> | ||
|
There was a problem hiding this comment.
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 useasync_test(function(t) { ... })
)There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done