summaryrefslogtreecommitdiffstats
path: root/chrome/browser/printing
diff options
context:
space:
mode:
authorajwong@chromium.org <ajwong@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-23 23:39:35 +0000
committerajwong@chromium.org <ajwong@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-23 23:39:35 +0000
commit37ac95b451ae3cdddf327b9bfc3ba350b149b5ff (patch)
treee4f65b78b410d48cb7ff06c0193fb34980e5334b /chrome/browser/printing
parentb785a42692ee2b57600f8b2df66f785387d3f7c0 (diff)
downloadchromium_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.cc100
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");
}