OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 #include "modules/cachestorage/InspectorCacheStorageAgent.h" | 6 #include "modules/cachestorage/InspectorCacheStorageAgent.h" |
7 | 7 |
8 #include "core/InspectorBackendDispatcher.h" | 8 #include "core/InspectorBackendDispatcher.h" |
9 #include "core/InspectorTypeBuilder.h" | 9 #include "core/InspectorTypeBuilder.h" |
10 #include "core/dom/Document.h" | |
11 #include "core/dom/ExecutionContext.h" | |
12 #include "core/frame/Frame.h" | |
13 #include "core/page/Page.h" | |
10 #include "platform/JSONValues.h" | 14 #include "platform/JSONValues.h" |
11 #include "platform/heap/Handle.h" | 15 #include "platform/heap/Handle.h" |
12 #include "platform/weborigin/DatabaseIdentifier.h" | 16 #include "platform/weborigin/DatabaseIdentifier.h" |
13 #include "platform/weborigin/KURL.h" | 17 #include "platform/weborigin/KURL.h" |
14 #include "platform/weborigin/SecurityOrigin.h" | 18 #include "platform/weborigin/SecurityOrigin.h" |
15 #include "public/platform/Platform.h" | 19 #include "public/platform/Platform.h" |
16 #include "public/platform/WebServiceWorkerCache.h" | 20 #include "public/platform/WebServiceWorkerCache.h" |
17 #include "public/platform/WebServiceWorkerCacheError.h" | 21 #include "public/platform/WebServiceWorkerCacheError.h" |
18 #include "public/platform/WebServiceWorkerCacheStorage.h" | 22 #include "public/platform/WebServiceWorkerCacheStorage.h" |
19 #include "public/platform/WebServiceWorkerRequest.h" | 23 #include "public/platform/WebServiceWorkerRequest.h" |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
59 size_t pipe = id.find('|'); | 63 size_t pipe = id.find('|'); |
60 if (pipe == WTF::kNotFound) { | 64 if (pipe == WTF::kNotFound) { |
61 *errorString = "Invalid cache id."; | 65 *errorString = "Invalid cache id."; |
62 return false; | 66 return false; |
63 } | 67 } |
64 *securityOrigin = id.substring(0, pipe); | 68 *securityOrigin = id.substring(0, pipe); |
65 *cacheName = id.substring(pipe + 1); | 69 *cacheName = id.substring(pipe + 1); |
66 return true; | 70 return true; |
67 } | 71 } |
68 | 72 |
69 PassOwnPtr<WebServiceWorkerCacheStorage> assertCacheStorage(ErrorString* errorSt ring, const String& securityOrigin) | |
70 { | |
71 RefPtr<SecurityOrigin> secOrigin = SecurityOrigin::createFromString(security Origin); | |
72 String identifier = createDatabaseIdentifierFromSecurityOrigin(secOrigin.get ()); | |
73 OwnPtr<WebServiceWorkerCacheStorage> cache = adoptPtr(Platform::current()->c acheStorage(identifier)); | |
74 if (!cache) | |
75 *errorString = "Could not find cache storage."; | |
76 return cache.release(); | |
77 } | |
78 | |
79 PassOwnPtr<WebServiceWorkerCacheStorage> assertCacheStorageAndNameForId(ErrorStr ing* errorString, const String& cacheId, String* cacheName) | |
80 { | |
81 String securityOrigin; | |
82 if (!parseCacheId(errorString, cacheId, &securityOrigin, cacheName)) { | |
83 return nullptr; | |
84 } | |
85 return assertCacheStorage(errorString, securityOrigin); | |
86 } | |
87 | |
88 CString serviceWorkerCacheErrorString(WebServiceWorkerCacheError* error) | 73 CString serviceWorkerCacheErrorString(WebServiceWorkerCacheError* error) |
89 { | 74 { |
90 switch (*error) { | 75 switch (*error) { |
91 case WebServiceWorkerCacheErrorNotImplemented: | 76 case WebServiceWorkerCacheErrorNotImplemented: |
92 return CString("not implemented."); | 77 return CString("not implemented."); |
93 break; | 78 break; |
94 case WebServiceWorkerCacheErrorNotFound: | 79 case WebServiceWorkerCacheErrorNotFound: |
95 return CString("not found."); | 80 return CString("not found."); |
96 break; | 81 break; |
97 case WebServiceWorkerCacheErrorExists: | 82 case WebServiceWorkerCacheErrorExists: |
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
385 } | 370 } |
386 | 371 |
387 private: | 372 private: |
388 String m_requestSpec; | 373 String m_requestSpec; |
389 String m_cacheName; | 374 String m_cacheName; |
390 RefPtrWillBePersistent<DeleteEntryCallback> m_callback; | 375 RefPtrWillBePersistent<DeleteEntryCallback> m_callback; |
391 }; | 376 }; |
392 | 377 |
393 } // namespace | 378 } // namespace |
394 | 379 |
395 InspectorCacheStorageAgent::InspectorCacheStorageAgent() | 380 InspectorCacheStorageAgent::InspectorCacheStorageAgent(Page* page) |
396 : InspectorBaseAgent<InspectorCacheStorageAgent, InspectorFrontend::CacheSto rage>("CacheStorage") | 381 : InspectorBaseAgent<InspectorCacheStorageAgent, InspectorFrontend::CacheSto rage>("CacheStorage") |
382 , m_page(page) | |
397 { | 383 { |
398 } | 384 } |
399 | 385 |
400 InspectorCacheStorageAgent::~InspectorCacheStorageAgent() { } | 386 InspectorCacheStorageAgent::~InspectorCacheStorageAgent() { } |
401 | 387 |
402 DEFINE_TRACE(InspectorCacheStorageAgent) | 388 DEFINE_TRACE(InspectorCacheStorageAgent) |
403 { | 389 { |
404 InspectorBaseAgent::trace(visitor); | 390 InspectorBaseAgent::trace(visitor); |
405 } | 391 } |
406 | 392 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
444 { | 430 { |
445 String cacheName; | 431 String cacheName; |
446 OwnPtr<WebServiceWorkerCacheStorage> cache = assertCacheStorageAndNameForId( errorString, cacheId, &cacheName); | 432 OwnPtr<WebServiceWorkerCacheStorage> cache = assertCacheStorageAndNameForId( errorString, cacheId, &cacheName); |
447 if (!cache) { | 433 if (!cache) { |
448 callback->sendFailure(*errorString); | 434 callback->sendFailure(*errorString); |
449 return; | 435 return; |
450 } | 436 } |
451 cache->dispatchOpen(new GetCacheForDeleteEntry(request, cacheName, callback) , WebString(cacheName)); | 437 cache->dispatchOpen(new GetCacheForDeleteEntry(request, cacheName, callback) , WebString(cacheName)); |
452 } | 438 } |
453 | 439 |
440 ExecutionContext* InspectorCacheStorageAgent::assertExecutionContextForOrigin(Er rorString* error, SecurityOrigin* origin) | |
441 { | |
442 for (Frame* frame = m_page->mainFrame(); frame; frame = frame->tree().traver seNext()) { | |
443 if (!frame->isLocalFrame()) | |
444 continue; | |
445 LocalFrame* localFrame = toLocalFrame(frame); | |
446 if (localFrame->document() && localFrame->document()->securityOrigin()-> isSameSchemeHostPort(origin)) | |
447 return localFrame->document(); | |
448 } | |
449 | |
450 *error = "No frame is available for the request"; | |
451 return 0; | |
452 } | |
453 | |
454 PassOwnPtr<WebServiceWorkerCacheStorage> InspectorCacheStorageAgent::assertCache Storage(ErrorString* errorString, const String& securityOrigin) | |
455 { | |
456 RefPtr<SecurityOrigin> secOrigin = SecurityOrigin::createFromString(security Origin); | |
457 ExecutionContext* executionContext = assertExecutionContextForOrigin(errorSt ring, secOrigin.get()); | |
458 if (!executionContext || !executionContext->isPrivilegedContext(*errorString )) | |
jsbell
2015/06/19 20:32:40
This should call a public static on CacheStorage r
| |
459 return nullptr; | |
460 | |
461 String identifier = createDatabaseIdentifierFromSecurityOrigin(secOrigin.get ()); | |
462 OwnPtr<WebServiceWorkerCacheStorage> cache = adoptPtr(Platform::current()->c acheStorage(identifier)); | |
463 if (!cache) | |
464 *errorString = "Could not find cache storage."; | |
465 return cache.release(); | |
466 } | |
467 | |
468 PassOwnPtr<WebServiceWorkerCacheStorage> InspectorCacheStorageAgent::assertCache StorageAndNameForId(ErrorString* errorString, const String& cacheId, String* cac heName) | |
469 { | |
470 String securityOrigin; | |
471 if (!parseCacheId(errorString, cacheId, &securityOrigin, cacheName)) | |
472 return nullptr; | |
473 return assertCacheStorage(errorString, securityOrigin); | |
474 } | |
475 | |
454 | 476 |
455 } // namespace blink | 477 } // namespace blink |
OLD | NEW |