mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-01 00:32:11 +00:00
8010ef0166
This symbol is specific to documents and isn't available in JSM/ESM. So it will be best to keep it manually crafter from the modules. It appears that only async-storage depends on the overloaded indexedDB object created by devtools/shared/indexed-db. Differential Revision: https://phabricator.services.mozilla.com/D157424
55 lines
1.7 KiB
JavaScript
55 lines
1.7 KiB
JavaScript
/* 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";
|
|
|
|
/**
|
|
* This indexedDB helper is a simplified version of sdk/indexed-db. It creates a DB with
|
|
* a principal dedicated to DevTools.
|
|
*/
|
|
|
|
// When running in jest, we can't use Cu.Sandbox and only expose the native indexedDB object
|
|
if (globalThis.indexedDB) {
|
|
module.exports = globalThis.indexedDB;
|
|
} else {
|
|
const PSEUDOURI = "indexeddb://fx-devtools";
|
|
const principaluri = Services.io.newURI(PSEUDOURI);
|
|
const principal = Services.scriptSecurityManager.createContentPrincipal(
|
|
principaluri,
|
|
{}
|
|
);
|
|
|
|
// indexedDB is only exposed to document globals.
|
|
// We are retrieving an instance from a Sandbox, which has to be loaded
|
|
// from the system principal in order to avoid having wrappers around
|
|
// all indexed DB objects.
|
|
const systemPrincipal = Services.scriptSecurityManager.getSystemPrincipal();
|
|
const sandbox = Cu.Sandbox(systemPrincipal, {
|
|
wantGlobalProperties: ["indexedDB"],
|
|
});
|
|
const { indexedDB } = sandbox;
|
|
|
|
module.exports = Object.freeze({
|
|
/**
|
|
* Only the standard version of indexedDB.open is supported.
|
|
*/
|
|
open(name, version) {
|
|
const options = {};
|
|
if (typeof version === "number") {
|
|
options.version = version;
|
|
}
|
|
return indexedDB.openForPrincipal(principal, name, options);
|
|
},
|
|
|
|
/**
|
|
* Only the standard version of indexedDB.deleteDatabase is supported.
|
|
*/
|
|
deleteDatabase(name) {
|
|
return indexedDB.deleteForPrincipal(principal, name);
|
|
},
|
|
|
|
cmp: indexedDB.cmp.bind(indexedDB),
|
|
});
|
|
}
|