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

Unified Diff: chrome/test/base/chrome_unit_test_suite.cc

Issue 190663012: Run ContentMain in a browser_test's browser process. This removes duplication of code in the browse… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: try to fix android by restoring old path just for it Created 6 years, 9 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
« no previous file with comments | « chrome/test/base/chrome_unit_test_suite.h ('k') | chrome/test/base/in_process_browser_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/base/chrome_unit_test_suite.cc
===================================================================
--- chrome/test/base/chrome_unit_test_suite.cc (revision 257432)
+++ chrome/test/base/chrome_unit_test_suite.cc (working copy)
@@ -4,11 +4,47 @@
#include "chrome/test/base/chrome_unit_test_suite.h"
+#include "base/path_service.h"
+#include "base/process/process_handle.h"
+#include "base/metrics/stats_table.h"
+#include "base/strings/stringprintf.h"
+#include "chrome/browser/chrome_content_browser_client.h"
+#include "chrome/common/chrome_content_client.h"
+#include "chrome/common/chrome_paths.h"
#include "chrome/test/base/testing_browser_process.h"
+#include "chrome/utility/chrome_content_utility_client.h"
+#include "content/public/common/content_paths.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/base/resource/resource_bundle.h"
+#include "ui/base/resource/resource_handle.h"
+#include "ui/base/ui_base_paths.h"
+#if defined(OS_CHROMEOS)
+#include "chromeos/chromeos_paths.h"
+#endif
+
+#if !defined(OS_IOS)
+#include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h"
+#include "chrome/common/extensions/chrome_extensions_client.h"
+#include "extensions/common/extension_paths.h"
+#include "ui/gl/gl_surface.h"
+#endif
+
+#if defined(OS_POSIX)
+#include "base/memory/shared_memory.h"
+#endif
+
namespace {
+void RemoveSharedMemoryFile(const std::string& filename) {
+ // Stats uses SharedMemory under the hood. On posix, this results in a file
+ // on disk.
+#if defined(OS_POSIX)
+ base::SharedMemory memory;
+ memory.Delete(filename);
+#endif
+}
+
// Creates a TestingBrowserProcess for each test.
class ChromeUnitTestSuiteInitializer : public testing::EmptyTestEventListener {
public:
@@ -16,14 +52,40 @@
virtual ~ChromeUnitTestSuiteInitializer() {}
virtual void OnTestStart(const testing::TestInfo& test_info) OVERRIDE {
+ content_client_.reset(new ChromeContentClient);
+ content::SetContentClient(content_client_.get());
+ // TODO(ios): Bring this back once ChromeContentBrowserClient is building.
+#if !defined(OS_IOS)
+ browser_content_client_.reset(new chrome::ChromeContentBrowserClient());
+ content::SetBrowserClientForTesting(browser_content_client_.get());
+ utility_content_client_.reset(new chrome::ChromeContentUtilityClient());
+ content::SetUtilityClientForTesting(utility_content_client_.get());
+#endif
+
TestingBrowserProcess::CreateInstance();
}
virtual void OnTestEnd(const testing::TestInfo& test_info) OVERRIDE {
+ // TODO(ios): Bring this back once ChromeContentBrowserClient is building.
+#if !defined(OS_IOS)
+ browser_content_client_.reset();
+ utility_content_client_.reset();
+#endif
+ content_client_.reset();
+ content::SetContentClient(NULL);
+
TestingBrowserProcess::DeleteInstance();
}
private:
+ // Client implementations for the content module.
+ scoped_ptr<ChromeContentClient> content_client_;
+ // TODO(ios): Bring this back once ChromeContentBrowserClient is building.
+#if !defined(OS_IOS)
+ scoped_ptr<chrome::ChromeContentBrowserClient> browser_content_client_;
+ scoped_ptr<chrome::ChromeContentUtilityClient> utility_content_client_;
+#endif
+
DISALLOW_COPY_AND_ASSIGN(ChromeUnitTestSuiteInitializer);
};
@@ -42,7 +104,71 @@
testing::UnitTest::GetInstance()->listeners();
listeners.Append(new ChromeUnitTestSuiteInitializer);
+ InitializeProviders();
+ RegisterInProcessThreads();
+
+ stats_filename_ = base::StringPrintf("unit_tests-%d",
+ base::GetCurrentProcId());
+ RemoveSharedMemoryFile(stats_filename_);
+ stats_table_.reset(new base::StatsTable(stats_filename_, 20, 200));
+ base::StatsTable::set_current(stats_table_.get());
+
ChromeTestSuite::Initialize();
+
+ // This needs to run after ChromeTestSuite::Initialize which calls content's
+ // intialization which calls base's which initializes ICU.
+ InitializeResourceBundle();
}
-bool ChromeUnitTestSuite::IsBrowserTestSuite() { return false; }
+void ChromeUnitTestSuite::Shutdown() {
+ ResourceBundle::CleanupSharedInstance();
+
+ base::StatsTable::set_current(NULL);
+ stats_table_.reset();
+ RemoveSharedMemoryFile(stats_filename_);
+
+ ChromeTestSuite::Shutdown();
+}
+
+void ChromeUnitTestSuite::InitializeProviders() {
+ {
+ ChromeContentClient content_client;
+ RegisterContentSchemes(&content_client);
+ }
+
+ chrome::RegisterPathProvider();
+ content::RegisterPathProvider();
+ ui::RegisterPathProvider();
+
+#if defined(OS_CHROMEOS)
+ chromeos::RegisterPathProvider();
+#endif
+
+#if !defined(OS_IOS)
+ extensions::RegisterPathProvider();
+
+ extensions::ExtensionsClient::Set(
+ extensions::ChromeExtensionsClient::GetInstance());
+
+ content::WebUIControllerFactory::RegisterFactory(
+ ChromeWebUIControllerFactory::GetInstance());
+
+ gfx::GLSurface::InitializeOneOffForTests();
+#endif
+}
+
+void ChromeUnitTestSuite::InitializeResourceBundle() {
+ // Force unittests to run using en-US so if we test against string
+ // output, it'll pass regardless of the system language.
+ ResourceBundle::InitSharedInstanceWithLocale("en-US", NULL);
+ base::FilePath resources_pack_path;
+#if defined(OS_MACOSX) && !defined(OS_IOS)
+ PathService::Get(base::DIR_MODULE, &resources_pack_path);
+ resources_pack_path =
+ resources_pack_path.Append(FILE_PATH_LITERAL("resources.pak"));
+#else
+ PathService::Get(chrome::FILE_RESOURCES_PACK, &resources_pack_path);
+#endif
+ ResourceBundle::GetSharedInstance().AddDataPackFromPath(
+ resources_pack_path, ui::SCALE_FACTOR_NONE);
+}
« no previous file with comments | « chrome/test/base/chrome_unit_test_suite.h ('k') | chrome/test/base/in_process_browser_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698