cache-storage.https.window.js (4333B)
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=./resources/common.js 10 11 // Fetch a resource and store it into CacheStorage from |storer| context. Then 12 // check if it can be retrieved via CacheStorage.match from |retriever| context. 13 const cacheStorageTest = ( 14 description, 15 storer, 16 retriever, 17 resource_headers, 18 request_credential_mode, 19 expectation 20 ) => { 21 promise_test_parallel(async test => { 22 const cross_origin = get_host_info().HTTPS_REMOTE_ORIGIN; 23 const url = cross_origin + "/common/square.png?pipe=" + resource_headers + 24 `&${token()}`; 25 const this_token = token(); 26 27 // Fetch a request from |stored|. Store the opaque response into 28 // CacheStorage. 29 send(storer, ` 30 const cache = await caches.open("v1"); 31 const fetch_request = new Request("${url}", { 32 mode: 'no-cors', 33 credentials: '${request_credential_mode}' 34 }); 35 const fetch_response = await fetch(fetch_request); 36 await cache.put(fetch_request, fetch_response); 37 send("${this_token}", "stored"); 38 `); 39 assert_equals(await receive(this_token), "stored"); 40 41 // Retrieved it from |retriever|. 42 send(retriever, ` 43 const cache = await caches.open("v1"); 44 try { 45 const response = await cache.match("${url}"); 46 send("${this_token}", "retrieved"); 47 } catch (error) { 48 send("${this_token}", "error"); 49 } 50 `); 51 assert_equals(await receive(this_token), expectation); 52 }, description); 53 }; 54 55 // Execute the same set of tests for every type of execution contexts: 56 // Documents, DedicatedWorkers, SharedWorkers, and ServiceWorkers. The results 57 // should be independent of the context. 58 const environment = location.search.substr(1); 59 const constructor = environments[environment]; 60 61 const context_none = constructor(coep_none)[0]; 62 const context_credentialless = constructor(coep_credentialless)[0]; 63 const context_require_corp = constructor(coep_require_corp)[0]; 64 65 cacheStorageTest(`[${environment}] unsafe-none => unsafe-none`, 66 context_none, 67 context_none, 68 "", 69 "include", 70 "retrieved"); 71 cacheStorageTest(`[${environment}] unsafe-none => credentialless`, 72 context_none, 73 context_credentialless, 74 "", 75 "include", 76 "error"); 77 cacheStorageTest(`[${environment}] unsafe-none => credentialless (omit)`, 78 context_none, 79 context_credentialless, 80 "", 81 "omit", 82 "retrieved"); 83 cacheStorageTest(`[${environment}] unsafe-none => credentialless + CORP`, 84 context_none, 85 context_credentialless, 86 corp_cross_origin, 87 "include", 88 "retrieved"); 89 cacheStorageTest(`[${environment}] unsafe-none => require-corp`, 90 context_none, 91 context_require_corp, 92 "", 93 "include", 94 "error"); 95 cacheStorageTest(`[${environment}] unsafe-none => require-corp (omit)`, 96 context_none, 97 context_require_corp, 98 "", 99 "include", 100 "error"); 101 cacheStorageTest(`[${environment}] unsafe-none => require-corp + CORP`, 102 context_none, 103 context_require_corp, 104 corp_cross_origin, 105 "include", 106 "retrieved"); 107 108 cacheStorageTest(`[${environment}] credentialless => unsafe-none`, 109 context_credentialless, 110 context_none, 111 "", 112 "include", 113 "retrieved"); 114 cacheStorageTest(`[${environment}] credentialless => credentialless`, 115 context_credentialless, 116 context_credentialless, 117 "", 118 "include", 119 "retrieved"); 120 cacheStorageTest(`[${environment}] credentialless => require-corp`, 121 context_credentialless, 122 context_require_corp, 123 "", 124 "include", 125 "error"); 126 cacheStorageTest(`[${environment}] credentialless => require-corp + CORP`, 127 context_credentialless, 128 context_require_corp, 129 corp_cross_origin, 130 "include", 131 "retrieved"); 132 133 cacheStorageTest(`[${environment}] require_corp => unsafe-none`, 134 context_require_corp, 135 context_none, 136 corp_cross_origin, 137 "include", 138 "retrieved"); 139 cacheStorageTest(`[${environment}] require_corp => credentialless`, 140 context_require_corp, 141 context_credentialless, 142 corp_cross_origin, 143 "include", 144 "retrieved"); 145 cacheStorageTest(`[${environment}] require_corp => require-corp`, 146 context_require_corp, 147 context_require_corp, 148 corp_cross_origin, 149 "include", 150 "retrieved");