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

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

Issue 318863008: Move ExtensionServiceTestBase into it's own header/cc file (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix merge conflict Created 6 years, 6 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/extension_service_test_base.cc
diff --git a/chrome/browser/extensions/extension_service_test_base.cc b/chrome/browser/extensions/extension_service_test_base.cc
new file mode 100644
index 0000000000000000000000000000000000000000..0413fa3bf2a6574ea78d8b6fd3d446b75fe269f4
--- /dev/null
+++ b/chrome/browser/extensions/extension_service_test_base.cc
@@ -0,0 +1,228 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/extensions/extension_service_test_base.h"
+
+#include "base/command_line.h"
+#include "base/file_util.h"
+#include "base/memory/ref_counted.h"
+#include "base/message_loop/message_loop.h"
+#include "base/path_service.h"
+#include "chrome/browser/extensions/extension_error_reporter.h"
+#include "chrome/browser/extensions/extension_garbage_collector_factory.h"
+#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/test_extension_system.h"
+#include "chrome/browser/extensions/updater/extension_updater.h"
+#include "chrome/browser/prefs/browser_prefs.h"
+#include "chrome/browser/prefs/pref_service_mock_factory.h"
+#include "chrome/browser/prefs/pref_service_syncable.h"
+#include "chrome/common/chrome_constants.h"
+#include "chrome/common/chrome_paths.h"
+#include "chrome/test/base/testing_profile.h"
+#include "components/pref_registry/pref_registry_syncable.h"
+#include "content/public/browser/browser_context.h"
+#include "extensions/browser/extension_prefs.h"
+#include "extensions/browser/extension_registry.h"
+
+#if defined(OS_CHROMEOS)
+#include "chrome/browser/chromeos/extensions/install_limiter.h"
+#endif
+
+namespace extensions {
+
+namespace {
+
+// Create a testing profile according to |params|.
+scoped_ptr<TestingProfile> BuildTestingProfile(
+ const ExtensionServiceTestBase::ExtensionServiceInitParams& params) {
+ TestingProfile::Builder profile_builder;
+ // Create a PrefService that only contains user defined preference values.
+ PrefServiceMockFactory factory;
+ // If pref_file is empty, TestingProfile automatically creates
+ // TestingPrefServiceSyncable instance.
+ if (!params.pref_file.empty()) {
+ factory.SetUserPrefsFile(params.pref_file,
+ base::MessageLoopProxy::current().get());
+ scoped_refptr<user_prefs::PrefRegistrySyncable> registry(
+ new user_prefs::PrefRegistrySyncable);
+ scoped_ptr<PrefServiceSyncable> prefs(
+ factory.CreateSyncable(registry.get()));
+ chrome::RegisterUserProfilePrefs(registry.get());
+ profile_builder.SetPrefService(prefs.Pass());
+ }
+
+ if (params.profile_is_managed)
+ profile_builder.SetManagedUserId("asdf");
+
+ profile_builder.SetPath(params.profile_path);
+ return profile_builder.Build();
+}
+
+} // namespace
+
+ExtensionServiceTestBase::ExtensionServiceInitParams::
+ ExtensionServiceInitParams()
+ : autoupdate_enabled(false), is_first_run(true), profile_is_managed(false) {
+}
+
+// Our message loop may be used in tests which require it to be an IO loop.
+ExtensionServiceTestBase::ExtensionServiceTestBase()
+ : service_(NULL),
+ thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
+ registry_(NULL) {
+ base::FilePath test_data_dir;
+ if (!PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir)) {
+ ADD_FAILURE();
+ return;
+ }
+ data_dir_ = test_data_dir.AppendASCII("extensions");
+}
+
+ExtensionServiceTestBase::~ExtensionServiceTestBase() {
+ // Why? Because |profile_| has to be destroyed before |at_exit_manager_|, but
+ // is declared above it in the class definition since it's protected.
+ profile_.reset();
+}
+
+ExtensionServiceTestBase::ExtensionServiceInitParams
+ExtensionServiceTestBase::CreateDefaultInitParams() {
+ ExtensionServiceInitParams params;
+ EXPECT_TRUE(temp_dir_.CreateUniqueTempDir());
+ base::FilePath path = temp_dir_.path();
+ path = path.Append(FILE_PATH_LITERAL("TestingExtensionsPath"));
+ EXPECT_TRUE(base::DeleteFile(path, true));
+ base::File::Error error = base::File::FILE_OK;
+ EXPECT_TRUE(base::CreateDirectoryAndGetError(path, &error)) << error;
+ base::FilePath prefs_filename =
+ path.Append(FILE_PATH_LITERAL("TestPreferences"));
+ base::FilePath extensions_install_dir =
+ path.Append(FILE_PATH_LITERAL("Extensions"));
+ EXPECT_TRUE(base::DeleteFile(extensions_install_dir, true));
+ EXPECT_TRUE(base::CreateDirectoryAndGetError(extensions_install_dir, &error))
+ << error;
+
+ params.profile_path = path;
+ params.pref_file = prefs_filename;
+ params.extensions_install_dir = extensions_install_dir;
+ return params;
+}
+
+void ExtensionServiceTestBase::InitializeExtensionService(
+ const ExtensionServiceTestBase::ExtensionServiceInitParams& params) {
+ profile_ = BuildTestingProfile(params);
+ CreateExtensionService(params);
+
+ extensions_install_dir_ = params.extensions_install_dir;
+ registry_ = ExtensionRegistry::Get(profile_.get());
+
+ // Garbage collector is typically NULL during tests, so give it a build.
+ ExtensionGarbageCollectorFactory::GetInstance()->SetTestingFactoryAndUse(
+ profile_.get(), &ExtensionGarbageCollectorFactory::BuildInstanceFor);
+}
+
+void ExtensionServiceTestBase::InitializeEmptyExtensionService() {
+ InitializeExtensionService(CreateDefaultInitParams());
+}
+
+void ExtensionServiceTestBase::InitializeInstalledExtensionService(
+ const base::FilePath& prefs_file,
+ const base::FilePath& source_install_dir) {
+ ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
+ base::FilePath path = temp_dir_.path();
+
+ path = path.Append(FILE_PATH_LITERAL("TestingExtensionsPath"));
+ ASSERT_TRUE(base::DeleteFile(path, true));
+
+ base::File::Error error = base::File::FILE_OK;
+ ASSERT_TRUE(base::CreateDirectoryAndGetError(path, &error)) << error;
+
+ base::FilePath temp_prefs = path.Append(chrome::kPreferencesFilename);
+ ASSERT_TRUE(base::CopyFile(prefs_file, temp_prefs));
+
+ base::FilePath extensions_install_dir =
+ path.Append(FILE_PATH_LITERAL("Extensions"));
+ ASSERT_TRUE(base::DeleteFile(extensions_install_dir, true));
+ ASSERT_TRUE(
+ base::CopyDirectory(source_install_dir, extensions_install_dir, true));
+
+ ExtensionServiceInitParams params;
+ params.profile_path = path;
+ params.pref_file = temp_prefs;
+ params.extensions_install_dir = extensions_install_dir;
+ InitializeExtensionService(params);
+}
+
+void ExtensionServiceTestBase::InitializeGoodInstalledExtensionService() {
+ base::FilePath source_install_dir =
+ data_dir_.AppendASCII("good").AppendASCII("Extensions");
+ base::FilePath pref_path =
+ source_install_dir.DirName().Append(chrome::kPreferencesFilename);
+ InitializeInstalledExtensionService(pref_path, source_install_dir);
+}
+
+void ExtensionServiceTestBase::InitializeExtensionServiceWithUpdater() {
+ ExtensionServiceInitParams params = CreateDefaultInitParams();
+ params.autoupdate_enabled = true;
+ InitializeExtensionService(params);
+ service_->updater()->Start();
+}
+
+void ExtensionServiceTestBase::InitializeProcessManager() {
+ static_cast<extensions::TestExtensionSystem*>(
+ ExtensionSystem::Get(profile_.get()))->CreateProcessManager();
+}
+
+void ExtensionServiceTestBase::SetUp() {
+ ExtensionErrorReporter::GetInstance()->ClearErrors();
+}
+
+void ExtensionServiceTestBase::SetUpTestCase() {
+ // Safe to call multiple times.
+ ExtensionErrorReporter::Init(false); // no noisy errors.
+}
+
+// These are declared in the .cc so that all inheritors don't need to know
+// that TestingProfile derives Profile derives BrowserContext.
+content::BrowserContext* ExtensionServiceTestBase::browser_context() {
+ return profile_.get();
+}
+
+Profile* ExtensionServiceTestBase::profile() {
+ return profile_.get();
+}
+
+void ExtensionServiceTestBase::CreateExtensionService(
+ const ExtensionServiceInitParams& params) {
+ TestExtensionSystem* system =
+ static_cast<TestExtensionSystem*>(ExtensionSystem::Get(profile_.get()));
+ if (!params.is_first_run) {
+ ExtensionPrefs* prefs = system->CreateExtensionPrefs(
+ base::CommandLine::ForCurrentProcess(), params.extensions_install_dir);
+ prefs->SetAlertSystemFirstRun();
+ }
+
+ service_ =
+ system->CreateExtensionService(base::CommandLine::ForCurrentProcess(),
+ params.extensions_install_dir,
+ params.autoupdate_enabled);
+
+ service_->SetFileTaskRunnerForTesting(
+ base::MessageLoopProxy::current().get());
+ service_->set_extensions_enabled(true);
+ service_->set_show_extensions_prompts(false);
+ service_->set_install_updates_when_idle_for_test(false);
+
+ // When we start up, we want to make sure there is no external provider,
+ // since the ExtensionService on Windows will use the Registry as a default
+ // provider and if there is something already registered there then it will
+ // interfere with the tests. Those tests that need an external provider
+ // will register one specifically.
+ service_->ClearProvidersForTesting();
+
+#if defined(OS_CHROMEOS)
+ InstallLimiter::Get(profile_.get())->DisableForTest();
+#endif
+}
+
+} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/extension_service_test_base.h ('k') | chrome/browser/extensions/extension_service_unittest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698