diff options
author | mmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-04 15:23:26 +0000 |
---|---|---|
committer | mmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-04 15:23:26 +0000 |
commit | 809c162f181c74328e513ca796b917058851e51f (patch) | |
tree | ac80b4586166d40e78fc877430776fb17aeb0538 /chrome/test | |
parent | aa29f9abb1859cb56fa0012f11beecdd27800feb (diff) | |
download | chromium_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')
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); + |