browser_origin_trial_coep_credentialless_cache.js (3561B)
1 const TOP_LEVEL_URL = 2 getRootDirectory(gTestPath).replace( 3 "chrome://mochitests/content", 4 "https://example.com" 5 ) + "open_credentialless_document.sjs"; 6 7 const SAME_ORIGIN = "https://example.com"; 8 const CROSS_ORIGIN = "https://test1.example.com"; 9 10 const RESOURCE_URL = 11 getRootDirectory(gTestPath).replace( 12 "chrome://mochitests/content", 13 "https://test1.example.com" 14 ) + "credentialless_resource.sjs"; 15 16 async function store(storer, url, requestCredentialMode) { 17 await SpecialPowers.spawn( 18 storer.linkedBrowser, 19 [url, requestCredentialMode], 20 async function (url, requestCredentialMode) { 21 const cache = await content.caches.open("v1"); 22 const fetchRequest = new content.Request(url, { 23 mode: "no-cors", 24 credentials: requestCredentialMode, 25 }); 26 27 const fetchResponse = await content.fetch(fetchRequest); 28 content.wrappedJSObject.console.log(fetchResponse.headers); 29 await cache.put(fetchRequest, fetchResponse); 30 } 31 ); 32 } 33 34 async function retrieve(retriever, resourceURL) { 35 return await SpecialPowers.spawn( 36 retriever.linkedBrowser, 37 [resourceURL], 38 async function (url) { 39 const cache = await content.caches.open("v1"); 40 try { 41 await cache.match(url); 42 return "retrieved"; 43 } catch (error) { 44 return "error"; 45 } 46 } 47 ); 48 } 49 50 async function testCache( 51 storer, 52 storeRequestCredentialMode, 53 resourceCOEP, 54 retriever, 55 expectation 56 ) { 57 const resourceURL = RESOURCE_URL + "?" + resourceCOEP; 58 59 await store(storer, resourceURL, storeRequestCredentialMode); 60 const result = await retrieve(retriever, resourceURL); 61 62 is(result, expectation); 63 } 64 65 add_task(async function () { 66 await SpecialPowers.pushPrefEnv({ 67 set: [ 68 ["browser.tabs.remote.coep.credentialless", false], 69 ["dom.origin-trials.enabled", true], 70 ["dom.origin-trials.test-key.enabled", true], 71 ], 72 }); 73 74 const noneTab = await BrowserTestUtils.openNewForegroundTab( 75 gBrowser, 76 TOP_LEVEL_URL 77 ); 78 const requireCorpTab = await BrowserTestUtils.openNewForegroundTab( 79 gBrowser, 80 TOP_LEVEL_URL + "?requirecorp" 81 ); 82 const credentiallessTab = await BrowserTestUtils.openNewForegroundTab( 83 gBrowser, 84 TOP_LEVEL_URL + "?credentialless" 85 ); 86 87 await testCache(noneTab, "include", "", noneTab, "retrieved"); 88 await testCache(noneTab, "include", "", credentiallessTab, "error"); 89 await testCache(noneTab, "omit", "", credentiallessTab, "retrieved"); 90 await testCache( 91 noneTab, 92 "include", 93 "corp_cross_origin", 94 credentiallessTab, 95 "retrieved" 96 ); 97 await testCache(noneTab, "include", "", requireCorpTab, "error"); 98 await testCache( 99 noneTab, 100 "include", 101 "corp_cross_origin", 102 requireCorpTab, 103 "retrieved" 104 ); 105 await testCache(credentiallessTab, "include", "", noneTab, "retrieved"); 106 await testCache( 107 credentiallessTab, 108 "include", 109 "", 110 credentiallessTab, 111 "retrieved" 112 ); 113 await testCache(credentiallessTab, "include", "", requireCorpTab, "error"); 114 await testCache( 115 requireCorpTab, 116 "include", 117 "corp_cross_origin", 118 noneTab, 119 "retrieved" 120 ); 121 await testCache( 122 requireCorpTab, 123 "include", 124 "corp_cross_origin", 125 credentiallessTab, 126 "retrieved" 127 ); 128 await testCache( 129 requireCorpTab, 130 "include", 131 "corp_cross_origin", 132 requireCorpTab, 133 "retrieved" 134 ); 135 136 await BrowserTestUtils.removeTab(noneTab); 137 await BrowserTestUtils.removeTab(requireCorpTab); 138 await BrowserTestUtils.removeTab(credentiallessTab); 139 });