summaryrefslogtreecommitdiffstats
path: root/chrome/test
diff options
context:
space:
mode:
authorhuanr@chromium.org <huanr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-26 20:48:10 +0000
committerhuanr@chromium.org <huanr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-26 20:48:10 +0000
commitb515843ebdf6ddc8bf454d88a353323a62d0f127 (patch)
treef412e9813d763ca828ddc000fe534a2175ee4514 /chrome/test
parent0de6bd3689c9a2790ddb013ca5f761798aafdc40 (diff)
downloadchromium_src-b515843ebdf6ddc8bf454d88a353323a62d0f127.zip
chromium_src-b515843ebdf6ddc8bf454d88a353323a62d0f127.tar.gz
chromium_src-b515843ebdf6ddc8bf454d88a353323a62d0f127.tar.bz2
Retry r15294. The previous two tries caused
a crash spike in ChromeBot. The crash spike is caused by some observers don't remove themselves from notification list after being deleted. The clean up done by pkasting may fix this so I am give this change another try. TEST=None BUG=None Original change description: Close browser window synchronously during UI test tear down. This is an effor to reduce random failure due to browser crash with multiple window open during shutdown. Review URL: http://codereview.chromium.org/113856 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16903 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/test')
-rw-r--r--chrome/test/ui/ui_test.cc24
-rw-r--r--chrome/test/ui/ui_test.h8
2 files changed, 26 insertions, 6 deletions
diff --git a/chrome/test/ui/ui_test.cc b/chrome/test/ui/ui_test.cc
index 5a993db..762f25d 100644
--- a/chrome/test/ui/ui_test.cc
+++ b/chrome/test/ui/ui_test.cc
@@ -410,9 +410,12 @@ void UITest::QuitBrowser() {
#if !defined(OS_LINUX)
for (BrowserVector::iterator iter = browsers.begin();
iter != browsers.end(); ++iter) {
- // Use ApplyAccelerator since it doesn't wait
- (*iter)->ApplyAccelerator(IDC_CLOSE_WINDOW);
+ bool application_closed = false;
+ CloseBrowserWithTimeout(*iter, &application_closed,
+ action_timeout_ms(), NULL);
delete (*iter);
+ if (application_closed)
+ break;
}
#endif
@@ -741,22 +744,31 @@ void UITest::CloseBrowserAsync(BrowserProxy* browser) const {
bool UITest::CloseBrowser(BrowserProxy* browser,
bool* application_closed) const {
+ return CloseBrowserWithTimeout(browser, application_closed,
+ base::kNoTimeout, NULL);
+}
+
+bool UITest::CloseBrowserWithTimeout(BrowserProxy* browser,
+ bool* application_closed,
+ int timeout_ms,
+ bool* is_timeout) const {
DCHECK(application_closed);
if (!browser->is_valid() || !browser->handle())
return false;
bool result = true;
- bool succeeded = server_->Send(new AutomationMsg_CloseBrowser(
- 0, browser->handle(), &result, application_closed));
+ bool succeeded = server_->SendWithTimeout(
+ new AutomationMsg_CloseBrowser(
+ 0, browser->handle(), &result, application_closed),
+ timeout_ms, is_timeout);
if (!succeeded)
return false;
if (*application_closed) {
// Let's wait until the process dies (if it is not gone already).
- bool success = base::WaitForSingleProcess(process_, base::kNoTimeout);
- DCHECK(success);
+ result = base::WaitForSingleProcess(process_, timeout_ms);
}
return result;
diff --git a/chrome/test/ui/ui_test.h b/chrome/test/ui/ui_test.h
index 543f1fd..1196760 100644
--- a/chrome/test/ui/ui_test.h
+++ b/chrome/test/ui/ui_test.h
@@ -201,6 +201,14 @@ class UITest : public testing::Test {
// after the browser process has terminated.
bool CloseBrowser(BrowserProxy* browser, bool* application_closed) const;
+ // Closes the specified browser. Returns true if the browser was closed.
+ // If this was the last browser window, |application_closed| is set to true
+ // and the function returns after the browser process has terminated.
+ // This call blocks on closing until specified timeout_ms is reached. If
+ // timed out, it returns false with is_timeout set to true.
+ bool CloseBrowserWithTimeout(BrowserProxy* browser, bool* application_closed,
+ int timeout_ms, bool* is_timeout) const;
+
// Prints numerical information to stdout in a controlled format, for
// post-processing. |measurement| is a description of the quantity being
// measured, e.g. "vm_peak"; |modifier| is provided as a convenience and