Bug 1019194 part 1. Get rid of nsIIndexedDatabaseManager. r=paul,khuey,mossop

This commit is contained in:
Boris Zbarsky 2014-06-17 15:01:47 -04:00
parent cc2ba4f0a5
commit 3a5702d71d
11 changed files with 11 additions and 94 deletions

View File

@ -27,18 +27,6 @@ let sanitizeId = function(id){
const PSEUDOURI = "indexeddb://" + sanitizeId(id) // https://bugzilla.mozilla.org/show_bug.cgi?id=779197 const PSEUDOURI = "indexeddb://" + sanitizeId(id) // https://bugzilla.mozilla.org/show_bug.cgi?id=779197
// Firefox 26 and earlier releases don't support `indexedDB` in sandboxes
// automatically, so we need to inject `indexedDB` to `this` scope ourselves.
if (typeof(indexedDB) === "undefined") {
Cc["@mozilla.org/dom/indexeddb/manager;1"].
getService(Ci.nsIIndexedDatabaseManager).
initWindowless(this);
// Firefox 14 gets this with a prefix
if (typeof(indexedDB) === "undefined")
this.indexedDB = mozIndexedDB;
}
// Use XPCOM because `require("./url").URL` doesn't expose the raw uri object. // Use XPCOM because `require("./url").URL` doesn't expose the raw uri object.
let principaluri = Cc["@mozilla.org/network/io-service;1"]. let principaluri = Cc["@mozilla.org/network/io-service;1"].
getService(Ci.nsIIOService). getService(Ci.nsIIOService).
@ -50,8 +38,9 @@ let principal = Cc["@mozilla.org/scriptsecuritymanager;1"].
exports.indexedDB = Object.freeze({ exports.indexedDB = Object.freeze({
open: indexedDB.openForPrincipal.bind(indexedDB, principal), open: indexedDB.openForPrincipal.bind(indexedDB, principal),
openForPrincipal: indexedDB.openForPrincipal.bind(indexedDB),
deleteDatabase: indexedDB.deleteForPrincipal.bind(indexedDB, principal), deleteDatabase: indexedDB.deleteForPrincipal.bind(indexedDB, principal),
cmp: indexedDB.cmp cmp: indexedDB.cmp.bind(indexedDB)
}); });
exports.IDBKeyRange = IDBKeyRange; exports.IDBKeyRange = IDBKeyRange;

View File

@ -188,7 +188,6 @@
#endif #endif
@BINPATH@/components/dom_notification.xpt @BINPATH@/components/dom_notification.xpt
@BINPATH@/components/dom_html.xpt @BINPATH@/components/dom_html.xpt
@BINPATH@/components/dom_indexeddb.xpt
@BINPATH@/components/dom_offline.xpt @BINPATH@/components/dom_offline.xpt
@BINPATH@/components/dom_payment.xpt @BINPATH@/components/dom_payment.xpt
@BINPATH@/components/dom_json.xpt @BINPATH@/components/dom_json.xpt

View File

@ -5,6 +5,7 @@ const promise = require("devtools/toolkit/deprecated-sync-thenables");
const {EventEmitter} = Cu.import("resource://gre/modules/devtools/event-emitter.js"); const {EventEmitter} = Cu.import("resource://gre/modules/devtools/event-emitter.js");
const {generateUUID} = Cc['@mozilla.org/uuid-generator;1'].getService(Ci.nsIUUIDGenerator); const {generateUUID} = Cc['@mozilla.org/uuid-generator;1'].getService(Ci.nsIUUIDGenerator);
const {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm"); const {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm");
const { indexedDB } = require("sdk/indexed-db");
/** /**
* IndexedDB wrapper that just save project objects * IndexedDB wrapper that just save project objects
@ -20,10 +21,6 @@ const IDB = {
open: function () { open: function () {
let deferred = promise.defer(); let deferred = promise.defer();
var idbManager = Cc["@mozilla.org/dom/indexeddb/manager;1"]
.getService(Ci.nsIIndexedDatabaseManager);
idbManager.initWindowless(global);
let request = global.indexedDB.open("AppProjects", 5); let request = global.indexedDB.open("AppProjects", 5);
request.onerror = function(event) { request.onerror = function(event) {
deferred.reject("Unable to open AppProjects indexedDB. " + deferred.reject("Unable to open AppProjects indexedDB. " +

View File

@ -202,7 +202,6 @@
@BINPATH@/components/dom_network.xpt @BINPATH@/components/dom_network.xpt
@BINPATH@/components/dom_notification.xpt @BINPATH@/components/dom_notification.xpt
@BINPATH@/components/dom_html.xpt @BINPATH@/components/dom_html.xpt
@BINPATH@/components/dom_indexeddb.xpt
@BINPATH@/components/dom_offline.xpt @BINPATH@/components/dom_offline.xpt
@BINPATH@/components/dom_json.xpt @BINPATH@/components/dom_json.xpt
@BINPATH@/components/dom_power.xpt @BINPATH@/components/dom_power.xpt

View File

@ -646,36 +646,7 @@ IndexedDatabaseManager::BlockAndGetFileReferences(
NS_IMPL_ADDREF(IndexedDatabaseManager) NS_IMPL_ADDREF(IndexedDatabaseManager)
NS_IMPL_RELEASE_WITH_DESTROY(IndexedDatabaseManager, Destroy()) NS_IMPL_RELEASE_WITH_DESTROY(IndexedDatabaseManager, Destroy())
NS_IMPL_QUERY_INTERFACE(IndexedDatabaseManager, nsIIndexedDatabaseManager, NS_IMPL_QUERY_INTERFACE(IndexedDatabaseManager, nsIObserver)
nsIObserver)
NS_IMETHODIMP
IndexedDatabaseManager::InitWindowless(JS::Handle<JS::Value> aGlobal, JSContext* aCx)
{
NS_ENSURE_TRUE(nsContentUtils::IsCallerChrome(), NS_ERROR_NOT_AVAILABLE);
JS::Rooted<JSObject*> global(aCx, aGlobal.toObjectOrNull());
if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
NS_WARNING("Passed object is not a global object!");
return NS_ERROR_FAILURE;
}
bool hasIndexedDB;
if (!JS_HasProperty(aCx, global, IDB_STR, &hasIndexedDB)) {
return NS_ERROR_FAILURE;
}
if (hasIndexedDB) {
NS_WARNING("Passed object already has an 'indexedDB' property!");
return NS_ERROR_FAILURE;
}
if (!DefineIndexedDB(aCx, global)) {
return NS_ERROR_FAILURE;
}
return NS_OK;
}
NS_IMETHODIMP NS_IMETHODIMP
IndexedDatabaseManager::Observe(nsISupports* aSubject, const char* aTopic, IndexedDatabaseManager::Observe(nsISupports* aSubject, const char* aTopic,

View File

@ -9,7 +9,6 @@
#include "mozilla/dom/indexedDB/IndexedDatabase.h" #include "mozilla/dom/indexedDB/IndexedDatabase.h"
#include "nsIIndexedDatabaseManager.h"
#include "nsIObserver.h" #include "nsIObserver.h"
#include "js/TypeDecls.h" #include "js/TypeDecls.h"
@ -38,15 +37,13 @@ BEGIN_INDEXEDDB_NAMESPACE
class FileManager; class FileManager;
class FileManagerInfo; class FileManagerInfo;
class IndexedDatabaseManager MOZ_FINAL : public nsIIndexedDatabaseManager, class IndexedDatabaseManager MOZ_FINAL : public nsIObserver
public nsIObserver
{ {
typedef mozilla::dom::quota::OriginOrPatternString OriginOrPatternString; typedef mozilla::dom::quota::OriginOrPatternString OriginOrPatternString;
typedef mozilla::dom::quota::PersistenceType PersistenceType; typedef mozilla::dom::quota::PersistenceType PersistenceType;
public: public:
NS_DECL_ISUPPORTS NS_DECL_ISUPPORTS
NS_DECL_NSIINDEXEDDATABASEMANAGER
NS_DECL_NSIOBSERVER NS_DECL_NSIOBSERVER
// Returns a non-owning reference. // Returns a non-owning reference.

View File

@ -7,12 +7,6 @@
DIRS += ['ipc'] DIRS += ['ipc']
TEST_DIRS += ['test'] TEST_DIRS += ['test']
XPIDL_SOURCES += [
'nsIIndexedDatabaseManager.idl',
]
XPIDL_MODULE = 'dom_indexeddb'
EXPORTS.mozilla.dom.indexedDB += [ EXPORTS.mozilla.dom.indexedDB += [
'Client.h', 'Client.h',
'DatabaseInfo.h', 'DatabaseInfo.h',

View File

@ -1,25 +0,0 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=2 et sw=2 tw=80: */
/* 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/. */
#include "nsISupports.idl"
[scriptable, builtinclass, uuid(538d1085-517e-405a-a0f0-eb575cb0b8e5)]
interface nsIIndexedDatabaseManager : nsISupports
{
/**
* Defines indexedDB and IDBKeyRange with its static functions on aGlobal.
*
* This method might go away some time in the future, indexedDB and
* IDBKeyRange should now be defined in all the spots (content windows,
* chrome windows, xpcshell, JS modules, JS components, JS sandboxes,
* ipcshell, bootstrapped extensions and Jetpack)
*
* @param aGlobal
* The global object, indexedDB and IDBKeyRange should be defined on.
*/
[implicit_jscontext]
void initWindowless(in jsval aGlobal);
};

View File

@ -61,8 +61,6 @@ members = [
'nsIBoxObject.width', 'nsIBoxObject.width',
'nsIBoxObject.height', 'nsIBoxObject.height',
# dom/indexedDB
'nsIIndexedDatabaseManager.*',
] ]
# Most interfaces can be found by searching the includePath; to find # Most interfaces can be found by searching the includePath; to find
@ -74,8 +72,6 @@ members = [
irregularFilenames = { irregularFilenames = {
# stowaways # stowaways
'nsIDOMBlob': 'nsIDOMFile', 'nsIDOMBlob': 'nsIDOMFile',
'nsIIndexedDatabaseUsageCallback': 'nsIIndexedDatabaseManager',
'nsITelephoneCallback': 'nsITelephone',
} }
customIncludes = [ customIncludes = [

View File

@ -147,7 +147,6 @@
@BINPATH@/components/dom_network.xpt @BINPATH@/components/dom_network.xpt
@BINPATH@/components/dom_notification.xpt @BINPATH@/components/dom_notification.xpt
@BINPATH@/components/dom_html.xpt @BINPATH@/components/dom_html.xpt
@BINPATH@/components/dom_indexeddb.xpt
@BINPATH@/components/dom_offline.xpt @BINPATH@/components/dom_offline.xpt
@BINPATH@/components/dom_json.xpt @BINPATH@/components/dom_json.xpt
@BINPATH@/components/dom_payment.xpt @BINPATH@/components/dom_payment.xpt

View File

@ -7,6 +7,12 @@
const {Cu, Cc, Ci} = require("chrome"); const {Cu, Cc, Ci} = require("chrome");
const events = require("sdk/event/core"); const events = require("sdk/event/core");
const protocol = require("devtools/server/protocol"); const protocol = require("devtools/server/protocol");
try {
const { indexedDB } = require("sdk/indexed-db");
} catch (e) {
// In xpcshell tests, we can't actually have indexedDB, which is OK:
// we don't use it there anyway.
}
const {async} = require("devtools/async-utils"); const {async} = require("devtools/async-utils");
const {Arg, Option, method, RetVal, types} = protocol; const {Arg, Option, method, RetVal, types} = protocol;
const {LongStringActor, ShortLongString} = require("devtools/server/actors/string"); const {LongStringActor, ShortLongString} = require("devtools/server/actors/string");
@ -930,11 +936,6 @@ StorageActors.createActor({
}, { }, {
initialize: function(storageActor) { initialize: function(storageActor) {
protocol.Actor.prototype.initialize.call(this, null); protocol.Actor.prototype.initialize.call(this, null);
if (!global.indexedDB) {
let idbManager = Cc["@mozilla.org/dom/indexeddb/manager;1"]
.getService(Ci.nsIIndexedDatabaseManager);
idbManager.initWindowless(global);
}
this.objectsSize = {}; this.objectsSize = {};
this.storageActor = storageActor; this.storageActor = storageActor;
this.onWindowReady = this.onWindowReady.bind(this); this.onWindowReady = this.onWindowReady.bind(this);