diff options
author | achuith@chromium.org <achuith@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-25 18:29:33 +0000 |
---|---|---|
committer | achuith@chromium.org <achuith@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-25 18:29:33 +0000 |
commit | 2421393bedf6a437f30f493c61fa017526e17264 (patch) | |
tree | d3957ff3a8af60e6638b561770e4a3f93cb20475 /chrome/browser | |
parent | 06a76685518bcee5265548047003dd9cfdfb6002 (diff) | |
download | chromium_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.cc | 4 | ||||
-rw-r--r-- | chrome/browser/ui/tests/browser_uitest.cc | 37 | ||||
-rw-r--r-- | chrome/browser/unload_uitest.cc | 12 |
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 \ |