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..8553f5d580dff0ed775fc3a21a0472d9665d65bb 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" |
@@ -101,6 +102,69 @@ 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 manifest_template[] = |
+ "{" |
+ " 'name': 'Overrides New Tab'," |
+ " 'version': '%d'," |
+ " 'description': 'Will override New Tab soon'," |
+ " 'manifest_version': 2," |
+ " %s" // Placeholder for future NTP url override block. |
+ " 'background': {" |
+ " 'persistent': false," |
+ " 'scripts': ['event.js']" |
+ " }" |
+ "}"; |
+ extension_dir.WriteManifestWithSingleQuotes( |
+ base::StringPrintf(manifest_template, 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_NE(nullptr, new_tab_extension); |
Devlin
2017/07/05 15:45:02
optional: I think ASSERT_TRUE(new_tab_extension) i
robertshield
2017/07/18 19:46:20
Done.
|
+ |
+ 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 = |
Devlin
2017/07/05 15:45:02
nit: ignore capitals in variable names, so just |t
robertshield
2017/07/18 19:46:20
Done.
|
+ 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(manifest_template, 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 |
Devlin
2017/07/05 15:45:02
Is this desired? It means that if I don't want th
robertshield
2017/07/18 19:46:20
Yes, it's intended for migration. The intent is no
|
+ // new API permission. |
+ 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) { |