зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1478390. Simplify service worker script cache code now that sandbox nsIGlobalObjects hold on to their JS global. r=mrbkap
This commit is contained in:
Родитель
b614139add
Коммит
2b22720daf
|
@ -41,26 +41,21 @@ namespace serviceWorkerScriptCache {
|
|||
|
||||
namespace {
|
||||
|
||||
// XXX A sandbox nsIGlobalObject does not preserve its reflector, so |aSandbox|
|
||||
// must be kept alive as long as the CacheStorage if you want to ensure that
|
||||
// the CacheStorage will continue to work. Failures will manifest as errors
|
||||
// like "JavaScript error: , line 0: TypeError: The expression cannot be
|
||||
// converted to return the specified type."
|
||||
already_AddRefed<CacheStorage>
|
||||
CreateCacheStorage(JSContext* aCx, nsIPrincipal* aPrincipal, ErrorResult& aRv,
|
||||
JS::MutableHandle<JSObject*> aSandbox)
|
||||
CreateCacheStorage(JSContext* aCx, nsIPrincipal* aPrincipal, ErrorResult& aRv)
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(aPrincipal);
|
||||
|
||||
nsIXPConnect* xpc = nsContentUtils::XPConnect();
|
||||
MOZ_ASSERT(xpc, "This should never be null!");
|
||||
aRv = xpc->CreateSandbox(aCx, aPrincipal, aSandbox.address());
|
||||
JS::Rooted<JSObject*> sandbox(aCx);
|
||||
aRv = xpc->CreateSandbox(aCx, aPrincipal, sandbox.address());
|
||||
if (NS_WARN_IF(aRv.Failed())) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIGlobalObject> sandboxGlobalObject = xpc::NativeGlobal(aSandbox);
|
||||
nsCOMPtr<nsIGlobalObject> sandboxGlobalObject = xpc::NativeGlobal(sandbox);
|
||||
if (!sandboxGlobalObject) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
|
@ -666,7 +661,6 @@ private:
|
|||
|
||||
RefPtr<ServiceWorkerRegistrationInfo> mRegistration;
|
||||
RefPtr<CompareCallback> mCallback;
|
||||
JS::PersistentRooted<JSObject*> mSandbox;
|
||||
RefPtr<CacheStorage> mCacheStorage;
|
||||
|
||||
nsTArray<RefPtr<CompareNetwork>> mCNList;
|
||||
|
@ -1286,8 +1280,7 @@ CompareManager::Initialize(nsIPrincipal* aPrincipal,
|
|||
AutoJSAPI jsapi;
|
||||
jsapi.Init();
|
||||
ErrorResult result;
|
||||
mSandbox.init(jsapi.cx());
|
||||
mCacheStorage = CreateCacheStorage(jsapi.cx(), aPrincipal, result, &mSandbox);
|
||||
mCacheStorage = CreateCacheStorage(jsapi.cx(), aPrincipal, result);
|
||||
if (NS_WARN_IF(result.Failed())) {
|
||||
MOZ_ASSERT(!result.IsErrorWithMessage());
|
||||
return result.StealNSResult();
|
||||
|
@ -1429,8 +1422,7 @@ PurgeCache(nsIPrincipal* aPrincipal, const nsAString& aCacheName)
|
|||
AutoJSAPI jsapi;
|
||||
jsapi.Init();
|
||||
ErrorResult rv;
|
||||
JS::Rooted<JSObject*> sandboxObject(jsapi.cx());
|
||||
RefPtr<CacheStorage> cacheStorage = CreateCacheStorage(jsapi.cx(), aPrincipal, rv, &sandboxObject);
|
||||
RefPtr<CacheStorage> cacheStorage = CreateCacheStorage(jsapi.cx(), aPrincipal, rv);
|
||||
if (NS_WARN_IF(rv.Failed())) {
|
||||
return rv.StealNSResult();
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче