diff options
author | ajwong@chromium.org <ajwong@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-23 23:39:35 +0000 |
---|---|---|
committer | ajwong@chromium.org <ajwong@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-23 23:39:35 +0000 |
commit | 37ac95b451ae3cdddf327b9bfc3ba350b149b5ff (patch) | |
tree | e4f65b78b410d48cb7ff06c0193fb34980e5334b /chrome/browser/printing | |
parent | b785a42692ee2b57600f8b2df66f785387d3f7c0 (diff) | |
download | chromium_src-37ac95b451ae3cdddf327b9bfc3ba350b149b5ff.zip chromium_src-37ac95b451ae3cdddf327b9bfc3ba350b149b5ff.tar.gz chromium_src-37ac95b451ae3cdddf327b9bfc3ba350b149b5ff.tar.bz2 |
Correctly integrate StoragePartition into TestingProfile.
Until this CL, TestingProfile had 3 distinct URLRequestContexts it would return to the user: one via profile->GetDefaultStoragePartition()->GetRequestContext(), one via profile->GetRequestContext(), and one via profile->GetResourceContext->GetRequestContext(). All of these had different cookie stores. This CL unified them so they all return the one from profile->GetDefaultStoragePartition()->GetRequestContext(). This correctly mimics how production code works.
Doing this had a bunch of implications:
(1) Removes TestingProfile::CreateRequestContext()/ResetRequestContext()
(2) Changes MockRequestContext to share the URLRequestContext with TestingProfile.
(3) TestingProfile now requires all BrowserThreads.
Point (3) effectively adds TestBrowserThreadBundle into a bunch more spots. Because of that, we also have the following changes:
(a) AshTestBase now has a TestBrowserThreadBundle
(b) Removed a bunch of real threads from tests.
(c) TemplateUrlService has reworked synchronization semantics.
(d) Removed MultiThreadTestHelper.
(e) Added TestingIOThread class + testing API in IOThread to mock out various IO thread tasks which enervated with the new TestBrowserThreadBundle.
TBR=bauerb,brettw,isherman,joth,jyasskin,mattm,mmenke,mnissler,pkasting,rkc,rlp,satorux,tim,xians,joth
BUG=159193
Review URL: https://chromiumcodereview.appspot.com/17127002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@213272 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/printing')
-rw-r--r-- | chrome/browser/printing/cloud_print/test/cloud_print_proxy_process_browsertest.cc | 100 |
1 files changed, 76 insertions, 24 deletions
diff --git a/chrome/browser/printing/cloud_print/test/cloud_print_proxy_process_browsertest.cc b/chrome/browser/printing/cloud_print/test/cloud_print_proxy_process_browsertest.cc index 79e0280..7064156 100644 --- a/chrome/browser/printing/cloud_print/test/cloud_print_proxy_process_browsertest.cc +++ b/chrome/browser/printing/cloud_print/test/cloud_print_proxy_process_browsertest.cc @@ -11,9 +11,12 @@ #include "base/message_loop/message_loop.h" #include "base/process_util.h" #include "base/rand_util.h" +#include "base/synchronization/waitable_event.h" #include "base/test/multiprocess_test.h" #include "base/test/test_timeouts.h" +#include "base/time/default_tick_clock.h" #include "base/time/time.h" +#include "chrome/browser/prefs/browser_prefs.h" #include "chrome/browser/printing/cloud_print/cloud_print_proxy_service.h" #include "chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.h" #include "chrome/browser/service/service_process_control.h" @@ -26,13 +29,14 @@ #include "chrome/service/service_process.h" #include "chrome/test/base/test_launcher_utils.h" #include "chrome/test/base/testing_browser_process.h" +#include "chrome/test/base/testing_io_thread_state.h" #include "chrome/test/base/testing_pref_service_syncable.h" #include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile_manager.h" #include "chrome/test/base/ui_test_utils.h" #include "components/browser_context_keyed_service/browser_context_keyed_service.h" #include "content/public/browser/notification_service.h" -#include "content/public/test/test_browser_thread.h" +#include "content/public/test/test_browser_thread_bundle.h" #include "ipc/ipc_descriptors.h" #include "ipc/ipc_multiprocess_test.h" #include "ipc/ipc_switches.h" @@ -57,6 +61,7 @@ using ::testing::Property; using ::testing::Return; using ::testing::WithoutArgs; using ::testing::_; +using content::BrowserThread; namespace { @@ -205,17 +210,23 @@ typedef base::Callback<void(MockServiceIPCServer* server)> int CloudPrintMockService_Main(SetExpectationsCallback set_expectations) { base::MessageLoopForUI main_message_loop; main_message_loop.set_thread_name("Main Thread"); + CommandLine* command_line = CommandLine::ForCurrentProcess(); #if defined(OS_MACOSX) - CommandLine* cl = CommandLine::ForCurrentProcess(); - if (!cl->HasSwitch(kTestExecutablePath)) + if (!command_line->HasSwitch(kTestExecutablePath)) return kMissingSwitch; - base::FilePath executable_path = cl->GetSwitchValuePath(kTestExecutablePath); + base::FilePath executable_path = + command_line->GetSwitchValuePath(kTestExecutablePath); EXPECT_FALSE(executable_path.empty()); MockLaunchd mock_launchd(executable_path, &main_message_loop, true, true); Launchd::ScopedInstance use_mock(&mock_launchd); #endif + base::FilePath user_data_dir = + command_line->GetSwitchValuePath(switches::kUserDataDir); + CHECK(!user_data_dir.empty()); + CHECK(test_launcher_utils::OverrideUserDataDir(user_data_dir)); + ServiceProcessState* state(new ServiceProcessState); bool service_process_state_initialized = state->Initialize(); EXPECT_TRUE(service_process_state_initialized); @@ -289,8 +300,8 @@ class CloudPrintProxyPolicyStartupTest : public base::MultiProcessTest, virtual ~CloudPrintProxyPolicyStartupTest(); virtual void SetUp(); - base::MessageLoopProxy* IOMessageLoopProxy() { - return io_thread_.message_loop_proxy().get(); + scoped_refptr<base::MessageLoopProxy> IOMessageLoopProxy() { + return BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO); } base::ProcessHandle Launch(const std::string& name); void WaitForConnect(); @@ -316,9 +327,8 @@ class CloudPrintProxyPolicyStartupTest : public base::MultiProcessTest, } protected: - base::MessageLoopForUI message_loop_; - content::TestBrowserThread ui_thread_; - base::Thread io_thread_; + content::TestBrowserThreadBundle thread_bundle_; + base::ScopedTempDir temp_user_data_dir_; std::string startup_channel_id_; scoped_ptr<IPC::ChannelProxy> startup_channel_; @@ -359,28 +369,43 @@ class CloudPrintProxyPolicyStartupTest : public base::MultiProcessTest, }; CloudPrintProxyPolicyStartupTest::CloudPrintProxyPolicyStartupTest() - : ui_thread_(content::BrowserThread::UI, &message_loop_), - io_thread_("CloudPrintProxyPolicyTestThread") { + : thread_bundle_(content::TestBrowserThreadBundle::REAL_IO_THREAD) { } CloudPrintProxyPolicyStartupTest::~CloudPrintProxyPolicyStartupTest() { } void CloudPrintProxyPolicyStartupTest::SetUp() { - base::Thread::Options options(base::MessageLoop::TYPE_IO, 0); - ASSERT_TRUE(io_thread_.StartWithOptions(options)); - #if defined(OS_MACOSX) EXPECT_TRUE(temp_dir_.CreateUniqueTempDir()); EXPECT_TRUE(MockLaunchd::MakeABundle(temp_dir_.path(), "CloudPrintProxyTest", &bundle_path_, &executable_path_)); - mock_launchd_.reset(new MockLaunchd(executable_path_, &message_loop_, + mock_launchd_.reset(new MockLaunchd(executable_path_, + base::MessageLoopForUI::current(), true, false)); scoped_launchd_instance_.reset( new Launchd::ScopedInstance(mock_launchd_.get())); #endif + + // Ensure test does not use the standard profile directory. This is copied + // from InProcessBrowserTest::SetUp(). These tests require a more complex + // process startup so they are unable to just inherit from + // InProcessBrowserTest. + CommandLine* command_line = CommandLine::ForCurrentProcess(); + base::FilePath user_data_dir = + command_line->GetSwitchValuePath(switches::kUserDataDir); + if (user_data_dir.empty()) { + ASSERT_TRUE(temp_user_data_dir_.CreateUniqueTempDir() && + temp_user_data_dir_.IsValid()) + << "Could not create temporary user data directory \"" + << temp_user_data_dir_.path().value() << "\"."; + + user_data_dir = temp_user_data_dir_.path(); + command_line->AppendSwitchPath(switches::kUserDataDir, user_data_dir); + } + ASSERT_TRUE(test_launcher_utils::OverrideUserDataDir(user_data_dir)); } base::ProcessHandle CloudPrintProxyPolicyStartupTest::Launch( @@ -452,10 +477,21 @@ CommandLine CloudPrintProxyPolicyStartupTest::MakeCmdLine( } TEST_F(CloudPrintProxyPolicyStartupTest, StartAndShutdown) { + TestingBrowserProcess* browser_process = + TestingBrowserProcess::GetGlobal(); + TestingProfileManager profile_manager(browser_process); + ASSERT_TRUE(profile_manager.SetUp()); + + // Must be created after the TestingProfileManager since that creates the + // LocalState for the BrowserProcess. Must be created before profiles are + // constructed. + chrome::TestingIOThreadState testing_io_thread_state; + base::ProcessHandle handle = Launch("CloudPrintMockService_StartEnabledWaitForQuit"); WaitForConnect(); ShutdownAndWaitForExitWithTimeout(handle); + content::RunAllPendingInMessageLoop(); } BrowserContextKeyedService* CloudPrintProxyServiceFactoryForPolicyTest( @@ -470,11 +506,18 @@ TEST_F(CloudPrintProxyPolicyStartupTest, StartBrowserWithoutPolicy) { base::ProcessHandle handle = Launch("CloudPrintMockService_StartEnabledWaitForQuit"); + // Setup the Browser Process with a full IOThread::Globals. TestingBrowserProcess* browser_process = TestingBrowserProcess::GetGlobal(); + TestingProfileManager profile_manager(browser_process); ASSERT_TRUE(profile_manager.SetUp()); + // Must be created after the TestingProfileManager since that creates the + // LocalState for the BrowserProcess. Must be created before profiles are + // constructed. + chrome::TestingIOThreadState testing_io_thread_state; + TestingProfile* profile = profile_manager.CreateTestingProfile("StartBrowserWithoutPolicy"); CloudPrintProxyServiceFactory::GetInstance()-> @@ -490,20 +533,22 @@ TEST_F(CloudPrintProxyPolicyStartupTest, StartBrowserWithoutPolicy) { test_launcher_utils::PrepareBrowserCommandLineForTests(&command_line); WaitForConnect(); + base::RunLoop run_loop; base::MessageLoop::current()->PostDelayedTask( FROM_HERE, - base::MessageLoop::QuitClosure(), + run_loop.QuitClosure(), TestTimeouts::action_timeout()); - bool run_loop = LaunchBrowser(command_line, profile); - EXPECT_FALSE(run_loop); - if (run_loop) - base::MessageLoop::current()->Run(); + bool should_run_loop = LaunchBrowser(command_line, profile); + EXPECT_FALSE(should_run_loop); + if (should_run_loop) + run_loop.Run(); EXPECT_EQ(MockServiceIPCServer::EnabledUserId(), prefs->GetString(prefs::kCloudPrintEmail)); ShutdownAndWaitForExitWithTimeout(handle); + content::RunAllPendingInMessageLoop(); profile_manager.DeleteTestingProfile("StartBrowserWithoutPolicy"); } @@ -516,6 +561,11 @@ TEST_F(CloudPrintProxyPolicyStartupTest, StartBrowserWithPolicy) { TestingProfileManager profile_manager(browser_process); ASSERT_TRUE(profile_manager.SetUp()); + // Must be created after the TestingProfileManager since that creates the + // LocalState for the BrowserProcess. Must be created before profiles are + // constructed. + chrome::TestingIOThreadState testing_io_thread_state; + TestingProfile* profile = profile_manager.CreateTestingProfile("StartBrowserWithPolicy"); CloudPrintProxyServiceFactory::GetInstance()-> @@ -533,20 +583,22 @@ TEST_F(CloudPrintProxyPolicyStartupTest, StartBrowserWithPolicy) { test_launcher_utils::PrepareBrowserCommandLineForTests(&command_line); WaitForConnect(); + base::RunLoop run_loop; base::MessageLoop::current()->PostDelayedTask( FROM_HERE, - base::MessageLoop::QuitClosure(), + run_loop.QuitClosure(), TestTimeouts::action_timeout()); - bool run_loop = LaunchBrowser(command_line, profile); + bool should_run_loop = LaunchBrowser(command_line, profile); // No expectations on run_loop being true here; that would be a race // condition. - if (run_loop) - base::MessageLoop::current()->Run(); + if (should_run_loop) + run_loop.Run(); EXPECT_EQ("", prefs->GetString(prefs::kCloudPrintEmail)); ShutdownAndWaitForExitWithTimeout(handle); + content::RunAllPendingInMessageLoop(); profile_manager.DeleteTestingProfile("StartBrowserWithPolicy"); } |