108 lines
3.4 KiB
JavaScript
108 lines
3.4 KiB
JavaScript
// META: timeout=long
|
|
// META: variant=?document
|
|
// META: variant=?dedicated_worker
|
|
// META: variant=?shared_worker
|
|
// META: variant=?service_worker
|
|
// META: script=/common/get-host-info.sub.js
|
|
// META: script=/common/utils.js
|
|
// META: script=/common/dispatcher/dispatcher.js
|
|
// META: script=/service-workers/service-worker/resources/test-helpers.sub.js
|
|
// META: script=./resources/common.js
|
|
|
|
// Fetch a resource and store it into CacheStorage from |storer| context. Then
|
|
// check if it can be retrieved via CacheStorage.match from |retriever| context.
|
|
const cacheStorageTest = (
|
|
description,
|
|
dip_storer,
|
|
dip_retriever,
|
|
resource_headers,
|
|
request_credential_mode,
|
|
expectation
|
|
) => {
|
|
promise_test(async test => {
|
|
const cross_origin = get_host_info().HTTPS_REMOTE_ORIGIN;
|
|
const resource_url = cross_origin + "/common/square.png?pipe=" + resource_headers;
|
|
|
|
// Create the storer and retriever contexts.
|
|
const storage_token = await getTokenFromEnvironment(test, environment, dip_storer);
|
|
const storage_context = new RemoteContext(storage_token);
|
|
const retriever_token = await getTokenFromEnvironment(test, environment, dip_retriever);
|
|
const retriever_context = new RemoteContext(retriever_token);
|
|
|
|
// Fetch a request from the storer. Store the opaque response into
|
|
// CacheStorage.
|
|
const stored = await storage_context.execute_script(
|
|
async (url, credential_mode) => {
|
|
const cache = await caches.open('v1');
|
|
const fetch_request = new Request(url, {
|
|
mode: 'no-cors',
|
|
credentials: credential_mode
|
|
});
|
|
const fetch_response = await fetch(fetch_request);
|
|
await cache.put(fetch_request, fetch_response);
|
|
return true;
|
|
}, [resource_url, request_credential_mode]);
|
|
assert_equals(stored, true);
|
|
|
|
// Retrieved it from |retriever|.
|
|
const was_retrieved = await retriever_context.execute_script(
|
|
async (url) => {
|
|
const cache = await caches.open('v1');
|
|
try {
|
|
const response = await cache.match(url);
|
|
return "retrieved";
|
|
} catch (error) {
|
|
return "error";
|
|
}
|
|
}, [resource_url]);
|
|
assert_equals(was_retrieved, expectation);
|
|
}, description);
|
|
};
|
|
|
|
// Execute the same set of tests for every type of execution contexts:
|
|
// Documents, DedicatedWorkers, SharedWorkers, and ServiceWorkers. The results
|
|
// should be independent of the context.
|
|
const environment = location.search.substr(1);
|
|
|
|
cacheStorageTest(`[${environment}] none => none`,
|
|
dip_none,
|
|
dip_none,
|
|
"",
|
|
"include",
|
|
"retrieved");
|
|
cacheStorageTest(`[${environment}] none => isolate-and-credentialless`,
|
|
dip_none,
|
|
dip_credentialless,
|
|
"",
|
|
"include",
|
|
"error");
|
|
cacheStorageTest(`[${environment}] none => isolate-and-credentialless (omit)`,
|
|
dip_none,
|
|
dip_credentialless,
|
|
"",
|
|
"omit",
|
|
"retrieved");
|
|
cacheStorageTest(`[${environment}] none => isolate-and-credentialless + CORP`,
|
|
dip_none,
|
|
dip_credentialless,
|
|
corp_cross_origin,
|
|
"include",
|
|
"retrieved");
|
|
cacheStorageTest(`[${environment}] none => isolate-and-require-corp`,
|
|
dip_none,
|
|
dip_require_corp,
|
|
"",
|
|
"include",
|
|
"error");
|
|
cacheStorageTest(`[${environment}] none => isolate-and-require-corp (omit)`,
|
|
dip_none,
|
|
dip_require_corp,
|
|
"",
|
|
"include",
|
|
"error");
|
|
cacheStorageTest(`[${environment}] none => isolate-and-require-corp + CORP`,
|
|
dip_none,
|
|
dip_require_corp,
|
|
corp_cross_origin,
|
|
"include",
|
|
"retrieved");
|