Blame devtools/server/tests/browser/browser_storage_cookies-duplicate-names.js

Packit f0b94e
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
Packit f0b94e
/* Any copyright is dedicated to the Public Domain.
Packit f0b94e
   http://creativecommons.org/publicdomain/zero/1.0/ */
Packit f0b94e
Packit f0b94e
"use strict";
Packit f0b94e
Packit f0b94e
// Test that the storage panel is able to display multiple cookies with the same
Packit f0b94e
// name (and different paths).
Packit f0b94e
Packit f0b94e
const {StorageFront} = require("devtools/shared/fronts/storage");
Packit f0b94e
Services.scriptloader.loadSubScript("chrome://mochitests/content/browser/devtools/server/tests/browser/storage-helpers.js", this);
Packit f0b94e
Packit f0b94e
const TESTDATA = {
Packit f0b94e
  "http://test1.example.org": [
Packit f0b94e
    {
Packit f0b94e
      name: "name",
Packit f0b94e
      value: "value1",
Packit f0b94e
      expires: 0,
Packit f0b94e
      path: "/",
Packit f0b94e
      host: "test1.example.org",
Packit f0b94e
      isDomain: false,
Packit f0b94e
      isSecure: false,
Packit f0b94e
    },
Packit f0b94e
    {
Packit f0b94e
      name: "name",
Packit f0b94e
      value: "value2",
Packit f0b94e
      expires: 0,
Packit f0b94e
      path: "/path2/",
Packit f0b94e
      host: "test1.example.org",
Packit f0b94e
      isDomain: false,
Packit f0b94e
      isSecure: false,
Packit f0b94e
    },
Packit f0b94e
    {
Packit f0b94e
      name: "name",
Packit f0b94e
      value: "value3",
Packit f0b94e
      expires: 0,
Packit f0b94e
      path: "/path3/",
Packit f0b94e
      host: "test1.example.org",
Packit f0b94e
      isDomain: false,
Packit f0b94e
      isSecure: false,
Packit f0b94e
    }
Packit f0b94e
  ]
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
add_task(async function () {
Packit f0b94e
  await openTabAndSetupStorage(MAIN_DOMAIN + "storage-cookies-same-name.html");
Packit f0b94e
Packit f0b94e
  initDebuggerServer();
Packit f0b94e
  let client = new DebuggerClient(DebuggerServer.connectPipe());
Packit f0b94e
  let form = await connectDebuggerClient(client);
Packit f0b94e
  let front = StorageFront(client, form);
Packit f0b94e
  let data = await front.listStores();
Packit f0b94e
Packit f0b94e
  ok(data.cookies, "Cookies storage actor is present");
Packit f0b94e
Packit f0b94e
  await testCookies(data.cookies);
Packit f0b94e
  await clearStorage();
Packit f0b94e
Packit f0b94e
  // Forcing GC/CC to get rid of docshells and windows created by this test.
Packit f0b94e
  forceCollections();
Packit f0b94e
  await client.close();
Packit f0b94e
  forceCollections();
Packit f0b94e
  DebuggerServer.destroy();
Packit f0b94e
  forceCollections();
Packit f0b94e
});
Packit f0b94e
Packit f0b94e
function testCookies(cookiesActor) {
Packit f0b94e
  let numHosts = Object.keys(cookiesActor.hosts).length;
Packit f0b94e
  is(numHosts, 1, "Correct number of host entries for cookies");
Packit f0b94e
  return testCookiesObjects(0, cookiesActor.hosts, cookiesActor);
Packit f0b94e
}
Packit f0b94e
Packit f0b94e
var testCookiesObjects = async function (index, hosts, cookiesActor) {
Packit f0b94e
  let host = Object.keys(hosts)[index];
Packit f0b94e
  let matchItems = data => {
Packit f0b94e
    is(data.total, TESTDATA[host].length,
Packit f0b94e
       "Number of cookies in host " + host + " matches");
Packit f0b94e
    for (let item of data.data) {
Packit f0b94e
      let found = false;
Packit f0b94e
      for (let toMatch of TESTDATA[host]) {
Packit f0b94e
        if (item.name === toMatch.name &&
Packit f0b94e
            item.host === toMatch.host &&
Packit f0b94e
            item.path === toMatch.path) {
Packit f0b94e
          found = true;
Packit f0b94e
          ok(true, "Found cookie " + item.name + " in response");
Packit f0b94e
          is(item.value.str, toMatch.value, "The value matches.");
Packit f0b94e
          is(item.expires, toMatch.expires, "The expiry time matches.");
Packit f0b94e
          is(item.path, toMatch.path, "The path matches.");
Packit f0b94e
          is(item.host, toMatch.host, "The host matches.");
Packit f0b94e
          is(item.isSecure, toMatch.isSecure, "The isSecure value matches.");
Packit f0b94e
          is(item.isDomain, toMatch.isDomain, "The isDomain value matches.");
Packit f0b94e
          break;
Packit f0b94e
        }
Packit f0b94e
      }
Packit f0b94e
      ok(found, "cookie " + item.name + " should exist in response");
Packit f0b94e
    }
Packit f0b94e
  };
Packit f0b94e
Packit f0b94e
  ok(!!TESTDATA[host], "Host is present in the list : " + host);
Packit f0b94e
  matchItems(await cookiesActor.getStoreObjects(host));
Packit f0b94e
  if (index == Object.keys(hosts).length - 1) {
Packit f0b94e
    return;
Packit f0b94e
  }
Packit f0b94e
  await testCookiesObjects(++index, hosts, cookiesActor);
Packit f0b94e
};