Index: Source/modules/cachestorage/CacheStorage.cpp |
diff --git a/Source/modules/cachestorage/CacheStorage.cpp b/Source/modules/cachestorage/CacheStorage.cpp |
index 4961a3fa425ef4fa40a96aa96f7531f7b8449511..ecef79b1c90f5455d41dcc59b03e34078f464711 100644 |
--- a/Source/modules/cachestorage/CacheStorage.cpp |
+++ b/Source/modules/cachestorage/CacheStorage.cpp |
@@ -24,6 +24,22 @@ DOMException* createNoImplementationException() |
return DOMException::create(NotSupportedError, "No CacheStorage implementation provided."); |
} |
+bool commonChecks(ScriptState* scriptState, ExceptionState& exceptionState) |
+{ |
+ ExecutionContext* executionContext = scriptState->executionContext(); |
+ // FIXME: May be null due to worker termination: http://crbug.com/413518. |
+ if (!executionContext) |
+ return false; |
+ |
+ RefPtr<SecurityOrigin> documentOrigin = executionContext->securityOrigin(); |
+ String errorMessage; |
+ if (!executionContext->isPrivilegedContext(errorMessage)) { |
jsbell
2015/06/19 20:32:40
Per notes in https://codereview.chromium.org/11920
palmer
2015/06/26 21:13:16
No, this is fine, and correct.
406 bool SecurityO
|
+ exceptionState.throwSecurityError(errorMessage); |
+ return false; |
+ } |
+ return true; |
+} |
+ |
} |
// FIXME: Consider using CallbackPromiseAdapter. |
@@ -188,8 +204,11 @@ CacheStorage* CacheStorage::create(WeakPtr<GlobalFetch::ScopedFetcher> fetcher, |
return new CacheStorage(fetcher, adoptPtr(webCacheStorage)); |
} |
-ScriptPromise CacheStorage::open(ScriptState* scriptState, const String& cacheName) |
+ScriptPromise CacheStorage::open(ScriptState* scriptState, const String& cacheName, ExceptionState& exceptionState) |
{ |
+ if (!commonChecks(scriptState, exceptionState)) |
+ return ScriptPromise(); |
+ |
RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState); |
const ScriptPromise promise = resolver->promise(); |
@@ -207,8 +226,11 @@ ScriptPromise CacheStorage::open(ScriptState* scriptState, const String& cacheNa |
return promise; |
} |
-ScriptPromise CacheStorage::has(ScriptState* scriptState, const String& cacheName) |
+ScriptPromise CacheStorage::has(ScriptState* scriptState, const String& cacheName, ExceptionState& exceptionState) |
{ |
+ if (!commonChecks(scriptState, exceptionState)) |
+ return ScriptPromise(); |
+ |
RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState); |
const ScriptPromise promise = resolver->promise(); |
@@ -225,8 +247,11 @@ ScriptPromise CacheStorage::has(ScriptState* scriptState, const String& cacheNam |
return promise; |
} |
-ScriptPromise CacheStorage::deleteFunction(ScriptState* scriptState, const String& cacheName) |
+ScriptPromise CacheStorage::deleteFunction(ScriptState* scriptState, const String& cacheName, ExceptionState& exceptionState) |
{ |
+ if (!commonChecks(scriptState, exceptionState)) |
+ return ScriptPromise(); |
+ |
RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState); |
const ScriptPromise promise = resolver->promise(); |
@@ -238,8 +263,11 @@ ScriptPromise CacheStorage::deleteFunction(ScriptState* scriptState, const Strin |
return promise; |
} |
-ScriptPromise CacheStorage::keys(ScriptState* scriptState) |
+ScriptPromise CacheStorage::keys(ScriptState* scriptState, ExceptionState& exceptionState) |
{ |
+ if (!commonChecks(scriptState, exceptionState)) |
+ return ScriptPromise(); |
+ |
RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState); |
const ScriptPromise promise = resolver->promise(); |
@@ -254,6 +282,8 @@ ScriptPromise CacheStorage::keys(ScriptState* scriptState) |
ScriptPromise CacheStorage::match(ScriptState* scriptState, const RequestInfo& request, const CacheQueryOptions& options, ExceptionState& exceptionState) |
{ |
ASSERT(!request.isNull()); |
+ if (!commonChecks(scriptState, exceptionState)) |
+ return ScriptPromise(); |
if (request.isRequest()) |
return matchImpl(scriptState, request.getAsRequest(), options); |