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

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

Issue 979453002: [Extensions] Make chrome://extensions use developerPrivate for unpacked loading (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments 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 43b9f205850b76bb16ff7f88fccd53292bb5c0af..b7d90d2bbe8c9bcbad8ca68c35c888ef20ce02c6 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
@@ -9,21 +9,32 @@
#include "chrome/browser/extensions/extension_service_test_base.h"
#include "chrome/browser/extensions/extension_util.h"
#include "chrome/browser/extensions/test_extension_dir.h"
+#include "chrome/browser/extensions/test_extension_system.h"
#include "chrome/browser/extensions/unpacked_installer.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/host_desktop.h"
#include "chrome/common/extensions/api/developer_private.h"
#include "chrome/test/base/test_browser_window.h"
+#include "content/public/test/test_web_contents_factory.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
#include "extensions/browser/test_extension_registry_observer.h"
#include "extensions/common/extension.h"
#include "extensions/common/extension_set.h"
+#include "extensions/common/manifest_constants.h"
#include "extensions/common/test_util.h"
namespace extensions {
+namespace {
+
+KeyedService* BuildAPI(content::BrowserContext* context) {
+ return new DeveloperPrivateAPI(context);
+}
+
+} // namespace
+
class DeveloperPrivateApiUnitTest : public ExtensionServiceTestBase {
protected:
DeveloperPrivateApiUnitTest() {}
@@ -180,6 +191,13 @@ void DeveloperPrivateApiUnitTest::SetUp() {
params.type = Browser::TYPE_TABBED;
params.window = browser_window_.get();
browser_.reset(new Browser(params));
+
+ // Allow the API to be created.
+ static_cast<TestExtensionSystem*>(ExtensionSystem::Get(profile()))->
+ SetEventRouter(make_scoped_ptr(
+ new EventRouter(profile(), ExtensionPrefs::Get(profile()))));
+ DeveloperPrivateAPI::GetFactoryInstance()->SetTestingFactory(
+ profile(), &BuildAPI);
}
void DeveloperPrivateApiUnitTest::TearDown() {
@@ -264,4 +282,94 @@ TEST_F(DeveloperPrivateApiUnitTest, DeveloperPrivatePackFunction) {
base::DeleteFile(pem_path, false);
}
+// Test developerPrivate.choosePath.
+TEST_F(DeveloperPrivateApiUnitTest, DeveloperPrivateChoosePath) {
+ ResetThreadBundle(content::TestBrowserThreadBundle::DEFAULT);
+ content::TestWebContentsFactory web_contents_factory;
+ content::WebContents* web_contents =
+ web_contents_factory.CreateWebContents(profile());
+
+ base::FilePath expected_dir_path = data_dir().AppendASCII("good_unpacked");
+ api::EntryPicker::SkipPickerAndAlwaysSelectPathForTest(&expected_dir_path);
+
+ // Try selecting a directory.
+ base::ListValue choose_args;
+ choose_args.AppendString("FOLDER");
+ choose_args.AppendString("LOAD");
+ scoped_refptr<UIThreadExtensionFunction> function(
+ new api::DeveloperPrivateChoosePathFunction());
+ function->SetRenderViewHost(web_contents->GetRenderViewHost());
+ EXPECT_TRUE(RunFunction(function, choose_args)) << function->GetError();
+ std::string path;
+ EXPECT_TRUE(function->GetResultList() &&
+ function->GetResultList()->GetString(0, &path));
+ EXPECT_EQ(path, expected_dir_path.AsUTF8Unsafe());
+
+ // Try selecting a pem file.
+ base::FilePath expected_file_path =
+ data_dir().AppendASCII("good_unpacked.pem");
+ api::EntryPicker::SkipPickerAndAlwaysSelectPathForTest(&expected_file_path);
+ choose_args.Clear();
+ choose_args.AppendString("FILE");
+ choose_args.AppendString("PEM");
+ function = new api::DeveloperPrivateChoosePathFunction();
+ function->SetRenderViewHost(web_contents->GetRenderViewHost());
+ EXPECT_TRUE(RunFunction(function, choose_args)) << function->GetError();
+ EXPECT_TRUE(function->GetResultList() &&
+ function->GetResultList()->GetString(0, &path));
+ EXPECT_EQ(path, expected_file_path.AsUTF8Unsafe());
+
+ // Try canceling the file dialog.
+ api::EntryPicker::SkipPickerAndAlwaysCancelForTest();
+ function = new api::DeveloperPrivateChoosePathFunction();
+ function->SetRenderViewHost(web_contents->GetRenderViewHost());
+ EXPECT_FALSE(RunFunction(function, choose_args));
+ EXPECT_EQ(std::string("File selection was canceled."), function->GetError());
+}
+
+// Test developerPrivate.loadUnpacked.
+TEST_F(DeveloperPrivateApiUnitTest, DeveloperPrivateLoadUnpacked) {
+ ResetThreadBundle(content::TestBrowserThreadBundle::DEFAULT);
+ content::TestWebContentsFactory web_contents_factory;
+ content::WebContents* web_contents =
+ web_contents_factory.CreateWebContents(profile());
+
+ base::FilePath path = data_dir().AppendASCII("good_unpacked");
+ api::EntryPicker::SkipPickerAndAlwaysSelectPathForTest(&path);
+
+ // Try loading a good extension (it should succeed, and the extension should
+ // be added).
+ scoped_refptr<UIThreadExtensionFunction> function(
+ new api::DeveloperPrivateLoadUnpackedFunction());
+ function->SetRenderViewHost(web_contents->GetRenderViewHost());
+ ExtensionIdSet current_ids = registry()->enabled_extensions().GetIDs();
+ EXPECT_TRUE(RunFunction(function, base::ListValue())) << function->GetError();
+ // We should have added one new extension.
+ ExtensionIdSet id_difference = base::STLSetDifference<ExtensionIdSet>(
+ registry()->enabled_extensions().GetIDs(), current_ids);
+ ASSERT_EQ(1u, id_difference.size());
+ // The new extension should have the same path.
+ EXPECT_EQ(
+ path,
+ registry()->enabled_extensions().GetByID(*id_difference.begin())->path());
+
+ path = data_dir().AppendASCII("empty_manifest");
+ api::EntryPicker::SkipPickerAndAlwaysSelectPathForTest(&path);
+
+ // Try loading a bad extension (it should fail, and we should get an error).
+ function = new api::DeveloperPrivateLoadUnpackedFunction();
+ function->SetRenderViewHost(web_contents->GetRenderViewHost());
+ base::ListValue unpacked_args;
+ scoped_ptr<base::DictionaryValue> options(new base::DictionaryValue());
+ options->SetBoolean("failQuietly", true);
+ unpacked_args.Append(options.release());
+ current_ids = registry()->enabled_extensions().GetIDs();
+ EXPECT_FALSE(RunFunction(function, unpacked_args));
+ EXPECT_EQ(manifest_errors::kManifestUnreadable, function->GetError());
+ // We should have no new extensions installed.
+ EXPECT_EQ(0u, base::STLSetDifference<ExtensionIdSet>(
+ registry()->enabled_extensions().GetIDs(),
+ current_ids).size());
+}
+
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698