| Index: chrome/test/automation/proxy_launcher.cc
|
| ===================================================================
|
| --- chrome/test/automation/proxy_launcher.cc (revision 80485)
|
| +++ chrome/test/automation/proxy_launcher.cc (working copy)
|
| @@ -206,14 +206,13 @@
|
| return;
|
| }
|
|
|
| - base::TimeTicks quit_start = base::TimeTicks::Now();
|
| -
|
| // There's nothing to do here if the browser is not running.
|
| // WARNING: There is a race condition here where the browser may shut down
|
| // after this check but before some later automation call. Your test should
|
| // use WaitForBrowserProcessToQuit() if it intentionally
|
| // causes the browser to shut down.
|
| if (IsBrowserRunning()) {
|
| + base::TimeTicks quit_start = base::TimeTicks::Now();
|
| EXPECT_TRUE(automation()->SetFilteredInet(false));
|
|
|
| if (WINDOW_CLOSE == shutdown_type_) {
|
| @@ -254,24 +253,21 @@
|
| } else {
|
| NOTREACHED() << "Invalid shutdown type " << shutdown_type_;
|
| }
|
| - }
|
|
|
| - // Now, drop the automation IPC channel so that the automation provider in
|
| - // the browser notices and drops its reference to the browser process.
|
| - automation()->Disconnect();
|
| + // Now, drop the automation IPC channel so that the automation provider in
|
| + // the browser notices and drops its reference to the browser process.
|
| + automation()->Disconnect();
|
|
|
| - // Wait for the browser process to quit. It should quit once all tabs have
|
| - // been closed.
|
| - int exit_code = -1;
|
| - if (WaitForBrowserProcessToQuit(
|
| - TestTimeouts::wait_for_terminate_timeout_ms(), &exit_code)) {
|
| - EXPECT_EQ(0, exit_code); // Expect a clean shutdown.
|
| - } else {
|
| - // We need to force the browser to quit because it didn't quit fast
|
| - // enough. Take no chance and kill every chrome processes.
|
| - CleanupAppProcesses();
|
| + // Wait for the browser process to quit. It should quit once all tabs have
|
| + // been closed.
|
| + if (!WaitForBrowserProcessToQuit(
|
| + TestTimeouts::wait_for_terminate_timeout_ms())) {
|
| + // We need to force the browser to quit because it didn't quit fast
|
| + // enough. Take no chance and kill every chrome processes.
|
| + CleanupAppProcesses();
|
| + }
|
| + browser_quit_time_ = base::TimeTicks::Now() - quit_start;
|
| }
|
| - browser_quit_time_ = base::TimeTicks::Now() - quit_start;
|
|
|
| // Don't forget to close the handle
|
| base::CloseProcessHandle(process_);
|
| @@ -280,9 +276,8 @@
|
| }
|
|
|
| void ProxyLauncher::TerminateBrowser() {
|
| - base::TimeTicks quit_start = base::TimeTicks::Now();
|
| -
|
| if (IsBrowserRunning()) {
|
| + base::TimeTicks quit_start = base::TimeTicks::Now();
|
| EXPECT_TRUE(automation()->SetFilteredInet(false));
|
| #if defined(OS_WIN)
|
| scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0));
|
| @@ -297,18 +292,15 @@
|
| #if defined(OS_POSIX)
|
| EXPECT_EQ(kill(process_, SIGTERM), 0);
|
| #endif // OS_POSIX
|
| - }
|
|
|
| - int exit_code = 0;
|
| - if (WaitForBrowserProcessToQuit(
|
| - TestTimeouts::wait_for_terminate_timeout_ms(), &exit_code)) {
|
| - EXPECT_EQ(0, exit_code); // Expect a clean shutdown.
|
| - } else {
|
| - // We need to force the browser to quit because it didn't quit fast
|
| - // enough. Take no chance and kill every chrome processes.
|
| - CleanupAppProcesses();
|
| + if (!WaitForBrowserProcessToQuit(
|
| + TestTimeouts::wait_for_terminate_timeout_ms())) {
|
| + // We need to force the browser to quit because it didn't quit fast
|
| + // enough. Take no chance and kill every chrome processes.
|
| + CleanupAppProcesses();
|
| + }
|
| + browser_quit_time_ = base::TimeTicks::Now() - quit_start;
|
| }
|
| - browser_quit_time_ = base::TimeTicks::Now() - quit_start;
|
|
|
| // Don't forget to close the handle
|
| base::CloseProcessHandle(process_);
|
| @@ -335,20 +327,21 @@
|
| TerminateAllChromeProcesses(process_id_);
|
| }
|
|
|
| -bool ProxyLauncher::WaitForBrowserProcessToQuit(int timeout, int* exit_code) {
|
| +bool ProxyLauncher::WaitForBrowserProcessToQuit(int timeout) {
|
| #ifdef WAIT_FOR_DEBUGGER_ON_OPEN
|
| timeout = 500000;
|
| #endif
|
| - return base::WaitForExitCodeWithTimeout(process_, exit_code, timeout);
|
| + return base::WaitForSingleProcess(process_, timeout);
|
| }
|
|
|
| bool ProxyLauncher::IsBrowserRunning() {
|
| - // Send a simple message to the browser. If it comes back, the browser
|
| - // must be alive.
|
| - int window_count;
|
| - return automation_proxy_->GetBrowserWindowCount(&window_count);
|
| + return CrashAwareSleep(0);
|
| }
|
|
|
| +bool ProxyLauncher::CrashAwareSleep(int timeout_ms) {
|
| + return base::CrashAwareSleep(process_, timeout_ms);
|
| +}
|
| +
|
| void ProxyLauncher::PrepareTestCommandline(CommandLine* command_line,
|
| bool include_testing_id) {
|
| // Propagate commandline settings from test_launcher_utils.
|
|
|