Index: chrome/browser/extensions/updater/extension_updater_unittest.cc |
diff --git a/chrome/browser/extensions/updater/extension_updater_unittest.cc b/chrome/browser/extensions/updater/extension_updater_unittest.cc |
index 4804c7f14669b67efa8261d67357d555cad8e385..52c56eab16aa65c586944a12f84363c6a85b85f2 100644 |
--- a/chrome/browser/extensions/updater/extension_updater_unittest.cc |
+++ b/chrome/browser/extensions/updater/extension_updater_unittest.cc |
@@ -765,7 +765,8 @@ class ExtensionUpdaterTest : public testing::Test { |
std::unique_ptr<ManifestFetchData> fetch_data( |
CreateManifestFetchData(GURL("http://localhost/foo"))); |
fetch_data->AddExtension(id, version, &kNeverPingedData, std::string(), |
- std::string()); |
+ std::string(), |
+ ManifestFetchData::FetchPriority::BACKGROUND); |
std::map<std::string, std::string> params; |
VerifyQueryAndExtractParameters(fetch_data->full_url().query(), ¶ms); |
@@ -783,7 +784,8 @@ class ExtensionUpdaterTest : public testing::Test { |
std::unique_ptr<ManifestFetchData> fetch_data( |
CreateManifestFetchData(GURL("http://localhost/foo"))); |
fetch_data->AddExtension(id, version, &kNeverPingedData, "bar", |
- std::string()); |
+ std::string(), |
+ ManifestFetchData::FetchPriority::BACKGROUND); |
std::map<std::string, std::string> params; |
VerifyQueryAndExtractParameters(fetch_data->full_url().query(), ¶ms); |
EXPECT_EQ(id, params["id"]); |
@@ -800,7 +802,8 @@ class ExtensionUpdaterTest : public testing::Test { |
std::unique_ptr<ManifestFetchData> fetch_data( |
CreateManifestFetchData(GURL("http://localhost/foo"))); |
fetch_data->AddExtension(id, version, &kNeverPingedData, "a=1&b=2&c", |
- std::string()); |
+ std::string(), |
+ ManifestFetchData::FetchPriority::BACKGROUND); |
std::map<std::string, std::string> params; |
VerifyQueryAndExtractParameters(fetch_data->full_url().query(), ¶ms); |
EXPECT_EQ(id, params["id"]); |
@@ -808,7 +811,10 @@ class ExtensionUpdaterTest : public testing::Test { |
EXPECT_EQ("a%3D1%26b%3D2%26c", params["ap"]); |
} |
- void TestUpdateUrlDataFromGallery(const std::string& gallery_url) { |
+ void TestUpdateUrlDataFromGallery( |
+ const std::string& gallery_url, |
+ ManifestFetchData::FetchPriority fetch_priority, |
+ int num_extensions) { |
net::TestURLFetcherFactory factory; |
MockService service(prefs_.get()); |
@@ -817,12 +823,16 @@ class ExtensionUpdaterTest : public testing::Test { |
ExtensionList extensions; |
std::string url(gallery_url); |
- service.CreateTestExtensions(1, 1, &extensions, &url, Manifest::INTERNAL); |
+ service.CreateTestExtensions(1, num_extensions, &extensions, &url, |
+ Manifest::INTERNAL); |
+ |
+ for (int i = 0; i < num_extensions; ++i) { |
+ const std::string& id = extensions[i]->id(); |
+ EXPECT_CALL(delegate, GetPingDataForExtension(id, _)); |
- const std::string& id = extensions[0]->id(); |
- EXPECT_CALL(delegate, GetPingDataForExtension(id, _)); |
+ downloader.AddExtension(*extensions[i], 0, fetch_priority); |
+ } |
- downloader.AddExtension(*extensions[0], 0); |
downloader.StartAllPending(NULL); |
net::TestURLFetcher* fetcher = |
factory.GetFetcherByID(ExtensionDownloader::kManifestFetcherId); |
@@ -834,6 +844,44 @@ class ExtensionUpdaterTest : public testing::Test { |
EXPECT_NE(std::string::npos, x); |
std::string::size_type ap = update_url.find("ap%3D", x); |
EXPECT_EQ(std::string::npos, ap); |
+ |
+ net::HttpRequestHeaders fetch_headers; |
+ fetcher->GetExtraRequestHeaders(&fetch_headers); |
+ EXPECT_TRUE(fetch_headers.HasHeader( |
+ ExtensionDownloader::kUpdateInteractivityHeader)); |
+ EXPECT_TRUE( |
+ fetch_headers.HasHeader(ExtensionDownloader::kUpdateAppIdHeader)); |
+ EXPECT_TRUE( |
+ fetch_headers.HasHeader(ExtensionDownloader::kUpdateUpdaterHeader)); |
+ |
+ std::string interactivity_value; |
+ fetch_headers.GetHeader(ExtensionDownloader::kUpdateInteractivityHeader, |
+ &interactivity_value); |
+ |
+ std::string expected_interactivity_value = |
+ fetch_priority == ManifestFetchData::FetchPriority::FOREGROUND ? "fg" |
+ : "bg"; |
+ EXPECT_EQ(expected_interactivity_value, interactivity_value); |
+ |
+ std::string appid_value; |
+ fetch_headers.GetHeader(ExtensionDownloader::kUpdateAppIdHeader, |
+ &appid_value); |
+ if (num_extensions > 1) { |
+ for (int i = 0; i < num_extensions; ++i) { |
+ EXPECT_TRUE( |
+ testing::IsSubstring("", "", extensions[i]->id(), appid_value)); |
+ } |
+ } else { |
+ EXPECT_EQ(extensions[0]->id(), appid_value); |
+ } |
+ |
+ std::string updater_value; |
+ fetch_headers.GetHeader(ExtensionDownloader::kUpdateUpdaterHeader, |
+ &updater_value); |
+ std::string expected_updater_value = base::StringPrintf( |
+ "%s-%s", UpdateQueryParams::GetProdIdString(UpdateQueryParams::CRX), |
+ UpdateQueryParams::GetProdVersion().c_str()); |
+ EXPECT_EQ(expected_updater_value, updater_value); |
} |
void TestInstallSource() { |
@@ -845,7 +893,8 @@ class ExtensionUpdaterTest : public testing::Test { |
std::unique_ptr<ManifestFetchData> fetch_data( |
CreateManifestFetchData(GURL("http://localhost/foo"))); |
fetch_data->AddExtension(id, version, &kNeverPingedData, |
- kEmptyUpdateUrlData, install_source); |
+ kEmptyUpdateUrlData, install_source, |
+ ManifestFetchData::FetchPriority::BACKGROUND); |
std::map<std::string, std::string> params; |
VerifyQueryAndExtractParameters(fetch_data->full_url().query(), ¶ms); |
EXPECT_EQ(id, params["id"]); |
@@ -872,10 +921,12 @@ class ExtensionUpdaterTest : public testing::Test { |
const std::string id1 = crx_file::id_util::GenerateId("1"); |
const std::string id2 = crx_file::id_util::GenerateId("2"); |
fetch_data->AddExtension(id1, "1.0.0.0", &kNeverPingedData, |
- kEmptyUpdateUrlData, std::string()); |
+ kEmptyUpdateUrlData, std::string(), |
+ ManifestFetchData::FetchPriority::BACKGROUND); |
AddParseResult(id1, "1.1", "http://localhost/e1_1.1.crx", &updates); |
fetch_data->AddExtension(id2, "2.0.0.0", &kNeverPingedData, |
- kEmptyUpdateUrlData, std::string()); |
+ kEmptyUpdateUrlData, std::string(), |
+ ManifestFetchData::FetchPriority::BACKGROUND); |
AddParseResult(id2, "2.0.0.0", "http://localhost/e2_2.0.crx", &updates); |
EXPECT_CALL(delegate, IsExtensionPending(_)).WillRepeatedly(Return(false)); |
@@ -914,7 +965,8 @@ class ExtensionUpdaterTest : public testing::Test { |
for (it = ids_for_update_check.begin(); |
it != ids_for_update_check.end(); ++it) { |
fetch_data->AddExtension(*it, "1.0.0.0", &kNeverPingedData, |
- kEmptyUpdateUrlData, std::string()); |
+ kEmptyUpdateUrlData, std::string(), |
+ ManifestFetchData::FetchPriority::BACKGROUND); |
AddParseResult(*it, "1.1", "http://localhost/e1_1.1.crx", &updates); |
} |
@@ -952,13 +1004,17 @@ class ExtensionUpdaterTest : public testing::Test { |
CreateManifestFetchData(kUpdateUrl)); |
ManifestFetchData::PingData zeroDays(0, 0, true, 0); |
fetch1->AddExtension("1111", "1.0", &zeroDays, kEmptyUpdateUrlData, |
- std::string()); |
+ std::string(), |
+ ManifestFetchData::FetchPriority::BACKGROUND); |
fetch2->AddExtension("2222", "2.0", &zeroDays, kEmptyUpdateUrlData, |
- std::string()); |
+ std::string(), |
+ ManifestFetchData::FetchPriority::BACKGROUND); |
fetch3->AddExtension("3333", "3.0", &zeroDays, kEmptyUpdateUrlData, |
- std::string()); |
+ std::string(), |
+ ManifestFetchData::FetchPriority::BACKGROUND); |
fetch4->AddExtension("4444", "4.0", &zeroDays, kEmptyUpdateUrlData, |
- std::string()); |
+ std::string(), |
+ ManifestFetchData::FetchPriority::BACKGROUND); |
// This will start the first fetcher and queue the others. The next in queue |
// is started as each fetcher receives its response. Note that the fetchers |
@@ -1090,7 +1146,8 @@ class ExtensionUpdaterTest : public testing::Test { |
CreateManifestFetchData(kUpdateUrl)); |
ManifestFetchData::PingData zeroDays(0, 0, true, 0); |
fetch->AddExtension("1111", "1.0", &zeroDays, kEmptyUpdateUrlData, |
- std::string()); |
+ std::string(), |
+ ManifestFetchData::FetchPriority::BACKGROUND); |
// This will start the first fetcher. |
downloader.StartUpdateCheck(std::move(fetch)); |
@@ -1118,7 +1175,8 @@ class ExtensionUpdaterTest : public testing::Test { |
// should not retry. |
fetch.reset(CreateManifestFetchData(kUpdateUrl)); |
fetch->AddExtension("1111", "1.0", &zeroDays, kEmptyUpdateUrlData, |
- std::string()); |
+ std::string(), |
+ ManifestFetchData::FetchPriority::BACKGROUND); |
// This will start the first fetcher. |
downloader.StartUpdateCheck(std::move(fetch)); |
@@ -1779,7 +1837,8 @@ class ExtensionUpdaterTest : public testing::Test { |
const Extension* extension = tmp[0].get(); |
fetch_data->AddExtension(extension->id(), extension->VersionString(), |
&kNeverPingedData, kEmptyUpdateUrlData, |
- std::string()); |
+ std::string(), |
+ ManifestFetchData::FetchPriority::BACKGROUND); |
UpdateManifest::Results results; |
results.daystart_elapsed_seconds = 750; |
@@ -1886,13 +1945,48 @@ class ExtensionUpdaterTest : public testing::Test { |
} |
} |
+ void TestManifestAddExtension( |
+ ManifestFetchData::FetchPriority data_priority, |
+ ManifestFetchData::FetchPriority extension_priority, |
+ ManifestFetchData::FetchPriority expected_priority) { |
+ const std::string id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; |
+ const std::string version = "1.0"; |
+ |
+ std::unique_ptr<ManifestFetchData> fetch_data( |
+ CreateManifestFetchData(GURL("http://localhost/foo"), data_priority)); |
+ ASSERT_TRUE(fetch_data->AddExtension(id, version, &kNeverPingedData, |
+ std::string(), std::string(), |
+ extension_priority)); |
+ ASSERT_EQ(expected_priority, fetch_data->fetch_priority()); |
+ } |
+ |
+ void TestManifestMerge(ManifestFetchData::FetchPriority data_priority, |
+ ManifestFetchData::FetchPriority other_priority, |
+ ManifestFetchData::FetchPriority expected_priority) { |
+ std::unique_ptr<ManifestFetchData> fetch_data( |
+ CreateManifestFetchData(GURL("http://localhost/foo"), data_priority)); |
+ |
+ std::unique_ptr<ManifestFetchData> fetch_other( |
+ CreateManifestFetchData(GURL("http://localhost/foo"), other_priority)); |
+ |
+ fetch_data->Merge(*fetch_other); |
+ ASSERT_EQ(expected_priority, fetch_data->fetch_priority()); |
+ } |
+ |
protected: |
std::unique_ptr<TestExtensionPrefs> prefs_; |
- ManifestFetchData* CreateManifestFetchData(const GURL& update_url) { |
+ ManifestFetchData* CreateManifestFetchData( |
+ const GURL& update_url, |
+ ManifestFetchData::FetchPriority fetch_priority) { |
return new ManifestFetchData(update_url, 0, "", |
UpdateQueryParams::Get(UpdateQueryParams::CRX), |
- ManifestFetchData::PING); |
+ ManifestFetchData::PING, fetch_priority); |
+ } |
+ |
+ ManifestFetchData* CreateManifestFetchData(const GURL& update_url) { |
+ return CreateManifestFetchData( |
+ update_url, ManifestFetchData::FetchPriority::BACKGROUND); |
} |
private: |
@@ -1923,8 +2017,14 @@ TEST_F(ExtensionUpdaterTest, TestUpdateUrlData) { |
TestUpdateUrlDataEmpty(); |
TestUpdateUrlDataSimple(); |
TestUpdateUrlDataCompound(); |
- TestUpdateUrlDataFromGallery( |
- extension_urls::GetWebstoreUpdateUrl().spec()); |
+ TestUpdateUrlDataFromGallery(extension_urls::GetWebstoreUpdateUrl().spec(), |
+ ManifestFetchData::FetchPriority::BACKGROUND, 1); |
+ TestUpdateUrlDataFromGallery(extension_urls::GetWebstoreUpdateUrl().spec(), |
+ ManifestFetchData::FetchPriority::FOREGROUND, 1); |
+ TestUpdateUrlDataFromGallery(extension_urls::GetWebstoreUpdateUrl().spec(), |
+ ManifestFetchData::FetchPriority::BACKGROUND, 2); |
+ TestUpdateUrlDataFromGallery(extension_urls::GetWebstoreUpdateUrl().spec(), |
+ ManifestFetchData::FetchPriority::FOREGROUND, 4); |
} |
TEST_F(ExtensionUpdaterTest, TestInstallSource) { |
@@ -2132,21 +2232,24 @@ TEST_F(ExtensionUpdaterTest, TestManifestFetchesBuilderAddExtension) { |
std::string id = crx_file::id_util::GenerateId("foo"); |
EXPECT_CALL(delegate, GetPingDataForExtension(id, _)).WillOnce(Return(false)); |
EXPECT_TRUE(downloader->AddPendingExtension( |
- id, GURL("http://example.com/update"), false, 0)); |
+ id, GURL("http://example.com/update"), false, 0, |
+ ManifestFetchData::FetchPriority::BACKGROUND)); |
downloader->StartAllPending(NULL); |
Mock::VerifyAndClearExpectations(&delegate); |
EXPECT_EQ(1u, ManifestFetchersCount(downloader.get())); |
// Extensions with invalid update URLs should be rejected. |
id = crx_file::id_util::GenerateId("foo2"); |
- EXPECT_FALSE(downloader->AddPendingExtension(id, GURL("http:google.com:foo"), |
- false, 0)); |
+ EXPECT_FALSE(downloader->AddPendingExtension( |
+ id, GURL("http:google.com:foo"), false, 0, |
+ ManifestFetchData::FetchPriority::BACKGROUND)); |
downloader->StartAllPending(NULL); |
EXPECT_EQ(1u, ManifestFetchersCount(downloader.get())); |
// Extensions with empty IDs should be rejected. |
- EXPECT_FALSE( |
- downloader->AddPendingExtension(std::string(), GURL(), false, 0)); |
+ EXPECT_FALSE(downloader->AddPendingExtension( |
+ std::string(), GURL(), false, 0, |
+ ManifestFetchData::FetchPriority::BACKGROUND)); |
downloader->StartAllPending(NULL); |
EXPECT_EQ(1u, ManifestFetchersCount(downloader.get())); |
@@ -2162,7 +2265,8 @@ TEST_F(ExtensionUpdaterTest, TestManifestFetchesBuilderAddExtension) { |
// filled in. |
id = crx_file::id_util::GenerateId("foo3"); |
EXPECT_CALL(delegate, GetPingDataForExtension(id, _)).WillOnce(Return(false)); |
- EXPECT_TRUE(downloader->AddPendingExtension(id, GURL(), false, 0)); |
+ EXPECT_TRUE(downloader->AddPendingExtension( |
+ id, GURL(), false, 0, ManifestFetchData::FetchPriority::BACKGROUND)); |
downloader->StartAllPending(NULL); |
EXPECT_EQ(1u, ManifestFetchersCount(downloader.get())); |
@@ -2275,6 +2379,42 @@ TEST_F(ExtensionUpdaterTest, TestPersistedNextCheckTime) { |
updater.Stop(); |
} |
+TEST_F(ExtensionUpdaterTest, TestManifestFetchDataAddExtension) { |
+ TestManifestAddExtension(ManifestFetchData::FetchPriority::BACKGROUND, |
+ ManifestFetchData::FetchPriority::BACKGROUND, |
+ ManifestFetchData::FetchPriority::BACKGROUND); |
+ |
+ TestManifestAddExtension(ManifestFetchData::FetchPriority::BACKGROUND, |
+ ManifestFetchData::FetchPriority::FOREGROUND, |
+ ManifestFetchData::FetchPriority::FOREGROUND); |
+ |
+ TestManifestAddExtension(ManifestFetchData::FetchPriority::FOREGROUND, |
+ ManifestFetchData::FetchPriority::BACKGROUND, |
+ ManifestFetchData::FetchPriority::FOREGROUND); |
+ |
+ TestManifestAddExtension(ManifestFetchData::FetchPriority::FOREGROUND, |
+ ManifestFetchData::FetchPriority::FOREGROUND, |
+ ManifestFetchData::FetchPriority::FOREGROUND); |
+} |
+ |
+TEST_F(ExtensionUpdaterTest, TestManifestFetchDataMerge) { |
+ TestManifestMerge(ManifestFetchData::FetchPriority::BACKGROUND, |
+ ManifestFetchData::FetchPriority::BACKGROUND, |
+ ManifestFetchData::FetchPriority::BACKGROUND); |
+ |
+ TestManifestMerge(ManifestFetchData::FetchPriority::BACKGROUND, |
+ ManifestFetchData::FetchPriority::FOREGROUND, |
+ ManifestFetchData::FetchPriority::FOREGROUND); |
+ |
+ TestManifestMerge(ManifestFetchData::FetchPriority::FOREGROUND, |
+ ManifestFetchData::FetchPriority::BACKGROUND, |
+ ManifestFetchData::FetchPriority::FOREGROUND); |
+ |
+ TestManifestMerge(ManifestFetchData::FetchPriority::FOREGROUND, |
+ ManifestFetchData::FetchPriority::FOREGROUND, |
+ ManifestFetchData::FetchPriority::FOREGROUND); |
+} |
+ |
// TODO(asargent) - (http://crbug.com/12780) add tests for: |
// -prodversionmin (shouldn't update if browser version too old) |
// -manifests & updates arriving out of order / interleaved |