summaryrefslogtreecommitdiffstats
path: root/devtools/client/storage/test/browser_storage_delete_all.js
blob: 4585821ceee70eac32000bab601d41d825c35f5b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

"use strict";

// Test deleting all storage items

add_task(async function () {
  // storage-listings.html explicitly mixes secure and insecure frames.
  // We should not enforce https for tests using this page.
  await pushPref("dom.security.https_first", false);

  await openTabAndSetupStorage(MAIN_DOMAIN + "storage-listings.html");

  const contextMenu = gPanelWindow.document.getElementById(
    "storage-table-popup"
  );
  const menuDeleteAllItem = contextMenu.querySelector(
    "#storage-table-popup-delete-all"
  );

  info("test state before delete");
  const beforeState = [
    [
      ["localStorage", "http://test1.example.org"],
      ["key", "ls1", "ls2"],
    ],
    [["localStorage", "http://sectest1.example.org"], ["iframe-u-ls1"]],
    [["localStorage", "https://sectest1.example.org"], ["iframe-s-ls1"]],
    [
      ["sessionStorage", "http://test1.example.org"],
      ["key", "ss1"],
    ],
    [
      ["sessionStorage", "http://sectest1.example.org"],
      ["iframe-u-ss1", "iframe-u-ss2"],
    ],
    [["sessionStorage", "https://sectest1.example.org"], ["iframe-s-ss1"]],
    [
      ["indexedDB", "http://test1.example.org", "idb1 (default)", "obj1"],
      [1, 2, 3],
    ],
    [
      ["Cache", "http://test1.example.org", "plop"],
      [
        MAIN_DOMAIN + "404_cached_file.js",
        MAIN_DOMAIN + "browser_storage_basic.js",
      ],
    ],
  ];

  await checkState(beforeState);

  info("do the delete");
  const deleteHosts = [
    [["localStorage", "https://sectest1.example.org"], "iframe-s-ls1", "name"],
    [
      ["sessionStorage", "https://sectest1.example.org"],
      "iframe-s-ss1",
      "name",
    ],
    [
      ["indexedDB", "http://test1.example.org", "idb1 (default)", "obj1"],
      1,
      "name",
    ],
    [
      ["Cache", "http://test1.example.org", "plop"],
      MAIN_DOMAIN + "404_cached_file.js",
      "url",
    ],
  ];

  for (const [store, rowName, cellToClick] of deleteHosts) {
    const storeName = store.join(" > ");

    await selectTreeItem(store);

    const eventWait = gUI.once("store-objects-cleared");

    const cell = getRowCells(rowName)[cellToClick];
    await waitForContextMenu(contextMenu, cell, () => {
      info(`Opened context menu in ${storeName}, row '${rowName}'`);
      contextMenu.activateItem(menuDeleteAllItem);
    });

    await eventWait;
  }

  info("test state after delete");
  const afterState = [
    // iframes from the same host, one secure, one unsecure, are independent
    // from each other. Delete all in one doesn't touch the other one.
    [
      ["localStorage", "http://test1.example.org"],
      ["key", "ls1", "ls2"],
    ],
    [["localStorage", "http://sectest1.example.org"], ["iframe-u-ls1"]],
    [["localStorage", "https://sectest1.example.org"], []],
    [
      ["sessionStorage", "http://test1.example.org"],
      ["key", "ss1"],
    ],
    [
      ["sessionStorage", "http://sectest1.example.org"],
      ["iframe-u-ss1", "iframe-u-ss2"],
    ],
    [["sessionStorage", "https://sectest1.example.org"], []],
    [["indexedDB", "http://test1.example.org", "idb1 (default)", "obj1"], []],
    [["Cache", "http://test1.example.org", "plop"], []],
  ];

  await checkState(afterState);
});