| Index: Source/modules/cachestorage/CacheStorage.cpp
|
| diff --git a/Source/modules/cachestorage/CacheStorage.cpp b/Source/modules/cachestorage/CacheStorage.cpp
|
| index 86ffcb2ac4a93601d43240c5964e44c217af0342..fcf275ee5484253297b158f963c48c23de3012ac 100644
|
| --- a/Source/modules/cachestorage/CacheStorage.cpp
|
| +++ b/Source/modules/cachestorage/CacheStorage.cpp
|
| @@ -24,6 +24,21 @@ 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;
|
| +
|
| + String errorMessage;
|
| + if (!executionContext->isPrivilegedContext(errorMessage)) {
|
| + exceptionState.throwSecurityError(errorMessage);
|
| + return false;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| }
|
|
|
| // FIXME: Consider using CallbackPromiseAdapter.
|
| @@ -183,13 +198,26 @@ private:
|
| RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver;
|
| };
|
|
|
| +// static
|
| +bool CacheStorage::canAccessCacheStorage(ExecutionContext* executionContext, String* errorMessage)
|
| +{
|
| + String ignored;
|
| + if (!errorMessage)
|
| + errorMessage = &ignored;
|
| + return executionContext->isPrivilegedContext(*errorMessage);
|
| +}
|
| +
|
| +// static
|
| CacheStorage* CacheStorage::create(WeakPtr<GlobalFetch::ScopedFetcher> fetcher, WebServiceWorkerCacheStorage* webCacheStorage)
|
| {
|
| 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 +235,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 +256,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 +272,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 +291,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);
|
|
|