Chromium Code Reviews| 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); |