summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorojan@google.com <ojan@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-08-14 21:07:14 +0000
committerojan@google.com <ojan@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-08-14 21:07:14 +0000
commitebac9eccb3e482f2c43f00fa6e102420d7628f9f (patch)
treecc9fb6bf92462ac880773916913a2a75769605bb
parenta193ee08c0a0e600f1cf2fd35308b8a51472abda (diff)
downloadchromium_src-ebac9eccb3e482f2c43f00fa6e102420d7628f9f.zip
chromium_src-ebac9eccb3e482f2c43f00fa6e102420d7628f9f.tar.gz
chromium_src-ebac9eccb3e482f2c43f00fa6e102420d7628f9f.tar.bz2
A first stab at testing browser close behavior when there are unload listeners
registered. There are still a ton of tests to add as listed in the TODO, but I figured it would be good to get this reviewed first before delving too far into figuring out how to deal with beforeunload dialogs. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@890 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/browser_uitest.cc47
-rw-r--r--chrome/test/data/unload/nolisteners.html1
-rw-r--r--chrome/test/data/unload/unload.html8
-rw-r--r--chrome/test/data/unload/unloadlooping.html9
-rw-r--r--chrome/test/data/unload/unloadloopingalert.html10
-rw-r--r--chrome/test/data/unload/unloadloopingtwosecondsalert.html11
6 files changed, 86 insertions, 0 deletions
diff --git a/chrome/browser/browser_uitest.cc b/chrome/browser/browser_uitest.cc
index 470d2a5..84d01430 100644
--- a/chrome/browser/browser_uitest.cc
+++ b/chrome/browser/browser_uitest.cc
@@ -72,6 +72,20 @@ class BrowserTest : public UITest {
::GetWindowText(window_handle, WriteInto(&result, length), length);
return result;
}
+
+ void LoadUnloadPageAndQuitBrowser(const std::wstring& test_filename) {
+ scoped_ptr<BrowserProxy> browser(automation()->GetBrowserWindow(0));
+
+ std::wstring test_file = test_data_directory_;
+ file_util::AppendToPath(&test_file, L"unload");
+ file_util::AppendToPath(&test_file, test_filename);
+
+ NavigateToURL(net::FilePathToFileURL(test_file));
+ Sleep(kWaitForActionMsec);
+
+ bool application_closed = false;
+ EXPECT_TRUE(CloseBrowser(browser.get(), &application_closed));
+ }
};
class VisibleBrowserTest : public UITest {
@@ -110,6 +124,39 @@ TEST_F(BrowserTest, Title) {
EXPECT_EQ(test_title, GetActiveTabTitle());
}
+// Tests closing the browser on a page with no unload listeners registered.
+TEST_F(BrowserTest, BrowserCloseNoUnloadListeners) {
+ LoadUnloadPageAndQuitBrowser(L"nolisteners.html");
+}
+
+// Tests closing the browser on a page with an unload listener registered.
+TEST_F(BrowserTest, BrowserCloseUnload) {
+ LoadUnloadPageAndQuitBrowser(L"unload.html");
+}
+
+// Tests closing the browser on a page with an unload listener registered where
+// the unload handler has an infinite loop.
+TEST_F(BrowserTest, BrowserCloseUnloadLooping) {
+ LoadUnloadPageAndQuitBrowser(L"unloadlooping.html");
+}
+
+// Tests closing the browser on a page with an unload listener registered where
+// the unload handler has an infinite loop followed by an alert.
+TEST_F(BrowserTest, BrowserCloseUnloadLoopingAlert) {
+ LoadUnloadPageAndQuitBrowser(L"unloadloopingalert.html");
+}
+
+// Tests closing the browser on a page with an unload listener registered where
+// the unload handler has an 2 second long loop followed by an alert.
+TEST_F(BrowserTest, BrowserCloseUnloadLoopingTwoSecondsAlert) {
+ LoadUnloadPageAndQuitBrowser(L"unloadloopingtwosecondsalert.html");
+}
+
+// TODO(ojan): Test popping up an alert in the unload handler and test
+// beforeunload. In addition add tests where we open all of these pages
+// in the browser and then close it, as well as having two windows and
+// closing only one of them.
+
// The browser should quit quickly if it receives a WM_ENDSESSION message.
TEST_F(BrowserTest, WindowsSessionEnd) {
std::wstring test_file = test_data_directory_;
diff --git a/chrome/test/data/unload/nolisteners.html b/chrome/test/data/unload/nolisteners.html
new file mode 100644
index 0000000..42682b4
--- /dev/null
+++ b/chrome/test/data/unload/nolisteners.html
@@ -0,0 +1 @@
+<html><body></body></html> \ No newline at end of file
diff --git a/chrome/test/data/unload/unload.html b/chrome/test/data/unload/unload.html
new file mode 100644
index 0000000..4ce7f78
--- /dev/null
+++ b/chrome/test/data/unload/unload.html
@@ -0,0 +1,8 @@
+<html>
+<body>
+<script>
+window.onunload = function(e) {
+}
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/chrome/test/data/unload/unloadlooping.html b/chrome/test/data/unload/unloadlooping.html
new file mode 100644
index 0000000..134ce30
--- /dev/null
+++ b/chrome/test/data/unload/unloadlooping.html
@@ -0,0 +1,9 @@
+<html>
+<body>
+<script>
+window.onunload = function(e) {
+ while(true) {}
+}
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/chrome/test/data/unload/unloadloopingalert.html b/chrome/test/data/unload/unloadloopingalert.html
new file mode 100644
index 0000000..dacd9b5
--- /dev/null
+++ b/chrome/test/data/unload/unloadloopingalert.html
@@ -0,0 +1,10 @@
+<html>
+<body>
+<script>
+window.onunload = function(e) {
+ while(true) {}
+ alert('foo');
+}
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/chrome/test/data/unload/unloadloopingtwosecondsalert.html b/chrome/test/data/unload/unloadloopingtwosecondsalert.html
new file mode 100644
index 0000000..ec796f9
--- /dev/null
+++ b/chrome/test/data/unload/unloadloopingtwosecondsalert.html
@@ -0,0 +1,11 @@
+<html>
+<body>
+<script>
+window.onunload = function(e) {
+ var start = new Date().getTime();
+ while(new Date().getTime() - start < 2000) {}
+ alert('foo');
+}
+</script>
+</body>
+</html> \ No newline at end of file