Index: Source/modules/cachestorage/InspectorCacheStorageAgent.cpp |
diff --git a/Source/modules/cachestorage/InspectorCacheStorageAgent.cpp b/Source/modules/cachestorage/InspectorCacheStorageAgent.cpp |
index 21b4884a681c1c1b8302ba6d07d7fefaed71d71a..dc380ed07e64029a0b2a9f19f9a1e970de678d1d 100644 |
--- a/Source/modules/cachestorage/InspectorCacheStorageAgent.cpp |
+++ b/Source/modules/cachestorage/InspectorCacheStorageAgent.cpp |
@@ -7,6 +7,10 @@ |
#include "core/InspectorBackendDispatcher.h" |
#include "core/InspectorTypeBuilder.h" |
+#include "core/dom/Document.h" |
+#include "core/dom/ExecutionContext.h" |
+#include "core/frame/Frame.h" |
+#include "core/page/Page.h" |
#include "platform/JSONValues.h" |
#include "platform/heap/Handle.h" |
#include "platform/weborigin/DatabaseIdentifier.h" |
@@ -66,25 +70,6 @@ bool parseCacheId(ErrorString* errorString, const String& id, String* securityOr |
return true; |
} |
-PassOwnPtr<WebServiceWorkerCacheStorage> assertCacheStorage(ErrorString* errorString, const String& securityOrigin) |
-{ |
- RefPtr<SecurityOrigin> secOrigin = SecurityOrigin::createFromString(securityOrigin); |
- String identifier = createDatabaseIdentifierFromSecurityOrigin(secOrigin.get()); |
- OwnPtr<WebServiceWorkerCacheStorage> cache = adoptPtr(Platform::current()->cacheStorage(identifier)); |
- if (!cache) |
- *errorString = "Could not find cache storage."; |
- return cache.release(); |
-} |
- |
-PassOwnPtr<WebServiceWorkerCacheStorage> assertCacheStorageAndNameForId(ErrorString* errorString, const String& cacheId, String* cacheName) |
-{ |
- String securityOrigin; |
- if (!parseCacheId(errorString, cacheId, &securityOrigin, cacheName)) { |
- return nullptr; |
- } |
- return assertCacheStorage(errorString, securityOrigin); |
-} |
- |
CString serviceWorkerCacheErrorString(WebServiceWorkerCacheError* error) |
{ |
switch (*error) { |
@@ -392,8 +377,9 @@ private: |
} // namespace |
-InspectorCacheStorageAgent::InspectorCacheStorageAgent() |
+InspectorCacheStorageAgent::InspectorCacheStorageAgent(Page* page) |
: InspectorBaseAgent<InspectorCacheStorageAgent, InspectorFrontend::CacheStorage>("CacheStorage") |
+ , m_page(page) |
{ |
} |
@@ -451,5 +437,41 @@ void InspectorCacheStorageAgent::deleteEntry(ErrorString* errorString, const Str |
cache->dispatchOpen(new GetCacheForDeleteEntry(request, cacheName, callback), WebString(cacheName)); |
} |
+ExecutionContext* InspectorCacheStorageAgent::assertExecutionContextForOrigin(ErrorString* error, SecurityOrigin* origin) |
+{ |
+ for (Frame* frame = m_page->mainFrame(); frame; frame = frame->tree().traverseNext()) { |
+ if (!frame->isLocalFrame()) |
+ continue; |
+ LocalFrame* localFrame = toLocalFrame(frame); |
+ if (localFrame->document() && localFrame->document()->securityOrigin()->isSameSchemeHostPort(origin)) |
+ return localFrame->document(); |
+ } |
+ |
+ *error = "No frame is available for the request"; |
+ return 0; |
+} |
+ |
+PassOwnPtr<WebServiceWorkerCacheStorage> InspectorCacheStorageAgent::assertCacheStorage(ErrorString* errorString, const String& securityOrigin) |
+{ |
+ RefPtr<SecurityOrigin> secOrigin = SecurityOrigin::createFromString(securityOrigin); |
+ ExecutionContext* executionContext = assertExecutionContextForOrigin(errorString, secOrigin.get()); |
+ if (!executionContext || !executionContext->isPrivilegedContext(*errorString)) |
jsbell
2015/06/19 20:32:40
This should call a public static on CacheStorage r
|
+ return nullptr; |
+ |
+ String identifier = createDatabaseIdentifierFromSecurityOrigin(secOrigin.get()); |
+ OwnPtr<WebServiceWorkerCacheStorage> cache = adoptPtr(Platform::current()->cacheStorage(identifier)); |
+ if (!cache) |
+ *errorString = "Could not find cache storage."; |
+ return cache.release(); |
+} |
+ |
+PassOwnPtr<WebServiceWorkerCacheStorage> InspectorCacheStorageAgent::assertCacheStorageAndNameForId(ErrorString* errorString, const String& cacheId, String* cacheName) |
+{ |
+ String securityOrigin; |
+ if (!parseCacheId(errorString, cacheId, &securityOrigin, cacheName)) |
+ return nullptr; |
+ return assertCacheStorage(errorString, securityOrigin); |
+} |
+ |
} // namespace blink |