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 207870de836c56230eebf82cf9ac933d9fabe641..4b6442c44c82c15ddccf7898de684603d1012755 100644 |
--- a/chrome/browser/resources/settings/settings_page/main_page_behavior.js |
+++ b/chrome/browser/resources/settings/settings_page/main_page_behavior.js |
@@ -7,22 +7,20 @@ var EASING_FUNCTION = 'cubic-bezier(0.4, 0, 0.2, 1)'; |
var EXPAND_DURATION = 350; |
/** |
- * Workaround for scrolling an element into view when using Polymer. |
- * @param {function():Element} containerCallback Return parent of element. |
- * @param {function():Element} elementCallback Return element to scroll to. |
+ * Calls |readyTest| repeatedly until it returns true, then calls |
+ * |readyCallback|. |
+ * @param {function():boolean} readyTest |
+ * @param {!Function} readyCallback |
*/ |
-function scrollWhenReady(containerCallback, elementCallback) { |
- // TODO(dschuyler): Determine whether this setTimeout can be removed. |
+function doWhenReady(readyTest, readyCallback) { |
+ // TODO(dschuyler): Determine whether this hack can be removed. |
// See also: https://github.com/Polymer/polymer/issues/3629 |
- setTimeout(function pollForScrollHeight() { |
- var container = containerCallback(); |
- if (!container || container.scrollHeight == 0) { |
- setTimeout(pollForScrollHeight.bind(this), 10); |
- return; |
+ var intervalId = setInterval(function() { |
+ if (readyTest()) { |
+ clearInterval(intervalId); |
+ readyCallback(); |
} |
- |
- elementCallback().scrollIntoView(); |
- }.bind(this)); |
+ }, 10); |
} |
/** |
@@ -369,14 +367,14 @@ var RoutableBehaviorImpl = { |
/** @private */ |
scrollToSection_: function() { |
- scrollWhenReady( |
+ doWhenReady( |
function() { |
- return this; |
+ 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. |
- return this.getSection_(this.currentRoute.section); |
+ this.getSection_(this.currentRoute.section).scrollIntoView(); |
}.bind(this)); |
}, |