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

Side by Side Diff: content/browser/service_worker/service_worker_cache_storage.cc

Issue 504233003: Change the ServiceWorkerCacheStorage's loader from a ref ptr to scoped. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 3 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
« no previous file with comments | « content/browser/service_worker/service_worker_cache_storage.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "content/browser/service_worker/service_worker_cache_storage.h" 5 #include "content/browser/service_worker/service_worker_cache_storage.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/files/memory_mapped_file.h" 10 #include "base/files/memory_mapped_file.h"
(...skipping 21 matching lines...) Expand all
32 struct ServiceWorkerCacheStorage::CacheContext { 32 struct ServiceWorkerCacheStorage::CacheContext {
33 CacheContext(const std::string& name, 33 CacheContext(const std::string& name,
34 CacheID id, 34 CacheID id,
35 scoped_ptr<ServiceWorkerCache> cache) 35 scoped_ptr<ServiceWorkerCache> cache)
36 : name(name), id(id), cache(cache.Pass()) {} 36 : name(name), id(id), cache(cache.Pass()) {}
37 std::string name; 37 std::string name;
38 CacheID id; 38 CacheID id;
39 scoped_ptr<ServiceWorkerCache> cache; 39 scoped_ptr<ServiceWorkerCache> cache;
40 }; 40 };
41 41
42 // Handles the loading and clean up of ServiceWorkerCache objects. 42 // Handles the loading and clean up of ServiceWorkerCache objects. The
43 class ServiceWorkerCacheStorage::CacheLoader 43 // callback of every public method is guaranteed to be called.
44 : public base::RefCountedThreadSafe< 44 class ServiceWorkerCacheStorage::CacheLoader {
45 ServiceWorkerCacheStorage::CacheLoader> {
46 public: 45 public:
47 typedef base::Callback<void(scoped_ptr<ServiceWorkerCache>)> CacheCallback; 46 typedef base::Callback<void(scoped_ptr<ServiceWorkerCache>)> CacheCallback;
48 typedef base::Callback<void(bool)> BoolCallback; 47 typedef base::Callback<void(bool)> BoolCallback;
49 typedef base::Callback<void(scoped_ptr<std::vector<std::string> >)> 48 typedef base::Callback<void(scoped_ptr<std::vector<std::string> >)>
50 StringsCallback; 49 StringsCallback;
51 50
52 CacheLoader(base::SequencedTaskRunner* cache_task_runner, 51 CacheLoader(base::SequencedTaskRunner* cache_task_runner,
53 net::URLRequestContext* request_context, 52 net::URLRequestContext* request_context,
54 base::WeakPtr<storage::BlobStorageContext> blob_context) 53 base::WeakPtr<storage::BlobStorageContext> blob_context)
55 : cache_task_runner_(cache_task_runner), 54 : cache_task_runner_(cache_task_runner),
56 request_context_(request_context), 55 request_context_(request_context),
57 blob_context_(blob_context) {} 56 blob_context_(blob_context) {}
58 57
58 virtual ~CacheLoader() {}
59
59 // Loads the given cache_name, the cache is NULL if it fails. If the cache 60 // Loads the given cache_name, the cache is NULL if it fails. If the cache
60 // doesn't exist a new one is created. 61 // doesn't exist a new one is created.
61 virtual void LoadCache(const std::string& cache_name, 62 virtual void LoadCache(const std::string& cache_name,
62 const CacheCallback& callback) = 0; 63 const CacheCallback& callback) = 0;
63 64
64 // Deletes any pre-existing cache of the same name and then loads it. 65 // Deletes any pre-existing cache of the same name and then loads it.
65 virtual void CreateCache(const std::string& cache_name, 66 virtual void CreateCache(const std::string& cache_name,
66 const CacheCallback& callback) = 0; 67 const CacheCallback& callback) = 0;
67 68
68 // After the backend has been deleted, do any extra house keeping such as 69 // After the backend has been deleted, do any extra house keeping such as
69 // removing the cache's directory. 70 // removing the cache's directory.
70 virtual void CleanUpDeletedCache(const std::string& key, 71 virtual void CleanUpDeletedCache(const std::string& key,
71 const BoolCallback& callback) = 0; 72 const BoolCallback& callback) = 0;
72 73
73 // Writes the cache names (and sizes) to disk if applicable. 74 // Writes the cache names (and sizes) to disk if applicable.
74 virtual void WriteIndex(const CacheMap& caches, 75 virtual void WriteIndex(const CacheMap& caches,
75 const BoolCallback& callback) = 0; 76 const BoolCallback& callback) = 0;
76 77
77 // Loads the cache names from disk if applicable. 78 // Loads the cache names from disk if applicable.
78 virtual void LoadIndex(scoped_ptr<std::vector<std::string> > cache_names, 79 virtual void LoadIndex(scoped_ptr<std::vector<std::string> > cache_names,
79 const StringsCallback& callback) = 0; 80 const StringsCallback& callback) = 0;
80 81
81 protected: 82 protected:
82 friend class base::RefCountedThreadSafe<
83 ServiceWorkerCacheStorage::CacheLoader>;
84
85 virtual ~CacheLoader() {}
86 virtual void LoadCacheImpl(const std::string&) {} 83 virtual void LoadCacheImpl(const std::string&) {}
87 84
88 scoped_refptr<base::SequencedTaskRunner> cache_task_runner_; 85 scoped_refptr<base::SequencedTaskRunner> cache_task_runner_;
89 net::URLRequestContext* request_context_; 86 net::URLRequestContext* request_context_;
90 base::WeakPtr<storage::BlobStorageContext> blob_context_; 87 base::WeakPtr<storage::BlobStorageContext> blob_context_;
91 }; 88 };
92 89
93 class ServiceWorkerCacheStorage::MemoryLoader 90 class ServiceWorkerCacheStorage::MemoryLoader
94 : public ServiceWorkerCacheStorage::CacheLoader { 91 : public ServiceWorkerCacheStorage::CacheLoader {
95 public: 92 public:
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 }; 126 };
130 127
131 class ServiceWorkerCacheStorage::SimpleCacheLoader 128 class ServiceWorkerCacheStorage::SimpleCacheLoader
132 : public ServiceWorkerCacheStorage::CacheLoader { 129 : public ServiceWorkerCacheStorage::CacheLoader {
133 public: 130 public:
134 SimpleCacheLoader(const base::FilePath& origin_path, 131 SimpleCacheLoader(const base::FilePath& origin_path,
135 base::SequencedTaskRunner* cache_task_runner, 132 base::SequencedTaskRunner* cache_task_runner,
136 net::URLRequestContext* request_context, 133 net::URLRequestContext* request_context,
137 base::WeakPtr<storage::BlobStorageContext> blob_context) 134 base::WeakPtr<storage::BlobStorageContext> blob_context)
138 : CacheLoader(cache_task_runner, request_context, blob_context), 135 : CacheLoader(cache_task_runner, request_context, blob_context),
139 origin_path_(origin_path) {} 136 origin_path_(origin_path),
137 weak_ptr_factory_(this) {}
140 138
141 virtual void LoadCache(const std::string& cache_name, 139 virtual void LoadCache(const std::string& cache_name,
142 const CacheCallback& callback) OVERRIDE { 140 const CacheCallback& callback) OVERRIDE {
143 DCHECK_CURRENTLY_ON(BrowserThread::IO); 141 DCHECK_CURRENTLY_ON(BrowserThread::IO);
144 142
145 // 1. Create the cache's directory if necessary. (LoadCreateDirectoryInPool) 143 // 1. Create the cache's directory if necessary. (LoadCreateDirectoryInPool)
146 // 2. Create the cache object. (LoadDidCreateDirectory) 144 // 2. Create the cache object. (LoadDidCreateDirectory)
147 145
148 cache_task_runner_->PostTask( 146 cache_task_runner_->PostTask(
149 FROM_HERE, 147 FROM_HERE,
150 base::Bind(&SimpleCacheLoader::LoadCreateDirectoryInPool, 148 base::Bind(&SimpleCacheLoader::LoadCreateDirectoryInPool,
151 this,
152 CreatePersistentCachePath(origin_path_, cache_name), 149 CreatePersistentCachePath(origin_path_, cache_name),
153 cache_name, 150 cache_name,
154 callback, 151 callback,
152 weak_ptr_factory_.GetWeakPtr(),
155 base::MessageLoopProxy::current())); 153 base::MessageLoopProxy::current()));
156 } 154 }
157 155
158 void LoadCreateDirectoryInPool( 156 static void LoadCreateDirectoryInPool(
159 const base::FilePath& path, 157 const base::FilePath& path,
160 const std::string& cache_name, 158 const std::string& cache_name,
161 const CacheCallback& callback, 159 const CacheCallback& callback,
160 base::WeakPtr<SimpleCacheLoader> loader,
162 const scoped_refptr<base::MessageLoopProxy>& original_loop) { 161 const scoped_refptr<base::MessageLoopProxy>& original_loop) {
163 DCHECK(cache_task_runner_->RunsTasksOnCurrentThread());
164
165 bool rv = base::CreateDirectory(path); 162 bool rv = base::CreateDirectory(path);
166 original_loop->PostTask( 163 original_loop->PostTask(
167 FROM_HERE, 164 FROM_HERE,
168 base::Bind(&SimpleCacheLoader::LoadDidCreateDirectory, 165 base::Bind(&SimpleCacheLoader::LoadDidCreateDirectory,
169 this,
170 cache_name, 166 cache_name,
171 callback, 167 callback,
168 loader,
172 rv)); 169 rv));
173 } 170 }
174 171
175 void LoadDidCreateDirectory(const std::string& cache_name, 172 static void LoadDidCreateDirectory(const std::string& cache_name,
176 const CacheCallback& callback, 173 const CacheCallback& callback,
177 bool dir_rv) { 174 base::WeakPtr<SimpleCacheLoader> loader,
175 bool dir_rv) {
178 DCHECK_CURRENTLY_ON(BrowserThread::IO); 176 DCHECK_CURRENTLY_ON(BrowserThread::IO);
179 177
180 if (!dir_rv) { 178 if (!dir_rv || !loader) {
181 callback.Run(scoped_ptr<ServiceWorkerCache>()); 179 callback.Run(scoped_ptr<ServiceWorkerCache>());
182 return; 180 return;
183 } 181 }
184 182
185 scoped_ptr<ServiceWorkerCache> cache = 183 scoped_ptr<ServiceWorkerCache> cache =
186 ServiceWorkerCache::CreatePersistentCache( 184 ServiceWorkerCache::CreatePersistentCache(
187 CreatePersistentCachePath(origin_path_, cache_name), 185 CreatePersistentCachePath(loader->origin_path_, cache_name),
188 request_context_, 186 loader->request_context_,
189 blob_context_); 187 loader->blob_context_);
190 callback.Run(cache.Pass()); 188 callback.Run(cache.Pass());
191 } 189 }
192 190
193 virtual void CreateCache(const std::string& cache_name, 191 virtual void CreateCache(const std::string& cache_name,
194 const CacheCallback& callback) OVERRIDE { 192 const CacheCallback& callback) OVERRIDE {
195 DCHECK_CURRENTLY_ON(BrowserThread::IO); 193 DCHECK_CURRENTLY_ON(BrowserThread::IO);
196 194
197 // 1. Delete the cache's directory if it exists. 195 // 1. Delete the cache's directory if it exists.
198 // (CreateCacheDeleteFilesInPool) 196 // (CreateCacheDeleteFilesInPool)
199 // 2. Load the cache. (LoadCreateDirectoryInPool) 197 // 2. Load the cache. (LoadCreateDirectoryInPool)
200 198
201 base::FilePath cache_path = 199 base::FilePath cache_path =
202 CreatePersistentCachePath(origin_path_, cache_name); 200 CreatePersistentCachePath(origin_path_, cache_name);
203 201
204 cache_task_runner_->PostTask( 202 cache_task_runner_->PostTask(
205 FROM_HERE, 203 FROM_HERE,
206 base::Bind(&SimpleCacheLoader::CreateCacheDeleteFilesInPool, 204 base::Bind(&SimpleCacheLoader::CreateCacheDeleteFilesInPool,
207 this,
208 cache_path, 205 cache_path,
209 cache_name, 206 cache_name,
210 callback, 207 callback,
208 weak_ptr_factory_.GetWeakPtr(),
211 base::MessageLoopProxy::current())); 209 base::MessageLoopProxy::current()));
212 } 210 }
213 211
214 void CreateCacheDeleteFilesInPool( 212 static void CreateCacheDeleteFilesInPool(
215 const base::FilePath& cache_path, 213 const base::FilePath& cache_path,
216 const std::string& cache_name, 214 const std::string& cache_name,
217 const CacheCallback& callback, 215 const CacheCallback& callback,
216 base::WeakPtr<SimpleCacheLoader> loader,
218 const scoped_refptr<base::MessageLoopProxy>& original_loop) { 217 const scoped_refptr<base::MessageLoopProxy>& original_loop) {
219 DCHECK(cache_task_runner_->RunsTasksOnCurrentThread());
220
221 base::FilePath path(cache_path); 218 base::FilePath path(cache_path);
222 if (base::PathExists(path)) 219 if (base::PathExists(path))
223 base::DeleteFile(path, /* recursive */ true); 220 base::DeleteFile(path, /* recursive */ true);
224 221
225 // Jump straight into LoadCache on the same thread. 222 // Jump straight into LoadCache on the same thread.
226 cache_task_runner_->PostTask( 223 LoadCreateDirectoryInPool(
227 FROM_HERE, 224 cache_path, cache_name, callback, loader, original_loop);
228 base::Bind(&SimpleCacheLoader::LoadCreateDirectoryInPool,
229 this,
230 cache_path,
231 cache_name,
232 callback,
233 original_loop));
234 } 225 }
235 226
236 virtual void CleanUpDeletedCache(const std::string& cache_name, 227 virtual void CleanUpDeletedCache(const std::string& cache_name,
237 const BoolCallback& callback) OVERRIDE { 228 const BoolCallback& callback) OVERRIDE {
238 DCHECK_CURRENTLY_ON(BrowserThread::IO); 229 DCHECK_CURRENTLY_ON(BrowserThread::IO);
239 230
240 // 1. Delete the cache's directory. (CleanUpDeleteCacheDirInPool) 231 // 1. Delete the cache's directory. (CleanUpDeleteCacheDirInPool)
241 232
242 base::FilePath cache_path = 233 base::FilePath cache_path =
243 CreatePersistentCachePath(origin_path_, cache_name); 234 CreatePersistentCachePath(origin_path_, cache_name);
244 cache_task_runner_->PostTask( 235 cache_task_runner_->PostTask(
245 FROM_HERE, 236 FROM_HERE,
246 base::Bind(&SimpleCacheLoader::CleanUpDeleteCacheDirInPool, 237 base::Bind(&SimpleCacheLoader::CleanUpDeleteCacheDirInPool,
247 this,
248 cache_path, 238 cache_path,
249 callback, 239 callback,
250 base::MessageLoopProxy::current())); 240 base::MessageLoopProxy::current()));
251 } 241 }
252 242
253 void CleanUpDeleteCacheDirInPool( 243 static void CleanUpDeleteCacheDirInPool(
254 const base::FilePath& cache_path, 244 const base::FilePath& cache_path,
255 const BoolCallback& callback, 245 const BoolCallback& callback,
256 const scoped_refptr<base::MessageLoopProxy>& original_loop) { 246 const scoped_refptr<base::MessageLoopProxy>& original_loop) {
257 DCHECK(cache_task_runner_->RunsTasksOnCurrentThread());
258
259 bool rv = base::DeleteFile(cache_path, true); 247 bool rv = base::DeleteFile(cache_path, true);
260 original_loop->PostTask(FROM_HERE, base::Bind(callback, rv)); 248 original_loop->PostTask(FROM_HERE, base::Bind(callback, rv));
261 } 249 }
262 250
263 virtual void WriteIndex(const CacheMap& caches, 251 virtual void WriteIndex(const CacheMap& caches,
264 const BoolCallback& callback) OVERRIDE { 252 const BoolCallback& callback) OVERRIDE {
265 DCHECK_CURRENTLY_ON(BrowserThread::IO); 253 DCHECK_CURRENTLY_ON(BrowserThread::IO);
266 254
267 // 1. Create the index file as a string. (WriteIndex) 255 // 1. Create the index file as a string. (WriteIndex)
268 // 2. Write the file to disk. (WriteIndexWriteToFileInPool) 256 // 2. Write the file to disk. (WriteIndexWriteToFileInPool)
(...skipping 11 matching lines...) Expand all
280 std::string serialized; 268 std::string serialized;
281 bool success = index.SerializeToString(&serialized); 269 bool success = index.SerializeToString(&serialized);
282 DCHECK(success); 270 DCHECK(success);
283 271
284 base::FilePath tmp_path = origin_path_.AppendASCII("index.txt.tmp"); 272 base::FilePath tmp_path = origin_path_.AppendASCII("index.txt.tmp");
285 base::FilePath index_path = origin_path_.AppendASCII("index.txt"); 273 base::FilePath index_path = origin_path_.AppendASCII("index.txt");
286 274
287 cache_task_runner_->PostTask( 275 cache_task_runner_->PostTask(
288 FROM_HERE, 276 FROM_HERE,
289 base::Bind(&SimpleCacheLoader::WriteIndexWriteToFileInPool, 277 base::Bind(&SimpleCacheLoader::WriteIndexWriteToFileInPool,
290 this,
291 tmp_path, 278 tmp_path,
292 index_path, 279 index_path,
293 serialized, 280 serialized,
294 callback, 281 callback,
295 base::MessageLoopProxy::current())); 282 base::MessageLoopProxy::current()));
296 } 283 }
297 284
298 void WriteIndexWriteToFileInPool( 285 static void WriteIndexWriteToFileInPool(
299 const base::FilePath& tmp_path, 286 const base::FilePath& tmp_path,
300 const base::FilePath& index_path, 287 const base::FilePath& index_path,
301 const std::string& data, 288 const std::string& data,
302 const BoolCallback& callback, 289 const BoolCallback& callback,
303 const scoped_refptr<base::MessageLoopProxy>& original_loop) { 290 const scoped_refptr<base::MessageLoopProxy>& original_loop) {
304 DCHECK(cache_task_runner_->RunsTasksOnCurrentThread());
305
306 int bytes_written = base::WriteFile(tmp_path, data.c_str(), data.size()); 291 int bytes_written = base::WriteFile(tmp_path, data.c_str(), data.size());
307 if (bytes_written != implicit_cast<int>(data.size())) { 292 if (bytes_written != implicit_cast<int>(data.size())) {
308 base::DeleteFile(tmp_path, /* recursive */ false); 293 base::DeleteFile(tmp_path, /* recursive */ false);
309 original_loop->PostTask(FROM_HERE, base::Bind(callback, false)); 294 original_loop->PostTask(FROM_HERE, base::Bind(callback, false));
310 } 295 }
311 296
312 // Atomically rename the temporary index file to become the real one. 297 // Atomically rename the temporary index file to become the real one.
313 bool rv = base::ReplaceFile(tmp_path, index_path, NULL); 298 bool rv = base::ReplaceFile(tmp_path, index_path, NULL);
314 original_loop->PostTask(FROM_HERE, base::Bind(callback, rv)); 299 original_loop->PostTask(FROM_HERE, base::Bind(callback, rv));
315 } 300 }
316 301
317 virtual void LoadIndex(scoped_ptr<std::vector<std::string> > names, 302 virtual void LoadIndex(scoped_ptr<std::vector<std::string> > names,
318 const StringsCallback& callback) OVERRIDE { 303 const StringsCallback& callback) OVERRIDE {
319 DCHECK_CURRENTLY_ON(BrowserThread::IO); 304 DCHECK_CURRENTLY_ON(BrowserThread::IO);
320 305
321 // 1. Read the file from disk. (LoadIndexReadFileInPool) 306 // 1. Read the file from disk. (LoadIndexReadFileInPool)
322 // 2. Parse file and return the names of the caches (LoadIndexDidReadFile) 307 // 2. Parse file and return the names of the caches (LoadIndexDidReadFile)
323 308
324 base::FilePath index_path = origin_path_.AppendASCII("index.txt"); 309 base::FilePath index_path = origin_path_.AppendASCII("index.txt");
325 310
326 cache_task_runner_->PostTask( 311 cache_task_runner_->PostTask(
327 FROM_HERE, 312 FROM_HERE,
328 base::Bind(&SimpleCacheLoader::LoadIndexReadFileInPool, 313 base::Bind(&SimpleCacheLoader::LoadIndexReadFileInPool,
329 this,
330 index_path, 314 index_path,
331 base::Passed(names.Pass()), 315 base::Passed(names.Pass()),
332 callback, 316 callback,
333 base::MessageLoopProxy::current())); 317 base::MessageLoopProxy::current()));
334 } 318 }
335 319
336 void LoadIndexReadFileInPool( 320 static void LoadIndexReadFileInPool(
337 const base::FilePath& index_path, 321 const base::FilePath& index_path,
338 scoped_ptr<std::vector<std::string> > names, 322 scoped_ptr<std::vector<std::string> > names,
339 const StringsCallback& callback, 323 const StringsCallback& callback,
340 const scoped_refptr<base::MessageLoopProxy>& original_loop) { 324 const scoped_refptr<base::MessageLoopProxy>& original_loop) {
341 DCHECK(cache_task_runner_->RunsTasksOnCurrentThread());
342
343 std::string body; 325 std::string body;
344 base::ReadFileToString(index_path, &body); 326 base::ReadFileToString(index_path, &body);
345 327
346 original_loop->PostTask(FROM_HERE, 328 original_loop->PostTask(FROM_HERE,
347 base::Bind(&SimpleCacheLoader::LoadIndexDidReadFile, 329 base::Bind(&SimpleCacheLoader::LoadIndexDidReadFile,
348 this,
349 base::Passed(names.Pass()), 330 base::Passed(names.Pass()),
350 callback, 331 callback,
351 body)); 332 body));
352 } 333 }
353 334
354 void LoadIndexDidReadFile(scoped_ptr<std::vector<std::string> > names, 335 static void LoadIndexDidReadFile(scoped_ptr<std::vector<std::string> > names,
355 const StringsCallback& callback, 336 const StringsCallback& callback,
356 const std::string& serialized) { 337 const std::string& serialized) {
357 DCHECK_CURRENTLY_ON(BrowserThread::IO); 338 DCHECK_CURRENTLY_ON(BrowserThread::IO);
358 339
359 ServiceWorkerCacheStorageIndex index; 340 ServiceWorkerCacheStorageIndex index;
360 if (index.ParseFromString(serialized)) { 341 if (index.ParseFromString(serialized)) {
361 for (int i = 0, max = index.cache_size(); i < max; ++i) { 342 for (int i = 0, max = index.cache_size(); i < max; ++i) {
362 const ServiceWorkerCacheStorageIndex::Cache& cache = index.cache(i); 343 const ServiceWorkerCacheStorageIndex::Cache& cache = index.cache(i);
363 names->push_back(cache.name()); 344 names->push_back(cache.name());
364 } 345 }
365 } 346 }
366 347
367 // TODO(jkarlin): Delete caches that are in the directory and not returned 348 // TODO(jkarlin): Delete caches that are in the directory and not returned
368 // in LoadIndex. 349 // in LoadIndex.
369 callback.Run(names.Pass()); 350 callback.Run(names.Pass());
370 } 351 }
371 352
372 private: 353 private:
373 virtual ~SimpleCacheLoader() {} 354 virtual ~SimpleCacheLoader() {}
374 355
375 std::string HexedHash(const std::string& value) { 356 static std::string HexedHash(const std::string& value) {
376 std::string value_hash = base::SHA1HashString(value); 357 std::string value_hash = base::SHA1HashString(value);
377 std::string valued_hexed_hash = base::StringToLowerASCII( 358 std::string valued_hexed_hash = base::StringToLowerASCII(
378 base::HexEncode(value_hash.c_str(), value_hash.length())); 359 base::HexEncode(value_hash.c_str(), value_hash.length()));
379 return valued_hexed_hash; 360 return valued_hexed_hash;
380 } 361 }
381 362
382 base::FilePath CreatePersistentCachePath(const base::FilePath& origin_path, 363 static base::FilePath CreatePersistentCachePath(
383 const std::string& cache_name) { 364 const base::FilePath& origin_path,
365 const std::string& cache_name) {
384 return origin_path.AppendASCII(HexedHash(cache_name)); 366 return origin_path.AppendASCII(HexedHash(cache_name));
385 } 367 }
386 368
387 const base::FilePath origin_path_; 369 const base::FilePath origin_path_;
370
371 base::WeakPtrFactory<SimpleCacheLoader> weak_ptr_factory_;
388 }; 372 };
389 373
390 ServiceWorkerCacheStorage::ServiceWorkerCacheStorage( 374 ServiceWorkerCacheStorage::ServiceWorkerCacheStorage(
391 const base::FilePath& path, 375 const base::FilePath& path,
392 bool memory_only, 376 bool memory_only,
393 base::SequencedTaskRunner* cache_task_runner, 377 base::SequencedTaskRunner* cache_task_runner,
394 net::URLRequestContext* request_context, 378 net::URLRequestContext* request_context,
395 base::WeakPtr<storage::BlobStorageContext> blob_context) 379 base::WeakPtr<storage::BlobStorageContext> blob_context)
396 : initialized_(false), 380 : initialized_(false),
397 next_cache_id_(0), 381 next_cache_id_(0),
398 origin_path_(path), 382 origin_path_(path),
399 cache_task_runner_(cache_task_runner), 383 cache_task_runner_(cache_task_runner),
400 weak_factory_(this) { 384 weak_factory_(this) {
401 if (memory_only) 385 if (memory_only)
402 cache_loader_ = new MemoryLoader( 386 cache_loader_.reset(new MemoryLoader(
403 cache_task_runner_.get(), request_context, blob_context); 387 cache_task_runner_.get(), request_context, blob_context));
404 else 388 else
405 cache_loader_ = new SimpleCacheLoader( 389 cache_loader_.reset(new SimpleCacheLoader(
406 origin_path_, cache_task_runner_.get(), request_context, blob_context); 390 origin_path_, cache_task_runner_.get(), request_context, blob_context));
407 } 391 }
408 392
409 ServiceWorkerCacheStorage::~ServiceWorkerCacheStorage() { 393 ServiceWorkerCacheStorage::~ServiceWorkerCacheStorage() {
410 STLDeleteContainerPairSecondPointers(cache_map_.begin(), cache_map_.end()); 394 STLDeleteContainerPairSecondPointers(cache_map_.begin(), cache_map_.end());
411 } 395 }
412 396
413 void ServiceWorkerCacheStorage::CreateCache( 397 void ServiceWorkerCacheStorage::CreateCache(
414 const std::string& cache_name, 398 const std::string& cache_name,
415 const CacheAndErrorCallback& callback) { 399 const CacheAndErrorCallback& callback) {
416 if (!initialized_) { 400 if (!initialized_) {
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 NameMap::const_iterator name_iter = name_map_.find(cache_name); 724 NameMap::const_iterator name_iter = name_map_.find(cache_name);
741 if (name_iter == name_map_.end()) 725 if (name_iter == name_map_.end())
742 return NULL; 726 return NULL;
743 727
744 CacheMap::const_iterator map_iter = cache_map_.find(name_iter->second); 728 CacheMap::const_iterator map_iter = cache_map_.find(name_iter->second);
745 DCHECK(map_iter != cache_map_.end()); 729 DCHECK(map_iter != cache_map_.end());
746 return map_iter->second; 730 return map_iter->second;
747 } 731 }
748 732
749 } // namespace content 733 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/service_worker/service_worker_cache_storage.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698