diff options
author | dbeam@chromium.org <dbeam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-26 12:43:51 +0000 |
---|---|---|
committer | dbeam@chromium.org <dbeam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-26 12:43:51 +0000 |
commit | 36268d2915b84fdd33490594d7f552c9fc3d3556 (patch) | |
tree | ca8e21743a1ff2903c412bf5c8c645887d6a66b9 | |
parent | c37f2ccc382083f728010fe20f0c0c6a73dc4d6d (diff) | |
download | chromium_src-36268d2915b84fdd33490594d7f552c9fc3d3556.zip chromium_src-36268d2915b84fdd33490594d7f552c9fc3d3556.tar.gz chromium_src-36268d2915b84fdd33490594d7f552c9fc3d3556.tar.bz2 |
Fix settings overlay "shifting" when shown.
aboxhall@s r228479 simplified |setOverlayVisible_| but I need to re-complicate
it as |onVisibilityChanged_| must be called before |fadeCompleted_| to ensure
the right sizes of frozen pages are calculated/set before transitions end.
R=aboxhall@chromium.org
BUG=307388
TEST=OptionsWebUINavigationTest.OverlayShowDoesntShift, visual (see bug)
Review URL: https://codereview.chromium.org/42393002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@231199 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/resources/options/options_page.js | 6 | ||||
-rw-r--r-- | chrome/browser/ui/webui/options/options_browsertest.js | 20 |
2 files changed, 25 insertions, 1 deletions
diff --git a/chrome/browser/resources/options/options_page.js b/chrome/browser/resources/options/options_page.js index c0a1787..8ed9f3b 100644 --- a/chrome/browser/resources/options/options_page.js +++ b/chrome/browser/resources/options/options_page.js @@ -907,12 +907,14 @@ cr.define('options', function() { true); } container.classList.remove('transparent'); + this.onVisibilityChanged_(); } else { // Kick change events for text fields. if (pageDiv.contains(document.activeElement)) document.activeElement.blur(); container.classList.add('transparent'); } + if (loading) this.fadeCompleted_(); }, @@ -925,13 +927,15 @@ cr.define('options', function() { if (this.container.classList.contains('transparent')) { this.pageDiv.hidden = true; this.container.hidden = true; + if (this.parentPage) this.parentPage.pageDiv.parentElement.removeAttribute('aria-hidden'); if (this.nestingLevel == 1) uber.invokeMethodOnParent('stopInterceptingEvents'); + + this.onVisibilityChanged_(); } - this.onVisibilityChanged_(); }, /** diff --git a/chrome/browser/ui/webui/options/options_browsertest.js b/chrome/browser/ui/webui/options/options_browsertest.js index 2acef84..0a7115e1 100644 --- a/chrome/browser/ui/webui/options/options_browsertest.js +++ b/chrome/browser/ui/webui/options/options_browsertest.js @@ -668,3 +668,23 @@ TEST_F('OptionsWebUINavigationTest', 'OverlayBackToUnrelated', function() { }); }); }); + +// An overlay's position should remain the same as it shows. +TEST_F('OptionsWebUINavigationTest', 'OverlayShowDoesntShift', function() { + var searchEngineOverlay = $('search-engine-manager-page'); + var frozenPages = document.getElementsByClassName('frozen'); // Gets updated. + expectEquals(0, frozenPages.length); + + document.addEventListener('webkitTransitionEnd', function(e) { + if (e.target != searchEngineOverlay) + return; + + assertFalse(searchEngineOverlay.classList.contains('transparent')); + expectEquals(numFrozenPages, frozenPages.length); + testDone(); + }); + + OptionsPage.navigateToPage('searchEngines'); + var numFrozenPages = frozenPages.length; + expectGT(numFrozenPages, 0); +}); |