summaryrefslogtreecommitdiffstats
path: root/chrome/test
diff options
context:
space:
mode:
authorojan@google.com <ojan@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-11-06 01:18:56 +0000
committerojan@google.com <ojan@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-11-06 01:18:56 +0000
commitd878bab389753cb876231717217a7e470b5a261f (patch)
tree1f806e2126df04174e396755994ad9f2eec87c7c /chrome/test
parentdcc8f1c678af98247adc7a056ace7e6c145ed189 (diff)
downloadchromium_src-d878bab389753cb876231717217a7e470b5a261f.zip
chromium_src-d878bab389753cb876231717217a7e470b5a261f.tar.gz
chromium_src-d878bab389753cb876231717217a7e470b5a261f.tar.bz2
Bandaid patch so that we continue with crosssite navigations instead of closing the tab if the beforeunload /unload handler hangs. This patch does the right user-visible behavior, but I'm not a huge fan of the plumbing necessary to make it work. Totally open to cleanup suggestions.
There's also currently one bug that I haven't been able to pinpoint in the UI test. It only treats the first UI test of the four that I run as a cross-site navigation. No matter which test I run first. I wonder if there is some state I should be setting/clearing before/after each test run? Also there's a DHECK that we hit that the UI test exposed. I 'm not sure it's a case that a user could actually hit though and it's not new with this code, so I added a TODO. Can I get help from a mac person on adding the UI test to the xcode project? BUG=3198 Review URL: http://codereview.chromium.org/8920 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@4855 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/test')
-rw-r--r--chrome/test/data/unload/beforeunloadlooping.html12
-rw-r--r--chrome/test/data/unload/nolisteners.html8
-rw-r--r--chrome/test/data/unload/unload.html3
-rw-r--r--chrome/test/data/unload/unloadlooping.html3
-rw-r--r--chrome/test/data/unload/unloadloopingalert.html3
-rw-r--r--chrome/test/data/unload/unloadloopingtwosecondsalert.html3
-rw-r--r--chrome/test/ui/ui_test.cc9
-rw-r--r--chrome/test/ui/ui_test.h5
-rw-r--r--chrome/test/ui/ui_tests.vcproj8
9 files changed, 53 insertions, 1 deletions
diff --git a/chrome/test/data/unload/beforeunloadlooping.html b/chrome/test/data/unload/beforeunloadlooping.html
new file mode 100644
index 0000000..ca82c87
--- /dev/null
+++ b/chrome/test/data/unload/beforeunloadlooping.html
@@ -0,0 +1,12 @@
+<html>
+<head>
+<title>beforeunloadlooping</title>
+</head>
+<body>
+<script>
+window.onbeforeunload = function(e) {
+ while(true) {}
+}
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/chrome/test/data/unload/nolisteners.html b/chrome/test/data/unload/nolisteners.html
index 42682b4..ea59143 100644
--- a/chrome/test/data/unload/nolisteners.html
+++ b/chrome/test/data/unload/nolisteners.html
@@ -1 +1,7 @@
-<html><body></body></html> \ No newline at end of file
+<html>
+<head>
+<title>nolisteners</title>
+</head>
+<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
index 4ce7f78..eb34941 100644
--- a/chrome/test/data/unload/unload.html
+++ b/chrome/test/data/unload/unload.html
@@ -1,4 +1,7 @@
<html>
+<head>
+<title>unload</title>
+</head>
<body>
<script>
window.onunload = function(e) {
diff --git a/chrome/test/data/unload/unloadlooping.html b/chrome/test/data/unload/unloadlooping.html
index 134ce30..443b99a 100644
--- a/chrome/test/data/unload/unloadlooping.html
+++ b/chrome/test/data/unload/unloadlooping.html
@@ -1,4 +1,7 @@
<html>
+<head>
+<title>unloadlooping</title>
+</head>
<body>
<script>
window.onunload = function(e) {
diff --git a/chrome/test/data/unload/unloadloopingalert.html b/chrome/test/data/unload/unloadloopingalert.html
index dacd9b5..c43e295 100644
--- a/chrome/test/data/unload/unloadloopingalert.html
+++ b/chrome/test/data/unload/unloadloopingalert.html
@@ -1,4 +1,7 @@
<html>
+<head>
+<title>unloadloopingalert</title>
+</head>
<body>
<script>
window.onunload = function(e) {
diff --git a/chrome/test/data/unload/unloadloopingtwosecondsalert.html b/chrome/test/data/unload/unloadloopingtwosecondsalert.html
index ec796f9..8a1aa36 100644
--- a/chrome/test/data/unload/unloadloopingtwosecondsalert.html
+++ b/chrome/test/data/unload/unloadloopingtwosecondsalert.html
@@ -1,4 +1,7 @@
<html>
+<head>
+<title>unloadloopingtwosecondsalert</title>
+</head>
<body>
<script>
window.onunload = function(e) {
diff --git a/chrome/test/ui/ui_test.cc b/chrome/test/ui/ui_test.cc
index 322f02c..f4371d2 100644
--- a/chrome/test/ui/ui_test.cc
+++ b/chrome/test/ui/ui_test.cc
@@ -342,6 +342,15 @@ TabProxy* UITest::GetActiveTab() {
return window_proxy->GetTab(active_tab_index);
}
+void UITest::NavigateToURLAsync(const GURL& url) {
+ scoped_ptr<TabProxy> tab_proxy(GetActiveTab());
+ ASSERT_TRUE(tab_proxy.get());
+ if (!tab_proxy.get())
+ return;
+
+ tab_proxy->NavigateToURLAsync(url);
+}
+
void UITest::NavigateToURL(const GURL& url) {
scoped_ptr<TabProxy> tab_proxy(GetActiveTab());
ASSERT_TRUE(tab_proxy.get());
diff --git a/chrome/test/ui/ui_test.h b/chrome/test/ui/ui_test.h
index f575496..66a103c 100644
--- a/chrome/test/ui/ui_test.h
+++ b/chrome/test/ui/ui_test.h
@@ -67,6 +67,11 @@ class UITest : public testing::Test {
// Exits out browser instance.
void QuitBrowser();
+ // Tells the browser to navigato to the givne URL in the active tab
+ // of the first app window.
+ // Does not wait for the navigation to complete to return.
+ void NavigateToURLAsync(const GURL& url);
+
// Tells the browser to navigate to the given URL in the active tab
// of the first app window.
// This method doesn't return until the navigation is complete.
diff --git a/chrome/test/ui/ui_tests.vcproj b/chrome/test/ui/ui_tests.vcproj
index 5bfe40e..067b232 100644
--- a/chrome/test/ui/ui_tests.vcproj
+++ b/chrome/test/ui/ui_tests.vcproj
@@ -323,6 +323,14 @@
</File>
</Filter>
<Filter
+ Name="TestUnload"
+ >
+ <File
+ RelativePath="..\..\browser\unload_uitest.cc"
+ >
+ </File>
+ </Filter>
+ <Filter
Name="TestAuthentication"
>
<File