summaryrefslogtreecommitdiffstats
path: root/chrome/test
diff options
context:
space:
mode:
authormmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-04 15:23:26 +0000
committermmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-04 15:23:26 +0000
commit809c162f181c74328e513ca796b917058851e51f (patch)
treeac80b4586166d40e78fc877430776fb17aeb0538 /chrome/test
parentaa29f9abb1859cb56fa0012f11beecdd27800feb (diff)
downloadchromium_src-809c162f181c74328e513ca796b917058851e51f.zip
chromium_src-809c162f181c74328e513ca796b917058851e51f.tar.gz
chromium_src-809c162f181c74328e513ca796b917058851e51f.tar.bz2
Fix extra visible->hidden->visible transition while
prerendering. Was due to re-parenting the prerendered TabContents twice while swapping it in. BUG=85646 TEST=PrerenderBrowserTest.PrerenderVisibility Review URL: http://codereview.chromium.org/8122001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@103899 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/test')
-rw-r--r--chrome/test/data/prerender/prerender_visibility.html54
-rw-r--r--chrome/test/data/prerender/prerender_visibility_hidden.html45
-rw-r--r--chrome/test/data/prerender/prerender_visibility_shared.js24
3 files changed, 57 insertions, 66 deletions
diff --git a/chrome/test/data/prerender/prerender_visibility.html b/chrome/test/data/prerender/prerender_visibility.html
index bb52498..50a6787 100644
--- a/chrome/test/data/prerender/prerender_visibility.html
+++ b/chrome/test/data/prerender/prerender_visibility.html
@@ -5,49 +5,33 @@ This test checks the visibility API when a prerendered page is displayed.
<head>
<title>Prerender Visibility</title>
-<script>
-// Checks visibility state while the page is still loading.
-var loadingStatePassed = document.webkitHidden &&
- document.webkitVisibilityState == 'prerender';
-
-// True if any visibility change event has occurred.
-var visibilityChangeCalled = false;
-
-// True if the last visibility change event set the document's state to visible.
-var visibilityChangePassed = false;
+<script src="prerender_visibility_shared.js"></script>
+<script>
// Checks that no visibility change events have occurred, current visibility
// state is "prerender", and visibility state while the page was loading was
// also "prerender".
function DidPrerenderPass() {
- return !visibilityChangeCalled &&
- loadingStatePassed &&
- document.webkitHidden &&
- 'prerender' == document.webkitVisibilityState;
+ return visibilityStates.length == 1 &&
+ hiddenValues.length == 1 &&
+ visibilityStates[0] == 'prerender' &&
+ hiddenValues[0] == true &&
+ document.webkitVisibilityState == 'prerender' &&
+ document.webkitHidden == true;
}
-function onVisibilityChange(event) {
- // TODO(mmenke): Currently, we get 4 events when a page is shown -
- // hidden -> visible -> hidden -> visible.
- // Once that's fixed, add check to make sure we only have
- // hidden -> visible, or just visible.
- visibilityChangePassed =
- !document.webkitHidden &&
- 'visible' == document.webkitVisibilityState;
- visibilityChangeCalled = true;
-}
-
-document.addEventListener("webkitvisibilitychange",
- onVisibilityChange,
- false);
-
-// Checks that the last visibility change resulted in a visible state, and that
-// the current state is also visible.
+// Checks that we've only had three visibility states:
+// prerender -> hidden -> visible.
+// Also checks current visibility state.
function DidDisplayPass() {
- return visibilityChangeCalled &&
- visibilityChangePassed &&
- !document.webkitHidden &&
- 'visible' == document.webkitVisibilityState;
+ return visibilityStates.length == 3 &&
+ hiddenValues.length == 3 &&
+ visibilityStates[1] == 'hidden' &&
+ hiddenValues[1] == true &&
+ visibilityStates[2] == 'visible' &&
+ hiddenValues[2] == false &&
+ document.webkitVisibilityState == 'visible' &&
+ document.webkitHidden == false;
}
</script>
diff --git a/chrome/test/data/prerender/prerender_visibility_hidden.html b/chrome/test/data/prerender/prerender_visibility_hidden.html
index 090f998..d7b8028 100644
--- a/chrome/test/data/prerender/prerender_visibility_hidden.html
+++ b/chrome/test/data/prerender/prerender_visibility_hidden.html
@@ -6,47 +6,30 @@ being displayed.
<head>
<title>Prerender Visibility Hidden</title>
-<script>
-// Checks visibility state while the page is still loading.
-var loadingStatePassed = document.webkitHidden &&
- document.webkitVisibilityState == 'prerender';
-
-// True if any visibility change event has occurred.
-var visibilityChangeCalled = false;
-
-// True if only one visibility change event has occurred, and that event was the
-// transition to the 'hidden' state.
-var visibilityChangePassed = false;
+<script src="prerender_visibility_shared.js"></script>
+<script>
// Checks that no visibility change events have occurred, current visibility
// state is "prerender", and visibility state while the page was loading was
// also "prerender".
function DidPrerenderPass() {
- return !visibilityChangeCalled &&
- loadingStatePassed &&
- document.webkitHidden &&
- 'prerender' == document.webkitVisibilityState;
+ return visibilityStates.length == 1 &&
+ hiddenValues.length == 1 &&
+ visibilityStates[0] == 'prerender' &&
+ hiddenValues[0] == true &&
+ document.webkitVisibilityState == 'prerender' &&
+ document.webkitHidden == true;
}
-function onVisibilityChange(event) {
- visibilityChangePassed =
- !visibilityChangeCalled &&
- document.webkitHidden &&
- 'hidden' == document.webkitVisibilityState;
- visibilityChangeCalled = true;
-}
-
-document.addEventListener("webkitvisibilitychange",
- onVisibilityChange,
- false);
-
// Checks one and only one visibility change even occurred, and resulted in a
// hidden state, and that current state is also hidden.
function DidDisplayPass() {
- return visibilityChangeCalled &&
- visibilityChangePassed &&
- document.webkitHidden &&
- 'hidden' == document.webkitVisibilityState;
+ return visibilityStates.length == 2 &&
+ hiddenValues.length == 2 &&
+ visibilityStates[1] == 'hidden' &&
+ hiddenValues[1] == true &&
+ document.webkitVisibilityState == 'hidden' &&
+ document.webkitHidden == true;
}
</script>
diff --git a/chrome/test/data/prerender/prerender_visibility_shared.js b/chrome/test/data/prerender/prerender_visibility_shared.js
new file mode 100644
index 0000000..1d82f94
--- /dev/null
+++ b/chrome/test/data/prerender/prerender_visibility_shared.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Code shared by some of the visibility tests. Maintains a list of
+// visibility states, starting with the state when this file was loaded.
+// New states are added on each visibility change event.
+
+// Array of previously observed visibility states.
+var visibilityStates = [document.webkitVisibilityState];
+
+// Array of previously observed hidden values.
+var hiddenValues = [document.webkitHidden];
+
+// Record all visibility changes in corresponding arrays.
+function onVisibilityChange(event) {
+ visibilityStates.push(document.webkitVisibilityState);
+ hiddenValues.push(document.webkitHidden);
+}
+
+document.addEventListener("webkitvisibilitychange",
+ onVisibilityChange,
+ false);
+