credentialless-cache-storage-from-none.https.tentative.window.js (3476B)
1 // META: timeout=long 2 // META: variant=?document 3 // META: variant=?dedicated_worker 4 // META: variant=?shared_worker 5 // META: variant=?service_worker 6 // META: script=/common/get-host-info.sub.js 7 // META: script=/common/utils.js 8 // META: script=/common/dispatcher/dispatcher.js 9 // META: script=/service-workers/service-worker/resources/test-helpers.sub.js 10 // META: script=./resources/common.js 11 12 // Fetch a resource and store it into CacheStorage from |storer| context. Then 13 // check if it can be retrieved via CacheStorage.match from |retriever| context. 14 const cacheStorageTest = ( 15 description, 16 dip_storer, 17 dip_retriever, 18 resource_headers, 19 request_credential_mode, 20 expectation 21 ) => { 22 promise_test(async test => { 23 const cross_origin = get_host_info().HTTPS_REMOTE_ORIGIN; 24 const resource_url = cross_origin + "/common/square.png?pipe=" + resource_headers; 25 26 // Create the storer and retriever contexts. 27 const storage_token = await getTokenFromEnvironment(test, environment, dip_storer); 28 const storage_context = new RemoteContext(storage_token); 29 const retriever_token = await getTokenFromEnvironment(test, environment, dip_retriever); 30 const retriever_context = new RemoteContext(retriever_token); 31 32 // Fetch a request from the storer. Store the opaque response into 33 // CacheStorage. 34 const stored = await storage_context.execute_script( 35 async (url, credential_mode) => { 36 const cache = await caches.open('v1'); 37 const fetch_request = new Request(url, { 38 mode: 'no-cors', 39 credentials: credential_mode 40 }); 41 const fetch_response = await fetch(fetch_request); 42 await cache.put(fetch_request, fetch_response); 43 return true; 44 }, [resource_url, request_credential_mode]); 45 assert_equals(stored, true); 46 47 // Retrieved it from |retriever|. 48 const was_retrieved = await retriever_context.execute_script( 49 async (url) => { 50 const cache = await caches.open('v1'); 51 try { 52 const response = await cache.match(url); 53 return "retrieved"; 54 } catch (error) { 55 return "error"; 56 } 57 }, [resource_url]); 58 assert_equals(was_retrieved, expectation); 59 }, description); 60 }; 61 62 // Execute the same set of tests for every type of execution contexts: 63 // Documents, DedicatedWorkers, SharedWorkers, and ServiceWorkers. The results 64 // should be independent of the context. 65 const environment = location.search.substr(1); 66 67 cacheStorageTest(`[${environment}] none => none`, 68 dip_none, 69 dip_none, 70 "", 71 "include", 72 "retrieved"); 73 cacheStorageTest(`[${environment}] none => isolate-and-credentialless`, 74 dip_none, 75 dip_credentialless, 76 "", 77 "include", 78 "error"); 79 cacheStorageTest(`[${environment}] none => isolate-and-credentialless (omit)`, 80 dip_none, 81 dip_credentialless, 82 "", 83 "omit", 84 "retrieved"); 85 cacheStorageTest(`[${environment}] none => isolate-and-credentialless + CORP`, 86 dip_none, 87 dip_credentialless, 88 corp_cross_origin, 89 "include", 90 "retrieved"); 91 cacheStorageTest(`[${environment}] none => isolate-and-require-corp`, 92 dip_none, 93 dip_require_corp, 94 "", 95 "include", 96 "error"); 97 cacheStorageTest(`[${environment}] none => isolate-and-require-corp (omit)`, 98 dip_none, 99 dip_require_corp, 100 "", 101 "include", 102 "error"); 103 cacheStorageTest(`[${environment}] none => isolate-and-require-corp + CORP`, 104 dip_none, 105 dip_require_corp, 106 corp_cross_origin, 107 "include", 108 "retrieved");