mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-08 08:48:39 +09:00
Bug 1276339: Storage inspector doesn't work on chrome:// pages and web extensions
Issue #31
This commit is contained in:
parent
a5b4f6e003
commit
d0ef0781ff
18 changed files with 361 additions and 129 deletions
|
|
@ -60,7 +60,7 @@ table.headers.indexedDB.value=Value
|
|||
table.headers.indexedDB.origin=Origin
|
||||
table.headers.indexedDB.version=Version
|
||||
table.headers.indexedDB.objectStores=Object Stores
|
||||
table.headers.indexedDB.keyPath=Key
|
||||
table.headers.indexedDB.keyPath2=Key Path
|
||||
table.headers.indexedDB.autoIncrement=Auto Increment
|
||||
table.headers.indexedDB.indexes=Indexes
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ support-files =
|
|||
storage-cookies.html
|
||||
storage-empty-objectstores.html
|
||||
storage-idb-delete-blocked.html
|
||||
storage-indexeddb-duplicate-names.html
|
||||
storage-listings.html
|
||||
storage-localstorage.html
|
||||
storage-overflow.html
|
||||
|
|
@ -35,6 +36,7 @@ support-files =
|
|||
[browser_storage_empty_objectstores.js]
|
||||
[browser_storage_indexeddb_delete.js]
|
||||
[browser_storage_indexeddb_delete_blocked.js]
|
||||
[browser_storage_indexeddb_duplicate_names.js]
|
||||
[browser_storage_localstorage_edit.js]
|
||||
[browser_storage_localstorage_error.js]
|
||||
[browser_storage_overflow.js]
|
||||
|
|
|
|||
|
|
@ -53,28 +53,28 @@ const testCases = [
|
|||
[["sessionStorage", "https://sectest1.example.org"],
|
||||
["iframe-s-ss1"]],
|
||||
[["indexedDB", "http://test1.example.org"],
|
||||
["idb1", "idb2"]],
|
||||
[["indexedDB", "http://test1.example.org", "idb1"],
|
||||
["idb1 (default)", "idb2 (default)"]],
|
||||
[["indexedDB", "http://test1.example.org", "idb1 (default)"],
|
||||
["obj1", "obj2"]],
|
||||
[["indexedDB", "http://test1.example.org", "idb2"],
|
||||
[["indexedDB", "http://test1.example.org", "idb2 (default)"],
|
||||
["obj3"]],
|
||||
[["indexedDB", "http://test1.example.org", "idb1", "obj1"],
|
||||
[["indexedDB", "http://test1.example.org", "idb1 (default)", "obj1"],
|
||||
[1, 2, 3]],
|
||||
[["indexedDB", "http://test1.example.org", "idb1", "obj2"],
|
||||
[["indexedDB", "http://test1.example.org", "idb1 (default)", "obj2"],
|
||||
[1]],
|
||||
[["indexedDB", "http://test1.example.org", "idb2", "obj3"],
|
||||
[["indexedDB", "http://test1.example.org", "idb2 (default)", "obj3"],
|
||||
[]],
|
||||
[["indexedDB", "http://sectest1.example.org"],
|
||||
[]],
|
||||
[["indexedDB", "https://sectest1.example.org"],
|
||||
["idb-s1", "idb-s2"]],
|
||||
[["indexedDB", "https://sectest1.example.org", "idb-s1"],
|
||||
["idb-s1 (default)", "idb-s2 (default)"]],
|
||||
[["indexedDB", "https://sectest1.example.org", "idb-s1 (default)"],
|
||||
["obj-s1"]],
|
||||
[["indexedDB", "https://sectest1.example.org", "idb-s2"],
|
||||
[["indexedDB", "https://sectest1.example.org", "idb-s2 (default)"],
|
||||
["obj-s2"]],
|
||||
[["indexedDB", "https://sectest1.example.org", "idb-s1", "obj-s1"],
|
||||
[["indexedDB", "https://sectest1.example.org", "idb-s1 (default)", "obj-s1"],
|
||||
[6, 7]],
|
||||
[["indexedDB", "https://sectest1.example.org", "idb-s2", "obj-s2"],
|
||||
[["indexedDB", "https://sectest1.example.org", "idb-s2 (default)", "obj-s2"],
|
||||
[16]],
|
||||
[["Cache", "http://test1.example.org", "plop"],
|
||||
[MAIN_DOMAIN + "404_cached_file.js",
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ const TEST_CASES = [
|
|||
["cookies", "test1.example.org"],
|
||||
getCookieId("c1", "test1.example.org", "/browser"), "name"
|
||||
],
|
||||
[["indexedDB", "http://test1.example.org", "idb1", "obj1"],
|
||||
[["indexedDB", "http://test1.example.org", "idb1 (default)", "obj1"],
|
||||
1, "name"],
|
||||
[["Cache", "http://test1.example.org", "plop"],
|
||||
MAIN_DOMAIN + "404_cached_file.js", "url"],
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ add_task(function* () {
|
|||
["iframe-u-ss1", "iframe-u-ss2"]],
|
||||
[["sessionStorage", "https://sectest1.example.org"],
|
||||
["iframe-s-ss1"]],
|
||||
[["indexedDB", "http://test1.example.org", "idb1", "obj1"],
|
||||
[["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"]],
|
||||
|
|
@ -41,7 +41,7 @@ add_task(function* () {
|
|||
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", "obj1"], 1, "name"],
|
||||
[["indexedDB", "http://test1.example.org", "idb1 (default)", "obj1"], 1, "name"],
|
||||
[["Cache", "http://test1.example.org", "plop"],
|
||||
MAIN_DOMAIN + "404_cached_file.js", "url"],
|
||||
];
|
||||
|
|
@ -78,7 +78,7 @@ add_task(function* () {
|
|||
["iframe-u-ss1", "iframe-u-ss2"]],
|
||||
[["sessionStorage", "https://sectest1.example.org"],
|
||||
[]],
|
||||
[["indexedDB", "http://test1.example.org", "idb1", "obj1"],
|
||||
[["indexedDB", "http://test1.example.org", "idb1 (default)", "obj1"],
|
||||
[]],
|
||||
[["Cache", "http://test1.example.org", "plop"],
|
||||
[]],
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ add_task(function* () {
|
|||
],
|
||||
[["localStorage", "http://test1.example.org"], ["ls1", "ls2"]],
|
||||
[["sessionStorage", "http://test1.example.org"], ["ss1"]],
|
||||
[["indexedDB", "http://test1.example.org", "idb1", "obj1"], [1, 2, 3]],
|
||||
[["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"]],
|
||||
]);
|
||||
|
|
@ -38,7 +38,7 @@ add_task(function* () {
|
|||
["cookies", "test1.example.org"],
|
||||
["localStorage", "http://test1.example.org"],
|
||||
["sessionStorage", "http://test1.example.org"],
|
||||
["indexedDB", "http://test1.example.org", "idb1", "obj1"],
|
||||
["indexedDB", "http://test1.example.org", "idb1 (default)", "obj1"],
|
||||
["Cache", "http://test1.example.org", "plop"],
|
||||
];
|
||||
|
||||
|
|
@ -67,7 +67,7 @@ add_task(function* () {
|
|||
[["cookies", "test1.example.org"], []],
|
||||
[["localStorage", "http://test1.example.org"], []],
|
||||
[["sessionStorage", "http://test1.example.org"], []],
|
||||
[["indexedDB", "http://test1.example.org", "idb1", "obj1"], []],
|
||||
[["indexedDB", "http://test1.example.org", "idb1 (default)", "obj1"], []],
|
||||
[["Cache", "http://test1.example.org", "plop"], []],
|
||||
]);
|
||||
|
||||
|
|
|
|||
|
|
@ -21,14 +21,14 @@
|
|||
// storage-secured-iframe.html and storage-unsecured-iframe.html
|
||||
const storeItems = [
|
||||
[["indexedDB", "http://test1.example.org"],
|
||||
["idb1", "idb2"]],
|
||||
[["indexedDB", "http://test1.example.org", "idb1"],
|
||||
["idb1 (default)", "idb2 (default)"]],
|
||||
[["indexedDB", "http://test1.example.org", "idb1 (default)"],
|
||||
["obj1", "obj2"]],
|
||||
[["indexedDB", "http://test1.example.org", "idb2"],
|
||||
[["indexedDB", "http://test1.example.org", "idb2 (default)"],
|
||||
[]],
|
||||
[["indexedDB", "http://test1.example.org", "idb1", "obj1"],
|
||||
[["indexedDB", "http://test1.example.org", "idb1 (default)", "obj1"],
|
||||
[1, 2, 3]],
|
||||
[["indexedDB", "http://test1.example.org", "idb1", "obj2"],
|
||||
[["indexedDB", "http://test1.example.org", "idb1 (default)", "obj2"],
|
||||
[1]]
|
||||
];
|
||||
|
||||
|
|
|
|||
|
|
@ -16,11 +16,11 @@ add_task(function* () {
|
|||
|
||||
info("test state before delete");
|
||||
yield checkState([
|
||||
[["indexedDB", "http://test1.example.org"], ["idb1", "idb2"]],
|
||||
[["indexedDB", "http://test1.example.org"], ["idb1 (default)", "idb2 (default)"]],
|
||||
]);
|
||||
|
||||
info("do the delete");
|
||||
const deletedDb = ["indexedDB", "http://test1.example.org", "idb1"];
|
||||
const deletedDb = ["indexedDB", "http://test1.example.org", "idb1 (default)"];
|
||||
|
||||
yield selectTreeItem(deletedDb);
|
||||
|
||||
|
|
@ -40,7 +40,7 @@ add_task(function* () {
|
|||
|
||||
info("test state after delete");
|
||||
yield checkState([
|
||||
[["indexedDB", "http://test1.example.org"], ["idb2"]],
|
||||
[["indexedDB", "http://test1.example.org"], ["idb2 (default)"]],
|
||||
]);
|
||||
|
||||
yield finishTests();
|
||||
|
|
|
|||
|
|
@ -13,19 +13,19 @@ add_task(function* () {
|
|||
|
||||
info("test state before delete");
|
||||
yield checkState([
|
||||
[["indexedDB", "http://test1.example.org"], ["idb"]]
|
||||
[["indexedDB", "http://test1.example.org"], ["idb (default)"]]
|
||||
]);
|
||||
|
||||
info("do the delete");
|
||||
yield selectTreeItem(["indexedDB", "http://test1.example.org"]);
|
||||
let actor = gUI.getCurrentActor();
|
||||
let result = yield actor.removeDatabase("http://test1.example.org", "idb");
|
||||
let result = yield actor.removeDatabase("http://test1.example.org", "idb (default)");
|
||||
|
||||
ok(result.blocked, "removeDatabase attempt is blocked");
|
||||
|
||||
info("test state after blocked delete");
|
||||
yield checkState([
|
||||
[["indexedDB", "http://test1.example.org"], ["idb"]]
|
||||
[["indexedDB", "http://test1.example.org"], ["idb (default)"]]
|
||||
]);
|
||||
|
||||
let eventWait = gUI.once("store-objects-updated");
|
||||
|
|
@ -47,7 +47,7 @@ add_task(function* () {
|
|||
info("try to delete database from nonexistent host");
|
||||
let errorThrown = false;
|
||||
try {
|
||||
result = yield actor.removeDatabase("http://test2.example.org", "idb");
|
||||
result = yield actor.removeDatabase("http://test2.example.org", "idb (default)");
|
||||
} catch (ex) {
|
||||
errorThrown = true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,31 @@
|
|||
/* 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/. */
|
||||
|
||||
// Test to verify that indexedDBs with duplicate names (different types / paths)
|
||||
// work as expected.
|
||||
|
||||
"use strict";
|
||||
|
||||
add_task(function* () {
|
||||
const TESTPAGE = MAIN_DOMAIN + "storage-indexeddb-duplicate-names.html";
|
||||
|
||||
setPermission(TESTPAGE, "indexedDB");
|
||||
|
||||
yield openTabAndSetupStorage(TESTPAGE);
|
||||
|
||||
yield checkState([
|
||||
[
|
||||
["indexedDB", "http://test1.example.org"], [
|
||||
"idb1 (default)",
|
||||
"idb1 (temporary)",
|
||||
"idb1 (persistent)",
|
||||
"idb2 (default)",
|
||||
"idb2 (temporary)",
|
||||
"idb2 (persistent)"
|
||||
]
|
||||
]
|
||||
]);
|
||||
|
||||
yield finishTests();
|
||||
});
|
||||
|
|
@ -72,17 +72,17 @@ const testCases = [
|
|||
sidebarHidden: true
|
||||
},
|
||||
{
|
||||
location: "idb2",
|
||||
location: "idb2 (default)",
|
||||
sidebarHidden: false
|
||||
},
|
||||
|
||||
{
|
||||
location: ["indexedDB", "http://test1.example.org", "idb2", "obj3"],
|
||||
location: ["indexedDB", "http://test1.example.org", "idb2 (default)", "obj3"],
|
||||
sidebarHidden: true
|
||||
},
|
||||
|
||||
{
|
||||
location: ["indexedDB", "https://sectest1.example.org", "idb-s2"],
|
||||
location: ["indexedDB", "https://sectest1.example.org", "idb-s2 (default)"],
|
||||
sidebarHidden: true
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -124,7 +124,7 @@ const testCases = [
|
|||
{name: "ss5.3", value: `${LONG_WORD}&${LONG_WORD}`},
|
||||
{name: "ss5.4", value: `${LONG_WORD}&${LONG_WORD}`},
|
||||
], true],
|
||||
[["indexedDB", "http://test1.example.org", "idb1", "obj1"]],
|
||||
[["indexedDB", "http://test1.example.org", "idb1 (default)", "obj1"]],
|
||||
[1, [
|
||||
{name: 1, value: JSON.stringify({id: 1, name: "foo", email: "foo@bar.com"})}
|
||||
]],
|
||||
|
|
@ -133,7 +133,7 @@ const testCases = [
|
|||
{name: "1.name", value: "foo"},
|
||||
{name: "1.email", value: "foo@bar.com"},
|
||||
], true],
|
||||
[["indexedDB", "http://test1.example.org", "idb1", "obj2"]],
|
||||
[["indexedDB", "http://test1.example.org", "idb1 (default)", "obj2"]],
|
||||
[1, [
|
||||
{name: 1, value: JSON.stringify({
|
||||
id2: 1, name: "foo", email: "foo@bar.com", extra: "baz"
|
||||
|
|
|
|||
|
|
@ -879,3 +879,19 @@ var focusSearchBoxUsingShortcut = Task.async(function* (panelWin, callback) {
|
|||
function getCookieId(name, domain, path) {
|
||||
return `${name}${SEPARATOR_GUID}${domain}${SEPARATOR_GUID}${path}`;
|
||||
}
|
||||
|
||||
function setPermission(url, permission) {
|
||||
const nsIPermissionManager = Components.interfaces.nsIPermissionManager;
|
||||
|
||||
let uri = Components.classes["@mozilla.org/network/io-service;1"]
|
||||
.getService(Components.interfaces.nsIIOService)
|
||||
.newURI(url, null, null);
|
||||
let ssm = Components.classes["@mozilla.org/scriptsecuritymanager;1"]
|
||||
.getService(Ci.nsIScriptSecurityManager);
|
||||
let principal = ssm.createCodebasePrincipal(uri, {});
|
||||
|
||||
Components.classes["@mozilla.org/permissionmanager;1"]
|
||||
.getService(nsIPermissionManager)
|
||||
.addFromPrincipal(principal, permission,
|
||||
nsIPermissionManager.ALLOW_ACTION);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,50 @@
|
|||
<!DOCTYPE html>
|
||||
<html><head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||
<meta charset="utf-8">
|
||||
<title>Storage inspector IndexedDBs with duplicate names</title>
|
||||
|
||||
<script type="application/javascript;version=1.7">
|
||||
"use strict";
|
||||
|
||||
function createIndexedDBs() {
|
||||
createIndexedDB("idb1", "temporary");
|
||||
createIndexedDB("idb1", "default");
|
||||
createIndexedDB("idb1", "persistent");
|
||||
createIndexedDB("idb2", "temporary");
|
||||
createIndexedDB("idb2", "default");
|
||||
createIndexedDB("idb2", "persistent");
|
||||
}
|
||||
|
||||
function createIndexedDB(name, storage) {
|
||||
let open = indexedDB.open(name, {storage: storage});
|
||||
|
||||
open.onsuccess = function () {
|
||||
let db = open.result;
|
||||
db.close();
|
||||
};
|
||||
}
|
||||
|
||||
function deleteDB(dbName, storage) {
|
||||
return new Promise(resolve => {
|
||||
dump(`removing database ${dbName} (${storage}) from ${document.location}\n`);
|
||||
indexedDB.deleteDatabase(dbName, { storage: storage }).onsuccess = resolve;
|
||||
});
|
||||
}
|
||||
|
||||
window.clear = function* () {
|
||||
yield deleteDB("idb1", "temporary");
|
||||
yield deleteDB("idb1", "default");
|
||||
yield deleteDB("idb1", "persistent");
|
||||
yield deleteDB("idb2", "temporary");
|
||||
yield deleteDB("idb2", "default");
|
||||
yield deleteDB("idb2", "persistent");
|
||||
|
||||
dump(`removed indexedDB data from ${document.location}\n`);
|
||||
};
|
||||
</script>
|
||||
</head>
|
||||
<body onload="createIndexedDBs()">
|
||||
<h1>storage-indexeddb-duplicate-names.html</h1>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -809,7 +809,10 @@ StorageUI.prototype = {
|
|||
columns[f.name] = f.name;
|
||||
let columnName;
|
||||
try {
|
||||
columnName = L10N.getStr("table.headers." + type + "." + f.name);
|
||||
// Path key names for l10n in the case of a string change.
|
||||
let name = f.name === "keyPath" ? "keyPath2" : f.name;
|
||||
|
||||
columnName = L10N.getStr("table.headers." + type + "." + name);
|
||||
} catch (e) {
|
||||
columnName = COOKIE_KEY_MAP[f.name];
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue