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

Unified Diff: chrome/browser/extensions/crx_installer_browsertest.cc

Issue 801603002: Add support for command line switches to Features, and as proof that it works, (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: test fixes Created 6 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/common/extensions/api/_permission_features.json » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/crx_installer_browsertest.cc
diff --git a/chrome/browser/extensions/crx_installer_browsertest.cc b/chrome/browser/extensions/crx_installer_browsertest.cc
index 8b2855eb64fb854651a15cccc4821b1f135f28d2..759e2ca014703c9e2829ee3953de2c59614cab30 100644
--- a/chrome/browser/extensions/crx_installer_browsertest.cc
+++ b/chrome/browser/extensions/crx_installer_browsertest.cc
@@ -5,6 +5,7 @@
#include "chrome/browser/extensions/crx_installer.h"
#include "base/at_exit.h"
+#include "base/files/file_path.h"
#include "base/memory/ref_counted.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/download/download_crx_util.h"
@@ -37,7 +38,9 @@
#include "extensions/common/extension.h"
#include "extensions/common/feature_switch.h"
#include "extensions/common/file_util.h"
+#include "extensions/common/permissions/api_permission.h"
#include "extensions/common/permissions/permission_set.h"
+#include "extensions/common/permissions/permissions_data.h"
#include "extensions/common/switches.h"
#include "ui/base/l10n/l10n_util.h"
@@ -159,10 +162,27 @@ class ManagementPolicyMock : public extensions::ManagementPolicy::Provider {
}
};
+// Appends "enable-experimental-extension-apis" to the command line for the
+// lifetime of this class.
+class ScopedExperimentalCommandLine {
+ public:
+ ScopedExperimentalCommandLine() : saved_(*CommandLine::ForCurrentProcess()) {
+ CommandLine::ForCurrentProcess()->AppendSwitch(
+ switches::kEnableExperimentalExtensionApis);
+ }
+
+ ~ScopedExperimentalCommandLine() {
+ *CommandLine::ForCurrentProcess() = saved_;
+ }
+
+ private:
+ CommandLine saved_;
+};
+
} // namespace
class ExtensionCrxInstallerTest : public ExtensionBrowserTest {
- public:
+ protected:
scoped_ptr<WebstoreInstaller::Approval> GetApproval(
const char* manifest_dir,
const std::string& id,
@@ -219,8 +239,7 @@ class ExtensionCrxInstallerTest : public ExtensionBrowserTest {
// |record_oauth2_grant| is true.
void CheckHasEmptyScopesAfterInstall(const std::string& ext_relpath,
bool record_oauth2_grant) {
- CommandLine::ForCurrentProcess()->AppendSwitch(
- switches::kEnableExperimentalExtensionApis);
+ ScopedExperimentalCommandLine scope;
scoped_refptr<MockPromptProxy> mock_prompt =
CreateMockPromptProxyForBrowser(browser());
@@ -233,6 +252,18 @@ class ExtensionCrxInstallerTest : public ExtensionBrowserTest {
->GetGrantedPermissions(mock_prompt->extension_id());
ASSERT_TRUE(permissions.get());
}
+
+ // Returns a FilePath to an unpacked "experimental" extension (a test
+ // Extension which requests the "experimental" permission).
+ base::FilePath PackExperimentalExtension() {
+ // We must modify the command line temporarily in order to pack an
+ // extension that requests the experimental permission.
+ ScopedExperimentalCommandLine scope;
+ base::FilePath test_path = test_data_dir_.AppendASCII("experimental");
+ base::FilePath crx_path = PackExtension(test_path);
+ CHECK(!crx_path.empty()) << "Extension not found at " << test_path.value();
+ return crx_path;
+ }
};
// This test is skipped on ChromeOS because it requires the NPAPI,
@@ -253,27 +284,41 @@ IN_PROC_BROWSER_TEST_F(ExtensionCrxInstallerTest, Whitelisting) {
#endif
IN_PROC_BROWSER_TEST_F(ExtensionCrxInstallerTest,
- GalleryInstallGetsExperimental) {
- // We must modify the command line temporarily in order to pack an extension
- // that requests the experimental permission.
- CommandLine* command_line = CommandLine::ForCurrentProcess();
- CommandLine old_command_line = *command_line;
- command_line->AppendSwitch(switches::kEnableExperimentalExtensionApis);
- base::FilePath crx_path = PackExtension(
- test_data_dir_.AppendASCII("experimental"));
- ASSERT_FALSE(crx_path.empty());
+ ExperimentalExtensionFromGallery) {
+ // Gallery-installed extensions should have their experimental permission
+ // preserved, since we allow the Webstore to make that decision.
+ base::FilePath crx_path = PackExperimentalExtension();
+ const Extension* extension = InstallExtensionFromWebstore(crx_path, 1);
+ ASSERT_TRUE(extension);
+ EXPECT_TRUE(extension->permissions_data()->HasAPIPermission(
+ APIPermission::kExperimental));
+}
- // Now reset the command line so that we are testing specifically whether
- // installing from webstore enables experimental permissions.
- *(CommandLine::ForCurrentProcess()) = old_command_line;
+IN_PROC_BROWSER_TEST_F(ExtensionCrxInstallerTest,
+ ExperimentalExtensionFromOutsideGallery) {
+ // Non-gallery-installed extensions should lose their experimental
+ // permission if the flag isn't enabled.
+ base::FilePath crx_path = PackExperimentalExtension();
+ const Extension* extension = InstallExtension(crx_path, 1);
+ ASSERT_TRUE(extension);
+ EXPECT_FALSE(extension->permissions_data()->HasAPIPermission(
+ APIPermission::kExperimental));
+}
- EXPECT_FALSE(InstallExtension(crx_path, 0));
- EXPECT_TRUE(InstallExtensionFromWebstore(crx_path, 1));
+IN_PROC_BROWSER_TEST_F(ExtensionCrxInstallerTest,
+ ExperimentalExtensionFromOutsideGalleryWithFlag) {
+ // Non-gallery-installed extensions should maintain their experimental
+ // permission if the flag is enabled.
+ base::FilePath crx_path = PackExperimentalExtension();
+ ScopedExperimentalCommandLine scope;
+ const Extension* extension = InstallExtension(crx_path, 1);
+ ASSERT_TRUE(extension);
+ EXPECT_TRUE(extension->permissions_data()->HasAPIPermission(
+ APIPermission::kExperimental));
}
IN_PROC_BROWSER_TEST_F(ExtensionCrxInstallerTest, PlatformAppCrx) {
- CommandLine::ForCurrentProcess()->AppendSwitch(
- switches::kEnableExperimentalExtensionApis);
+ ScopedExperimentalCommandLine scope;
EXPECT_TRUE(InstallExtension(
test_data_dir_.AppendASCII("minimal_platform_app.crx"), 1));
}
« no previous file with comments | « no previous file | chrome/common/extensions/api/_permission_features.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698