Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- Manifest: netwerk/cookie/test/browser/browser.toml
"use strict";
const EMPTYNAMEVALUE_PATH = "browser/netwerk/cookie/test/browser/";
const EMPTYNAMEVALUE_TOP_PAGE =
  EMPTYNAMEVALUE_DOMAIN + EMPTYNAMEVALUE_PATH + "cookie_empty_name_value.sjs";
add_setup(async function () {
  Services.cookies.removeAll();
  registerCleanupFunction(async function () {
    Services.cookies.removeAll();
  });
});
add_task(async _ => {
  const expected = [];
  const consoleListener = {
    observe(what) {
      if (!(what instanceof Ci.nsIConsoleMessage)) {
        return;
      }
      info("Console Listener: " + what);
      for (let i = expected.length - 1; i >= 0; --i) {
        const e = expected[i];
        if (what.message.includes(e.match)) {
          ok(true, "Message received: " + e.match);
          expected.splice(i, 1);
          e.resolve();
        }
      }
    },
  };
  Services.console.registerListener(consoleListener);
  registerCleanupFunction(() =>
    Services.console.unregisterListener(consoleListener)
  );
  const netPromises = [
    new Promise(resolve => {
      expected.push({
        resolve,
        match:
          "Cookie with an empty name and an empty value has been rejected.",
      });
    }),
  ];
  // Let's open our tab.
  const tab = await BrowserTestUtils.openNewForegroundTab(
    gBrowser,
    EMPTYNAMEVALUE_TOP_PAGE
  );
  const browser = gBrowser.getBrowserForTab(tab);
  // Let's wait for the first set of console events.
  await Promise.all(netPromises);
  await SpecialPowers.spawn(browser, [], () => {
    Assert.strictEqual(content.document.cookie, "", "No cookies set");
  });
  // the DOM list of events.
  const domPromises = [
    new Promise(resolve => {
      expected.push({
        resolve,
        match:
          "Cookie with an empty name and an empty value has been rejected.",
      });
    }),
  ];
  // Let's use document.cookie
  await SpecialPowers.spawn(browser, [], () => {
    content.document.cookie = " ; path=/; secure";
  });
  // Let's wait for the dom events.
  await Promise.all(domPromises);
  await SpecialPowers.spawn(browser, [], () => {
    Assert.strictEqual(content.document.cookie, "", "No cookies set");
  });
  // Let's close the tab.
  BrowserTestUtils.removeTab(tab);
});