| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "services/url_response_disk_cache/url_response_disk_cache_impl.h" | 5 #include "services/url_response_disk_cache/url_response_disk_cache_impl.h" |
| 6 | 6 |
| 7 #include <dirent.h> | 7 #include <dirent.h> |
| 8 #include <fcntl.h> | 8 #include <fcntl.h> |
| 9 #include <sys/types.h> | 9 #include <sys/types.h> |
| 10 | 10 |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 for (size_t i = 0u; i < headers.size(); ++i) { | 230 for (size_t i = 0u; i < headers.size(); ++i) { |
| 231 const std::string& name = headers[i]->name.get(); | 231 const std::string& name = headers[i]->name.get(); |
| 232 if (base::LowerCaseEqualsASCII(name, header_name.c_str())) | 232 if (base::LowerCaseEqualsASCII(name, header_name.c_str())) |
| 233 result.push_back(headers[i]->value); | 233 result.push_back(headers[i]->value); |
| 234 } | 234 } |
| 235 return result; | 235 return result; |
| 236 } | 236 } |
| 237 | 237 |
| 238 // Returns whether the given |entry| is valid. | 238 // Returns whether the given |entry| is valid. |
| 239 bool IsCacheEntryValid(const CacheEntryPtr& entry) { | 239 bool IsCacheEntryValid(const CacheEntryPtr& entry) { |
| 240 return entry && PathExists(base::FilePath(entry->response_body_path)); | 240 return entry && |
| 241 PathExists(base::FilePath::FromUTF8Unsafe(entry->response_body_path)); |
| 241 } | 242 } |
| 242 | 243 |
| 243 // Returns whether the given directory |entry| is valid and its content can be | 244 // Returns whether the given directory |entry| is valid and its content can be |
| 244 // used for the given |response|. | 245 // used for the given |response|. |
| 245 bool IsCacheEntryFresh(const URLResponsePtr& response, | 246 bool IsCacheEntryFresh(const URLResponsePtr& response, |
| 246 const CacheEntryPtr& entry) { | 247 const CacheEntryPtr& entry) { |
| 247 DCHECK(response); | 248 DCHECK(response); |
| 248 if (!IsCacheEntryValid(entry)) | 249 if (!IsCacheEntryValid(entry)) |
| 249 return false; | 250 return false; |
| 250 | 251 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 278 | 279 |
| 279 void PruneCache(scoped_refptr<URLResponseDiskCacheDB> db, | 280 void PruneCache(scoped_refptr<URLResponseDiskCacheDB> db, |
| 280 const scoped_ptr<URLResponseDiskCacheDB::Iterator>& iterator) { | 281 const scoped_ptr<URLResponseDiskCacheDB::Iterator>& iterator) { |
| 281 CacheKeyPtr last_key; | 282 CacheKeyPtr last_key; |
| 282 CacheKeyPtr key; | 283 CacheKeyPtr key; |
| 283 CacheEntryPtr entry; | 284 CacheEntryPtr entry; |
| 284 while (iterator->HasNext()) { | 285 while (iterator->HasNext()) { |
| 285 iterator->GetNext(&key, &entry); | 286 iterator->GetNext(&key, &entry); |
| 286 if (last_key && last_key->request_origin == key->request_origin && | 287 if (last_key && last_key->request_origin == key->request_origin && |
| 287 last_key->url == key->url) { | 288 last_key->url == key->url) { |
| 288 base::FilePath entry_directory = base::FilePath(entry->entry_directory); | 289 base::FilePath entry_directory = |
| 290 base::FilePath::FromUTF8Unsafe(entry->entry_directory); |
| 289 if (base::DeleteFile(entry_directory, true)) | 291 if (base::DeleteFile(entry_directory, true)) |
| 290 db->Delete(key.Clone()); | 292 db->Delete(key.Clone()); |
| 291 } | 293 } |
| 292 last_key = key.Pass(); | 294 last_key = key.Pass(); |
| 293 } | 295 } |
| 294 } | 296 } |
| 295 | 297 |
| 296 } // namespace | 298 } // namespace |
| 297 | 299 |
| 298 // static | 300 // static |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 383 base::Bind(&RunMojoCallbackWithResponse, callback, canonilized_url), | 385 base::Bind(&RunMojoCallbackWithResponse, callback, canonilized_url), |
| 384 identifier, request_origin_, canonilized_url, | 386 identifier, request_origin_, canonilized_url, |
| 385 base::Passed(GetMinimalResponse(canonilized_url)), db_, | 387 base::Passed(GetMinimalResponse(canonilized_url)), db_, |
| 386 task_runner_)); | 388 task_runner_)); |
| 387 return; | 389 return; |
| 388 } | 390 } |
| 389 if (IsInvalidated(entry) || !IsCacheEntryValid(entry)) { | 391 if (IsInvalidated(entry) || !IsCacheEntryValid(entry)) { |
| 390 callback.Run(URLResponsePtr(), nullptr, nullptr); | 392 callback.Run(URLResponsePtr(), nullptr, nullptr); |
| 391 return; | 393 return; |
| 392 } | 394 } |
| 393 callback.Run(entry->response.Pass(), | 395 callback.Run( |
| 394 PathToArray(base::FilePath(entry->response_body_path)), | 396 entry->response.Pass(), |
| 395 PathToArray(GetConsumerCacheDirectory( | 397 PathToArray(base::FilePath::FromUTF8Unsafe(entry->response_body_path)), |
| 396 base::FilePath(entry->entry_directory)))); | 398 PathToArray(GetConsumerCacheDirectory( |
| 399 base::FilePath::FromUTF8Unsafe(entry->entry_directory)))); |
| 397 UpdateLastInvalidation(db_, key.Pass(), base::Time::Now()); | 400 UpdateLastInvalidation(db_, key.Pass(), base::Time::Now()); |
| 398 } | 401 } |
| 399 | 402 |
| 400 void URLResponseDiskCacheImpl::Validate(const String& url) { | 403 void URLResponseDiskCacheImpl::Validate(const String& url) { |
| 401 CacheKeyPtr key; | 404 CacheKeyPtr key; |
| 402 CacheEntryPtr entry = | 405 CacheEntryPtr entry = |
| 403 db_->GetNewest(request_origin_, CanonicalizeURL(url), &key); | 406 db_->GetNewest(request_origin_, CanonicalizeURL(url), &key); |
| 404 if (entry) | 407 if (entry) |
| 405 UpdateLastInvalidation(db_, key.Pass(), base::Time::Max()); | 408 UpdateLastInvalidation(db_, key.Pass(), base::Time::Max()); |
| 406 } | 409 } |
| (...skipping 27 matching lines...) Expand all Loading... |
| 434 return; | 437 return; |
| 435 } | 438 } |
| 436 | 439 |
| 437 std::string url = CanonicalizeURL(response->url); | 440 std::string url = CanonicalizeURL(response->url); |
| 438 | 441 |
| 439 // Check if the response is cached and valid. If that's the case, returns | 442 // Check if the response is cached and valid. If that's the case, returns |
| 440 // the cached value. | 443 // the cached value. |
| 441 CacheKeyPtr key; | 444 CacheKeyPtr key; |
| 442 CacheEntryPtr entry = db_->GetNewest(request_origin_, url, &key); | 445 CacheEntryPtr entry = db_->GetNewest(request_origin_, url, &key); |
| 443 if (IsCacheEntryFresh(response, entry)) { | 446 if (IsCacheEntryFresh(response, entry)) { |
| 444 callback.Run( | 447 callback.Run(base::FilePath::FromUTF8Unsafe(entry->response_body_path), |
| 445 base::FilePath(entry->response_body_path), | 448 GetConsumerCacheDirectory( |
| 446 GetConsumerCacheDirectory(base::FilePath(entry->entry_directory))); | 449 base::FilePath::FromUTF8Unsafe(entry->entry_directory))); |
| 447 UpdateLastInvalidation(db_, key.Pass(), base::Time::Max()); | 450 UpdateLastInvalidation(db_, key.Pass(), base::Time::Max()); |
| 448 return; | 451 return; |
| 449 } | 452 } |
| 450 | 453 |
| 451 if (!response->body.is_valid()) { | 454 if (!response->body.is_valid()) { |
| 452 callback.Run(base::FilePath(), base::FilePath()); | 455 callback.Run(base::FilePath(), base::FilePath()); |
| 453 return; | 456 return; |
| 454 } | 457 } |
| 455 | 458 |
| 456 std::string identifier = GetNewIdentifier(); | 459 std::string identifier = GetNewIdentifier(); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 515 return; | 518 return; |
| 516 } | 519 } |
| 517 } | 520 } |
| 518 // We can ignore write error, as it will just force to clear the cache on the | 521 // We can ignore write error, as it will just force to clear the cache on the |
| 519 // next request. | 522 // next request. |
| 520 WriteFile(GetExtractionSentinel(entry_directory), nullptr, 0); | 523 WriteFile(GetExtractionSentinel(entry_directory), nullptr, 0); |
| 521 callback.Run(extraction_directory, consumer_cache_directory); | 524 callback.Run(extraction_directory, consumer_cache_directory); |
| 522 } | 525 } |
| 523 | 526 |
| 524 } // namespace mojo | 527 } // namespace mojo |
| OLD | NEW |