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

Unified Diff: chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc

Issue 954943007: [Extensions] Make chrome://extensions use api functions for file access, reload (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 months 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
Index: chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc
diff --git a/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc b/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc
index a6ba50bda5276c45bb7172e39bbeb1e0e4780f3d..59bac3797ef5012ddeceec902a6aa55d2c47878c 100644
--- a/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc
+++ b/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc
@@ -33,6 +33,16 @@ class DeveloperPrivateApiUnitTest : public ExtensionServiceTestBase {
bool RunFunction(const scoped_refptr<UIThreadExtensionFunction>& function,
const base::ListValue& args);
+ // Loads an unpacked extension that is backed by a real directory, allowing
+ // it to be reloaded.
+ const Extension* LoadUnpackedExtension();
+
+ // Tests a developer private function (T) that sets an extension pref, and
+ // verifies it with |has_pref|.
+ template<typename T>
+ void TestExtensionPrefSetting(
+ bool (*has_pref)(const std::string&, content::BrowserContext*));
+
Browser* browser() { return browser_.get(); }
private:
@@ -44,6 +54,8 @@ class DeveloperPrivateApiUnitTest : public ExtensionServiceTestBase {
scoped_ptr<TestBrowserWindow> browser_window_;
scoped_ptr<Browser> browser_;
+ ScopedVector<TestExtensionDir> test_extension_dirs_;
+
DISALLOW_COPY_AND_ASSIGN(DeveloperPrivateApiUnitTest);
};
@@ -57,25 +69,7 @@ bool DeveloperPrivateApiUnitTest::RunFunction(
extension_function_test_utils::NONE);
}
-void DeveloperPrivateApiUnitTest::SetUp() {
- ExtensionServiceTestBase::SetUp();
- InitializeEmptyExtensionService();
-
- browser_window_.reset(new TestBrowserWindow());
- Browser::CreateParams params(profile(), chrome::HOST_DESKTOP_TYPE_NATIVE);
- params.type = Browser::TYPE_TABBED;
- params.window = browser_window_.get();
- browser_.reset(new Browser(params));
-}
-
-void DeveloperPrivateApiUnitTest::TearDown() {
- browser_.reset();
- browser_window_.reset();
- ExtensionServiceTestBase::TearDown();
-}
-
-// Test developerPrivate.allowIncognito.
-TEST_F(DeveloperPrivateApiUnitTest, DeveloperPrivateAllowIncognito) {
+const Extension* DeveloperPrivateApiUnitTest::LoadUnpackedExtension() {
const char kManifest[] =
"{"
" \"name\": \"foo\","
@@ -83,10 +77,9 @@ TEST_F(DeveloperPrivateApiUnitTest, DeveloperPrivateAllowIncognito) {
" \"manifest_version\": 2"
"}";
- // Sadly, we need a "real" directory here, because toggling incognito causes
- // a reload (which needs a path).
- TestExtensionDir dir;
- dir.WriteManifest(kManifest);
+ test_extension_dirs_.push_back(new TestExtensionDir);
+ TestExtensionDir* dir = test_extension_dirs_.back();
+ dir->WriteManifest(kManifest);
// TODO(devlin): We should extract out methods to load an unpacked extension
// synchronously. We do it in ExtensionBrowserTest, but that's not helpful
@@ -94,32 +87,100 @@ TEST_F(DeveloperPrivateApiUnitTest, DeveloperPrivateAllowIncognito) {
TestExtensionRegistryObserver registry_observer(registry());
scoped_refptr<UnpackedInstaller> installer(
UnpackedInstaller::Create(service()));
- installer->Load(dir.unpacked_path());
+ installer->Load(dir->unpacked_path());
base::FilePath extension_path =
- base::MakeAbsoluteFilePath(dir.unpacked_path());
+ base::MakeAbsoluteFilePath(dir->unpacked_path());
const Extension* extension = nullptr;
do {
extension = registry_observer.WaitForExtensionLoaded();
} while (extension->path() != extension_path);
- std::string extension_id = extension->id();
+ // The fact that unpacked extensions get file access by default is an
+ // irrelevant detail to these tests. Disable it.
+ ExtensionPrefs::Get(browser_context())->SetAllowFileAccess(extension->id(),
+ false);
+ return extension;
+}
- scoped_refptr<api::DeveloperPrivateAllowIncognitoFunction> function(
- new api::DeveloperPrivateAllowIncognitoFunction());
+template<typename T>
+void DeveloperPrivateApiUnitTest::TestExtensionPrefSetting(
+ bool (*has_pref)(const std::string&, content::BrowserContext*)) {
+ // Sadly, we need a "real" directory here, because toggling incognito causes
+ // a reload (which needs a path).
+ std::string extension_id = LoadUnpackedExtension()->id();
+
+ scoped_refptr<UIThreadExtensionFunction> function(new T());
base::ListValue enable_args;
enable_args.AppendString(extension_id);
enable_args.AppendBoolean(true);
- EXPECT_FALSE(util::IsIncognitoEnabled(extension_id, profile()));
+ EXPECT_FALSE(has_pref(extension_id, profile()));
+
+ // Pref-setting should require a user action.
+ EXPECT_FALSE(RunFunction(function, enable_args));
+ EXPECT_EQ(std::string("This action requires a user gesture."),
+ function->GetError());
+
+ ExtensionFunction::ScopedUserGestureForTests scoped_user_gesture;
+ function = new T();
EXPECT_TRUE(RunFunction(function, enable_args));
- EXPECT_TRUE(util::IsIncognitoEnabled(extension_id, profile()));
+ EXPECT_TRUE(has_pref(extension_id, profile()));
base::ListValue disable_args;
disable_args.AppendString(extension_id);
disable_args.AppendBoolean(false);
- function = new api::DeveloperPrivateAllowIncognitoFunction();
+ function = new T();
EXPECT_TRUE(RunFunction(function, disable_args));
- EXPECT_FALSE(util::IsIncognitoEnabled(extension_id, profile()));
+ EXPECT_FALSE(has_pref(extension_id, profile()));
+}
+
+void DeveloperPrivateApiUnitTest::SetUp() {
+ ExtensionServiceTestBase::SetUp();
+ InitializeEmptyExtensionService();
+
+ browser_window_.reset(new TestBrowserWindow());
+ Browser::CreateParams params(profile(), chrome::HOST_DESKTOP_TYPE_NATIVE);
+ params.type = Browser::TYPE_TABBED;
+ params.window = browser_window_.get();
+ browser_.reset(new Browser(params));
+}
+
+void DeveloperPrivateApiUnitTest::TearDown() {
+ test_extension_dirs_.clear();
+ browser_.reset();
+ browser_window_.reset();
+ ExtensionServiceTestBase::TearDown();
+}
+
+// Test developerPrivate.allowIncognito.
+TEST_F(DeveloperPrivateApiUnitTest, DeveloperPrivateAllowIncognito) {
+ TestExtensionPrefSetting<api::DeveloperPrivateAllowIncognitoFunction>(
+ &util::IsIncognitoEnabled);
+}
+
+// Test developerPrivate.reload.
+TEST_F(DeveloperPrivateApiUnitTest, DeveloperPrivateReload) {
+ const Extension* extension = LoadUnpackedExtension();
+ std::string extension_id = extension->id();
+ scoped_refptr<UIThreadExtensionFunction> function(
+ new api::DeveloperPrivateReloadFunction());
+ base::ListValue reload_args;
+ reload_args.AppendString(extension_id);
+
+ TestExtensionRegistryObserver registry_observer(registry());
+ EXPECT_TRUE(RunFunction(function, reload_args));
+ const Extension* unloaded_extension =
+ registry_observer.WaitForExtensionUnloaded();
+ EXPECT_EQ(extension, unloaded_extension);
+ const Extension* reloaded_extension =
+ registry_observer.WaitForExtensionLoaded();
+ EXPECT_EQ(extension_id, reloaded_extension->id());
+}
+
+// Test developerPrivate.allowFileAccess.
+TEST_F(DeveloperPrivateApiUnitTest, DeveloperPrivateAllowFileAccess) {
+ TestExtensionPrefSetting<api::DeveloperPrivateAllowFileAccessFunction>(
+ &util::AllowFileAccess);
}
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698