| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "webkit/appcache/appcache_update_job.h" | 5 #include "webkit/appcache/appcache_update_job.h" |
| 6 | 6 |
| 7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
| 8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
| 9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
| 10 #include "base/stringprintf.h" | 10 #include "base/stringprintf.h" |
| (...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 431 | 431 |
| 432 | 432 |
| 433 void AppCacheUpdateJob::HandleManifestFetchCompleted( | 433 void AppCacheUpdateJob::HandleManifestFetchCompleted( |
| 434 URLFetcher* fetcher) { | 434 URLFetcher* fetcher) { |
| 435 DCHECK_EQ(internal_state_, FETCH_MANIFEST); | 435 DCHECK_EQ(internal_state_, FETCH_MANIFEST); |
| 436 DCHECK_EQ(manifest_fetcher_, fetcher); | 436 DCHECK_EQ(manifest_fetcher_, fetcher); |
| 437 manifest_fetcher_ = NULL; | 437 manifest_fetcher_ = NULL; |
| 438 | 438 |
| 439 net::URLRequest* request = fetcher->request(); | 439 net::URLRequest* request = fetcher->request(); |
| 440 int response_code = -1; | 440 int response_code = -1; |
| 441 std::string mime_type; | |
| 442 bool is_valid_response_code = false; | 441 bool is_valid_response_code = false; |
| 443 bool is_valid_mime_type = false; | |
| 444 if (request->status().is_success()) { | 442 if (request->status().is_success()) { |
| 445 response_code = request->GetResponseCode(); | 443 response_code = request->GetResponseCode(); |
| 446 is_valid_response_code = (response_code / 100 == 2); | 444 is_valid_response_code = (response_code / 100 == 2); |
| 447 request->GetMimeType(&mime_type); | |
| 448 is_valid_mime_type = (mime_type == kManifestMimeType); | |
| 449 } | 445 } |
| 450 | 446 |
| 451 if (is_valid_response_code && is_valid_mime_type) { | 447 if (is_valid_response_code) { |
| 452 manifest_data_ = fetcher->manifest_data(); | 448 manifest_data_ = fetcher->manifest_data(); |
| 453 manifest_response_info_.reset( | 449 manifest_response_info_.reset( |
| 454 new net::HttpResponseInfo(request->response_info())); | 450 new net::HttpResponseInfo(request->response_info())); |
| 455 if (update_type_ == UPGRADE_ATTEMPT) | 451 if (update_type_ == UPGRADE_ATTEMPT) |
| 456 CheckIfManifestChanged(); // continues asynchronously | 452 CheckIfManifestChanged(); // continues asynchronously |
| 457 else | 453 else |
| 458 ContinueHandleManifestFetchCompleted(true); | 454 ContinueHandleManifestFetchCompleted(true); |
| 459 } else if (response_code == 304 && update_type_ == UPGRADE_ATTEMPT) { | 455 } else if (response_code == 304 && update_type_ == UPGRADE_ATTEMPT) { |
| 460 ContinueHandleManifestFetchCompleted(false); | 456 ContinueHandleManifestFetchCompleted(false); |
| 461 } else if ((response_code == 404 || response_code == 410) && | 457 } else if ((response_code == 404 || response_code == 410) && |
| 462 update_type_ == UPGRADE_ATTEMPT) { | 458 update_type_ == UPGRADE_ATTEMPT) { |
| 463 service_->storage()->MakeGroupObsolete(group_, this); // async | 459 service_->storage()->MakeGroupObsolete(group_, this); // async |
| 464 } else { | 460 } else { |
| 465 std::string message; | 461 const char* kFormatString = "Manifest fetch failed (%d) %s"; |
| 466 if (!is_valid_response_code) { | 462 std::string message = base::StringPrintf(kFormatString, response_code, |
| 467 const char* kFormatString = "Manifest fetch failed (%d) %s"; | 463 manifest_url_.spec().c_str()); |
| 468 message = base::StringPrintf(kFormatString, response_code, | |
| 469 manifest_url_.spec().c_str()); | |
| 470 } else { | |
| 471 DCHECK(!is_valid_mime_type); | |
| 472 const char* kFormatString = "Invalid manifest mime type (%s) %s"; | |
| 473 message = base::StringPrintf(kFormatString, mime_type.c_str(), | |
| 474 manifest_url_.spec().c_str()); | |
| 475 } | |
| 476 HandleCacheFailure(message); | 464 HandleCacheFailure(message); |
| 477 } | 465 } |
| 478 } | 466 } |
| 479 | 467 |
| 480 void AppCacheUpdateJob::OnGroupMadeObsolete(AppCacheGroup* group, | 468 void AppCacheUpdateJob::OnGroupMadeObsolete(AppCacheGroup* group, |
| 481 bool success) { | 469 bool success) { |
| 482 DCHECK(master_entry_fetches_.empty()); | 470 DCHECK(master_entry_fetches_.empty()); |
| 483 CancelAllMasterEntryFetches("The cache has been made obsolete, " | 471 CancelAllMasterEntryFetches("The cache has been made obsolete, " |
| 484 "the manifest file returned 404 or 410"); | 472 "the manifest file returned 404 or 410"); |
| 485 if (success) { | 473 if (success) { |
| (...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 874 } | 862 } |
| 875 } | 863 } |
| 876 | 864 |
| 877 void AppCacheUpdateJob::BuildUrlFileList(const Manifest& manifest) { | 865 void AppCacheUpdateJob::BuildUrlFileList(const Manifest& manifest) { |
| 878 for (base::hash_set<std::string>::const_iterator it = | 866 for (base::hash_set<std::string>::const_iterator it = |
| 879 manifest.explicit_urls.begin(); | 867 manifest.explicit_urls.begin(); |
| 880 it != manifest.explicit_urls.end(); ++it) { | 868 it != manifest.explicit_urls.end(); ++it) { |
| 881 AddUrlToFileList(GURL(*it), AppCacheEntry::EXPLICIT); | 869 AddUrlToFileList(GURL(*it), AppCacheEntry::EXPLICIT); |
| 882 } | 870 } |
| 883 | 871 |
| 872 // TODO(michaeln): Add resources from intercept namepsaces too. |
| 873 // http://code.google.com/p/chromium/issues/detail?id=101565 |
| 874 |
| 884 const std::vector<FallbackNamespace>& fallbacks = | 875 const std::vector<FallbackNamespace>& fallbacks = |
| 885 manifest.fallback_namespaces; | 876 manifest.fallback_namespaces; |
| 886 for (std::vector<FallbackNamespace>::const_iterator it = fallbacks.begin(); | 877 for (std::vector<FallbackNamespace>::const_iterator it = fallbacks.begin(); |
| 887 it != fallbacks.end(); ++it) { | 878 it != fallbacks.end(); ++it) { |
| 888 AddUrlToFileList(it->second, AppCacheEntry::FALLBACK); | 879 AddUrlToFileList(it->second, AppCacheEntry::FALLBACK); |
| 889 } | 880 } |
| 890 | 881 |
| 891 // Add all master entries from newest complete cache. | 882 // Add all master entries from newest complete cache. |
| 892 if (update_type_ == UPGRADE_ATTEMPT) { | 883 if (update_type_ == UPGRADE_ATTEMPT) { |
| 893 const AppCache::EntryMap& entries = | 884 const AppCache::EntryMap& entries = |
| (...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1325 | 1316 |
| 1326 // Break the connection with the group so the group cannot call delete | 1317 // Break the connection with the group so the group cannot call delete |
| 1327 // on this object after we've posted a task to delete ourselves. | 1318 // on this object after we've posted a task to delete ourselves. |
| 1328 group_->SetUpdateStatus(AppCacheGroup::IDLE); | 1319 group_->SetUpdateStatus(AppCacheGroup::IDLE); |
| 1329 group_ = NULL; | 1320 group_ = NULL; |
| 1330 | 1321 |
| 1331 MessageLoop::current()->DeleteSoon(FROM_HERE, this); | 1322 MessageLoop::current()->DeleteSoon(FROM_HERE, this); |
| 1332 } | 1323 } |
| 1333 | 1324 |
| 1334 } // namespace appcache | 1325 } // namespace appcache |
| OLD | NEW |