Commit c84e3575 authored by stevenjb's avatar stevenjb Committed by Commit bot

Revert of MD Settings: Elim SettingsSubpageBrowsertest and...

Revert of MD Settings: Elim SettingsSubpageBrowsertest and SettingsPageVisibility (patchset #2 id:20001 of https://codereview.chromium.org/2852433003/ )

Reason for revert:
This caused pageVisibility sub-objects to no longer be undefined which (counter intuitively) causes the sub sections to no longer be visible.

There was some discussion about various approaches to fix this here:
https://codereview.chromium.org/2861443003/

However no agreement was reached, so I am reverting this CL.

Original issue's description:
> MD Settings: Elim SettingsSubpageBrowsertest and SettingsPageVisibility
>
> This CL:
> * Removes SettingsSubpageBrowsertest which required extra complexity
>   in the Settings page visibility code and only tested coarse load
>   times of subpages; this testing no longer has much value.
> * Eliminates SettingsPageVisibility which was creating multiple
>   definitions of pageVisibility and generally confusing things.
> * Defines pageVisibility in all cases (not just guest mode). This will
>   allow  the use of dom-if and allows conditional pages
>   (i.e. androidApps) to use the same pageVisibility system. Pages still
>    default to visibile unless explicity set to 'false'.
>
> BUG=709442
> CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:closure_compilation
>
> Review-Url: https://codereview.chromium.org/2852433003
> Cr-Commit-Position: refs/heads/master@{#468702}
> Committed: https://chromium.googlesource.com/chromium/src/+/1362453f54271dc1036fc104a01cad436c3da26c

TBR=dpapad@chromium.org,hcarmona@chromium.org,michaelpg@chromium.org
# Not skipping CQ checks because original CL landed more than 1 days ago.
BUG=709442

Review-Url: https://codereview.chromium.org/2866463002
Cr-Commit-Position: refs/heads/master@{#469395}
parent aee22dff
......@@ -7,6 +7,7 @@
<link rel="import" href="../reset_page/reset_profile_banner.html">
<link rel="import" href="../search_page/search_page.html">
<link rel="import" href="../settings_page/main_page_behavior.html">
<link rel="import" href="../settings_page/settings_page_visibility.html">
<link rel="import" href="../settings_page/settings_section.html">
<link rel="import" href="../settings_page_css.html">
<link rel="import" href="../settings_vars_css.html">
......@@ -97,7 +98,7 @@
</div>
</if>
<if expr="chromeos">
<template is="dom-if" if="[[showPage_(pageVisibility.internet)]]"
<template is="dom-if" if="[[showPage(pageVisibility.internet)]]"
restamp>
<settings-section page-title="$i18n{internetPageTitle}"
section="internet">
......@@ -105,7 +106,7 @@
</settings-internet-page>
</settings-section>
</template>
<template is="dom-if" if="[[showPage_(pageVisibility.bluetooth)]]"
<template is="dom-if" if="[[showPage(pageVisibility.bluetooth)]]"
restamp>
<settings-section page-title="$i18n{bluetoothPageTitle}"
section="bluetooth">
......@@ -114,37 +115,38 @@
</settings-section>
</template>
</if>
<template is="dom-if" if="[[showPage_(pageVisibility.people)]]" restamp>
<template is="dom-if" if="[[showPage(pageVisibility.people)]]" restamp>
<settings-section page-title="$i18n{peoplePageTitle}"
section="people">
<settings-people-page prefs="{{prefs}}"></settings-people-page>
</settings-section>
</template>
<template is="dom-if" if="[[showPage_(pageVisibility.appearance)]]"
<template is="dom-if" if="[[showPage(pageVisibility.appearance)]]"
restamp>
<settings-section page-title="$i18n{appearancePageTitle}"
section="appearance">
<settings-appearance-page prefs="{{prefs}}"
page-visibility="[[getPageVisibility_('appearance')]]">
page-visibility="[[pageVisibility.appearance]]">
</settings-appearance-page>
</settings-section>
</template>
<if expr="chromeos">
<template is="dom-if" if="[[showPage_(pageVisibility.device)]]" restamp>
<template is="dom-if" if="[[showPage(pageVisibility.device)]]" restamp>
<settings-section page-title="$i18n{devicePageTitle}"
section="device">
<settings-device-page prefs="{{prefs}}"></settings-device-page>
</settings-section>
</template>
</if>
<template is="dom-if" if="[[showPage_(pageVisibility.search)]]" restamp>
<template is="dom-if" if="[[showPage(pageVisibility.search)]]" restamp>
<settings-section page-title="$i18n{searchPageTitle}"
section="search">
<settings-search-page prefs="{{prefs}}"></settings-search-page>
</settings-section>
</template>
<if expr="chromeos">
<template is="dom-if" if="[[showPage_(pageVisibility.androidApps)]]"
<template is="dom-if"
if="[[shouldShowAndroidApps_(showAndroidApps, pageVisibility)]]"
restamp>
<settings-section page-title="$i18n{androidAppsPageTitle}"
section="androidApps">
......@@ -154,7 +156,7 @@
</template>
</if>
<if expr="not chromeos">
<template is="dom-if" if="[[showPage_(pageVisibility.defaultBrowser)]]"
<template is="dom-if" if="[[showPage(pageVisibility.defaultBrowser)]]"
restamp>
<settings-section page-title="$i18n{defaultBrowser}"
section="defaultBrowser">
......@@ -162,7 +164,7 @@
</settings-section>
</template>
</if>
<template is="dom-if" if="[[showPage_(pageVisibility.onStartup)]]"
<template is="dom-if" if="[[showPage(pageVisibility.onStartup)]]"
restamp>
<settings-section page-title="$i18n{onStartup}" section="onStartup">
<settings-on-startup-page prefs="{{prefs}}">
......@@ -172,7 +174,7 @@
</div>
</template>
<template is="dom-if" if="[[showPage_(pageVisibility.advancedSettings)]]">
<template is="dom-if" if="[[showAdvancedSettings_(pageVisibility.advancedSettings)]]">
<template is="dom-if" if="[[showAdvancedToggle_(
inSearchMode, hasExpandedSection_)]]">
<div id="toggleSpacer"></div>
......@@ -192,7 +194,7 @@
currentRoute_, inSearchMode, hasExpandedSection_,
advancedToggleExpanded)]]">
<if expr="chromeos">
<template is="dom-if" if="[[showPage_(pageVisibility.dateTime)]]"
<template is="dom-if" if="[[showPage(pageVisibility.dateTime)]]"
restamp>
<settings-section page-title="$i18n{dateTimePageTitle}"
section="dateTime">
......@@ -202,17 +204,17 @@
</settings-section>
</template>
</if>
<template is="dom-if" if="[[showPage_(pageVisibility.privacy)]]"
<template is="dom-if" if="[[showPage(pageVisibility.privacy)]]"
restamp>
<settings-section page-title="$i18n{privacyPageTitle}"
section="privacy">
<settings-privacy-page prefs="{{prefs}}"
page-visibility="[[getPageVisibility_('privacy')]]">
page-visibility="[[pageVisibility.privacy]]">
</settings-privacy-page>
</settings-section>
</template>
<template is="dom-if"
if="[[showPage_(pageVisibility.passwordsAndForms)]]" restamp>
if="[[showPage(pageVisibility.passwordsAndForms)]]" restamp>
<settings-section
page-title="$i18n{passwordsAndAutofillPageTitle}"
section="passwordsAndForms">
......@@ -220,7 +222,7 @@
</settings-passwords-and-forms-page>
</settings-section>
</template>
<template is="dom-if" if="[[showPage_(pageVisibility.languages)]]"
<template is="dom-if" if="[[showPage(pageVisibility.languages)]]"
restamp>
<settings-section page-title="$i18n{languagesPageTitle}"
section="languages">
......@@ -228,16 +230,16 @@
</settings-languages-page>
</settings-section>
</template>
<template is="dom-if" if="[[showPage_(pageVisibility.downloads)]]"
<template is="dom-if" if="[[showPage(pageVisibility.downloads)]]"
restamp>
<settings-section page-title="$i18n{downloadsPageTitle}"
section="downloads">
<settings-downloads-page prefs="{{prefs}}"
page-visibility="[[getPageVisibility_('downloads')]]">
page-visibility="[[pageVisibility.downloads]]">
</settings-downloads-page>
</settings-section>
</template>
<template is="dom-if" if="[[showPage_(pageVisibility.printing)]]"
<template is="dom-if" if="[[showPage(pageVisibility.printing)]]"
restamp>
<settings-section page-title="$i18n{printingPageTitle}"
section="printing">
......@@ -245,13 +247,13 @@
</settings-printing-page>
</settings-section>
</template>
<template is="dom-if" if="[[showPage_(pageVisibility.a11y)]]" restamp>
<template is="dom-if" if="[[showPage(pageVisibility.a11y)]]" restamp>
<settings-section page-title="$i18n{a11yPageTitle}" section="a11y">
<settings-a11y-page prefs="{{prefs}}"></settings-a11y-page>
</settings-section>
</template>
<if expr="not chromeos">
<template is="dom-if" if="[[showPage_(pageVisibility.system)]]"
<template is="dom-if" if="[[showPage(pageVisibility.system)]]"
restamp>
<settings-section page-title="$i18n{systemPageTitle}"
section="system">
......@@ -259,7 +261,7 @@
</settings-section>
</template>
</if>
<template is="dom-if" if="[[showPage_(pageVisibility.reset)]]"
<template is="dom-if" if="[[showPage(pageVisibility.reset)]]"
restamp>
<settings-section page-title="$i18n{resetPageTitle}"
section="reset">
......
......@@ -9,7 +9,7 @@
Polymer({
is: 'settings-basic-page',
behaviors: [MainPageBehavior],
behaviors: [SettingsPageVisibility, MainPageBehavior],
properties: {
/** Preferences state. */
......@@ -18,9 +18,11 @@ Polymer({
notify: true,
},
showAndroidApps: Boolean,
/**
* Dictionary defining page visibility. Controlled by settings-ui.
* @type {!PageVisibility|undefined}
* Dictionary defining page visibility.
* @type {!GuestModePageVisibility}
*/
pageVisibility: Object,
......@@ -132,23 +134,6 @@ Polymer({
});
},
/**
* @param {boolean|undefined} visibility
* @return {boolean}
* @private
*/
showPage_: function(visibility) {
return visibility !== false;
},
/**
* @param {string} subpage
* @return {!Object}
*/
getPageVisibility_: function(subpage) {
return /** @type {Object} */ (this.get(subpage, this.pageVisibility)) || {};
},
// <if expr="chromeos">
/**
* @return {boolean}
......@@ -165,6 +150,16 @@ Polymer({
this.showResetProfileBanner_ = false;
},
/**
* @return {boolean}
* @private
*/
shouldShowAndroidApps_: function() {
var visibility = /** @type {boolean|undefined} */ (
this.get('pageVisibility.androidApps'));
return this.showAndroidApps && this.showPage(visibility);
},
/**
* Hides everything but the newly expanded subpage.
* @private
......@@ -223,6 +218,15 @@ Polymer({
advancedToggleExpanded || inSearchMode;
},
/**
* @param {(boolean|undefined)} visibility
* @return {boolean} True unless visibility is false.
* @private
*/
showAdvancedSettings_: function(visibility) {
return visibility !== false;
},
/**
* @param {boolean} opened Whether the menu is expanded.
* @return {string} Icon name.
......
......@@ -10,6 +10,7 @@
'../compiled_resources2.gyp:route',
'../compiled_resources2.gyp:search_settings',
'../settings_page/compiled_resources2.gyp:main_page_behavior',
'../settings_page/compiled_resources2.gyp:settings_page_visibility',
'../settings_ui/compiled_resources2.gyp:settings_ui_types',
],
'includes': ['../../../../../third_party/closure_compiler/compile_js2.gypi'],
......
......@@ -14,6 +14,7 @@
'../about_page/compiled_resources2.gyp:about_page',
'../basic_page/compiled_resources2.gyp:basic_page',
'../settings_page/compiled_resources2.gyp:main_page_behavior',
'../settings_page/compiled_resources2.gyp:settings_page_visibility',
'../settings_ui/compiled_resources2.gyp:settings_ui_types',
],
'includes': ['../../../../../third_party/closure_compiler/compile_js2.gypi'],
......
......@@ -43,6 +43,7 @@
<template is="dom-if" if="[[showPages_.settings]]">
<settings-basic-page prefs="{{prefs}}"
page-visibility="[[pageVisibility]]"
show-android-apps="[[showAndroidApps]]"
on-subpage-expand="onSubpageExpand_"
in-search-mode="[[inSearchMode_]]"
advanced-toggle-expanded="{{advancedToggleExpanded}}">
......
......@@ -71,10 +71,17 @@ Polymer({
},
/**
* Dictionary defining page visibility. Controlled by settings-ui.
* @type {!PageVisibility|undefined}
* Dictionary defining page visibility.
* @type {!GuestModePageVisibility}
*/
pageVisibility: Object,
pageVisibility: {
type: Object,
value: function() {
return {};
},
},
showAndroidApps: Boolean,
},
/** @override */
......
......@@ -91,12 +91,11 @@
$i18n{bluetoothPageTitle}
</a>
</if>
<a id="people" href="/people"
hidden="[[!showPage_(pageVisibility.people)]]">
<a id="people" href="/people" hidden="[[!pageVisibility.people]]">
<iron-icon icon="cr:person"></iron-icon>
$i18n{peoplePageTitle}
</a>
<a href="/appearance" hidden="[[!showPage_(pageVisibility.appearance)]]">
<a href="/appearance" hidden="[[!pageVisibility.appearance]]">
<iron-icon icon="settings:palette"></iron-icon>
$i18n{appearancePageTitle}
</a>
......@@ -111,31 +110,29 @@
$i18n{searchPageTitle}
</a>
<if expr="chromeos">
<a href="/androidApps"
hidden="[[!showPage_(pageVisibility.androidApps)]]">
<a href="/androidApps" hidden="[[!showAndroidApps]]">
<iron-icon icon="settings:android"></iron-icon>
$i18n{androidAppsPageTitle}
</a>
</if>
<if expr="not chromeos">
<a href="/defaultBrowser"
hidden="[[!showPage_(pageVisibility.defaultBrowser)]]">
<a href="/defaultBrowser" hidden="[[!pageVisibility.defaultBrowser]]">
<iron-icon icon="settings:web"></iron-icon>
$i18n{defaultBrowser}
</a>
</if>
<a href="/onStartup" hidden="[[!showPage_(pageVisibility.onStartup)]]">
<a href="/onStartup" hidden="[[!pageVisibility.onStartup]]">
<iron-icon icon="settings:power-settings-new"></iron-icon>
$i18n{onStartup}
</a>
<paper-button toggles id="advancedButton"
aria-active-attribute="aria-expanded" active="{{advancedOpened}}"
hidden="[[!showPage_(pageVisibility.advancedSettings)]]">
hidden="[[!pageVisibility.advancedSettings]]">
<span>$i18n{advancedPageTitle}</span>
<iron-icon icon="[[arrowState_(advancedOpened)]]">
</iron-icon></paper-button>
<iron-collapse id="advancedSubmenu" opened="[[advancedOpened]]"
hidden="[[!showPage_(pageVisibility.advancedSettings)]]">
hidden="[[!pageVisibility.advancedSettings]]">
<iron-selector id="subMenu" selectable="a" attr-for-selected="href">
<if expr="chromeos">
<a href="/dateTime">
......@@ -148,7 +145,7 @@
$i18n{privacyPageTitle}
</a>
<a href="/passwordsAndForms"
hidden="[[!showPage_(pageVisibility.passwordsAndForms)]]">
hidden="[[!pageVisibility.passwordsAndForms]]">
<iron-icon icon="settings:assignment"></iron-icon>
$i18n{passwordsAndAutofillPageTitle}
</a>
......@@ -174,7 +171,7 @@
$i18n{systemPageTitle}
</a>
</if>
<a href="/reset" hidden="[[!showPage_(pageVisibility.reset)]]">
<a href="/reset" hidden="[[!pageVisibility.reset]]">
<iron-icon icon="settings:restore"></iron-icon>
$i18n{resetPageTitle}
</a>
......
......@@ -18,10 +18,12 @@ Polymer({
},
/**
* Dictionary defining page visibility. Controlled by settings-ui.
* @type {!PageVisibility|undefined}
* Dictionary defining page visibility.
* @type {!GuestModePageVisibility}
*/
pageVisibility: Object,
pageVisibility: {
type: Object,
},
},
listeners: {
......@@ -45,15 +47,6 @@ Polymer({
this.setSelectedUrl_(''); // Nothing is selected.
},
/**
* @param {boolean|undefined} visibility
* @return {boolean}
* @private
*/
showPage_: function(visibility) {
return visibility !== false;
},
/**
* Prevent clicks on sidebar items from navigating. These are only links for
* accessibility purposes, taps are handled separately by <iron-selector>.
......
......@@ -25,6 +25,10 @@
],
'includes': ['../../../../../third_party/closure_compiler/compile_js2.gypi'],
},
{
'target_name': 'settings_page_visibility',
'includes': ['../../../../../third_party/closure_compiler/compile_js2.gypi'],
},
{
'target_name': 'settings_section',
'dependencies': [
......
// Copyright 2015 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.
/**
* @fileoverview
* Behavior controlling the visibility of Settings pages.
*
* Example:
* behaviors: [SettingsPageVisibility],
*/
/**
* Set this to true in tests before loading the page (e.g. in preLoad()) so that
* pages do not initially get created. Set this to false BEFORE modifying
* pageVisibility. NOTE: Changing this value after the DOM is loaded will not
* trigger a visibility change, pageVisibility must be modified to trigger data
* binding events.
* @type {boolean}
*/
var settingsHidePagesByDefaultForTest;
/** @polymerBehavior */
var SettingsPageVisibility = {
properties: {
/**
* Dictionary defining page visibility. If not set for a page, visibility
* will default to true, unless settingsHidePagesByDefaultForTest is set
* in which case visibility defaults to false.
* @type {Object<boolean>}
*/
pageVisibility: {
type: Object,
value: function() { return {}; },
},
},
/**
* @param {boolean|undefined} visibility
* @return {boolean}
*/
showPage: function(visibility) {
if (settingsHidePagesByDefaultForTest)
return visibility === true;
return visibility !== false;
},
};
......@@ -223,6 +223,12 @@
<structure name="IDR_SETTINGS_CR_SETTINGS_MENU_JS"
file="settings_menu/settings_menu.js"
type="chrome_html" />
<structure name="IDR_SETTINGS_CR_SETTINGS_PAGE_VISIBILITY_HTML"
file="settings_page/settings_page_visibility.html"
type="chrome_html" />
<structure name="IDR_SETTINGS_CR_SETTINGS_PAGE_VISIBILITY_JS"
file="settings_page/settings_page_visibility.js"
type="chrome_html" />
<structure name="IDR_SETTINGS_CR_SETTINGS_SECTION_HTML"
file="settings_page/settings_section.html"
type="chrome_html" />
......
......@@ -96,6 +96,7 @@
<div class="drawer-content">
<template is="dom-if" id="drawerTemplate">
<settings-menu page-visibility="[[pageVisibility_]]"
show-android-apps="[[showAndroidApps_]]"
on-iron-activate="onIronActivate_"
advanced-opened="{{advancedOpened_}}">
</settings-menu>
......@@ -109,6 +110,7 @@
<settings-main id="main" prefs="{{prefs}}"
toolbar-spinner-active="{{toolbarSpinnerActive_}}"
page-visibility="[[pageVisibility_]]"
show-android-apps="[[showAndroidApps_]]"
advanced-toggle-expanded="{{advancedOpened_}}">
</settings-main>
</div>
......
......@@ -48,16 +48,15 @@ Polymer({
},
/**
* Dictionary defining page visibility. Pages are hidden when their entry
* is set to *false*. i.e. visibility defaults to true.
* @private {!PageVisibility}
* Dictionary defining page visibility.
* This is only set when in guest mode. All pages are visible when not set
* because polymer only notifies after a property is set.
* @private {!GuestModePageVisibility}
*/
pageVisibility_: {
type: Object,
value: function() {
return {};
},
},
pageVisibility_: Object,
/** @private */
showAndroidApps_: Boolean,
/** @private */
lastSearchQuery_: {
......@@ -157,11 +156,8 @@ Polymer({
};
}
// <if expr="chromeos">
this.pageVisibility_.androidApps =
loadTimeData.valueExists('androidAppsAllowed') &&
this.showAndroidApps_ = loadTimeData.valueExists('androidAppsAllowed') &&
loadTimeData.getBoolean('androidAppsAllowed');
// </if>
},
/** @private {?IntersectionObserver} */
......
......@@ -7,11 +7,9 @@
*/
/**
* Specifies page visibility. Only pages that have conditional visibility
* (e.g. in Guest mode) have defined entries.
* Specifies page visibility in guest mode in cr and cros.
* @typedef {{
* advancedSettings: (boolean|undefined),
* androidApps: (boolean|undefined),
* appearance: (boolean|undefined|AppearancePageVisibility),
* dateTime: (boolean|undefined|DateTimePageVisibility),
* defaultBrowser: (boolean|undefined),
......@@ -23,37 +21,37 @@
* reset:(boolean|undefined),
* }}
*/
var PageVisibility;
var GuestModePageVisibility;
/**
* @typedef {{
* bookmarksBar: (boolean|undefined),
* homeButton: (boolean|undefined),
* pageZoom: (boolean|undefined),
* setTheme: (boolean|undefined),
* setWallpaper: (boolean|undefined),
* bookmarksBar: boolean,
* homeButton: boolean,
* pageZoom: boolean,
* setTheme: boolean,
* setWallpaper: boolean,
* }}
*/
var AppearancePageVisibility;
/**
* @typedef {{
* timeZoneSelector: (boolean|undefined),
* timeZoneSelector: boolean,
* }}
*/
var DateTimePageVisibility;
/**
* @typedef {{
* googleDrive: (boolean|undefined)
* googleDrive: boolean
* }}
*/
var DownloadsPageVisibility;
/**
* @typedef {{
* networkPrediction: (boolean|undefined),
* searchPrediction: (boolean|undefined),
* networkPrediction: boolean,
* searchPrediction: boolean,
* }}
*/
var PrivacyPageVisibility;
......
......@@ -122,6 +122,7 @@ js2gtest("browser_tests_js_webui") {
"settings/settings_idle_load_browsertest.js",
"settings/settings_page_browsertest.js",
"settings/settings_passwords_section_browsertest.js",
"settings/settings_subpage_browsertest.js",
"settings/settings_ui_browsertest.js",
"settings/site_settings_page_browsertest.js",
]
......
......@@ -482,6 +482,7 @@ CrSettingsRtlTest.prototype = {
};
TEST_F('CrSettingsRtlTest', 'DrawerPanelFlips', function() {
settingsHidePagesByDefaultForTest = true;
settings_rtl_tests.registerDrawerPanelTests();
mocha.run();
});
......
......@@ -24,6 +24,7 @@ SettingsEasyUnlockBrowserTest.prototype = {
/** @override */
preLoad: function() {
SettingsPageBrowserTest.prototype.preLoad.call(this);
settingsHidePagesByDefaultForTest = true;
},
};
......
......@@ -27,6 +27,7 @@ SettingsLanguagesPageBrowserTest.prototype = {
/** @override */
preLoad: function() {
SettingsPageBrowserTest.prototype.preLoad.call(this);
settingsHidePagesByDefaultForTest = true;
},
};
......@@ -82,7 +83,11 @@ TEST_F('SettingsLanguagesPageBrowserTest', 'MAYBE_LanguagesPage', function() {
}
suiteSetup(function() {
languagesSection = assert(this.getSection(self.basicPage, 'languages'));
var page = self.basicPage;
page.set('pageVisibility.languages', true);
Polymer.dom.flush();
languagesSection = assert(this.getSection(page, 'languages'));
languagesPage = assert(
languagesSection.querySelector('settings-languages-page'));
languagesCollapse = languagesPage.$.languagesCollapse;
......
......@@ -40,6 +40,7 @@ OnStartupSettingsBrowserTest.prototype = {
/** @override */
preLoad: function() {
SettingsPageBrowserTest.prototype.preLoad.call(this);
settingsHidePagesByDefaultForTest = true;
},
};
......@@ -58,6 +59,9 @@ TEST_F('OnStartupSettingsBrowserTest', 'uiTests', function() {
suite('OnStartupHandler', function() {
suiteSetup(function() {
self.basicPage.set('pageVisibility.onStartup', true);
Polymer.dom.flush();
settingsPrefs = document.querySelector('settings-ui').$$(
'settings-prefs');
assertTrue(!!settingsPrefs);
......
......@@ -71,8 +71,6 @@ cr.define('settings_main_page', function() {
settingsMain = document.createElement('settings-main');
settingsMain.prefs = settingsPrefs.prefs;
settingsMain.toolbarSpinnerActive = false;
// Set default page visibility.
settingsMain.pageVisibility = {};
document.body.appendChild(settingsMain);
});
......
// Copyright 2015 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.
/**
* @fileoverview Suite of tests to ensure that settings subpages exist and
* load without errors. Also outputs approximate load times for each subpage.
*/
GEN_INCLUDE(['settings_page_browsertest.js']);
/**
* @constructor
* @extends {SettingsPageBrowserTest}
*/
function SettingsSubPageBrowserTest() {
/** @type {!Array<string>} */
this.subPages = [];
}
SettingsSubPageBrowserTest.prototype = {
__proto__: SettingsPageBrowserTest.prototype,
/** @override */
preLoad: function() {
SettingsPageBrowserTest.prototype.preLoad.call(this);
// This will cause all subpages to initially be hidden via dom-if.
// This allows us to test loading each subpage independently without other
// subpages affecting load times, etc.
settingsHidePagesByDefaultForTest = true;
},
/*
* Checks all subpages are hidden first.
* @private
*/
verifySubPagesHidden_: function() {
var page = this.basicPage;
assertEquals(0, Object.keys(page.pageVisibility).length);
// Ensure all pages are still hidden after the dom-ifs compute their |if|.
Polymer.dom.flush();
var sections = page.shadowRoot.querySelectorAll('settings-section');
assertTrue(!!sections);
assertEquals(0, sections.length);
},
/**
* Ensures the subpage is initially hidden, then sets it to visible and
* times the result, outputting a (rough) approximation of load time for the
* subpage.
* @param {Node} page
* @param {string} subpage
*/
testSubPage: function(page, subPage) {
Polymer.dom.flush();
assertFalse(!!this.getSection(page, subPage));
var startTime = window.performance.now();
page.set('pageVisibility.' + subPage, true);
Polymer.dom.flush();
var dtime = window.performance.now() - startTime;
console.log('Page: ' + subPage + ' Load time: ' + dtime.toFixed(0) + ' ms');
assertTrue(!!this.getSection(page, subPage));
// Hide the page so that it doesn't interfere with other subPages.
page.set('pageVisibility.' + subPage, false);
Polymer.dom.flush();
},
testSubPages: function() {
this.subPages.forEach(function(subPage) {
test(subPage, function() {
this.testSubPage(this.basicPage, subPage);
}.bind(this));
}.bind(this));
},
};
/** @constructor @extends {SettingsSubPageBrowserTest} */
function SettingsBasicSubPageBrowserTest() {
SettingsSubPageBrowserTest.call(this, 'basic');
/** @override */
this.subPages = [
'people',
'appearance',
'onStartup',
'search',
];
if (cr.isChromeOS)
this.subPages.push('internet', 'bluetooth', 'device');
else
this.subPages.push('defaultBrowser');
}
SettingsBasicSubPageBrowserTest.prototype = {
__proto__: SettingsSubPageBrowserTest.prototype,
};
// Failing on ChromiumOS dbg. https://crbug.com/709442
GEN('#if defined(OS_CHROMEOS) && !defined(NDEBUG)');
GEN('#define MAYBE_SubPages DISABLED_SubPages');
GEN('#else');
GEN('#define MAYBE_SubPages SubPages');
GEN('#endif');
TEST_F('SettingsBasicSubPageBrowserTest', 'MAYBE_SubPages', function() {
suiteSetup(this.verifySubPagesHidden_.bind(this));
suite('Basic', this.testSubPages.bind(this));
mocha.run();
});
/** @constructor @extends {SettingsSubPageBrowserTest} */
function SettingsAdvancedSubPageBrowserTest() {
// "Advanced" sections live in the settings-basic-page.
SettingsSubPageBrowserTest.call(this, 'basic');
/** @override */
this.subPages = [
'privacy',
'passwordsAndForms',
'languages',
'downloads',
'printing',
'a11y',
'reset',
];
if (cr.isChromeOS)
this.subPages.push('dateTime');
else
this.subPages.push('system');
};
SettingsAdvancedSubPageBrowserTest.prototype = {
__proto__: SettingsSubPageBrowserTest.prototype,
/** @override */
setUp: function() {
this.toggleAdvanced();
SettingsSubPageBrowserTest.prototype.setUp.call(this);
},
};
TEST_F('SettingsAdvancedSubPageBrowserTest', 'SubPages', function() {
suiteSetup(this.verifySubPagesHidden_.bind(this));
suite('Advanced', this.testSubPages.bind(this));
mocha.run();
});
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment