Index: chrome/browser/resources/settings/settings_page/main_page_behavior.js |
diff --git a/chrome/browser/resources/settings/settings_page/main_page_behavior.js b/chrome/browser/resources/settings/settings_page/main_page_behavior.js |
index ad4e84687e280c6d6ff6e910efb27491ee1d34a2..a8723ce554b254874658f76f5688c540012b9699 100644 |
--- a/chrome/browser/resources/settings/settings_page/main_page_behavior.js |
+++ b/chrome/browser/resources/settings/settings_page/main_page_behavior.js |
@@ -3,23 +3,6 @@ |
// found in the LICENSE file. |
/** |
- * Calls |readyTest| repeatedly until it returns true, then calls |
- * |readyCallback|. |
- * @param {function():boolean} readyTest |
- * @param {!Function} readyCallback |
- */ |
-function doWhenReady(readyTest, readyCallback) { |
- // TODO(dschuyler): Determine whether this hack can be removed. |
- // See also: https://github.com/Polymer/polymer/issues/3629 |
- var intervalId = setInterval(function() { |
- if (readyTest()) { |
- clearInterval(intervalId); |
- readyCallback(); |
- } |
- }, 10); |
-} |
- |
-/** |
* Responds to route changes by expanding, collapsing, or scrolling to sections |
* on the page. Expanded sections take up the full height of the container. At |
* most one section should be expanded at any given time. |
@@ -42,20 +25,11 @@ var MainPageBehaviorImpl = { |
* @param {settings.Route} oldRoute |
*/ |
currentRouteChanged: function(newRoute, oldRoute) { |
- if (oldRoute || !newRoute.section) { |
+ // Allow the page to load before expanding the section. |
+ if (!oldRoute) |
+ setTimeout(this.tryTransitionToSection_.bind(this)); |
+ else |
this.tryTransitionToSection_(); |
- return; |
- } |
- |
- // Wait for the page to really be ready before expanding or scrolling to the |
- // section. TODO(michaelpg): Remove this workaround with a global workaround |
- // for crbug.com/638074. |
- doWhenReady(function() { |
- if (newRoute != settings.getCurrentRoute()) |
- return; |
- var section = this.getSection(newRoute.section); |
- return section && (!newRoute.isSubpage() || section.canAnimateExpand()); |
- }.bind(this), this.tryTransitionToSection_.bind(this)); |
}, |
/** |
@@ -91,6 +65,10 @@ var MainPageBehaviorImpl = { |
} |
} else if (currentSection) { |
// Expand the section into a subpage or scroll to it on the main page. |
+ if (!currentSection.clientHeight) { |
+ setTimeout(this.tryTransitionToSection_.bind(this)); |
+ return; |
+ } |
if (currentRoute.isSubpage()) |
promise = this.expandSection_(currentSection); |
else |
@@ -212,15 +190,15 @@ var MainPageBehaviorImpl = { |
return new Promise(function(resolve, reject) { |
// Wait for the other sections to show up so we can scroll properly. |
setTimeout(function() { |
- var newSection = settings.getCurrentRoute().section && |
- this.getSection(settings.getCurrentRoute().section); |
+ var currentRoute = settings.getCurrentRoute(); |
+ var newSection = |
+ currentRoute.section && this.getSection(currentRoute.section); |
- // Scroll to the section if indicated by the route. TODO(michaelpg): Is |
- // this the right behavior, or should we return to the previous scroll |
- // position? |
+ // Scroll to the new section if it's on this page. If the route has no |
+ // section (e.g., a root page), return to the original position. |
if (newSection) |
newSection.scrollIntoView(); |
- else |
+ else if (!currentRoute.section) |
this.scroller.scrollTop = this.origScrollTop_; |
this.currentAnimation_ = section.animateCollapse( |
@@ -243,17 +221,10 @@ var MainPageBehaviorImpl = { |
/** @private */ |
scrollToSection_: function() { |
- doWhenReady( |
- function() { |
- return this.scrollHeight > 0; |
- }.bind(this), |
- function() { |
- // If the current section changes while we are waiting for the page to |
- // be ready, scroll to the newest requested section. |
- var section = this.getSection(settings.getCurrentRoute().section); |
- if (section) |
- section.scrollIntoView(); |
- }.bind(this)); |
+ assert(this.scrollHeight > 0); |
+ var section = this.getSection(settings.getCurrentRoute().section); |
+ assert(section); |
+ section.scrollIntoView(); |
}, |
/** |