| Index: chrome/test/data/webui/settings/basic_page_browsertest.js
|
| diff --git a/chrome/test/data/webui/settings/basic_page_browsertest.js b/chrome/test/data/webui/settings/basic_page_browsertest.js
|
| index 9fde2be0af3303f876535a5e2aadf5c362832897..8e1b2d90ffd8a434b6b1933a540d1ac01f8df165 100644
|
| --- a/chrome/test/data/webui/settings/basic_page_browsertest.js
|
| +++ b/chrome/test/data/webui/settings/basic_page_browsertest.js
|
| @@ -13,7 +13,12 @@ GEN_INCLUDE(['settings_page_browsertest.js']);
|
| function SettingsBasicPageBrowserTest() {}
|
|
|
| SettingsBasicPageBrowserTest.prototype = {
|
| - __proto__: SettingsPageBrowserTest.prototype
|
| + __proto__: SettingsPageBrowserTest.prototype,
|
| +
|
| + /** @override */
|
| + extraLibraries: SettingsPageBrowserTest.prototype.extraLibraries.concat([
|
| + 'test_browser_proxy.js',
|
| + ]),
|
| };
|
|
|
| // Times out on debug builders and may time out on memory bots because
|
| @@ -30,6 +35,49 @@ TEST_F('SettingsBasicPageBrowserTest', 'MAYBE_Load', function() {
|
| // and test() will be a Mocha 'Suite' or 'Test' instance.
|
| var self = this;
|
|
|
| + /**
|
| + * This fake SearchManager just hides and re-displays the sections on search.
|
| + *
|
| + * @implements {SearchManager}
|
| + * @extends {settings.TestBrowserProxy}
|
| + */
|
| + var TestSearchManager = function() {
|
| + settings.TestBrowserProxy.call(this, [
|
| + 'search',
|
| + ]);
|
| +
|
| + /** @private {?settings.SearchRequest} */
|
| + this.searchRequest_ = null;
|
| + }
|
| +
|
| + TestSearchManager.prototype = {
|
| + __proto__: settings.TestBrowserProxy.prototype,
|
| +
|
| + /** @override */
|
| + search: function(text, page) {
|
| + if (this.searchRequest_ == null || !this.searchRequest_.isSame(text)) {
|
| + this.searchRequest_ = new settings.SearchRequest(text);
|
| + this.searchRequest_.finished = true;
|
| + this.searchRequest_.updateMatches(false);
|
| +
|
| + // The search much be resolved asynchronously just like the real
|
| + // SearchManager. Otherwise, the race condition doesn't manifest.
|
| + setTimeout(function() {
|
| + // All the sections must be hidden by the TestSearchManager, just like
|
| + // the real SearchManager. Otherwise, the bug doesn't manifest.
|
| + var sections =
|
| + Polymer.dom().querySelectorAll('* /deep/ settings-section');
|
| + for (var i = 0; i < sections.length; i++)
|
| + sections[i].hiddenBySearch = !!text;
|
| +
|
| + this.searchRequest_.resolver.resolve(this.searchRequest_);
|
| + this.methodCalled('search', text);
|
| + }.bind(this), 0);
|
| + }
|
| + return this.searchRequest_.resolver.promise;
|
| + },
|
| + };
|
| +
|
| // Register mocha tests.
|
| suite('SettingsPage', function() {
|
| test('load page', function() {
|
| @@ -81,6 +129,33 @@ TEST_F('SettingsBasicPageBrowserTest', 'MAYBE_Load', function() {
|
| assertEquals(0, page.scroller.scrollTop);
|
| });
|
| });
|
| +
|
| + test('scroll to section after exiting search', function() {
|
| + var searchManager = new TestSearchManager();
|
| + settings.setSearchManagerForTesting(searchManager);
|
| +
|
| + settings.navigateTo(settings.Route.BASIC,
|
| + new URLSearchParams(`search=foobar`),
|
| + /* removeSearch */ false);
|
| + return searchManager.whenCalled('search').then(function() {
|
| + return new Promise(function(resolve) {
|
| + settings.navigateTo(settings.Route.ON_STARTUP,
|
| + /* dynamicParams */ null,
|
| + /* removeSearch */ true);
|
| +
|
| + var page = self.getPage('basic');
|
| + assertTrue(!!page);
|
| +
|
| + // Should (after some time) be scrolled to the On Startup section.
|
| + var intervalId = window.setInterval(function() {
|
| + if (page.scroller.scrollTop != 0) {
|
| + window.clearInterval(intervalId);
|
| + resolve();
|
| + }
|
| + }, 55);
|
| + });
|
| + });
|
| + });
|
| });
|
|
|
| // Run all registered tests.
|
|
|