browser_cookies.js (2347B)
1 "use strict"; 2 3 function promiseSetCookie(cookie) { 4 info(`Set-Cookie: ${cookie}`); 5 return Promise.all([ 6 waitForCookieChanged(), 7 SpecialPowers.spawn( 8 gBrowser.selectedBrowser, 9 [cookie], 10 passedCookie => (content.document.cookie = passedCookie) 11 ), 12 ]); 13 } 14 15 function waitForCookieChanged() { 16 return new Promise(resolve => { 17 Services.obs.addObserver(function observer(subj, topic) { 18 Services.obs.removeObserver(observer, topic); 19 resolve(); 20 }, "session-cookie-changed"); 21 }); 22 } 23 24 function cookieExists(host, name, value) { 25 let { 26 cookies: [c], 27 } = JSON.parse(ss.getBrowserState()); 28 return c && c.host == host && c.name == name && c.value == value; 29 } 30 31 // Setup and cleanup. 32 add_task(async function test_setup() { 33 registerCleanupFunction(() => { 34 Services.cookies.removeAll(); 35 }); 36 }); 37 38 // Test session cookie storage. 39 add_task(async function test_run() { 40 Services.cookies.removeAll(); 41 42 // Add a new tab for testing. 43 gBrowser.selectedTab = BrowserTestUtils.addTab( 44 gBrowser, 45 "http://example.com/" 46 ); 47 await promiseBrowserLoaded(gBrowser.selectedBrowser); 48 49 // Add a session cookie. 50 await promiseSetCookie("foo=bar"); 51 ok(cookieExists("example.com", "foo", "bar"), "cookie was added"); 52 53 // Modify a session cookie. 54 await promiseSetCookie("foo=baz"); 55 ok(cookieExists("example.com", "foo", "baz"), "cookie was modified"); 56 57 // Turn the session cookie into a normal one. 58 let expiry = new Date(); 59 expiry.setDate(expiry.getDate() + 2); 60 await promiseSetCookie(`foo=baz; Expires=${expiry.toUTCString()}`); 61 ok(!cookieExists("example.com", "foo", "baz"), "no longer a session cookie"); 62 63 // Turn it back into a session cookie. 64 await promiseSetCookie("foo=bar"); 65 ok(cookieExists("example.com", "foo", "bar"), "again a session cookie"); 66 67 // Remove the session cookie. 68 await promiseSetCookie("foo=; Expires=Thu, 01 Jan 1970 00:00:00 GMT"); 69 ok(!cookieExists("example.com", "foo", ""), "cookie was removed"); 70 71 // Add a session cookie. 72 await promiseSetCookie("foo=bar"); 73 ok(cookieExists("example.com", "foo", "bar"), "cookie was added"); 74 75 // Clear all session cookies. 76 Services.cookies.removeAll(); 77 ok(!cookieExists("example.com", "foo", "bar"), "cookies were cleared"); 78 79 // Cleanup. 80 BrowserTestUtils.removeTab(gBrowser.selectedTab); 81 });