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

Side by Side Diff: chrome/browser/extensions/updater/extension_updater_unittest.cc

Issue 532183003: Revert of Enable forced extension updates on NaCl arch mismatch (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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
OLDNEW
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 <list> 5 #include <list>
6 #include <map> 6 #include <map>
7 #include <set> 7 #include <set>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 } 696 }
697 697
698 void TestUpdateUrlDataEmpty() { 698 void TestUpdateUrlDataEmpty() {
699 const std::string id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 699 const std::string id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
700 const std::string version = "1.0"; 700 const std::string version = "1.0";
701 701
702 // Make sure that an empty update URL data string does not cause a ap= 702 // Make sure that an empty update URL data string does not cause a ap=
703 // option to appear in the x= parameter. 703 // option to appear in the x= parameter.
704 ManifestFetchData fetch_data(GURL("http://localhost/foo"), 0); 704 ManifestFetchData fetch_data(GURL("http://localhost/foo"), 0);
705 fetch_data.AddExtension( 705 fetch_data.AddExtension(
706 id, version, &kNeverPingedData, std::string(), std::string(), false); 706 id, version, &kNeverPingedData, std::string(), std::string());
707 707
708 std::map<std::string, std::string> params; 708 std::map<std::string, std::string> params;
709 VerifyQueryAndExtractParameters(fetch_data.full_url().query(), &params); 709 VerifyQueryAndExtractParameters(fetch_data.full_url().query(), &params);
710 EXPECT_EQ(id, params["id"]); 710 EXPECT_EQ(id, params["id"]);
711 EXPECT_EQ(version, params["v"]); 711 EXPECT_EQ(version, params["v"]);
712 EXPECT_EQ(0U, params.count("ap")); 712 EXPECT_EQ(0U, params.count("ap"));
713 } 713 }
714 714
715 void TestUpdateUrlDataSimple() { 715 void TestUpdateUrlDataSimple() {
716 const std::string id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 716 const std::string id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
717 const std::string version = "1.0"; 717 const std::string version = "1.0";
718 718
719 // Make sure that an update URL data string causes an appropriate ap= 719 // Make sure that an update URL data string causes an appropriate ap=
720 // option to appear in the x= parameter. 720 // option to appear in the x= parameter.
721 ManifestFetchData fetch_data(GURL("http://localhost/foo"), 0); 721 ManifestFetchData fetch_data(GURL("http://localhost/foo"), 0);
722 fetch_data.AddExtension( 722 fetch_data.AddExtension(
723 id, version, &kNeverPingedData, "bar", std::string(), false); 723 id, version, &kNeverPingedData, "bar", std::string());
724 std::map<std::string, std::string> params; 724 std::map<std::string, std::string> params;
725 VerifyQueryAndExtractParameters(fetch_data.full_url().query(), &params); 725 VerifyQueryAndExtractParameters(fetch_data.full_url().query(), &params);
726 EXPECT_EQ(id, params["id"]); 726 EXPECT_EQ(id, params["id"]);
727 EXPECT_EQ(version, params["v"]); 727 EXPECT_EQ(version, params["v"]);
728 EXPECT_EQ("bar", params["ap"]); 728 EXPECT_EQ("bar", params["ap"]);
729 } 729 }
730 730
731 void TestUpdateUrlDataCompound() { 731 void TestUpdateUrlDataCompound() {
732 const std::string id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 732 const std::string id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
733 const std::string version = "1.0"; 733 const std::string version = "1.0";
734 734
735 // Make sure that an update URL data string causes an appropriate ap= 735 // Make sure that an update URL data string causes an appropriate ap=
736 // option to appear in the x= parameter. 736 // option to appear in the x= parameter.
737 ManifestFetchData fetch_data(GURL("http://localhost/foo"), 0); 737 ManifestFetchData fetch_data(GURL("http://localhost/foo"), 0);
738 fetch_data.AddExtension( 738 fetch_data.AddExtension(
739 id, version, &kNeverPingedData, "a=1&b=2&c", std::string(), false); 739 id, version, &kNeverPingedData, "a=1&b=2&c", std::string());
740 std::map<std::string, std::string> params; 740 std::map<std::string, std::string> params;
741 VerifyQueryAndExtractParameters(fetch_data.full_url().query(), &params); 741 VerifyQueryAndExtractParameters(fetch_data.full_url().query(), &params);
742 EXPECT_EQ(id, params["id"]); 742 EXPECT_EQ(id, params["id"]);
743 EXPECT_EQ(version, params["v"]); 743 EXPECT_EQ(version, params["v"]);
744 EXPECT_EQ("a%3D1%26b%3D2%26c", params["ap"]); 744 EXPECT_EQ("a%3D1%26b%3D2%26c", params["ap"]);
745 } 745 }
746 746
747 void TestUpdateUrlDataFromGallery(const std::string& gallery_url) { 747 void TestUpdateUrlDataFromGallery(const std::string& gallery_url) {
748 net::TestURLFetcherFactory factory; 748 net::TestURLFetcherFactory factory;
749 749
(...skipping 23 matching lines...) Expand all
773 } 773 }
774 774
775 void TestInstallSource() { 775 void TestInstallSource() {
776 const std::string id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 776 const std::string id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
777 const std::string version = "1.0"; 777 const std::string version = "1.0";
778 const std::string install_source = "instally"; 778 const std::string install_source = "instally";
779 779
780 // Make sure that an installsource= appears in the x= parameter. 780 // Make sure that an installsource= appears in the x= parameter.
781 ManifestFetchData fetch_data(GURL("http://localhost/foo"), 0); 781 ManifestFetchData fetch_data(GURL("http://localhost/foo"), 0);
782 fetch_data.AddExtension(id, version, &kNeverPingedData, 782 fetch_data.AddExtension(id, version, &kNeverPingedData,
783 kEmptyUpdateUrlData, install_source, false); 783 kEmptyUpdateUrlData, install_source);
784 std::map<std::string, std::string> params; 784 std::map<std::string, std::string> params;
785 VerifyQueryAndExtractParameters(fetch_data.full_url().query(), &params); 785 VerifyQueryAndExtractParameters(fetch_data.full_url().query(), &params);
786 EXPECT_EQ(id, params["id"]); 786 EXPECT_EQ(id, params["id"]);
787 EXPECT_EQ(version, params["v"]); 787 EXPECT_EQ(version, params["v"]);
788 EXPECT_EQ(install_source, params["installsource"]); 788 EXPECT_EQ(install_source, params["installsource"]);
789 } 789 }
790 790
791 void TestDetermineUpdates() { 791 void TestDetermineUpdates() {
792 TestingProfile profile; 792 TestingProfile profile;
793 MockExtensionDownloaderDelegate delegate; 793 MockExtensionDownloaderDelegate delegate;
794 ExtensionDownloader downloader(&delegate, profile.GetRequestContext()); 794 ExtensionDownloader downloader(&delegate, profile.GetRequestContext());
795 795
796 // Check passing an empty list of parse results to DetermineUpdates 796 // Check passing an empty list of parse results to DetermineUpdates
797 ManifestFetchData fetch_data(GURL("http://localhost/foo"), 0); 797 ManifestFetchData fetch_data(GURL("http://localhost/foo"), 0);
798 UpdateManifest::Results updates; 798 UpdateManifest::Results updates;
799 std::vector<int> updateable; 799 std::vector<int> updateable;
800 downloader.DetermineUpdates(fetch_data, updates, &updateable); 800 downloader.DetermineUpdates(fetch_data, updates, &updateable);
801 EXPECT_TRUE(updateable.empty()); 801 EXPECT_TRUE(updateable.empty());
802 802
803 // Create two updates - expect that DetermineUpdates will return the first 803 // Create two updates - expect that DetermineUpdates will return the first
804 // one (v1.0 installed, v1.1 available) but not the second one (both 804 // one (v1.0 installed, v1.1 available) but not the second one (both
805 // installed and available at v2.0). 805 // installed and available at v2.0).
806 const std::string id1 = crx_file::id_util::GenerateId("1"); 806 const std::string id1 = crx_file::id_util::GenerateId("1");
807 const std::string id2 = crx_file::id_util::GenerateId("2"); 807 const std::string id2 = crx_file::id_util::GenerateId("2");
808 fetch_data.AddExtension( 808 fetch_data.AddExtension(
809 id1, "1.0.0.0", &kNeverPingedData, kEmptyUpdateUrlData, std::string(), 809 id1, "1.0.0.0", &kNeverPingedData, kEmptyUpdateUrlData, std::string());
810 false);
811 AddParseResult(id1, "1.1", "http://localhost/e1_1.1.crx", &updates); 810 AddParseResult(id1, "1.1", "http://localhost/e1_1.1.crx", &updates);
812 fetch_data.AddExtension( 811 fetch_data.AddExtension(
813 id2, "2.0.0.0", &kNeverPingedData, kEmptyUpdateUrlData, std::string(), 812 id2, "2.0.0.0", &kNeverPingedData, kEmptyUpdateUrlData, std::string());
814 false);
815 AddParseResult(id2, "2.0.0.0", "http://localhost/e2_2.0.crx", &updates); 813 AddParseResult(id2, "2.0.0.0", "http://localhost/e2_2.0.crx", &updates);
816 814
817 EXPECT_CALL(delegate, IsExtensionPending(_)).WillRepeatedly(Return(false)); 815 EXPECT_CALL(delegate, IsExtensionPending(_)).WillRepeatedly(Return(false));
818 EXPECT_CALL(delegate, GetExtensionExistingVersion(id1, _)) 816 EXPECT_CALL(delegate, GetExtensionExistingVersion(id1, _))
819 .WillOnce(DoAll(SetArgPointee<1>("1.0.0.0"), 817 .WillOnce(DoAll(SetArgPointee<1>("1.0.0.0"),
820 Return(true))); 818 Return(true)));
821 EXPECT_CALL(delegate, GetExtensionExistingVersion(id2, _)) 819 EXPECT_CALL(delegate, GetExtensionExistingVersion(id2, _))
822 .WillOnce(DoAll(SetArgPointee<1>("2.0.0.0"), 820 .WillOnce(DoAll(SetArgPointee<1>("2.0.0.0"),
823 Return(true))); 821 Return(true)));
824 822
(...skipping 20 matching lines...) Expand all
845 pending_extension_manager->GetPendingIdsForUpdateCheck( 843 pending_extension_manager->GetPendingIdsForUpdateCheck(
846 &ids_for_update_check); 844 &ids_for_update_check);
847 845
848 std::list<std::string>::const_iterator it; 846 std::list<std::string>::const_iterator it;
849 for (it = ids_for_update_check.begin(); 847 for (it = ids_for_update_check.begin();
850 it != ids_for_update_check.end(); ++it) { 848 it != ids_for_update_check.end(); ++it) {
851 fetch_data.AddExtension(*it, 849 fetch_data.AddExtension(*it,
852 "1.0.0.0", 850 "1.0.0.0",
853 &kNeverPingedData, 851 &kNeverPingedData,
854 kEmptyUpdateUrlData, 852 kEmptyUpdateUrlData,
855 std::string(), 853 std::string());
856 false);
857 AddParseResult(*it, "1.1", "http://localhost/e1_1.1.crx", &updates); 854 AddParseResult(*it, "1.1", "http://localhost/e1_1.1.crx", &updates);
858 } 855 }
859 856
860 // The delegate will tell the downloader that all the extensions are 857 // The delegate will tell the downloader that all the extensions are
861 // pending. 858 // pending.
862 EXPECT_CALL(delegate, IsExtensionPending(_)).WillRepeatedly(Return(true)); 859 EXPECT_CALL(delegate, IsExtensionPending(_)).WillRepeatedly(Return(true));
863 860
864 std::vector<int> updateable; 861 std::vector<int> updateable;
865 downloader.DetermineUpdates(fetch_data, updates, &updateable); 862 downloader.DetermineUpdates(fetch_data, updates, &updateable);
866 // All the apps should be updateable. 863 // All the apps should be updateable.
(...skipping 13 matching lines...) Expand all
880 downloader.manifests_queue_.set_backoff_policy(&kNoBackoffPolicy); 877 downloader.manifests_queue_.set_backoff_policy(&kNoBackoffPolicy);
881 878
882 GURL kUpdateUrl("http://localhost/manifest1"); 879 GURL kUpdateUrl("http://localhost/manifest1");
883 880
884 scoped_ptr<ManifestFetchData> fetch1(new ManifestFetchData(kUpdateUrl, 0)); 881 scoped_ptr<ManifestFetchData> fetch1(new ManifestFetchData(kUpdateUrl, 0));
885 scoped_ptr<ManifestFetchData> fetch2(new ManifestFetchData(kUpdateUrl, 0)); 882 scoped_ptr<ManifestFetchData> fetch2(new ManifestFetchData(kUpdateUrl, 0));
886 scoped_ptr<ManifestFetchData> fetch3(new ManifestFetchData(kUpdateUrl, 0)); 883 scoped_ptr<ManifestFetchData> fetch3(new ManifestFetchData(kUpdateUrl, 0));
887 scoped_ptr<ManifestFetchData> fetch4(new ManifestFetchData(kUpdateUrl, 0)); 884 scoped_ptr<ManifestFetchData> fetch4(new ManifestFetchData(kUpdateUrl, 0));
888 ManifestFetchData::PingData zeroDays(0, 0, true); 885 ManifestFetchData::PingData zeroDays(0, 0, true);
889 fetch1->AddExtension( 886 fetch1->AddExtension(
890 "1111", "1.0", &zeroDays, kEmptyUpdateUrlData, std::string(), false); 887 "1111", "1.0", &zeroDays, kEmptyUpdateUrlData, std::string());
891 fetch2->AddExtension( 888 fetch2->AddExtension(
892 "2222", "2.0", &zeroDays, kEmptyUpdateUrlData, std::string(), false); 889 "2222", "2.0", &zeroDays, kEmptyUpdateUrlData, std::string());
893 fetch3->AddExtension( 890 fetch3->AddExtension(
894 "3333", "3.0", &zeroDays, kEmptyUpdateUrlData, std::string(), false); 891 "3333", "3.0", &zeroDays, kEmptyUpdateUrlData, std::string());
895 fetch4->AddExtension( 892 fetch4->AddExtension(
896 "4444", "4.0", &zeroDays, kEmptyUpdateUrlData, std::string(), false); 893 "4444", "4.0", &zeroDays, kEmptyUpdateUrlData, std::string());
897 894
898 // This will start the first fetcher and queue the others. The next in queue 895 // This will start the first fetcher and queue the others. The next in queue
899 // is started as each fetcher receives its response. Note that the fetchers 896 // is started as each fetcher receives its response. Note that the fetchers
900 // don't necessarily run in the order that they are started from here. 897 // don't necessarily run in the order that they are started from here.
901 GURL fetch1_url = fetch1->full_url(); 898 GURL fetch1_url = fetch1->full_url();
902 GURL fetch2_url = fetch2->full_url(); 899 GURL fetch2_url = fetch2->full_url();
903 GURL fetch3_url = fetch3->full_url(); 900 GURL fetch3_url = fetch3->full_url();
904 GURL fetch4_url = fetch4->full_url(); 901 GURL fetch4_url = fetch4->full_url();
905 downloader.StartUpdateCheck(fetch1.Pass()); 902 downloader.StartUpdateCheck(fetch1.Pass());
906 downloader.StartUpdateCheck(fetch2.Pass()); 903 downloader.StartUpdateCheck(fetch2.Pass());
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
1017 MockService service(prefs_.get()); 1014 MockService service(prefs_.get());
1018 MockExtensionDownloaderDelegate delegate; 1015 MockExtensionDownloaderDelegate delegate;
1019 ExtensionDownloader downloader(&delegate, service.request_context()); 1016 ExtensionDownloader downloader(&delegate, service.request_context());
1020 downloader.manifests_queue_.set_backoff_policy(&kNoBackoffPolicy); 1017 downloader.manifests_queue_.set_backoff_policy(&kNoBackoffPolicy);
1021 1018
1022 GURL kUpdateUrl("http://localhost/manifest1"); 1019 GURL kUpdateUrl("http://localhost/manifest1");
1023 1020
1024 scoped_ptr<ManifestFetchData> fetch(new ManifestFetchData(kUpdateUrl, 0)); 1021 scoped_ptr<ManifestFetchData> fetch(new ManifestFetchData(kUpdateUrl, 0));
1025 ManifestFetchData::PingData zeroDays(0, 0, true); 1022 ManifestFetchData::PingData zeroDays(0, 0, true);
1026 fetch->AddExtension( 1023 fetch->AddExtension(
1027 "1111", "1.0", &zeroDays, kEmptyUpdateUrlData, std::string(), false); 1024 "1111", "1.0", &zeroDays, kEmptyUpdateUrlData, std::string());
1028 1025
1029 // This will start the first fetcher. 1026 // This will start the first fetcher.
1030 downloader.StartUpdateCheck(fetch.Pass()); 1027 downloader.StartUpdateCheck(fetch.Pass());
1031 RunUntilIdle(); 1028 RunUntilIdle();
1032 1029
1033 // ExtensionDownloader should retry kMaxRetries times and then fail. 1030 // ExtensionDownloader should retry kMaxRetries times and then fail.
1034 EXPECT_CALL(delegate, OnExtensionDownloadFailed( 1031 EXPECT_CALL(delegate, OnExtensionDownloadFailed(
1035 "1111", ExtensionDownloaderDelegate::MANIFEST_FETCH_FAILED, _, _)); 1032 "1111", ExtensionDownloaderDelegate::MANIFEST_FETCH_FAILED, _, _));
1036 for (int i = 0; i <= ExtensionDownloader::kMaxRetries; ++i) { 1033 for (int i = 0; i <= ExtensionDownloader::kMaxRetries; ++i) {
1037 // All fetches will fail. 1034 // All fetches will fail.
1038 fetcher = factory.GetFetcherByID(ExtensionDownloader::kManifestFetcherId); 1035 fetcher = factory.GetFetcherByID(ExtensionDownloader::kManifestFetcherId);
1039 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); 1036 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL);
1040 EXPECT_TRUE(fetcher->GetLoadFlags() == kExpectedLoadFlags); 1037 EXPECT_TRUE(fetcher->GetLoadFlags() == kExpectedLoadFlags);
1041 fetcher->set_url(kUpdateUrl); 1038 fetcher->set_url(kUpdateUrl);
1042 fetcher->set_status(net::URLRequestStatus()); 1039 fetcher->set_status(net::URLRequestStatus());
1043 // Code 5xx causes ExtensionDownloader to retry. 1040 // Code 5xx causes ExtensionDownloader to retry.
1044 fetcher->set_response_code(500); 1041 fetcher->set_response_code(500);
1045 fetcher->delegate()->OnURLFetchComplete(fetcher); 1042 fetcher->delegate()->OnURLFetchComplete(fetcher);
1046 RunUntilIdle(); 1043 RunUntilIdle();
1047 } 1044 }
1048 Mock::VerifyAndClearExpectations(&delegate); 1045 Mock::VerifyAndClearExpectations(&delegate);
1049 1046
1050 1047
1051 // For response codes that are not in the 5xx range ExtensionDownloader 1048 // For response codes that are not in the 5xx range ExtensionDownloader
1052 // should not retry. 1049 // should not retry.
1053 fetch.reset(new ManifestFetchData(kUpdateUrl, 0)); 1050 fetch.reset(new ManifestFetchData(kUpdateUrl, 0));
1054 fetch->AddExtension( 1051 fetch->AddExtension(
1055 "1111", "1.0", &zeroDays, kEmptyUpdateUrlData, std::string(), false); 1052 "1111", "1.0", &zeroDays, kEmptyUpdateUrlData, std::string());
1056 1053
1057 // This will start the first fetcher. 1054 // This will start the first fetcher.
1058 downloader.StartUpdateCheck(fetch.Pass()); 1055 downloader.StartUpdateCheck(fetch.Pass());
1059 RunUntilIdle(); 1056 RunUntilIdle();
1060 1057
1061 EXPECT_CALL(delegate, OnExtensionDownloadFailed( 1058 EXPECT_CALL(delegate, OnExtensionDownloadFailed(
1062 "1111", ExtensionDownloaderDelegate::MANIFEST_FETCH_FAILED, _, _)); 1059 "1111", ExtensionDownloaderDelegate::MANIFEST_FETCH_FAILED, _, _));
1063 // The first fetch will fail, and require retrying. 1060 // The first fetch will fail, and require retrying.
1064 fetcher = factory.GetFetcherByID(ExtensionDownloader::kManifestFetcherId); 1061 fetcher = factory.GetFetcherByID(ExtensionDownloader::kManifestFetcherId);
1065 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); 1062 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL);
(...skipping 637 matching lines...) Expand 10 before | Expand all | Expand 10 after
1703 service.GetDownloaderFactory()); 1700 service.GetDownloaderFactory());
1704 updater.Start(); 1701 updater.Start();
1705 updater.EnsureDownloaderCreated(); 1702 updater.EnsureDownloaderCreated();
1706 1703
1707 ManifestFetchData fetch_data(update_url, 0); 1704 ManifestFetchData fetch_data(update_url, 0);
1708 const Extension* extension = tmp[0].get(); 1705 const Extension* extension = tmp[0].get();
1709 fetch_data.AddExtension(extension->id(), 1706 fetch_data.AddExtension(extension->id(),
1710 extension->VersionString(), 1707 extension->VersionString(),
1711 &kNeverPingedData, 1708 &kNeverPingedData,
1712 kEmptyUpdateUrlData, 1709 kEmptyUpdateUrlData,
1713 std::string(), 1710 std::string());
1714 false);
1715 UpdateManifest::Results results; 1711 UpdateManifest::Results results;
1716 results.daystart_elapsed_seconds = 750; 1712 results.daystart_elapsed_seconds = 750;
1717 1713
1718 updater.downloader_->HandleManifestResults(fetch_data, &results); 1714 updater.downloader_->HandleManifestResults(fetch_data, &results);
1719 Time last_ping_day = 1715 Time last_ping_day =
1720 service.extension_prefs()->LastPingDay(extension->id()); 1716 service.extension_prefs()->LastPingDay(extension->id());
1721 EXPECT_FALSE(last_ping_day.is_null()); 1717 EXPECT_FALSE(last_ping_day.is_null());
1722 int64 seconds_diff = (Time::Now() - last_ping_day).InSeconds(); 1718 int64 seconds_diff = (Time::Now() - last_ping_day).InSeconds();
1723 EXPECT_LT(seconds_diff - results.daystart_elapsed_seconds, 5); 1719 EXPECT_LT(seconds_diff - results.daystart_elapsed_seconds, 5);
1724 } 1720 }
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
2046 // -prodversionmin (shouldn't update if browser version too old) 2042 // -prodversionmin (shouldn't update if browser version too old)
2047 // -manifests & updates arriving out of order / interleaved 2043 // -manifests & updates arriving out of order / interleaved
2048 // -malformed update url (empty, file://, has query, has a # fragment, etc.) 2044 // -malformed update url (empty, file://, has query, has a # fragment, etc.)
2049 // -An extension gets uninstalled while updates are in progress (so it doesn't 2045 // -An extension gets uninstalled while updates are in progress (so it doesn't
2050 // "come back from the dead") 2046 // "come back from the dead")
2051 // -An extension gets manually updated to v3 while we're downloading v2 (ie 2047 // -An extension gets manually updated to v3 while we're downloading v2 (ie
2052 // you don't get downgraded accidentally) 2048 // you don't get downgraded accidentally)
2053 // -An update manifest mentions multiple updates 2049 // -An update manifest mentions multiple updates
2054 2050
2055 } // namespace extensions 2051 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/updater/extension_downloader.cc ('k') | chrome/browser/extensions/updater/manifest_fetch_data.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698