file_testloadflags.js (3348B)
1 "use strict"; 2 3 const SCRIPT_URL = SimpleTest.getTestFileURL( 4 "file_testloadflags_chromescript.js" 5 ); 6 7 let gScript; 8 var gExpectedCookies; 9 var gExpectedHeaders; 10 var gExpectedLoads; 11 12 var gObs; 13 var gPopup; 14 15 var gHeaders = 0; 16 var gLoads = 0; 17 18 // setupTest() is run from 'onload='. 19 function setupTest(iframeUri, domain, cookies, loads, headers) { 20 info( 21 "setupTest uri: " + 22 iframeUri + 23 " domain: " + 24 domain + 25 " cookies: " + 26 cookies + 27 " loads: " + 28 loads + 29 " headers: " + 30 headers 31 ); 32 33 SimpleTest.waitForExplicitFinish(); 34 35 var prefSet = new Promise(resolve => { 36 SpecialPowers.pushPrefEnv( 37 { 38 set: [ 39 ["network.cookie.cookieBehavior", 1], 40 ["network.cookie.sameSite.schemeful", false], 41 ], 42 }, 43 resolve 44 ); 45 }); 46 47 gExpectedCookies = cookies; 48 gExpectedLoads = loads; 49 gExpectedHeaders = headers; 50 51 gScript = SpecialPowers.loadChromeScript(SCRIPT_URL); 52 gScript.addMessageListener("info", ({ str }) => info(str)); 53 gScript.addMessageListener("ok", ({ c, m }) => ok(c, m)); 54 gScript.addMessageListener("observer:gotCookie", ({ cookie, uri }) => { 55 isnot( 56 cookie.indexOf("oh=hai"), 57 -1, 58 "cookie 'oh=hai' is in header for " + uri 59 ); 60 ++gHeaders; 61 }); 62 63 var scriptReady = new Promise(resolve => { 64 gScript.addMessageListener("init:return", resolve); 65 gScript.sendAsyncMessage("init", { domain }); 66 }); 67 68 // Listen for MessageEvents. 69 window.addEventListener("message", messageReceiver); 70 71 Promise.all([prefSet, scriptReady]).then(() => { 72 // load a window which contains an iframe; each will attempt to set 73 // cookies from their respective domains. 74 gPopup = window.open(iframeUri, "hai", "width=100,height=100"); 75 }); 76 } 77 78 function finishTest() { 79 gScript.addMessageListener("shutdown:return", () => { 80 gScript.destroy(); 81 SimpleTest.finish(); 82 }); 83 gScript.sendAsyncMessage("shutdown"); 84 } 85 86 /** Receives MessageEvents to this window. */ 87 // Count and check loads. 88 function messageReceiver(evt) { 89 ok( 90 evt.data == "f_lf_i msg data img" || evt.data == "f_lf_i msg data page", 91 "message data received from popup" 92 ); 93 if (evt.data == "f_lf_i msg data img") { 94 info("message data received from popup for image"); 95 } 96 if (evt.data == "f_lf_i msg data page") { 97 info("message data received from popup for page"); 98 } 99 if (evt.data != "f_lf_i msg data img" && evt.data != "f_lf_i msg data page") { 100 info("got this message but don't know what it is " + evt.data); 101 gPopup.close(); 102 window.removeEventListener("message", messageReceiver); 103 104 finishTest(); 105 return; 106 } 107 108 // only run the test when all our children are done loading & setting cookies 109 if (++gLoads == gExpectedLoads) { 110 gPopup.close(); 111 window.removeEventListener("message", messageReceiver); 112 113 runTest(); 114 } 115 } 116 117 // runTest() is run by messageReceiver(). 118 // Check headers, and count and check cookies. 119 function runTest() { 120 // set a cookie from a domain of "localhost" 121 document.cookie = "o=noes"; 122 123 is(gHeaders, gExpectedHeaders, "number of observed request headers"); 124 gScript.addMessageListener("getCookieCount:return", ({ count }) => { 125 is(count, gExpectedCookies, "total number of cookies"); 126 finishTest(); 127 }); 128 129 gScript.sendAsyncMessage("getCookieCount"); 130 }