Update web-platform-tests to revision 89aa3f42131cce5a77268ddaeb2fab8a2e29c2a6

This commit is contained in:
WPT Sync Bot 2019-11-17 10:33:25 +00:00
parent 39963266ae
commit ea00d34098
392 changed files with 5974 additions and 7614 deletions

View file

@ -42,6 +42,12 @@ function makeTest (test) {
return function () {
var uuid = token()
var requests = expandTemplates(test)
var fetchFunctions = makeFetchFunctions(requests, uuid)
return runTest(fetchFunctions, requests, uuid)
}
}
function makeFetchFunctions(requests, uuid) {
var fetchFunctions = []
for (let i = 0; i < requests.length; ++i) {
fetchFunctions.push({
@ -62,6 +68,10 @@ function makeTest (test) {
pauseAfter: 'pause_after' in requests[i]
})
}
return fetchFunctions
}
function runTest(fetchFunctions, requests, uuid) {
var idx = 0
function runNextStep () {
if (fetchFunctions.length) {
@ -86,7 +96,6 @@ function makeTest (test) {
checkRequests(requests, testState)
return Promise.resolve()
})
}
}
function expandTemplates (test) {
@ -226,10 +235,14 @@ function pause () {
function makeTestUrl (uuid, config) {
var arg = ''
var base_url = ''
if ('base_url' in config) {
base_url = config.base_url
}
if ('query_arg' in config) {
arg = `&target=${config.query_arg}`
}
return `resources/http-cache.py?dispatch=test&uuid=${uuid}${arg}`
return `${base_url}resources/http-cache.py?dispatch=test&uuid=${uuid}${arg}`
}
function getServerState (uuid) {

View file

@ -13,6 +13,9 @@ DATEHDRS = set(['date', 'expires', 'last-modified'])
def main(request, response):
dispatch = request.GET.first("dispatch", None)
uuid = request.GET.first("uuid", None)
if request.method == "OPTIONS":
return handle_preflight(uuid, request, response)
if not uuid:
response.status = (404, "Not Found")
response.headers.set("Content-Type", "text/plain")
@ -25,6 +28,14 @@ def main(request, response):
response.headers.set("Content-Type", "text/plain")
return "Fallthrough"
def handle_preflight(uuid, request, response):
response.status = (200, "OK")
response.headers.set("Access-Control-Allow-Origin", "*")
response.headers.set("Access-Control-Allow-Methods", "GET")
response.headers.set("Access-Control-Allow-Headers", "*")
response.headers.set("Access-Control-Max-Age", "86400")
return "Preflight request"
def handle_state(uuid, request, response):
response.headers.set("Content-Type", "text/plain")
return json.dumps(request.server.stash.take(uuid))

View file

@ -0,0 +1,27 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>HTTP Cache - helper</title>
<meta name="help" href="https://fetch.spec.whatwg.org/#request">
<meta name="timeout" content="normal">
<script src="/resources/testharness.js"></script>
<script src="../http-cache.js"></script>
</head>
<body>
<script>
window.addEventListener("message", function listener(event) {
window.removeEventListener("message", listener)
var fetchFunction = makeFetchFunctions(event.data.requests, event.data.uuid)[event.data.index]
fetchFunction.code(event.data.index).then(
function(response) {
event.source.postMessage("success", event.origin)
},
function(response) {
event.source.postMessage("success", event.origin)
}
)
})
</script>
</body>

View file

@ -0,0 +1,118 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>HTTP Cache - Partioning by top-level origin</title>
<meta name="help" href="https://fetch.spec.whatwg.org/#request">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<script src="http-cache.js"></script>
</head>
<body>
<script>
const host = get_host_info();
// We run this entire test twice: first with a same-origin then with a cross-origin popup
function performFullTest(is_same_origin_test) {
const POPUP_HTTP_ORIGIN = is_same_origin_test ? host.HTTP_ORIGIN : host.HTTP_REMOTE_ORIGIN
const LOCAL_HTTP_ORIGIN = host.HTTP_ORIGIN
const popupBaseURL = POPUP_HTTP_ORIGIN + window.location.pathname.replace(/\/[^\/]*$/, '/') ;
const localBaseURL = LOCAL_HTTP_ORIGIN + window.location.pathname.replace(/\/[^\/]*$/, '/') ;
var test = {
name: "HTTP Cache is partitioned by top-frame origin",
requests: [
{
response_headers: [
["Expires", (30 * 24 * 60 * 60)]
],
base_url: localBaseURL
},
{
base_url: localBaseURL
},
{
request_headers: [
["Cache-Control", "no-cache"]
],
// If the popup's request was a cache hit, we would only expect 2
// requests to the server. If it was a cache miss, we would expect 3.
expected_response_headers: [
["server-request-count", is_same_origin_test ? "2" : "3"]
],
base_url: localBaseURL
}
]
}
var uuid = token()
var local_requests = expandTemplates(test)
var fetchFns = makeFetchFunctions(local_requests, uuid)
var popup_requests = expandTemplates(test)
// Request the resource with a long cache expiry
function local_fetch() {
return fetchFns[0].code(0)
}
function popup_fetch() {
return new Promise(function(resolve, reject) {
var win = window.open(popupBaseURL + "resources/split-origin-popup.html")
// Post a message to intisearchte the popup's request and give the necessary
// information. Posted researchtedly to account for dropped messages as the
// popup is loading.
function postMessage(event) {
var payload = {
index: 1,
requests: popup_requests,
uuid: uuid
}
win.postMessage(payload, POPUP_HTTP_ORIGIN)
}
var messagePoster = setInterval(postMessage, 100)
// Listen for the result
function messageListener(event) {
if (event.origin !== POPUP_HTTP_ORIGIN) {
reject("Unknown error")
} else if (event.data === "success") {
resolve()
} else if (event.data === "error") {
reject("Error in popup")
} else {
return; // Ignore testharness.js internal messages
}
window.removeEventListener("message", messageListener)
clearInterval(messagePoster)
win.close()
}
window.addEventListener("message", messageListener)
})
}
function local_fetch2() {
return fetchFns[2].code(2)
}
// Final checks.
function check_server_info() {
return getServerState(uuid)
.then(function (testState) {
checkRequests(local_requests, testState)
return Promise.resolve()
})
}
promise_test(() => local_fetch().then(popup_fetch).then(local_fetch2).then(check_server_info))
}
performFullTest(true);
performFullTest(false);
</script>
</body>
</html>