Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(205)

Side by Side Diff: Source/modules/cachestorage/InspectorCacheStorageAgent.cpp

Issue 1044203004: [Storage] Cache storage inspection on all the frames! (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Tests Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "modules/serviceworkers/ServiceWorkerGlobalScope.h"
11 #include "platform/JSONValues.h" 10 #include "platform/JSONValues.h"
12 #include "platform/heap/Handle.h" 11 #include "platform/heap/Handle.h"
13 #include "platform/weborigin/DatabaseIdentifier.h" 12 #include "platform/weborigin/DatabaseIdentifier.h"
13 #include "platform/weborigin/SecurityOrigin.h"
14 #include "public/platform/Platform.h" 14 #include "public/platform/Platform.h"
15 #include "public/platform/WebServiceWorkerCache.h" 15 #include "public/platform/WebServiceWorkerCache.h"
16 #include "public/platform/WebServiceWorkerCacheError.h" 16 #include "public/platform/WebServiceWorkerCacheError.h"
17 #include "public/platform/WebServiceWorkerCacheStorage.h" 17 #include "public/platform/WebServiceWorkerCacheStorage.h"
18 #include "public/platform/WebServiceWorkerRequest.h" 18 #include "public/platform/WebServiceWorkerRequest.h"
19 #include "public/platform/WebServiceWorkerResponse.h" 19 #include "public/platform/WebServiceWorkerResponse.h"
20 #include "public/platform/WebString.h" 20 #include "public/platform/WebString.h"
21 #include "public/platform/WebURL.h" 21 #include "public/platform/WebURL.h"
22 #include "public/platform/WebVector.h" 22 #include "public/platform/WebVector.h"
23 #include "wtf/Noncopyable.h" 23 #include "wtf/Noncopyable.h"
24 #include "wtf/OwnPtr.h" 24 #include "wtf/OwnPtr.h"
25 #include "wtf/PassRefPtr.h" 25 #include "wtf/PassRefPtr.h"
26 #include "wtf/RefCounted.h" 26 #include "wtf/RefCounted.h"
27 #include "wtf/RefPtr.h" 27 #include "wtf/RefPtr.h"
28 #include "wtf/Vector.h" 28 #include "wtf/Vector.h"
29 #include "wtf/text/StringBuilder.h" 29 #include "wtf/text/StringBuilder.h"
30 30
31 #include <algorithm> 31 #include <algorithm>
32 32
33 using blink::TypeBuilder::Array; 33 using blink::TypeBuilder::Array;
34 using blink::TypeBuilder::ServiceWorkerCache::DataEntry; 34 using blink::TypeBuilder::CacheStorage::Cache;
35 using blink::TypeBuilder::CacheStorage::DataEntry;
35 36
36 typedef blink::InspectorBackendDispatcher::ServiceWorkerCacheCommandHandler::Del eteCacheCallback DeleteCacheCallback; 37 typedef blink::InspectorBackendDispatcher::CacheStorageCommandHandler::DeleteCac heCallback DeleteCacheCallback;
37 typedef blink::InspectorBackendDispatcher::ServiceWorkerCacheCommandHandler::Req uestCacheNamesCallback RequestCacheNamesCallback; 38 typedef blink::InspectorBackendDispatcher::CacheStorageCommandHandler::RequestCa cheNamesCallback RequestCacheNamesCallback;
38 typedef blink::InspectorBackendDispatcher::ServiceWorkerCacheCommandHandler::Req uestEntriesCallback RequestEntriesCallback; 39 typedef blink::InspectorBackendDispatcher::CacheStorageCommandHandler::RequestEn triesCallback RequestEntriesCallback;
39 typedef blink::InspectorBackendDispatcher::CallbackBase RequestCallback; 40 typedef blink::InspectorBackendDispatcher::CallbackBase RequestCallback;
40 41
41 namespace blink { 42 namespace blink {
42 43
43 namespace { 44 namespace {
44 45
45 PassOwnPtr<WebServiceWorkerCacheStorage> assertCacheStorage(ErrorString* errorSt ring, ServiceWorkerGlobalScope* globalScope) 46 String composeCacheId(const String& securityOrigin, const String& cacheName)
pfeldman 2015/04/20 18:14:31 super nit: we typically use build* and parse*, but
dmurph 2015/04/20 20:58:17 Done.
46 { 47 {
47 String identifier = createDatabaseIdentifierFromSecurityOrigin(globalScope-> securityOrigin()); 48 String id(securityOrigin);
48 OwnPtr<WebServiceWorkerCacheStorage> caches = adoptPtr(Platform::current()-> cacheStorage(identifier)); 49 id.append("|");
49 if (!caches) { 50 id.append(cacheName);
50 *errorString = "Cache Storage not available in global scope."; 51 return id;
51 return nullptr; 52 }
53
54 bool decomposeCacheId(ErrorString* errorString, const String& id, String* securi tyOrigin, String* cacheName)
55 {
56 size_t pipe = id.find('|');
57 if (pipe == WTF::kNotFound) {
58 *errorString = "Cannot find the | character to decompose the cache id";
pfeldman 2015/04/20 18:14:31 nit: you can just say that this was a poor id, no
dmurph 2015/04/20 20:58:17 Done.
59 return false;
52 } 60 }
53 return caches.release(); 61 *securityOrigin = id.substring(0, pipe);
62 *cacheName = id.substring(pipe + 1);
63 return true;
64 }
65
66 PassOwnPtr<WebServiceWorkerCacheStorage> assertCacheStorage(ErrorString* errorSt ring, const String& securityOrigin)
67 {
68 RefPtr<SecurityOrigin> secOrigin = SecurityOrigin::createFromString(security Origin);
69 String identifier = createDatabaseIdentifierFromSecurityOrigin(secOrigin.get ());
70 WebServiceWorkerCacheStorage* cache = Platform::current()->cacheStorage(iden tifier);
pfeldman 2015/04/20 18:14:31 Adopt right away, you'll still be able to check fo
dmurph 2015/04/20 20:58:17 Done.
71 if (!cache)
72 *errorString = "Could not find cache storage.";
73 return adoptPtr(cache);
54 } 74 }
55 75
56 CString serviceWorkerCacheErrorString(WebServiceWorkerCacheError* error) 76 CString serviceWorkerCacheErrorString(WebServiceWorkerCacheError* error)
57 { 77 {
58 switch (*error) { 78 switch (*error) {
59 case WebServiceWorkerCacheErrorNotImplemented: 79 case WebServiceWorkerCacheErrorNotImplemented:
60 return CString("not implemented."); 80 return CString("not implemented.");
61 break; 81 break;
62 case WebServiceWorkerCacheErrorNotFound: 82 case WebServiceWorkerCacheErrorNotFound:
63 return CString("not found."); 83 return CString("not found.");
64 break; 84 break;
65 case WebServiceWorkerCacheErrorExists: 85 case WebServiceWorkerCacheErrorExists:
66 return CString("cache already exists."); 86 return CString("cache already exists.");
67 break; 87 break;
68 default: 88 default:
69 return CString("unknown error."); 89 return CString("unknown error.");
70 break; 90 break;
71 } 91 }
72 } 92 }
73 93
74 class RequestCacheNames 94 class RequestCacheNames
75 : public WebServiceWorkerCacheStorage::CacheStorageKeysCallbacks { 95 : public WebServiceWorkerCacheStorage::CacheStorageKeysCallbacks {
76 WTF_MAKE_NONCOPYABLE(RequestCacheNames); 96 WTF_MAKE_NONCOPYABLE(RequestCacheNames);
77 97
78 public: 98 public:
79 RequestCacheNames(PassRefPtrWillBeRawPtr<RequestCacheNamesCallback> callback ) 99 RequestCacheNames(const String& securityOrigin, PassRefPtrWillBeRawPtr<Reque stCacheNamesCallback> callback)
80 : m_callback(callback) 100 : m_securityOrigin(securityOrigin)
101 , m_callback(callback)
81 { 102 {
82 } 103 }
83 104
84 virtual ~RequestCacheNames() { } 105 virtual ~RequestCacheNames() { }
85 106
86 void onSuccess(WebVector<WebString>* caches) 107 void onSuccess(WebVector<WebString>* caches)
87 { 108 {
88 RefPtr<TypeBuilder::Array<String>> array = TypeBuilder::Array<String>::c reate(); 109 RefPtr<Array<Cache>> array = Array<Cache>::create();
89 for (size_t i = 0; i < caches->size(); i++) { 110 for (size_t i = 0; i < caches->size(); i++) {
90 array->addItem(String((*caches)[i])); 111 String name = String((*caches)[i]);
112 RefPtr<Cache> entry = Cache::create()
113 .setSecurityOrigin(m_securityOrigin)
114 .setCacheName(name)
115 .setCacheId(composeCacheId(m_securityOrigin, name));
116 array->addItem(entry);
91 } 117 }
92 m_callback->sendSuccess(array); 118 m_callback->sendSuccess(array);
93 } 119 }
94 120
95 void onError(WebServiceWorkerCacheError* error) 121 void onError(WebServiceWorkerCacheError* error)
96 { 122 {
97 m_callback->sendFailure(String::format("Error requesting cache names: %s ", serviceWorkerCacheErrorString(error).data())); 123 m_callback->sendFailure(String::format("Error requesting cache names: %s ", serviceWorkerCacheErrorString(error).data()));
98 } 124 }
99 125
100 private: 126 private:
127 String m_securityOrigin;
101 RefPtrWillBePersistent<RequestCacheNamesCallback> m_callback; 128 RefPtrWillBePersistent<RequestCacheNamesCallback> m_callback;
102 }; 129 };
103 130
104 struct DataRequestParams { 131 struct DataRequestParams {
105 String cacheName; 132 String cacheName;
106 int skipCount; 133 int skipCount;
107 int pageSize; 134 int pageSize;
108 }; 135 };
109 136
110 struct RequestResponse { 137 struct RequestResponse {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 { 172 {
146 return WTF::codePointCompareLessThan(a.request, b.request); 173 return WTF::codePointCompareLessThan(a.request, b.request);
147 }); 174 });
148 if (m_params.skipCount > 0) 175 if (m_params.skipCount > 0)
149 m_responses.remove(0, m_params.skipCount); 176 m_responses.remove(0, m_params.skipCount);
150 bool hasMore = false; 177 bool hasMore = false;
151 if (static_cast<size_t>(m_params.pageSize) < m_responses.size()) { 178 if (static_cast<size_t>(m_params.pageSize) < m_responses.size()) {
152 m_responses.remove(m_params.pageSize, m_responses.size() - m_params. pageSize); 179 m_responses.remove(m_params.pageSize, m_responses.size() - m_params. pageSize);
153 hasMore = true; 180 hasMore = true;
154 } 181 }
155 RefPtr<TypeBuilder::Array<DataEntry>> array = TypeBuilder::Array<DataEnt ry>::create(); 182 RefPtr<Array<DataEntry>> array = Array<DataEntry>::create();
156 for (const auto& requestResponse : m_responses) { 183 for (const auto& requestResponse : m_responses) {
157 RefPtr<DataEntry> entry = DataEntry::create() 184 RefPtr<DataEntry> entry = DataEntry::create()
158 .setRequest(JSONString::create(requestResponse.request)->toJSONS tring()) 185 .setRequest(JSONString::create(requestResponse.request)->toJSONS tring())
159 .setResponse(JSONString::create(requestResponse.response)->toJSO NString()); 186 .setResponse(JSONString::create(requestResponse.response)->toJSO NString());
160 array->addItem(entry); 187 array->addItem(entry);
161 } 188 }
162 m_callback->sendSuccess(array, hasMore); 189 m_callback->sendSuccess(array, hasMore);
163 } 190 }
164 191
165 private: 192 private:
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 GetCacheKeysForRequestData(const DataRequestParams& params, PassOwnPtr<WebSe rviceWorkerCache> cache, PassRefPtrWillBeRawPtr<RequestEntriesCallback> callback ) 235 GetCacheKeysForRequestData(const DataRequestParams& params, PassOwnPtr<WebSe rviceWorkerCache> cache, PassRefPtrWillBeRawPtr<RequestEntriesCallback> callback )
209 : m_params(params) 236 : m_params(params)
210 , m_cache(cache) 237 , m_cache(cache)
211 , m_callback(callback) 238 , m_callback(callback)
212 { 239 {
213 } 240 }
214 virtual ~GetCacheKeysForRequestData() { } 241 virtual ~GetCacheKeysForRequestData() { }
215 242
216 void onSuccess(WebVector<WebServiceWorkerRequest>* requests) 243 void onSuccess(WebVector<WebServiceWorkerRequest>* requests)
217 { 244 {
245 if (requests->isEmpty()) {
246 RefPtr<Array<DataEntry>> array = Array<DataEntry>::create();
247 m_callback->sendSuccess(array, false);
248 return;
249 }
218 RefPtr<ResponsesAccumulator> accumulator = adoptRef(new ResponsesAccumul ator(requests->size(), m_params, m_callback)); 250 RefPtr<ResponsesAccumulator> accumulator = adoptRef(new ResponsesAccumul ator(requests->size(), m_params, m_callback));
219 251
220 for (size_t i = 0; i < requests->size(); i++) { 252 for (size_t i = 0; i < requests->size(); i++) {
221 const auto& request = (*requests)[i]; 253 const auto& request = (*requests)[i];
222 auto* cacheRequest = new GetCacheResponsesForRequestData(m_params, r equest, accumulator, m_callback); 254 auto* cacheRequest = new GetCacheResponsesForRequestData(m_params, r equest, accumulator, m_callback);
223 m_cache->dispatchMatch(cacheRequest, request, WebServiceWorkerCache: :QueryParams()); 255 m_cache->dispatchMatch(cacheRequest, request, WebServiceWorkerCache: :QueryParams());
224 } 256 }
225 } 257 }
226 258
227 void onError(WebServiceWorkerCacheError* error) 259 void onError(WebServiceWorkerCacheError* error)
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 { 314 {
283 m_callback->sendFailure(String::format("Error requesting cache names: %s ", serviceWorkerCacheErrorString(error).data())); 315 m_callback->sendFailure(String::format("Error requesting cache names: %s ", serviceWorkerCacheErrorString(error).data()));
284 } 316 }
285 317
286 private: 318 private:
287 RefPtrWillBePersistent<DeleteCacheCallback> m_callback; 319 RefPtrWillBePersistent<DeleteCacheCallback> m_callback;
288 }; 320 };
289 321
290 } // namespace 322 } // namespace
291 323
292 InspectorCacheStorageAgent::InspectorCacheStorageAgent(ServiceWorkerGlobalScope* scope) 324 InspectorCacheStorageAgent::InspectorCacheStorageAgent()
293 : InspectorBaseAgent<blink::InspectorCacheStorageAgent, InspectorFrontend::S erviceWorkerCache>("ServiceWorkerCache") 325 : InspectorBaseAgent<InspectorCacheStorageAgent, InspectorFrontend::CacheSto rage>("CacheStorage")
294 , m_globalScope(scope)
295 { 326 {
296 } 327 }
297 328
298 InspectorCacheStorageAgent::~InspectorCacheStorageAgent() { } 329 InspectorCacheStorageAgent::~InspectorCacheStorageAgent() { }
299 330
300 DEFINE_TRACE(InspectorCacheStorageAgent) 331 DEFINE_TRACE(InspectorCacheStorageAgent)
301 { 332 {
302 InspectorBaseAgent::trace(visitor); 333 InspectorBaseAgent::trace(visitor);
303 } 334 }
304 335
305 void InspectorCacheStorageAgent::requestCacheNames(ErrorString* errorString, Pas sRefPtrWillBeRawPtr<RequestCacheNamesCallback> callback) 336 void InspectorCacheStorageAgent::requestCacheNames(ErrorString* errorString, con st String& securityOrigin, PassRefPtrWillBeRawPtr<RequestCacheNamesCallback> cal lback)
306 { 337 {
307 OwnPtr<WebServiceWorkerCacheStorage> cache = assertCacheStorage(errorString, m_globalScope); 338 OwnPtr<WebServiceWorkerCacheStorage> cache = assertCacheStorage(errorString, securityOrigin);
308 if (!cache) { 339 if (!cache) {
309 callback->sendFailure(*errorString); 340 callback->sendFailure(*errorString);
310 return; 341 return;
311 } 342 }
312 cache->dispatchKeys(new RequestCacheNames(callback)); 343 cache->dispatchKeys(new RequestCacheNames(securityOrigin, callback));
313 } 344 }
314 345
315 346 void InspectorCacheStorageAgent::requestEntries(ErrorString* errorString, const String& cacheId, int skipCount, int pageSize, PassRefPtrWillBeRawPtr<RequestEntr iesCallback> callback)
316 void InspectorCacheStorageAgent::requestEntries(ErrorString* errorString, const String& cacheName, int skipCount, int pageSize, PassRefPtrWillBeRawPtr<RequestEn triesCallback> callback)
317 { 347 {
318 OwnPtr<WebServiceWorkerCacheStorage> cache = assertCacheStorage(errorString, m_globalScope); 348 String securityOrigin, cacheName;
pfeldman 2015/04/20 18:14:31 Declaration per line, please!
dmurph 2015/04/20 20:58:17 Done.
349 if (!decomposeCacheId(errorString, cacheId, &securityOrigin, &cacheName)) {
350 callback->sendFailure(*errorString);
351 return;
352 }
353 OwnPtr<WebServiceWorkerCacheStorage> cache = assertCacheStorage(errorString, securityOrigin);
pfeldman 2015/04/20 18:14:31 Extract assertCacheStorageForId(errorString, cache
dmurph 2015/04/20 20:58:17 Done.
319 if (!cache) { 354 if (!cache) {
320 callback->sendFailure(*errorString); 355 callback->sendFailure(*errorString);
321 return; 356 return;
322 } 357 }
323 DataRequestParams params; 358 DataRequestParams params;
324 params.cacheName = cacheName; 359 params.cacheName = cacheName;
325 params.pageSize = pageSize; 360 params.pageSize = pageSize;
326 params.skipCount = skipCount; 361 params.skipCount = skipCount;
327 cache->dispatchOpen(new GetCacheForRequestData(params, callback), WebString( cacheName)); 362 cache->dispatchOpen(new GetCacheForRequestData(params, callback), WebString( cacheName));
328 } 363 }
329 364
330 void InspectorCacheStorageAgent::deleteCache(ErrorString* errorString, const Str ing& cacheName, PassRefPtrWillBeRawPtr<DeleteCacheCallback> callback) 365 void InspectorCacheStorageAgent::deleteCache(ErrorString* errorString, const Str ing& cacheId, PassRefPtrWillBeRawPtr<DeleteCacheCallback> callback)
331 { 366 {
332 OwnPtr<WebServiceWorkerCacheStorage> cache = assertCacheStorage(errorString, m_globalScope); 367 String securityOrigin, cacheName;
368 if (!decomposeCacheId(errorString, cacheId, &securityOrigin, &cacheName)) {
369 callback->sendFailure(*errorString);
370 return;
371 }
372 OwnPtr<WebServiceWorkerCacheStorage> cache = assertCacheStorage(errorString, securityOrigin);
333 if (!cache) { 373 if (!cache) {
334 callback->sendFailure(*errorString); 374 callback->sendFailure(*errorString);
335 return; 375 return;
336 } 376 }
337 cache->dispatchDelete(new DeleteCache(callback), WebString(cacheName)); 377 cache->dispatchDelete(new DeleteCache(callback), WebString(cacheName));
338 } 378 }
339 379
340 } // namespace blink 380 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698