summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorachuith@chromium.org <achuith@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-25 18:29:33 +0000
committerachuith@chromium.org <achuith@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-25 18:29:33 +0000
commit2421393bedf6a437f30f493c61fa017526e17264 (patch)
treed3957ff3a8af60e6638b561770e4a3f93cb20475 /chrome/browser
parent06a76685518bcee5265548047003dd9cfdfb6002 (diff)
downloadchromium_src-2421393bedf6a437f30f493c61fa017526e17264.zip
chromium_src-2421393bedf6a437f30f493c61fa017526e17264.tar.gz
chromium_src-2421393bedf6a437f30f493c61fa017526e17264.tar.bz2
UI test for browser termination with beforeunload handler and some cleanup.
This test will pass only after http://codereview.chromium.org/8262009 lands. * Rename CloseAllBrowsersAndExitPosted to ExitPosted. * Add VerifyCleanExit to UITest, code which existed in BrowserTest.SessionEnd. * Move ui tests in browser_uitest.cc to non-anonymous namespace; the test names need to be unique. * Create UnloadTest.BrowserTerminateBeforeUnload which sets up onbeforeunload handler and sends a SIGTERM. BUG=chromium-os:21961 TEST=UnloadTest.BrowserTerminateBeforeUnload passes. Review URL: http://codereview.chromium.org/8376001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@107163 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/chrome_browser_main_posix.cc4
-rw-r--r--chrome/browser/ui/tests/browser_uitest.cc37
-rw-r--r--chrome/browser/unload_uitest.cc12
3 files changed, 20 insertions, 33 deletions
diff --git a/chrome/browser/chrome_browser_main_posix.cc b/chrome/browser/chrome_browser_main_posix.cc
index c7ea527..a733606 100644
--- a/chrome/browser/chrome_browser_main_posix.cc
+++ b/chrome/browser/chrome_browser_main_posix.cc
@@ -105,7 +105,7 @@ NOINLINE void ShutdownFDClosedError() {
sleep(UINT_MAX);
}
-NOINLINE void CloseAllBrowsersAndExitPosted() {
+NOINLINE void ExitPosted() {
// Ensure function isn't optimized away.
asm("");
sleep(UINT_MAX);
@@ -161,7 +161,7 @@ void ShutdownDetector::ThreadMain() {
RAW_LOG(WARNING, "Still here, exiting really ungracefully.");
_exit(signal | (1 << 7));
}
- CloseAllBrowsersAndExitPosted();
+ ExitPosted();
}
// Sets the file descriptor soft limit to |max_descriptors| or the OS hard
diff --git a/chrome/browser/ui/tests/browser_uitest.cc b/chrome/browser/ui/tests/browser_uitest.cc
index 5819f0a..d038158 100644
--- a/chrome/browser/ui/tests/browser_uitest.cc
+++ b/chrome/browser/ui/tests/browser_uitest.cc
@@ -15,7 +15,6 @@
#include "chrome/browser/ui/browser.h"
#include "chrome/common/chrome_constants.h"
#include "chrome/common/chrome_switches.h"
-#include "chrome/common/pref_names.h"
#include "chrome/test/automation/automation_proxy.h"
#include "chrome/test/automation/browser_proxy.h"
#include "chrome/test/automation/tab_proxy.h"
@@ -39,39 +38,17 @@ class VisibleBrowserTest : public UITest {
}
};
-#if defined(OS_WIN)
-// The browser should quit quickly if it receives a WM_ENDSESSION message.
-TEST_F(BrowserTest, WindowsSessionEnd) {
-#elif defined(OS_POSIX)
-// The browser should quit gracefully and quickly if it receives a SIGTERM.
-TEST_F(BrowserTest, PosixSessionEnd) {
-#endif
+} // namespace
+
+// The browser should quit quickly if it receives a WM_ENDSESSION message
+// on Windows, or SIGTERM on posix.
+TEST_F(BrowserTest, SessionEnd) {
FilePath test_file(test_data_directory_);
test_file = test_file.AppendASCII("title1.html");
NavigateToURL(net::FilePathToFileURL(test_file));
TerminateBrowser();
-
- // Make sure the UMA metrics say we didn't crash.
- scoped_ptr<DictionaryValue> local_prefs(GetLocalState());
- bool exited_cleanly;
- ASSERT_TRUE(local_prefs.get());
- ASSERT_TRUE(local_prefs->GetBoolean(prefs::kStabilityExitedCleanly,
- &exited_cleanly));
- ASSERT_TRUE(exited_cleanly);
-
- // And that session end was successful.
- bool session_end_completed;
- ASSERT_TRUE(local_prefs->GetBoolean(prefs::kStabilitySessionEndCompleted,
- &session_end_completed));
- ASSERT_TRUE(session_end_completed);
-
- // Make sure session restore says we didn't crash.
- scoped_ptr<DictionaryValue> profile_prefs(GetDefaultProfilePreferences());
- ASSERT_TRUE(profile_prefs.get());
- ASSERT_TRUE(profile_prefs->GetBoolean(prefs::kSessionExitedCleanly,
- &exited_cleanly));
- ASSERT_TRUE(exited_cleanly);
+ VerifyCleanExit();
}
// WindowOpenClose is flaky on ChromeOS and fails consistently on linux views.
@@ -248,8 +225,6 @@ TEST_F(NoStartupWindowTest, NoStartupWindowBasicTest) {
EXPECT_EQ(1, window_count);
}
-} // namespace
-
// This test needs to be placed outside the anonymouse namespace because we
// need to access private type of Browser.
class AppModeTest : public UITest {
diff --git a/chrome/browser/unload_uitest.cc b/chrome/browser/unload_uitest.cc
index 95e869b..2056be0 100644
--- a/chrome/browser/unload_uitest.cc
+++ b/chrome/browser/unload_uitest.cc
@@ -315,6 +315,18 @@ TEST_F(UnloadTest, BrowserCloseBeforeUnloadCancel) {
EXPECT_EQ(0, exit_code); // Expect a clean shutdown.
}
+// Tests terminating the browser with a beforeunload handler.
+// Currently only ChromeOS shuts down gracefully.
+#if defined(OS_CHROMEOS)
+TEST_F(UnloadTest, BrowserTerminateBeforeUnload) {
+ scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0));
+ ASSERT_TRUE(browser.get());
+ NavigateToDataURL(BEFORE_UNLOAD_HTML, L"beforeunload");
+ TerminateBrowser();
+ VerifyCleanExit();
+}
+#endif
+
#if defined(OS_LINUX)
// Fails sometimes on Linux valgrind. http://crbug.com/45675
#define MAYBE_BrowserCloseWithInnerFocusedFrame \