already_AddRefed<IDBFactory> WorkerGlobalScope::GetIndexedDB( ErrorResult& aErrorResult) { mWorkerPrivate->AssertIsOnWorkerThread(); RefPtr<IDBFactory> indexedDB = mIndexedDB; if (!indexedDB) { if (!mWorkerPrivate->IsStorageAllowed()) { NS_WARNING("IndexedDB is not allowed in this worker!"); aErrorResult = NS_ERROR_DOM_SECURITY_ERR; return nullptr; } JSContext* cx = mWorkerPrivate->GetJSContext(); MOZ_ASSERT(cx); JS::Rooted<JSObject*> owningObject(cx, GetGlobalJSObject()); MOZ_ASSERT(owningObject); const PrincipalInfo& principalInfo = mWorkerPrivate->GetPrincipalInfo(); nsresult rv = IDBFactory::CreateForWorker(cx, owningObject, principalInfo, mWorkerPrivate->WindowID(), getter_AddRefs(indexedDB)); if (NS_WARN_IF(NS_FAILED(rv))) { aErrorResult = rv; return nullptr; } mIndexedDB = indexedDB; } return indexedDB.forget(); }
nsIPrincipal* nsIGlobalObject::PrincipalOrNull() { JSObject *global = GetGlobalJSObject(); if (NS_WARN_IF(!global)) return nullptr; return nsContentUtils::ObjectPrincipal(global); }