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 @@ ...@@ -7,6 +7,7 @@
<link rel="import" href="../reset_page/reset_profile_banner.html"> <link rel="import" href="../reset_page/reset_profile_banner.html">
<link rel="import" href="../search_page/search_page.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/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/settings_section.html">
<link rel="import" href="../settings_page_css.html"> <link rel="import" href="../settings_page_css.html">
<link rel="import" href="../settings_vars_css.html"> <link rel="import" href="../settings_vars_css.html">
...@@ -97,7 +98,7 @@ ...@@ -97,7 +98,7 @@
</div> </div>
</if> </if>
<if expr="chromeos"> <if expr="chromeos">
<template is="dom-if" if="[[showPage_(pageVisibility.internet)]]" <template is="dom-if" if="[[showPage(pageVisibility.internet)]]"
restamp> restamp>
<settings-section page-title="$i18n{internetPageTitle}" <settings-section page-title="$i18n{internetPageTitle}"
section="internet"> section="internet">
...@@ -105,7 +106,7 @@ ...@@ -105,7 +106,7 @@
</settings-internet-page> </settings-internet-page>
</settings-section> </settings-section>
</template> </template>
<template is="dom-if" if="[[showPage_(pageVisibility.bluetooth)]]" <template is="dom-if" if="[[showPage(pageVisibility.bluetooth)]]"
restamp> restamp>
<settings-section page-title="$i18n{bluetoothPageTitle}" <settings-section page-title="$i18n{bluetoothPageTitle}"
section="bluetooth"> section="bluetooth">
...@@ -114,37 +115,38 @@ ...@@ -114,37 +115,38 @@
</settings-section> </settings-section>
</template> </template>
</if> </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}" <settings-section page-title="$i18n{peoplePageTitle}"
section="people"> section="people">
<settings-people-page prefs="{{prefs}}"></settings-people-page> <settings-people-page prefs="{{prefs}}"></settings-people-page>
</settings-section> </settings-section>
</template> </template>
<template is="dom-if" if="[[showPage_(pageVisibility.appearance)]]" <template is="dom-if" if="[[showPage(pageVisibility.appearance)]]"
restamp> restamp>
<settings-section page-title="$i18n{appearancePageTitle}" <settings-section page-title="$i18n{appearancePageTitle}"
section="appearance"> section="appearance">
<settings-appearance-page prefs="{{prefs}}" <settings-appearance-page prefs="{{prefs}}"
page-visibility="[[getPageVisibility_('appearance')]]"> page-visibility="[[pageVisibility.appearance]]">
</settings-appearance-page> </settings-appearance-page>
</settings-section> </settings-section>
</template> </template>
<if expr="chromeos"> <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}" <settings-section page-title="$i18n{devicePageTitle}"
section="device"> section="device">
<settings-device-page prefs="{{prefs}}"></settings-device-page> <settings-device-page prefs="{{prefs}}"></settings-device-page>
</settings-section> </settings-section>
</template> </template>
</if> </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}" <settings-section page-title="$i18n{searchPageTitle}"
section="search"> section="search">
<settings-search-page prefs="{{prefs}}"></settings-search-page> <settings-search-page prefs="{{prefs}}"></settings-search-page>
</settings-section> </settings-section>
</template> </template>
<if expr="chromeos"> <if expr="chromeos">
<template is="dom-if" if="[[showPage_(pageVisibility.androidApps)]]" <template is="dom-if"
if="[[shouldShowAndroidApps_(showAndroidApps, pageVisibility)]]"
restamp> restamp>
<settings-section page-title="$i18n{androidAppsPageTitle}" <settings-section page-title="$i18n{androidAppsPageTitle}"
section="androidApps"> section="androidApps">
...@@ -154,7 +156,7 @@ ...@@ -154,7 +156,7 @@
</template> </template>
</if> </if>
<if expr="not chromeos"> <if expr="not chromeos">
<template is="dom-if" if="[[showPage_(pageVisibility.defaultBrowser)]]" <template is="dom-if" if="[[showPage(pageVisibility.defaultBrowser)]]"
restamp> restamp>
<settings-section page-title="$i18n{defaultBrowser}" <settings-section page-title="$i18n{defaultBrowser}"
section="defaultBrowser"> section="defaultBrowser">
...@@ -162,7 +164,7 @@ ...@@ -162,7 +164,7 @@
</settings-section> </settings-section>
</template> </template>
</if> </if>
<template is="dom-if" if="[[showPage_(pageVisibility.onStartup)]]" <template is="dom-if" if="[[showPage(pageVisibility.onStartup)]]"
restamp> restamp>
<settings-section page-title="$i18n{onStartup}" section="onStartup"> <settings-section page-title="$i18n{onStartup}" section="onStartup">
<settings-on-startup-page prefs="{{prefs}}"> <settings-on-startup-page prefs="{{prefs}}">
...@@ -172,7 +174,7 @@ ...@@ -172,7 +174,7 @@
</div> </div>
</template> </template>
<template is="dom-if" if="[[showPage_(pageVisibility.advancedSettings)]]"> <template is="dom-if" if="[[showAdvancedSettings_(pageVisibility.advancedSettings)]]">
<template is="dom-if" if="[[showAdvancedToggle_( <template is="dom-if" if="[[showAdvancedToggle_(
inSearchMode, hasExpandedSection_)]]"> inSearchMode, hasExpandedSection_)]]">
<div id="toggleSpacer"></div> <div id="toggleSpacer"></div>
...@@ -192,7 +194,7 @@ ...@@ -192,7 +194,7 @@
currentRoute_, inSearchMode, hasExpandedSection_, currentRoute_, inSearchMode, hasExpandedSection_,
advancedToggleExpanded)]]"> advancedToggleExpanded)]]">
<if expr="chromeos"> <if expr="chromeos">
<template is="dom-if" if="[[showPage_(pageVisibility.dateTime)]]" <template is="dom-if" if="[[showPage(pageVisibility.dateTime)]]"
restamp> restamp>
<settings-section page-title="$i18n{dateTimePageTitle}" <settings-section page-title="$i18n{dateTimePageTitle}"
section="dateTime"> section="dateTime">
...@@ -202,17 +204,17 @@ ...@@ -202,17 +204,17 @@
</settings-section> </settings-section>
</template> </template>
</if> </if>
<template is="dom-if" if="[[showPage_(pageVisibility.privacy)]]" <template is="dom-if" if="[[showPage(pageVisibility.privacy)]]"
restamp> restamp>
<settings-section page-title="$i18n{privacyPageTitle}" <settings-section page-title="$i18n{privacyPageTitle}"
section="privacy"> section="privacy">
<settings-privacy-page prefs="{{prefs}}" <settings-privacy-page prefs="{{prefs}}"
page-visibility="[[getPageVisibility_('privacy')]]"> page-visibility="[[pageVisibility.privacy]]">
</settings-privacy-page> </settings-privacy-page>
</settings-section> </settings-section>
</template> </template>
<template is="dom-if" <template is="dom-if"
if="[[showPage_(pageVisibility.passwordsAndForms)]]" restamp> if="[[showPage(pageVisibility.passwordsAndForms)]]" restamp>
<settings-section <settings-section
page-title="$i18n{passwordsAndAutofillPageTitle}" page-title="$i18n{passwordsAndAutofillPageTitle}"
section="passwordsAndForms"> section="passwordsAndForms">
...@@ -220,7 +222,7 @@ ...@@ -220,7 +222,7 @@
</settings-passwords-and-forms-page> </settings-passwords-and-forms-page>
</settings-section> </settings-section>
</template> </template>
<template is="dom-if" if="[[showPage_(pageVisibility.languages)]]" <template is="dom-if" if="[[showPage(pageVisibility.languages)]]"
restamp> restamp>
<settings-section page-title="$i18n{languagesPageTitle}" <settings-section page-title="$i18n{languagesPageTitle}"
section="languages"> section="languages">
...@@ -228,16 +230,16 @@ ...@@ -228,16 +230,16 @@
</settings-languages-page> </settings-languages-page>
</settings-section> </settings-section>
</template> </template>
<template is="dom-if" if="[[showPage_(pageVisibility.downloads)]]" <template is="dom-if" if="[[showPage(pageVisibility.downloads)]]"
restamp> restamp>
<settings-section page-title="$i18n{downloadsPageTitle}" <settings-section page-title="$i18n{downloadsPageTitle}"
section="downloads"> section="downloads">
<settings-downloads-page prefs="{{prefs}}" <settings-downloads-page prefs="{{prefs}}"
page-visibility="[[getPageVisibility_('downloads')]]"> page-visibility="[[pageVisibility.downloads]]">
</settings-downloads-page> </settings-downloads-page>
</settings-section> </settings-section>
</template> </template>
<template is="dom-if" if="[[showPage_(pageVisibility.printing)]]" <template is="dom-if" if="[[showPage(pageVisibility.printing)]]"
restamp> restamp>
<settings-section page-title="$i18n{printingPageTitle}" <settings-section page-title="$i18n{printingPageTitle}"
section="printing"> section="printing">
...@@ -245,13 +247,13 @@ ...@@ -245,13 +247,13 @@
</settings-printing-page> </settings-printing-page>
</settings-section> </settings-section>
</template> </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-section page-title="$i18n{a11yPageTitle}" section="a11y">
<settings-a11y-page prefs="{{prefs}}"></settings-a11y-page> <settings-a11y-page prefs="{{prefs}}"></settings-a11y-page>
</settings-section> </settings-section>
</template> </template>
<if expr="not chromeos"> <if expr="not chromeos">
<template is="dom-if" if="[[showPage_(pageVisibility.system)]]" <template is="dom-if" if="[[showPage(pageVisibility.system)]]"
restamp> restamp>
<settings-section page-title="$i18n{systemPageTitle}" <settings-section page-title="$i18n{systemPageTitle}"
section="system"> section="system">
...@@ -259,7 +261,7 @@ ...@@ -259,7 +261,7 @@
</settings-section> </settings-section>
</template> </template>
</if> </if>
<template is="dom-if" if="[[showPage_(pageVisibility.reset)]]" <template is="dom-if" if="[[showPage(pageVisibility.reset)]]"
restamp> restamp>
<settings-section page-title="$i18n{resetPageTitle}" <settings-section page-title="$i18n{resetPageTitle}"
section="reset"> section="reset">
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
Polymer({ Polymer({
is: 'settings-basic-page', is: 'settings-basic-page',
behaviors: [MainPageBehavior], behaviors: [SettingsPageVisibility, MainPageBehavior],
properties: { properties: {
/** Preferences state. */ /** Preferences state. */
...@@ -18,9 +18,11 @@ Polymer({ ...@@ -18,9 +18,11 @@ Polymer({
notify: true, notify: true,
}, },
showAndroidApps: Boolean,
/** /**
* Dictionary defining page visibility. Controlled by settings-ui. * Dictionary defining page visibility.
* @type {!PageVisibility|undefined} * @type {!GuestModePageVisibility}
*/ */
pageVisibility: Object, pageVisibility: Object,
...@@ -132,23 +134,6 @@ Polymer({ ...@@ -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"> // <if expr="chromeos">
/** /**
* @return {boolean} * @return {boolean}
...@@ -165,6 +150,16 @@ Polymer({ ...@@ -165,6 +150,16 @@ Polymer({
this.showResetProfileBanner_ = false; 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. * Hides everything but the newly expanded subpage.
* @private * @private
...@@ -223,6 +218,15 @@ Polymer({ ...@@ -223,6 +218,15 @@ Polymer({
advancedToggleExpanded || inSearchMode; 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. * @param {boolean} opened Whether the menu is expanded.
* @return {string} Icon name. * @return {string} Icon name.
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
'../compiled_resources2.gyp:route', '../compiled_resources2.gyp:route',
'../compiled_resources2.gyp:search_settings', '../compiled_resources2.gyp:search_settings',
'../settings_page/compiled_resources2.gyp:main_page_behavior', '../settings_page/compiled_resources2.gyp:main_page_behavior',
'../settings_page/compiled_resources2.gyp:settings_page_visibility',
'../settings_ui/compiled_resources2.gyp:settings_ui_types', '../settings_ui/compiled_resources2.gyp:settings_ui_types',
], ],
'includes': ['../../../../../third_party/closure_compiler/compile_js2.gypi'], 'includes': ['../../../../../third_party/closure_compiler/compile_js2.gypi'],
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
'../about_page/compiled_resources2.gyp:about_page', '../about_page/compiled_resources2.gyp:about_page',
'../basic_page/compiled_resources2.gyp:basic_page', '../basic_page/compiled_resources2.gyp:basic_page',
'../settings_page/compiled_resources2.gyp:main_page_behavior', '../settings_page/compiled_resources2.gyp:main_page_behavior',
'../settings_page/compiled_resources2.gyp:settings_page_visibility',
'../settings_ui/compiled_resources2.gyp:settings_ui_types', '../settings_ui/compiled_resources2.gyp:settings_ui_types',
], ],
'includes': ['../../../../../third_party/closure_compiler/compile_js2.gypi'], 'includes': ['../../../../../third_party/closure_compiler/compile_js2.gypi'],
......
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
<template is="dom-if" if="[[showPages_.settings]]"> <template is="dom-if" if="[[showPages_.settings]]">
<settings-basic-page prefs="{{prefs}}" <settings-basic-page prefs="{{prefs}}"
page-visibility="[[pageVisibility]]" page-visibility="[[pageVisibility]]"
show-android-apps="[[showAndroidApps]]"
on-subpage-expand="onSubpageExpand_" on-subpage-expand="onSubpageExpand_"
in-search-mode="[[inSearchMode_]]" in-search-mode="[[inSearchMode_]]"
advanced-toggle-expanded="{{advancedToggleExpanded}}"> advanced-toggle-expanded="{{advancedToggleExpanded}}">
......
...@@ -71,10 +71,17 @@ Polymer({ ...@@ -71,10 +71,17 @@ Polymer({
}, },
/** /**
* Dictionary defining page visibility. Controlled by settings-ui. * Dictionary defining page visibility.
* @type {!PageVisibility|undefined} * @type {!GuestModePageVisibility}
*/ */
pageVisibility: Object, pageVisibility: {
type: Object,
value: function() {
return {};
},
},
showAndroidApps: Boolean,
}, },
/** @override */ /** @override */
......
...@@ -91,12 +91,11 @@ ...@@ -91,12 +91,11 @@
$i18n{bluetoothPageTitle} $i18n{bluetoothPageTitle}
</a> </a>
</if> </if>
<a id="people" href="/people" <a id="people" href="/people" hidden="[[!pageVisibility.people]]">
hidden="[[!showPage_(pageVisibility.people)]]">
<iron-icon icon="cr:person"></iron-icon> <iron-icon icon="cr:person"></iron-icon>
$i18n{peoplePageTitle} $i18n{peoplePageTitle}
</a> </a>
<a href="/appearance" hidden="[[!showPage_(pageVisibility.appearance)]]"> <a href="/appearance" hidden="[[!pageVisibility.appearance]]">
<iron-icon icon="settings:palette"></iron-icon> <iron-icon icon="settings:palette"></iron-icon>
$i18n{appearancePageTitle} $i18n{appearancePageTitle}
</a> </a>
...@@ -111,31 +110,29 @@ ...@@ -111,31 +110,29 @@
$i18n{searchPageTitle} $i18n{searchPageTitle}
</a> </a>
<if expr="chromeos"> <if expr="chromeos">
<a href="/androidApps" <a href="/androidApps" hidden="[[!showAndroidApps]]">
hidden="[[!showPage_(pageVisibility.androidApps)]]">
<iron-icon icon="settings:android"></iron-icon> <iron-icon icon="settings:android"></iron-icon>
$i18n{androidAppsPageTitle} $i18n{androidAppsPageTitle}
</a> </a>
</if> </if>
<if expr="not chromeos"> <if expr="not chromeos">
<a href="/defaultBrowser" <a href="/defaultBrowser" hidden="[[!pageVisibility.defaultBrowser]]">
hidden="[[!showPage_(pageVisibility.defaultBrowser)]]">
<iron-icon icon="settings:web"></iron-icon> <iron-icon icon="settings:web"></iron-icon>
$i18n{defaultBrowser} $i18n{defaultBrowser}
</a> </a>
</if> </if>
<a href="/onStartup" hidden="[[!showPage_(pageVisibility.onStartup)]]"> <a href="/onStartup" hidden="[[!pageVisibility.onStartup]]">
<iron-icon icon="settings:power-settings-new"></iron-icon> <iron-icon icon="settings:power-settings-new"></iron-icon>
$i18n{onStartup} $i18n{onStartup}
</a> </a>
<paper-button toggles id="advancedButton" <paper-button toggles id="advancedButton"
aria-active-attribute="aria-expanded" active="{{advancedOpened}}" aria-active-attribute="aria-expanded" active="{{advancedOpened}}"
hidden="[[!showPage_(pageVisibility.advancedSettings)]]"> hidden="[[!pageVisibility.advancedSettings]]">
<span>$i18n{advancedPageTitle}</span> <span>$i18n{advancedPageTitle}</span>
<iron-icon icon="[[arrowState_(advancedOpened)]]"> <iron-icon icon="[[arrowState_(advancedOpened)]]">
</iron-icon></paper-button> </iron-icon></paper-button>
<iron-collapse id="advancedSubmenu" opened="[[advancedOpened]]" <iron-collapse id="advancedSubmenu" opened="[[advancedOpened]]"
hidden="[[!showPage_(pageVisibility.advancedSettings)]]"> hidden="[[!pageVisibility.advancedSettings]]">
<iron-selector id="subMenu" selectable="a" attr-for-selected="href"> <iron-selector id="subMenu" selectable="a" attr-for-selected="href">
<if expr="chromeos"> <if expr="chromeos">
<a href="/dateTime"> <a href="/dateTime">
...@@ -148,7 +145,7 @@ ...@@ -148,7 +145,7 @@
$i18n{privacyPageTitle} $i18n{privacyPageTitle}
</a> </a>
<a href="/passwordsAndForms" <a href="/passwordsAndForms"
hidden="[[!showPage_(pageVisibility.passwordsAndForms)]]"> hidden="[[!pageVisibility.passwordsAndForms]]">
<iron-icon icon="settings:assignment"></iron-icon> <iron-icon icon="settings:assignment"></iron-icon>
$i18n{passwordsAndAutofillPageTitle} $i18n{passwordsAndAutofillPageTitle}
</a> </a>
...@@ -174,7 +171,7 @@ ...@@ -174,7 +171,7 @@
$i18n{systemPageTitle} $i18n{systemPageTitle}
</a> </a>
</if> </if>
<a href="/reset" hidden="[[!showPage_(pageVisibility.reset)]]"> <a href="/reset" hidden="[[!pageVisibility.reset]]">
<iron-icon icon="settings:restore"></iron-icon> <iron-icon icon="settings:restore"></iron-icon>
$i18n{resetPageTitle} $i18n{resetPageTitle}
</a> </a>
......
...@@ -18,10 +18,12 @@ Polymer({ ...@@ -18,10 +18,12 @@ Polymer({
}, },
/** /**
* Dictionary defining page visibility. Controlled by settings-ui. * Dictionary defining page visibility.
* @type {!PageVisibility|undefined} * @type {!GuestModePageVisibility}
*/ */
pageVisibility: Object, pageVisibility: {
type: Object,
},
}, },
listeners: { listeners: {
...@@ -45,15 +47,6 @@ Polymer({ ...@@ -45,15 +47,6 @@ Polymer({
this.setSelectedUrl_(''); // Nothing is selected. 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 * Prevent clicks on sidebar items from navigating. These are only links for
* accessibility purposes, taps are handled separately by <iron-selector>. * accessibility purposes, taps are handled separately by <iron-selector>.
......
...@@ -25,6 +25,10 @@ ...@@ -25,6 +25,10 @@
], ],
'includes': ['../../../../../third_party/closure_compiler/compile_js2.gypi'], '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', 'target_name': 'settings_section',
'dependencies': [ '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 @@ ...@@ -223,6 +223,12 @@
<structure name="IDR_SETTINGS_CR_SETTINGS_MENU_JS" <structure name="IDR_SETTINGS_CR_SETTINGS_MENU_JS"
file="settings_menu/settings_menu.js" file="settings_menu/settings_menu.js"
type="chrome_html" /> 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" <structure name="IDR_SETTINGS_CR_SETTINGS_SECTION_HTML"
file="settings_page/settings_section.html" file="settings_page/settings_section.html"
type="chrome_html" /> type="chrome_html" />
......
...@@ -96,6 +96,7 @@ ...@@ -96,6 +96,7 @@
<div class="drawer-content"> <div class="drawer-content">
<template is="dom-if" id="drawerTemplate"> <template is="dom-if" id="drawerTemplate">
<settings-menu page-visibility="[[pageVisibility_]]" <settings-menu page-visibility="[[pageVisibility_]]"
show-android-apps="[[showAndroidApps_]]"
on-iron-activate="onIronActivate_" on-iron-activate="onIronActivate_"
advanced-opened="{{advancedOpened_}}"> advanced-opened="{{advancedOpened_}}">
</settings-menu> </settings-menu>
...@@ -109,6 +110,7 @@ ...@@ -109,6 +110,7 @@
<settings-main id="main" prefs="{{prefs}}" <settings-main id="main" prefs="{{prefs}}"
toolbar-spinner-active="{{toolbarSpinnerActive_}}" toolbar-spinner-active="{{toolbarSpinnerActive_}}"
page-visibility="[[pageVisibility_]]" page-visibility="[[pageVisibility_]]"
show-android-apps="[[showAndroidApps_]]"
advanced-toggle-expanded="{{advancedOpened_}}"> advanced-toggle-expanded="{{advancedOpened_}}">
</settings-main> </settings-main>
</div> </div>
......
...@@ -48,16 +48,15 @@ Polymer({ ...@@ -48,16 +48,15 @@ Polymer({
}, },
/** /**
* Dictionary defining page visibility. Pages are hidden when their entry * Dictionary defining page visibility.
* is set to *false*. i.e. visibility defaults to true. * This is only set when in guest mode. All pages are visible when not set
* @private {!PageVisibility} * because polymer only notifies after a property is set.
* @private {!GuestModePageVisibility}
*/ */
pageVisibility_: { pageVisibility_: Object,
type: Object,
value: function() { /** @private */
return {}; showAndroidApps_: Boolean,
},
},
/** @private */ /** @private */
lastSearchQuery_: { lastSearchQuery_: {
...@@ -157,11 +156,8 @@ Polymer({ ...@@ -157,11 +156,8 @@ Polymer({
}; };
} }
// <if expr="chromeos"> this.showAndroidApps_ = loadTimeData.valueExists('androidAppsAllowed') &&
this.pageVisibility_.androidApps =
loadTimeData.valueExists('androidAppsAllowed') &&
loadTimeData.getBoolean('androidAppsAllowed'); loadTimeData.getBoolean('androidAppsAllowed');
// </if>
}, },
/** @private {?IntersectionObserver} */ /** @private {?IntersectionObserver} */
......
...@@ -7,11 +7,9 @@ ...@@ -7,11 +7,9 @@
*/ */
/** /**
* Specifies page visibility. Only pages that have conditional visibility * Specifies page visibility in guest mode in cr and cros.
* (e.g. in Guest mode) have defined entries.
* @typedef {{ * @typedef {{
* advancedSettings: (boolean|undefined), * advancedSettings: (boolean|undefined),
* androidApps: (boolean|undefined),
* appearance: (boolean|undefined|AppearancePageVisibility), * appearance: (boolean|undefined|AppearancePageVisibility),
* dateTime: (boolean|undefined|DateTimePageVisibility), * dateTime: (boolean|undefined|DateTimePageVisibility),
* defaultBrowser: (boolean|undefined), * defaultBrowser: (boolean|undefined),
...@@ -23,37 +21,37 @@ ...@@ -23,37 +21,37 @@
* reset:(boolean|undefined), * reset:(boolean|undefined),
* }} * }}
*/ */
var PageVisibility; var GuestModePageVisibility;
/** /**
* @typedef {{ * @typedef {{
* bookmarksBar: (boolean|undefined), * bookmarksBar: boolean,
* homeButton: (boolean|undefined), * homeButton: boolean,
* pageZoom: (boolean|undefined), * pageZoom: boolean,
* setTheme: (boolean|undefined), * setTheme: boolean,
* setWallpaper: (boolean|undefined), * setWallpaper: boolean,
* }} * }}
*/ */
var AppearancePageVisibility; var AppearancePageVisibility;
/** /**
* @typedef {{ * @typedef {{
* timeZoneSelector: (boolean|undefined), * timeZoneSelector: boolean,
* }} * }}
*/ */
var DateTimePageVisibility; var DateTimePageVisibility;
/** /**
* @typedef {{ * @typedef {{
* googleDrive: (boolean|undefined) * googleDrive: boolean
* }} * }}
*/ */
var DownloadsPageVisibility; var DownloadsPageVisibility;
/** /**
* @typedef {{ * @typedef {{
* networkPrediction: (boolean|undefined), * networkPrediction: boolean,
* searchPrediction: (boolean|undefined), * searchPrediction: boolean,
* }} * }}
*/ */
var PrivacyPageVisibility; var PrivacyPageVisibility;
......
...@@ -122,6 +122,7 @@ js2gtest("browser_tests_js_webui") { ...@@ -122,6 +122,7 @@ js2gtest("browser_tests_js_webui") {
"settings/settings_idle_load_browsertest.js", "settings/settings_idle_load_browsertest.js",
"settings/settings_page_browsertest.js", "settings/settings_page_browsertest.js",
"settings/settings_passwords_section_browsertest.js", "settings/settings_passwords_section_browsertest.js",
"settings/settings_subpage_browsertest.js",
"settings/settings_ui_browsertest.js", "settings/settings_ui_browsertest.js",
"settings/site_settings_page_browsertest.js", "settings/site_settings_page_browsertest.js",
] ]
......
...@@ -482,6 +482,7 @@ CrSettingsRtlTest.prototype = { ...@@ -482,6 +482,7 @@ CrSettingsRtlTest.prototype = {
}; };
TEST_F('CrSettingsRtlTest', 'DrawerPanelFlips', function() { TEST_F('CrSettingsRtlTest', 'DrawerPanelFlips', function() {
settingsHidePagesByDefaultForTest = true;
settings_rtl_tests.registerDrawerPanelTests(); settings_rtl_tests.registerDrawerPanelTests();
mocha.run(); mocha.run();
}); });
......
...@@ -24,6 +24,7 @@ SettingsEasyUnlockBrowserTest.prototype = { ...@@ -24,6 +24,7 @@ SettingsEasyUnlockBrowserTest.prototype = {
/** @override */ /** @override */
preLoad: function() { preLoad: function() {
SettingsPageBrowserTest.prototype.preLoad.call(this); SettingsPageBrowserTest.prototype.preLoad.call(this);
settingsHidePagesByDefaultForTest = true;
}, },
}; };
......
...@@ -27,6 +27,7 @@ SettingsLanguagesPageBrowserTest.prototype = { ...@@ -27,6 +27,7 @@ SettingsLanguagesPageBrowserTest.prototype = {
/** @override */ /** @override */
preLoad: function() { preLoad: function() {
SettingsPageBrowserTest.prototype.preLoad.call(this); SettingsPageBrowserTest.prototype.preLoad.call(this);
settingsHidePagesByDefaultForTest = true;
}, },
}; };
...@@ -82,7 +83,11 @@ TEST_F('SettingsLanguagesPageBrowserTest', 'MAYBE_LanguagesPage', function() { ...@@ -82,7 +83,11 @@ TEST_F('SettingsLanguagesPageBrowserTest', 'MAYBE_LanguagesPage', function() {
} }
suiteSetup(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( languagesPage = assert(
languagesSection.querySelector('settings-languages-page')); languagesSection.querySelector('settings-languages-page'));
languagesCollapse = languagesPage.$.languagesCollapse; languagesCollapse = languagesPage.$.languagesCollapse;
......
...@@ -40,6 +40,7 @@ OnStartupSettingsBrowserTest.prototype = { ...@@ -40,6 +40,7 @@ OnStartupSettingsBrowserTest.prototype = {
/** @override */ /** @override */
preLoad: function() { preLoad: function() {
SettingsPageBrowserTest.prototype.preLoad.call(this); SettingsPageBrowserTest.prototype.preLoad.call(this);
settingsHidePagesByDefaultForTest = true;
}, },
}; };
...@@ -58,6 +59,9 @@ TEST_F('OnStartupSettingsBrowserTest', 'uiTests', function() { ...@@ -58,6 +59,9 @@ TEST_F('OnStartupSettingsBrowserTest', 'uiTests', function() {
suite('OnStartupHandler', function() { suite('OnStartupHandler', function() {
suiteSetup(function() { suiteSetup(function() {
self.basicPage.set('pageVisibility.onStartup', true);
Polymer.dom.flush();
settingsPrefs = document.querySelector('settings-ui').$$( settingsPrefs = document.querySelector('settings-ui').$$(
'settings-prefs'); 'settings-prefs');
assertTrue(!!settingsPrefs); assertTrue(!!settingsPrefs);
......
...@@ -71,8 +71,6 @@ cr.define('settings_main_page', function() { ...@@ -71,8 +71,6 @@ cr.define('settings_main_page', function() {
settingsMain = document.createElement('settings-main'); settingsMain = document.createElement('settings-main');
settingsMain.prefs = settingsPrefs.prefs; settingsMain.prefs = settingsPrefs.prefs;
settingsMain.toolbarSpinnerActive = false; settingsMain.toolbarSpinnerActive = false;
// Set default page visibility.
settingsMain.pageVisibility = {};
document.body.appendChild(settingsMain); 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