diff options
author | sanjeevr@chromium.org <sanjeevr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-12 21:44:23 +0000 |
---|---|---|
committer | sanjeevr@chromium.org <sanjeevr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-12 21:44:23 +0000 |
commit | 7d11f6d55ae2c731a6426b96fbbe492807f65982 (patch) | |
tree | e1a30d0d58da436430eb036a9f092190f459e704 /chrome/browser/service/service_process_control_browsertest.cc | |
parent | 062c08a28b335742faaca102db1949ec1ece0b5a (diff) | |
download | chromium_src-7d11f6d55ae2c731a6426b96fbbe492807f65982.zip chromium_src-7d11f6d55ae2c731a6426b96fbbe492807f65982.tar.gz chromium_src-7d11f6d55ae2c731a6426b96fbbe492807f65982.tar.bz2 |
Used process_util methods to wait for the service process to die in the ServiceProcessControlBrowserTest.
BUG=None
TEST=browser_tests.
Review URL: http://codereview.chromium.org/3653005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@62339 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/service/service_process_control_browsertest.cc')
-rw-r--r-- | chrome/browser/service/service_process_control_browsertest.cc | 56 |
1 files changed, 23 insertions, 33 deletions
diff --git a/chrome/browser/service/service_process_control_browsertest.cc b/chrome/browser/service/service_process_control_browsertest.cc index c9038e6..9775e40 100644 --- a/chrome/browser/service/service_process_control_browsertest.cc +++ b/chrome/browser/service/service_process_control_browsertest.cc @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/process_util.h" #include "base/test/test_timeouts.h" #include "chrome/browser/browser.h" #include "chrome/browser/service/service_process_control.h" @@ -14,6 +15,15 @@ class ServiceProcessControlBrowserTest : public InProcessBrowserTest, public ServiceProcessControl::MessageHandler { + public: + ServiceProcessControlBrowserTest() + : service_process_handle_(base::kNullProcessHandle) { + } + ~ServiceProcessControlBrowserTest() { + base::CloseProcessHandle(service_process_handle_); + service_process_handle_ = base::kNullProcessHandle; + } + protected: void LaunchServiceProcessControl() { ServiceProcessControl* process = @@ -37,48 +47,26 @@ class ServiceProcessControlBrowserTest ui_test_utils::RunMessageLoop(); } - void DisconnectAndWaitForShutdown() { + void Disconnect() { // This will delete all instances of ServiceProcessControl and close the IPC // connections. ServiceProcessControlManager::instance()->Shutdown(); process_ = NULL; - WaitForShutdown(); } void WaitForShutdown() { - // We will keep trying every second till we hit the terminate timeout. - // TODO(sanjeevr): Use GetServiceProcessPid() to wait for termination. - // Will do this in a separate CL. - int retries_left = TestTimeouts::wait_for_terminate_timeout_ms()/1000; - MessageLoop::current()->PostDelayedTask( - FROM_HERE, - NewRunnableMethod(this, - &ServiceProcessControlBrowserTest::DoDetectShutdown, - retries_left), - 1000); - ui_test_utils::RunMessageLoop(); - } - - void DoDetectShutdown(int retries_left) { - bool service_is_running = CheckServiceProcessReady(); - if (!retries_left) - EXPECT_FALSE(service_is_running); - if (retries_left && service_is_running) { - retries_left--; - MessageLoop::current()->PostDelayedTask( - FROM_HERE, - NewRunnableMethod(this, - &ServiceProcessControlBrowserTest::DoDetectShutdown, - retries_left), - 1000); - } else { - // Quit the current message loop. - MessageLoop::current()->PostTask(FROM_HERE, - new MessageLoop::QuitTask()); - } + EXPECT_TRUE(base::WaitForSingleProcess( + service_process_handle_, + TestTimeouts::wait_for_terminate_timeout_ms())); } void ProcessControlLaunched() { + base::ProcessId service_pid = GetServiceProcessPid(); + EXPECT_NE(static_cast<base::ProcessId>(0), service_pid); + EXPECT_TRUE(base::OpenProcessHandleWithAccess( + service_pid, + base::kProcessAccessWaitForTermination, + &service_process_handle_)); process()->SetMessageHandler(this); // Quit the current message. MessageLoop::current()->PostTask(FROM_HERE, @@ -95,6 +83,7 @@ class ServiceProcessControlBrowserTest private: ServiceProcessControl* process_; + base::ProcessHandle service_process_handle_; }; #if defined(OS_WIN) @@ -137,7 +126,8 @@ IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, DieOnDisconnect) { LaunchServiceProcessControl(); // Make sure we are connected to the service process. EXPECT_TRUE(process()->is_connected()); - DisconnectAndWaitForShutdown(); + Disconnect(); + WaitForShutdown(); } IN_PROC_BROWSER_TEST_F(ServiceProcessControlBrowserTest, ForceShutdown) { |