Index: chrome/browser/extensions/extension_loading_browsertest.cc |
diff --git a/chrome/browser/extensions/extension_loading_browsertest.cc b/chrome/browser/extensions/extension_loading_browsertest.cc |
index 095be6cd6e1b2ca56269b23949a78677ea1478d6..12c2c1bb44a4db02d9f79470b64cc56e8c6bb73a 100644 |
--- a/chrome/browser/extensions/extension_loading_browsertest.cc |
+++ b/chrome/browser/extensions/extension_loading_browsertest.cc |
@@ -21,6 +21,7 @@ |
#include "content/public/test/browser_test_utils.h" |
#include "extensions/browser/extension_registry.h" |
#include "extensions/browser/process_manager.h" |
+#include "extensions/common/permissions/permissions_data.h" |
#include "extensions/test/extension_test_message_listener.h" |
#include "net/test/embedded_test_server/embedded_test_server.h" |
#include "testing/gmock/include/gmock/gmock.h" |
@@ -43,7 +44,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionLoadingTest, |
ASSERT_TRUE(embedded_test_server()->Start()); |
TestExtensionDir extension_dir; |
- const char manifest_template[] = |
+ const char kManifestTemplate[] = |
"{" |
" 'name': 'Overrides New Tab'," |
" 'version': '%d'," |
@@ -58,7 +59,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionLoadingTest, |
" }" |
"}"; |
extension_dir.WriteManifestWithSingleQuotes( |
- base::StringPrintf(manifest_template, 1)); |
+ base::StringPrintf(kManifestTemplate, 1)); |
extension_dir.WriteFile(FILE_PATH_LITERAL("event.js"), ""); |
extension_dir.WriteFile(FILE_PATH_LITERAL("newtab.html"), |
"<h1>Overridden New Tab Page</h1>"); |
@@ -81,7 +82,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionLoadingTest, |
// Increase the extension's version. |
extension_dir.WriteManifestWithSingleQuotes( |
- base::StringPrintf(manifest_template, 2)); |
+ base::StringPrintf(kManifestTemplate, 2)); |
// Upgrade the extension. |
new_tab_extension = UpdateExtension( |
@@ -101,6 +102,67 @@ IN_PROC_BROWSER_TEST_F(ExtensionLoadingTest, |
EXPECT_TRUE(registry->enabled_extensions().Contains(new_tab_extension->id())); |
} |
+IN_PROC_BROWSER_TEST_F(ExtensionLoadingTest, |
+ UpgradeAddingNewTabPagePermissionNoPrompt) { |
+ embedded_test_server()->ServeFilesFromDirectory( |
+ base::FilePath(FILE_PATH_LITERAL("chrome/test/data"))); |
+ ASSERT_TRUE(embedded_test_server()->Start()); |
+ |
+ TestExtensionDir extension_dir; |
+ const char kManifestTemplate[] = |
+ "{" |
+ " 'name': 'Overrides New Tab'," |
+ " 'version': '%d'," |
+ " 'description': 'Will override New Tab soon'," |
+ " %s" // Placeholder for future NTP url override block. |
+ " 'manifest_version': 2" |
+ "}"; |
+ extension_dir.WriteManifestWithSingleQuotes( |
+ base::StringPrintf(kManifestTemplate, 1, "")); |
+ extension_dir.WriteFile(FILE_PATH_LITERAL("event.js"), ""); |
+ extension_dir.WriteFile(FILE_PATH_LITERAL("newtab.html"), |
+ "<h1>Overridden New Tab Page</h1>"); |
+ |
+ const Extension* new_tab_extension = |
+ InstallExtension(extension_dir.Pack(), 1 /*new install*/); |
+ ASSERT_TRUE(new_tab_extension); |
+ |
+ EXPECT_FALSE(new_tab_extension->permissions_data()->HasAPIPermission( |
+ APIPermission::kNewTabPageOverride)); |
+ |
+ // Navigate that tab to a non-extension URL to swap out the extension's |
+ // renderer. |
+ const GURL test_link_from_ntp = |
+ embedded_test_server()->GetURL("/README.chromium"); |
+ EXPECT_THAT(test_link_from_ntp.spec(), testing::EndsWith("/README.chromium")) |
+ << "Check that the test server started."; |
+ NavigateInRenderer(browser()->tab_strip_model()->GetActiveWebContents(), |
+ test_link_from_ntp); |
+ |
+ // Increase the extension's version and add the NTP url override which will |
+ // add the kNewTabPageOverride permission. |
+ const char ntp_override_string[] = |
+ " 'chrome_url_overrides': {" |
+ " 'newtab': 'newtab.html'" |
+ " },"; |
+ extension_dir.WriteManifestWithSingleQuotes( |
+ base::StringPrintf(kManifestTemplate, 2, ntp_override_string)); |
+ |
+ // Upgrade the extension, ensure that the upgrade 'worked' in the sense that |
+ // the extension is still present and not disabled and that it now has the |
+ // new API permission. |
+ // TODO(robertshield): Update this once most of the population is on M62+ |
+ // and adding NTP permissions implies a permission upgrade. |
+ new_tab_extension = UpdateExtension( |
+ new_tab_extension->id(), extension_dir.Pack(), 0 /*expected upgrade*/); |
+ ASSERT_NE(nullptr, new_tab_extension); |
+ |
+ EXPECT_TRUE(new_tab_extension->permissions_data()->HasAPIPermission( |
+ APIPermission::kNewTabPageOverride)); |
+ EXPECT_THAT(new_tab_extension->version()->components(), |
+ testing::ElementsAre(2)); |
+} |
+ |
// Tests the behavior described in http://crbug.com/532088. |
IN_PROC_BROWSER_TEST_F(ExtensionLoadingTest, |
KeepAliveWithDevToolsOpenOnReload) { |