OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/appcache/appcache_update_job.h" | 5 #include "content/browser/appcache/appcache_update_job.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
(...skipping 594 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
605 if (update_type_ == UPGRADE_ATTEMPT) | 605 if (update_type_ == UPGRADE_ATTEMPT) |
606 CheckIfManifestChanged(); // continues asynchronously | 606 CheckIfManifestChanged(); // continues asynchronously |
607 else | 607 else |
608 ContinueHandleManifestFetchCompleted(true); | 608 ContinueHandleManifestFetchCompleted(true); |
609 } else if (response_code == 304 && update_type_ == UPGRADE_ATTEMPT) { | 609 } else if (response_code == 304 && update_type_ == UPGRADE_ATTEMPT) { |
610 ContinueHandleManifestFetchCompleted(false); | 610 ContinueHandleManifestFetchCompleted(false); |
611 } else if ((response_code == 404 || response_code == 410) && | 611 } else if ((response_code == 404 || response_code == 410) && |
612 update_type_ == UPGRADE_ATTEMPT) { | 612 update_type_ == UPGRADE_ATTEMPT) { |
613 storage_->MakeGroupObsolete(group_, this, response_code); // async | 613 storage_->MakeGroupObsolete(group_, this, response_code); // async |
614 } else { | 614 } else { |
615 const char* kFormatString = "Manifest fetch failed (%d) %s"; | 615 const char kFormatString[] = "Manifest fetch failed (%d) %s"; |
616 std::string message = FormatUrlErrorMessage( | 616 std::string message = FormatUrlErrorMessage( |
617 kFormatString, manifest_url_, fetcher->result(), response_code); | 617 kFormatString, manifest_url_, fetcher->result(), response_code); |
618 HandleCacheFailure(AppCacheErrorDetails(message, | 618 HandleCacheFailure(AppCacheErrorDetails(message, |
619 APPCACHE_MANIFEST_ERROR, | 619 APPCACHE_MANIFEST_ERROR, |
620 manifest_url_, | 620 manifest_url_, |
621 response_code, | 621 response_code, |
622 false /*is_cross_origin*/), | 622 false /*is_cross_origin*/), |
623 fetcher->result(), | 623 fetcher->result(), |
624 GURL()); | 624 GURL()); |
625 } | 625 } |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
665 return; | 665 return; |
666 } | 666 } |
667 | 667 |
668 AppCacheManifest manifest; | 668 AppCacheManifest manifest; |
669 if (!ParseManifest(manifest_url_, manifest_data_.data(), | 669 if (!ParseManifest(manifest_url_, manifest_data_.data(), |
670 manifest_data_.length(), | 670 manifest_data_.length(), |
671 manifest_has_valid_mime_type_ ? | 671 manifest_has_valid_mime_type_ ? |
672 PARSE_MANIFEST_ALLOWING_INTERCEPTS : | 672 PARSE_MANIFEST_ALLOWING_INTERCEPTS : |
673 PARSE_MANIFEST_PER_STANDARD, | 673 PARSE_MANIFEST_PER_STANDARD, |
674 manifest)) { | 674 manifest)) { |
675 const char* kFormatString = "Failed to parse manifest %s"; | 675 const char kFormatString[] = "Failed to parse manifest %s"; |
676 const std::string message = base::StringPrintf(kFormatString, | 676 const std::string message = base::StringPrintf(kFormatString, |
677 manifest_url_.spec().c_str()); | 677 manifest_url_.spec().c_str()); |
678 HandleCacheFailure( | 678 HandleCacheFailure( |
679 AppCacheErrorDetails( | 679 AppCacheErrorDetails( |
680 message, APPCACHE_SIGNATURE_ERROR, GURL(), 0, | 680 message, APPCACHE_SIGNATURE_ERROR, GURL(), 0, |
681 false /*is_cross_origin*/), | 681 false /*is_cross_origin*/), |
682 MANIFEST_ERROR, | 682 MANIFEST_ERROR, |
683 GURL()); | 683 GURL()); |
684 VLOG(1) << message; | 684 VLOG(1) << message; |
685 return; | 685 return; |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
754 VLOG(1) << "Request status: " << request->status().status() | 754 VLOG(1) << "Request status: " << request->status().status() |
755 << " error: " << request->status().error() | 755 << " error: " << request->status().error() |
756 << " response code: " << response_code; | 756 << " response code: " << response_code; |
757 if (entry.IsExplicit() || entry.IsFallback() || entry.IsIntercept()) { | 757 if (entry.IsExplicit() || entry.IsFallback() || entry.IsIntercept()) { |
758 if (response_code == 304 && fetcher->existing_entry().has_response_id()) { | 758 if (response_code == 304 && fetcher->existing_entry().has_response_id()) { |
759 // Keep the existing response. | 759 // Keep the existing response. |
760 entry.set_response_id(fetcher->existing_entry().response_id()); | 760 entry.set_response_id(fetcher->existing_entry().response_id()); |
761 entry.set_response_size(fetcher->existing_entry().response_size()); | 761 entry.set_response_size(fetcher->existing_entry().response_size()); |
762 inprogress_cache_->AddOrModifyEntry(url, entry); | 762 inprogress_cache_->AddOrModifyEntry(url, entry); |
763 } else { | 763 } else { |
764 const char* kFormatString = "Resource fetch failed (%d) %s"; | 764 const char kFormatString[] = "Resource fetch failed (%d) %s"; |
765 std::string message = FormatUrlErrorMessage( | 765 std::string message = FormatUrlErrorMessage( |
766 kFormatString, url, fetcher->result(), response_code); | 766 kFormatString, url, fetcher->result(), response_code); |
767 ResultType result = fetcher->result(); | 767 ResultType result = fetcher->result(); |
768 bool is_cross_origin = url.GetOrigin() != manifest_url_.GetOrigin(); | 768 bool is_cross_origin = url.GetOrigin() != manifest_url_.GetOrigin(); |
769 switch (result) { | 769 switch (result) { |
770 case DISKCACHE_ERROR: | 770 case DISKCACHE_ERROR: |
771 HandleCacheFailure( | 771 HandleCacheFailure( |
772 AppCacheErrorDetails( | 772 AppCacheErrorDetails( |
773 message, APPCACHE_UNKNOWN_ERROR, GURL(), 0, | 773 message, APPCACHE_UNKNOWN_ERROR, GURL(), 0, |
774 is_cross_origin), | 774 is_cross_origin), |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
868 // In downloading case, disassociate host from inprogress cache. | 868 // In downloading case, disassociate host from inprogress cache. |
869 if (inprogress_cache_.get()) | 869 if (inprogress_cache_.get()) |
870 host->AssociateNoCache(GURL()); | 870 host->AssociateNoCache(GURL()); |
871 | 871 |
872 host->RemoveObserver(this); | 872 host->RemoveObserver(this); |
873 } | 873 } |
874 hosts.clear(); | 874 hosts.clear(); |
875 | 875 |
876 failed_master_entries_.insert(url); | 876 failed_master_entries_.insert(url); |
877 | 877 |
878 const char* kFormatString = "Manifest fetch failed (%d) %s"; | 878 const char kFormatString[] = "Manifest fetch failed (%d) %s"; |
879 std::string message = FormatUrlErrorMessage( | 879 std::string message = FormatUrlErrorMessage( |
880 kFormatString, request->url(), fetcher->result(), response_code); | 880 kFormatString, request->url(), fetcher->result(), response_code); |
881 host_notifier.SendErrorNotifications( | 881 host_notifier.SendErrorNotifications( |
882 AppCacheErrorDetails(message, | 882 AppCacheErrorDetails(message, |
883 APPCACHE_MANIFEST_ERROR, | 883 APPCACHE_MANIFEST_ERROR, |
884 request->url(), | 884 request->url(), |
885 response_code, | 885 response_code, |
886 false /*is_cross_origin*/)); | 886 false /*is_cross_origin*/)); |
887 | 887 |
888 // In downloading case, update result is different if all master entries | 888 // In downloading case, update result is different if all master entries |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
943 ScheduleUpdateRetry(kRerunDelayMs); | 943 ScheduleUpdateRetry(kRerunDelayMs); |
944 if (response_code == 200) { | 944 if (response_code == 200) { |
945 HandleCacheFailure(AppCacheErrorDetails("Manifest changed during update", | 945 HandleCacheFailure(AppCacheErrorDetails("Manifest changed during update", |
946 APPCACHE_CHANGED_ERROR, | 946 APPCACHE_CHANGED_ERROR, |
947 GURL(), | 947 GURL(), |
948 0, | 948 0, |
949 false /*is_cross_origin*/), | 949 false /*is_cross_origin*/), |
950 MANIFEST_ERROR, | 950 MANIFEST_ERROR, |
951 GURL()); | 951 GURL()); |
952 } else { | 952 } else { |
953 const char* kFormatString = "Manifest re-fetch failed (%d) %s"; | 953 const char kFormatString[] = "Manifest re-fetch failed (%d) %s"; |
954 std::string message = FormatUrlErrorMessage( | 954 std::string message = FormatUrlErrorMessage( |
955 kFormatString, manifest_url_, fetcher->result(), response_code); | 955 kFormatString, manifest_url_, fetcher->result(), response_code); |
956 HandleCacheFailure(AppCacheErrorDetails(message, | 956 HandleCacheFailure(AppCacheErrorDetails(message, |
957 APPCACHE_MANIFEST_ERROR, | 957 APPCACHE_MANIFEST_ERROR, |
958 GURL(), | 958 GURL(), |
959 response_code, | 959 response_code, |
960 false /*is_cross_origin*/), | 960 false /*is_cross_origin*/), |
961 fetcher->result(), | 961 fetcher->result(), |
962 GURL()); | 962 GURL()); |
963 } | 963 } |
(...skipping 747 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1711 // on this object after we've posted a task to delete ourselves. | 1711 // on this object after we've posted a task to delete ourselves. |
1712 if (group_) { | 1712 if (group_) { |
1713 group_->SetUpdateAppCacheStatus(AppCacheGroup::IDLE); | 1713 group_->SetUpdateAppCacheStatus(AppCacheGroup::IDLE); |
1714 group_ = NULL; | 1714 group_ = NULL; |
1715 } | 1715 } |
1716 | 1716 |
1717 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); | 1717 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); |
1718 } | 1718 } |
1719 | 1719 |
1720 } // namespace content | 1720 } // namespace content |
OLD | NEW |