[Extensions] Increase download priority for external component extensions
External component extensions are loaded through the external provider
mechanism. These external extensions, by default, have a lower fetch
priority. For external policy extensions, we increase the priority. Do
the same for external component extensions, and add a test.
Bug: 965686
Change-Id: Ied58e08f403d574c4b6e8f7bdc484db90f926018
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1627783
Commit-Queue: Devlin <[email protected]>
Reviewed-by: Istiaque Ahmed <[email protected]>
Cr-Commit-Position: refs/heads/master@{#664844}
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc
index d9b9567..b92f113 100644
--- a/chrome/browser/extensions/extension_service_unittest.cc
+++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -7420,12 +7420,16 @@
service()->BlockAllExtensions();
}
+class ExternalExtensionPriorityTest
+ : public ExtensionServiceTest,
+ public testing::WithParamInterface<Manifest::Location> {};
+
// Policy-forced extensions should be fetched with FOREGROUND priority,
// otherwise they may be throttled (web store sends “noupdate” response to
// reduce load), which is OK for updates, but not for a new install. This is
// a regression test for problems described in https://crbug.com/904600 and
// https://crbug.com/917700.
-TEST_F(ExtensionServiceTest, PolicyForegroundFetch) {
+TEST_P(ExternalExtensionPriorityTest, PolicyForegroundFetch) {
ExtensionUpdater::ScopedSkipScheduledCheckForTest skip_scheduled_checks;
ExtensionServiceInitParams params = CreateDefaultInitParams();
params.autoupdate_enabled = true;
@@ -7440,11 +7444,11 @@
GURL update_url(extension_urls::kChromeWebstoreUpdateURL);
service()->OnExternalExtensionUpdateUrlFound(
- ExternalInstallInfoUpdateUrl(
- all_zero /* extension_id */, "" /* install_parameter */, update_url,
- Manifest::EXTERNAL_POLICY_DOWNLOAD /* download_location */,
- Extension::NO_FLAGS /* creation_flag */,
- true /* mark_acknowledged */),
+ ExternalInstallInfoUpdateUrl(all_zero /* extension_id */,
+ "" /* install_parameter */, update_url,
+ GetParam() /* download_location */,
+ Extension::NO_FLAGS /* creation_flag */,
+ true /* mark_acknowledged */),
true /* is_initial_load */);
MockExternalProvider provider(nullptr, Manifest::EXTERNAL_POLICY_DOWNLOAD);
@@ -7458,10 +7462,19 @@
std::string header;
EXPECT_TRUE(pending_request->request.headers.GetHeader(
"X-Goog-Update-Interactivity", &header));
- EXPECT_EQ(header, "fg");
+ bool is_high_priority = GetParam() == Manifest::EXTERNAL_POLICY_DOWNLOAD ||
+ GetParam() == Manifest::EXTERNAL_COMPONENT;
+ const char* expected_header = is_high_priority ? "fg" : "bg";
+ EXPECT_EQ(expected_header, header);
// Destroy updater's downloader as it uses |helper|.
service()->updater()->SetExtensionDownloaderForTesting(nullptr);
}
+INSTANTIATE_TEST_SUITE_P(,
+ ExternalExtensionPriorityTest,
+ testing::Values(Manifest::EXTERNAL_POLICY_DOWNLOAD,
+ Manifest::EXTERNAL_COMPONENT,
+ Manifest::EXTERNAL_PREF_DOWNLOAD));
+
} // namespace extensions