tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 });