diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-05-03 13:42:47 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-05-15 10:27:51 +0000 |
commit | 8c5c43c7b138c9b4b0bf56d946e61d3bbc111bec (patch) | |
tree | d29d987c4d7b173cf853279b79a51598f104b403 /chromium/chrome/browser/resources/settings | |
parent | 830c9e163d31a9180fadca926b3e1d7dfffb5021 (diff) |
BASELINE: Update Chromium to 66.0.3359.156
Change-Id: I0c9831ad39911a086b6377b16f995ad75a51e441
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
Diffstat (limited to 'chromium/chrome/browser/resources/settings')
178 files changed, 2774 insertions, 1857 deletions
diff --git a/chromium/chrome/browser/resources/settings/PRESUBMIT.py b/chromium/chrome/browser/resources/settings/PRESUBMIT.py new file mode 100644 index 00000000000..dcc145b7f91 --- /dev/null +++ b/chromium/chrome/browser/resources/settings/PRESUBMIT.py @@ -0,0 +1,24 @@ +# Copyright 2018 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. + + +def _CheckChangeOnUploadOrCommit(input_api, output_api): + import sys + old_sys_path, cwd = sys.path[:], input_api.PresubmitLocalPath() + src_root = input_api.os_path.join(cwd, '..', '..', '..', '..') + try: + sys.path += [input_api.os_path.join(src_root, 'tools', 'web_dev_style')] + import web_dev_style.presubmit_support + finally: + sys.path = old_sys_path + return web_dev_style.presubmit_support.DisallowIncludes(input_api, output_api, + '<include> does not work in settings; use HTML imports instead') + + +def CheckChangeOnUpload(input_api, output_api): + return _CheckChangeOnUploadOrCommit(input_api, output_api) + + +def CheckChangeOnCommit(input_api, output_api): + return _CheckChangeOnUploadOrCommit(input_api, output_api) diff --git a/chromium/chrome/browser/resources/settings/a11y_page/a11y_page.html b/chromium/chrome/browser/resources/settings/a11y_page/a11y_page.html index 8e9979679bd..3714da1774e 100644 --- a/chromium/chrome/browser/resources/settings/a11y_page/a11y_page.html +++ b/chromium/chrome/browser/resources/settings/a11y_page/a11y_page.html @@ -24,7 +24,7 @@ pref="{{prefs.settings.a11y.enable_menu}}"> </settings-toggle-button> <div id="subpage-trigger" class="settings-box two-line" - on-tap="onManageAccessibilityFeaturesTap_" actionable> + on-click="onManageAccessibilityFeaturesTap_" actionable> <div class="start"> $i18n{manageAccessibilityFeatures} <div class="secondary" id="themesSecondary"> diff --git a/chromium/chrome/browser/resources/settings/a11y_page/manage_a11y_page.html b/chromium/chrome/browser/resources/settings/a11y_page/manage_a11y_page.html index 08720eb78c2..59420dcd63f 100644 --- a/chromium/chrome/browser/resources/settings/a11y_page/manage_a11y_page.html +++ b/chromium/chrome/browser/resources/settings/a11y_page/manage_a11y_page.html @@ -16,11 +16,7 @@ -webkit-padding-start: var(--settings-box-row-padding); } - .list-item settings-dropdown-menu { - -webkit-margin-start: 16px; - } - - .sub-item > .start { + .sub-item { -webkit-margin-start: var(--settings-indent-width); } @@ -50,7 +46,7 @@ </settings-toggle-button> <iron-collapse opened="[[prefs.settings.accessibility.value]]"> <div class="settings-box" - on-tap="onChromeVoxSettingsTap_" actionable> + on-click="onChromeVoxSettingsTap_" actionable> <div class="start">$i18n{chromeVoxOptionsLabel}</div> <button class="icon-external" is="paper-icon-button-light" aria-label="$i18n{chromeVoxOptionsLabel}"></button> @@ -63,7 +59,7 @@ </settings-toggle-button> <iron-collapse opened="[[prefs.settings.a11y.select_to_speak.value]]"> <div class="settings-box" - on-tap="onSelectToSpeakSettingsTap_" actionable> + on-click="onSelectToSpeakSettingsTap_" actionable> <div class="start">$i18n{selectToSpeakOptionsLabel}</div> <button class="icon-external" is="paper-icon-button-light" aria-label="$i18n{selectToSpeakOptionsLabel}"></button> @@ -77,9 +73,33 @@ </settings-toggle-button> <settings-toggle-button class="continuation" pref="{{prefs.settings.a11y.screen_magnifier}}" - label="$i18n{screenMagnifierLabel}"> + label="$i18n{screenMagnifierLabel}" + disabled="[[prefs.ash.docked_magnifier.enabled.value]]"> </settings-toggle-button> - <div class="settings-box two-line" on-tap="onDisplayTap_" actionable> + <div class="settings-box continuation"> + <div class="start sub-item">$i18n{screenMagnifierZoomLabel}</div> + <settings-dropdown-menu label="$i18n{screenMagnifierZoomLabel}" + pref="{{prefs.settings.a11y.screen_magnifier_scale}}" + menu-options="[[screenMagnifierZoomOptions_]]" + disabled="[[!prefs.settings.a11y.screen_magnifier.value]]"> + </settings-dropdown-menu> + </div> + <template is="dom-if" if="[[dockedMagnifierFeatureEnabled_]]" restamp> + <settings-toggle-button class="continuation" + pref="{{prefs.ash.docked_magnifier.enabled}}" + label="$i18n{dockedMagnifierLabel}" + disabled="[[prefs.settings.a11y.screen_magnifier.value]]"> + </settings-toggle-button> + <div class="settings-box continuation"> + <div class="start sub-item">$i18n{dockedMagnifierZoomLabel}</div> + <settings-dropdown-menu label="$i18n{dockedMagnifierZoomLabel}" + pref="{{prefs.ash.docked_magnifier.scale}}" + menu-options="[[screenMagnifierZoomOptions_]]" + disabled="[[!prefs.ash.docked_magnifier.enabled.value]]"> + </settings-dropdown-menu> + </div> + </template> + <div class="settings-box two-line" on-click="onDisplayTap_" actionable> <div class="start"> $i18n{displaySettingsTitle} <div class="secondary">$i18n{displaySettingsDescription}</div> @@ -88,7 +108,7 @@ aria-label="$i18n{displaySettingsTitle}" aria-describedby="displaySettingsSecondary"></button> </div> - <div class="settings-box two-line" on-tap="onAppearanceTap_" actionable> + <div class="settings-box two-line" on-click="onAppearanceTap_" actionable> <div class="start"> $i18n{appearanceSettingsTitle} <div class="secondary" id="appearanceSettingsSecondary"> @@ -123,13 +143,13 @@ label="$i18n{switchAccessLabel}"> <button is="paper-icon-button-light" class="icon-settings" slot="more-actions" - on-tap="onSwitchAccessSettingsTap_" + on-click="onSwitchAccessSettingsTap_" hidden="[[!prefs.settings.a11y.switch_access.value]]" aria-label="$i18n{selectToSpeakOptionsLabel}"> </button> </settings-toggle-button> </template> - <div class="settings-box two-line" on-tap="onKeyboardTap_" actionable> + <div class="settings-box two-line" on-click="onKeyboardTap_" actionable> <div class="start"> $i18n{keyboardSettingsTitle} <div class="secondary" id="keyboardSettingsSecondary"> @@ -146,15 +166,13 @@ pref="{{prefs.settings.a11y.autoclick}}" label="$i18n{clickOnStopLabel}"> </settings-toggle-button> - <div class="settings-box block first"> - <div class="list-item sub-item"> - <div class="start">$i18n{delayBeforeClickLabel}</div> - <settings-dropdown-menu label="$i18n{delayBeforeClickLabel}" - pref="{{prefs.settings.a11y.autoclick_delay_ms}}" - menu-options="[[autoClickDelayOptions_]]" - disabled="[[!prefs.settings.a11y.autoclick.value]]"> - </settings-dropdown-menu> - </div> + <div class="settings-box continuation"> + <div class="start sub-item">$i18n{delayBeforeClickLabel}</div> + <settings-dropdown-menu label="$i18n{delayBeforeClickLabel}" + pref="{{prefs.settings.a11y.autoclick_delay_ms}}" + menu-options="[[autoClickDelayOptions_]]" + disabled="[[!prefs.settings.a11y.autoclick.value]]"> + </settings-dropdown-menu> </div> <settings-toggle-button class="continuation" pref="{{prefs.settings.touchpad.enable_tap_dragging}}" @@ -164,23 +182,21 @@ pref="{{prefs.settings.a11y.large_cursor_enabled}}" label="$i18n{largeMouseCursorLabel}"> </settings-toggle-button> - <div class="settings-box block continuation" + <div class="settings-box continuation" hidden$="[[!prefs.settings.a11y.large_cursor_enabled.value]]"> - <div class="list-item sub-item"> - <div class="start">$i18n{largeMouseCursorSizeLabel}</div> - <settings-slider - pref="{{prefs.settings.a11y.large_cursor_dip_size}}" - min="25" max="64" - label-min="$i18n{largeMouseCursorSizeDefaultLabel}" - label-max="$i18n{largeMouseCursorSizeLargeLabel}"> - </settings-slider> - </div> + <div class="start sub-item">$i18n{largeMouseCursorSizeLabel}</div> + <settings-slider + pref="{{prefs.settings.a11y.large_cursor_dip_size}}" + min="25" max="64" + label-min="$i18n{largeMouseCursorSizeDefaultLabel}" + label-max="$i18n{largeMouseCursorSizeLargeLabel}"> + </settings-slider> </div> <settings-toggle-button class="continuation" pref="{{prefs.settings.a11y.cursor_highlight}}" label="$i18n{cursorHighlightLabel}"> </settings-toggle-button> - <div class="settings-box two-line" on-tap="onMouseTap_" actionable> + <div class="settings-box two-line" on-click="onMouseTap_" actionable> <div class="start"> $i18n{mouseSettingsTitle} <div class="secondary" id="mouseSettingsSecondary"> diff --git a/chromium/chrome/browser/resources/settings/a11y_page/manage_a11y_page.js b/chromium/chrome/browser/resources/settings/a11y_page/manage_a11y_page.js index 79e39c1dd0e..090a8a7f74a 100644 --- a/chromium/chrome/browser/resources/settings/a11y_page/manage_a11y_page.js +++ b/chromium/chrome/browser/resources/settings/a11y_page/manage_a11y_page.js @@ -19,6 +19,28 @@ Polymer({ notify: true, }, + screenMagnifierZoomOptions_: { + readOnly: true, + type: Array, + value: function() { + // These values correspond to the i18n values in settings_strings.grdp. + // If these values get changed then those strings need to be changed as + // well. + return [ + {value: 2, name: loadTimeData.getString('screenMagnifierZoom2x')}, + {value: 4, name: loadTimeData.getString('screenMagnifierZoom4x')}, + {value: 6, name: loadTimeData.getString('screenMagnifierZoom6x')}, + {value: 8, name: loadTimeData.getString('screenMagnifierZoom8x')}, + {value: 10, name: loadTimeData.getString('screenMagnifierZoom10x')}, + {value: 12, name: loadTimeData.getString('screenMagnifierZoom12x')}, + {value: 14, name: loadTimeData.getString('screenMagnifierZoom14x')}, + {value: 16, name: loadTimeData.getString('screenMagnifierZoom16x')}, + {value: 18, name: loadTimeData.getString('screenMagnifierZoom18x')}, + {value: 20, name: loadTimeData.getString('screenMagnifierZoom20x')}, + ]; + }, + }, + autoClickDelayOptions_: { readOnly: true, type: Array, @@ -56,6 +78,17 @@ Polymer({ }, }, + /** + * Whether the docked magnifier flag is enabled. + * @private {boolean} + */ + dockedMagnifierFeatureEnabled_: { + type: Boolean, + value: function() { + return loadTimeData.getBoolean('dockedMagnifierFeatureEnabled'); + }, + }, + /** @private */ isGuest_: { type: Boolean, diff --git a/chromium/chrome/browser/resources/settings/about_page/about_page.html b/chromium/chrome/browser/resources/settings/about_page/about_page.html index 4f2f097bbe7..9053116b11d 100644 --- a/chromium/chrome/browser/resources/settings/about_page/about_page.html +++ b/chromium/chrome/browser/resources/settings/about_page/about_page.html @@ -78,7 +78,7 @@ <if expr="_google_chrome and is_macosx"> #promoteUpdater[disabled] { - @apply(--cr-secondary-text); + @apply --cr-secondary-text; } </if> </style> @@ -88,7 +88,7 @@ focus-config="[[focusConfig_]]"> <neon-animatable route-path="default"> <div class="settings-box two-line"> - <img id="product-logo" on-tap="onProductLogoTap_" + <img id="product-logo" on-click="onProductLogoTap_" srcset="chrome://theme/current-channel-logo@1x 1x, chrome://theme/current-channel-logo@2x 2x" alt="$i18n{aboutProductLogoAlt}"> @@ -153,18 +153,18 @@ <div class="separator" hidden="[[!showButtonContainer_]]"></div> <span id="buttonContainer" hidden="[[!showButtonContainer_]]"> <paper-button id="relaunch" class="secondary-button" - hidden="[[!showRelaunch_]]" on-tap="onRelaunchTap_"> + hidden="[[!showRelaunch_]]" on-click="onRelaunchTap_"> $i18n{aboutRelaunch} </paper-button> <if expr="chromeos"> <paper-button id="relaunchAndPowerwash" class="secondary-button" hidden="[[!showRelaunchAndPowerwash_]]" - on-tap="onRelaunchAndPowerwashTap_"> + on-click="onRelaunchAndPowerwashTap_"> $i18n{aboutRelaunchAndPowerwash} </paper-button> <paper-button id="checkForUpdates" class="secondary-button" hidden="[[!showCheckUpdates_]]" - on-tap="onCheckUpdatesTap_"> + on-click="onCheckUpdatesTap_"> $i18n{aboutCheckForUpdates} </paper-button> </if> @@ -173,13 +173,13 @@ <if expr="chromeos"> <div id="aboutTPMFirmwareUpdate" class="settings-box two-line" hidden$="[[!showTPMFirmwareUpdateLineItem_]]" - on-tap="onTPMFirmwareUpdateTap_" actionable> + on-click="onTPMFirmwareUpdateTap_" actionable> <div class="start"> <div>$i18n{aboutTPMFirmwareUpdateTitle}</div> <div class="secondary"> $i18n{aboutTPMFirmwareUpdateDescription} <a href="$i18n{aboutTPMFirmwareUpdateLearnMoreURL}" - target="_blank" on-tap="onLearnMoreTap_"> + target="_blank" on-click="onLearnMoreTap_"> $i18n{learnMore} </a> </div> @@ -194,12 +194,12 @@ <div id="promoteUpdater" class="settings-box" disabled$="[[promoteUpdaterStatus_.disabled]]" actionable$="[[promoteUpdaterStatus_.actionable]]" - on-tap="onPromoteUpdaterTap_"> + on-click="onPromoteUpdaterTap_"> <div class="start"> [[promoteUpdaterStatus_.text]] <a href="https://support.google.com/chrome/answer/95414" target="_blank" id="updaterLearnMore" - on-tap="onLearnMoreTap_"> + on-click="onLearnMoreTap_"> $i18n{learnMore} </a> </div> @@ -211,21 +211,22 @@ </div> </template> </if> - <div id="help" class="settings-box" on-tap="onHelpTap_" actionable> + <div id="help" class="settings-box" on-click="onHelpTap_" + actionable> <div class="start">$i18n{aboutGetHelpUsingChrome}</div> <button class="icon-external" is="paper-icon-button-light" aria-labelledby="help"></button> </div> <if expr="_google_chrome"> <div id="reportIssue" class="settings-box" actionable - on-tap="onReportIssueTap_"> + on-click="onReportIssueTap_"> <div class="start">$i18n{aboutReportAnIssue}</div> <button class="subpage-arrow" is="paper-icon-button-light" aria-labelledby="reportIssue"></button> </div> </if> <if expr="chromeos"> - <div class="settings-box" on-tap="onDetailedBuildInfoTap_" + <div class="settings-box" on-click="onDetailedBuildInfoTap_" actionable> <div class="start">$i18n{aboutDetailedBuildInfo}</div> <button id="detailed-build-info-trigger" class="subpage-arrow" diff --git a/chromium/chrome/browser/resources/settings/about_page/channel_switcher_dialog.html b/chromium/chrome/browser/resources/settings/about_page/channel_switcher_dialog.html index 9f58ef3661b..70cbc55efe9 100644 --- a/chromium/chrome/browser/resources/settings/about_page/channel_switcher_dialog.html +++ b/chromium/chrome/browser/resources/settings/about_page/channel_switcher_dialog.html @@ -53,15 +53,15 @@ </iron-selector> </div> <div slot="button-container"> - <paper-button class="cancel-button" on-tap="onCancelTap_" + <paper-button class="cancel-button" on-click="onCancelTap_" id="cancel">$i18n{cancel}</paper-button> <paper-button id="changeChannel" class="action-button" - on-tap="onChangeChannelTap_" + on-click="onChangeChannelTap_" hidden="[[!shouldShowButtons_.changeChannel]]"> $i18n{aboutChangeChannel} </paper-button> <paper-button id="changeChannelAndPowerwash" class="action-button" - on-tap="onChangeChannelAndPowerwashTap_" + on-click="onChangeChannelAndPowerwashTap_" hidden="[[!shouldShowButtons_.changeChannelAndPowerwash]]"> $i18n{aboutChangeChannelAndPowerwash} </paper-button> diff --git a/chromium/chrome/browser/resources/settings/about_page/detailed_build_info.html b/chromium/chrome/browser/resources/settings/about_page/detailed_build_info.html index a1ae3142cd9..08ab773cc7c 100644 --- a/chromium/chrome/browser/resources/settings/about_page/detailed_build_info.html +++ b/chromium/chrome/browser/resources/settings/about_page/detailed_build_info.html @@ -39,7 +39,7 @@ <div class="secondary">[[currentlyOnChannelText_]]</div> </div> <div class="separator"></div> - <paper-button on-tap="onChangeChannelTap_" + <paper-button on-click="onChangeChannelTap_" disabled="[[!canChangeChannel_]]"> $i18n{aboutChangeChannel} </paper-button> diff --git a/chromium/chrome/browser/resources/settings/about_page/update_warning_dialog.html b/chromium/chrome/browser/resources/settings/about_page/update_warning_dialog.html index 3a336109f1f..e6dd4ab2540 100644 --- a/chromium/chrome/browser/resources/settings/about_page/update_warning_dialog.html +++ b/chromium/chrome/browser/resources/settings/about_page/update_warning_dialog.html @@ -16,9 +16,9 @@ </div> <div slot="button-container"> <paper-button id="cancel" class="cancel-button" - on-tap="onCancelTap_">$i18n{cancel}</paper-button> + on-click="onCancelTap_">$i18n{cancel}</paper-button> <paper-button id="continue" class="action-button" - on-tap="onContinueTap_"> + on-click="onContinueTap_"> $i18n{aboutUpdateWarningContinue} </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/android_apps_page/android_apps_page.html b/chromium/chrome/browser/resources/settings/android_apps_page/android_apps_page.html index a59514198c0..db780b0d718 100644 --- a/chromium/chrome/browser/resources/settings/android_apps_page/android_apps_page.html +++ b/chromium/chrome/browser/resources/settings/android_apps_page/android_apps_page.html @@ -23,7 +23,7 @@ <template is="dom-if" if="[[havePlayStoreApp]]" restamp> <div id="android-apps" class="settings-box two-line first" actionable$="[[androidAppsInfo.playStoreEnabled]]" - on-tap="onSubpageTap_"> + on-click="onSubpageTap_"> <div class="start"> $i18n{androidAppsPageLabel} <div class="secondary" id="secondaryText" @@ -43,7 +43,7 @@ <div class="separator"></div> <paper-button id="enable" class="secondary-button" disabled="[[isEnforced_(prefs.arc.enabled)]]" - on-tap="onEnableTap_" + on-click="onEnableTap_" aria-label="$i18n{androidAppsPageTitle}" aria-describedby="secondaryText"> $i18n{androidAppsEnable} diff --git a/chromium/chrome/browser/resources/settings/android_apps_page/android_apps_subpage.html b/chromium/chrome/browser/resources/settings/android_apps_page/android_apps_subpage.html index 58cc44902e0..771918fe76a 100644 --- a/chromium/chrome/browser/resources/settings/android_apps_page/android_apps_subpage.html +++ b/chromium/chrome/browser/resources/settings/android_apps_page/android_apps_subpage.html @@ -21,7 +21,7 @@ </template> <template is="dom-if" if="[[allowRemove_(prefs.arc.enabled.*)]]"> - <div id="remove" class="settings-box" actionable on-tap="onRemoveTap_"> + <div id="remove" class="settings-box" actionable on-click="onRemoveTap_"> <div class="start">$i18n{androidAppsRemove}</div> <button class="subpage-arrow" is="paper-icon-button-light" aria-label="$i18n{androidAppsRemove}"> @@ -37,11 +37,11 @@ <div slot="body" inner-h-t-m-l="[[dialogBody_]]"></div> <div slot="button-container"> <paper-button class="cancel-button" - on-tap="onConfirmDisableDialogCancel_"> + on-click="onConfirmDisableDialogCancel_"> $i18n{cancel} </paper-button> <paper-button class="action-button" - on-tap="onConfirmDisableDialogConfirm_"> + on-click="onConfirmDisableDialogConfirm_"> $i18n{androidAppsDisableDialogRemove} </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/android_apps_page/android_settings_element.html b/chromium/chrome/browser/resources/settings/android_apps_page/android_settings_element.html index 17b6e861109..eb65859100f 100644 --- a/chromium/chrome/browser/resources/settings/android_apps_page/android_settings_element.html +++ b/chromium/chrome/browser/resources/settings/android_apps_page/android_settings_element.html @@ -12,7 +12,7 @@ <style include="settings-shared"></style> <div id="manageApps" class="settings-box first" on-keydown="onManageAndroidAppsKeydown_" - on-tap="onManageAndroidAppsTap_" actionable> + on-click="onManageAndroidAppsTap_" actionable> <div class="start"> <div>$i18n{androidAppsManageApps}</div> </div> diff --git a/chromium/chrome/browser/resources/settings/appearance_page/appearance_fonts_page.html b/chromium/chrome/browser/resources/settings/appearance_page/appearance_fonts_page.html index 3b014cc73a3..d82f8743fac 100644 --- a/chromium/chrome/browser/resources/settings/appearance_page/appearance_fonts_page.html +++ b/chromium/chrome/browser/resources/settings/appearance_page/appearance_fonts_page.html @@ -121,7 +121,7 @@ </div> <template is="dom-if" if="[[!isGuest_]]"> <div class="settings-box two-line" id="advancedButton" - on-tap="openAdvancedExtension_" actionable> + on-click="openAdvancedExtension_" actionable> <div class="start"> $i18n{advancedFontSettings} <div class="secondary" id="advancedButtonSublabel"> diff --git a/chromium/chrome/browser/resources/settings/appearance_page/appearance_page.html b/chromium/chrome/browser/resources/settings/appearance_page/appearance_page.html index 7ac5845998d..6667159ff4e 100644 --- a/chromium/chrome/browser/resources/settings/appearance_page/appearance_page.html +++ b/chromium/chrome/browser/resources/settings/appearance_page/appearance_page.html @@ -60,7 +60,7 @@ <button icon-class="icon-external" id="wallpaperButton" is="cr-link-row" hidden="[[!pageVisibility.setWallpaper]]" - on-tap="openWallpaperManager_" + on-click="openWallpaperManager_" label="$i18n{setWallpaper}" sub-label="$i18n{openWallpaperApp}" disabled="[[isWallpaperPolicyControlled_]]"> <template is="dom-if" if="[[isWallpaperPolicyControlled_]]"> @@ -76,11 +76,11 @@ <button class="first" icon-class="icon-external" is="cr-link-row" hidden="[[!pageVisibility.setTheme]]" label="$i18n{themes}" sub-label="[[themeSublabel_]]" - on-tap="openThemeUrl_"></button> + on-click="openThemeUrl_"></button> <if expr="not is_linux or chromeos"> <template is="dom-if" if="[[prefs.extensions.theme.id.value]]"> <div class="separator"></div> - <paper-button id="useDefault" on-tap="onUseDefaultTap_" + <paper-button id="useDefault" on-click="onUseDefaultTap_" class="secondary-button"> $i18n{resetToDefaultTheme} </paper-button> @@ -94,14 +94,14 @@ <div class="separator"></div> <template is="dom-if" if="[[showUseClassic_( prefs.extensions.theme.id.value, useSystemTheme_)]]" restamp> - <paper-button id="useDefault" on-tap="onUseDefaultTap_" + <paper-button id="useDefault" on-click="onUseDefaultTap_" class="secondary-button"> $i18n{useClassicTheme} </paper-button> </template> <template is="dom-if" if="[[showUseSystem_( prefs.extensions.theme.id.value, useSystemTheme_)]]" restamp> - <paper-button id="useSystem" on-tap="onUseSystemTap_" + <paper-button id="useSystem" on-click="onUseSystemTap_" class="secondary-button"> $i18n{useSystemTheme} </paper-button> @@ -168,7 +168,7 @@ </div> <button class="hr" is="cr-link-row" icon-class="subpage-arrow" id="customize-fonts-subpage-trigger" - label="$i18n{customizeFonts}" on-tap="onCustomizeFontsTap_"> + label="$i18n{customizeFonts}" on-click="onCustomizeFontsTap_"> </button> <div class="settings-box" hidden="[[!pageVisibility.pageZoom]]"> <div id="pageZoom" class="start">$i18n{pageZoom}</div> diff --git a/chromium/chrome/browser/resources/settings/basic_page/basic_page.html b/chromium/chrome/browser/resources/settings/basic_page/basic_page.html index 94029ec4769..80ab0b65c36 100644 --- a/chromium/chrome/browser/resources/settings/basic_page/basic_page.html +++ b/chromium/chrome/browser/resources/settings/basic_page/basic_page.html @@ -46,7 +46,7 @@ --paper-button: { text-transform: none; } - @apply(--settings-actionable); + @apply --settings-actionable; align-items: center; display: flex; margin-bottom: 3px; @@ -56,7 +56,7 @@ } #secondaryUserBanner { - @apply(--shadow-elevation-2dp); + @apply --shadow-elevation-2dp; align-items: center; background-color: white; border-radius: 2px; diff --git a/chromium/chrome/browser/resources/settings/bluetooth_page/bluetooth_device_list_item.html b/chromium/chrome/browser/resources/settings/bluetooth_page/bluetooth_device_list_item.html index b7134f661f3..c3ddc427f33 100644 --- a/chromium/chrome/browser/resources/settings/bluetooth_page/bluetooth_device_list_item.html +++ b/chromium/chrome/browser/resources/settings/bluetooth_page/bluetooth_device_list_item.html @@ -33,14 +33,15 @@ <span hidden$="[[!device.connecting]]">$i18n{bluetoothConnecting}</span> <div hidden$="[[!device.paired]]"> <button is="paper-icon-button-light" class="icon-more-vert" - on-tap="onMenuButtonTap_" tabindex$="[[tabindex]]" + on-click="onMenuButtonTap_" tabindex$="[[tabindex]]" title="$i18n{moreActions}" on-keydown="ignoreEnterKey_"> </button> <dialog id="dotsMenu" is="cr-action-menu"> - <button class="dropdown-item" on-tap="onConnectActionTap_"> + <button slot="item" class="dropdown-item" + on-click="onConnectActionTap_"> [[getConnectActionText_(device.connected)]] </button> - <button class="dropdown-item" on-tap="onRemoveTap_"> + <button slot="item" class="dropdown-item" on-click="onRemoveTap_"> $i18n{bluetoothRemove} </button> </dialog> diff --git a/chromium/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.html b/chromium/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.html index fb27688ce72..1e386deda42 100644 --- a/chromium/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.html +++ b/chromium/chrome/browser/resources/settings/bluetooth_page/bluetooth_page.html @@ -21,7 +21,7 @@ focus-config="[[focusConfig_]]"> <neon-animatable route-path="default"> <div id="bluetoothDevices" - class="settings-box two-line" actionable on-tap="onTap_"> + class="settings-box two-line" actionable on-click="onTap_"> <iron-icon icon="[[getIcon_(bluetoothToggleState_)]]"></iron-icon> <div class="middle"> $i18n{bluetoothPageTitle} @@ -36,7 +36,7 @@ </cr-policy-pref-indicator> <template is="dom-if" if="[[bluetoothToggleState_]]"> <button class="subpage-arrow" is="paper-icon-button-light" - on-tap="onSubpageArrowTap_" + on-click="onSubpageArrowTap_" aria-label="$i18n{bluetoothPageTitle}" aria-describedby="bluetoothSecondary"> </button> @@ -46,7 +46,7 @@ checked="{{bluetoothToggleState_}}" disabled$= "[[!isToggleEnabled_(adapterState_, stateChangeInProgress_)]]" - on-tap="stopTap_" + on-click="stopTap_" aria-label="$i18n{bluetoothToggleA11yLabel}"> </paper-toggle-button> </div> diff --git a/chromium/chrome/browser/resources/settings/bluetooth_page/bluetooth_subpage.html b/chromium/chrome/browser/resources/settings/bluetooth_page/bluetooth_subpage.html index 6ca9d1b16fa..018a505ac33 100644 --- a/chromium/chrome/browser/resources/settings/bluetooth_page/bluetooth_subpage.html +++ b/chromium/chrome/browser/resources/settings/bluetooth_page/bluetooth_subpage.html @@ -15,7 +15,7 @@ <template> <style include="settings-shared iron-flex"> .container { - @apply(--settings-list-frame-padding); + @apply --settings-list-frame-padding; display: flex; flex-direction: column; min-height: 10px; @@ -27,7 +27,7 @@ } paper-spinner-lite { - @apply(--cr-icon-height-width); + @apply --cr-icon-height-width; } #onOff { @@ -39,7 +39,7 @@ } </style> - <div class="settings-box first" actionable on-tap="onEnableTap_"> + <div class="settings-box first" actionable on-click="onEnableTap_"> <div id="onOff" class="start" on$="[[bluetoothToggleState]]"> [[getOnOffString_(bluetoothToggleState, '$i18nPolymer{deviceOn}', '$i18nPolymer{deviceOff}')]] @@ -48,7 +48,7 @@ checked="{{bluetoothToggleState}}" disabled$="[[!isToggleEnabled_(adapterState, stateChangeInProgress)]]" aria-label="$i18n{bluetoothToggleA11yLabel}" - on-tap="stopTap_"> + on-click="stopTap_"> </paper-toggle-button> </div> diff --git a/chromium/chrome/browser/resources/settings/change_password_page/change_password_page.html b/chromium/chrome/browser/resources/settings/change_password_page/change_password_page.html index deb22750820..ceaae386226 100644 --- a/chromium/chrome/browser/resources/settings/change_password_page/change_password_page.html +++ b/chromium/chrome/browser/resources/settings/change_password_page/change_password_page.html @@ -46,7 +46,7 @@ </div> <div class="separator"></div> <paper-button class="primary-button" id="changePassword" - on-tap="changePassword_"> + on-click="changePassword_"> $i18n{changePasswordPageButton} </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.html b/chromium/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.html index 245dbdd0765..d0cb57647aa 100644 --- a/chromium/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.html +++ b/chromium/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.html @@ -84,11 +84,11 @@ </iron-icon> </div> <div class="start"> - <div>[[title_]]</div> + <div role="status">[[title_]]</div> <div hidden="[[!showExplanation_]]"> <span class="secondary">[[explanation_]]</span> <a id="learn-more" href="$i18n{chromeCleanupLearnMoreUrl}" - on-tap="learnMore_" target="_blank" + on-click="learnMore_" target="_blank" hidden="[[!showLearnMore_]]"> $i18n{learnMore} </a> @@ -97,7 +97,7 @@ <template is="dom-if" if="[[showActionButton_]]"> <div class="separator"></div> <paper-button id="action-button" class="primary-button" - on-tap="proceed_"> + on-click="proceed_"> [[actionButtonLabel_]] </paper-button> </template> @@ -112,7 +112,7 @@ on-settings-boolean-control-change="changeLogsPermission_"> </settings-toggle-button> <div id="show-items-button" class="settings-box" actionable - on-tap="toggleExpandButton_" hidden="[[!showItemsToRemove_]]"> + on-click="toggleExpandButton_" hidden="[[!showItemsToRemove_]]"> <div class="start">[[showItemsLinkLabel_]]</div> <cr-expand-button expanded="{{itemsToRemoveSectionExpanded_}}" alt="[[showItemsLinkLabel_]]"> diff --git a/chromium/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.js b/chromium/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.js index ec8cc5aa7cc..7a31f0eef1d 100644 --- a/chromium/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.js +++ b/chromium/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.js @@ -767,14 +767,14 @@ Polymer({ }, DISMISS_CLEANUP_SUCCESS: { - label: this.i18n('chromeCleanupDoneButtonLabel'), + label: this.i18n('done'), doAction: this.dismiss_.bind( this, settings.ChromeCleanupDismissSource.CLEANUP_SUCCESS_DONE_BUTTON), }, DISMISS_CLEANUP_FAILURE: { - label: this.i18n('chromeCleanupDoneButtonLabel'), + label: this.i18n('done'), doAction: this.dismiss_.bind( this, settings.ChromeCleanupDismissSource.CLEANUP_FAILURE_DONE_BUTTON), diff --git a/chromium/chrome/browser/resources/settings/chrome_cleanup_page/items_to_remove_list.html b/chromium/chrome/browser/resources/settings/chrome_cleanup_page/items_to_remove_list.html index 6f8b7eb1f77..21e3bb1cedc 100644 --- a/chromium/chrome/browser/resources/settings/chrome_cleanup_page/items_to_remove_list.html +++ b/chromium/chrome/browser/resources/settings/chrome_cleanup_page/items_to_remove_list.html @@ -20,18 +20,34 @@ color: var(--google-blue-500); cursor: pointer; } + + #remaining-list { + margin-top: -13px; + } </style> <div id="title" class="secondary" hidden="[[!titleVisible]]"> [[title]] </div> - <ul id="list" class="secondary"> - <template is="dom-repeat" items="[[visibleItems_]]"> + <ul class="secondary"> + <template is="dom-repeat" items="[[initialItems_]]"> <li class="visible-item">[[item]]</li> </template> - <li id="more-items-link" hidden="[[expanded_]]" on-tap="expandList_"> + <li id="more-items-link" hidden="[[expanded_]]" on-click="expandList_"> [[moreItemsLinkText_]] </li> </ul> + <!-- Remaining items are kept in a separate <ul> element so that screen + readers don't get confused when the list is expanded. If new items are + simply added to the first <ul> element, the first new item (which will + replace the "N more" link), will be skipped by the reader. As a + consequence, visual impaired users will only have a chance to inspect + that item if they move up on the list, which can't be considered an + expected action. --> + <ul id="remaining-list" hidden="[[!expanded_]]" class="secondary"> + <template is="dom-repeat" items="[[remainingItems_]]"> + <li class$="[[remainingItemsClass_(expanded_)]]">[[item]]</li> + </template> + </ul> </template> <script src="items_to_remove_list.js"></script> </dom-module> diff --git a/chromium/chrome/browser/resources/settings/chrome_cleanup_page/items_to_remove_list.js b/chromium/chrome/browser/resources/settings/chrome_cleanup_page/items_to_remove_list.js index e628437c50e..8b9c803fb3b 100644 --- a/chromium/chrome/browser/resources/settings/chrome_cleanup_page/items_to_remove_list.js +++ b/chromium/chrome/browser/resources/settings/chrome_cleanup_page/items_to_remove_list.js @@ -71,11 +71,21 @@ Polymer({ }, /** - * The list of items to actually present on the card. If |expanded_|, then - * it's the same as |itemsToShow|. + * The items to be shown to the user the first time this component is + * rendered. If |initiallyExpanded| is true, then it includes all items + * from |itemsToShow|. Otherwise, it contains the first + * |CHROME_CLEANUP_DEFAULT_ITEMS_TO_SHOW| items. * @private {?Array<string>} */ - visibleItems_: Array, + initialItems_: Array, + + /** + * The remaining items to be presented that are not included in + * |initialItems_|. Items in this list are only shown to the user if + * |expanded_| is true. + * @private {?Array<string>} + */ + remainingItems_: Array, /** * The text for the "show more" link available if not all files are visible @@ -93,7 +103,6 @@ Polymer({ /** @private */ expandList_: function() { this.expanded_ = true; - this.visibleItems_ = this.itemsToShow; this.moreItemsLinkText_ = ''; }, @@ -118,25 +127,34 @@ Polymer({ updateVisibleState_: function(itemsToShow, initiallyExpanded) { // Start expanded if there are less than // |settings.CHROME_CLEANUP_DEFAULT_ITEMS_TO_SHOW| items to show. - this.expanded_ = this.initiallyExpanded || - this.itemsToShow.length <= - settings.CHROME_CLEANUP_DEFAULT_ITEMS_TO_SHOW; + this.expanded_ = initiallyExpanded || + itemsToShow.length <= settings.CHROME_CLEANUP_DEFAULT_ITEMS_TO_SHOW; if (this.expanded_) { - this.visibleItems_ = this.itemsToShow; + this.initialItems_ = itemsToShow; + this.remainingItems_ = []; this.moreItemsLinkText_ = ''; return; } - this.visibleItems_ = this.itemsToShow.slice( - 0, settings.CHROME_CLEANUP_DEFAULT_ITEMS_TO_SHOW - 1); + this.initialItems_ = + itemsToShow.slice(0, settings.CHROME_CLEANUP_DEFAULT_ITEMS_TO_SHOW - 1); + this.remainingItems_ = + itemsToShow.slice(settings.CHROME_CLEANUP_DEFAULT_ITEMS_TO_SHOW - 1); const browserProxy = settings.ChromeCleanupProxyImpl.getInstance(); - browserProxy - .getMoreItemsPluralString( - this.itemsToShow.length - this.visibleItems_.length) + browserProxy.getMoreItemsPluralString(this.remainingItems_.length) .then(linkText => { this.moreItemsLinkText_ = linkText; }); }, + + /** + * Returns the class for the <li> elements that correspond to the items hidden + * in the default view. + * @param {boolean} expanded + */ + remainingItemsClass_: function(expanded) { + return expanded ? 'visible-item' : 'hidden-item'; + }, }); diff --git a/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.html b/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.html index ec3fad23b77..dbbc94a3556 100644 --- a/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.html +++ b/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.html @@ -2,8 +2,10 @@ <link rel="import" href="chrome://resources/cr_elements/cr_dialog/cr_dialog.html"> <link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/iron-pages/iron-pages.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-spinner/paper-spinner-lite.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/paper-tabs/paper-tabs.html"> <link rel="import" href="../i18n_setup.html"> <link rel="import" href="clear_browsing_data_browser_proxy.html"> <link rel="import" href="history_deletion_dialog.html"> @@ -12,12 +14,29 @@ <link rel="import" href="../controls/settings_dropdown_menu.html"> <link rel="import" href="../icons.html"> <link rel="import" href="../settings_shared_css.html"> +<link rel="import" href="../settings_vars_css.html"> -<!-- This file is forked as clear_browsing_data_dialog_tabs.html until the new - CBD UI is launched. --> <dom-module id="settings-clear-browsing-data-dialog"> <template> <style include="settings-shared"> + :host { + /* Fixed height to allow multiple tabs with different height. + * The last entry in the advanced tab should show half an entry. + * crbug.com/652027 */ + --body-container-height: 322px; + } + + #clearBrowsingDataDialog { + --cr-dialog-top-container-min-height: 42px; + --cr-dialog-title: { + padding-bottom: 8px; + }; + --cr-dialog-body-container: { + border-top: 1px solid var(--paper-grey-300); + height: var(--body-container-height); + }; + } + #clearBrowsingDataDialog:not(.fully-rendered) { visibility: hidden; } @@ -26,6 +45,16 @@ color: var(--paper-grey-600); } + #clearBrowsingDataDialog [slot=body] { + padding-top: 8px; + } + + #importantSitesDialog { + --cr-dialog-body-container: { + height: var(--body-container-height); + }; + } + .row { align-items: center; display: flex; @@ -43,56 +72,36 @@ --settings-row-two-line-min-height: 48px; --settings-checkbox-label: { line-height: 1.25rem; - }; - } - - #generalFooter { - margin: 0; - min-height: 18px; - } - - #generalFooter iron-icon { - height: 18px; - padding: 1px; - width: 18px; - } - - #googleFooter { - margin: 0 0 0.8em 0; - min-height: 16px; - } - - #googleFooter iron-icon { - height: 16px; - padding: 2px; - width: 16px; - } - - [slot=footer] iron-icon { - margin: auto; + } } - .clear-browsing-data-footer { - -webkit-padding-start: 4px; - align-items: flex-start; - display: flex; - line-height: 1.538em; /* 20px/13px */ + #basic-tab settings-checkbox + settings-checkbox { + --settings-checkbox-margin-top: 12px; } - .clear-browsing-data-footer .footer-text { - -webkit-margin-start: 16px; + paper-tabs { + --paper-tabs-selection-bar-color: var(--google-blue-500); + --paper-tabs: { + font-size: 100%; + height: 40px; + } } - .clear-browsing-data-footer iron-icon { - flex-shrink: 0; + paper-tab { + --paper-tab-content: { + color: var(--google-blue-700); + }; + --paper-tab-content-unselected: { + opacity: 1; + color: var(--paper-grey-600); + }; } - .clear-browsing-data-footer a { - text-decoration: none; + .time-range-row { + margin-bottom: 12px; } - #clearFrom { - -webkit-margin-start: 0.5em; + .time-range-select { /* Adjust for md-select-underline and 1px additional bottom padding * to keep md-select's text (without the underline) aligned with * neighboring text that does not have an underline. */ @@ -103,115 +112,153 @@ font-size: calc(13 / 15 * 100%); padding-top: 8px; } - - /* Cap the height on smaller screens to avoid unfavorable clipping. - * Replace the bottom margin with padding to avoid the gap between - * the scrollbar and the bottom separator. */ - @media all and (max-height: 724px) { - #clearBrowsingDataDialog { - /* crbug.com/652027: Show four and a *half* items in the list. */ - --cr-dialog-body-container: { - max-height: 280px; - }; - } - } </style> <dialog is="cr-dialog" id="clearBrowsingDataDialog" on-close="onClearBrowsingDataDialogClose_" - close-text="$i18n{close}" ignore-popstate> - <div slot="title">$i18n{clearBrowsingData}</div> + close-text="$i18n{close}" ignore-popstate has-tabs> + <div slot="title"> + <div>$i18n{clearBrowsingData}</div> + </div> + <div slot="header"> + <paper-tabs noink on-selected-changed="recordTabChange_" + selected="{{prefs.browser.last_clear_browsing_data_tab.value}}"> + <paper-tab>$i18n{basicPageTitle}</paper-tab> + <paper-tab>$i18n{advancedPageTitle}</paper-tab> + </paper-tabs> + </div> <div slot="body"> - <div class="row"> - $i18n{clearFollowingItemsFrom} - <settings-dropdown-menu id="clearFrom" - label="$i18n{clearFollowingItemsFrom}" - pref="{{prefs.browser.clear_data.time_period}}" - menu-options="[[clearFromOptions_]]"> - </settings-dropdown-menu> - </div> - <!-- Note: whether these checkboxes are checked are ignored if deleting - history is disabled (i.e. supervised users, policy), so it's OK to - have a hidden checkbox that's also checked (as the C++ accounts for - whether a user is allowed to delete history independently). --> - <settings-checkbox id="browsingCheckbox" class="browsing-data-checkbox" - pref="{{prefs.browser.clear_data.browsing_history}}" - label="$i18n{clearBrowsingHistory}" - sub-label="[[counters_.browsing_history]]" - disabled="[[clearingInProgress_]]" - hidden="[[isSupervised_]]"> - </settings-checkbox> - <settings-checkbox id="downloadCheckbox" class="browsing-data-checkbox" - pref="{{prefs.browser.clear_data.download_history}}" - label="$i18n{clearDownloadHistory}" - sub-label="[[counters_.download_history]]" - disabled="[[clearingInProgress_]]" - hidden="[[isSupervised_]]"> - </settings-checkbox> - <settings-checkbox id="cacheCheckbox" class="browsing-data-checkbox" - pref="{{prefs.browser.clear_data.cache}}" - label="$i18n{clearCache}" - sub-label="[[counters_.cache]]" - disabled="[[clearingInProgress_]]"> - </settings-checkbox> - <settings-checkbox id="cookiesCheckbox" class="browsing-data-checkbox" - pref="{{prefs.browser.clear_data.cookies}}" - label="$i18n{clearCookies}" - sub-label="$i18n{clearCookiesCounter}" - disabled="[[clearingInProgress_]]"> - </settings-checkbox> - <settings-checkbox class="browsing-data-checkbox" - pref="{{prefs.browser.clear_data.passwords}}" - label="$i18n{clearPasswords}" - sub-label="[[counters_.passwords]]" - disabled="[[clearingInProgress_]]"> - </settings-checkbox> - <settings-checkbox class="browsing-data-checkbox" - pref="{{prefs.browser.clear_data.form_data}}" - label="$i18n{clearFormData}" - sub-label="[[counters_.form_data]]" - disabled="[[clearingInProgress_]]"> - </settings-checkbox> - <settings-checkbox class="browsing-data-checkbox" - pref="{{prefs.browser.clear_data.hosted_apps_data}}" - label="$i18n{clearHostedAppData}" - sub-label="[[counters_.hosted_apps_data]]" - disabled="[[clearingInProgress_]]"> - </settings-checkbox> - <settings-checkbox class="browsing-data-checkbox" - pref="{{prefs.browser.clear_data.media_licenses}}" - label="$i18n{clearMediaLicenses}" - sub-label="[[counters_.media_licenses]]" - disabled="[[clearingInProgress_]]"> - </settings-checkbox> + <iron-pages id="tabs" + selected="[[prefs.browser.last_clear_browsing_data_tab.value]]"> + <div id="basic-tab"> + <div class="row time-range-row"> + <span class="time-range-label"> + $i18n{clearTimeRange} + </span> + <settings-dropdown-menu id="clearFromBasic" + class="time-range-select" + label="$i18n{clearTimeRange}" + pref="{{prefs.browser.clear_data.time_period_basic}}" + menu-options="[[clearFromOptions_]]"> + </settings-dropdown-menu> + </div> + <!-- Note: whether these checkboxes are checked are ignored if + deleting history is disabled (i.e. supervised users, policy), + so it's OK to have a hidden checkbox that's also checked (as + the C++ accounts for whether a user is allowed to delete + history independently). --> + <settings-checkbox id="browsingCheckboxBasic" + pref="{{prefs.browser.clear_data.browsing_history_basic}}" + label="$i18n{clearBrowsingHistory}" + sub-label-html="[[browsingCheckboxLabel_( + isSignedIn_, isSyncingHistory_, + '$i18nPolymer{clearBrowsingHistorySummary}', + '$i18nPolymer{clearBrowsingHistorySummarySignedIn}', + '$i18nPolymer{clearBrowsingHistorySummarySynced}')]]" + disabled="[[clearingInProgress_]]" + hidden="[[isSupervised_]]"> + </settings-checkbox> + <settings-checkbox id="cookiesCheckboxBasic" + class="cookies-checkbox" + pref="{{prefs.browser.clear_data.cookies_basic}}" + label="$i18n{clearCookies}" + sub-label="$i18n{clearCookiesSummary}" + disabled="[[clearingInProgress_]]"> + </settings-checkbox> + <settings-checkbox id="cacheCheckboxBasic" + class="cache-checkbox" + pref="{{prefs.browser.clear_data.cache_basic}}" + label="$i18n{clearCache}" + sub-label="[[counters_.cache_basic]]" + disabled="[[clearingInProgress_]]"> + </settings-checkbox> + </div> + <div id="advanced-tab"> + <div class="row time-range-row"> + <span class="time-range-label"> + $i18n{clearTimeRange} + </span> + <settings-dropdown-menu id="clearFrom" + class="time-range-select" + label="$i18n{clearTimeRange}" + pref="{{prefs.browser.clear_data.time_period}}" + menu-options="[[clearFromOptions_]]"> + </settings-dropdown-menu> + </div> + <settings-checkbox id="browsingCheckbox" + pref="{{prefs.browser.clear_data.browsing_history}}" + label="$i18n{clearBrowsingHistory}" + sub-label="[[counters_.browsing_history]]" + disabled="[[clearingInProgress_]]" + hidden="[[isSupervised_]]"> + </settings-checkbox> + <settings-checkbox id="downloadCheckbox" + pref="{{prefs.browser.clear_data.download_history}}" + label="$i18n{clearDownloadHistory}" + sub-label="[[counters_.download_history]]" + disabled="[[clearingInProgress_]]" + hidden="[[isSupervised_]]"> + </settings-checkbox> + <settings-checkbox id="cookiesCheckbox" + class="cookies-checkbox" + pref="{{prefs.browser.clear_data.cookies}}" + label="$i18n{clearCookies}" + sub-label="[[counters_.cookies]]" + disabled="[[clearingInProgress_]]"> + </settings-checkbox> + <settings-checkbox id="cacheCheckbox" + class="cache-checkbox" + pref="{{prefs.browser.clear_data.cache}}" + label="$i18n{clearCache}" + sub-label="[[counters_.cache]]" + disabled="[[clearingInProgress_]]"> + </settings-checkbox> + <settings-checkbox + pref="{{prefs.browser.clear_data.passwords}}" + label="$i18n{clearPasswords}" + sub-label="[[counters_.passwords]]" + disabled="[[clearingInProgress_]]"> + </settings-checkbox> + <settings-checkbox + pref="{{prefs.browser.clear_data.form_data}}" + label="$i18n{clearFormData}" + sub-label="[[counters_.form_data]]" + disabled="[[clearingInProgress_]]"> + </settings-checkbox> + <settings-checkbox + pref="{{prefs.browser.clear_data.site_settings}}" + label="[[siteSettingsLabel_( + '$i18nPolymer{siteSettings}', + '$i18nPolymer{contentSettings}')]]" + sub-label="[[counters_.site_settings]]" + disabled="[[clearingInProgress_]]"> + </settings-checkbox> + <settings-checkbox + pref="{{prefs.browser.clear_data.hosted_apps_data}}" + label="$i18n{clearHostedAppData}" + sub-label="[[counters_.hosted_apps_data]]" + disabled="[[clearingInProgress_]]"> + </settings-checkbox> + <settings-checkbox + pref="{{prefs.browser.clear_data.media_licenses}}" + label="$i18n{clearMediaLicenses}" + sub-label="[[counters_.media_licenses]]" + disabled="[[clearingInProgress_]]"> + </settings-checkbox> + </div> + </iron-pages> </div> <div slot="button-container"> <paper-spinner-lite active="[[clearingInProgress_]]"> </paper-spinner-lite> <paper-button class="cancel-button" disabled="[[clearingInProgress_]]" - on-tap="onCancelTap_">$i18n{cancel}</paper-button> + on-click="onCancelTap_">$i18n{cancel}</paper-button> <paper-button id="clearBrowsingDataConfirm" class="action-button" disabled="[[clearingInProgress_]]" - on-tap="onClearBrowsingDataTap_"> - $i18n{clearBrowsingData} + on-click="onClearBrowsingDataTap_"> + $i18n{clearData} </paper-button> </div> - <div slot="footer"> - <div id="googleFooter" class="clear-browsing-data-footer"> - <iron-icon icon="settings:googleg"></iron-icon> - <div class="footer-text">$i18nRaw{otherFormsOfBrowsingHistory}</div> - </div> - <div id="generalFooter" class="clear-browsing-data-footer"> - <iron-icon icon="settings:info"></iron-icon> - <div class="footer-text"> - <span id="syncedDataSentence">$i18n{clearsSyncedData}</span> - <span>$i18n{warnAboutNonClearedData}</span> - <a id="clear-browser-data-old-learn-more-link" - href="$i18n{clearBrowsingDataLearnMoreUrl}" - target="_blank">$i18n{learnMore}</a> - </div> - </div> - </div> </dialog> <template is="dom-if" if="[[showImportantSitesDialog_]]"> @@ -220,13 +267,12 @@ <div slot="title"> $i18n{clearBrowsingData} <div class="secondary"> - <template is="dom-if" - if="[[!prefs.browser.clear_data.cache.value]]"> + <span hidden$="[[showImportantSitesCacheSubtitle_]]"> $i18n{importantSitesSubtitleCookies} - </template> - <template is="dom-if" if="[[prefs.browser.clear_data.cache.value]]"> + </span> + <span hidden$="[[!showImportantSitesCacheSubtitle_]]"> $i18n{importantSitesSubtitleCookiesAndCache} - </template> + </span> </div> </div> <div slot="body"> @@ -243,10 +289,10 @@ <paper-spinner-lite active="[[clearingInProgress_]]"> </paper-spinner-lite> <paper-button class="cancel-button" disabled="[[clearingInProgress_]]" - on-tap="onImportantSitesCancelTap_">$i18n{cancel}</paper-button> + on-click="onImportantSitesCancelTap_">$i18n{cancel}</paper-button> <paper-button id="importantSitesConfirm" class="action-button" disabled="[[clearingInProgress_]]" - on-tap="onImportantSitesConfirmTap_"> + on-click="onImportantSitesConfirmTap_"> $i18n{importantSitesConfirm} </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.js b/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.js index 60ec1ccbf33..97beb3c7906 100644 --- a/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.js +++ b/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog.js @@ -3,16 +3,13 @@ // found in the LICENSE file. /** - * @fileoverview 'settings-clear-browsing-data-dialog' allows the user to delete - * browsing data that has been cached by Chromium. - * - * This file is forked as clear_browsing_data_dialog_tabs.js until the new - * CBD UI is launched. + * @fileoverview 'settings-clear-browsing-data-dialog' allows the user to + * delete browsing data that has been cached by Chromium. */ Polymer({ is: 'settings-clear-browsing-data-dialog', - behaviors: [WebUIListenerBehavior], + behaviors: [WebUIListenerBehavior, settings.RouteObserverBehavior], properties: { /** @@ -45,11 +42,11 @@ Polymer({ readOnly: true, type: Array, value: [ - {value: 0, name: loadTimeData.getString('clearDataHour')}, - {value: 1, name: loadTimeData.getString('clearDataDay')}, - {value: 2, name: loadTimeData.getString('clearDataWeek')}, - {value: 3, name: loadTimeData.getString('clearData4Weeks')}, - {value: 4, name: loadTimeData.getString('clearDataEverything')}, + {value: 0, name: loadTimeData.getString('clearPeriodHour')}, + {value: 1, name: loadTimeData.getString('clearPeriod24Hours')}, + {value: 2, name: loadTimeData.getString('clearPeriod7Days')}, + {value: 3, name: loadTimeData.getString('clearPeriod4Weeks')}, + {value: 4, name: loadTimeData.getString('clearPeriodEverything')}, ], }, @@ -73,6 +70,18 @@ Polymer({ value: false, }, + /** @private */ + isSignedIn_: { + type: Boolean, + value: false, + }, + + /** @private */ + isSyncingHistory_: { + type: Boolean, + value: false, + }, + /** @private {!Array<ImportantSite>} */ importantSites_: { type: Array, @@ -90,7 +99,25 @@ Polymer({ }, /** @private */ - showImportantSitesDialog_: {type: Boolean, value: false}, + showImportantSitesDialog_: { + type: Boolean, + value: false, + }, + + /** @private */ + showImportantSitesCacheSubtitle_: { + type: Boolean, + value: false, + }, + + /** + * Time in ms, when the dialog was opened. + * @private + */ + dialogOpenedTime_: { + type: Number, + value: 0, + } }, /** @private {settings.ClearBrowsingDataBrowserProxy} */ @@ -98,7 +125,6 @@ Polymer({ /** @override */ ready: function() { - this.$.clearFrom.menuOptions = this.clearFromOptions_; this.addWebUIListener( 'update-sync-state', this.updateSyncState_.bind(this)); this.addWebUIListener( @@ -109,6 +135,7 @@ Polymer({ attached: function() { this.browserProxy_ = settings.ClearBrowsingDataBrowserProxyImpl.getInstance(); + this.dialogOpenedTime_ = Date.now(); this.browserProxy_.initialize().then(() => { this.$.clearBrowsingDataDialog.showModal(); }); @@ -121,21 +148,67 @@ Polymer({ }, /** - * Updates the footer to show only those sentences that are relevant to this - * user. + * Record visits to the CBD dialog. + * + * settings.RouteObserverBehavior + * @param {!settings.Route} currentRoute + * @protected + */ + currentRouteChanged: function(currentRoute) { + if (currentRoute == settings.routes.CLEAR_BROWSER_DATA) { + chrome.metricsPrivate.recordUserAction('ClearBrowsingData_DialogCreated'); + this.dialogOpenedTime_ = Date.now(); + } + }, + + /** + * Updates the history description to show the relevant information + * depending on sync and signin state. + * * @param {boolean} signedIn Whether the user is signed in. - * @param {boolean} syncing Whether the user is syncing data. - * @param {boolean} otherFormsOfBrowsingHistory Whether the user has other - * forms of browsing history in their account. + * @param {boolean} syncing Whether the user is syncing history. * @private */ - updateSyncState_: function(signedIn, syncing, otherFormsOfBrowsingHistory) { - this.$.googleFooter.hidden = !otherFormsOfBrowsingHistory; - this.$.syncedDataSentence.hidden = !syncing; + updateSyncState_: function(signedIn, syncing) { + this.isSignedIn_ = signedIn; + this.isSyncingHistory_ = syncing; this.$.clearBrowsingDataDialog.classList.add('fully-rendered'); }, /** + * Choose a summary checkbox label. + * @param {boolean} isSignedIn + * @param {boolean} isSyncingHistory + * @param {string} historySummary + * @param {string} historySummarySigned + * @param {string} historySummarySynced + * @return {string} + * @private + */ + browsingCheckboxLabel_: function( + isSignedIn, isSyncingHistory, historySummary, historySummarySigned, + historySummarySynced) { + if (isSyncingHistory) { + return historySummarySynced; + } else if (isSignedIn) { + return historySummarySigned; + } + return historySummary; + }, + + /** + * Choose a content/site settings label. + * @param {string} siteSettings + * @param {string} contentSettings + * @return {string} + * @private + */ + siteSettingsLabel_: function(siteSettings, contentSettings) { + return loadTimeData.getBoolean('enableSiteSettings') ? siteSettings : + contentSettings; + }, + + /** * Updates the text of a browsing data counter corresponding to the given * preference. * @param {string} prefName Browsing data type deletion preference. @@ -156,8 +229,10 @@ Polymer({ shouldShowImportantSites_: function() { if (!this.importantSitesFlagEnabled_) return false; - if (!this.$.cookiesCheckbox.checked) + const tab = this.$.tabs.selectedItem; + if (!tab.querySelector('.cookies-checkbox').checked) { return false; + } const haveImportantSites = this.importantSites_.length > 0; chrome.send( @@ -172,12 +247,13 @@ Polymer({ */ onClearBrowsingDataTap_: function() { if (this.shouldShowImportantSites_()) { + const tab = this.$.tabs.selectedItem; this.showImportantSitesDialog_ = true; + this.showImportantSitesCacheSubtitle_ = + tab.querySelector('.cache-checkbox').checked; this.$.clearBrowsingDataDialog.close(); // Show important sites dialog after dom-if is applied. - this.async(function() { - this.$$('#importantSitesDialog').showModal(); - }); + this.async(() => this.$$('#importantSitesDialog').showModal()); } else { this.clearBrowsingData_(); } @@ -200,21 +276,31 @@ Polymer({ */ clearBrowsingData_: function() { this.clearingInProgress_ = true; + const tab = this.$.tabs.selectedItem; - const checkboxes = this.root.querySelectorAll('.browsing-data-checkbox'); + const checkboxes = tab.querySelectorAll('settings-checkbox'); const dataTypes = []; checkboxes.forEach((checkbox) => { if (checkbox.checked) dataTypes.push(checkbox.pref.key); }); - const timePeriod = this.$.clearFrom.pref.value; + const timePeriod = tab.querySelector('.time-range-select').pref.value; + + if (tab.id == 'basic-tab') { + chrome.metricsPrivate.recordUserAction('ClearBrowsingData_BasicTab'); + } else { + chrome.metricsPrivate.recordUserAction('ClearBrowsingData_AdvancedTab'); + } this.browserProxy_ .clearBrowsingData(dataTypes, timePeriod, this.importantSites_) .then(shouldShowNotice => { this.clearingInProgress_ = false; this.showHistoryDeletionDialog_ = shouldShowNotice; + chrome.metricsPrivate.recordMediumTime( + 'History.ClearBrowsingData.TimeSpentInDialog', + Date.now() - this.dialogOpenedTime_); if (!shouldShowNotice) this.closeDialogs_(); }); @@ -257,4 +343,20 @@ Polymer({ this.showHistoryDeletionDialog_ = false; this.closeDialogs_(); }, + + /** + * Records an action when the user changes between the basic and advanced tab. + * @param {!Event} event + * @private + */ + recordTabChange_: function(event) { + if (event.detail.value == 0) { + chrome.metricsPrivate.recordUserAction( + 'ClearBrowsingData_SwitchTo_BasicTab'); + } else { + chrome.metricsPrivate.recordUserAction( + 'ClearBrowsingData_SwitchTo_AdvancedTab'); + } + }, + }); diff --git a/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog_tabs.html b/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog_tabs.html deleted file mode 100644 index b9118df038f..00000000000 --- a/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog_tabs.html +++ /dev/null @@ -1,311 +0,0 @@ -<link rel="import" href="chrome://resources/html/polymer.html"> - -<link rel="import" href="chrome://resources/cr_elements/cr_dialog/cr_dialog.html"> -<link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html"> -<link rel="import" href="chrome://resources/polymer/v1_0/iron-pages/iron-pages.html"> -<link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html"> -<link rel="import" href="chrome://resources/polymer/v1_0/paper-spinner/paper-spinner-lite.html"> -<link rel="import" href="chrome://resources/polymer/v1_0/paper-tabs/paper-tabs.html"> -<link rel="import" href="../i18n_setup.html"> -<link rel="import" href="clear_browsing_data_browser_proxy.html"> -<link rel="import" href="history_deletion_dialog.html"> -<link rel="import" href="../controls/important_site_checkbox.html"> -<link rel="import" href="../controls/settings_checkbox.html"> -<link rel="import" href="../controls/settings_dropdown_menu.html"> -<link rel="import" href="../icons.html"> -<link rel="import" href="../settings_shared_css.html"> -<link rel="import" href="../settings_vars_css.html"> - -<!-- This file is a fork of clear_browsing_data_dialog.html until the new CBD - UI is launched. --> -<dom-module id="settings-clear-browsing-data-dialog-tabs"> - <template> - <style include="settings-shared"> - :host { - /* Fixed height to allow multiple tabs with different height. - * The last entry in the advanced tab should show half an entry. - * crbug.com/652027 */ - --body-container-height: 322px; - } - - #clearBrowsingDataDialog { - --cr-dialog-top-container-min-height: 42px; - --cr-dialog-title: { - padding-bottom: 8px; - }; - --cr-dialog-body-container: { - border-top: 1px solid var(--paper-grey-300); - height: var(--body-container-height); - }; - } - - #clearBrowsingDataDialog:not(.fully-rendered) { - visibility: hidden; - } - - #clearBrowsingDataDialog [slot=footer] { - color: var(--paper-grey-600); - } - - #clearBrowsingDataDialog [slot=body] { - padding-top: 8px; - } - - #importantSitesDialog { - --cr-dialog-body-container: { - height: var(--body-container-height); - }; - } - - .row { - align-items: center; - display: flex; - min-height: 40px; - } - - paper-spinner-lite { - -webkit-margin-end: 16px; - margin-bottom: auto; - margin-top: auto; - } - - settings-checkbox, - important-site-checkbox { - --settings-row-two-line-min-height: 48px; - --settings-checkbox-label: { - line-height: 1.25rem; - } - } - - #basic-tab settings-checkbox + settings-checkbox { - --settings-checkbox-margin-top: 12px; - } - - paper-tabs { - --paper-tabs-selection-bar-color: var(--google-blue-500); - --paper-tabs: { - font-size: 100%; - height: 40px; - } - } - - paper-tab { - --paper-tab-content: { - color: var(--google-blue-700); - }; - --paper-tab-content-unselected: { - opacity: 1; - color: var(--paper-grey-600); - }; - } - - .time-range-row { - margin-bottom: 12px; - } - - .time-range-select { - /* Adjust for md-select-underline and 1px additional bottom padding - * to keep md-select's text (without the underline) aligned with - * neighboring text that does not have an underline. */ - margin-top: 3px; - } - - [slot=title] .secondary { - font-size: calc(13 / 15 * 100%); - padding-top: 8px; - } - </style> - - <dialog is="cr-dialog" id="clearBrowsingDataDialog" - on-close="onClearBrowsingDataDialogClose_" - close-text="$i18n{close}" ignore-popstate has-tabs> - <div slot="title"> - <div>$i18n{clearBrowsingData}</div> - </div> - <div slot="header"> - <paper-tabs noink on-selected-changed="recordTabChange_" - selected="{{prefs.browser.last_clear_browsing_data_tab.value}}"> - <paper-tab>$i18n{basicPageTitle}</paper-tab> - <paper-tab>$i18n{advancedPageTitle}</paper-tab> - </paper-tabs> - </div> - <div slot="body"> - <iron-pages id="tabs" - selected="[[prefs.browser.last_clear_browsing_data_tab.value]]"> - <div id="basic-tab"> - <div class="row time-range-row"> - <span class="time-range-label"> - $i18n{clearTimeRange} - </span> - <settings-dropdown-menu id="clearFromBasic" - class="time-range-select" - label="$i18n{clearTimeRange}" - pref="{{prefs.browser.clear_data.time_period_basic}}" - menu-options="[[clearFromOptions_]]"> - </settings-dropdown-menu> - </div> - <!-- Note: whether these checkboxes are checked are ignored if - deleting history is disabled (i.e. supervised users, policy), - so it's OK to have a hidden checkbox that's also checked (as - the C++ accounts for whether a user is allowed to delete - history independently). --> - <settings-checkbox id="browsingCheckboxBasic" - pref="{{prefs.browser.clear_data.browsing_history_basic}}" - label="$i18n{clearBrowsingHistory}" - sub-label-html="[[browsingCheckboxLabel_( - isSignedIn_, isSyncingHistory_, - '$i18nPolymer{clearBrowsingHistorySummary}', - '$i18nPolymer{clearBrowsingHistorySummarySignedIn}', - '$i18nPolymer{clearBrowsingHistorySummarySynced}')]]" - disabled="[[clearingInProgress_]]" - hidden="[[isSupervised_]]"> - </settings-checkbox> - <settings-checkbox id="cookiesCheckboxBasic" - class="cookies-checkbox" - pref="{{prefs.browser.clear_data.cookies_basic}}" - label="$i18n{clearCookies}" - sub-label="$i18n{clearCookiesSummary}" - disabled="[[clearingInProgress_]]"> - </settings-checkbox> - <settings-checkbox id="cacheCheckboxBasic" - class="cache-checkbox" - pref="{{prefs.browser.clear_data.cache_basic}}" - label="$i18n{clearCache}" - sub-label="[[counters_.cache_basic]]" - disabled="[[clearingInProgress_]]"> - </settings-checkbox> - </div> - <div id="advanced-tab"> - <div class="row time-range-row"> - <span class="time-range-label"> - $i18n{clearTimeRange} - </span> - <settings-dropdown-menu id="clearFrom" - class="time-range-select" - label="$i18n{clearTimeRange}" - pref="{{prefs.browser.clear_data.time_period}}" - menu-options="[[clearFromOptions_]]"> - </settings-dropdown-menu> - </div> - <settings-checkbox id="browsingCheckbox" - pref="{{prefs.browser.clear_data.browsing_history}}" - label="$i18n{clearBrowsingHistory}" - sub-label="[[counters_.browsing_history]]" - disabled="[[clearingInProgress_]]" - hidden="[[isSupervised_]]"> - </settings-checkbox> - <settings-checkbox id="downloadCheckbox" - pref="{{prefs.browser.clear_data.download_history}}" - label="$i18n{clearDownloadHistory}" - sub-label="[[counters_.download_history]]" - disabled="[[clearingInProgress_]]" - hidden="[[isSupervised_]]"> - </settings-checkbox> - <settings-checkbox id="cookiesCheckbox" - class="cookies-checkbox" - pref="{{prefs.browser.clear_data.cookies}}" - label="$i18n{clearCookies}" - sub-label="[[counters_.cookies]]" - disabled="[[clearingInProgress_]]"> - </settings-checkbox> - <settings-checkbox id="cacheCheckbox" - class="cache-checkbox" - pref="{{prefs.browser.clear_data.cache}}" - label="$i18n{clearCache}" - sub-label="[[counters_.cache]]" - disabled="[[clearingInProgress_]]"> - </settings-checkbox> - <settings-checkbox - pref="{{prefs.browser.clear_data.passwords}}" - label="$i18n{clearPasswords}" - sub-label="[[counters_.passwords]]" - disabled="[[clearingInProgress_]]"> - </settings-checkbox> - <settings-checkbox - pref="{{prefs.browser.clear_data.form_data}}" - label="$i18n{clearFormData}" - sub-label="[[counters_.form_data]]" - disabled="[[clearingInProgress_]]"> - </settings-checkbox> - <settings-checkbox - pref="{{prefs.browser.clear_data.site_settings}}" - label="[[siteSettingsLabel_( - '$i18nPolymer{siteSettings}', - '$i18nPolymer{contentSettings}')]]" - sub-label="[[counters_.site_settings]]" - disabled="[[clearingInProgress_]]"> - </settings-checkbox> - <settings-checkbox - pref="{{prefs.browser.clear_data.hosted_apps_data}}" - label="$i18n{clearHostedAppData}" - sub-label="[[counters_.hosted_apps_data]]" - disabled="[[clearingInProgress_]]"> - </settings-checkbox> - <settings-checkbox - pref="{{prefs.browser.clear_data.media_licenses}}" - label="$i18n{clearMediaLicenses}" - sub-label="[[counters_.media_licenses]]" - disabled="[[clearingInProgress_]]"> - </settings-checkbox> - </div> - </iron-pages> - </div> - <div slot="button-container"> - <paper-spinner-lite active="[[clearingInProgress_]]"> - </paper-spinner-lite> - <paper-button class="cancel-button" disabled="[[clearingInProgress_]]" - on-tap="onCancelTap_">$i18n{cancel}</paper-button> - <paper-button id="clearBrowsingDataConfirm" - class="action-button" disabled="[[clearingInProgress_]]" - on-tap="onClearBrowsingDataTap_"> - $i18n{clearData} - </paper-button> - </div> - </dialog> - - <template is="dom-if" if="[[showImportantSitesDialog_]]"> - <dialog is="cr-dialog" id="importantSitesDialog" close-text="$i18n{close}" - show-scroll-borders ignore-popstate> - <div slot="title"> - $i18n{clearBrowsingData} - <div class="secondary"> - <span hidden$="[[showImportantSitesCacheSubtitle_]]"> - $i18n{importantSitesSubtitleCookies} - </span> - <span hidden$="[[!showImportantSitesCacheSubtitle_]]"> - $i18n{importantSitesSubtitleCookiesAndCache} - </span> - </div> - </div> - <div slot="body"> - <template is="dom-repeat" items="[[importantSites_]]"> - <div class="row"> - <important-site-checkbox - site="[[item]]" - disabled="[[clearingInProgress_]]"> - </important-site-checkbox> - </div> - </template> - </div> - <div slot="button-container"> - <paper-spinner-lite active="[[clearingInProgress_]]"> - </paper-spinner-lite> - <paper-button class="cancel-button" disabled="[[clearingInProgress_]]" - on-tap="onImportantSitesCancelTap_">$i18n{cancel}</paper-button> - <paper-button id="importantSitesConfirm" - class="action-button" disabled="[[clearingInProgress_]]" - on-tap="onImportantSitesConfirmTap_"> - $i18n{importantSitesConfirm} - </paper-button> - </div> - </dialog> - </template> - - <template is="dom-if" if="[[showHistoryDeletionDialog_]]" restamp> - <settings-history-deletion-dialog id="notice" - on-close="onHistoryDeletionDialogClose_"> - </settings-history-deletion-dialog> - </template> - </template> - <script src="clear_browsing_data_dialog_tabs.js"></script> -</dom-module> diff --git a/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog_tabs.js b/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog_tabs.js deleted file mode 100644 index 27f055c5e4b..00000000000 --- a/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/clear_browsing_data_dialog_tabs.js +++ /dev/null @@ -1,367 +0,0 @@ -// 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 'settings-clear-browsing-data-dialog-tabs' allows the user to - * delete browsing data that has been cached by Chromium. - * - * This file is a fork of clear_browsing_data_dialog.js until the new CBD UI is - * launched. - */ -Polymer({ - is: 'settings-clear-browsing-data-dialog-tabs', - - behaviors: [WebUIListenerBehavior, settings.RouteObserverBehavior], - - properties: { - /** - * Preferences state. - */ - prefs: { - type: Object, - notify: true, - }, - - /** - * Results of browsing data counters, keyed by the suffix of - * the corresponding data type deletion preference, as reported - * by the C++ side. - * @private {!Object<string>} - */ - counters_: { - type: Object, - // Will be filled as results are reported. - value: function() { - return {}; - } - }, - - /** - * List of options for the dropdown menu. - * @private {!DropdownMenuOptionList} - */ - clearFromOptions_: { - readOnly: true, - type: Array, - value: [ - {value: 0, name: loadTimeData.getString('clearPeriodHour')}, - {value: 1, name: loadTimeData.getString('clearPeriod24Hours')}, - {value: 2, name: loadTimeData.getString('clearPeriod7Days')}, - {value: 3, name: loadTimeData.getString('clearPeriod4Weeks')}, - {value: 4, name: loadTimeData.getString('clearPeriodEverything')}, - ], - }, - - /** @private */ - clearingInProgress_: { - type: Boolean, - value: false, - }, - - /** @private */ - isSupervised_: { - type: Boolean, - value: function() { - return loadTimeData.getBoolean('isSupervised'); - }, - }, - - /** @private */ - showHistoryDeletionDialog_: { - type: Boolean, - value: false, - }, - - /** @private */ - isSignedIn_: { - type: Boolean, - value: false, - }, - - /** @private */ - isSyncingHistory_: { - type: Boolean, - value: false, - }, - - /** @private {!Array<ImportantSite>} */ - importantSites_: { - type: Array, - value: function() { - return []; - } - }, - - /** @private */ - importantSitesFlagEnabled_: { - type: Boolean, - value: function() { - return loadTimeData.getBoolean('importantSitesInCbd'); - }, - }, - - /** @private */ - showImportantSitesDialog_: { - type: Boolean, - value: false, - }, - - /** @private */ - showImportantSitesCacheSubtitle_: { - type: Boolean, - value: false, - }, - - /** - * Time in ms, when the dialog was opened. - * @private - */ - dialogOpenedTime_: { - type: Number, - value: 0, - } - }, - - /** @private {settings.ClearBrowsingDataBrowserProxy} */ - browserProxy_: null, - - /** @override */ - ready: function() { - this.addWebUIListener( - 'update-sync-state', this.updateSyncState_.bind(this)); - this.addWebUIListener( - 'update-counter-text', this.updateCounterText_.bind(this)); - }, - - /** @override */ - attached: function() { - this.browserProxy_ = - settings.ClearBrowsingDataBrowserProxyImpl.getInstance(); - this.dialogOpenedTime_ = Date.now(); - this.browserProxy_.initialize().then(() => { - this.$.clearBrowsingDataDialog.showModal(); - }); - - if (this.importantSitesFlagEnabled_) { - this.browserProxy_.getImportantSites().then(sites => { - this.importantSites_ = sites; - }); - } - }, - - /** - * Record visits to the CBD dialog. - * - * settings.RouteObserverBehavior - * @param {!settings.Route} currentRoute - * @protected - */ - currentRouteChanged: function(currentRoute) { - if (currentRoute == settings.routes.CLEAR_BROWSER_DATA) { - chrome.metricsPrivate.recordUserAction('ClearBrowsingData_DialogCreated'); - this.dialogOpenedTime_ = Date.now(); - } - }, - - /** - * Updates the history description to show the relevant information - * depending on sync and signin state. - * - * @param {boolean} signedIn Whether the user is signed in. - * @param {boolean} syncing Whether the user is syncing history. - * @param {boolean} otherFormsOfBrowsingHistory Whether the user has other - * forms of browsing history in their account. - * @private - */ - updateSyncState_: function(signedIn, syncing, otherFormsOfBrowsingHistory) { - this.isSignedIn_ = signedIn; - this.isSyncingHistory_ = syncing; - this.$.clearBrowsingDataDialog.classList.add('fully-rendered'); - }, - - /** - * Choose a summary checkbox label. - * @param {boolean} isSignedIn - * @param {boolean} isSyncingHistory - * @param {string} historySummary - * @param {string} historySummarySigned - * @param {string} historySummarySynced - * @return {string} - * @private - */ - browsingCheckboxLabel_: function( - isSignedIn, isSyncingHistory, historySummary, historySummarySigned, - historySummarySynced) { - if (isSyncingHistory) { - return historySummarySynced; - } else if (isSignedIn) { - return historySummarySigned; - } - return historySummary; - }, - - /** - * Choose a content/site settings label. - * @param {string} siteSettings - * @param {string} contentSettings - * @return {string} - * @private - */ - siteSettingsLabel_: function(siteSettings, contentSettings) { - return loadTimeData.getBoolean('enableSiteSettings') ? siteSettings : - contentSettings; - }, - - /** - * Updates the text of a browsing data counter corresponding to the given - * preference. - * @param {string} prefName Browsing data type deletion preference. - * @param {string} text The text with which to update the counter - * @private - */ - updateCounterText_: function(prefName, text) { - // Data type deletion preferences are named "browser.clear_data.<datatype>". - // Strip the common prefix, i.e. use only "<datatype>". - const matches = prefName.match(/^browser\.clear_data\.(\w+)$/); - this.set('counters_.' + assert(matches[1]), text); - }, - - /** - * @return {boolean} Whether the ImportantSites dialog should be shown. - * @private - */ - shouldShowImportantSites_: function() { - if (!this.importantSitesFlagEnabled_) - return false; - const tab = this.$.tabs.selectedItem; - if (!tab.querySelector('.cookies-checkbox').checked) { - return false; - } - - const haveImportantSites = this.importantSites_.length > 0; - chrome.send( - 'metricsHandler:recordBooleanHistogram', - ['History.ClearBrowsingData.ImportantDialogShown', haveImportantSites]); - return haveImportantSites; - }, - - /** - * Handles the tap on the Clear Data button. - * @private - */ - onClearBrowsingDataTap_: function() { - if (this.shouldShowImportantSites_()) { - const tab = this.$.tabs.selectedItem; - this.showImportantSitesDialog_ = true; - this.showImportantSitesCacheSubtitle_ = - tab.querySelector('.cache-checkbox').checked; - this.$.clearBrowsingDataDialog.close(); - // Show important sites dialog after dom-if is applied. - this.async(() => this.$$('#importantSitesDialog').showModal()); - } else { - this.clearBrowsingData_(); - } - }, - - /** - * Handles closing of the clear browsing data dialog. Stops the close - * event from propagating if another dialog is shown to prevent the - * privacy-page from closing this dialog. - * @private - */ - onClearBrowsingDataDialogClose_: function(event) { - if (this.showImportantSitesDialog_) - event.stopPropagation(); - }, - - /** - * Clears browsing data and maybe shows a history notice. - * @private - */ - clearBrowsingData_: function() { - this.clearingInProgress_ = true; - const tab = this.$.tabs.selectedItem; - - checkboxes = tab.querySelectorAll('settings-checkbox'); - const dataTypes = []; - checkboxes.forEach((checkbox) => { - if (checkbox.checked) - dataTypes.push(checkbox.pref.key); - }); - - const timePeriod = tab.querySelector('.time-range-select').pref.value; - - if (tab.id == 'basic-tab') { - chrome.metricsPrivate.recordUserAction('ClearBrowsingData_BasicTab'); - } else { - chrome.metricsPrivate.recordUserAction('ClearBrowsingData_AdvancedTab'); - } - - this.browserProxy_ - .clearBrowsingData(dataTypes, timePeriod, this.importantSites_) - .then(shouldShowNotice => { - this.clearingInProgress_ = false; - this.showHistoryDeletionDialog_ = shouldShowNotice; - chrome.metricsPrivate.recordMediumTime( - 'History.ClearBrowsingData.TimeSpentInDialog', - Date.now() - this.dialogOpenedTime_); - if (!shouldShowNotice) - this.closeDialogs_(); - }); - }, - - /** - * Closes the clear browsing data or important site dialog if they are open. - * @private - */ - closeDialogs_: function() { - if (this.$.clearBrowsingDataDialog.open) - this.$.clearBrowsingDataDialog.close(); - if (this.showImportantSitesDialog_) - this.$$('#importantSitesDialog').close(); - }, - - /** @private */ - onCancelTap_: function() { - this.$.clearBrowsingDataDialog.cancel(); - }, - - /** - * Handles the tap confirm button in important sites. - * @private - */ - onImportantSitesConfirmTap_: function() { - this.clearBrowsingData_(); - }, - - /** @private */ - onImportantSitesCancelTap_: function() { - /** @type {!CrDialogElement} */ (this.$$('#importantSitesDialog')).cancel(); - }, - - /** - * Handles the closing of the notice about other forms of browsing history. - * @private - */ - onHistoryDeletionDialogClose_: function() { - this.showHistoryDeletionDialog_ = false; - this.closeDialogs_(); - }, - - /** - * Records an action when the user changes between the basic and advanced tab. - * @param {!Event} event - * @private - */ - recordTabChange_: function(event) { - if (event.detail.value == 0) { - chrome.metricsPrivate.recordUserAction( - 'ClearBrowsingData_SwitchTo_BasicTab'); - } else { - chrome.metricsPrivate.recordUserAction( - 'ClearBrowsingData_SwitchTo_AdvancedTab'); - } - }, - -}); diff --git a/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/compiled_resources2.gyp b/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/compiled_resources2.gyp index 518e48ef804..8660449e98a 100644 --- a/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/compiled_resources2.gyp +++ b/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/compiled_resources2.gyp @@ -14,6 +14,7 @@ { 'target_name': 'clear_browsing_data_dialog', 'dependencies': [ + '<(DEPTH)/third_party/polymer/v1_0/components-chromium/iron-pages/compiled_resources2.gyp:iron-pages-extracted', '<(DEPTH)/third_party/polymer/v1_0/components-chromium/iron-resizable-behavior/compiled_resources2.gyp:iron-resizable-behavior-extracted', '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:cr', '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:load_time_data', diff --git a/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/history_deletion_dialog.html b/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/history_deletion_dialog.html index a17572fb569..52429899184 100644 --- a/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/history_deletion_dialog.html +++ b/chromium/chrome/browser/resources/settings/clear_browsing_data_dialog/history_deletion_dialog.html @@ -11,7 +11,7 @@ <div slot="title">$i18n{historyDeletionDialogTitle}</div> <div slot="body">$i18nRaw{historyDeletionDialogBody}</div> <div slot="button-container"> - <paper-button class="action-button" on-tap="onOkTap_"> + <paper-button class="action-button" on-click="onOkTap_"> $i18n{historyDeletionDialogOK} </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/compiled_resources2.gyp b/chromium/chrome/browser/resources/settings/compiled_resources2.gyp index a0f14ce056a..f56f7ebe8c4 100644 --- a/chromium/chrome/browser/resources/settings/compiled_resources2.gyp +++ b/chromium/chrome/browser/resources/settings/compiled_resources2.gyp @@ -57,6 +57,7 @@ 'target_name': 'search_settings', 'dependencies': [ '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:cr', + '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:search_highlight_utils', ], 'includes': ['../../../../third_party/closure_compiler/compile_js2.gypi'], }, @@ -79,6 +80,7 @@ 'default_browser_page/compiled_resources2.gyp:*', 'device_page/compiled_resources2.gyp:*', 'downloads_page/compiled_resources2.gyp:*', + 'incompatible_applications_page/compiled_resources2.gyp:*', 'internet_page/compiled_resources2.gyp:*', 'languages_page/compiled_resources2.gyp:*', 'on_startup_page/compiled_resources2.gyp:*', diff --git a/chromium/chrome/browser/resources/settings/controls/controlled_button.html b/chromium/chrome/browser/resources/settings/controls/controlled_button.html index e0134790c7d..a5cf488854f 100644 --- a/chromium/chrome/browser/resources/settings/controls/controlled_button.html +++ b/chromium/chrome/browser/resources/settings/controls/controlled_button.html @@ -49,7 +49,7 @@ <paper-button disabled="[[enforced_]]">[[label]]</paper-button> <template is="dom-if" if="[[hasPrefPolicyIndicator(pref.*)]]" restamp> - <cr-policy-pref-indicator pref="[[pref]]" on-tap="onIndicatorTap_" + <cr-policy-pref-indicator pref="[[pref]]" on-click="onIndicatorTap_" icon-aria-label="[[label]]"> </cr-policy-pref-indicator> </template> diff --git a/chromium/chrome/browser/resources/settings/controls/controlled_button.js b/chromium/chrome/browser/resources/settings/controls/controlled_button.js index 307475678a9..49d46860349 100644 --- a/chromium/chrome/browser/resources/settings/controls/controlled_button.js +++ b/chromium/chrome/browser/resources/settings/controls/controlled_button.js @@ -32,7 +32,7 @@ Polymer({ * @private */ onIndicatorTap_: function(e) { - // Disallow <controlled-button on-tap="..."> when controlled. + // Disallow <controlled-button on-click="..."> when controlled. e.preventDefault(); e.stopPropagation(); }, diff --git a/chromium/chrome/browser/resources/settings/controls/controlled_radio_button.html b/chromium/chrome/browser/resources/settings/controls/controlled_radio_button.html index 10b1bca7fe2..d6fcdf26b06 100644 --- a/chromium/chrome/browser/resources/settings/controls/controlled_radio_button.html +++ b/chromium/chrome/browser/resources/settings/controls/controlled_radio_button.html @@ -12,7 +12,7 @@ :host { --ink-to-circle: calc((var(--paper-radio-button-ink-size) - var(--paper-radio-button-size)) / 2); - @apply(--settings-actionable); + @apply --settings-actionable; align-items: center; display: flex; outline: none; @@ -24,7 +24,7 @@ } #label { - color: var(--paper-radio-button-label-color, --primary-text-color); + color: var(--paper-radio-button-label-color, var(--primary-text-color)); } .circle, @@ -53,11 +53,12 @@ .circle { border: 2px solid var(--paper-radio-button-unchecked-color, - --primary-text-color); + var(--primary-text-color)); } :host([checked]) .circle { - border-color: var(--paper-radio-button-checked-color, --primary-color); + border-color: var(--paper-radio-button-checked-color, + var(--primary-color)); } .disc { @@ -69,23 +70,23 @@ :host([checked]) .disc { background-color: var(--paper-radio-button-checked-color, - --primary-color); + var(--primary-color)); transform: scale(0.5); } paper-ripple { color: var(--paper-radio-button-unchecked-ink-color, - --primary-text-color); + var(--primary-text-color)); opacity: .6; } :host([checked]) paper-ripple { color: var(--paper-radio-button-checked-ink-color, - --primary-text-color); + var(--primary-text-color)); } :host(:not([controlled_])) { - @apply(--settings-actionable); + @apply --settings-actionable; } :host([controlled_]) { @@ -100,12 +101,12 @@ :host([controlled_]) .circle { border-color: var(--paper-radio-button-unchecked-color, - --primary-text-color); + var(--primary-text-color)); } :host([controlled_][checked]) .disc { background-color: var(--paper-radio-button-unchecked-color, - --primary-text-color); + var(--primary-text-color)); } :host([controlled_]) #labelWrapper { @@ -132,7 +133,7 @@ </div> <template is="dom-if" if="[[showIndicator_(controlled_, name, pref.*)]]"> - <cr-policy-pref-indicator pref="[[pref]]" on-tap="onIndicatorTap_" + <cr-policy-pref-indicator pref="[[pref]]" on-click="onIndicatorTap_" icon-aria-label="[[label]]"> </cr-policy-pref-indicator> </template> diff --git a/chromium/chrome/browser/resources/settings/controls/controlled_radio_button.js b/chromium/chrome/browser/resources/settings/controls/controlled_radio_button.js index ca55d6b2bb1..53bd0505a3c 100644 --- a/chromium/chrome/browser/resources/settings/controls/controlled_radio_button.js +++ b/chromium/chrome/browser/resources/settings/controls/controlled_radio_button.js @@ -48,7 +48,6 @@ Polymer({ 'blur': 'updatePressed_', 'down': 'updatePressed_', 'focus': 'updatePressed_', - 'tap': 'onTap_', 'up': 'updatePressed_', }, @@ -88,17 +87,11 @@ Polymer({ * @private */ onIndicatorTap_: function(e) { - // Disallow <controlled-radio-button on-tap="..."> when controlled. + // Disallow <controlled-radio-button on-click="..."> when controlled. e.preventDefault(); e.stopPropagation(); }, - /** @private */ - onTap_: function() { - if (!this.controlled_) - this.checked = true; - }, - /** * @param {!Event} e * @private diff --git a/chromium/chrome/browser/resources/settings/controls/extension_controlled_indicator.html b/chromium/chrome/browser/resources/settings/controls/extension_controlled_indicator.html index ff53538c98f..50e3313c33c 100644 --- a/chromium/chrome/browser/resources/settings/controls/extension_controlled_indicator.html +++ b/chromium/chrome/browser/resources/settings/controls/extension_controlled_indicator.html @@ -17,7 +17,7 @@ } img { - @apply(--cr-icon-height-width); + @apply --cr-icon-height-width; -webkit-margin-end: 16px; } @@ -32,7 +32,7 @@ <img role="presentation" src="chrome://extension-icon/[[extensionId]]/40/1"> <span inner-h-t-m-l="[[getLabel_(extensionId, extensionName)]]"></span> <template is="dom-if" if="[[extensionCanBeDisabled]]" restamp> - <paper-button class="secondary-button" on-tap="onDisableTap_"> + <paper-button class="secondary-button" on-click="onDisableTap_"> $i18n{disable} </paper-button> </template> diff --git a/chromium/chrome/browser/resources/settings/controls/important_site_checkbox.html b/chromium/chrome/browser/resources/settings/controls/important_site_checkbox.html index 0a0dd1b1937..e70da80b8f5 100644 --- a/chromium/chrome/browser/resources/settings/controls/important_site_checkbox.html +++ b/chromium/chrome/browser/resources/settings/controls/important_site_checkbox.html @@ -20,7 +20,7 @@ } paper-checkbox:not([checked]) .secondary { - @apply(--settings-secondary-unchecked); + @apply --settings-secondary-unchecked; } .middot { @@ -28,7 +28,7 @@ } .label { - @apply(--settings-checkbox-label); + @apply --settings-checkbox-label; } </style> <div id="outerRow"> diff --git a/chromium/chrome/browser/resources/settings/controls/settings_checkbox.html b/chromium/chrome/browser/resources/settings/controls/settings_checkbox.html index b46ee716595..0563536cb09 100644 --- a/chromium/chrome/browser/resources/settings/controls/settings_checkbox.html +++ b/chromium/chrome/browser/resources/settings/controls/settings_checkbox.html @@ -30,7 +30,7 @@ } paper-checkbox:not([checked]) .secondary { - @apply(--settings-secondary-unchecked); + @apply --settings-secondary-unchecked; } cr-policy-pref-indicator { @@ -38,7 +38,7 @@ } .label { - @apply(--settings-checkbox-label); + @apply --settings-checkbox-label; } </style> <div id="outerRow" noSubLabel$="[[!hasSubLabel_(subLabel, subLabelHtml)]]"> diff --git a/chromium/chrome/browser/resources/settings/controls/settings_checkbox.js b/chromium/chrome/browser/resources/settings/controls/settings_checkbox.js index 3c0e8ded868..c4482b15c39 100644 --- a/chromium/chrome/browser/resources/settings/controls/settings_checkbox.js +++ b/chromium/chrome/browser/resources/settings/controls/settings_checkbox.js @@ -33,7 +33,7 @@ Polymer({ subLabelHtmlChanged_: function() { const links = this.root.querySelectorAll('.secondary.label a'); links.forEach((link) => { - link.addEventListener('tap', this.stopPropagation); + link.addEventListener('click', this.stopPropagation); }); }, diff --git a/chromium/chrome/browser/resources/settings/controls/settings_toggle_button.html b/chromium/chrome/browser/resources/settings/controls/settings_toggle_button.html index 7cdb86fdff3..2277abc6f7e 100644 --- a/chromium/chrome/browser/resources/settings/controls/settings_toggle_button.html +++ b/chromium/chrome/browser/resources/settings/controls/settings_toggle_button.html @@ -1,5 +1,6 @@ <link rel="import" href="chrome://resources/html/polymer.html"> +<link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html"> <link rel="import" href="chrome://resources/cr_elements/cr_toggle/cr_toggle.html"> <link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_pref_indicator.html"> <link rel="import" href="chrome://resources/polymer/v1_0/iron-flex-layout/iron-flex-layout-classes.html"> @@ -10,7 +11,7 @@ <template> <style include="settings-shared iron-flex"> :host { - @apply(--cr-section); + @apply --cr-section; } :host(.first), @@ -29,7 +30,7 @@ } :host([elide-label]) .label { - @apply(--settings-text-elide); + @apply --cr-text-elide; } #outerRow { diff --git a/chromium/chrome/browser/resources/settings/date_time_page/date_time_page.html b/chromium/chrome/browser/resources/settings/date_time_page/date_time_page.html index c064fabcbef..20b846cb2e7 100644 --- a/chromium/chrome/browser/resources/settings/date_time_page/date_time_page.html +++ b/chromium/chrome/browser/resources/settings/date_time_page/date_time_page.html @@ -45,7 +45,7 @@ if="[[prefs.cros.flags.fine_grained_time_zone_detection_enabled.value]]" restamp> <div id="timeZoneSettingsTrigger" class="settings-box first" - on-tap="onTimeZoneSettings_" actionable> + on-click="onTimeZoneSettings_" actionable> <div id="timeZoneButton" class="two-line"> $i18n{timeZoneButton} <div class="secondary"> @@ -79,7 +79,7 @@ label="$i18n{use24HourClock}"> </settings-toggle-button> <div class="settings-box" id="setDateTime" actionable - on-tap="onSetDateTimeTap_" hidden$="[[!canSetDateTime_]]"> + on-click="onSetDateTimeTap_" hidden$="[[!canSetDateTime_]]"> <div class="start">$i18n{setDateTime}</div> <button class="subpage-arrow" is="paper-icon-button-light" aria-label="$i18n{setDateTime}"></button> diff --git a/chromium/chrome/browser/resources/settings/default_browser_page/default_browser_page.html b/chromium/chrome/browser/resources/settings/default_browser_page/default_browser_page.html index ee383626bcc..c24783b0bd2 100644 --- a/chromium/chrome/browser/resources/settings/default_browser_page/default_browser_page.html +++ b/chromium/chrome/browser/resources/settings/default_browser_page/default_browser_page.html @@ -17,7 +17,7 @@ </div> <div class="separator"></div> <paper-button class="secondary-button" - on-tap="onSetDefaultBrowserTap_"> + on-click="onSetDefaultBrowserTap_"> $i18n{defaultBrowserMakeDefaultButton} </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/device_page/device_page.html b/chromium/chrome/browser/resources/settings/device_page/device_page.html index 56cc4fcfd76..cf90e9489fb 100644 --- a/chromium/chrome/browser/resources/settings/device_page/device_page.html +++ b/chromium/chrome/browser/resources/settings/device_page/device_page.html @@ -24,7 +24,7 @@ focus-config="[[focusConfig_]]"> <neon-animatable id="main" route-path="default"> <div id="pointersRow" class="settings-box first" - on-tap="onPointersTap_" actionable> + on-click="onPointersTap_" actionable> <div class="start"> [[getPointersTitle_(hasMouse_, hasTouchpad_)]] </div> @@ -32,34 +32,34 @@ aria-label$="[[getPointersTitle_(hasMouse_, hasTouchpad_)]]"></button> </div> - <div id="keyboardRow" class="settings-box" on-tap="onKeyboardTap_" + <div id="keyboardRow" class="settings-box" on-click="onKeyboardTap_" actionable> <div class="start">$i18n{keyboardTitle}</div> <button class="subpage-arrow" is="paper-icon-button-light" aria-label="$i18n{keyboardTitle}"></button> </div> <template is="dom-if" if="[[hasStylus_]]"> - <div id="stylusRow" class="settings-box" on-tap="onStylusTap_" + <div id="stylusRow" class="settings-box" on-click="onStylusTap_" actionable> <div class="start">$i18n{stylusTitle}</div> <button class="subpage-arrow" is="paper-icon-button-light" aria-label="$i18n{stylusTitle}"></button> </div> </template> - <div id="displayRow" class="settings-box" on-tap="onDisplayTap_" + <div id="displayRow" class="settings-box" on-click="onDisplayTap_" actionable> <div class="start">$i18n{displayTitle}</div> <button class="subpage-arrow" is="paper-icon-button-light" aria-label="$i18n{displayTitle}"></button> </div> - <div id="storageRow" class="settings-box" on-tap="onStorageTap_" + <div id="storageRow" class="settings-box" on-click="onStorageTap_" actionable> <div class="start">$i18n{storageTitle}</div> <button class="subpage-arrow" is="paper-icon-button-light" aria-label="$i18n{storageTitle}"></button> </div> <template is="dom-if" if="[[enablePowerSettings_]]"> - <div id="powerRow" class="settings-box" on-tap="onPowerTap_" + <div id="powerRow" class="settings-box" on-click="onPowerTap_" actionable> <div class="start">$i18n{powerTitle}</div> <button class="subpage-arrow" is="paper-icon-button-light" diff --git a/chromium/chrome/browser/resources/settings/device_page/device_page_browser_proxy.js b/chromium/chrome/browser/resources/settings/device_page/device_page_browser_proxy.js index 0344e145e0b..ae2fb6d008c 100644 --- a/chromium/chrome/browser/resources/settings/device_page/device_page_browser_proxy.js +++ b/chromium/chrome/browser/resources/settings/device_page/device_page_browser_proxy.js @@ -185,7 +185,7 @@ cr.define('settings', function() { /** override */ handleLinkEvent(e) { - // Prevent the link from activating its parent element when tapped or + // Prevent the link from activating its parent element when clicked or // when Enter is pressed. if (e.type != 'keydown' || e.keyCode == 13) e.stopPropagation(); diff --git a/chromium/chrome/browser/resources/settings/device_page/display.html b/chromium/chrome/browser/resources/settings/device_page/display.html index 81cf27e5056..0eec56f0f97 100644 --- a/chromium/chrome/browser/resources/settings/device_page/display.html +++ b/chromium/chrome/browser/resources/settings/device_page/display.html @@ -82,7 +82,7 @@ restamp> <div class="secondary self-start"> <paper-checkbox checked="[[isMirrored_(displays)]]" - on-tap="onMirroredTap_" + on-click="onMirroredTap_" aria-label="[[getDisplayMirrorText_(displays)]]"> <div class="text-area">[[getDisplayMirrorText_(displays)]]</div> </paper-checkbox> @@ -188,7 +188,7 @@ <button is="cr-link-row" icon-class="subpage-arrow" class="indented hr" id="overscan" label="$i18n{displayOverscanPageTitle}" - sub-label="$i18n{displayOverscanPageText}" on-tap="onOverscanTap_" + sub-label="$i18n{displayOverscanPageText}" on-click="onOverscanTap_" hidden$="[[!showOverscanSetting_(selectedDisplay)]]"> </button> @@ -198,7 +198,7 @@ </settings-display-overscan-dialog> <div class="settings-box indented two-line" - on-tap="onTouchCalibrationTap_" + on-click="onTouchCalibrationTap_" hidden$="[[!showTouchCalibrationSetting_(selectedDisplay)]]" actionable> <div class="start"> diff --git a/chromium/chrome/browser/resources/settings/device_page/display.js b/chromium/chrome/browser/resources/settings/device_page/display.js index c21864b443b..2fcb479af3b 100644 --- a/chromium/chrome/browser/resources/settings/device_page/display.js +++ b/chromium/chrome/browser/resources/settings/device_page/display.js @@ -699,25 +699,18 @@ Polymer({ // Blur the control so that when the transition animation completes and the // UI is focused, the control does not receive focus. crbug.com/785070 event.target.blur(); - let id = ''; - /** @type {!chrome.system.display.DisplayProperties} */ - const properties = {}; - if (this.isMirrored_(this.displays)) { - id = this.primaryDisplayId; - properties.mirroringSourceId = ''; - } else { - // Set the mirroringSourceId of the secondary (first non-primary) display. - for (let i = 0; i < this.displays.length; ++i) { - const display = this.displays[i]; - if (display.id != this.primaryDisplayId) { - id = display.id; - break; - } - } - properties.mirroringSourceId = this.primaryDisplayId; - } - settings.display.systemDisplayApi.setDisplayProperties( - id, properties, this.setPropertiesCallback_.bind(this)); + + /** @type {!chrome.system.display.MirrorModeInfo} */ + let mirrorModeInfo = { + mode: this.isMirrored_(this.displays) ? + chrome.system.display.MirrorMode.OFF : + chrome.system.display.MirrorMode.NORMAL + }; + settings.display.systemDisplayApi.setMirrorMode(mirrorModeInfo, () => { + let error = chrome.runtime.lastError; + if (error) + console.error('setMirrorMode Error: ' + error.message); + }); }, /** @private */ diff --git a/chromium/chrome/browser/resources/settings/device_page/display_layout.html b/chromium/chrome/browser/resources/settings/device_page/display_layout.html index 289ebf9c8f2..4b138cb2b17 100644 --- a/chromium/chrome/browser/resources/settings/device_page/display_layout.html +++ b/chromium/chrome/browser/resources/settings/device_page/display_layout.html @@ -54,7 +54,7 @@ } .display.elevate { - @apply(--shadow-elevation-2dp); + @apply --shadow-elevation-2dp; } </style> <div id="displayArea" on-iron-resize="calculateVisualScale_"> @@ -67,15 +67,11 @@ </template> <template is="dom-repeat" items="[[displays]]"> <div id="_[[item.id]]" class="display elevate" - draggable="[[dragEnabled]]" on-tap="onSelectDisplayTap_" + draggable="[[dragEnabled]]" on-click="onSelectDisplayTap_" style$="[[getDivStyle_(item.id, item.bounds, visualScale)]]" selected$="[[isSelected_(item, selectedDisplay)]]"> - <div hidden$="[[mirroring]]"> - [[item.name]] - </div> - <div hidden$="[[!mirroring]]"> - $i18n{displayMirrorDisplayName} - </div> + [[getDisplayName_(mirroring, item.name, + '$i18nPolymer{displayMirrorDisplayName}')]] </div> </template> </div> diff --git a/chromium/chrome/browser/resources/settings/device_page/display_layout.js b/chromium/chrome/browser/resources/settings/device_page/display_layout.js index 4b9f4192931..6cd70ca9581 100644 --- a/chromium/chrome/browser/resources/settings/device_page/display_layout.js +++ b/chromium/chrome/browser/resources/settings/device_page/display_layout.js @@ -191,6 +191,17 @@ Polymer({ }, /** + * @param {boolean} mirroring + * @param {string} displayName + * @param {string} mirroringName + * @return {string} + * @private + */ + getDisplayName_: function(mirroring, displayName, mirroringName) { + return mirroring ? mirroringName : displayName; + }, + + /** * @param {!chrome.system.display.DisplayUnitInfo} display * @param {!chrome.system.display.DisplayUnitInfo} selectedDisplay * @return {boolean} diff --git a/chromium/chrome/browser/resources/settings/device_page/display_overscan_dialog.html b/chromium/chrome/browser/resources/settings/device_page/display_overscan_dialog.html index 08e263c7738..5c90de1c152 100644 --- a/chromium/chrome/browser/resources/settings/device_page/display_overscan_dialog.html +++ b/chromium/chrome/browser/resources/settings/device_page/display_overscan_dialog.html @@ -74,10 +74,10 @@ </div> </div> <div slot="button-container"> - <paper-button id="reset" class="cancel-button" on-tap="onResetTap_"> + <paper-button id="reset" class="cancel-button" on-click="onResetTap_"> $i18n{displayOverscanReset} </paper-button> - <paper-button class="action-button" on-tap="onSaveTap_"> + <paper-button class="action-button" on-click="onSaveTap_"> $i18n{ok} </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/device_page/drive_cache_dialog.html b/chromium/chrome/browser/resources/settings/device_page/drive_cache_dialog.html index 696cbad5190..d111fcf73a3 100644 --- a/chromium/chrome/browser/resources/settings/device_page/drive_cache_dialog.html +++ b/chromium/chrome/browser/resources/settings/device_page/drive_cache_dialog.html @@ -17,11 +17,11 @@ </div> <div slot="button-container"> <paper-button id="cancelButton" class="cancel-button" - on-tap="onCancelTap_"> + on-click="onCancelTap_"> $i18n{cancel} </paper-button> <paper-button id="deleteButton" class="action-button" - on-tap="onDeleteTap_"> + on-click="onDeleteTap_"> $i18n{storageDeleteAllButtonTitle} </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/device_page/keyboard.html b/chromium/chrome/browser/resources/settings/device_page/keyboard.html index cabf3ca8e43..1ec10018922 100644 --- a/chromium/chrome/browser/resources/settings/device_page/keyboard.html +++ b/chromium/chrome/browser/resources/settings/device_page/keyboard.html @@ -104,12 +104,12 @@ </div> </iron-collapse> <div id="keyboardOverlay" class="settings-box" - on-tap="onShowKeyboardShortcutsOverlayTap_" actionable> + on-click="onShowKeyboardShortcutsOverlayTap_" actionable> <div class="start">$i18n{showKeyboardShortcutsOverlay}</div> <button class="icon-external" is="paper-icon-button-light" aria-label="$i18n{showKeyboardShortcutsOverlay}"></button> </div> - <div class="settings-box" on-tap="onShowLanguageInputTap_" actionable> + <div class="settings-box" on-click="onShowLanguageInputTap_" actionable> <div class="start">$i18n{keyboardShowLanguageAndInput}</div> <button class="subpage-arrow" is="paper-icon-button-light" aria-label="$i18n{keyboardShowLanguageAndInput}"></button> diff --git a/chromium/chrome/browser/resources/settings/device_page/pointers.html b/chromium/chrome/browser/resources/settings/device_page/pointers.html index d93db637cf5..0fb133e2933 100644 --- a/chromium/chrome/browser/resources/settings/device_page/pointers.html +++ b/chromium/chrome/browser/resources/settings/device_page/pointers.html @@ -85,7 +85,7 @@ <paper-radio-button name="true"> $i18n{naturalScrollLabel} <a href="$i18n{naturalScrollLearnMoreLink}" target="_blank" - on-tap="onLearnMoreLinkActivated_" + on-click="onLearnMoreLinkActivated_" on-keydown="onLearnMoreLinkActivated_"> $i18n{naturalScrollLearnMore} </a> diff --git a/chromium/chrome/browser/resources/settings/device_page/storage.html b/chromium/chrome/browser/resources/settings/device_page/storage.html index a10225b2f15..fc8cc1df590 100644 --- a/chromium/chrome/browser/resources/settings/device_page/storage.html +++ b/chromium/chrome/browser/resources/settings/device_page/storage.html @@ -195,7 +195,7 @@ </div> </div> </div> - <div class="settings-box two-line" on-tap="onDownloadsTap_" actionable> + <div class="settings-box two-line" on-click="onDownloadsTap_" actionable> <div class="start"> $i18n{storageItemDownloads} <div id="downloadsSize" class="secondary"> @@ -207,7 +207,7 @@ aria-describedby="downloadsSize"></button> </div> <template is="dom-if" if="[[driveEnabled_]]"> - <div class="settings-box two-line" on-tap="onDriveCacheTap_" + <div class="settings-box two-line" on-click="onDriveCacheTap_" actionable$="[[hasDriveCache_]]" > <div class="start"> $i18n{storageItemDriveCache} @@ -221,7 +221,7 @@ </button> </div> </template> - <div class="settings-box two-line" on-tap="onBrowsingDataTap_" actionable> + <div class="settings-box two-line" on-click="onBrowsingDataTap_" actionable> <div class="start"> $i18n{storageItemBrowsingData} <div id="browsingDataSize" class="secondary"> @@ -233,7 +233,7 @@ aria-describedby="browsingDataSize"></button> </div> <template is="dom-if" if="[[androidEnabled_]]"> - <div class="settings-box two-line" on-tap="onAndroidTap_" actionable> + <div class="settings-box two-line" on-click="onAndroidTap_" actionable> <div class="start"> $i18n{storageItemAndroid} <div id="androidSize" class="secondary"> @@ -246,7 +246,7 @@ </div> </template> <template is="dom-if" if="[[!isGuest_]]"> - <div class="settings-box two-line" on-tap="onOtherUsersTap_" actionable> + <div class="settings-box two-line" on-click="onOtherUsersTap_" actionable> <div class="start"> $i18n{storageItemOtherUsers} <div id="otherUsersSize" class="secondary"> diff --git a/chromium/chrome/browser/resources/settings/device_page/stylus.html b/chromium/chrome/browser/resources/settings/device_page/stylus.html index 9aa157eceab..93252074b04 100644 --- a/chromium/chrome/browser/resources/settings/device_page/stylus.html +++ b/chromium/chrome/browser/resources/settings/device_page/stylus.html @@ -19,7 +19,7 @@ paper-spinner-lite { margin-left: 12px; - @apply(--cr-icon-height-width); + @apply --cr-icon-height-width; } cr-policy-indicator { @@ -77,7 +77,7 @@ <!-- TODO(scottchen): Make a proper a[href].settings-box with icon-external (see: https://crbug.com/684005)--> - <div class="settings-box two-line" on-tap="onFindAppsTap_" actionable + <div class="settings-box two-line" on-click="onFindAppsTap_" actionable hidden$="[[!prefs.arc.enabled.value]]"> <div class="start"> $i18n{stylusFindMoreAppsPrimary} @@ -97,7 +97,7 @@ <div class="settings-box first"> <div id="lock-screen-toggle-label" class="start" actionable$="[[!disallowedOnLockScreenByPolicy_(selectedApp_)]]" - on-tap="toggleLockScreenSupport_"> + on-click="toggleLockScreenSupport_"> $i18n{stylusNoteTakingAppEnabledOnLockScreen} </div> <template is="dom-if" diff --git a/chromium/chrome/browser/resources/settings/downloads_page/downloads_page.html b/chromium/chrome/browser/resources/settings/downloads_page/downloads_page.html index 2f213e62e6a..ea4a199cb0a 100644 --- a/chromium/chrome/browser/resources/settings/downloads_page/downloads_page.html +++ b/chromium/chrome/browser/resources/settings/downloads_page/downloads_page.html @@ -29,7 +29,7 @@ <div class="separator"></div> <controlled-button class="secondary-button" id="changeDownloadsPath" label="$i18n{changeDownloadLocation}" - on-tap="selectDownloadLocation_" + on-click="selectDownloadLocation_" pref="[[prefs.download.default_directory]]" end-justified> </controlled-button> @@ -52,7 +52,7 @@ </div> <div class="separator"></div> <paper-button id="resetAutoOpenFileTypes" class="secondary-button" - on-tap="onClearAutoOpenFileTypesTap_"> + on-click="onClearAutoOpenFileTypesTap_"> $i18n{clear} </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/google_assistant_page/google_assistant_page.html b/chromium/chrome/browser/resources/settings/google_assistant_page/google_assistant_page.html index b96f029582e..46081160c54 100644 --- a/chromium/chrome/browser/resources/settings/google_assistant_page/google_assistant_page.html +++ b/chromium/chrome/browser/resources/settings/google_assistant_page/google_assistant_page.html @@ -30,7 +30,7 @@ on-change="onGoogleAssistantContextEnableChange_"> </settings-toggle-button> <div id="googleAssistantSettings" class="settings-box" - on-tap="onGoogleAssistantSettingsTapped_" actionable> + on-click="onGoogleAssistantSettingsTapped_" actionable> <div class="start"> $i18n{googleAssistantSettings} </div> diff --git a/chromium/chrome/browser/resources/settings/icons.html b/chromium/chrome/browser/resources/settings/icons.html index c15dd7ba4a7..bf9a0008176 100644 --- a/chromium/chrome/browser/resources/settings/icons.html +++ b/chromium/chrome/browser/resources/settings/icons.html @@ -10,9 +10,7 @@ List icons here rather than importing large sets of (e.g. Polymer) icons. <defs> <!-- Ads icon in the Content Settings --> <g id="ads"> - <path d="M19,3H5C3.89,3,3,3.9,3,5v14c0,1.1,0.89,2,2,2h14c1.1,0,2-0.9,2-2V5C21,3.9,20.1,3,19,3z M11,15H9.5v-1.5h-2V15H6v-4.5V9h1.5h2H10h1V15z M18,14c0,0.55-0.45,1-1,1h-4V9h4c0.55,0,1,0.45,1,1V14z"></path> - <rect x="7.5" y="10.5" width="2" height="1.5"></rect> - <rect x="14.5" y="10.5" width="2" height="3"></rect> + <path d="M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm0 14H5V8h14v10z"></path> </g> <!-- Cookie SVG obtained from rolfe@ --> @@ -104,6 +102,7 @@ List icons here rather than importing large sets of (e.g. Polymer) icons. <g id="refresh"><path d="M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"></path></g> <g id="restore"><path d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"></path></g> <g id="rotate-right"><path d="M15.55 5.55L11 1v3.07C7.06 4.56 4 7.92 4 12s3.05 7.44 7 7.93v-2.02c-2.84-.48-5-2.94-5-5.91s2.16-5.43 5-5.91V10l4.55-4.45zM19.93 11c-.17-1.39-.72-2.73-1.62-3.89l-1.42 1.42c.54.75.88 1.6 1.02 2.47h2.02zM13 17.9v2.02c1.39-.17 2.74-.71 3.9-1.61l-1.44-1.44c-.75.54-1.59.89-2.46 1.03zm3.89-2.42l1.42 1.41c.9-1.16 1.45-2.5 1.62-3.89h-2.02c-.14.87-.48 1.72-1.02 2.48z"></path></g> + <g id="sensors"><path d="M10 8.5c-0.8 0-1.5 0.7-1.5 1.5s0.7 1.5 1.5 1.5s1.5-0.7 1.5-1.5S10.8 8.5 10 8.5z M7.6 5.8 C6.2 6.7 5.2 8.2 5.2 10c0 1.8 1 3.4 2.4 4.2l0.8-1.4c-1-0.6-1.6-1.6-1.6-2.8c0-1.2 0.6-2.2 1.6-2.8L7.6 5.8z M14.8 10 c0-1.8-1-3.4-2.4-4.2l-0.8 1.4c0.9 0.6 1.6 1.6 1.6 2.8c0 1.2-0.6 2.2-1.6 2.8l0.8 1.4C13.8 13.4 14.8 11.8 14.8 10z M6 3 c-2.4 1.4-4 4-4 7c0 3 1.6 5.6 4 7l0.8-1.4c-1.9-1.1-3.2-3.2-3.2-5.6c0-2.4 1.3-4.5 3.2-5.6L6 3z M13.2 4.4 c1.9 1.1 3.2 3.2 3.2 5.6c0 2.4-1.3 4.5-3.2 5.6L14 17c2.4-1.4 4-4 4-7c0-3-1.6-5.6-4-7L13.2 4.4z"></path></g> <g id="security"><path d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11v8.8z"></path></g> <if expr="chromeos"> <g id="alert-device-out-of-range" fill="none" fill-rule="evenodd"><path d="M-1-1h20v20H-1z"></path><path fill="#C53929" fill-rule="nonzero" d="M8.167 11.5h1.666v1.667H8.167V11.5zm0-6.667h1.666v5H8.167v-5zM8.992.667C4.392.667.667 4.4.667 9s3.725 8.333 8.325 8.333c4.608 0 8.341-3.733 8.341-8.333S13.6.667 8.992.667zm.008 15A6.665 6.665 0 0 1 2.333 9 6.665 6.665 0 0 1 9 2.333 6.665 6.665 0 0 1 15.667 9 6.665 6.665 0 0 1 9 15.667z"></path></g> diff --git a/chromium/chrome/browser/resources/settings/images/sync_banner.svg b/chromium/chrome/browser/resources/settings/images/sync_banner.svg new file mode 100644 index 00000000000..d2ecb8603a7 --- /dev/null +++ b/chromium/chrome/browser/resources/settings/images/sync_banner.svg @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="155px" height="131px" viewBox="0 0 155 131" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <polygon fill="#3874D5" points="0 114.5 154.75 114.5 154.75 0 0 0"></polygon> + <g transform="translate(61.000000, 53.250000)"> + <path d="M59.25,77 L19,77 C17.35,77 16,75.65 16,74 L16,3 C16,1.35 17.35,0 19,0 L59.25,0 C60.9,0 62.25,1.35 62.25,3 L62.25,74 C62.25,75.65 60.9,77 59.25,77" fill="#4285F4"></path> + <path d="M31.4473,61.5527 C31.4473,70.0837 24.5313,76.9997 16.0003,76.9997 C7.4683,76.9997 0.5523,70.0837 0.5523,61.5527 C0.5523,53.0207 7.4683,46.1047 16.0003,46.1047 C24.5313,46.1047 31.4473,53.0207 31.4473,61.5527" fill="#FABB05"></path> + </g> + </g> +</svg>
\ No newline at end of file diff --git a/chromium/chrome/browser/resources/settings/incompatible_applications_page/compiled_resources2.gyp b/chromium/chrome/browser/resources/settings/incompatible_applications_page/compiled_resources2.gyp new file mode 100644 index 00000000000..c73f9ebe50a --- /dev/null +++ b/chromium/chrome/browser/resources/settings/incompatible_applications_page/compiled_resources2.gyp @@ -0,0 +1,33 @@ +# Copyright 2018 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. +{ + 'targets': [ + { + 'target_name': 'incompatible_applications_browser_proxy', + 'dependencies': [ + '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:cr', + ], + 'includes': ['../../../../../third_party/closure_compiler/compile_js2.gypi'], + }, + { + 'target_name': 'incompatible_applications_page', + 'dependencies': [ + '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:assert', + '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:i18n_behavior', + '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:web_ui_listener_behavior', + 'incompatible_applications_browser_proxy', + ], + 'includes': ['../../../../../third_party/closure_compiler/compile_js2.gypi'], + }, + { + 'target_name': 'incompatible_application_item', + 'dependencies': [ + '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:assert', + '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:i18n_behavior', + 'incompatible_applications_browser_proxy', + ], + 'includes': ['../../../../../third_party/closure_compiler/compile_js2.gypi'], + }, + ], +} diff --git a/chromium/chrome/browser/resources/settings/incompatible_applications_page/incompatible_application_item.html b/chromium/chrome/browser/resources/settings/incompatible_applications_page/incompatible_application_item.html new file mode 100644 index 00000000000..1f8027ae747 --- /dev/null +++ b/chromium/chrome/browser/resources/settings/incompatible_applications_page/incompatible_application_item.html @@ -0,0 +1,25 @@ +<link rel="import" href="chrome://resources/html/polymer.html"> + +<link rel="import" href="chrome://resources/html/assert.html"> +<link rel="import" href="chrome://resources/html/i18n_behavior.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html"> +<link rel="import" href="../settings_shared_css.html"> +<link rel="import" href="incompatible_applications_browser_proxy.html"> + +<dom-module id="incompatible-application-item"> + <template> + <style include="settings-shared"> + :host { + display: block; + } + </style> + <div class="list-item"> + <div class="start">[[applicationName]]</div> + <div class="separator"></div> + <paper-button class="primary-button" on-click="onActionTap_"> + [[getActionName_(actionType)]] + </paper-button> + </div> + </template> + <script src="incompatible_application_item.js"></script> +</dom-module> diff --git a/chromium/chrome/browser/resources/settings/incompatible_applications_page/incompatible_application_item.js b/chromium/chrome/browser/resources/settings/incompatible_applications_page/incompatible_application_item.js new file mode 100644 index 00000000000..72dd7f1941e --- /dev/null +++ b/chromium/chrome/browser/resources/settings/incompatible_applications_page/incompatible_application_item.js @@ -0,0 +1,103 @@ +// Copyright 2018 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 + * 'incompatible-application-item' represents one item in a "list-box" of + * incompatible applications, as defined in + * chrome/browser/conflicts/problematic_programs_updater_win.h. + * This element contains a button that can be used to remove or update the + * incompatible application, depending on the value of the action-type property. + * + * Example usage: + * + * <div class="list-box"> + * <incompatible-application-item + * application-name="Google Chrome" + * action-type="1" + * action-url="https://www.google.com/chrome/more-info"> + * </incompatible-application-item> + * </div> + * + * or + * + * <div class="list-box"> + * <template is="dom-repeat" items="[[applications]]" as="application"> + * <incompatible-application-item + * application-name="[[application.name]]" + * action-type="[[application.actionType]]" + * action-url="[[application.actionUrl]]"> + * </incompatible-application-item> + * </template> + * </div> + */ + +Polymer({ + is: 'incompatible-application-item', + + behaviors: [I18nBehavior], + + properties: { + /** + * The name of the application to be displayed. Also used for the UNINSTALL + * action, where the name is passed to the startProgramUninstallation() + * call. + */ + applicationName: String, + + /** + * The type of the action to be taken on this incompatible application. Must + * be one of BlacklistMessageType in + * chrome/browser/conflicts/proto/module_list.proto. + * @type {!settings.ActionTypes} + */ + actionType: Number, + + /** + * For the actions MORE_INFO and UPGRADE, this is the URL that must be + * opened when the action button is tapped. + */ + actionUrl: String, + }, + + /** @private {settings.IncompatibleApplicationsBrowserProxy} */ + browserProxy_: null, + + /** @override */ + created: function() { + this.browserProxy_ = + settings.IncompatibleApplicationsBrowserProxyImpl.getInstance(); + }, + + /** + * Executes the action for this incompatible application, depending on + * actionType. + * @private + */ + onActionTap_: function() { + if (this.actionType === settings.ActionTypes.UNINSTALL) { + this.browserProxy_.startProgramUninstallation(this.applicationName); + } else if ( + this.actionType === settings.ActionTypes.MORE_INFO || + this.actionType === settings.ActionTypes.UPGRADE) { + this.browserProxy_.openURL(this.actionUrl); + } else { + assertNotReached(); + } + }, + + /** + * @return {string} The label that should be applied to the action button. + * @private + */ + getActionName_: function(actionType) { + if (actionType === settings.ActionTypes.UNINSTALL) + return this.i18n('incompatibleApplicationsRemoveButton'); + if (actionType === settings.ActionTypes.MORE_INFO) + return this.i18n('learnMore'); + if (actionType === settings.ActionTypes.UPGRADE) + return this.i18n('incompatibleApplicationsUpdateButton'); + assertNotReached(); + }, +}); diff --git a/chromium/chrome/browser/resources/settings/incompatible_applications_page/incompatible_applications_browser_proxy.html b/chromium/chrome/browser/resources/settings/incompatible_applications_page/incompatible_applications_browser_proxy.html new file mode 100644 index 00000000000..8d55a232daa --- /dev/null +++ b/chromium/chrome/browser/resources/settings/incompatible_applications_page/incompatible_applications_browser_proxy.html @@ -0,0 +1,2 @@ +<link rel="import" href="chrome://resources/html/cr.html"> +<script src="incompatible_applications_browser_proxy.js"></script> diff --git a/chromium/chrome/browser/resources/settings/incompatible_applications_page/incompatible_applications_browser_proxy.js b/chromium/chrome/browser/resources/settings/incompatible_applications_page/incompatible_applications_browser_proxy.js new file mode 100644 index 00000000000..7017e0a469d --- /dev/null +++ b/chromium/chrome/browser/resources/settings/incompatible_applications_page/incompatible_applications_browser_proxy.js @@ -0,0 +1,122 @@ +// Copyright 2018 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 A helper object used from the Incompatible Applications section + * to interact with the browser. + */ + +cr.exportPath('settings'); + +/** + * All possible actions to take on an incompatible application. + * + * Must be kept in sync with BlacklistMessageType in + * chrome/browser/conflicts/proto/module_list.proto + * @readonly + * @enum {number} + */ +settings.ActionTypes = { + UNINSTALL: 0, + MORE_INFO: 1, + UPGRADE: 2, +}; + +/** + * @typedef {{ + * name: string, + * actionType: {settings.ActionTypes}, + * actionUrl: string, + * }} + */ +settings.IncompatibleApplication; + +cr.define('settings', function() { + /** @interface */ + class IncompatibleApplicationsBrowserProxy { + /** + * Get the list of incompatible applications. + * @return {!Promise<!Array<!settings.IncompatibleApplication>>} + */ + requestIncompatibleApplicationsList() {} + + /** + * Launches the Apps & Features page that allows uninstalling 'programName'. + * @param {string} programName + */ + startProgramUninstallation(programName) {} + + /** + * Opens the specified URL in a new tab. + * @param {!string} url + */ + openURL(url) {} + + /** + * Requests the plural string for the subtitle of the Incompatible + * Applications subpage. + * @param {number} numApplications + * @return {!Promise<string>} + */ + getSubtitlePluralString(numApplications) {} + + /** + * Requests the plural string for the subtitle of the Incompatible + * Applications subpage, when the user does not have administrator rights. + * @param {number} numApplications + * @return {!Promise<string>} + */ + getSubtitleNoAdminRightsPluralString(numApplications) {} + + /** + * Requests the plural string for the title of the list of Incompatible + * Applications. + * @param {number} numApplications + * @return {!Promise<string>} + */ + getListTitlePluralString(numApplications) {} + } + + /** @implements {settings.IncompatibleApplicationsBrowserProxy} */ + class IncompatibleApplicationsBrowserProxyImpl { + /** @override */ + requestIncompatibleApplicationsList() { + return cr.sendWithPromise('requestIncompatibleApplicationsList'); + } + + /** @override */ + startProgramUninstallation(programName) { + chrome.send('startProgramUninstallation', [programName]); + } + + /** @override */ + openURL(url) { + window.open(url); + } + + /** @override */ + getSubtitlePluralString(numApplications) { + return cr.sendWithPromise('getSubtitlePluralString', numApplications); + } + + /** @override */ + getSubtitleNoAdminRightsPluralString(numApplications) { + return cr.sendWithPromise( + 'getSubtitleNoAdminRightsPluralString', numApplications); + } + + /** @override */ + getListTitlePluralString(numApplications) { + return cr.sendWithPromise('getListTitlePluralString', numApplications); + } + } + + cr.addSingletonGetter(IncompatibleApplicationsBrowserProxyImpl); + + return { + IncompatibleApplicationsBrowserProxy: IncompatibleApplicationsBrowserProxy, + IncompatibleApplicationsBrowserProxyImpl: + IncompatibleApplicationsBrowserProxyImpl, + }; +}); diff --git a/chromium/chrome/browser/resources/settings/incompatible_applications_page/incompatible_applications_page.html b/chromium/chrome/browser/resources/settings/incompatible_applications_page/incompatible_applications_page.html new file mode 100644 index 00000000000..9fcccb14ef3 --- /dev/null +++ b/chromium/chrome/browser/resources/settings/incompatible_applications_page/incompatible_applications_page.html @@ -0,0 +1,59 @@ +<link rel="import" href="chrome://resources/html/polymer.html"> + +<link rel="import" href="chrome://resources/html/assert.html"> +<link rel="import" href="chrome://resources/html/i18n_behavior.html"> +<link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html"> +<link rel="import" href="../settings_shared_css.html"> +<link rel="import" href="incompatible_application_item.html"> +<link rel="import" href="incompatible_applications_browser_proxy.html"> + +<dom-module id="settings-incompatible-applications-page"> + <template> + <style include="settings-shared"> + #is-done-section > iron-icon { + --iron-icon-fill-color: var(--google-blue-500); + } + </style> + + <div hidden$="[[!isDone_]]" id="is-done-section" class="settings-box first"> + <iron-icon icon="settings:check-circle"></iron-icon> + <div class="middle no-min-width"> + $i18n{incompatibleApplicationsDone} + </div> + </div> + + <template is="dom-if" if="[[!isDone_]]"> + <div class="settings-box first two-line"> + <iron-icon icon="settings:security"></iron-icon> + <div class="middle no-min-width"> + <div hidden$="[[!hasAdminRights_]]"> + [[subtitleText_]] $i18nRaw{incompatibleApplicationsSubpageLearnHow} + </div> + <div hidden$="[[hasAdminRights_]]"> + [[subtitleNoAdminRightsText_]] + </div> + </div> + </div> + <div class="settings-box continuation"> + <div class="secondary">[[listTitleText_]]</div> + </div> + <div id="incompatible-applications-list" class="list-frame vertical-list"> + <template is="dom-repeat" items="[[applications_]]" as="application"> + <incompatible-application-item + hidden$="[[!hasAdminRights_]]" + class="incompatible-application" + application-name="[[application.name]]" + action-type="[[application.type]]" + action-url="[[application.url]]"> + </incompatible-application-item> + <div hidden$="[[hasAdminRights_]]" + class="list-item incompatible-application"> + [[application.name]] + </div> + </template> + </div> + </template> + </template> + <script src="incompatible_applications_page.js"></script> +</dom-module> diff --git a/chromium/chrome/browser/resources/settings/incompatible_applications_page/incompatible_applications_page.js b/chromium/chrome/browser/resources/settings/incompatible_applications_page/incompatible_applications_page.js new file mode 100644 index 00000000000..27426d236a8 --- /dev/null +++ b/chromium/chrome/browser/resources/settings/incompatible_applications_page/incompatible_applications_page.js @@ -0,0 +1,138 @@ +// Copyright 2018 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 + * 'settings-incompatible-applications-page' is the settings subpage containing + * the list of incompatible applications. + * + * Example: + * + * <iron-animated-pages> + * <settings-incompatible-applications-page"> + * </settings-incompatible-applications-page> + * ... other pages ... + * </iron-animated-pages> + */ + +Polymer({ + is: 'settings-incompatible-applications-page', + + behaviors: [I18nBehavior, WebUIListenerBehavior], + + properties: { + /** + * Indicates if the current user has administrator rights. + * @private + */ + hasAdminRights_: { + type: Boolean, + value: function() { + return loadTimeData.getBoolean('hasAdminRights'); + }, + }, + + /** + * The list of all the incompatible applications. + * @private {Array<settings.IncompatibleApplication>} + */ + applications_: Array, + + /** + * Determines if the user has finished with this page. + * @private + */ + isDone_: { + type: Boolean, + computed: 'computeIsDone_(applications_.*)', + }, + + /** + * The text for the subtitle of the subpage. + * @private + */ + subtitleText_: { + type: String, + value: '', + }, + + /** + * The text for the subtitle of the subpage, when the user does not have + * administrator rights. + * @private + */ + subtitleNoAdminRightsText_: { + type: String, + value: '', + }, + + /** + * The text for the title of the list of incompatible applications. + * @private + */ + listTitleText_: { + type: String, + value: '', + }, + }, + + /** @override */ + ready: function() { + this.addWebUIListener( + 'incompatible-application-removed', + this.onIncompatibleApplicationRemoved_.bind(this)); + + settings.IncompatibleApplicationsBrowserProxyImpl.getInstance() + .requestIncompatibleApplicationsList() + .then(list => { + this.applications_ = list; + this.updatePluralStrings_(); + }); + }, + + /** + * @return {boolean} + * @private + */ + computeIsDone_: function() { + return this.applications_.length === 0; + }, + + /** + * Removes a single incompatible application from the |applications_| list. + * @private + */ + onIncompatibleApplicationRemoved_: function(applicationName) { + // Find the index of the element. + let index = this.applications_.findIndex(function(application) { + return application.name == applicationName; + }); + + assert(index !== -1); + + this.splice('applications_', index, 1); + }, + + /** + * Updates the texts of the Incompatible Applications subpage that depends on + * the length of |applications_|. + * @private + */ + updatePluralStrings_: function() { + const browserProxy = + settings.IncompatibleApplicationsBrowserProxyImpl.getInstance(); + const numApplications = this.applications_.length; + Promise + .all([ + browserProxy.getSubtitlePluralString(numApplications), + browserProxy.getSubtitleNoAdminRightsPluralString(numApplications), + browserProxy.getListTitlePluralString(numApplications), + ]) + .then(strings => { + this.subtitleText_ = strings[0]; + this.subtitleNoAdminRightsText_ = strings[1]; + this.listTitleText_ = strings[2]; + }); + }, +}); diff --git a/chromium/chrome/browser/resources/settings/internet_page/internet_config.html b/chromium/chrome/browser/resources/settings/internet_page/internet_config.html index 4fa0a79d5e8..fce0c7e3d29 100644 --- a/chromium/chrome/browser/resources/settings/internet_page/internet_config.html +++ b/chromium/chrome/browser/resources/settings/internet_page/internet_config.html @@ -32,7 +32,7 @@ share-allow-enable="[[shareAllowEnable_]]" share-default="[[shareDefault_]]" error="{{error_}}" - on-close="close"> + on-close="onClose_"> </network-config> </div> @@ -40,17 +40,17 @@ <template is="dom-if" if="[[error_]]" restamp> <div class="flex error">[[getError_(error_)]]</div> </template> - <paper-button class="cancel-button" on-tap="onCancelTap_"> + <paper-button class="cancel-button" on-click="onCancelTap_"> $i18n{cancel} </paper-button> - <template is="dom-if" if="[[isConfigured_(networkProperties_, guid)]]"> - <paper-button class="action-button" on-tap="onSaveOrConnectTap_" + <template is="dom-if" if="[[!showConnect]]"> + <paper-button class="action-button" on-click="onSaveTap_" disabled="[[!enableSave_]]"> $i18n{save} </paper-button> </template> - <template is="dom-if" if="[[!isConfigured_(networkProperties_, guid)]]"> - <paper-button class="action-button" on-tap="onSaveOrConnectTap_" + <template is="dom-if" if="[[showConnect]]"> + <paper-button class="action-button" on-click="onConnectTap_" disabled="[[!enableConnect_]]"> $i18n{networkButtonConnect} </paper-button> diff --git a/chromium/chrome/browser/resources/settings/internet_page/internet_config.js b/chromium/chrome/browser/resources/settings/internet_page/internet_config.js index b6bda81171f..ba7c90de4ab 100644 --- a/chromium/chrome/browser/resources/settings/internet_page/internet_config.js +++ b/chromium/chrome/browser/resources/settings/internet_page/internet_config.js @@ -56,6 +56,12 @@ Polymer({ */ name: String, + /** + * Set to true to show the 'connect' button instead of 'save'. + * @private + */ + showConnect: Boolean, + /** @private */ enableConnect_: Boolean, @@ -103,6 +109,16 @@ Polymer({ }, /** + * @param {!Event} event + * @private + */ + onClose_: function(event) { + this.close(); + this.fire('networks-changed'); + event.stopPropagation(); + }, + + /** * @return {string} * @private */ @@ -124,22 +140,18 @@ Polymer({ return this.i18n('networkErrorUnknown'); }, - /** - * @return {boolean} - * @private - */ - isConfigured_: function() { - const source = this.networkProperties_.Source; - return !!this.guid && !!source && source != CrOnc.Source.NONE; - }, - /** @private */ onCancelTap_: function() { this.close(); }, /** @private */ - onSaveOrConnectTap_: function() { - this.$.networkConfig.saveOrConnect(); + onSaveTap_: function() { + this.$.networkConfig.save(); + }, + + /** @private */ + onConnectTap_: function() { + this.$.networkConfig.connect(); }, }); diff --git a/chromium/chrome/browser/resources/settings/internet_page/internet_detail_page.html b/chromium/chrome/browser/resources/settings/internet_page/internet_detail_page.html index e3afc520289..cbee01f9b6e 100644 --- a/chromium/chrome/browser/resources/settings/internet_page/internet_detail_page.html +++ b/chromium/chrome/browser/resources/settings/internet_page/internet_detail_page.html @@ -81,30 +81,30 @@ </template> </div> <template is="dom-if" if="[[!isSecondaryUser_]]"> - <paper-button on-tap="onForgetTap_" + <paper-button on-click="onForgetTap_" hidden$="[[!showForget_(networkProperties)]]"> $i18n{networkButtonForget} </paper-button> - <paper-button on-tap="onViewAccountTap_" + <paper-button on-click="onViewAccountTap_" hidden$="[[!showViewAccount_(networkProperties)]]"> $i18n{networkButtonViewAccount} </paper-button> - <paper-button on-tap="onActivateTap_" + <paper-button on-click="onActivateTap_" hidden$="[[!showActivate_(networkProperties)]]"> $i18n{networkButtonActivate} </paper-button> - <paper-button on-tap="onConfigureTap_" + <paper-button on-click="onConfigureTap_" hidden$="[[!showConfigure_(networkProperties, globalPolicy)]]"> $i18n{networkButtonConfigure} </paper-button> </template> - <paper-button class="primary-button" on-tap="onConnectTap_" + <paper-button class="primary-button" on-click="onConnectTap_" hidden$="[[!showConnect_(networkProperties, globalPolicy)]]" disabled="[[!enableConnect_(networkProperties, defaultNetwork, globalPolicy, networkPropertiesReceived_, outOfRange_)]]"> $i18n{networkButtonConnect} </paper-button> - <paper-button class="primary-button" on-tap="onDisconnectTap_" + <paper-button class="primary-button" on-click="onDisconnectTap_" hidden$="[[!showDisconnect_(networkProperties)]]"> $i18n{networkButtonDisconnect} </paper-button> @@ -203,7 +203,7 @@ <template is="dom-if" if="[[showAdvanced_(networkProperties)]]"> <!-- Advanced toggle. --> - <div class="settings-box" actionable on-tap="toggleAdvancedExpanded_"> + <div class="settings-box" actionable on-click="toggleAdvancedExpanded_"> <div class="flex">$i18n{networkSectionAdvanced}</div> <cr-expand-button expanded="{{advancedExpanded_}}" alt="$i18n{networkSectionAdvancedA11yLabel}"> @@ -232,7 +232,7 @@ <template is="dom-if" if="[[hasNetworkSection_(networkProperties)]]"> <!-- Network toggle --> - <div class="settings-box" actionable on-tap="toggleNetworkExpanded_"> + <div class="settings-box" actionable on-click="toggleNetworkExpanded_"> <div class="start">$i18n{networkSectionNetwork}</div> <cr-expand-button expanded="{{networkExpanded_}}" alt="$i18n{networkSectionNetworkExpandA11yLabel}"> @@ -274,7 +274,7 @@ <template is="dom-if" if="[[hasProxySection_(networkProperties)]]"> <!-- Proxy toggle --> - <div class="settings-box" actionable on-tap="toggleProxyExpanded_"> + <div class="settings-box" actionable on-click="toggleProxyExpanded_"> <div class="start">$i18n{networkSectionProxy}</div> <cr-expand-button expanded="{{proxyExpanded_}}" alt="$i18n{networkSectionProxyExpandA11yLabel}"> diff --git a/chromium/chrome/browser/resources/settings/internet_page/internet_detail_page.js b/chromium/chrome/browser/resources/settings/internet_page/internet_detail_page.js index b8c3480ddcd..c21b36319f5 100644 --- a/chromium/chrome/browser/resources/settings/internet_page/internet_detail_page.js +++ b/chromium/chrome/browser/resources/settings/internet_page/internet_detail_page.js @@ -630,7 +630,6 @@ Polymer({ this.showTetherDialog_(); return; } - this.fire('network-connect', {networkProperties: this.networkProperties}); }, diff --git a/chromium/chrome/browser/resources/settings/internet_page/internet_known_networks_page.html b/chromium/chrome/browser/resources/settings/internet_page/internet_known_networks_page.html index 6d2f1357614..4466b23e664 100644 --- a/chromium/chrome/browser/resources/settings/internet_page/internet_known_networks_page.html +++ b/chromium/chrome/browser/resources/settings/internet_page/internet_known_networks_page.html @@ -36,12 +36,12 @@ </cr-policy-indicator> </template> <button class="subpage-arrow" is="paper-icon-button-light" - actionable on-tap="fireShowDetails_" tabindex$="[[tabindex]]" + actionable on-click="fireShowDetails_" tabindex$="[[tabindex]]" aria-label$="[[item.Name]]"> </button> <div class="separator"></div> <button is="paper-icon-button-light" class="icon-more-vert" - preferred tabindex$="[[tabindex]]" on-tap="onMenuButtonTap_" + preferred tabindex$="[[tabindex]]" on-click="onMenuButtonTap_" title="$i18n{moreActions}"> </button> </div> @@ -63,12 +63,12 @@ </cr-policy-indicator> </template> <button class="subpage-arrow" is="paper-icon-button-light" - actionable on-tap="fireShowDetails_" tabindex$="[[tabindex]]" + actionable on-click="fireShowDetails_" tabindex$="[[tabindex]]" aria-label$="[[item.Name]]"> </button> <div class="separator"></div> <button is="paper-icon-button-light" class="icon-more-vert" - tabindex$="[[tabindex]]" on-tap="onMenuButtonTap_" + tabindex$="[[tabindex]]" on-click="onMenuButtonTap_" title="$i18n{moreActions}"> </button> </div> @@ -76,16 +76,16 @@ </div> <dialog id="dotsMenu" is="cr-action-menu"> - <button class="dropdown-item" hidden="[[!showAddPreferred_]]" - on-tap="onAddPreferredTap_"> + <button slot="item" class="dropdown-item" hidden="[[!showAddPreferred_]]" + on-click="onAddPreferredTap_"> $i18n{knownNetworksMenuAddPreferred} </button> - <button class="dropdown-item" hidden="[[!showRemovePreferred_]]" - on-tap="onRemovePreferredTap_"> + <button slot="item" class="dropdown-item" + hidden="[[!showRemovePreferred_]]" on-click="onRemovePreferredTap_"> $i18n{knownNetworksMenuRemovePreferred} </button> - <button class="dropdown-item" disabled="[[!enableForget_]]" - on-tap="onForgetTap_"> + <button slot="item" class="dropdown-item" disabled="[[!enableForget_]]" + on-click="onForgetTap_"> $i18n{knownNetworksMenuForget} </button> </dialog> diff --git a/chromium/chrome/browser/resources/settings/internet_page/internet_page.html b/chromium/chrome/browser/resources/settings/internet_page/internet_page.html index cd6b2afbadb..0c7cf9c5c72 100644 --- a/chromium/chrome/browser/resources/settings/internet_page/internet_page.html +++ b/chromium/chrome/browser/resources/settings/internet_page/internet_page.html @@ -38,7 +38,7 @@ </network-summary> <template is="dom-if" if="[[allowAddConnection_(globalPolicy_)]]"> <div actionable class="settings-box two-line" - on-tap="onExpandAddConnectionsTap_"> + on-click="onExpandAddConnectionsTap_"> <div class="start layout horizontal center"> <div>$i18n{internetAddConnection}</div> </div> @@ -50,7 +50,7 @@ <div class="list-frame vertical-list"> <template is="dom-if" if="[[deviceIsEnabled_(deviceStates.WiFi)]]"> - <div actionable class="list-item" on-tap="onAddWiFiTap_"> + <div actionable class="list-item" on-click="onAddWiFiTap_"> <div class="start">$i18n{internetAddWiFi}</div> <button class$="[[getAddNetworkClass_('WiFi')]]" is="paper-icon-button-light" @@ -58,7 +58,7 @@ </button> </div> </template> - <div actionable class="list-item" on-tap="onAddVPNTap_"> + <div actionable class="list-item" on-click="onAddVPNTap_"> <div class="start">$i18n{internetAddVPN}</div> <button class$="[[getAddNetworkClass_('VPN')]]" is="paper-icon-button-light" @@ -67,7 +67,7 @@ </div> <template is="dom-repeat" items="[[thirdPartyVpnProviders_]]"> <div actionable class="list-item" - on-tap="onAddThirdPartyVpnTap_" provider="[[item]]"> + on-click="onAddThirdPartyVpnTap_" provider="[[item]]"> <div class="start">[[getAddThirdPartyVpnLabel_(item)]]</div> <button class="icon-external" is="paper-icon-button-light" aria-label$="[[getAddThirdPartyVpnLabel_(item)]]"> @@ -76,7 +76,7 @@ </template> <template is="dom-if" if="[[arcVpnProviders_.length]]"> <div actionable class="list-item" id="addArcVpn" - on-tap="onAddArcVpnTap_"> + on-click="onAddArcVpnTap_"> <div class="start">$i18n{internetAddArcVPN}</div> <button class="icon-external" is="paper-icon-button-light" aria-label$="$i18n{internetAddArcVPN}"> diff --git a/chromium/chrome/browser/resources/settings/internet_page/internet_page.js b/chromium/chrome/browser/resources/settings/internet_page/internet_page.js index 3b8126607c7..ed1eda816ef 100644 --- a/chromium/chrome/browser/resources/settings/internet_page/internet_page.js +++ b/chromium/chrome/browser/resources/settings/internet_page/internet_page.js @@ -272,27 +272,27 @@ Polymer({ */ onShowConfig_: function(event) { const properties = event.detail; + let configAndConnect = !properties.GUID; // New configuration this.showConfig_( - properties.Type, properties.GUID, CrOnc.getNetworkName(properties)); + configAndConnect, properties.Type, properties.GUID, + CrOnc.getNetworkName(properties)); }, /** + * @param {boolean} configAndConnect * @param {string} type * @param {string=} guid * @param {string=} name * @private */ - showConfig_: function(type, guid, name) { - if (!loadTimeData.getBoolean('networkSettingsConfig')) { - chrome.send('configureNetwork', [guid]); - return; - } + showConfig_: function(configAndConnect, type, guid, name) { const configDialog = /** @type {!InternetConfigElement} */ (this.$.configDialog); configDialog.type = /** @type {chrome.networkingPrivate.NetworkType} */ (type); configDialog.guid = guid || ''; configDialog.name = name || ''; + configDialog.showConnect = configAndConnect; configDialog.open(); }, @@ -369,7 +369,7 @@ Polymer({ }, /** - * Event triggered when the 'Add connections' div is tapped. + * Event triggered when the 'Add connections' div is clicked. * @param {!Event} event * @private */ @@ -382,7 +382,7 @@ Polymer({ /** @private */ onAddWiFiTap_: function() { if (loadTimeData.getBoolean('networkSettingsConfig')) - this.showConfig_(CrOnc.Type.WI_FI); + this.showConfig_(true /* configAndConnect */, CrOnc.Type.WI_FI); else chrome.send('addNetwork', [CrOnc.Type.WI_FI]); }, @@ -390,7 +390,7 @@ Polymer({ /** @private */ onAddVPNTap_: function() { if (loadTimeData.getBoolean('networkSettingsConfig')) - this.showConfig_(CrOnc.Type.VPN); + this.showConfig_(true /* configAndConnect */, CrOnc.Type.VPN); else chrome.send('addNetwork', [CrOnc.Type.VPN]); }, @@ -604,7 +604,8 @@ Polymer({ } if (properties.Connectable === false || properties.ErrorState) { - this.showConfig_(properties.Type, properties.GUID, name); + this.showConfig_( + true /* configAndConnect */, properties.Type, properties.GUID, name); return; } @@ -618,7 +619,9 @@ Polymer({ console.error( 'networkingPrivate.startConnect error: ' + message + ' For: ' + properties.GUID); - this.showConfig_(properties.Type, properties.GUID, name); + this.showConfig_( + true /* configAndConnect */, properties.Type, properties.GUID, + name); } }); }, diff --git a/chromium/chrome/browser/resources/settings/internet_page/internet_subpage.html b/chromium/chrome/browser/resources/settings/internet_page/internet_subpage.html index 3119ac4ec1c..ad9e3d48712 100644 --- a/chromium/chrome/browser/resources/settings/internet_page/internet_subpage.html +++ b/chromium/chrome/browser/resources/settings/internet_page/internet_subpage.html @@ -65,12 +65,12 @@ } #gmscore-notifications-device-string { - @apply(--cr-secondary-text); + @apply --cr-secondary-text; margin-top: 5px; } #gmscore-notifications-instructions { - @apply(--cr-secondary-text); + @apply --cr-secondary-text; -webkit-padding-start: 15px; margin: 0; } @@ -86,19 +86,19 @@ <button is="paper-icon-button-light" id="addButton" hidden$="[[!showAddButton_(deviceState, globalPolicy)]]" aria-label="$i18n{internetAddWiFi}" class="icon-add-wifi" - on-tap="onAddButtonTap_" tabindex$="[[tabindex]]"> + on-click="onAddButtonTap_" tabindex$="[[tabindex]]"> </button> <paper-toggle-button id="deviceEnabledButton" aria-label$="[[getToggleA11yString_(deviceState)]]" checked="[[deviceIsEnabled_(deviceState)]]" disabled="[[!enableToggleIsEnabled_(deviceState)]]" - on-tap="onDeviceEnabledTap_"> + on-click="onDeviceEnabledTap_"> </paper-toggle-button> </div> </template> <template is="dom-if" if="[[knownNetworksIsVisible_(deviceState)]]"> - <div actionable class="settings-box" on-tap="onKnownNetworksTap_"> + <div actionable class="settings-box" on-click="onKnownNetworksTap_"> <div class="start">$i18n{knownNetworksButton}</div> <button class="subpage-arrow" is="paper-icon-button-light" aria-label="$i18n{knownNetworksButton}"> @@ -114,7 +114,7 @@ <div class="flex">$i18n{networkVpnBuiltin}</div> <button is="paper-icon-button-light" class="icon-add-circle" aria-label="$i18n{internetAddVPN}" - on-tap="onAddButtonTap_" tabindex$="[[tabindex]]"> + on-click="onAddButtonTap_" tabindex$="[[tabindex]]"> </button> </div> </template> @@ -143,6 +143,7 @@ <li>$i18n{gmscoreNotificationsFirstStep}</li> <li>$i18n{gmscoreNotificationsSecondStep}</li> <li>$i18n{gmscoreNotificationsThirdStep}</li> + <li>$i18n{gmscoreNotificationsFourthStep}</li> </ol> </div> </template> @@ -165,7 +166,7 @@ <div class="flex">[[item.ProviderName]]</div> <button is="paper-icon-button-light" class="icon-add-circle" aria-label$="[[getAddThirdPartyVpnA11yString_(item)]]" - on-tap="onAddThirdPartyVpnTap_" tabindex$="[[tabindex]]"> + on-click="onAddThirdPartyVpnTap_" tabindex$="[[tabindex]]"> </button> </div> <cr-network-list show-buttons @@ -185,7 +186,7 @@ <div class="flex">[[item.ProviderName]]</div> <button is="paper-icon-button-light" class="icon-add-circle" aria-label$="[[getAddArcVpnAllyString_(item)]]" - on-tap="onAddArcVpnTap_" tabindex$="[[tabindex]]"> + on-click="onAddArcVpnTap_" tabindex$="[[tabindex]]"> </button> </div> <cr-network-list show-buttons @@ -204,7 +205,7 @@ <template is="dom-if" if="[[tetherToggleIsVisible_(deviceState, tetherDeviceState)]]"> <div class="settings-box two-line" actionable - on-tap="onTetherEnabledTap_"> + on-click="onTetherEnabledTap_"> <div class="start"> $i18n{internetToggleTetherLabel} <div id="tetherSecondary" class="secondary"> diff --git a/chromium/chrome/browser/resources/settings/internet_page/internet_subpage.js b/chromium/chrome/browser/resources/settings/internet_page/internet_subpage.js index 2d1c08ee297..c45566055aa 100644 --- a/chromium/chrome/browser/resources/settings/internet_page/internet_subpage.js +++ b/chromium/chrome/browser/resources/settings/internet_page/internet_subpage.js @@ -442,7 +442,7 @@ Polymer({ }, /** - * Event triggered when the known networks button is tapped. + * Event triggered when the known networks button is clicked. * @private */ onKnownNetworksTap_: function() { diff --git a/chromium/chrome/browser/resources/settings/internet_page/network_proxy_section.html b/chromium/chrome/browser/resources/settings/internet_page/network_proxy_section.html index f5d88e89c41..7aa2e646067 100644 --- a/chromium/chrome/browser/resources/settings/internet_page/network_proxy_section.html +++ b/chromium/chrome/browser/resources/settings/internet_page/network_proxy_section.html @@ -90,11 +90,11 @@ </div> <div slot="button-container"> <paper-button class="cancel-button" - on-tap="onAllowSharedDialogCancel_"> + on-click="onAllowSharedDialogCancel_"> $i18n{cancel} </paper-button> <paper-button class="action-button" - on-tap="onAllowSharedDialogConfirm_"> + on-click="onAllowSharedDialogConfirm_"> $i18n{confirm} </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/internet_page/network_summary_item.html b/chromium/chrome/browser/resources/settings/internet_page/network_summary_item.html index 812bf51fff9..2df92961938 100644 --- a/chromium/chrome/browser/resources/settings/internet_page/network_summary_item.html +++ b/chromium/chrome/browser/resources/settings/internet_page/network_summary_item.html @@ -34,7 +34,7 @@ font-weight: 400; } </style> - <div actionable class="settings-box two-line" on-tap="onShowDetailsTap_"> + <div actionable class="settings-box two-line" on-click="onShowDetailsTap_"> <div id="details" no-flex$="[[showSimInfo_(deviceState)]]"> <cr-network-icon network-state="[[activeNetworkState]]" device-state="[[deviceState]]"> @@ -48,7 +48,7 @@ </div> <template is="dom-if" if="[[showSimInfo_(deviceState)]]" restamp> - <network-siminfo editable on-tap="doNothing_" + <network-siminfo editable on-click="doNothing_" network-properties="[[getCellularState_(deviceState)]]" networking-private="[[networkingPrivate]]"> </network-siminfo> @@ -57,7 +57,7 @@ <template is="dom-if" if="[[showPolicyIndicator_(activeNetworkState)]]"> <cr-policy-indicator indicator-type="[[getIndicatorTypeForSource( activeNetworkState.Source)]]" - on-tap="doNothing_"> + on-click="doNothing_"> </cr-policy-indicator> </template> @@ -75,7 +75,7 @@ aria-label$="[[getToggleA11yString_(deviceState)]]" checked="[[deviceIsEnabled_(deviceState)]]" disabled="[[!enableToggleIsEnabled_(deviceState)]]" - on-tap="onDeviceEnabledTap_"> + on-click="onDeviceEnabledTap_"> </paper-toggle-button> </template> </div> diff --git a/chromium/chrome/browser/resources/settings/internet_page/network_summary_item.js b/chromium/chrome/browser/resources/settings/internet_page/network_summary_item.js index 65c882d595d..e7a54cb245a 100644 --- a/chromium/chrome/browser/resources/settings/internet_page/network_summary_item.js +++ b/chromium/chrome/browser/resources/settings/internet_page/network_summary_item.js @@ -68,10 +68,9 @@ Polymer({ * @private */ getNetworkStateText_: function(activeNetworkState, deviceState) { - const state = activeNetworkState.ConnectionState; - const name = CrOnc.getNetworkName(activeNetworkState); - if (state) - return this.getConnectionStateText_(state, name); + const stateText = this.getConnectionStateText_(activeNetworkState); + if (stateText) + return stateText; // No network state, use device state. if (deviceState) { // Type specific scanning or initialization states. @@ -98,12 +97,15 @@ Polymer({ }, /** - * @param {CrOnc.ConnectionState} state - * @param {string} name + * @param {!CrOnc.NetworkStateProperties} networkState * @return {string} * @private */ - getConnectionStateText_: function(state, name) { + getConnectionStateText_: function(networkState) { + const state = networkState.ConnectionState; + if (!state) + return ''; + const name = CrOnc.getNetworkName(networkState); switch (state) { case CrOnc.ConnectionState.CONNECTED: return name; @@ -112,6 +114,10 @@ Polymer({ return CrOncStrings.networkListItemConnectingTo.replace('$1', name); return CrOncStrings.networkListItemConnecting; case CrOnc.ConnectionState.NOT_CONNECTED: + if (networkState.Type == CrOnc.Type.CELLULAR && networkState.Cellular && + networkState.Cellular.Scanning) { + return this.i18n('internetMobileSearching'); + } return CrOncStrings.networkListItemNotConnected; } assertNotReached(); diff --git a/chromium/chrome/browser/resources/settings/internet_page/tether_connection_dialog.html b/chromium/chrome/browser/resources/settings/internet_page/tether_connection_dialog.html index 51e02e88fb0..c54c5c1186a 100644 --- a/chromium/chrome/browser/resources/settings/internet_page/tether_connection_dialog.html +++ b/chromium/chrome/browser/resources/settings/internet_page/tether_connection_dialog.html @@ -108,11 +108,11 @@ </ul> </div> <div slot="button-container"> - <paper-button class="cancel-button" on-tap="onNotNowTap_"> + <paper-button class="cancel-button" on-click="onNotNowTap_"> $i18n{tetherConnectionNotNowButton} </paper-button> <paper-button id="connectButton" class="action-button" - on-tap="onConnectTap_" disabled="[[outOfRange]]"> + on-click="onConnectTap_" disabled="[[outOfRange]]"> $i18n{tetherConnectionConnectButton} </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/languages_page/add_languages_dialog.html b/chromium/chrome/browser/resources/settings/languages_page/add_languages_dialog.html index 6a6a1512872..a3f6edd6f54 100644 --- a/chromium/chrome/browser/resources/settings/languages_page/add_languages_dialog.html +++ b/chromium/chrome/browser/resources/settings/languages_page/add_languages_dialog.html @@ -59,10 +59,10 @@ </iron-list> </div> <div slot="button-container"> - <paper-button class="cancel-button" on-tap="onCancelButtonTap_"> + <paper-button class="cancel-button" on-click="onCancelButtonTap_"> $i18n{cancel} </paper-button> - <paper-button class="action-button" on-tap="onActionButtonTap_" + <paper-button class="action-button" on-click="onActionButtonTap_" disabled="[[disableActionButton_]]"> $i18n{add} </paper-button> diff --git a/chromium/chrome/browser/resources/settings/languages_page/edit_dictionary_page.html b/chromium/chrome/browser/resources/settings/languages_page/edit_dictionary_page.html index d5d0912c66d..ce5c803d292 100644 --- a/chromium/chrome/browser/resources/settings/languages_page/edit_dictionary_page.html +++ b/chromium/chrome/browser/resources/settings/languages_page/edit_dictionary_page.html @@ -42,7 +42,7 @@ '$i18nPolymer{addDictionaryWordDuplicateError}', '$i18nPolymer{addDictionaryWordLengthError}')]]"></paper-input> </div> - <paper-button class="secondary-button" on-tap="onAddWordTap_" + <paper-button class="secondary-button" on-click="onAddWordTap_" disabled="[[disableAddButton_(newWordValue_)]]" id="addWord"> $i18n{addDictionaryWordButton} </paper-button> @@ -58,7 +58,7 @@ <div class="list-item"> <div class="word text-elide">[[item]]</div> <button is="paper-icon-button-light" class="icon-clear" - on-tap="onRemoveWordTap_" tabindex$="[[tabIndex]]"> + on-click="onRemoveWordTap_" tabindex$="[[tabIndex]]"> </button> </div> </template> diff --git a/chromium/chrome/browser/resources/settings/languages_page/languages_page.html b/chromium/chrome/browser/resources/settings/languages_page/languages_page.html index 608022db7bb..7b70201c2cb 100644 --- a/chromium/chrome/browser/resources/settings/languages_page/languages_page.html +++ b/chromium/chrome/browser/resources/settings/languages_page/languages_page.html @@ -84,7 +84,7 @@ focus-config="[[focusConfig_]]"> <neon-animatable route-path="default"> <div class$="settings-box first [[getLanguageListTwoLine_()]]" - actionable on-tap="toggleExpandButton_"> + actionable on-click="toggleExpandButton_"> <div class="start"> <div>$i18n{languagesListTitle}</div> <if expr="chromeos or is_win"> @@ -127,20 +127,20 @@ <if expr="chromeos or is_win"> <template is="dom-if" if="[[isRestartRequired_( item.language.code, languages.prospectiveUILanguage)]]"> - <paper-button on-tap="onRestartTap_"> + <paper-button on-click="onRestartTap_"> $i18n{restart} </paper-button> </template> </if> <button is="paper-icon-button-light" title="$i18n{moreActions}" - id="more-[[item.language.code]]" on-tap="onDotsTap_" + id="more-[[item.language.code]]" on-click="onDotsTap_" class="icon-more-vert"> </button> </div> </template> <div class="list-item"> <a is="action-link" class="list-button" id="addLanguages" - on-tap="onAddLanguagesTap_"> + on-click="onAddLanguagesTap_"> $i18n{addLanguages} </a> </div> @@ -153,7 +153,7 @@ <if expr="chromeos"> <div id="manageInputMethodsSubpageTrigger" class="settings-box two-line" actionable - on-tap="toggleExpandButton_"> + on-click="toggleExpandButton_"> <div class="start"> <div>$i18n{inputMethodsListTitle}</div> <div class="secondary"> @@ -171,7 +171,7 @@ items="[[languages.inputMethods.enabled]]"> <div class$="list-item [[getInputMethodItemClass_( item.id, languages.inputMethods.currentId)]]" - on-tap="onInputMethodTap_" on-keypress="onInputMethodTap_" + on-click="onInputMethodTap_" on-keypress="onInputMethodTap_" actionable tabindex="0"> <div class="start"> <div>[[item.displayName]]</div> @@ -182,12 +182,13 @@ </div> </div> <button class="icon-external" is="paper-icon-button-light" - on-tap="onInputMethodOptionsTap_" + on-click="onInputMethodOptionsTap_" hidden="[[!item.hasOptionsPage]]"> </button> </div> </template> - <div class="list-item" on-tap="onManageInputMethodsTap_" actionable> + <div class="list-item" on-click="onManageInputMethodsTap_" + actionable> <div class="start" id="manageInputMethods"> $i18n{manageInputMethods} </div> @@ -207,7 +208,7 @@ class$="settings-box [[getSpellCheckListTwoLine_( spellCheckSecondaryText_)]]" actionable$="[[!spellCheckDisabled_]]" - on-tap="toggleExpandButton_"> + on-click="toggleExpandButton_"> <div class="start"> <div>$i18n{spellCheckListTitle}</div> <div class="secondary">[[spellCheckSecondaryText_]]</div> @@ -230,7 +231,7 @@ <template is="dom-repeat" items="[[spellCheckLanguages_]]"> <div class="list-item"> <template is="dom-if" if="[[!item.isManaged]]"> - <div class="start" on-tap="onSpellCheckChange_" + <div class="start" on-click="onSpellCheckChange_" actionable$="[[item.language.supportsSpellcheck]]"> [[item.language.displayName]] </div> @@ -250,7 +251,7 @@ </template> </div> </template> - <div class="list-item" on-tap="onEditDictionaryTap_" actionable> + <div class="list-item" on-click="onEditDictionaryTap_" actionable> <div class="start" id="customSpelling"> $i18n{manageSpellCheck} </div> @@ -265,7 +266,8 @@ <dialog is="cr-action-menu" class$="[[getMenuClass_(prefs.translate.enabled.value)]]"> <if expr="chromeos or is_win"> - <paper-checkbox id="uiLanguageItem" class="dropdown-item" + <paper-checkbox id="uiLanguageItem" slot="item" + class="dropdown-item" checked="[[isProspectiveUILanguage_( detailLanguage_.language.code, languages.prospectiveUILanguage)]]" @@ -275,7 +277,8 @@ $i18n{displayInThisLanguage} </paper-checkbox> </if> - <paper-checkbox id="offerTranslations" class="dropdown-item" + <paper-checkbox id="offerTranslations" slot="item" + class="dropdown-item" checked="[[detailLanguage_.translateEnabled]]" on-change="onTranslateCheckboxChange_" hidden="[[!prefs.translate.enabled.value]]" @@ -283,26 +286,26 @@ detailLanguage_.language, languages.translateTarget)]]"> $i18n{offerToTranslateInThisLanguage} </paper-checkbox> - <hr> - <button class="dropdown-item" role="menuitem" - on-tap="onMoveToTopTap_" + <hr slot="item"> + <button slot="item" class="dropdown-item" role="menuitem" + on-click="onMoveToTopTap_" hidden="[[isNthLanguage_( 0, detailLanguage_, languages.enabled.*)]]"> $i18n{moveToTop} </button> - <button class="dropdown-item" role="menuitem" - on-tap="onMoveUpTap_" + <button slot="item" class="dropdown-item" role="menuitem" + on-click="onMoveUpTap_" hidden="[[!showMoveUp_(detailLanguage_, languages.enabled.*)]]"> $i18n{moveUp} </button> - <button class="dropdown-item" role="menuitem" - on-tap="onMoveDownTap_" + <button slot="item" class="dropdown-item" role="menuitem" + on-click="onMoveDownTap_" hidden="[[!showMoveDown_( detailLanguage_, languages.enabled.*)]]"> $i18n{moveDown} </button> - <button class="dropdown-item" role="menuitem" - on-tap="onRemoveLanguageTap_" + <button slot="item" class="dropdown-item" role="menuitem" + on-click="onRemoveLanguageTap_" hidden="[[!detailLanguage_.removable]]"> $i18n{removeLanguage} </button> diff --git a/chromium/chrome/browser/resources/settings/languages_page/languages_page.js b/chromium/chrome/browser/resources/settings/languages_page/languages_page.js index 43787f93abb..d9df072708b 100644 --- a/chromium/chrome/browser/resources/settings/languages_page/languages_page.js +++ b/chromium/chrome/browser/resources/settings/languages_page/languages_page.js @@ -116,11 +116,13 @@ Polymer({ }, }, + // <if expr="not is_macosx"> observers: [ 'updateSpellcheckLanguages_(languages.enabled.*, ' + 'languages.forcedSpellCheckLanguages.*)', 'updateSpellcheckEnabled_(prefs.browser.enable_spellchecking.*)', ], + // </if> /** * Stamps and opens the Add Languages dialog, registering a listener to @@ -628,7 +630,7 @@ Polymer({ /** * Closes the shared action menu after a short delay, so when a checkbox is - * tapped it can be seen to change state before disappearing. + * clicked it can be seen to change state before disappearing. * @private */ closeMenuSoon_: function() { diff --git a/chromium/chrome/browser/resources/settings/on_startup_page/on_startup_page.html b/chromium/chrome/browser/resources/settings/on_startup_page/on_startup_page.html index 40bfadfde9d..f4bdec1ade6 100644 --- a/chromium/chrome/browser/resources/settings/on_startup_page/on_startup_page.html +++ b/chromium/chrome/browser/resources/settings/on_startup_page/on_startup_page.html @@ -23,13 +23,11 @@ label="$i18n{onStartupOpenNewTab}" no-extension-indicator> </controlled-radio-button> - <template is="dom-if" if="[[showIndicator_( - ntpExtension_, prefs.session.restore_on_startup.value)]]"> + <template is="dom-if" if="[[ntpExtension_]]"> <extension-controlled-indicator extension-id="[[ntpExtension_.id]]" extension-name="[[ntpExtension_.name]]" - extension-can-be-disabled="[[ntpExtension_.canBeDisabled]]" - on-extension-disable="getNtpExtension_"> + extension-can-be-disabled="[[ntpExtension_.canBeDisabled]]"> </extension-controlled-indicator> </template> <controlled-radio-button name="[[prefValues_.CONTINUE]]" diff --git a/chromium/chrome/browser/resources/settings/on_startup_page/on_startup_page.js b/chromium/chrome/browser/resources/settings/on_startup_page/on_startup_page.js index 26484951dcf..aff7303d079 100644 --- a/chromium/chrome/browser/resources/settings/on_startup_page/on_startup_page.js +++ b/chromium/chrome/browser/resources/settings/on_startup_page/on_startup_page.js @@ -37,29 +37,13 @@ Polymer({ /** @override */ attached: function() { - this.getNtpExtension_(); - this.addWebUIListener('update-ntp-extension', ntpExtension => { + const updateNtpExtension = ntpExtension => { // Note that |ntpExtension| is empty if there is no NTP extension. this.ntpExtension_ = ntpExtension; - }); - }, - - /** @private */ - getNtpExtension_: function() { + }; settings.OnStartupBrowserProxyImpl.getInstance().getNtpExtension().then( - function(ntpExtension) { - this.ntpExtension_ = ntpExtension; - }.bind(this)); - }, - - /** - * @param {?NtpExtension} ntpExtension - * @param {number} restoreOnStartup Value of prefs.session.restore_on_startup. - * @return {boolean} - * @private - */ - showIndicator_: function(ntpExtension, restoreOnStartup) { - return !!ntpExtension && restoreOnStartup == this.prefValues_.OPEN_NEW_TAB; + updateNtpExtension); + this.addWebUIListener('update-ntp-extension', updateNtpExtension); }, /** diff --git a/chromium/chrome/browser/resources/settings/on_startup_page/startup_url_dialog.html b/chromium/chrome/browser/resources/settings/on_startup_page/startup_url_dialog.html index d2139335785..313bdf7aba0 100644 --- a/chromium/chrome/browser/resources/settings/on_startup_page/startup_url_dialog.html +++ b/chromium/chrome/browser/resources/settings/on_startup_page/startup_url_dialog.html @@ -21,10 +21,10 @@ </paper-input> </div> <div slot="button-container"> - <paper-button class="cancel-button" on-tap="onCancelTap_" + <paper-button class="cancel-button" on-click="onCancelTap_" id="cancel">$i18n{cancel}</paper-button> <paper-button id="actionButton" class="action-button" - on-tap="onActionButtonTap_">[[actionButtonText_]]</paper-button> + on-click="onActionButtonTap_">[[actionButtonText_]]</paper-button> </div> </dialog> </template> diff --git a/chromium/chrome/browser/resources/settings/on_startup_page/startup_url_entry.html b/chromium/chrome/browser/resources/settings/on_startup_page/startup_url_entry.html index cf1a7a9cf81..99699c9a021 100644 --- a/chromium/chrome/browser/resources/settings/on_startup_page/startup_url_entry.html +++ b/chromium/chrome/browser/resources/settings/on_startup_page/startup_url_entry.html @@ -25,16 +25,17 @@ <div class="text-elide secondary">[[model.url]]</div> </div> <template is="dom-if" if="[[editable]]"> - <button is="paper-icon-button-light" id="dots" on-tap="onDotsTap_" + <button is="paper-icon-button-light" id="dots" on-click="onDotsTap_" title="$i18n{moreActions}" focus-row-control focus-type="menu" class="icon-more-vert"> </button> <template is="cr-lazy-render" id="menu"> <dialog is="cr-action-menu"> - <button class="dropdown-item" on-tap="onEditTap_"> + <button slot="item" class="dropdown-item" on-click="onEditTap_"> $i18n{edit} </button> - <button class="dropdown-item" id="remove" on-tap="onRemoveTap_"> + <button slot="item" class="dropdown-item" id="remove" + on-click="onRemoveTap_"> $i18n{onStartupRemove} </button> </dialog> diff --git a/chromium/chrome/browser/resources/settings/on_startup_page/startup_url_entry.js b/chromium/chrome/browser/resources/settings/on_startup_page/startup_url_entry.js index 8c4460dc865..dd6ac50a045 100644 --- a/chromium/chrome/browser/resources/settings/on_startup_page/startup_url_entry.js +++ b/chromium/chrome/browser/resources/settings/on_startup_page/startup_url_entry.js @@ -12,7 +12,7 @@ cr.exportPath('settings'); /** * The name of the event fired from this element when the "Edit" option is - * tapped. + * clicked. * @type {string} */ settings.EDIT_STARTUP_URL_EVENT = 'edit-startup-url'; diff --git a/chromium/chrome/browser/resources/settings/on_startup_page/startup_urls_page.html b/chromium/chrome/browser/resources/settings/on_startup_page/startup_urls_page.html index 02b87b2093a..93cd7cd0c94 100644 --- a/chromium/chrome/browser/resources/settings/on_startup_page/startup_urls_page.html +++ b/chromium/chrome/browser/resources/settings/on_startup_page/startup_urls_page.html @@ -18,7 +18,7 @@ <template> <style include="settings-shared action-link iron-flex"> .list-frame { - @apply(--settings-list-frame-padding); + @apply --settings-list-frame-padding; } .list-frame > div { @@ -26,7 +26,7 @@ } #outer { - @apply(--settings-list-frame-padding); + @apply --settings-list-frame-padding; max-height: 355px; /** Enough height to show six entries. */ } @@ -53,13 +53,13 @@ <template is="dom-if" if="[[shouldAllowUrlsEdit_( prefs.session.startup_urls.enforcement)]]" restamp> <div class="list-item" id="addPage"> - <a is="action-link" class="list-button" on-tap="onAddPageTap_"> + <a is="action-link" class="list-button" on-click="onAddPageTap_"> $i18n{onStartupAddNewPage} </a> </div> <div class="list-item" id="useCurrentPages"> <a is="action-link" class="list-button" - on-tap="onUseCurrentPagesTap_"> + on-click="onUseCurrentPagesTap_"> $i18n{onStartupUseCurrent} </a> </div> diff --git a/chromium/chrome/browser/resources/settings/passwords_and_forms_page/address_edit_dialog.html b/chromium/chrome/browser/resources/settings/passwords_and_forms_page/address_edit_dialog.html index 37c189b5231..8d6515df3a8 100644 --- a/chromium/chrome/browser/resources/settings/passwords_and_forms_page/address_edit_dialog.html +++ b/chromium/chrome/browser/resources/settings/passwords_and_forms_page/address_edit_dialog.html @@ -51,7 +51,7 @@ transform: scale(0.75); transform-origin: left; width: 133%; - @apply(--paper-input-container-label-floating); + @apply --paper-input-container-label-floating; } :host-context([dir=rtl]) #select-label { @@ -144,11 +144,11 @@ </div> <div slot="button-container"> <paper-button id="cancelButton" class="cancel-button" - on-tap="onCancelTap_"> + on-click="onCancelTap_"> $i18n{cancel} </paper-button> <paper-button id="saveButton" class="action-button" - disabled="[[!canSave_]]" on-tap="onSaveButtonTap_"> + disabled="[[!canSave_]]" on-click="onSaveButtonTap_"> $i18n{save} </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/passwords_and_forms_page/autofill_section.html b/chromium/chrome/browser/resources/settings/passwords_and_forms_page/autofill_section.html index 4da90c016dc..e5193b1a7d1 100644 --- a/chromium/chrome/browser/resources/settings/passwords_and_forms_page/autofill_section.html +++ b/chromium/chrome/browser/resources/settings/passwords_and_forms_page/autofill_section.html @@ -65,9 +65,9 @@ } </style> <settings-toggle-button id="autofillToggle" - class="first primary-toggle" + class="first" aria-label="$i18n{autofill}" no-extension-indicator - label="[[getOnOffLabel_(prefs.autofill.enabled.value)]]" + label="$i18n{autofillFormsLabel}" pref="{{prefs.autofill.enabled}}"> </settings-toggle-button> <template is="dom-if" if="[[prefs.autofill.enabled.extensionId]]"> @@ -85,7 +85,7 @@ <h2 class="start">$i18n{addresses}</h2> <paper-button id="addAddress" class="secondary-button header-aligned-button" - on-tap="onAddAddressTap_"> + on-click="onAddAddressTap_"> $i18n{add} </paper-button> </div> @@ -108,13 +108,13 @@ </div> <template is="dom-if" if="[[item.metadata.isLocal]]"> <button is="paper-icon-button-light" id="addressMenu" - class="icon-more-vert" on-tap="onAddressMenuTap_" + class="icon-more-vert" on-click="onAddressMenuTap_" title="$i18n{moreActions}"> </button> </template> <template is="dom-if" if="[[!item.metadata.isLocal]]"> <button is="paper-icon-button-light" class="icon-external" - on-tap="onRemoteEditAddressTap_" actionable></button> + on-click="onRemoteEditAddressTap_" actionable></button> </template> </div> </template> @@ -125,10 +125,10 @@ </div> </div> <dialog is="cr-action-menu" id="addressSharedMenu"> - <button id="menuEditAddress" class="dropdown-item" - on-tap="onMenuEditAddressTap_">$i18n{edit}</button> - <button id="menuRemoveAddress" class="dropdown-item" - on-tap="onMenuRemoveAddressTap_">$i18n{removeAddress}</button> + <button id="menuEditAddress" slot="item" class="dropdown-item" + on-click="onMenuEditAddressTap_">$i18n{edit}</button> + <button id="menuRemoveAddress" slot="item" class="dropdown-item" + on-click="onMenuRemoveAddressTap_">$i18n{removeAddress}</button> </dialog> <template is="dom-if" if="[[showAddressDialog_]]" restamp> <settings-address-edit-dialog address="[[activeAddress]]" @@ -139,7 +139,7 @@ <h2 class="start">$i18n{creditCards}</h2> <paper-button id="addCreditCard" class="secondary-button header-aligned-button" - on-tap="onAddCreditCardTap_" + on-click="onAddCreditCardTap_" hidden$="[[isDisabled_(prefs.autofill.credit_card_enabled)]]"> $i18n{add} </paper-button> @@ -173,13 +173,13 @@ <template is="dom-if" if="[[showDots_(item.metadata)]]"> <button is="paper-icon-button-light" id="creditCardMenu" class="icon-more-vert" title="$i18n{moreActions}" - on-tap="onCreditCardMenuTap_"> + on-click="onCreditCardMenuTap_"> </button> </template> <template is="dom-if" if="[[!showDots_(item.metadata)]]"> <button is="paper-icon-button-light" id="remoteCreditCardLink" class="icon-external" - on-tap="onRemoteEditCreditCardTap_" actionable></button> + on-click="onRemoteEditCreditCardTap_" actionable></button> </template> </div> </div> @@ -198,13 +198,13 @@ </div> </div> <dialog is="cr-action-menu" id="creditCardSharedMenu"> - <button id="menuEditCreditCard" class="dropdown-item" - on-tap="onMenuEditCreditCardTap_">$i18n{edit}</button> - <button id="menuRemoveCreditCard" class="dropdown-item" + <button id="menuEditCreditCard" slot="item" class="dropdown-item" + on-click="onMenuEditCreditCardTap_">$i18n{edit}</button> + <button id="menuRemoveCreditCard" slot="item" class="dropdown-item" hidden$="[[!activeCreditCard.metadata.isLocal]]" - on-tap="onMenuRemoveCreditCardTap_">$i18n{removeCreditCard}</button> - <button id="menuClearCreditCard" class="dropdown-item" - on-tap="onMenuClearCreditCardTap_" + on-click="onMenuRemoveCreditCardTap_">$i18n{removeCreditCard}</button> + <button id="menuClearCreditCard" slot="item" class="dropdown-item" + on-click="onMenuClearCreditCardTap_" hidden$="[[!activeCreditCard.metadata.isCached]]"> $i18n{clearCreditCard} </button> diff --git a/chromium/chrome/browser/resources/settings/passwords_and_forms_page/credit_card_edit_dialog.html b/chromium/chrome/browser/resources/settings/passwords_and_forms_page/credit_card_edit_dialog.html index 041413545b9..6465c600227 100644 --- a/chromium/chrome/browser/resources/settings/passwords_and_forms_page/credit_card_edit_dialog.html +++ b/chromium/chrome/browser/resources/settings/passwords_and_forms_page/credit_card_edit_dialog.html @@ -89,9 +89,9 @@ </div> <div slot="button-container"> <paper-button id="cancelButton" class="cancel-button" - on-tap="onCancelButtonTap_">$i18n{cancel}</paper-button> + on-click="onCancelButtonTap_">$i18n{cancel}</paper-button> <paper-button id="saveButton" class="action-button" - on-tap="onSaveButtonTap_" disabled>$i18n{save}</paper-button> + on-click="onSaveButtonTap_" disabled>$i18n{save}</paper-button> </div> </dialog> </template> diff --git a/chromium/chrome/browser/resources/settings/passwords_and_forms_page/password_edit_dialog.html b/chromium/chrome/browser/resources/settings/passwords_and_forms_page/password_edit_dialog.html index 0a0814697a6..ae402835da2 100644 --- a/chromium/chrome/browser/resources/settings/passwords_and_forms_page/password_edit_dialog.html +++ b/chromium/chrome/browser/resources/settings/passwords_and_forms_page/password_edit_dialog.html @@ -22,7 +22,7 @@ }; --paper-input-container-label-focus: { - color: var(--paper-input-container-color, --secondary-text-color); + color: var(--secondary-text-color); }; } @@ -61,15 +61,15 @@ <button is="paper-icon-button-light" id="showPasswordButton" class$="[[getIconClass_(item.password)]]" hidden$="[[item.entry.federationText]]" - on-tap="onShowPasswordButtonTap_" + on-click="onShowPasswordButtonTap_" title="[[showPasswordTitle_(item.password, '$i18nPolymer{hidePassword}','$i18nPolymer{showPassword}')]]"> </button> </div> </div> <div slot="button-container"> - <paper-button class="action-button" on-tap="onActionButtonTap_"> - $i18n{passwordsDone} + <paper-button class="action-button" on-click="onActionButtonTap_"> + $i18n{done} </paper-button> </div> </dialog> diff --git a/chromium/chrome/browser/resources/settings/passwords_and_forms_page/password_list_item.html b/chromium/chrome/browser/resources/settings/passwords_and_forms_page/password_list_item.html index 85dda982896..59f3d8a1e3c 100644 --- a/chromium/chrome/browser/resources/settings/passwords_and_forms_page/password_list_item.html +++ b/chromium/chrome/browser/resources/settings/passwords_and_forms_page/password_list_item.html @@ -48,12 +48,12 @@ <template is="dom-if" if="[[!item.entry.federationText]]"> <input id="password" aria-label=$i18n{editPasswordPasswordLabel} type="[[getPasswordInputType_(item.password)]]" - on-tap="onReadonlyInputTap_" class="password-field" readonly + on-click="onReadonlyInputTap_" class="password-field" readonly disabled$="[[!item.password]]" value="[[getPassword_(item.password)]]"> <button is="paper-icon-button-light" id="showPasswordButton" class$="[[getIconClass_(item.password)]]" - on-tap="onShowPasswordButtonTap_" + on-click="onShowPasswordButtonTap_" title="[[showPasswordTitle_(item.password, '$i18nPolymer{hidePassword}','$i18nPolymer{showPassword}')]]" focus-row-control focus-type="showPassword"> @@ -66,7 +66,7 @@ </template> </div> <button is="paper-icon-button-light" id="passwordMenu" - class="icon-more-vert" on-tap="onPasswordMenuTap_" + class="icon-more-vert" on-click="onPasswordMenuTap_" title="$i18n{moreActions}" focus-row-control focus-type="passwordMenu"> </button> diff --git a/chromium/chrome/browser/resources/settings/passwords_and_forms_page/passwords_and_forms_page.html b/chromium/chrome/browser/resources/settings/passwords_and_forms_page/passwords_and_forms_page.html index 55dd3fd8ed6..a994bde577f 100644 --- a/chromium/chrome/browser/resources/settings/passwords_and_forms_page/passwords_and_forms_page.html +++ b/chromium/chrome/browser/resources/settings/passwords_and_forms_page/passwords_and_forms_page.html @@ -25,10 +25,10 @@ <neon-animatable route-path="default"> <button is="cr-link-row" icon-class="subpage-arrow" id="autofillManagerButton" label="$i18n{autofill}" - sub-label="$i18n{autofillDetail}" on-tap="onAutofillTap_"> + sub-label="$i18n{autofillDetail}" on-click="onAutofillTap_"> </button> <div class="settings-box two-line"> - <div class="start two-line" on-tap="onPasswordsTap_" actionable + <div class="start two-line" on-click="onPasswordsTap_" actionable id="passwordManagerButton"> <div class="flex"> $i18n{passwords} diff --git a/chromium/chrome/browser/resources/settings/passwords_and_forms_page/passwords_export_dialog.html b/chromium/chrome/browser/resources/settings/passwords_and_forms_page/passwords_export_dialog.html index 9353ae7e5fd..2cfe136b936 100644 --- a/chromium/chrome/browser/resources/settings/passwords_and_forms_page/passwords_export_dialog.html +++ b/chromium/chrome/browser/resources/settings/passwords_and_forms_page/passwords_export_dialog.html @@ -8,8 +8,15 @@ <dom-module id="passwords-export-dialog"> <template> <style include="settings-shared iron-flex"> + paper-progress { + width: 100%; + --paper-progress-active-color: var(--google-blue-500); + } + .action-button { + -webkit-margin-start: 8px; + } </style> - <dialog is="cr-dialog" id="dialog" close-text="$i18n{close}"> + <dialog is="cr-dialog" id="dialog_start" close-text="$i18n{close}"> <div slot="title">$i18n{exportPasswordsTitle}</div> <div slot="body"> <div class="layout horizontal center"> @@ -18,15 +25,51 @@ </div> <div slot="button-container"> <paper-button class="secondary-button header-aligned-button" - on-tap="onCancelButtonTap_"> + on-click="onCancelButtonTap_" id="cancelButton"> $i18n{cancel} </paper-button> <paper-button class="action-button header-aligned-button" - on-tap="onExportTap_" id="exportPasswordsButton"> + on-click="onExportTap_" id="exportPasswordsButton"> $i18n{exportPasswords} </paper-button> </div> </dialog> + + <dialog is="cr-dialog" id="dialog_progress" no-cancel="true"> + <div slot="title">$i18n{exportingPasswordsTitle}</div> + <div slot="body"> + <paper-progress indeterminate class="blue"></paper-progress> + </div> + <div slot="button-container"> + <paper-button id="cancel_progress_button" + class="secondary-button header-aligned-button" + on-click="onCancelProgressButtonTap_"> + $i18n{cancel} + </paper-button> + </div> + </dialog> + + <dialog is="cr-dialog" id="dialog_error" close-text="$i18n{close}"> + <div slot="title">[[exportErrorMessage]]</div> + <div slot="body"> + $i18n{exportPasswordsFailTips} + <ul> + <li>$i18n{exportPasswordsFailTipsEnoughSpace}</li> + <li>$i18n{exportPasswordsFailTipsAnotherFolder}</li> + </ul> + </div> + <div slot="button-container"> + <paper-button class="secondary-button header-aligned-button" + on-click="onCancelButtonTap_" id="cancelErrorButton"> + $i18n{cancel} + </paper-button> + <paper-button class="action-button header-aligned-button" + on-click="onExportTap_" id="tryAgainButton"> + $i18n{exportPasswordsTryAgain} + </paper-button> + </div> + </dialog> + </template> <script src="passwords_export_dialog.js"></script> -</dom-module>
\ No newline at end of file +</dom-module> diff --git a/chromium/chrome/browser/resources/settings/passwords_and_forms_page/passwords_export_dialog.js b/chromium/chrome/browser/resources/settings/passwords_and_forms_page/passwords_export_dialog.js index da06563ff1c..737b3f504e4 100644 --- a/chromium/chrome/browser/resources/settings/passwords_and_forms_page/passwords_export_dialog.js +++ b/chromium/chrome/browser/resources/settings/passwords_and_forms_page/passwords_export_dialog.js @@ -10,9 +10,43 @@ (function() { 'use strict'; +/** + * The states of the export passwords dialog. + * @enum {string} + */ +const States = { + START: 'START', + IN_PROGRESS: 'IN_PROGRESS', + ERROR: 'ERROR', +}; + +const ProgressStatus = chrome.passwordsPrivate.ExportProgressStatus; + +/** + * The amount of time (ms) between the start of the export and the moment we + * start showing the progress bar. + * @type {number} + */ +const progressBarDelayMs = 100; + +/** + * The minimum amount of time (ms) that the progress bar will be visible. + * @type {number} + */ +const progressBarBlockMs = 1000; + Polymer({ is: 'passwords-export-dialog', + behaviors: [I18nBehavior], + + properties: { + /** The error that occurred while exporting. */ + exportErrorMessage: String, + }, + + listeners: {'cancel': 'close'}, + /** * The interface for callbacks to the browser. * Defined in passwords_section.js @@ -21,16 +55,114 @@ Polymer({ */ passwordManager_: null, + /** @private {function(!PasswordManager.PasswordExportProgress):void} */ + onPasswordsFileExportProgressListener_: null, + + /** + * The task that will display the progress bar, if the export doesn't finish + * quickly. This is null, unless the task is currently scheduled. + * @private {?number} + */ + progressTaskToken_: null, + + /** + * The task that will display the completion of the export, if any. We display + * the progress bar for at least |progressBarBlockMs|, therefore, if export + * finishes earlier, we cache the result in |delayedProgress_| and this task + * will consume it. This is null, unless the task is currently scheduled. + * @private {?number} + */ + delayedCompletionToken_: null, + + /** + * We display the progress bar for at least |progressBarBlockMs|. If progress + * is achieved earlier, we store the update here and consume it later. + * @private {?PasswordManager.PasswordExportProgress} + */ + delayedProgress_: null, + /** @override */ attached: function() { - this.$.dialog.showModal(); - this.passwordManager_ = PasswordManagerImpl.getInstance(); + + this.switchToDialog_(States.START); + + this.onPasswordsFileExportProgressListener_ = + this.onPasswordsFileExportProgress_.bind(this); + + // If export started on a different tab and is still in progress, display a + // busy UI. + this.passwordManager_.requestExportProgressStatus(status => { + if (status == ProgressStatus.IN_PROGRESS) + this.switchToDialog_(States.IN_PROGRESS); + }); + + this.passwordManager_.addPasswordsFileExportProgressListener( + this.onPasswordsFileExportProgressListener_); + }, + + /** + * Handles an export progress event by changing the visible dialog or caching + * the event for later consumption. + * @param {!PasswordManager.PasswordExportProgress} progress + * @private + */ + onPasswordsFileExportProgress_(progress) { + // If Chrome has already started displaying the progress bar + // (|progressTaskToken_ is null) and hasn't completed its minimum display + // time (|delayedCompletionToken_| is not null) progress should be cached + // for consumption when the blocking time ends. + const progressBlocked = + !this.progressTaskToken_ && !!this.delayedCompletionToken_; + if (!progressBlocked) { + clearTimeout(this.progressTaskToken_); + this.progressTaskToken_ = null; + this.processProgress_(progress); + } else { + this.delayedProgress_ = progress; + } + }, + + /** + * Displays the progress bar and suspends further UI updates for + * |progressBarBlockMs|. + * @private + */ + progressTask_() { + this.progressTaskToken_ = null; + this.switchToDialog_(States.IN_PROGRESS); + + this.delayedCompletionToken_ = + setTimeout(this.delayedCompletionTask_.bind(this), progressBarBlockMs); + }, + + /** + * Unblocks progress after showing the progress bar for |progressBarBlock|ms + * and processes any progress that was delayed. + * @private + */ + delayedCompletionTask_() { + this.delayedCompletionToken_ = null; + if (this.delayedProgress_) { + this.processProgress_(this.delayedProgress_); + this.delayedProgress_ = null; + } }, /** Closes the dialog. */ close: function() { - this.$.dialog.close(); + clearTimeout(this.progressTaskToken_); + clearTimeout(this.delayedCompletionToken_); + this.progressTaskToken_ = null; + this.delayedCompletionToken_ = null; + this.passwordManager_.removePasswordsFileExportProgressListener( + this.onPasswordsFileExportProgressListener_); + if (this.$.dialog_start.open) + this.$.dialog_start.close(); + if (this.$.dialog_progress.open) + this.$.dialog_progress.close(); + if (this.$.dialog_error.open) + this.$.dialog_error.close(); }, /** @@ -38,7 +170,56 @@ Polymer({ * @private */ onExportTap_: function() { - this.passwordManager_.exportPasswords(); + this.passwordManager_.exportPasswords(() => { + if (chrome.runtime.lastError && + chrome.runtime.lastError.message == 'in-progress') { + // Exporting was started by a different call to exportPasswords() and is + // is still in progress. This UI needs to be updated to the current + // status. + this.switchToDialog_(States.IN_PROGRESS); + } + }); + }, + + /** + * Prepares and displays the appropriate view (with delay, if necessary). + * @param {!PasswordManager.PasswordExportProgress} progress + * @private + */ + processProgress_(progress) { + if (progress.status == ProgressStatus.IN_PROGRESS) { + this.progressTaskToken_ = + setTimeout(this.progressTask_.bind(this), progressBarDelayMs); + return; + } + if (progress.status == ProgressStatus.SUCCEEDED) { + this.close(); + return; + } + if (progress.status == ProgressStatus.FAILED_WRITE_FAILED) { + this.exportErrorMessage = + this.i18n('exportPasswordsFailTitle', progress.folderName); + this.switchToDialog_(States.ERROR); + return; + } + }, + + /** + * Opens the specified dialog and hides the others. + * @param {!States} state the dialog to open. + * @private + */ + switchToDialog_(state) { + this.$.dialog_start.open = false; + this.$.dialog_error.open = false; + this.$.dialog_progress.open = false; + + if (state == States.START) + this.$.dialog_start.showModal(); + if (state == States.ERROR) + this.$.dialog_error.showModal(); + if (state == States.IN_PROGRESS) + this.$.dialog_progress.showModal(); }, /** @@ -48,5 +229,15 @@ Polymer({ onCancelButtonTap_: function() { this.close(); }, + + /** + * Handler for tapping the 'cancel' button on the progress dialog. It should + * cancel the export and dismiss the dialog. + * @private + */ + onCancelProgressButtonTap_: function() { + this.passwordManager_.cancelExportPasswords(); + this.close(); + }, }); })();
\ No newline at end of file diff --git a/chromium/chrome/browser/resources/settings/passwords_and_forms_page/passwords_section.html b/chromium/chrome/browser/resources/settings/passwords_and_forms_page/passwords_section.html index 4b47e458f25..956780bb648 100644 --- a/chromium/chrome/browser/resources/settings/passwords_and_forms_page/passwords_section.html +++ b/chromium/chrome/browser/resources/settings/passwords_and_forms_page/passwords_section.html @@ -52,12 +52,16 @@ #undoToast { z-index: 1; - } + } + + #exportImportMenuButton { + -webkit-margin-end: 0; + } </style> <settings-toggle-button id="passwordToggle" - class="first primary-toggle" + class="first" aria-label="$i18n{passwords}" no-extension-indicator - label="[[getOnOffLabel_(prefs.credentials_enable_service.value)]]" + label="$i18n{passwordsSavePasswordsLabel}" pref="{{prefs.credentials_enable_service}}"> </settings-toggle-button> <template is="dom-if" @@ -89,7 +93,7 @@ if="[[showImportOrExportPasswords_( showExportPasswords_, showImportPasswords_)]]"> <button is="paper-icon-button-light" id="exportImportMenuButton" - class="icon-more-vert" on-tap="onImportExportMenuTap_" + class="icon-more-vert" on-click="onImportExportMenuTap_" title="$i18n{moreActions}" focus-type="exportImportMenuButton"> </button> </template> @@ -122,20 +126,20 @@ </div> </div> <dialog is="cr-action-menu" id="menu"> - <button id="menuEditPassword" class="dropdown-item" - on-tap="onMenuEditPasswordTap_">$i18n{passwordViewDetails}</button> - <button id="menuRemovePassword" class="dropdown-item" - on-tap="onMenuRemovePasswordTap_">$i18n{removePassword}</button> + <button id="menuEditPassword" slot="item" class="dropdown-item" + on-click="onMenuEditPasswordTap_">$i18n{passwordViewDetails}</button> + <button id="menuRemovePassword" slot="item" class="dropdown-item" + on-click="onMenuRemovePasswordTap_">$i18n{removePassword}</button> </dialog> <dialog is="cr-action-menu" id="exportImportMenu"> - <template is="dom-if" if="[[showImportPasswords_]]"> - <button id="menuImportPassword" class="dropdown-item" - on-tap="onImportTap_">$i18n{import}</button> - </template> - <template is="dom-if" if="[[showExportPasswords_]]"> - <button id="menuExportPassword" class="dropdown-item" - on-tap="onExportTap_">$i18n{export}</button> - </template> + <button id="menuImportPassword" slot="item" class="dropdown-item" + on-click="onImportTap_" hidden="[[!showImportPasswords_]]"> + $i18n{import} + </button> + <button id="menuExportPassword" slot="item" class="dropdown-item" + on-click="onExportTap_" hidden="[[!showExportPasswords_]]"> + $i18n{exportMenuItem} + </button> </dialog> <template is="dom-if" if="[[showPasswordsExportDialog_]]" restamp> <passwords-export-dialog on-close="onPasswordsExportDialogClosed_"> @@ -148,7 +152,7 @@ </template> <cr-toast id="undoToast" duration="[[toastDuration_]]"> <div id="undoLabel">$i18n{passwordDeleted}</div> - <paper-button id="undoButton" on-tap="onUndoButtonTap_"> + <paper-button id="undoButton" on-click="onUndoButtonTap_"> $i18n{undoRemovePassword} </paper-button> </cr-toast> @@ -165,7 +169,7 @@ </a> </div> <button is="paper-icon-button-light" id="removeExceptionButton" - class="icon-clear" on-tap="onRemoveExceptionButtonTap_" + class="icon-clear" on-click="onRemoveExceptionButtonTap_" tabindex$="[[tabIndex]]" title="$i18n{deletePasswordException}"> </button> diff --git a/chromium/chrome/browser/resources/settings/passwords_and_forms_page/passwords_section.js b/chromium/chrome/browser/resources/settings/passwords_and_forms_page/passwords_section.js index d4f0f70ac06..33cb93e78a8 100644 --- a/chromium/chrome/browser/resources/settings/passwords_and_forms_page/passwords_section.js +++ b/chromium/chrome/browser/resources/settings/passwords_and_forms_page/passwords_section.js @@ -10,6 +10,8 @@ /** * Interface for all callbacks to the password API. + * TODO(crbug.com/802352) Move the PasswordManager proxy to a separate + * location. * @interface */ class PasswordManager { @@ -84,8 +86,32 @@ class PasswordManager { /** * Triggers the dialogue for exporting passwords. + * @param {function():void} callback */ - exportPasswords() {} + exportPasswords(callback) {} + + /** + * Cancels the ongoing export of passwords. + */ + cancelExportPasswords(callback) {} + + /** + * Queries the status of any ongoing export. + * @param {function(!PasswordManager.ExportProgressStatus):void} callback + */ + requestExportProgressStatus(callback) {} + + /** + * Add an observer to the export progress. + * @param {function(!PasswordManager.PasswordExportProgress):void} listener + */ + addPasswordsFileExportProgressListener(listener) {} + + /** + * Remove an observer from the export progress. + * @param {function(!PasswordManager.PasswordExportProgress):void} listener + */ + removePasswordsFileExportProgressListener(listener) {} } /** @typedef {chrome.passwordsPrivate.PasswordUiEntry} */ @@ -103,6 +129,12 @@ PasswordManager.PlaintextPasswordEvent; /** @typedef {{ entry: !PasswordManager.PasswordUiEntry, password: string }} */ PasswordManager.UiEntryWithPassword; +/** @typedef {chrome.passwordsPrivate.PasswordExportProgress} */ +PasswordManager.PasswordExportProgress; + +/** @typedef {chrome.passwordsPrivate.ExportProgressStatus} */ +PasswordManager.ExportProgressStatus; + /** * Implementation that accesses the private API. * @implements {PasswordManager} @@ -176,8 +208,29 @@ class PasswordManagerImpl { } /** @override */ - exportPasswords() { - chrome.passwordsPrivate.exportPasswords(); + exportPasswords(callback) { + chrome.passwordsPrivate.exportPasswords(callback); + } + + /** @override */ + cancelExportPasswords() { + chrome.passwordsPrivate.cancelExportPasswords(); + } + + /** @override */ + requestExportProgressStatus(callback) { + chrome.passwordsPrivate.requestExportProgressStatus(callback); + } + + /** @override */ + addPasswordsFileExportProgressListener(listener) { + chrome.passwordsPrivate.onPasswordsFileExportProgress.addListener(listener); + } + + /** @override */ + removePasswordsFileExportProgressListener(listener) { + chrome.passwordsPrivate.onPasswordsFileExportProgress.removeListener( + listener); } } @@ -251,10 +304,7 @@ Polymer({ /** @private */ showExportPasswords_: { type: Boolean, - value: function() { - return loadTimeData.valueExists('showExportPasswords') && - loadTimeData.getBoolean('showExportPasswords'); - } + computed: 'showExportPasswordsAndReady_(savedPasswords)' }, /** @private */ @@ -489,6 +539,7 @@ Polymer({ */ onImportTap_: function() { this.passwordManager_.importPasswords(); + this.$.exportImportMenu.close(); }, /** @@ -503,6 +554,8 @@ Polymer({ /** @private */ onPasswordsExportDialogClosed_: function() { this.showPasswordsExportDialog_ = false; + cr.ui.focusWithoutInk(assert(this.activeDialogAnchor_)); + this.activeDialogAnchor_ = null; }, /** @@ -538,6 +591,16 @@ Polymer({ /** * @private + * @param {!Array<!PasswordManager.PasswordUiEntry>} savedPasswords + */ + showExportPasswordsAndReady_: function(savedPasswords) { + return loadTimeData.valueExists('showExportPasswords') && + loadTimeData.getBoolean('showExportPasswords') && + savedPasswords.length > 0; + }, + + /** + * @private * @param {boolean} showExportPasswords * @param {boolean} showImportPasswords * @return {boolean} diff --git a/chromium/chrome/browser/resources/settings/people_page/change_picture.html b/chromium/chrome/browser/resources/settings/people_page/change_picture.html index 87ec0b1917d..f14495a8af7 100644 --- a/chromium/chrome/browser/resources/settings/people_page/change_picture.html +++ b/chromium/chrome/browser/resources/settings/people_page/change_picture.html @@ -106,7 +106,7 @@ choose-file-label="$i18n{chooseFile}" old-image-label="$i18n{oldPhoto}" profile-image-label="$i18n{profilePhoto}" - take-photo-label="$i18n{takePhoto}"> + take-photo-label="$i18n{takePhoto}" capture-video-label="$i18n{captureVideo}"> </cr-picture-list> </div> diff --git a/chromium/chrome/browser/resources/settings/people_page/change_picture.js b/chromium/chrome/browser/resources/settings/people_page/change_picture.js index 48eaa44ed61..eeca32878b8 100644 --- a/chromium/chrome/browser/resources/settings/people_page/change_picture.js +++ b/chromium/chrome/browser/resources/settings/people_page/change_picture.js @@ -81,6 +81,9 @@ Polymer({ /** @private {?CrPictureListElement} */ pictureList_: null, + /** @private {boolean} */ + oldImagePending_: false, + /** @override */ ready: function() { this.browserProxy_ = settings.ChangePictureBrowserProxyImpl.getInstance(); @@ -144,6 +147,7 @@ Polymer({ * @private */ receiveOldImage_: function(imageInfo) { + this.oldImagePending_ = false; this.pictureList_.setOldImageUrl(imageInfo.url, imageInfo.index); }, @@ -216,6 +220,7 @@ Polymer({ * @private */ onPhotoTaken_: function(event) { + this.oldImagePending_ = true; this.browserProxy_.photoTaken(event.detail.photoDataUrl); this.pictureList_.setOldImageUrl(event.detail.photoDataUrl); this.pictureList_.setFocus(); @@ -235,6 +240,9 @@ Polymer({ /** @private */ onDiscardImage_: function() { + // Prevent image from being discarded if old image is pending. + if (this.oldImagePending_) + return; this.pictureList_.setOldImageUrl(CrPicture.kDefaultImageUrl); // Revert to profile image as we don't know what last used default image is. this.browserProxy_.selectProfileImage(); diff --git a/chromium/chrome/browser/resources/settings/people_page/change_picture_browser_proxy.js b/chromium/chrome/browser/resources/settings/people_page/change_picture_browser_proxy.js index 7295e66f6a0..3cd333e51bd 100644 --- a/chromium/chrome/browser/resources/settings/people_page/change_picture_browser_proxy.js +++ b/chromium/chrome/browser/resources/settings/people_page/change_picture_browser_proxy.js @@ -51,8 +51,9 @@ cr.define('settings', function() { selectProfileImage() {} /** - * Provides the taken photo as a data URL to the C++. No response is - * expected. + * Provides the taken photo as a data URL to the C++ and sets the user + * image to the 'old' image. As a response, the C++ sends the + * 'old-image-changed' WebUIListener event. * @param {string} photoDataUrl */ photoTaken(photoDataUrl) {} diff --git a/chromium/chrome/browser/resources/settings/people_page/compiled_resources2.gyp b/chromium/chrome/browser/resources/settings/people_page/compiled_resources2.gyp index 3159cd12ca1..5c15adeb340 100644 --- a/chromium/chrome/browser/resources/settings/people_page/compiled_resources2.gyp +++ b/chromium/chrome/browser/resources/settings/people_page/compiled_resources2.gyp @@ -255,5 +255,19 @@ ], 'includes': ['../../../../../third_party/closure_compiler/compile_js2.gypi'], }, + { + 'target_name': 'sync_account_control', + 'dependencies': [ + '../compiled_resources2.gyp:route', + '../prefs/compiled_resources2.gyp:prefs_behavior', + '<(DEPTH)/ui/webui/resources/cr_elements/cr_action_menu/compiled_resources2.gyp:cr_action_menu', + '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:load_time_data', + '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:icon', + '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:web_ui_listener_behavior', + 'profile_info_browser_proxy', + 'sync_browser_proxy', + ], + 'includes': ['../../../../../third_party/closure_compiler/compile_js2.gypi'], + }, ], } diff --git a/chromium/chrome/browser/resources/settings/people_page/easy_unlock_turn_off_dialog.html b/chromium/chrome/browser/resources/settings/people_page/easy_unlock_turn_off_dialog.html index 211d825ee32..dd65510f60f 100644 --- a/chromium/chrome/browser/resources/settings/people_page/easy_unlock_turn_off_dialog.html +++ b/chromium/chrome/browser/resources/settings/people_page/easy_unlock_turn_off_dialog.html @@ -21,11 +21,12 @@ hidden="[[isButtonBarHidden_(status_)]]"> <paper-spinner-lite active="[[isSpinnerActive_(status_)]]"> </paper-spinner-lite> - <paper-button class="cancel-button" on-tap="onCancelTap_" + <paper-button class="cancel-button" on-click="onCancelTap_" hidden="[[isCancelButtonHidden_(status_)]]"> $i18n{cancel} </paper-button> - <paper-button id="turnOff" class="action-button" on-tap="onTurnOffTap_" + <paper-button id="turnOff" class="action-button" + on-click="onTurnOffTap_" disabled="[[!isTurnOffButtonEnabled_(status_)]]"> [[getTurnOffButtonText_(status_)]] </paper-button> diff --git a/chromium/chrome/browser/resources/settings/people_page/fingerprint_list.html b/chromium/chrome/browser/resources/settings/people_page/fingerprint_list.html index 6c62e3e44af..c98c91b9c8a 100644 --- a/chromium/chrome/browser/resources/settings/people_page/fingerprint_list.html +++ b/chromium/chrome/browser/resources/settings/people_page/fingerprint_list.html @@ -29,7 +29,7 @@ } .body { - @apply(--settings-list-frame-padding); + @apply --settings-list-frame-padding; } .list-item { @@ -55,14 +55,14 @@ on-change="onFingerprintLabelChanged_"> </paper-input> <button is="paper-icon-button-light" class="icon-delete-gray" - on-tap="onFingerprintDeleteTapped_"> + on-click="onFingerprintDeleteTapped_"> </button> </div> </template> </iron-list> <div class="continuation"> <paper-button id="addFingerprint" class="add-link action-button" - on-tap="openAddFingerprintDialog_"> + on-click="openAddFingerprintDialog_"> $i18n{lockScreenAddFingerprint} </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/people_page/import_data_dialog.html b/chromium/chrome/browser/resources/settings/people_page/import_data_dialog.html index 985a4aec02c..cb07d334450 100644 --- a/chromium/chrome/browser/resources/settings/people_page/import_data_dialog.html +++ b/chromium/chrome/browser/resources/settings/people_page/import_data_dialog.html @@ -104,7 +104,7 @@ importStatusEnum_.SUCCEEDED, importStatus_)]]" disabled="[[hasImportStatus_( importStatusEnum_.IN_PROGRESS, importStatus_)]]" - on-tap="closeDialog_"> + on-click="closeDialog_"> $i18n{cancel} </paper-button> <paper-button id="import" class="action-button" @@ -112,14 +112,14 @@ importStatusEnum_.SUCCEEDED, importStatus_)]]" disabled="[[shouldDisableImport_( importStatus_, noImportDataTypeSelected_)]]" - on-tap="onActionButtonTap_"> + on-click="onActionButtonTap_"> [[getActionButtonText_(selected_)]] </paper-button> <paper-button id="done" class="action-button" hidden$="[[!hasImportStatus_( importStatusEnum_.SUCCEEDED, importStatus_)]]" - on-tap="closeDialog_">$i18n{done}</paper-button> + on-click="closeDialog_">$i18n{done}</paper-button> </div> </dialog> </template> diff --git a/chromium/chrome/browser/resources/settings/people_page/lock_screen.html b/chromium/chrome/browser/resources/settings/people_page/lock_screen.html index cdaa2505cae..d12222f1f36 100644 --- a/chromium/chrome/browser/resources/settings/people_page/lock_screen.html +++ b/chromium/chrome/browser/resources/settings/people_page/lock_screen.html @@ -59,7 +59,7 @@ } #easyUnlockSettingsCollapsible { - @apply(--settings-list-frame-padding); + @apply --settings-list-frame-padding; } .no-padding { @@ -111,7 +111,7 @@ <div id="pinPasswordSecondaryActionDiv" class="secondary-action"> <paper-button id="setupPinButton" class="secondary-button" - on-tap="onConfigurePin_"> + on-click="onConfigurePin_"> [[getSetupPinText_(hasPin)]] </paper-button> </div> @@ -140,7 +140,7 @@ <div class="separator"></div> <div class="secondary-action"> <paper-button class="secondary-button" - on-tap="onEditFingerprints_" + on-click="onEditFingerprints_" aria-label="$i18n{lockScreenEditFingerprints}" aria-descibedby="lockScreenEditFingerprintsSecondary"> $i18n{lockScreenSetupFingerprintButton} @@ -167,13 +167,13 @@ <div class="separator"></div> <template is="dom-if" if="[[!easyUnlockEnabled_]]"> <paper-button id="easyUnlockSetup" class="secondary-button" - on-tap="onEasyUnlockSetupTap_"> + on-click="onEasyUnlockSetupTap_"> $i18n{easyUnlockSetupButton} </paper-button> </template> <template is="dom-if" if="[[easyUnlockEnabled_]]"> <paper-button id="easyUnlockTurnOff" class="secondary-button" - on-tap="onEasyUnlockTurnOffTap_"> + on-click="onEasyUnlockTurnOffTap_"> $i18n{easyUnlockTurnOffButton} </paper-button> </template> diff --git a/chromium/chrome/browser/resources/settings/people_page/password_prompt_dialog.html b/chromium/chrome/browser/resources/settings/people_page/password_prompt_dialog.html index 9a7dac7a58c..68056695bfe 100644 --- a/chromium/chrome/browser/resources/settings/people_page/password_prompt_dialog.html +++ b/chromium/chrome/browser/resources/settings/people_page/password_prompt_dialog.html @@ -34,11 +34,11 @@ </paper-input> </div> <div slot="button-container"> - <paper-button class="cancel-button" on-tap="onCancelTap_"> + <paper-button class="cancel-button" on-click="onCancelTap_"> $i18n{cancel} </paper-button> - <paper-button class="action-button" on-tap="submitPassword_" + <paper-button class="action-button" on-click="submitPassword_" disabled$="[[!enableConfirm_(password_, passwordInvalid_)]]"> $i18n{confirm} </paper-button> diff --git a/chromium/chrome/browser/resources/settings/people_page/people_page.html b/chromium/chrome/browser/resources/settings/people_page/people_page.html index 4ab0dfcd81f..d7b6822e5ec 100644 --- a/chromium/chrome/browser/resources/settings/people_page/people_page.html +++ b/chromium/chrome/browser/resources/settings/people_page/people_page.html @@ -33,6 +33,7 @@ <link rel="import" href="users_page.html"> </if> <if expr="not chromeos"> +<link rel="import" href="sync_account_control.html"> <link rel="import" href="import_data_dialog.html"> <link rel="import" href="manage_profile.html"> </if> @@ -46,9 +47,7 @@ } #profile-icon { - background-position: center; - background-repeat: no-repeat; - background-size: cover; + background: center / cover no-repeat; border-radius: 20px; flex-shrink: 0; height: 40px; @@ -102,66 +101,80 @@ <settings-animated-pages id="pages" section="people" focus-config="[[focusConfig_]]"> <neon-animatable route-path="default"> - <div id="picture-subpage-trigger" class="settings-box first two-line"> - <template is="dom-if" if="[[syncStatus]]"> - <div id="profile-icon" on-tap="onPictureTap_" actionable - style="background-image: [[getIconImageSet_(profileIconUrl_)]]"> - </div> <if expr="not chromeos"> - <div class="middle two-line no-min-width" - on-tap="onProfileNameTap_" actionable> -</if> -<if expr="chromeos"> - <div class="middle two-line no-min-width" on-tap="onPictureTap_" - actionable> + <template is="dom-if" if="[[shouldShowSyncAccountControl_(diceEnabled_, + syncStatus.syncSystemEnabled, syncStatus.signinAllowed)]]"> + <settings-sync-account-control + promo-label="$i18n{peopleSignInPrompt}" + promo-secondary-label="$i18n{peopleSignInPromptSecondary}"> + </settings-sync-account-control> + </template> + <template is="dom-if" if="[[!diceEnabled_]]"> </if> - <div class="flex text-elide"> - <span id="profile-name">[[profileName_]]</span> - <div class="secondary" hidden="[[!syncStatus.signedIn]]"> - [[syncStatus.signedInUsername]] - </div> + <div id="picture-subpage-trigger" class="settings-box first two-line"> + <template is="dom-if" if="[[syncStatus]]"> + <div id="profile-icon" on-click="onProfileTap_" actionable + style="background-image: [[getIconImageSet_( + profileIconUrl_)]]"> </div> + <div class="middle two-line no-min-width" on-click="onProfileTap_" + actionable> + <div class="flex text-elide"> + <span id="profile-name">[[profileName_]]</span> + <div class="secondary" hidden="[[!syncStatus.signedIn]]"> + [[syncStatus.signedInUsername]] + </div> + </div> <if expr="not chromeos"> - <button class="subpage-arrow" is="paper-icon-button-light" - aria-label="$i18n{editPerson}" - aria-describedby="profile-name"></button> + <button class="subpage-arrow" is="paper-icon-button-light" + aria-label="$i18n{editPerson}" + aria-describedby="profile-name"></button> </if> <if expr="chromeos"> - <button class="subpage-arrow" is="paper-icon-button-light" - aria-label="$i18n{changePictureTitle}" - aria-describedby="profile-name"></button> + <button class="subpage-arrow" is="paper-icon-button-light" + aria-label="$i18n{changePictureTitle}" + aria-describedby="profile-name"></button> </if> - </div> + </div> <if expr="not chromeos"> - <template is="dom-if" if="[[showSignin_(syncStatus)]]"> - <div class="separator"></div> - <paper-button class="primary-button" on-tap="onSigninTap_" - disabled="[[syncStatus.setupInProgress]]"> - $i18n{syncSignin} - </paper-button> - </template> - <template is="dom-if" if="[[syncStatus.signedIn]]"> - <div class="separator"></div> - <paper-button id="disconnectButton" class="secondary-button" - on-tap="onDisconnectTap_" - disabled="[[syncStatus.setupInProgress]]"> - $i18n{syncDisconnect} - </paper-button> + <template is="dom-if" if="[[showSignin_(syncStatus)]]"> + <div class="separator"></div> + <paper-button class="primary-button" on-click="onSigninTap_" + disabled="[[syncStatus.setupInProgress]]"> + $i18n{syncSignin} + </paper-button> + </template> + <template is="dom-if" if="[[syncStatus.signedIn]]"> + <div class="separator"></div> + <paper-button id="disconnectButton" class="secondary-button" + on-click="onDisconnectTap_" + disabled="[[syncStatus.setupInProgress]]"> + $i18n{syncDisconnect} + </paper-button> + </template> +</if> </template> + </div> +<if expr="not chromeos"> + </template> <!-- if="[[!diceEnabled_]]" --> </if> - </template> - </div> <template is="dom-if" if="[[!syncStatus.signedIn]]"> - <div class="settings-box two-line" - hidden="[[!syncStatus.signinAllowed]]"> - <div class="start"> - $i18n{syncOverview} - <a target="_blank" href="$i18n{syncLearnMoreUrl}"> - $i18n{learnMore} - </a> +<if expr="not chromeos"> + <template is="dom-if" if="[[!diceEnabled_]]"> +</if> + <div class="settings-box two-line" id="sync-overview" + hidden="[[!syncStatus.signinAllowed]]"> + <div class="start"> + $i18n{syncOverview} + <a target="_blank" href="$i18n{syncLearnMoreUrl}"> + $i18n{learnMore} + </a> + </div> </div> - </div> +<if expr="not chromeos"> + </template> <!-- if="[[!diceEnabled_]]" --> +</if> <div class="settings-box" hidden="[[syncStatus.signinAllowed]]"> $i18n{syncDisabledByAdministrator} </div> @@ -182,7 +195,7 @@ <template is="dom-if" if="[[isAdvancedSyncSettingsVisible_(syncStatus)]]"> - <div class="settings-box two-line" on-tap="onSyncTap_" + <div class="settings-box two-line" on-click="onSyncTap_" id="sync-status" actionable$="[[isSyncStatusActionable_( syncStatus)]]"> <div class="icon-container"> @@ -202,9 +215,20 @@ </div> </template> +<if expr="not chromeos"> + <template is="dom-if" if="[[diceEnabled_]]"> + <div class="settings-box" id="edit-profile" on-click="onProfileTap_" + actionable> + <div class="start">$i18n{profileNameAndPicture}</div> + <button class="subpage-arrow" is="paper-icon-button-light" + aria-label="$i18n{editPerson}"></button> + </div> + </template> +</if> + <if expr="chromeos"> <div id="lock-screen-subpage-trigger" class="settings-box two-line" - actionable on-tap="onConfigureLockTap_"> + actionable on-click="onConfigureLockTap_"> <div class="start"> $i18n{lockScreenTitle} <div class="secondary" id="lockScreenSecondary"> @@ -219,14 +243,14 @@ </if> <div id="manage-other-people-subpage-trigger" - class="settings-box" on-tap="onManageOtherPeople_" actionable> + class="settings-box" on-click="onManageOtherPeople_" actionable> <div class="start">$i18n{manageOtherPeople}</div> <button class="subpage-arrow" is="paper-icon-button-light" aria-label="$i18n{manageOtherPeople}"></button> </div> <if expr="not chromeos"> - <div class="settings-box" on-tap="onImportDataTap_" actionable> + <div class="settings-box" on-click="onImportDataTap_" actionable> <div class="start">$i18n{importTitle}</div> <button id="importDataDialogTrigger" class="subpage-arrow" is="paper-icon-button-light" aria-label="$i18n{importTitle}"> @@ -234,16 +258,6 @@ </div> </if> - <template is="dom-if" if="[[profileManagesSupervisedUsers_]]"> - <a id="manageSupervisedUsersContainer" - class="settings-box inherit-color no-outline" tabindex="-1" - target="_blank" href="$i18n{supervisedUsersUrl}"> - <div class="start">$i18n{manageSupervisedUsers}</div> - <button class="icon-external" is="paper-icon-button-light" - actionable aria-label="$i18n{manageSupervisedUsers}"> - </button> - </a> - </template> </neon-animatable> <template is="dom-if" route-path="/syncSetup" no-search$="[[!isAdvancedSyncSettingsVisible_(syncStatus)]]"> @@ -274,10 +288,7 @@ <settings-subpage associated-control="[[$$('#manage-other-people-subpage-trigger')]]" page-title="$i18n{manageOtherPeople}"> - <settings-users-page - prefs="{{prefs}}" - profile-manages-supervised-users= - "[[profileManagesSupervisedUsers_]]"> + <settings-users-page prefs="{{prefs}}"> </settings-users-page> </settings-subpage> </template> @@ -313,16 +324,16 @@ </div> </div> <div slot="button-container"> - <paper-button on-tap="onDisconnectCancel_" class="cancel-button"> + <paper-button on-click="onDisconnectCancel_" class="cancel-button"> $i18n{cancel} </paper-button> <paper-button id="disconnectConfirm" class="action-button" - hidden="[[syncStatus.domain]]" on-tap="onDisconnectConfirm_"> + hidden="[[syncStatus.domain]]" on-click="onDisconnectConfirm_"> $i18n{syncDisconnect} </paper-button> <paper-button id="disconnectManagedProfileConfirm" class="action-button" hidden="[[!syncStatus.domain]]" - on-tap="onDisconnectConfirm_"> + on-click="onDisconnectConfirm_"> $i18n{syncDisconnectConfirm} </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/people_page/people_page.js b/chromium/chrome/browser/resources/settings/people_page/people_page.js index 60555a4e8a4..d1be1d2c850 100644 --- a/chromium/chrome/browser/resources/settings/people_page/people_page.js +++ b/chromium/chrome/browser/resources/settings/people_page/people_page.js @@ -25,6 +25,22 @@ Polymer({ notify: true, }, + // <if expr="not chromeos"> + /** + * This flag is used to conditionally show a set of new sign-in UIs to the + * profiles that have been migrated to be consistent with the web sign-ins. + * TODO(scottchen): In the future when all profiles are completely migrated, + * this should be removed, and UIs hidden behind it should become default. + * @private + */ + diceEnabled_: { + type: Boolean, + value: function() { + return loadTimeData.getBoolean('diceEnabled'); + }, + }, + // </if> + /** * The current sync status, supplied by SyncBrowserProxy. * @type {?settings.SyncStatus} @@ -33,33 +49,33 @@ Polymer({ /** * The currently selected profile icon URL. May be a data URL. + * @private */ profileIconUrl_: String, /** * The current profile name. + * @private */ profileName_: String, /** - * True if the current profile manages supervised users. - */ - profileManagesSupervisedUsers_: Boolean, - - /** * The profile deletion warning. The message indicates the number of * profile stats that will be deleted if a non-zero count for the profile * stats is returned from the browser. + * @private */ deleteProfileWarning_: String, /** * True if the profile deletion warning is visible. + * @private */ deleteProfileWarningVisible_: Boolean, /** * True if the checkbox to delete the profile has been checked. + * @private */ deleteProfile_: Boolean, @@ -134,12 +150,6 @@ Polymer({ this.addWebUIListener( 'profile-info-changed', this.handleProfileInfo_.bind(this)); - profileInfoProxy.getProfileManagesSupervisedUsers().then( - this.handleProfileManagesSupervisedUsers_.bind(this)); - this.addWebUIListener( - 'profile-manages-supervised-users-changed', - this.handleProfileManagesSupervisedUsers_.bind(this)); - this.addWebUIListener( 'profile-stats-count-ready', this.handleProfileStatsCount_.bind(this)); @@ -209,15 +219,6 @@ Polymer({ }, /** - * Handler for when the profile starts or stops managing supervised users. - * @private - * @param {boolean} managesSupervisedUsers - */ - handleProfileManagesSupervisedUsers_: function(managesSupervisedUsers) { - this.profileManagesSupervisedUsers_ = managesSupervisedUsers; - }, - - /** * Handler for when the profile stats count is pushed from the browser. * @param {number} count * @private @@ -251,7 +252,7 @@ Polymer({ }, /** @private */ - onPictureTap_: function() { + onProfileTap_: function() { // <if expr="chromeos"> settings.navigateTo(settings.routes.CHANGE_PICTURE); // </if> @@ -260,13 +261,6 @@ Polymer({ // </if> }, - // <if expr="not chromeos"> - /** @private */ - onProfileNameTap_: function() { - settings.navigateTo(settings.routes.MANAGE_PROFILE); - }, - // </if> - /** @private */ onSigninTap_: function() { this.syncBrowserProxy_.startSignIn(); @@ -275,7 +269,16 @@ Polymer({ /** @private */ onDisconnectClosed_: function() { this.showDisconnectDialog_ = false; + // <if expr="not chromeos"> + if (!this.diceEnabled_) { + // If DICE-enabled, this button won't exist here. + cr.ui.focusWithoutInk(assert(this.$$('#disconnectButton'))); + } + // </if> + + // <if expr="chromeos"> cr.ui.focusWithoutInk(assert(this.$$('#disconnectButton'))); + // </if> if (settings.getCurrentRoute() == settings.routes.SIGN_OUT) settings.navigateToPreviousRoute(); @@ -391,6 +394,15 @@ Polymer({ settings.navigateToPreviousRoute(); cr.ui.focusWithoutInk(assert(this.$.importDataDialogTrigger)); }, + + /** + * @return {boolean} + * @private + */ + shouldShowSyncAccountControl_: function() { + return !!this.diceEnabled_ && !!this.syncStatus.syncSystemEnabled && + !!this.syncStatus.signinAllowed; + }, // </if> /** diff --git a/chromium/chrome/browser/resources/settings/people_page/pin_keyboard.html b/chromium/chrome/browser/resources/settings/people_page/pin_keyboard.html deleted file mode 100644 index 65056df0516..00000000000 --- a/chromium/chrome/browser/resources/settings/people_page/pin_keyboard.html +++ /dev/null @@ -1 +0,0 @@ -<include src="../../chromeos/quick_unlock/pin_keyboard.html"> diff --git a/chromium/chrome/browser/resources/settings/people_page/pin_keyboard.js b/chromium/chrome/browser/resources/settings/people_page/pin_keyboard.js deleted file mode 100644 index 4cb8d021731..00000000000 --- a/chromium/chrome/browser/resources/settings/people_page/pin_keyboard.js +++ /dev/null @@ -1,5 +0,0 @@ -// Copyright 2016 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. - -// <include src="../../chromeos/quick_unlock/pin_keyboard.js"> diff --git a/chromium/chrome/browser/resources/settings/people_page/profile_info_browser_proxy.js b/chromium/chrome/browser/resources/settings/people_page/profile_info_browser_proxy.js index 31f4824fd3b..65808a60de6 100644 --- a/chromium/chrome/browser/resources/settings/people_page/profile_info_browser_proxy.js +++ b/chromium/chrome/browser/resources/settings/people_page/profile_info_browser_proxy.js @@ -32,12 +32,6 @@ cr.define('settings', function() { * 'profile-stats-count-ready' WebUI listener event. */ getProfileStatsCount() {} - - /** - * Returns a Promise that's true if the profile manages supervised users. - * @return {!Promise<boolean>} - */ - getProfileManagesSupervisedUsers() {} } /** @@ -53,11 +47,6 @@ cr.define('settings', function() { getProfileStatsCount() { chrome.send('getProfileStatsCount'); } - - /** @override */ - getProfileManagesSupervisedUsers() { - return cr.sendWithPromise('getProfileManagesSupervisedUsers'); - } } cr.addSingletonGetter(ProfileInfoBrowserProxyImpl); diff --git a/chromium/chrome/browser/resources/settings/people_page/setup_fingerprint_dialog.html b/chromium/chrome/browser/resources/settings/people_page/setup_fingerprint_dialog.html index c39f06d3012..7e005111b04 100644 --- a/chromium/chrome/browser/resources/settings/people_page/setup_fingerprint_dialog.html +++ b/chromium/chrome/browser/resources/settings/people_page/setup_fingerprint_dialog.html @@ -72,13 +72,13 @@ </div> </div> <div slot="button-container"> - <paper-button id="addAnotherButton" on-tap="onAddAnotherFingerprint_" + <paper-button id="addAnotherButton" on-click="onAddAnotherFingerprint_" hidden$="[[hideAddAnother_(step_)]]"> $i18n{configureFingerprintAddAnotherButton} </paper-button> <paper-button id="closeButton" - class$="[[getCloseButtonClass_(step_)]]" on-tap="onClose_"> + class$="[[getCloseButtonClass_(step_)]]" on-click="onClose_"> [[getCloseButtonText_(step_)]] </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/people_page/setup_fingerprint_dialog.js b/chromium/chrome/browser/resources/settings/people_page/setup_fingerprint_dialog.js index 7922b7808ec..4b9ca548d58 100644 --- a/chromium/chrome/browser/resources/settings/people_page/setup_fingerprint_dialog.js +++ b/chromium/chrome/browser/resources/settings/people_page/setup_fingerprint_dialog.js @@ -259,7 +259,7 @@ Polymer({ */ getCloseButtonText_: function(step) { if (step == settings.FingerprintSetupStep.READY) - return this.i18n('configureFingerprintDoneButton'); + return this.i18n('done'); return this.i18n('cancel'); }, diff --git a/chromium/chrome/browser/resources/settings/people_page/setup_pin_dialog.html b/chromium/chrome/browser/resources/settings/people_page/setup_pin_dialog.html index d7a74e2a102..7cffa7ec8cb 100644 --- a/chromium/chrome/browser/resources/settings/people_page/setup_pin_dialog.html +++ b/chromium/chrome/browser/resources/settings/people_page/setup_pin_dialog.html @@ -1,3 +1,4 @@ +<link rel="import" href="chrome://resources/cr_components/chromeos/quick_unlock/pin_keyboard.html"> <link rel="import" href="chrome://resources/cr_elements/icons.html"> <link rel="import" href="chrome://resources/html/polymer.html"> @@ -6,7 +7,6 @@ <link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html"> <link rel="import" href="../i18n_setup.html"> <link rel="import" href="lock_screen_constants.html"> -<link rel="import" href="pin_keyboard.html"> <link rel="import" href="../settings_shared_css.html"> <dom-module id="settings-setup-pin-dialog"> @@ -28,6 +28,13 @@ --iron-icon-fill-color: var(--paper-grey-700); } + pin-keyboard { + --pin-keyboard-digit-button: { + font-size: 18px; + padding: 15px 21px; + }; + } + #pinKeyboardDiv { justify-content: center; } @@ -62,11 +69,11 @@ </div> </div> <div slot="button-container"> - <paper-button class="cancel-button" on-tap="onCancelTap_"> + <paper-button class="cancel-button" on-click="onCancelTap_"> $i18n{cancel} </paper-button> - <paper-button class="action-button" on-tap="onPinSubmit_" + <paper-button class="action-button" on-click="onPinSubmit_" disabled$="[[!enableSubmit_]]"> <span>[[getContinueMessage_(isConfirmStep_)]]</span> </paper-button> diff --git a/chromium/chrome/browser/resources/settings/people_page/sync_account_control.html b/chromium/chrome/browser/resources/settings/people_page/sync_account_control.html new file mode 100644 index 00000000000..e59e5f06258 --- /dev/null +++ b/chromium/chrome/browser/resources/settings/people_page/sync_account_control.html @@ -0,0 +1,200 @@ +<link rel="import" href="chrome://resources/html/polymer.html"> + +<link rel="import" href="chrome://resources/cr_elements/icons.html"> +<link rel="import" href="chrome://resources/cr_elements/cr_action_menu/cr_action_menu.html"> +<link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/iron-icons/notification-icons.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html"> +<link rel="import" href="profile_info_browser_proxy.html"> +<link rel="import" href="sync_browser_proxy.html"> +<link rel="import" href="../i18n_setup.html"> +<link rel="import" href="../route.html"> +<link rel="import" href="../settings_shared_css.html"> + +<dom-module id="settings-sync-account-control"> + <template> + <style include="settings-shared"> + :host { + --sync-icon-size: 16px; + --sync-icon-border-size: 2px; + --shown-avatar-size: 40px; + } + + setting-box.middle { + /* Per spec, middle text is indented 20px in this section. */ + -webkit-margin-start: 20px; + } + + .account-icon { + border-radius: 20px; + flex-shrink: 0; + height: var(--shown-avatar-size); + width: var(--shown-avatar-size); + } + + .account-icon.small { + height: 20px; + width: 20px; + } + + #menu .dropdown-item { + padding: 12px; + } + + #menu .dropdown-item span { + -webkit-margin-start: 8px; + } + + .flex { + display: flex; + flex: 1; + flex-direction: column; + } + + #avatar-container { + position: relative; + } + + #sync-icon-container { + align-items: center; + background: var(--google-blue-500); + border: var(--sync-icon-border-size) solid white; + border-radius: 50%; + display: flex; + height: var(--sync-icon-size); + position: absolute; + right: -6px; + top: calc(var(--shown-avatar-size) - var(--sync-icon-size) - + var(--sync-icon-border-size)); + width: var(--sync-icon-size); + } + + :host-context([dir='rtl']) #sync-icon-container { + left: -6px; + right: initial; + } + + #sync-icon-container[syncing] { + background: green; + } + + #sync-icon-container iron-icon { + fill: white; + height: 12px; + margin: auto; + width: 12px; + } + + #sign-in { + min-width: 100px; + } + + #banner { + background-color: var(--google-blue-500); + display: none; + } + + #banner img { + -webkit-margin-start: 380px; + height: 100px; + margin-bottom: -12px; + margin-top: 32px; + } + + :host([showing-promo]) #banner { + display: flex; + } + + :host([showing-promo]) #promo-headers { + line-height: 1.625rem; + padding-bottom: 10px; + padding-top: 10px; + } + + :host([showing-promo]) #promo-headers #promo-title { + font-size: 1.1rem; + } + + :host([showing-promo]) #promo-headers .secondary { + font-size: 0.9rem; + } + + :host([showing-promo]) #promo-headers .separator { + display: none; + } + </style> + <div class="settings-box" id="banner"> + <img src="../images/sync_banner.svg" alt=""> + </div> + <div class="settings-box first two-line" id="promo-headers" + hidden="[[syncStatus.signedIn]]"> + <div class="start"> + <div id="promo-title">[[promoLabel]]</div> + <div class="secondary"> + [[promoSecondaryLabel]] + </div> + </div> + <div class="separator" hidden="[[shouldShowAvatarRow_]]"></div> + <paper-button class="action-button" on-click="onSigninTap_" + disabled="[[syncStatus.setupInProgress]]" id="sign-in" + hidden="[[shouldShowAvatarRow_]]"> + $i18n{peopleSignIn} + </paper-button> + </div> + <template is="dom-if" if="[[shouldShowAvatarRow_]]"> + <div class="settings-box first two-line" id="avatar-row"> + <div id="avatar-container"> + <img class="account-icon" alt="" + src="[[getAccountImageSrc_(shownAccount_.avatarImage)]]"> + <div id="sync-icon-container" syncing$="[[syncStatus.signedIn]]"> + <iron-icon icon="notification:sync"></iron-icon> + </div> + </div> + <div class="middle two-line no-min-width"> + <div class="flex text-elide" id="user-info"> + <span> + [[getNameDisplay_('$i18nPolymer{syncedToName}', + shownAccount_.fullName, syncStatus.signedIn)]] + </span> + <div class="secondary">[[shownAccount_.email]]</div> + </div> + </div> + <button is="paper-icon-button-light" id="dropdown-arrow" + on-click="onMenuButtonTap_" title="$i18n{useAnotherAccount}" + class="icon-arrow-dropdown" hidden="[[syncStatus.signedIn]]"> + </button> + <div class="separator" hidden="[[syncStatus.signedIn]]"></div> + <paper-button class="action-button" on-click="onSyncButtonTap_" + hidden="[[syncStatus.signedIn]]" + disabled="[[syncStatus.setupInProgress]]"> + [[getSubstituteLabel_( + '$i18nPolymer{syncAsName}', shownAccount_.givenName)]] + </paper-button> + <paper-button class="secondary-button" on-click="onTurnOffButtonTap_" + hidden="[[!syncStatus.signedIn]]" + disabled="[[syncStatus.setupInProgress]]"> + $i18n{turnOffSync} + </paper-button> + </div> + <template is="dom-if" if="[[!syncStatus.signedIn]]" restamp> + <dialog is="cr-action-menu" id="menu" auto-reposition> + <template is="dom-repeat" items="[[storedAccounts_]]"> + <button class="dropdown-item" on-click="onAccountTap_" slot="item"> + <img class="account-icon small" alt="" + src="[[getAccountImageSrc_(item.avatarImage)]]"> + <span>[[item.email]]</span> + </button> + </template> + <button class="dropdown-item" on-click="onSigninTap_" slot="item" + disabled="[[syncStatus.setupInProgress]]" id="sign-in-item"> + <img class="account-icon small" alt="" + src="chrome://theme/IDR_PROFILE_AVATAR_PLACEHOLDER_LARGE"> + <span>$i18n{useAnotherAccount}</span> + </button> + </dialog> + </template> + </template> + </template> + <script src="sync_account_control.js"></script> +</dom-module> diff --git a/chromium/chrome/browser/resources/settings/people_page/sync_account_control.js b/chromium/chrome/browser/resources/settings/people_page/sync_account_control.js new file mode 100644 index 00000000000..8b079fe22ac --- /dev/null +++ b/chromium/chrome/browser/resources/settings/people_page/sync_account_control.js @@ -0,0 +1,222 @@ +// Copyright 2018 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 + * 'settings-sync-account-section' is the settings page containing sign-in + * settings. + */ +cr.exportPath('settings'); + +/** @const {number} */ +settings.MAX_SIGNIN_PROMO_IMPRESSION = 10; + +Polymer({ + is: 'settings-sync-account-control', + behaviors: [WebUIListenerBehavior], + properties: { + /** + * The current sync status, supplied by SyncBrowserProxy. + * @type {!settings.SyncStatus} + */ + syncStatus: Object, + + /** + * Proxy variable for syncStatus.signedIn to shield observer from being + * triggered multiple times whenever syncStatus changes. + * @private {boolean} + */ + signedIn_: { + type: Boolean, + computed: 'computeSignedIn_(syncStatus.signedIn)', + observer: 'onSignedInChanged_', + }, + + /** @private {!Array<!settings.StoredAccount>} */ + storedAccounts_: Object, + + /** @private {?settings.StoredAccount} */ + shownAccount_: Object, + + showingPromo: { + type: Boolean, + value: false, + reflectToAttribute: true, + }, + + promoLabel: String, + + promoSecondaryLabel: String, + + /** @private {boolean} */ + shouldShowAvatarRow_: { + type: Boolean, + value: false, + computed: 'computeShouldShowAvatarRow_(storedAccounts_, syncStatus,' + + 'storedAccounts_.length, syncStatus.signedIn)', + observer: 'onShouldShowAvatarRowChange_', + } + }, + + observers: [ + 'onShownAccountShouldChange_(storedAccounts_, syncStatus)', + ], + + /** @private {?settings.SyncBrowserProxy} */ + syncBrowserProxy_: null, + + /** @override */ + attached: function() { + this.syncBrowserProxy_ = settings.SyncBrowserProxyImpl.getInstance(); + this.syncBrowserProxy_.getSyncStatus().then( + this.handleSyncStatus_.bind(this)); + this.syncBrowserProxy_.getStoredAccounts().then( + this.handleStoredAccounts_.bind(this)); + this.addWebUIListener( + 'sync-status-changed', this.handleSyncStatus_.bind(this)); + this.addWebUIListener( + 'stored-accounts-updated', this.handleStoredAccounts_.bind(this)); + }, + + /** + * @return {boolean} + * @private + */ + computeSignedIn_: function() { + return !!this.syncStatus.signedIn; + }, + + /** @private */ + onSignedInChanged_: function() { + if (!this.showingPromo && !this.syncStatus.signedIn && + this.syncBrowserProxy_.getPromoImpressionCount() < + settings.MAX_SIGNIN_PROMO_IMPRESSION) { + this.showingPromo = true; + this.syncBrowserProxy_.incrementPromoImpressionCount(); + } else { + // Turn off the promo if the user is signed in. + this.showingPromo = false; + } + }, + + /** + * @param {string} label + * @param {string} name + * @return {string} + * @private + */ + getSubstituteLabel_: function(label, name) { + return loadTimeData.substituteString(label, name); + }, + + /** + * @param {string} label + * @param {string} name + * @return {string} + * @private + */ + getNameDisplay_: function(label, name) { + return this.syncStatus.signedIn ? + loadTimeData.substituteString(label, name) : + name; + }, + + /** + * @param {?string} image + * @return {string} + * @private + */ + getAccountImageSrc_: function(image) { + // image can be undefined if the account has not set an avatar photo. + return image || 'chrome://theme/IDR_PROFILE_AVATAR_PLACEHOLDER_LARGE'; + }, + + /** + * @param {!Array<!settings.StoredAccount>} accounts + * @private + */ + handleStoredAccounts_: function(accounts) { + this.storedAccounts_ = accounts; + }, + + /** + * Handler for when the sync state is pushed from the browser. + * @param {!settings.SyncStatus} syncStatus + * @private + */ + handleSyncStatus_: function(syncStatus) { + this.syncStatus = syncStatus; + }, + + /** + * @return {boolean} + * @private + */ + computeShouldShowAvatarRow_: function() { + return this.syncStatus.signedIn || this.storedAccounts_.length > 0; + }, + + /** @private */ + onSigninTap_: function() { + this.syncBrowserProxy_.startSignIn(); + + // Need to close here since one menu item also triggers this function. + if (this.$$('#menu')) { + /** @type {!CrActionMenuElement} */ (this.$$('#menu')).close(); + } + }, + + /** @private */ + onSyncButtonTap_: function() { + assert(this.shownAccount_); + this.syncBrowserProxy_.startSyncingWithEmail(this.shownAccount_.email); + }, + + /** @private */ + onTurnOffButtonTap_: function() { + /* This will route to people_page's disconnect dialog. */ + settings.navigateTo(settings.routes.SIGN_OUT); + }, + + /** @private */ + onMenuButtonTap_: function() { + const actionMenu = + /** @type {!CrActionMenuElement} */ (this.$$('#menu')); + actionMenu.showAt(assert(this.$$('#dropdown-arrow'))); + }, + + /** @private */ + onShouldShowAvatarRowChange_: function() { + // Close dropdown when avatar-row hides, so if it appears again, the menu + // won't be open by default. + const actionMenu = this.$$('#menu'); + if (!this.shouldShowAvatarRow_ && actionMenu && actionMenu.open) + actionMenu.close(); + }, + + /** + * @param {!{model: + * !{item: !settings.StoredAccount}, + * }} e + * @private + */ + onAccountTap_: function(e) { + this.shownAccount_ = e.model.item; + /** @type {!CrActionMenuElement} */ (this.$$('#menu')).close(); + }, + + /** @private */ + onShownAccountShouldChange_: function() { + if (this.syncStatus.signedIn) { + for (let i = 0; i < this.storedAccounts_.length; i++) { + if (this.storedAccounts_[i].email == this.syncStatus.signedInUsername) { + this.shownAccount_ = this.storedAccounts_[i]; + return; + } + } + } else { + this.shownAccount_ = + this.storedAccounts_ ? this.storedAccounts_[0] : null; + } + } +});
\ No newline at end of file diff --git a/chromium/chrome/browser/resources/settings/people_page/sync_browser_proxy.js b/chromium/chrome/browser/resources/settings/people_page/sync_browser_proxy.js index 05f345f3edf..ecb2a43ed3d 100644 --- a/chromium/chrome/browser/resources/settings/people_page/sync_browser_proxy.js +++ b/chromium/chrome/browser/resources/settings/people_page/sync_browser_proxy.js @@ -10,12 +10,20 @@ cr.exportPath('settings'); /** + * @typedef {{fullName: (string|undefined), + * givenName: (string|undefined), + * email: string, + * avatarImage: (string|undefined)}} + * @see chrome/browser/ui/webui/settings/people_handler.cc + */ +settings.StoredAccount; + +/** * @typedef {{childUser: (boolean|undefined), * domain: (string|undefined), * hasError: (boolean|undefined), * hasUnrecoverableError: (boolean|undefined), * managed: (boolean|undefined), - * setupCompleted: (boolean|undefined), * setupInProgress: (boolean|undefined), * signedIn: (boolean|undefined), * signedInUsername: (string|undefined), @@ -104,6 +112,12 @@ settings.PageStatus = { }; cr.define('settings', function() { + /** + * Key to be used with localStorage. + * @type {string} + */ + const PROMO_IMPRESSION_COUNT_KEY = 'signin-promo-count'; + /** @interface */ class SyncBrowserProxy { // <if expr="not chromeos"> @@ -124,6 +138,16 @@ cr.define('settings', function() { */ manageOtherPeople() {} + /** + * @return {number} the number of times the sync account promo was shown. + */ + getPromoImpressionCount() {} + + /** + * Increment the number of times the sync account promo was shown. + */ + incrementPromoImpressionCount() {} + // </if> // <if expr="chromeos"> @@ -141,6 +165,12 @@ cr.define('settings', function() { getSyncStatus() {} /** + * Gets a list of stored accounts. + * @return {!Promise<!Array<!settings.StoredAccount>>} + */ + getStoredAccounts() {} + + /** * Function to invoke when the sync page has been navigated to. This * registers the UI as the "active" sync UI so that if the user tries to * open another sync UI, this one will be shown instead. @@ -168,6 +198,12 @@ cr.define('settings', function() { setSyncEncryption(syncPrefs) {} /** + * Start syncing with an account, specified by its email. + * @param {string} email + */ + startSyncingWithEmail(email) {} + + /** * Opens the Google Activity Controls url in a new tab. */ openActivityControlsUrl() {} @@ -193,13 +229,26 @@ cr.define('settings', function() { chrome.send('SyncSetupManageOtherPeople'); } + /** @override */ + getPromoImpressionCount() { + return parseInt( + window.localStorage.getItem(PROMO_IMPRESSION_COUNT_KEY), 10) || + 0; + } + + /** @override */ + incrementPromoImpressionCount() { + window.localStorage.setItem( + PROMO_IMPRESSION_COUNT_KEY, + (this.getPromoImpressionCount() + 1).toString()); + } + // </if> // <if expr="chromeos"> /** @override */ attemptUserExit() { return chrome.send('AttemptUserExit'); } - // </if> /** @override */ @@ -208,6 +257,11 @@ cr.define('settings', function() { } /** @override */ + getStoredAccounts() { + return cr.sendWithPromise('SyncSetupGetStoredAccounts'); + } + + /** @override */ didNavigateToSyncPage() { chrome.send('SyncSetupShowSetupUI'); } @@ -230,6 +284,11 @@ cr.define('settings', function() { } /** @override */ + startSyncingWithEmail(email) { + chrome.send('SyncSetupStartSyncingWithEmail', [email]); + } + + /** @override */ openActivityControlsUrl() { chrome.metricsPrivate.recordUserAction( 'Signin_AccountSettings_GoogleActivityControlsClicked'); diff --git a/chromium/chrome/browser/resources/settings/people_page/sync_page.html b/chromium/chrome/browser/resources/settings/people_page/sync_page.html index bea84fd3f43..5f9b6a925e1 100644 --- a/chromium/chrome/browser/resources/settings/people_page/sync_page.html +++ b/chromium/chrome/browser/resources/settings/people_page/sync_page.html @@ -88,7 +88,7 @@ on-keypress="onSubmitExistingPassphraseTap_"> </paper-input> <paper-button id="submitExistingPassphrase" - on-tap="onSubmitExistingPassphraseTap_" class="action-button" + on-click="onSubmitExistingPassphraseTap_" class="action-button" disabled="[[!existingPassphrase_]]"> $i18n{submitPassphraseButton} </paper-button> @@ -251,7 +251,7 @@ <a class="settings-box two-line inherit-color no-outline" tabindex="-1" target="_blank" href="$i18n{activityControlsUrl}" - on-tap="onActivityControlsTap_"> + on-click="onActivityControlsTap_"> <div class="start"> $i18n{personalizeGoogleServicesTitle} <div class="secondary" id="activityControlsSecondary"> @@ -294,7 +294,7 @@ <span>[[syncPrefs.fullEncryptionBody]]</span> </template> <template is="dom-if" if="[[!syncPrefs.fullEncryptionBody]]"> - <span on-tap="onLearnMoreTap_"> + <span on-click="onLearnMoreTap_"> $i18nRaw{encryptWithSyncPassphraseLabel} </span> </template> @@ -323,7 +323,7 @@ error-message="$i18n{mismatchedPassphraseError}"> </paper-input> <paper-button id="saveNewPassphrase" - on-tap="onSaveNewPassphraseTap_" class="action-button" + on-click="onSaveNewPassphraseTap_" class="action-button" disabled="[[!isSaveNewPassphraseEnabled_(passphrase_, confirmation_)]]"> $i18n{save} diff --git a/chromium/chrome/browser/resources/settings/people_page/user_list.html b/chromium/chrome/browser/resources/settings/people_page/user_list.html index 0873990c000..4ca878eef14 100644 --- a/chromium/chrome/browser/resources/settings/people_page/user_list.html +++ b/chromium/chrome/browser/resources/settings/people_page/user_list.html @@ -46,7 +46,7 @@ </template> </div> <button is="paper-icon-button-light" class="icon-clear" - on-tap="removeUser_" + on-click="removeUser_" hidden="[[shouldHideCloseButton_(disabled, item.isOwner)]]"> </button> </div> diff --git a/chromium/chrome/browser/resources/settings/people_page/users_add_user_dialog.html b/chromium/chrome/browser/resources/settings/people_page/users_add_user_dialog.html index 99850568bff..fe8cd9c784b 100644 --- a/chromium/chrome/browser/resources/settings/people_page/users_add_user_dialog.html +++ b/chromium/chrome/browser/resources/settings/people_page/users_add_user_dialog.html @@ -25,10 +25,10 @@ </paper-input> </div> <div slot="button-container"> - <paper-button class="cancel-button" on-tap="onCancelTap_"> + <paper-button class="cancel-button" on-click="onCancelTap_"> $i18n{cancel} </paper-button> - <paper-button on-tap="addUser_" class="action-button" + <paper-button on-click="addUser_" class="action-button" disabled$="[[!isValid_]]"> $i18n{add} </paper-button> diff --git a/chromium/chrome/browser/resources/settings/people_page/users_page.html b/chromium/chrome/browser/resources/settings/people_page/users_page.html index ac720c8628e..bd58da4cdd0 100644 --- a/chromium/chrome/browser/resources/settings/people_page/users_page.html +++ b/chromium/chrome/browser/resources/settings/people_page/users_page.html @@ -39,13 +39,6 @@ label="$i18n{guestBrowsingLabel}" disabled="[[isEditingDisabled_(isOwner_, isWhitelistManaged_)]]"> </settings-toggle-button> - <template is="dom-if" if="[[profileManagesSupervisedUsers]]"> - <settings-toggle-button class="continuation" - pref="{{prefs.cros.accounts.supervisedUsersEnabled}}" - label="$i18n{supervisedUsersLabel}" - disabled="[[isEditingDisabled_(isOwner_, isWhitelistManaged_)]]"> - </settings-toggle-button> - </template> <settings-toggle-button class="continuation" pref="{{prefs.cros.accounts.showUserNamesOnSignIn}}" label="$i18n{showOnSigninLabel}" @@ -66,7 +59,7 @@ <div id="add-user-button" class="list-item" hidden="[[isEditingUsersDisabled_(isOwner_, isWhitelistManaged_, prefs.cros.accounts.allowGuest.value)]]"> - <a is="action-link" class="list-button" on-tap="openAddUserDialog_"> + <a is="action-link" class="list-button" on-click="openAddUserDialog_"> $i18n{addUsers} </a> </div> diff --git a/chromium/chrome/browser/resources/settings/people_page/users_page.js b/chromium/chrome/browser/resources/settings/people_page/users_page.js index 762fb6763f8..2d14833a0dc 100644 --- a/chromium/chrome/browser/resources/settings/people_page/users_page.js +++ b/chromium/chrome/browser/resources/settings/people_page/users_page.js @@ -19,15 +19,6 @@ Polymer({ notify: true, }, - /** - * True if the current profile manages supervised users. - * Set in people-page. - */ - profileManagesSupervisedUsers: { - type: Boolean, - value: false, - }, - /** @private */ isOwner_: { type: Boolean, diff --git a/chromium/chrome/browser/resources/settings/prefs/pref_util.js b/chromium/chrome/browser/resources/settings/prefs/pref_util.js index f9ce20040b3..fd5a45a3ce8 100644 --- a/chromium/chrome/browser/resources/settings/prefs/pref_util.js +++ b/chromium/chrome/browser/resources/settings/prefs/pref_util.js @@ -18,7 +18,7 @@ cr.define('Settings.PrefUtil', function() { case chrome.settingsPrivate.PrefType.BOOLEAN: return value == 'true'; case chrome.settingsPrivate.PrefType.NUMBER: - const n = parseInt(value, 10); + const n = parseFloat(value); if (isNaN(n)) { console.error( 'Argument to stringToPrefValue for number pref ' + diff --git a/chromium/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog.html b/chromium/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog.html index b9cdf9e4628..d8436bfe128 100644 --- a/chromium/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog.html +++ b/chromium/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog.html @@ -51,18 +51,18 @@ <div slot="dialog-buttons"> <div> <!-- Left group --> <paper-button id="manuallyAddPrinterButton" class="secondary-button" - on-tap="switchToManualAddDialog_"> + on-click="switchToManualAddDialog_"> $i18n{manuallyAddPrinterButtonText} </paper-button> </div> <div> <!-- Right group --> <paper-button class="cancel-button secondary-button" - on-tap="onCancelTap_"> + on-click="onCancelTap_"> $i18n{cancel} </paper-button> <paper-button class="action-button" id="addPrinterButton" disabled="[[!canAddPrinter_(selectedPrinter)]]" - on-tap="switchToConfiguringDialog_"> + on-click="switchToConfiguringDialog_"> $i18n{addPrinterButtonText} </paper-button> </div> @@ -122,8 +122,7 @@ <div class="label">$i18n{printerAddress}</div> <div class="secondary"> <paper-input no-label-float id="printerAddressInput" - value="{{newPrinter.printerAddress}}" - on-input="onAddressChanged_"> + value="{{newPrinter.printerAddress}}"> </paper-input> </div> </div> @@ -159,32 +158,21 @@ </div> </div> </div> - <div class="search-printer-box" id="searchInProgress" hidden> - <paper-spinner-lite active></paper-spinner-lite> - <span class="spinner-comment">$i18n{searchingPrinter}</span> - </div> - <div class="search-printer-box printer-not-found" - id="searchNotFound" hidden> - <span>$i18n{printerNotFound}</span> - </div> - <div class="search-printer-box printer-found" id="searchFound" hidden> - <span>$i18n{printerFound}</span> - </div> </div> <div slot="dialog-buttons"> <div> <!-- Left group --> <paper-button class="secondary-button" - on-tap="switchToDiscoveryDialog_"> + on-click="switchToDiscoveryDialog_"> $i18n{discoverPrintersButtonText} </paper-button> </div> <div> <!-- Right group --> <paper-button class="cancel-button secondary-button" - on-tap="onCancelTap_"> + on-click="onCancelTap_"> $i18n{cancel} </paper-button> <paper-button id="addPrinterButton" class="action-button" - on-tap="addPressed_" + on-click="addPressed_" disabled="[[!canAddPrinter_(newPrinter.printerName, newPrinter.printerAddress)]]"> $i18n{addPrinterButtonText} @@ -233,9 +221,11 @@ <div class="label">$i18n{selectDriver}</div> <div class="secondary"> <paper-input class="browse-file-input" no-label-float readonly - value="[[getBaseName_(activePrinter.printerPPDPath)]]"> - <paper-button class="browse-button" suffix - on-tap="onBrowseFile_"> + value="[[getBaseName_(activePrinter.printerPPDPath)]]" + error-message="$i18n{selectDriverErrorMessage}" + invalid="[[invalidPPD]]"> + <paper-button class="browse-button" slot="suffix" + on-click="onBrowseFile_"> $i18n{selectDriverButtonText} </paper-button> </paper-input> @@ -248,14 +238,14 @@ </div> <div slot="dialog-buttons"> <paper-button class="cancel-button secondary-button" - on-tap="onCancelTap_"> + on-click="onCancelTap_"> $i18n{cancel} </paper-button> <paper-button class="action-button" id="addPrinterButton" disabled="[[!canAddPrinter_(activePrinter.ppdManufacturer, activePrinter.ppdModel, activePrinter.printerPPDPath)]]" - on-tap="switchToConfiguringDialog_"> + on-click="switchToConfiguringDialog_"> $i18n{addPrinterButtonText} </paper-button> </div> @@ -279,7 +269,7 @@ </div> <div slot="dialog-buttons"> <paper-button class="cancel-button secondary-button" - on-tap="onCancelConfiguringTap_"> + on-click="onCancelConfiguringTap_"> $i18n{cancel} </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog.js b/chromium/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog.js index bd6a143ae4d..52ff88a5f5c 100644 --- a/chromium/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog.js +++ b/chromium/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog.js @@ -184,13 +184,6 @@ Polymer({ this.fire('open-configuring-printer-dialog'); }, - /** @private */ - onAddressChanged_: function() { - // TODO(xdai): Check if the printer address exists and then show the - // corresponding message after the API is ready. - // The format of address is: ip-address-or-hostname:port-number. - }, - /** * @param {!Event} event * @private diff --git a/chromium/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog_util.html b/chromium/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog_util.html index 797f6fe0f76..3928af6bfcd 100644 --- a/chromium/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog_util.html +++ b/chromium/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog_util.html @@ -23,8 +23,8 @@ selected="{{selectedPrinter}}"> </array-selector> <template is="dom-repeat" items="[[printers]]"> - <button class="list-item" on-tap="onSelect_"> - [[item.printerName]] [[item.printerModel]] + <button class="list-item" on-click="onSelect_"> + [[item.printerName]] </button> </template> </div> @@ -39,7 +39,11 @@ width: 270px; } - iron-dropdown .dropdown-content { + iron-dropdown { + height: 270px; + } + + iron-dropdown [slot='dropdown-content'] { background-color: white; box-shadow: 0 2px 6px var(--paper-grey-500); min-width: 128px; @@ -56,22 +60,23 @@ background-size: 24px; } </style> - <paper-input-container no-label-float on-tap="onTap_"> + <paper-input-container no-label-float on-click="onTap_"> <input is="iron-input" type="search" bind-value="{{selectedItem}}" - on-search="onInputValueChanged_" on-change="onChange_" incremental> - <button is="paper-icon-button-light" class="icon-search" suffix - id="searchIcon" hidden> + on-search="onInputValueChanged_" on-change="onChange_" incremental + slot="input"> + <button is="paper-icon-button-light" class="icon-search" + id="searchIcon" hidden slot="suffix"> </button> - <button is="paper-icon-button-light" class="icon-arrow-dropdown" suffix - id="dropdownIcon"> + <button is="paper-icon-button-light" class="icon-arrow-dropdown" + id="dropdownIcon" slot="suffix"> </button> </paper-input-container> <iron-dropdown horizontal-align="left" vertical-align="top" vertical-offset="35"> - <div class="dropdown-content"> + <div slot="dropdown-content"> <template is="dom-repeat" items="[[items]]" filter="[[filterItems_(searchTerm_)]]"> - <button class="list-item" on-tap="onSelect_">[[item]]</button> + <button class="list-item" on-click="onSelect_">[[item]]</button> </template> </div> </iron-dropdown> diff --git a/chromium/chrome/browser/resources/settings/printing_page/cups_edit_printer_dialog.html b/chromium/chrome/browser/resources/settings/printing_page/cups_edit_printer_dialog.html index 63ebb00216d..8f0c517f723 100644 --- a/chromium/chrome/browser/resources/settings/printing_page/cups_edit_printer_dialog.html +++ b/chromium/chrome/browser/resources/settings/printing_page/cups_edit_printer_dialog.html @@ -100,8 +100,8 @@ <div class="secondary"> <paper-input class="browse-file-input" no-label-float readonly value="[[getBaseName_(activePrinter.printerPPDPath)]]"> - <paper-button class="browse-button" suffix - on-tap="onBrowseFile_"> + <paper-button class="browse-button" slot="suffix" + on-click="onBrowseFile_"> $i18n{selectDriverButtonText} </paper-button> </paper-input> @@ -111,10 +111,10 @@ </div> <div slot="dialog-buttons"> <paper-button class="cancel-button secondary-button" - on-tap="onCancelTap_"> + on-click="onCancelTap_"> $i18n{cancel} </paper-button> - <paper-button class="action-button" on-tap="onSaveTap_"> + <paper-button class="action-button" on-click="onSaveTap_"> $i18n{editPrinterButtonText} </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/printing_page/cups_printer_shared_css.html b/chromium/chrome/browser/resources/settings/printing_page/cups_printer_shared_css.html index 029074eb08d..026ed96e938 100644 --- a/chromium/chrome/browser/resources/settings/printing_page/cups_printer_shared_css.html +++ b/chromium/chrome/browser/resources/settings/printing_page/cups_printer_shared_css.html @@ -89,7 +89,7 @@ padding: 0 24px; text-align: start; width: 100%; - @apply(--settings-actionable); + @apply --settings-actionable; } .list-item:focus { diff --git a/chromium/chrome/browser/resources/settings/printing_page/cups_printers.html b/chromium/chrome/browser/resources/settings/printing_page/cups_printers.html index 3df538af0ea..8fe645217ad 100644 --- a/chromium/chrome/browser/resources/settings/printing_page/cups_printers.html +++ b/chromium/chrome/browser/resources/settings/printing_page/cups_printers.html @@ -46,6 +46,14 @@ width: 350px; } + #noSearchResultsMessage { + color: var(--md-loading-message-color); + font-size: 16px; + font-weight: 500; + margin-top: 80px; + text-align: center; + } + #addPrinterErrorMessage { display: flex; justify-content: space-around; @@ -68,7 +76,7 @@ </div> </div> <paper-button class="primary-button" id="addPrinter" - on-tap="onAddPrinterTap_" disabled="[[!canAddPrinter_]]"> + on-click="onAddPrinterTap_" disabled="[[!canAddPrinter_]]"> $i18n{addCupsPrinter} </paper-button> </div> @@ -88,6 +96,11 @@ search-term="[[searchTerm]]"> </settings-cups-printers-list> + <div id="noSearchResultsMessage" + hidden="[[!showNoSearchResultsMessage_(searchTerm)]]"> + $i18n{noSearchResults} + </div> + <div id="message"> <div class="center" id="addPrinterDoneMessage" hidden> $i18n{printerAddedSuccessfulMessage} diff --git a/chromium/chrome/browser/resources/settings/printing_page/cups_printers.js b/chromium/chrome/browser/resources/settings/printing_page/cups_printers.js index f5c6e55c690..055f4a807c5 100644 --- a/chromium/chrome/browser/resources/settings/printing_page/cups_printers.js +++ b/chromium/chrome/browser/resources/settings/printing_page/cups_printers.js @@ -186,4 +186,18 @@ Polymer({ }); }, + /** + * @param {string} searchTerm + * @return {boolean} If the 'no-search-results-found' string should be shown. + * @private + */ + showNoSearchResultsMessage_: function(searchTerm) { + if (!searchTerm || !this.printers.length) + return false; + searchTerm = searchTerm.toLowerCase(); + return !this.printers.some(printer => { + return printer.printerName.toLowerCase().includes(searchTerm); + }); + }, + }); diff --git a/chromium/chrome/browser/resources/settings/printing_page/cups_printers_list.html b/chromium/chrome/browser/resources/settings/printing_page/cups_printers_list.html index 8c4a1d51ac0..353742c55e2 100644 --- a/chromium/chrome/browser/resources/settings/printing_page/cups_printers_list.html +++ b/chromium/chrome/browser/resources/settings/printing_page/cups_printers_list.html @@ -15,10 +15,10 @@ </style> <dialog is="cr-action-menu"> - <button class="dropdown-item" on-tap="onEditTap_"> + <button slot="item" class="dropdown-item" on-click="onEditTap_"> $i18n{editPrinter} </button> - <button class="dropdown-item" on-tap="onRemoveTap_"> + <button slot="item" class="dropdown-item" on-click="onRemoveTap_"> $i18n{removePrinter} </button> </dialog> @@ -29,7 +29,7 @@ <div class="printer-name text-elide">[[item.printerName]]</div> <!--TODO(xdai): Add icon for enterprise CUPS printer. --> <button is="paper-icon-button-light" class="icon-more-vert" - on-tap="onOpenActionMenuTap_" title="$i18n{moreActions}"> + on-click="onOpenActionMenuTap_" title="$i18n{moreActions}"> </button> </div> </template> diff --git a/chromium/chrome/browser/resources/settings/printing_page/cups_set_manufacturer_model_behavior.js b/chromium/chrome/browser/resources/settings/printing_page/cups_set_manufacturer_model_behavior.js index 84508310b53..43f805bf3f8 100644 --- a/chromium/chrome/browser/resources/settings/printing_page/cups_set_manufacturer_model_behavior.js +++ b/chromium/chrome/browser/resources/settings/printing_page/cups_set_manufacturer_model_behavior.js @@ -16,15 +16,16 @@ const SetManufacturerModelBehavior = { notify: true, }, - /** @type {?Array<string>} */ - manufacturerList: { - type: Array, + invalidPPD: { + type: Boolean, + value: false, }, /** @type {?Array<string>} */ - modelList: { - type: Array, - }, + manufacturerList: Array, + + /** @type {?Array<string>} */ + modelList: Array, }, observers: [ @@ -86,11 +87,12 @@ const SetManufacturerModelBehavior = { }, /** - * @param {string} path + * @param {string} path The full path to the selected PPD file * @private */ printerPPDPathChanged_: function(path) { this.set('activePrinter.printerPPDPath', path); + this.invalidPPD = !path; }, /** diff --git a/chromium/chrome/browser/resources/settings/printing_page/printing_page.html b/chromium/chrome/browser/resources/settings/printing_page/printing_page.html index 90e18fbb2e5..6513b2f9f1a 100644 --- a/chromium/chrome/browser/resources/settings/printing_page/printing_page.html +++ b/chromium/chrome/browser/resources/settings/printing_page/printing_page.html @@ -22,7 +22,7 @@ <neon-animatable route-path="default"> <if expr="chromeos"> <div id="cupsPrinters" class="settings-box first" - on-tap="onTapCupsPrinters_" actionable> + on-click="onTapCupsPrinters_" actionable> <div class="start">$i18n{cupsPrintersTitle}</div> <button class="subpage-arrow" is="paper-icon-button-light" aria-label="$i18n{cupsPrintersTitle}"></button> @@ -30,14 +30,14 @@ </if> <if expr="not chromeos"> <div class="settings-box first" - on-tap="onTapLocalPrinters_" actionable> + on-click="onTapLocalPrinters_" actionable> <div class="start">$i18n{localPrintersTitle}</div> <button class="subpage-arrow" is="paper-icon-button-light" aria-label="$i18n{localPrintersTitle}"></button> </div> </if> <div id="cloudPrinters" class="settings-box" - on-tap="onTapCloudPrinters_" actionable> + on-click="onTapCloudPrinters_" actionable> <div class="start">$i18n{cloudPrintersTitle}</div> <button class="subpage-arrow" is="paper-icon-button-light" aria-label="$i18n{cloudPrintersTitle}"></button> diff --git a/chromium/chrome/browser/resources/settings/privacy_page/privacy_page.html b/chromium/chrome/browser/resources/settings/privacy_page/privacy_page.html index 1ba4c86e60b..d0bd4cfddfd 100644 --- a/chromium/chrome/browser/resources/settings/privacy_page/privacy_page.html +++ b/chromium/chrome/browser/resources/settings/privacy_page/privacy_page.html @@ -9,7 +9,6 @@ <link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-icon-button/paper-icon-button-light.html"> <link rel="import" href="../clear_browsing_data_dialog/clear_browsing_data_dialog.html"> -<link rel="import" href="../clear_browsing_data_dialog/clear_browsing_data_dialog_tabs.html"> <link rel="import" href="../controls/settings_toggle_button.html"> <link rel="import" href="../lifetime_browser_proxy.html"> <link rel="import" href="../route.html"> @@ -40,16 +39,9 @@ <style include="settings-shared"> </style> <template is="dom-if" if="[[showClearBrowsingDataDialog_]]" restamp> - <template is="dom-if" if="[[!tabsInCbd_]]" restamp> - <settings-clear-browsing-data-dialog prefs="{{prefs}}" - on-close="onDialogClosed_"> - </settings-clear-browsing-data-dialog> - </template> - <template is="dom-if" if="[[tabsInCbd_]]" restamp> - <settings-clear-browsing-data-dialog-tabs prefs="{{prefs}}" - on-close="onDialogClosed_"> - </settings-clear-browsing-data-dialog-tabs> - </template> + <settings-clear-browsing-data-dialog prefs="{{prefs}}" + on-close="onDialogClosed_"> + </settings-clear-browsing-data-dialog> </template> <template id="doNotTrackDialogIf" is="dom-if" if="[[showDoNotTrackDialog_]]" notify-dom-change> @@ -60,11 +52,11 @@ <div slot="body">$i18nRaw{doNotTrackDialogMessage}</div> <div slot="button-container"> <paper-button class="cancel-button" - on-tap="onDoNotTrackDialogCancel_"> + on-click="onDoNotTrackDialogCancel_"> $i18n{cancel} </paper-button> <paper-button class="action-button" - on-tap="onDoNotTrackDialogConfirm_"> + on-click="onDoNotTrackDialogConfirm_"> $i18n{confirm} </paper-button> </div> @@ -141,7 +133,7 @@ </if> <if expr="use_nss_certs or is_win or is_macosx"> <div id="manageCertificates" class="settings-box two-line" - actionable on-tap="onManageCertificatesTap_"> + actionable on-click="onManageCertificatesTap_"> <div class="start"> $i18n{manageCertificates} <div class="secondary" id="manageCertificatesSecondary"> @@ -162,7 +154,7 @@ </if> <div id="site-settings-subpage-trigger" class="settings-box two-line" actionable - on-tap="onSiteSettingsTap_"> + on-click="onSiteSettingsTap_"> <div class="start"> [[siteSettingsPageTitle_()]] <div class="secondary" id="siteSettingsSecondary"> @@ -174,7 +166,7 @@ aria-describedby="siteSettingsSecondary"></button> </div> <div class="settings-box two-line" id="clearBrowsingData" - on-tap="onClearBrowsingDataTap_" actionable> + on-click="onClearBrowsingDataTap_" actionable> <div class="start"> $i18n{clearBrowsingData} <div class="secondary" id="clearBrowsingDataSecondary"> @@ -265,7 +257,7 @@ label="$i18n{thirdPartyCookie}" sub-label="$i18n{thirdPartyCookieSublabel}"> </settings-toggle-button> - <div class="settings-box" actionable on-tap="onSiteDataTap_"> + <div class="settings-box" actionable on-click="onSiteDataTap_"> <div class="start" id="cookiesLink"> $i18n{siteSettingsCookieLink} </div> @@ -375,6 +367,21 @@ </category-setting-exceptions> </settings-subpage> </template> + <template is="dom-if" if="[[enableSensorsContentSetting_]]" no-search> + <template is="dom-if" route-path="/content/sensors" no-search> + <settings-subpage page-title="$i18n{siteSettingsSensors}"> + <category-default-setting + toggle-off-label="$i18n{siteSettingsSensorsBlock}" + toggle-on-label="$i18n{siteSettingsSensorsAllow}" + category="{{ContentSettingsTypes.SENSORS}}"> + </category-default-setting> + <category-setting-exceptions + category="{{ContentSettingsTypes.SENSORS}}" read-only-list + block-header="$i18n{siteSettingsBlock}"> + </category-setting-exceptions> + </settings-subpage> + </template> + </template> <template is="dom-if" route-path="/content/notifications" no-search> <settings-subpage page-title="$i18n{siteSettingsCategoryNotifications}"> <category-default-setting @@ -479,7 +486,7 @@ <template is="dom-if" route-path="/cookies/detail" no-search> <settings-subpage page-title="[[pageTitle]]"> <paper-button slot="subpage-title-extra" class="secondary-button" - on-tap="onRemoveAllCookiesFromSite_"> + on-click="onRemoveAllCookiesFromSite_"> $i18n{siteSettingsCookieRemoveAll} </paper-button> <site-data-details-subpage page-title="{{pageTitle}}"> diff --git a/chromium/chrome/browser/resources/settings/privacy_page/privacy_page.js b/chromium/chrome/browser/resources/settings/privacy_page/privacy_page.js index e55ac46515f..abb969d0d3b 100644 --- a/chromium/chrome/browser/resources/settings/privacy_page/privacy_page.js +++ b/chromium/chrome/browser/resources/settings/privacy_page/privacy_page.js @@ -80,14 +80,6 @@ Polymer({ showClearBrowsingDataDialog_: Boolean, /** @private */ - tabsInCbd_: { - type: Boolean, - value: function() { - return loadTimeData.getBoolean('tabsInCbd'); - } - }, - - /** @private */ showDoNotTrackDialog_: { type: Boolean, value: false, @@ -128,6 +120,15 @@ Polymer({ } }, + /** @private */ + enableSensorsContentSetting_: { + type: Boolean, + readOnly: true, + value: function() { + return loadTimeData.getBoolean('enableSensorsContentSetting'); + } + }, + /** @private {!Map<string, string>} */ focusConfig_: { type: Object, @@ -282,7 +283,7 @@ Polymer({ /** @private */ onDialogClosed_: function() { - settings.navigateToPreviousRoute(); + settings.navigateTo(settings.routes.CLEAR_BROWSER_DATA.parent); cr.ui.focusWithoutInk(assert(this.$.clearBrowsingDataTrigger)); }, @@ -337,16 +338,21 @@ Polymer({ // </if> /** - * @param {boolean} enabled Whether reporting is enabled or not. + * @param {!SberPrefState} sberPrefState SBER enabled and managed state. * @private */ - setSafeBrowsingExtendedReporting_: function(enabled) { + setSafeBrowsingExtendedReporting_: function(sberPrefState) { // Ignore the next change because it will happen when we set the pref. - this.safeBrowsingExtendedReportingPref_ = { + const pref = { key: '', type: chrome.settingsPrivate.PrefType.BOOLEAN, - value: enabled, + value: sberPrefState.enabled, }; + if (sberPrefState.managed) { + pref.enforcement = chrome.settingsPrivate.Enforcement.ENFORCED; + pref.controlledBy = chrome.settingsPrivate.ControlledBy.USER_POLICY; + } + this.safeBrowsingExtendedReportingPref_ = pref; }, /** diff --git a/chromium/chrome/browser/resources/settings/privacy_page/privacy_page_browser_proxy.js b/chromium/chrome/browser/resources/settings/privacy_page/privacy_page_browser_proxy.js index e5037cfef21..63790dfadb2 100644 --- a/chromium/chrome/browser/resources/settings/privacy_page/privacy_page_browser_proxy.js +++ b/chromium/chrome/browser/resources/settings/privacy_page/privacy_page_browser_proxy.js @@ -7,6 +7,9 @@ /** @typedef {{enabled: boolean, managed: boolean}} */ let MetricsReporting; +/** @typedef {{enabled: boolean, managed: boolean}} */ +let SberPrefState; + cr.define('settings', function() { /** @interface */ class PrivacyPageBrowserProxy { @@ -25,7 +28,7 @@ cr.define('settings', function() { // </if> - /** @return {!Promise<boolean>} */ + /** @return {!Promise<!SberPrefState>} */ getSafeBrowsingExtendedReporting() {} /** @param {boolean} enabled */ diff --git a/chromium/chrome/browser/resources/settings/reset_page/powerwash_dialog.html b/chromium/chrome/browser/resources/settings/reset_page/powerwash_dialog.html index 1459a9afe0e..98a82fd5991 100644 --- a/chromium/chrome/browser/resources/settings/reset_page/powerwash_dialog.html +++ b/chromium/chrome/browser/resources/settings/reset_page/powerwash_dialog.html @@ -22,10 +22,10 @@ </span> </div> <div slot="button-container"> - <paper-button class="cancel-button" on-tap="onCancelTap_" + <paper-button class="cancel-button" on-click="onCancelTap_" id="cancel">$i18n{cancel}</paper-button> <paper-button class="action-button" id="powerwash" - on-tap="onRestartTap_">$i18n{powerwashDialogButton}</paper-button> + on-click="onRestartTap_">$i18n{powerwashDialogButton}</paper-button> </div> </dialog> </template> diff --git a/chromium/chrome/browser/resources/settings/reset_page/reset_page.html b/chromium/chrome/browser/resources/settings/reset_page/reset_page.html index 82b9c6cf022..d45c9976996 100644 --- a/chromium/chrome/browser/resources/settings/reset_page/reset_page.html +++ b/chromium/chrome/browser/resources/settings/reset_page/reset_page.html @@ -17,6 +17,7 @@ <if expr="_google_chrome and is_win"> <link rel="import" href="../chrome_cleanup_page/chrome_cleanup_page.html"> +<link rel="import" href="../incompatible_applications_page/incompatible_applications_page.html"> </if> <dom-module id="settings-reset-page"> @@ -25,7 +26,7 @@ <settings-animated-pages id="reset-pages" section="reset"> <neon-animatable route-path="default"> <div class="settings-box first two-line" id="resetProfile" - on-tap="onShowResetProfileDialog_" actionable> + on-click="onShowResetProfileDialog_" actionable> <div class="start"> $i18n{resetTrigger} <div class="secondary" id="resetProfileSecondary"> @@ -44,7 +45,7 @@ </template> <if expr="chromeos"> <div class="settings-box two-line" id="powerwash" actionable - on-tap="onShowPowerwashDialog_" hidden="[[!allowPowerwash_]]"> + on-click="onShowPowerwashDialog_" hidden="[[!allowPowerwash_]]"> <div class="start"> $i18n{powerwashTitle} <div class="secondary" id="powerwashSecondary"> @@ -62,20 +63,28 @@ </if> <if expr="_google_chrome and is_win"> <template is="dom-if" if="[[userInitiatedCleanupsEnabled_]]" restamp> - <div class="settings-box two-line" id="chromeCleanupSubpageTrigger" - on-tap="onChromeCleanupTap_" actionable> - <div class="start"> - $i18n{resetCleanupComputerTrigger} - <div class="secondary" id="chromeCleanupSecondary"> - $i18n{resetCleanupComputerTriggerDescription} - </div> - </div> + <div class="settings-box" id="chromeCleanupSubpageTrigger" + on-click="onChromeCleanupTap_" actionable> + <div class="start">$i18n{resetCleanupComputerTrigger}</div> <button id="chromeCleanupArrow" is="paper-icon-button-light" class="subpage-arrow" aria-label="$i18n{resetCleanupComputerTrigger}" aria-describedby="chromeCleanupSecondary"></button> </div> </template> + <template is="dom-if" if="[[showIncompatibleApplications_]]" restamp> + <div class="settings-box" + id="incompatibleApplicationsSubpageTrigger" + on-click="onIncompatibleApplicationsTap_" actionable> + <div class="start"> + $i18n{incompatibleApplicationsResetCardTitle} + </div> + <button is="paper-icon-button-light" + class="subpage-arrow" + aria-label="$i18n{incompatibleApplicationsResetCardTitle}" + aria-describedby="incompatibleApplicationsSecondary"></button> + </div> + </template> </if> </neon-animatable> <if expr="_google_chrome and is_win"> @@ -89,6 +98,16 @@ </settings-subpage> </template> </template> + <template is="dom-if" if="[[showIncompatibleApplications_]]"> + <template is="dom-if" route-path="/incompatibleApplications"> + <settings-subpage id="incompatibleApplicationsSubpage" + associated-control="[[$$('#incompatibleApplicationsSubpageTrigger')]]" + page-title="$i18n{incompatibleApplicationsResetCardTitle}"> + <settings-incompatible-applications-page> + </settings-incompatible-applications-page> + </settings-subpage> + </template> + </template> </if> </settings-animated-pages> </template> diff --git a/chromium/chrome/browser/resources/settings/reset_page/reset_page.js b/chromium/chrome/browser/resources/settings/reset_page/reset_page.js index fb5c2229223..10082a0b8f8 100644 --- a/chromium/chrome/browser/resources/settings/reset_page/reset_page.js +++ b/chromium/chrome/browser/resources/settings/reset_page/reset_page.js @@ -40,6 +40,14 @@ Polymer({ return loadTimeData.getBoolean('userInitiatedCleanupsEnabled'); }, }, + + /** @private */ + showIncompatibleApplications_: { + type: Boolean, + value: function() { + return loadTimeData.getBoolean('showIncompatibleApplications'); + }, + }, // </if> }, @@ -87,9 +95,15 @@ Polymer({ // </if> // <if expr="_google_chrome and is_win"> + /** @private */ onChromeCleanupTap_: function() { settings.navigateTo(settings.routes.CHROME_CLEANUP); }, + + /** @private */ + onIncompatibleApplicationsTap_: function() { + settings.navigateTo(settings.routes.INCOMPATIBLE_APPLICATIONS); + }, // </if> }); diff --git a/chromium/chrome/browser/resources/settings/reset_page/reset_profile_banner.html b/chromium/chrome/browser/resources/settings/reset_page/reset_profile_banner.html index 3f49fa4eb03..aed186e6fab 100644 --- a/chromium/chrome/browser/resources/settings/reset_page/reset_profile_banner.html +++ b/chromium/chrome/browser/resources/settings/reset_page/reset_profile_banner.html @@ -19,10 +19,10 @@ </span> </div> <div slot="button-container"> - <paper-button class="cancel-button" on-tap="onOkTap_" id="ok"> + <paper-button class="cancel-button" on-click="onOkTap_" id="ok"> $i18n{ok} </paper-button> - <paper-button class="action-button" on-tap="onResetTap_" id="reset"> + <paper-button class="action-button" on-click="onResetTap_" id="reset"> $i18n{resetProfileBannerButton} </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/reset_page/reset_profile_dialog.html b/chromium/chrome/browser/resources/settings/reset_page/reset_profile_dialog.html index ef12529acb3..be6154e2f30 100644 --- a/chromium/chrome/browser/resources/settings/reset_page/reset_profile_dialog.html +++ b/chromium/chrome/browser/resources/settings/reset_page/reset_profile_dialog.html @@ -35,11 +35,11 @@ <div slot="button-container"> <paper-spinner-lite id="resetSpinner" active="[[clearingInProgress_]]"> </paper-spinner-lite> - <paper-button class="cancel-button" on-tap="onCancelTap_" + <paper-button class="cancel-button" on-click="onCancelTap_" id="cancel" disabled="[[clearingInProgress_]]"> $i18n{cancel} </paper-button> - <paper-button class="action-button" on-tap="onResetTap_" + <paper-button class="action-button" on-click="onResetTap_" id="reset" disabled="[[clearingInProgress_]]"> $i18n{resetPageCommit} </paper-button> diff --git a/chromium/chrome/browser/resources/settings/reset_page/reset_profile_dialog.js b/chromium/chrome/browser/resources/settings/reset_page/reset_profile_dialog.js index 683e2692f9e..22066b37961 100644 --- a/chromium/chrome/browser/resources/settings/reset_page/reset_profile_dialog.js +++ b/chromium/chrome/browser/resources/settings/reset_page/reset_profile_dialog.js @@ -77,7 +77,7 @@ Polymer({ }); this.$$('paper-checkbox a') - .addEventListener('tap', this.onShowReportedSettingsTap_.bind(this)); + .addEventListener('click', this.onShowReportedSettingsTap_.bind(this)); // Prevent toggling of the checkbox when hitting the "Enter" key on the // link. this.$$('paper-checkbox a').addEventListener('keydown', function(e) { diff --git a/chromium/chrome/browser/resources/settings/route.js b/chromium/chrome/browser/resources/settings/route.js index de01fd22a9c..68183214b91 100644 --- a/chromium/chrome/browser/resources/settings/route.js +++ b/chromium/chrome/browser/resources/settings/route.js @@ -36,6 +36,7 @@ * FONTS: (undefined|!settings.Route), * GOOGLE_ASSISTANT: (undefined|!settings.Route), * IMPORT_DATA: (undefined|!settings.Route), + * INCOMPATIBLE_APPLICATIONS: (undefined|!settings.Route), * INPUT_METHODS: (undefined|!settings.Route), * INTERNET: (undefined|!settings.Route), * INTERNET_NETWORKS: (undefined|!settings.Route), @@ -73,6 +74,7 @@ * SITE_SETTINGS_HANDLERS: (undefined|!settings.Route), * SITE_SETTINGS_IMAGES: (undefined|!settings.Route), * SITE_SETTINGS_JAVASCRIPT: (undefined|!settings.Route), + * SITE_SETTINGS_SENSORS: (undefined|!settings.Route), * SITE_SETTINGS_SOUND: (undefined|!settings.Route), * SITE_SETTINGS_LOCATION: (undefined|!settings.Route), * SITE_SETTINGS_MICROPHONE: (undefined|!settings.Route), @@ -317,6 +319,7 @@ cr.define('settings', function() { r.SITE_SETTINGS_IMAGES = r.SITE_SETTINGS.createChild('images'); r.SITE_SETTINGS_JAVASCRIPT = r.SITE_SETTINGS.createChild('javascript'); r.SITE_SETTINGS_SOUND = r.SITE_SETTINGS.createChild('sound'); + r.SITE_SETTINGS_SENSORS = r.SITE_SETTINGS.createChild('sensors'); r.SITE_SETTINGS_LOCATION = r.SITE_SETTINGS.createChild('location'); r.SITE_SETTINGS_MICROPHONE = r.SITE_SETTINGS.createChild('microphone'); r.SITE_SETTINGS_NOTIFICATIONS = @@ -388,6 +391,10 @@ cr.define('settings', function() { if (loadTimeData.getBoolean('userInitiatedCleanupsEnabled')) { r.CHROME_CLEANUP = r.RESET.createChild('/cleanup'); } + if (loadTimeData.getBoolean('showIncompatibleApplications')) { + r.INCOMPATIBLE_APPLICATIONS = + r.RESET.createChild('/incompatibleApplications'); + } // </if> } } diff --git a/chromium/chrome/browser/resources/settings/search_engines_page/omnibox_extension_entry.html b/chromium/chrome/browser/resources/settings/search_engines_page/omnibox_extension_entry.html index aa5677369c5..89475dacb36 100644 --- a/chromium/chrome/browser/resources/settings/search_engines_page/omnibox_extension_entry.html +++ b/chromium/chrome/browser/resources/settings/search_engines_page/omnibox_extension_entry.html @@ -35,14 +35,16 @@ </div> <div class="keyword-column">[[engine.keyword]]</div> <button is="paper-icon-button-light" class="icon-more-vert" - on-tap="onDotsTap_" title="$i18n{moreActions}" focus-row-control + on-click="onDotsTap_" title="$i18n{moreActions}" focus-row-control focus-type="menu"> </button> <dialog is="cr-action-menu"> - <button class="dropdown-item" on-tap="onManageTap_" id="manage"> + <button slot="item" class="dropdown-item" on-click="onManageTap_" + id="manage"> $i18n{searchEnginesManageExtension} </button> - <button class="dropdown-item" on-tap="onDisableTap_" id="disable"> + <button slot="item" class="dropdown-item" on-click="onDisableTap_" + id="disable"> $i18n{disable} </button> </dialog> diff --git a/chromium/chrome/browser/resources/settings/search_engines_page/search_engine_dialog.html b/chromium/chrome/browser/resources/settings/search_engines_page/search_engine_dialog.html index a2788c608ec..a8e0591c515 100644 --- a/chromium/chrome/browser/resources/settings/search_engines_page/search_engine_dialog.html +++ b/chromium/chrome/browser/resources/settings/search_engines_page/search_engine_dialog.html @@ -44,10 +44,10 @@ </paper-input> </div> <div slot="button-container"> - <paper-button class="cancel-button" on-tap="cancel_" id="cancel"> + <paper-button class="cancel-button" on-click="cancel_" id="cancel"> $i18n{cancel}</paper-button> <paper-button id="actionButton" class="action-button" - on-tap="onActionButtonTap_"> + on-click="onActionButtonTap_"> [[actionButtonText_]] </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/search_engines_page/search_engine_entry.html b/chromium/chrome/browser/resources/settings/search_engines_page/search_engine_entry.html index f4b23582e1c..5f0f410817a 100644 --- a/chromium/chrome/browser/resources/settings/search_engines_page/search_engine_entry.html +++ b/chromium/chrome/browser/resources/settings/search_engines_page/search_engine_entry.html @@ -54,19 +54,19 @@ <div id="keyword-column"><div>[[engine.keyword]]</div></div> <div id="url-column" class="text-elide">[[engine.url]]</div> <button is="paper-icon-button-light" class="icon-more-vert" - on-tap="onDotsTap_" title="$i18n{moreActions}" focus-row-control + on-click="onDotsTap_" title="$i18n{moreActions}" focus-row-control focus-type="cr-menu-button"> </button> <dialog is="cr-action-menu"> - <button class="dropdown-item" on-tap="onMakeDefaultTap_" + <button slot="item" class="dropdown-item" on-click="onMakeDefaultTap_" hidden$="[[!engine.canBeDefault]]" id="makeDefault"> $i18n{searchEnginesMakeDefault} </button> - <button class="dropdown-item" on-tap="onEditTap_" + <button slot="item" class="dropdown-item" on-click="onEditTap_" hidden$="[[!engine.canBeEdited]]" id="edit"> $i18n{edit} </button> - <button class="dropdown-item" on-tap="onDeleteTap_" + <button slot="item" class="dropdown-item" on-click="onDeleteTap_" hidden$="[[!engine.canBeRemoved]]" id="delete"> $i18n{searchEnginesRemoveFromList} </button> diff --git a/chromium/chrome/browser/resources/settings/search_engines_page/search_engines_list.html b/chromium/chrome/browser/resources/settings/search_engines_page/search_engines_list.html index 507bf4875ad..1e6af9d9737 100644 --- a/chromium/chrome/browser/resources/settings/search_engines_page/search_engines_list.html +++ b/chromium/chrome/browser/resources/settings/search_engines_page/search_engines_list.html @@ -23,7 +23,7 @@ } #outer { - @apply(--settings-list-frame-padding); + @apply --settings-list-frame-padding; } settings-search-engine-entry { diff --git a/chromium/chrome/browser/resources/settings/search_engines_page/search_engines_page.html b/chromium/chrome/browser/resources/settings/search_engines_page/search_engines_page.html index eb06d3cd345..44638d4ee43 100644 --- a/chromium/chrome/browser/resources/settings/search_engines_page/search_engines_page.html +++ b/chromium/chrome/browser/resources/settings/search_engines_page/search_engines_page.html @@ -19,7 +19,7 @@ .extension-engines, #noOtherEngines, .no-search-results { - @apply(--settings-list-frame-padding); + @apply --settings-list-frame-padding; } settings-omnibox-extension-entry { @@ -43,7 +43,7 @@ <div class="settings-box first"> <h2 class="start">$i18n{searchEnginesOther}</h2> <paper-button class="secondary-button header-aligned-button" - on-tap="onAddSearchEngineTap_" id="addSearchEngine"> + on-click="onAddSearchEngineTap_" id="addSearchEngine"> $i18n{add} </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/search_page/search_page.html b/chromium/chrome/browser/resources/settings/search_page/search_page.html index 1e9f88f1e7c..d32e97c489c 100644 --- a/chromium/chrome/browser/resources/settings/search_page/search_page.html +++ b/chromium/chrome/browser/resources/settings/search_page/search_page.html @@ -84,7 +84,7 @@ <!-- Manage search engines --> <div id="engines-subpage-trigger" class="settings-box" - on-tap="onManageSearchEnginesTap_" actionable> + on-click="onManageSearchEnginesTap_" actionable> <div class="start"> $i18n{searchEnginesManage} </div> @@ -96,7 +96,7 @@ <!-- Google Assistant --> <template is="dom-if" if="[[voiceInteractionFeatureEnabled_]]"> <div id="assistant-subpage-trigger" class="settings-box two-line" - on-tap="onGoogleAssistantTap_" actionable> + on-click="onGoogleAssistantTap_" actionable> <div class="start"> $i18n{searchGoogleAssistant} <div class="secondary"> @@ -111,7 +111,7 @@ <template is="dom-if" if="[[!assistantOn_]]"> <div class="separator"></div> <paper-button id="enable" class="secondary-button" - on-tap="onAssistantTurnOnTap_" + on-click="onAssistantTurnOnTap_" aria-label="$i18n{searchPageTitle}" aria-describedby="secondaryText"> $i18n{assistantTurnOn} diff --git a/chromium/chrome/browser/resources/settings/search_settings.js b/chromium/chrome/browser/resources/settings/search_settings.js index 684aed657e9..71971fa8246 100644 --- a/chromium/chrome/browser/resources/settings/search_settings.js +++ b/chromium/chrome/browser/resources/settings/search_settings.js @@ -17,18 +17,6 @@ cr.exportPath('settings'); settings.SearchResult; cr.define('settings', function() { - /** @type {string} */ - const WRAPPER_CSS_CLASS = 'search-highlight-wrapper'; - - /** @type {string} */ - const ORIGINAL_CONTENT_CSS_CLASS = 'search-highlight-original-content'; - - /** @type {string} */ - const HIT_CSS_CLASS = 'search-highlight-hit'; - - /** @type {string} */ - const SEARCH_BUBBLE_CSS_CLASS = 'search-bubble'; - /** * A CSS attribute indicating that a node should be ignored during searching. * @type {string} @@ -65,59 +53,8 @@ cr.define('settings', function() { * @private */ function findAndRemoveHighlights_(node) { - const wrappers = node.querySelectorAll('* /deep/ .' + WRAPPER_CSS_CLASS); - - for (let i = 0; i < wrappers.length; i++) { - const wrapper = wrappers[i]; - const originalNode = - wrapper.querySelector('.' + ORIGINAL_CONTENT_CSS_CLASS); - wrapper.parentElement.replaceChild(originalNode.firstChild, wrapper); - } - - const searchBubbles = - node.querySelectorAll('* /deep/ .' + SEARCH_BUBBLE_CSS_CLASS); - for (let j = 0; j < searchBubbles.length; j++) - searchBubbles[j].remove(); - } - - /** - * Applies the highlight UI (yellow rectangle) around all matches in |node|. - * @param {!Node} node The text node to be highlighted. |node| ends up - * being removed from the DOM tree. - * @param {!Array<string>} tokens The string tokens after splitting on the - * relevant regExp. Even indices hold text that doesn't need highlighting, - * odd indices hold the text to be highlighted. For example: - * const r = new RegExp('(foo)', 'i'); - * 'barfoobar foo bar'.split(r) => ['bar', 'foo', 'bar ', 'foo', ' bar'] - * @private - */ - function highlight_(node, tokens) { - const wrapper = document.createElement('span'); - wrapper.classList.add(WRAPPER_CSS_CLASS); - // Use existing node as placeholder to determine where to insert the - // replacement content. - node.parentNode.replaceChild(wrapper, node); - - // Keep the existing node around for when the highlights are removed. The - // existing text node might be involved in data-binding and therefore should - // not be discarded. - const span = document.createElement('span'); - span.classList.add(ORIGINAL_CONTENT_CSS_CLASS); - span.style.display = 'none'; - span.appendChild(node); - wrapper.appendChild(span); - - for (let i = 0; i < tokens.length; ++i) { - if (i % 2 == 0) { - wrapper.appendChild(document.createTextNode(tokens[i])); - } else { - const hitSpan = document.createElement('span'); - hitSpan.classList.add(HIT_CSS_CLASS); - hitSpan.style.backgroundColor = '#ffeb3b'; // --var(--paper-yellow-500) - hitSpan.textContent = tokens[i]; - wrapper.appendChild(hitSpan); - } - } + cr.search_highlight_utils.findAndRemoveHighlights(node); + cr.search_highlight_utils.findAndRemoveBubbles(node); } /** @@ -163,8 +100,10 @@ cr.define('settings', function() { // displayed within an <option>. // TODO(dpapad): highlight <select> controls with a search bubble // instead. - if (node.parentNode.nodeName != 'OPTION') - highlight_(node, textContent.split(request.regExp)); + if (node.parentNode.nodeName != 'OPTION') { + cr.search_highlight_utils.highlight( + node, textContent.split(request.regExp)); + } } // Returning early since TEXT_NODE nodes never have children. return; @@ -189,44 +128,6 @@ cr.define('settings', function() { } /** - * Highlights the HTML control that triggers a subpage, by displaying a search - * bubble. - * @param {!HTMLElement} element The element to be highlighted. - * @param {string} rawQuery The search query. - * @private - */ - function highlightAssociatedControl_(element, rawQuery) { - let searchBubble = element.querySelector('.' + SEARCH_BUBBLE_CSS_CLASS); - // If the associated control has already been highlighted due to another - // match on the same subpage, there is no need to do anything. - if (searchBubble) - return; - - searchBubble = document.createElement('div'); - searchBubble.classList.add(SEARCH_BUBBLE_CSS_CLASS); - const innards = document.createElement('div'); - innards.classList.add('search-bubble-innards', 'text-elide'); - innards.textContent = rawQuery; - searchBubble.appendChild(innards); - element.appendChild(searchBubble); - - // Dynamically position the bubble at the edge the associated control - // element. - const updatePosition = function() { - searchBubble.style.top = element.offsetTop + - (innards.classList.contains('above') ? -searchBubble.offsetHeight : - element.offsetHeight) + - 'px'; - }; - updatePosition(); - - searchBubble.addEventListener('mouseover', function() { - innards.classList.toggle('above'); - updatePosition(); - }); - } - - /** * Finds and makes visible the <settings-section> parent of |node|. * @param {!Node} node * @param {string} rawQuery @@ -253,8 +154,10 @@ cr.define('settings', function() { // Need to add the search bubble after the parent SETTINGS-SECTION has // become visible, otherwise |offsetWidth| returns zero. - if (associatedControl) - highlightAssociatedControl_(associatedControl, rawQuery); + if (associatedControl) { + cr.search_highlight_utils.highlightControlWithBubble( + associatedControl, rawQuery); + } } /** @abstract */ diff --git a/chromium/chrome/browser/resources/settings/settings.html b/chromium/chrome/browser/resources/settings/settings.html index 8732184b614..2f8a74473c8 100644 --- a/chromium/chrome/browser/resources/settings/settings.html +++ b/chromium/chrome/browser/resources/settings/settings.html @@ -10,6 +10,8 @@ html { background-color: #f1f1f1; overflow: hidden; + /* Remove 300ms delay for 'click' event, when using touch interface. */ + touch-action: manipulation; } .loading { @@ -20,6 +22,7 @@ </head> <body> <settings-ui></settings-ui> + <link rel="stylesheet" href="chrome://resources/css/md_colors.css"> <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css"> <link rel="import" href="chrome://resources/html/polymer.html"> <link rel="import" href="settings_ui/settings_ui.html"> diff --git a/chromium/chrome/browser/resources/settings/settings_main/settings_main.html b/chromium/chrome/browser/resources/settings/settings_main/settings_main.html index fcbd63786ef..31e3040c21e 100644 --- a/chromium/chrome/browser/resources/settings/settings_main/settings_main.html +++ b/chromium/chrome/browser/resources/settings/settings_main/settings_main.html @@ -2,6 +2,7 @@ <link rel="import" href="chrome://resources/cr_elements/hidden_style_css.html"> <link rel="import" href="chrome://resources/cr_elements/icons.html"> +<link rel="import" href="chrome://resources/html/search_highlight_utils.html"> <link rel="import" href="chrome://resources/html/promise_resolver.html"> <link rel="import" href="chrome://resources/polymer/v1_0/iron-a11y-announcer/iron-a11y-announcer.html"> <link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html"> diff --git a/chromium/chrome/browser/resources/settings/settings_page/settings_animated_pages.html b/chromium/chrome/browser/resources/settings/settings_page/settings_animated_pages.html index 5b3e82131ca..655b3faa8a0 100644 --- a/chromium/chrome/browser/resources/settings/settings_page/settings_animated_pages.html +++ b/chromium/chrome/browser/resources/settings/settings_page/settings_animated_pages.html @@ -11,6 +11,7 @@ <link rel="import" href="chrome://resources/polymer/v1_0/neon-animation/neon-animatable.html"> <link rel="import" href="chrome://resources/polymer/v1_0/neon-animation/neon-animated-pages.html"> <link rel="import" href="chrome://resources/polymer/v1_0/neon-animation/neon-animation-runner-behavior.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/neon-animation/web-animations.html"> <link rel="import" href="../animation/fade_animations.html"> <link rel="import" href="../route.html"> diff --git a/chromium/chrome/browser/resources/settings/settings_page/settings_section.html b/chromium/chrome/browser/resources/settings/settings_page/settings_section.html index 644879a6d93..3daf5135314 100644 --- a/chromium/chrome/browser/resources/settings/settings_page/settings_section.html +++ b/chromium/chrome/browser/resources/settings/settings_page/settings_section.html @@ -20,13 +20,13 @@ } #header .title { - @apply(--cr-section-text); + @apply --cr-section-text; margin-bottom: 0; margin-top: var(--settings-page-vertical-margin); } #card { - @apply(--shadow-elevation-2dp); + @apply --shadow-elevation-2dp; background-color: white; border-radius: 2px; flex: 1; @@ -39,7 +39,7 @@ :host(.expanding) #card, :host(.collapsing) #card, :host(.expanded) #card { - @apply(--shadow-elevation-4dp); + @apply --shadow-elevation-4dp; overflow: hidden; /* A stacking context constrains sliding sub-pages to the card. */ z-index: 0; diff --git a/chromium/chrome/browser/resources/settings/settings_page/settings_subpage.html b/chromium/chrome/browser/resources/settings/settings_page/settings_subpage.html index 12b26d259d6..1021acdcbe8 100644 --- a/chromium/chrome/browser/resources/settings/settings_page/settings_subpage.html +++ b/chromium/chrome/browser/resources/settings/settings_page/settings_subpage.html @@ -26,7 +26,7 @@ } #learnMore { - @apply(--cr-paper-icon-button-margin); + @apply --cr-paper-icon-button-margin; align-items: center; display: flex; height: var(--cr-icon-ripple-size); @@ -42,12 +42,12 @@ } paper-spinner-lite { - @apply(--cr-icon-height-width); + @apply --cr-icon-height-width; } h1 { flex: 1; /* Push other items to the end. */ - @apply(--cr-title-text); + @apply --cr-title-text; } settings-subpage-search { @@ -56,7 +56,7 @@ } </style> <div class="settings-box first" id="headerLine"> - <button is="paper-icon-button-light" on-tap="onTapBack_" + <button is="paper-icon-button-light" on-click="onTapBack_" aria-label="$i18n{back}" class="icon-arrow-back"> </button> <h1>[[pageTitle]]</h1> diff --git a/chromium/chrome/browser/resources/settings/settings_page/settings_subpage_search.html b/chromium/chrome/browser/resources/settings/settings_page/settings_subpage_search.html index 4f4245f7fec..da6272b5834 100644 --- a/chromium/chrome/browser/resources/settings/settings_page/settings_subpage_search.html +++ b/chromium/chrome/browser/resources/settings/settings_page/settings_subpage_search.html @@ -71,10 +71,10 @@ <paper-input-container no-label-float> <input id="searchInput" type="search" on-search="onSearchTermSearch" on-input="onSearchTermInput" aria-label$="[[label]]" incremental - autofocus$="[[autofocus]]" placeholder="[[label]]"> - <button suffix is="paper-icon-button-light" id="clearSearch" - class="icon-cancel" on-tap="onTapClear_" title="[[clearLabel]]" - hidden$="[[!hasSearchText]]"> + autofocus$="[[autofocus]]" placeholder="[[label]]" slot="input"> + <button is="paper-icon-button-light" id="clearSearch" + class="icon-cancel" on-click="onTapClear_" title="[[clearLabel]]" + hidden$="[[!hasSearchText]]" slot="suffix"> </button> </paper-input-container> </template> diff --git a/chromium/chrome/browser/resources/settings/settings_resources.grd b/chromium/chrome/browser/resources/settings/settings_resources.grd index 34e3036a3cc..e4122b701b2 100644 --- a/chromium/chrome/browser/resources/settings/settings_resources.grd +++ b/chromium/chrome/browser/resources/settings/settings_resources.grd @@ -325,6 +325,26 @@ file="chrome_cleanup_page/items_to_remove_list.js" type="chrome_html"/> </if> + <if expr="is_win and _google_chrome"> + <structure name="IDR_SETTINGS_INCOMPATIBLE_APPLICATIONS_PAGE_HTML" + file="incompatible_applications_page/incompatible_applications_page.html" + type="chrome_html" /> + <structure name="IDR_SETTINGS_INCOMPATIBLE_APPLICATIONS_PAGE_JS" + file="incompatible_applications_page/incompatible_applications_page.js" + type="chrome_html" /> + <structure name="IDR_SETTINGS_INCOMPATIBLE_APPLICATIONS_BROWSER_PROXY_HTML" + file="incompatible_applications_page/incompatible_applications_browser_proxy.html" + type="chrome_html" /> + <structure name="IDR_SETTINGS_INCOMPATIBLE_APPLICATIONS_BROWSER_PROXY_JS" + file="incompatible_applications_page/incompatible_applications_browser_proxy.js" + type="chrome_html" /> + <structure name="IDR_SETTINGS_INCOMPATIBLE_APPLICATIONS_INCOMPATIBLE_APPLICATION_ITEM_HTML" + file="incompatible_applications_page/incompatible_application_item.html" + type="chrome_html" /> + <structure name="IDR_SETTINGS_INCOMPATIBLE_APPLICATIONS_INCOMPATIBLE_APPLICATION_ITEM_JS" + file="incompatible_applications_page/incompatible_application_item.js" + type="chrome_html" /> + </if> <structure name="IDR_SETTINGS_CLEAR_BROWSING_DATA_BROWSER_PROXY_HTML" file="clear_browsing_data_dialog/clear_browsing_data_browser_proxy.html" type="chrome_html" /> @@ -337,12 +357,6 @@ <structure name="IDR_SETTINGS_CLEAR_BROWSING_DATA_DIALOG_JS" file="clear_browsing_data_dialog/clear_browsing_data_dialog.js" type="chrome_html" /> - <structure name="IDR_SETTINGS_CLEAR_BROWSING_DATA_DIALOG_TABS_HTML" - file="clear_browsing_data_dialog/clear_browsing_data_dialog_tabs.html" - type="chrome_html" /> - <structure name="IDR_SETTINGS_CLEAR_BROWSING_DATA_DIALOG_TABS_JS" - file="clear_browsing_data_dialog/clear_browsing_data_dialog_tabs.js" - type="chrome_html" /> <structure name="IDR_SETTINGS_HISTORY_DELETION_DIALOG_HTML" file="clear_browsing_data_dialog/history_deletion_dialog.html" type="chrome_html" /> @@ -707,6 +721,14 @@ preprocess="true" allowexternalscript="true" /> <if expr="not chromeos"> + <structure name="IDR_SETTINGS_PEOPLE_PAGE_SYNC_ACCOUNT_CONTROL_HTML" + file="people_page/sync_account_control.html" + type="chrome_html" + flattenhtml="true" + allowexternalscript="true" /> + <structure name="IDR_SETTINGS_PEOPLE_PAGE_SYNC_ACCOUNT_CONTROL_JS" + file="people_page/sync_account_control.js" + type="chrome_html" /> <structure name="IDR_SETTINGS_PEOPLE_PAGE_IMPORT_DATA_DIALOG_HTML" file="people_page/import_data_dialog.html" type="chrome_html" /> @@ -1258,11 +1280,6 @@ type="chrome_html" preprocess="true" allowexternalscript="true" /> - <structure name="IDR_SETTINGS_PEOPLE_PIN_KEYBOARD_HTML" - file="people_page/pin_keyboard.html" - type="chrome_html" - preprocess="true" - allowexternalscript="true"/> <structure name="IDR_SETTINGS_PEOPLE_LOCK_SCREEN_JS" file="people_page/lock_screen.js" type="chrome_html" /> @@ -1319,10 +1336,6 @@ <structure name="IDR_SETTINGS_PEOPLE_FINGERPRINT_BROWSER_PROXY_HTML" file="people_page/fingerprint_browser_proxy.html" type="chrome_html" /> - <structure name="IDR_SETTINGS_KEYBOARD_PIN_JS" - file="people_page/pin_keyboard.js" - type="chrome_html" - preprocess="true" /> <structure name="IDR_SETTINGS_USERS_PAGE_ADD_USER_DIALOG_JS" file="people_page/users_add_user_dialog.js" type="chrome_html" /> diff --git a/chromium/chrome/browser/resources/settings/settings_shared_css.html b/chromium/chrome/browser/resources/settings/settings_shared_css.html index 36f43725cd7..2c89c7a5a36 100644 --- a/chromium/chrome/browser/resources/settings/settings_shared_css.html +++ b/chromium/chrome/browser/resources/settings/settings_shared_css.html @@ -2,6 +2,7 @@ <link rel="import" href="chrome://resources/cr_elements/paper_checkbox_style_css.html"> <link rel="import" href="chrome://resources/cr_elements/paper_input_style_css.html"> <link rel="import" href="chrome://resources/cr_elements/paper_toggle_style_css.html"> +<link rel="import" href="chrome://resources/cr_elements/search_highlight_style_css.html"> <link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html"> <link rel="import" href="chrome://resources/cr_elements/shared_style_css.html"> <link rel="import" href="settings_icons_css.html"> @@ -11,7 +12,7 @@ <!-- Common styles for Material Design settings. --> <dom-module id="settings-shared"> <template> - <style include="settings-icons paper-button-style paper-checkbox-style paper-input-style paper-toggle-style cr-shared-style"> + <style include="settings-icons paper-button-style paper-checkbox-style paper-input-style paper-toggle-style cr-shared-style search-highlight-style"> /* Prevent action-links from being selected to avoid accidental * selection when trying to click it. */ a[is=action-link] { @@ -89,8 +90,9 @@ -webkit-margin-start: 16px; } - /* Adjust the margin between the separator and the first button. */ - .separator + paper-button { + /* Adjust the margin between the separator and the first button. Exclude + * .action-button since it has a background thus is visually different. */ + .separator + paper-button:not(.action-button) { -webkit-margin-start: calc(var(--cr-button-edge-spacing) * -1); } @@ -105,7 +107,7 @@ } paper-toggle-button { - @apply(--settings-actionable); + @apply --settings-actionable; height: var(--settings-row-min-height); user-select: none; /* Prevents text selection while dragging. */ width: 36px; @@ -154,7 +156,7 @@ /* See also: .no-min-width below. */ .text-elide { - @apply(--settings-text-elide); + @apply --cr-text-elide; } /* By default, flexbox children have min-width calculated to be the width @@ -174,7 +176,7 @@ * outside of a settings-box. A list-frame is likely to follow a * settings box. */ .list-frame { - @apply(--settings-list-frame-padding); + @apply --settings-list-frame-padding; align-items: center; display: block; } @@ -230,7 +232,7 @@ /* A settings-box is a horizontal row of text or controls within a * setting section (page or subpage). */ .settings-box { - @apply(--cr-section); + @apply --cr-section; } .settings-box.two-line { @@ -273,7 +275,7 @@ /* The lower line of text in a two-line row. */ .secondary { - @apply(--cr-secondary-text); + @apply --cr-secondary-text; } /* The |:empty| CSS selector only works when there is no whitespace. @@ -358,44 +360,6 @@ width: 16px; } - .search-bubble { - /* RGB value matches var(--paper-yellow-500). */ - --search-bubble-color: rgba(255, 235, 59, 0.9); - position: absolute; - z-index: 1; - } - - .search-bubble-innards { - align-items: center; - background-color: var(--search-bubble-color); - border-radius: 2px; - max-width: 100px; - min-width: 64px; - padding: 4px 10px; - text-align: center; - } - - /* Provides the arrow which points at the anchor element. */ - .search-bubble-innards::after { - background-color: var(--search-bubble-color); - content: ''; - height: 10px; - left: calc(50% - 5px); - position: absolute; - top: -5px; - transform: rotate(-45deg); - width: 10px; - z-index: -1; - } - - /* Turns the arrow direction downwards, when the bubble is placed above - * the anchor element */ - .search-bubble-innards.above::after { - bottom: -5px; - top: auto; - transform: rotate(-135deg); - } - .column-header { color: var(--paper-grey-600); font-weight: 500; diff --git a/chromium/chrome/browser/resources/settings/settings_ui/settings_ui.html b/chromium/chrome/browser/resources/settings/settings_ui/settings_ui.html index 7aca114c1af..9031db844ab 100644 --- a/chromium/chrome/browser/resources/settings/settings_ui/settings_ui.html +++ b/chromium/chrome/browser/resources/settings/settings_ui/settings_ui.html @@ -24,7 +24,7 @@ <template> <style include="settings-shared"> :host { - @apply(--layout-fit); + @apply --layout-fit; color: var(--primary-text-color); display: flex; flex-direction: column; @@ -38,7 +38,7 @@ } cr-toolbar { - @apply(--layout-center); + @apply --layout-center; --iron-icon-fill-color: white; background-color: var(--google-blue-700); color: white; diff --git a/chromium/chrome/browser/resources/settings/settings_ui/settings_ui.js b/chromium/chrome/browser/resources/settings/settings_ui/settings_ui.js index 097280993a4..4b8c62678ec 100644 --- a/chromium/chrome/browser/resources/settings/settings_ui/settings_ui.js +++ b/chromium/chrome/browser/resources/settings/settings_ui/settings_ui.js @@ -118,6 +118,8 @@ Polymer({ loadTimeData.getString('networkListItemConnectingTo'), networkListItemInitializing: loadTimeData.getString('networkListItemInitializing'), + networkListItemScanning: + loadTimeData.getString('networkListItemScanning'), networkListItemNotConnected: loadTimeData.getString('networkListItemNotConnected'), networkListItemNoNetwork: diff --git a/chromium/chrome/browser/resources/settings/settings_vars_css.html b/chromium/chrome/browser/resources/settings/settings_vars_css.html index 595e689d955..5e9062ead38 100644 --- a/chromium/chrome/browser/resources/settings/settings_vars_css.html +++ b/chromium/chrome/browser/resources/settings/settings_vars_css.html @@ -37,12 +37,6 @@ --settings-row-three-line-min-height: var(--cr-section-three-line-min-height); - --settings-text-elide: { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - }; - --settings-separator-height: var(--cr-separator-height); --settings-separator-line: var(--cr-separator-line); diff --git a/chromium/chrome/browser/resources/settings/site_settings/add_site_dialog.html b/chromium/chrome/browser/resources/settings/site_settings/add_site_dialog.html index 94157bee5f4..3aad9d10c78 100644 --- a/chromium/chrome/browser/resources/settings/site_settings/add_site_dialog.html +++ b/chromium/chrome/browser/resources/settings/site_settings/add_site_dialog.html @@ -35,10 +35,10 @@ </paper-checkbox> </div> <div slot="button-container"> - <paper-button class="cancel-button" on-tap="onCancelTap_"> + <paper-button class="cancel-button" on-click="onCancelTap_"> $i18n{cancel} </paper-button> - <paper-button class="action-button" id="add" on-tap="onSubmit_" + <paper-button class="action-button" id="add" on-click="onSubmit_" disabled> $i18n{add} </paper-button> diff --git a/chromium/chrome/browser/resources/settings/site_settings/all_sites.html b/chromium/chrome/browser/resources/settings/site_settings/all_sites.html index 47fa36b5184..2891cc77aa8 100644 --- a/chromium/chrome/browser/resources/settings/site_settings/all_sites.html +++ b/chromium/chrome/browser/resources/settings/site_settings/all_sites.html @@ -18,7 +18,7 @@ <div class="list-frame menu-content vertical-list" id="listContainer"> <template is="dom-repeat" items="[[sites]]"> <div class="list-item"> - <div class="layout horizontal center flex" on-tap="onOriginTap_" + <div class="layout horizontal center flex" on-click="onOriginTap_" actionable> <div class="favicon-image" style$="[[computeSiteIcon(item.origin)]]"> diff --git a/chromium/chrome/browser/resources/settings/site_settings/category_default_setting.js b/chromium/chrome/browser/resources/settings/site_settings/category_default_setting.js index 220b76dad6f..9933ccaaabe 100644 --- a/chromium/chrome/browser/resources/settings/site_settings/category_default_setting.js +++ b/chromium/chrome/browser/resources/settings/site_settings/category_default_setting.js @@ -97,6 +97,7 @@ Polymer({ case settings.ContentSettingsTypes.IMAGES: case settings.ContentSettingsTypes.JAVASCRIPT: case settings.ContentSettingsTypes.SOUND: + case settings.ContentSettingsTypes.SENSORS: case settings.ContentSettingsTypes.POPUPS: case settings.ContentSettingsTypes.PROTOCOL_HANDLERS: diff --git a/chromium/chrome/browser/resources/settings/site_settings/constants.js b/chromium/chrome/browser/resources/settings/site_settings/constants.js index c6a690d271f..f878c560619 100644 --- a/chromium/chrome/browser/resources/settings/site_settings/constants.js +++ b/chromium/chrome/browser/resources/settings/site_settings/constants.js @@ -30,9 +30,10 @@ settings.ContentSettingsTypes = { MIDI_DEVICES: 'midi-sysex', USB_DEVICES: 'usb-chooser-data', ZOOM_LEVELS: 'zoom-levels', - PROTECTED_CONTENT: 'protectedContent', + PROTECTED_CONTENT: 'protected-content', ADS: 'ads', CLIPBOARD: 'clipboard', + SENSORS: 'sensors', }; /** diff --git a/chromium/chrome/browser/resources/settings/site_settings/edit_exception_dialog.html b/chromium/chrome/browser/resources/settings/site_settings/edit_exception_dialog.html index f6ab56fa94a..25da836f905 100644 --- a/chromium/chrome/browser/resources/settings/site_settings/edit_exception_dialog.html +++ b/chromium/chrome/browser/resources/settings/site_settings/edit_exception_dialog.html @@ -19,10 +19,10 @@ </paper-input> </div> <div slot="button-container"> - <paper-button class="cancel-button" on-tap="onCancelTap_" + <paper-button class="cancel-button" on-click="onCancelTap_" id="cancel">$i18n{cancel}</paper-button> <paper-button id="actionButton" class="action-button" - on-tap="onActionButtonTap_" disabled="[[invalid_]]"> + on-click="onActionButtonTap_" disabled="[[invalid_]]"> $i18n{edit} </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/site_settings/protocol_handlers.html b/chromium/chrome/browser/resources/settings/site_settings/protocol_handlers.html index a37356e6dda..b734faea7df 100644 --- a/chromium/chrome/browser/resources/settings/site_settings/protocol_handlers.html +++ b/chromium/chrome/browser/resources/settings/site_settings/protocol_handlers.html @@ -44,34 +44,55 @@ <div class="middle" > <div class="protocol-host">[[item.host]]</div> <div class="secondary protocol-default" - hidden$="[[!isDefault_(index, protocol.default_handler)]]"> + hidden$="[[!item.is_default]]"> $i18n{handlerIsDefault} </div> </div> - <button is="paper-icon-button-light" on-tap="showMenu_" + <button is="paper-icon-button-light" on-click="showMenu_" class="icon-more-vert" title="$i18n{moreActions}"> </button> </div> - </template> </div> </template> <dialog is="cr-action-menu"> - <button class="dropdown-item" on-tap="onDefaultTap_" id="defaultButton" - hidden$="[[isModelDefault_(actionMenuModel_)]]"> + <button slot="item" class="dropdown-item" on-click="onDefaultClick_" + id="defaultButton" hidden$="[[actionMenuModel_.is_default]]"> $i18n{handlerSetDefault} </button> - <button class="dropdown-item" on-tap="onRemoveTap_" id="removeButton"> + <button slot="item" class="dropdown-item" on-click="onRemoveClick_" + id="removeButton"> $i18n{handlerRemove} </button> </dialog> + <template is="dom-if" if="[[ignoredProtocols.length]]"> + <div class="column-header">$i18n{siteSettingsBlocked}</div> + <div class="list-frame menu-content vertical-list"> + <template is="dom-repeat" items="[[ignoredProtocols]]"> + <div class="list-item"> + <div class="favicon-image" style$="[[computeSiteIcon(item.host)]]"> + </div> + <div class="middle" > + <div class="protocol-host">[[item.host]]</div> + <div class="secondary protocol-protocol">[[item.protocol]]</div> + </div> + + <button is="paper-icon-button-light" on-click="onRemoveIgnored_" + class="icon-clear" title="$i18n{moreActions}" + id="removeIgnoredButton"> + </button> + </div> + </template> + </div> + </template> + <if expr="chromeos"> <template is="dom-if" if="[[settingsAppAvailable_]]"> <div class="settings-box first" - on-tap="onManageAndroidAppsTap_" actionable> + on-click="onManageAndroidAppsClick_" actionable> <div class="start"> <div>$i18n{androidAppsManageAppLinks}</div> </div> diff --git a/chromium/chrome/browser/resources/settings/site_settings/protocol_handlers.js b/chromium/chrome/browser/resources/settings/site_settings/protocol_handlers.js index 6ad35cec77e..17667e90278 100644 --- a/chromium/chrome/browser/resources/settings/site_settings/protocol_handlers.js +++ b/chromium/chrome/browser/resources/settings/site_settings/protocol_handlers.js @@ -19,16 +19,14 @@ const MenuActions = { /** * @typedef {{host: string, + * is_default: boolean, * protocol: string, * spec: string}} */ let HandlerEntry; /** - * @typedef {{default_handler: number, - * handlers: !Array<!HandlerEntry>, - * has_policy_recommendations: boolean, - * is_default_handler_set_by_user: boolean, + * @typedef {{handlers: !Array<!HandlerEntry>, * protocol: string}} */ let ProtocolEntry; @@ -52,7 +50,7 @@ Polymer({ /** * The targetted object for menu operations. - * @private {?Object} + * @private {?HandlerEntry} */ actionMenuModel_: Object, @@ -60,6 +58,12 @@ Polymer({ toggleOffLabel: String, toggleOnLabel: String, + /** + * Array of ignored (blocked) protocols. + * @type {!Array<!HandlerEntry>} + */ + ignoredProtocols: Array, + // <if expr="chromeos"> /** @private */ settingsAppAvailable_: { @@ -114,17 +118,6 @@ Polymer({ }, /** - * Returns whether the given index matches the default handler. - * @param {number} index The index to evaluate. - * @param {number} defaultHandler The default handler index. - * @return {boolean} Whether the item is default. - * @private - */ - isDefault_: function(index, defaultHandler) { - return defaultHandler == index; - }, - - /** * Updates the main toggle to set it enabled/disabled. * @param {boolean} enabled The state to set. * @private @@ -144,13 +137,21 @@ Polymer({ /** * Updates the list of ignored protocol handlers. - * @param {!Array<!ProtocolEntry>} args The new (ignored) protocol handler - * list. + * @param {!Array<!HandlerEntry>} ignoredProtocols The new (ignored) protocol + * handler list. * @private */ - setIgnoredProtocolHandlers_: function(args) { - // TODO(finnur): Figure this out. Have yet to be able to trigger the C++ - // side to send this. + setIgnoredProtocolHandlers_: function(ignoredProtocols) { + this.ignoredProtocols = ignoredProtocols; + }, + + /** + * Closes action menu and resets action menu model + * @private + */ + closeActionMenu_: function() { + this.$$('dialog[is=cr-action-menu]').close(); + this.actionMenuModel_ = null; }, /** @@ -165,45 +166,38 @@ Polymer({ * The handler for when "Set Default" is selected in the action menu. * @private */ - onDefaultTap_: function() { - const item = this.actionMenuModel_.item; - - this.$$('dialog[is=cr-action-menu]').close(); - this.actionMenuModel_ = null; + onDefaultClick_: function() { + const item = this.actionMenuModel_; this.browserProxy.setProtocolDefault(item.protocol, item.spec); + this.closeActionMenu_(); }, /** * The handler for when "Remove" is selected in the action menu. * @private */ - onRemoveTap_: function() { - const item = this.actionMenuModel_.item; - - this.$$('dialog[is=cr-action-menu]').close(); - this.actionMenuModel_ = null; + onRemoveClick_: function() { + const item = this.actionMenuModel_; this.browserProxy.removeProtocolHandler(item.protocol, item.spec); + this.closeActionMenu_(); }, /** - * Checks whether or not the selected actionMenuModel is the default handler - * for its protocol. - * @return {boolean} if actionMenuModel_ is default handler of its protocol. + * Handler for removing handlers that were blocked + * @private */ - isModelDefault_: function() { - return !!this.actionMenuModel_ && - (this.actionMenuModel_.index == - this.actionMenuModel_.protocol.default_handler); + onRemoveIgnored_: function(event) { + const item = event.model.item; + this.browserProxy.removeProtocolHandler(item.protocol, item.spec); }, /** * A handler to show the action menu next to the clicked menu button. - * @param {!{model: !{protocol: HandlerEntry, item: ProtocolEntry, - * index: number}}} event + * @param {!{model: !{item: HandlerEntry}}} event * @private */ showMenu_: function(event) { - this.actionMenuModel_ = event.model; + this.actionMenuModel_ = event.model.item; /** @type {!CrActionMenuElement} */ (this.$$('dialog[is=cr-action-menu]')) .showAt( /** @type {!Element} */ ( @@ -215,7 +209,7 @@ Polymer({ * Opens an activity to handle App links (preferred apps). * @private */ - onManageAndroidAppsTap_: function() { + onManageAndroidAppsClick_: function() { this.browserProxy.showAndroidManageAppLinks(); }, // </if> diff --git a/chromium/chrome/browser/resources/settings/site_settings/site_data.html b/chromium/chrome/browser/resources/settings/site_settings/site_data.html index c50d94123c3..a92719b376e 100644 --- a/chromium/chrome/browser/resources/settings/site_settings/site_data.html +++ b/chromium/chrome/browser/resources/settings/site_settings/site_data.html @@ -25,7 +25,7 @@ } paper-spinner-lite { - @apply(--cr-icon-height-width); + @apply --cr-icon-height-width; opacity: 0; transition-delay: 1s; } @@ -46,7 +46,7 @@ <paper-spinner-lite active="[[isLoading_]]"></paper-spinner-lite> <paper-button class="secondary-button" disabled$="[[isLoading_]]" id="removeShowingSites" - on-tap="onRemoveShowingSitesTap_" hidden$="[[!sites.length]]"> + on-click="onRemoveShowingSitesTap_" hidden$="[[!sites.length]]"> [[computeRemoveLabel_(filter)]] </paper-button> </div> @@ -54,7 +54,7 @@ scroll-target="[[subpageScrollTarget]]"> <template> <div class="settings-box two-line site-item" first$="[[!index]]" - on-tap="onSiteTap_" actionable> + on-click="onSiteTap_" actionable> <div class="favicon-image" style$="background-image: [[favicon_(item.site)]]"> </div> @@ -67,7 +67,7 @@ <div class="separator"></div> <button is="paper-icon-button-light" class="icon-delete-gray" title$="[[i18n('siteSettingsCookieRemoveSite', item.site)]]" - on-tap="onRemoveSiteTap_"> + on-click="onRemoveSiteTap_"> </button> </div> </template> @@ -81,10 +81,10 @@ </div> <div slot="body">$i18n{siteSettingsCookieRemoveMultipleConfirmation}</div> <div slot="button-container"> - <paper-button class="cancel-button" on-tap="onCloseDialog_"> + <paper-button class="cancel-button" on-click="onCloseDialog_"> $i18n{cancel} </paper-button> - <paper-button class="action-button" on-tap="onConfirmDelete_"> + <paper-button class="action-button" on-click="onConfirmDelete_"> $i18n{siteSettingsCookiesClearAll} </paper-button> </div> diff --git a/chromium/chrome/browser/resources/settings/site_settings/site_data_details_subpage.html b/chromium/chrome/browser/resources/settings/site_settings/site_data_details_subpage.html index 958e28f8cb5..aedab0ae6d3 100644 --- a/chromium/chrome/browser/resources/settings/site_settings/site_data_details_subpage.html +++ b/chromium/chrome/browser/resources/settings/site_settings/site_data_details_subpage.html @@ -29,7 +29,7 @@ </cr-expand-button> <div class="separator"></div> <button is="paper-icon-button-light" data-id-path$="[[item.idPath]]" - class="icon-clear" on-tap="onRemove_"> + class="icon-clear" on-click="onRemove_"> </button> </div> <iron-collapse class="list-frame vertical-list" diff --git a/chromium/chrome/browser/resources/settings/site_settings/site_details.html b/chromium/chrome/browser/resources/settings/site_settings/site_details.html index 9a10a9ebf6b..b7f1908390e 100644 --- a/chromium/chrome/browser/resources/settings/site_settings/site_details.html +++ b/chromium/chrome/browser/resources/settings/site_settings/site_details.html @@ -44,10 +44,10 @@ $i18n{siteSettingsSiteResetConfirmation} </div> <div slot="button-container"> - <paper-button class="cancel-button" on-tap="onCloseDialog_"> + <paper-button class="cancel-button" on-click="onCloseDialog_"> $i18n{cancel} </paper-button> - <paper-button class="action-button" on-tap="onClearAndReset_"> + <paper-button class="action-button" on-click="onClearAndReset_"> $i18n{siteSettingsSiteResetAll} </paper-button> </div> @@ -66,7 +66,8 @@ <div class="list-item" id="storage" hidden$="[[!storedData_]]"> <div class="start">[[storedData_]]</div> <button is="paper-icon-button-light" class="icon-delete-gray" - on-tap="onConfirmClearStorage_" alt="$i18n{siteSettingsDelete}"> + on-click="onConfirmClearStorage_" + aria-label="$i18n{siteSettingsDelete}"> </button> </div> </div> @@ -89,6 +90,12 @@ icon="settings:mic" id="mic" label="$i18n{siteSettingsMic}"> </site-details-permission> + <site-details-permission + category="{{ContentSettingsTypes.SENSORS}}" + icon="settings:sensors" id="sensors" + label="$i18n{siteSettingsSensors}" + hidden$="[[!enableSensorsContentSetting_]]"> + </site-details-permission> <site-details-permission category="{{ContentSettingsTypes.NOTIFICATIONS}}" icon="settings:notifications" id="notifications" label="$i18n{siteSettingsNotifications}"> @@ -132,12 +139,6 @@ id="midiDevices" label="$i18n{siteSettingsMidiDevices}"> </site-details-permission> <site-details-permission - category="{{ContentSettingsTypes.CLIPBOARD}}" - icon="settings:clipboard" id="clipboard" - label="$i18n{siteSettingsClipboard}" - hidden$="[[!enableClipboardContentSetting_]]"> - </site-details-permission> - <site-details-permission category="{{ContentSettingsTypes.UNSANDBOXED_PLUGINS}}" icon="cr:extension" id="unsandboxedPlugins" label="$i18n{siteSettingsUnsandboxedPlugins}"> @@ -149,10 +150,16 @@ label="$i18n{siteSettingsProtectedContentIdentifiers}"> </site-details-permission> </if> + <site-details-permission + category="{{ContentSettingsTypes.CLIPBOARD}}" + icon="settings:clipboard" id="clipboard" + label="$i18n{siteSettingsClipboard}" + hidden$="[[!enableClipboardContentSetting_]]"> + </site-details-permission> </div> <div id="clearAndReset" class="settings-box" - on-tap="onConfirmClearSettings_" actionable> + on-click="onConfirmClearSettings_" actionable> <div class="start"> $i18n{siteSettingsReset} </div> diff --git a/chromium/chrome/browser/resources/settings/site_settings/site_details.js b/chromium/chrome/browser/resources/settings/site_settings/site_details.js index 6d4f9c7c7db..73bd087ea10 100644 --- a/chromium/chrome/browser/resources/settings/site_settings/site_details.js +++ b/chromium/chrome/browser/resources/settings/site_settings/site_details.js @@ -74,6 +74,15 @@ Polymer({ }, }, + /** @private */ + enableSensorsContentSetting_: { + type: Boolean, + readOnly: true, + value: function() { + return loadTimeData.getBoolean('enableSensorsContentSetting'); + }, + }, + /** * The type of storage for the origin. * @private @@ -236,6 +245,8 @@ Polymer({ onClearAndReset_: function() { this.browserProxy.setOriginPermissions( this.origin, this.getCategoryList_(), settings.ContentSetting.DEFAULT); + if (this.getCategoryList_().includes(settings.ContentSettingsTypes.PLUGINS)) + this.browserProxy.clearFlashPref(this.origin); if (this.storedData_ != '') this.onClearStorage_(); diff --git a/chromium/chrome/browser/resources/settings/site_settings/site_list.html b/chromium/chrome/browser/resources/settings/site_settings/site_list.html index 4f0141e4d32..9090d7df259 100644 --- a/chromium/chrome/browser/resources/settings/site_settings/site_list.html +++ b/chromium/chrome/browser/resources/settings/site_settings/site_list.html @@ -30,29 +30,31 @@ <h2 class="start">[[categoryHeader]]</h2> <paper-button id="addSite" class="secondary-button header-aligned-button" - hidden="[[readOnlyList]]" on-tap="onAddSiteTap_"> + hidden="[[readOnlyList]]" on-click="onAddSiteTap_"> $i18n{add} </paper-button> </div> <dialog is="cr-action-menu"> - <button class="dropdown-item" id="allow" - on-tap="onAllowTap_" hidden$="[[!showAllowAction_]]"> + <button slot="item" class="dropdown-item" id="allow" + on-click="onAllowTap_" hidden$="[[!showAllowAction_]]"> $i18n{siteSettingsActionAllow} </button> - <button class="dropdown-item" id="block" - on-tap="onBlockTap_" hidden$="[[!showBlockAction_]]"> + <button slot="item" class="dropdown-item" id="block" + on-click="onBlockTap_" hidden$="[[!showBlockAction_]]"> $i18n{siteSettingsActionBlock} </button> - <button class="dropdown-item" id="sessionOnly" - on-tap="onSessionOnlyTap_" + <button slot="item" class="dropdown-item" id="sessionOnly" + on-click="onSessionOnlyTap_" hidden$="[[!showSessionOnlyActionForSite_(actionMenuSite_)]]"> $i18n{siteSettingsActionSessionOnly} </button> - <button class="dropdown-item" id="edit" on-tap="onEditTap_"> + <button slot="item" class="dropdown-item" id="edit" + on-click="onEditTap_"> $i18n{edit} </button> - <button class="dropdown-item" id="reset" on-tap="onResetTap_"> + <button slot="item" class="dropdown-item" id="reset" + on-click="onResetTap_"> $i18n{siteSettingsActionReset} </button> </dialog> @@ -64,7 +66,7 @@ <template is="dom-repeat" items="[[sites]]"> <div class="list-item"> <div class="settings-row" - actionable$="[[enableSiteSettings_]]" on-tap="onOriginTap_"> + actionable$="[[enableSiteSettings_]]" on-click="onOriginTap_"> <div class="favicon-image" style$="[[computeSiteIcon(item.origin)]]"> </div> @@ -76,7 +78,7 @@ id="siteDescription">[[computeSiteDescription_(item)]]</div> </div> <template is="dom-if" if="[[enableSiteSettings_]]"> - <div on-tap="onOriginTap_" actionable> + <div on-click="onOriginTap_" actionable> <button class="subpage-arrow" is="paper-icon-button-light" aria-label$="[[item.displayName]]" aria-describedby="siteDescription"></button> @@ -90,12 +92,12 @@ </cr-policy-pref-indicator> </template> <button is="paper-icon-button-light" id="resetSite" - class="icon-delete-gray" on-tap="onResetButtonTap_" + class="icon-delete-gray" on-click="onResetButtonTap_" hidden="[[shouldHideResetButton_(item, readOnlyList)]]" - alt="$i18n{siteSettingsActionReset}"> + aria-label="$i18n{siteSettingsActionReset}"> </button> <button is="paper-icon-button-light" id="actionMenuButton" - class="icon-more-vert" on-tap="onShowActionMenuTap_" + class="icon-more-vert" on-click="onShowActionMenuTap_" hidden="[[shouldHideActionMenu_(item, readOnlyList)]]" title="$i18n{moreActions}"> </button> diff --git a/chromium/chrome/browser/resources/settings/site_settings/site_settings_prefs_browser_proxy.js b/chromium/chrome/browser/resources/settings/site_settings/site_settings_prefs_browser_proxy.js index 81a019ec3c4..7974cfdf2a1 100644 --- a/chromium/chrome/browser/resources/settings/site_settings/site_settings_prefs_browser_proxy.js +++ b/chromium/chrome/browser/resources/settings/site_settings/site_settings_prefs_browser_proxy.js @@ -137,6 +137,13 @@ cr.define('settings', function() { setOriginPermissions(origin, contentTypes, blanketSetting) {} /** + * Clears the flag that's set when the user has changed the Flash permission + * for this particular origin. + * @param {string} origin The origin to clear the Flash preference for. + */ + clearFlashPref(origin) {} + + /** * Resets the category permission for a given origin (expressed as primary * and secondary patterns). Only use this if intending to remove an * exception - use setOriginPermissions() for origin-scoped settings. @@ -307,6 +314,11 @@ cr.define('settings', function() { } /** @override */ + clearFlashPref(origin) { + chrome.send('clearFlashPref', [origin]); + } + + /** @override */ resetCategoryPermissionForPattern( primaryPattern, secondaryPattern, contentType, incognito) { chrome.send( @@ -362,12 +374,12 @@ cr.define('settings', function() { /** @override */ setProtocolDefault(protocol, url) { - chrome.send('setDefault', [[protocol, url]]); + chrome.send('setDefault', [protocol, url]); } /** @override */ removeProtocolHandler(protocol, url) { - chrome.send('removeHandler', [[protocol, url]]); + chrome.send('removeHandler', [protocol, url]); } /** @override */ diff --git a/chromium/chrome/browser/resources/settings/site_settings/usb_devices.html b/chromium/chrome/browser/resources/settings/site_settings/usb_devices.html index 0d49492c635..9b4e5e046d2 100644 --- a/chromium/chrome/browser/resources/settings/site_settings/usb_devices.html +++ b/chromium/chrome/browser/resources/settings/site_settings/usb_devices.html @@ -33,7 +33,7 @@ style$="[[computeSiteIcon(item.origin)]]"></div> <div class="middle">[[item.origin]]</div> - <button is="paper-icon-button-light" on-tap="showMenu_" + <button is="paper-icon-button-light" on-click="showMenu_" class="icon-more-vert" title="$i18n{moreActions}"> </button> </div> @@ -41,7 +41,8 @@ </template> <dialog is="cr-action-menu"> - <button id="removeButton" class="dropdown-item" on-tap="onRemoveTap_"> + <button id="removeButton" slot="item" class="dropdown-item" + on-click="onRemoveTap_"> $i18n{handlerRemove} </button> </dialog> diff --git a/chromium/chrome/browser/resources/settings/site_settings/zoom_levels.html b/chromium/chrome/browser/resources/settings/site_settings/zoom_levels.html index e651cd9ad88..facdc237e3e 100644 --- a/chromium/chrome/browser/resources/settings/site_settings/zoom_levels.html +++ b/chromium/chrome/browser/resources/settings/site_settings/zoom_levels.html @@ -36,7 +36,7 @@ <div class="zoom-label">[[item.zoom]]</div> <div> <button is="paper-icon-button-light" class="icon-clear" - on-tap="removeZoomLevel_" + on-click="removeZoomLevel_" title="$i18n{siteSettingsRemoveZoomLevel}"></button> </div> </div> diff --git a/chromium/chrome/browser/resources/settings/site_settings_page/site_settings_page.html b/chromium/chrome/browser/resources/settings/site_settings_page/site_settings_page.html index c523b2f8536..37210d136c7 100644 --- a/chromium/chrome/browser/resources/settings/site_settings_page/site_settings_page.html +++ b/chromium/chrome/browser/resources/settings/site_settings_page/site_settings_page.html @@ -18,7 +18,7 @@ </style> <template is="dom-if" if="[[enableSiteSettings_]]"> <div class="settings-box first" category$="[[ALL_SITES]]" - data-route="SITE_SETTINGS_ALL" on-tap="onTapNavigate_" actionable> + data-route="SITE_SETTINGS_ALL" on-click="onTapNavigate_" actionable> <iron-icon icon="settings:list"></iron-icon> <div class="middle">$i18n{siteSettingsCategoryAllSites}</div> <button class="subpage-arrow" is="paper-icon-button-light" @@ -29,7 +29,7 @@ </template> <div id="cookies" class="settings-box two-line first" category$="[[ContentSettingsTypes.COOKIES]]" - data-route="SITE_SETTINGS_COOKIES" on-tap="onTapNavigate_" actionable> + data-route="SITE_SETTINGS_COOKIES" on-click="onTapNavigate_" actionable> <iron-icon icon="settings:cookie"></iron-icon> <div class="middle"> $i18n{siteSettingsCookies} @@ -47,7 +47,8 @@ </div> <div id="location" class="settings-box two-line" category$="[[ContentSettingsTypes.GEOLOCATION]]" - data-route="SITE_SETTINGS_LOCATION" on-tap="onTapNavigate_" actionable> + data-route="SITE_SETTINGS_LOCATION" on-click="onTapNavigate_" + actionable> <iron-icon icon="settings:location-on"></iron-icon> <div class="middle"> $i18n{siteSettingsLocation} @@ -65,7 +66,7 @@ <div id="camera" class="settings-box two-line" category$="[[ContentSettingsTypes.CAMERA]]" data-route="SITE_SETTINGS_CAMERA" - on-tap="onTapNavigate_" actionable> + on-click="onTapNavigate_" actionable> <iron-icon icon="settings:videocam"></iron-icon> <div class="middle"> $i18n{siteSettingsCamera} @@ -82,7 +83,7 @@ </div> <div id="microphone" class="settings-box two-line" category$="[[ContentSettingsTypes.MIC]]" - data-route="SITE_SETTINGS_MICROPHONE" on-tap="onTapNavigate_" + data-route="SITE_SETTINGS_MICROPHONE" on-click="onTapNavigate_" actionable> <iron-icon icon="settings:mic"></iron-icon> <div class="middle"> @@ -98,9 +99,29 @@ aria-label="$i18n{siteSettingsMic}" aria-describedby="micSecondary"></button> </div> + <template is="dom-if" if="[[enableSensorsContentSetting_]]"> + <div id="sensors" class="settings-box two-line" + category$="[[ContentSettingsTypes.SENSORS]]" + data-route="SITE_SETTINGS_SENSORS" on-click="onTapNavigate_" + actionable> + <iron-icon icon="settings:sensors"></iron-icon> + <div class="middle"> + $i18n{siteSettingsSensors} + <div class="secondary" id="sensorsSecondary"> + [[defaultSettingLabel_( + default_.sensors, + '$i18nPolymer{siteSettingsSensorsAllow}', + '$i18nPolymer{siteSettingsSensorsBlock}')]] + </div> + </div> + <button class="subpage-arrow" is="paper-icon-button-light" + aria-label="$i18n{siteSettingsSensors}" + aria-describedby="sensorsSecondary"></button> + </div> + </template> <div id="notifications" class="settings-box two-line" category$="[[ContentSettingsTypes.NOTIFICATIONS]]" - data-route="SITE_SETTINGS_NOTIFICATIONS" on-tap="onTapNavigate_" + data-route="SITE_SETTINGS_NOTIFICATIONS" on-click="onTapNavigate_" actionable> <iron-icon icon="settings:notifications"></iron-icon> <div class="middle"> @@ -118,7 +139,7 @@ </div> <div id="javascript" class="settings-box two-line" category$="[[ContentSettingsTypes.JAVASCRIPT]]" - data-route="SITE_SETTINGS_JAVASCRIPT" on-tap="onTapNavigate_" + data-route="SITE_SETTINGS_JAVASCRIPT" on-click="onTapNavigate_" actionable> <iron-icon icon="settings:code"></iron-icon> <div class="middle"> @@ -136,7 +157,7 @@ </div> <div id="flash" class="settings-box two-line" category$="[[ContentSettingsTypes.PLUGINS]]" - data-route="SITE_SETTINGS_FLASH" on-tap="onTapNavigate_" actionable> + data-route="SITE_SETTINGS_FLASH" on-click="onTapNavigate_" actionable> <iron-icon icon="cr:extension"></iron-icon> <div class="middle"> $i18n{siteSettingsFlash} @@ -153,7 +174,7 @@ </div> <div id="images" class="settings-box two-line" category$="[[ContentSettingsTypes.IMAGES]]" - data-route="SITE_SETTINGS_IMAGES" on-tap="onTapNavigate_" actionable> + data-route="SITE_SETTINGS_IMAGES" on-click="onTapNavigate_" actionable> <iron-icon icon="settings:photo"></iron-icon> <div class="middle"> $i18n{siteSettingsImages} @@ -170,7 +191,7 @@ </div> <div id="popups" category$="[[ContentSettingsTypes.POPUPS]]" class="settings-box two-line" data-route="SITE_SETTINGS_POPUPS" - on-tap="onTapNavigate_" actionable> + on-click="onTapNavigate_" actionable> <iron-icon icon="cr:open-in-new"></iron-icon> <div class="middle"> $i18n{siteSettingsPopups} @@ -188,7 +209,7 @@ <template is="dom-if" if="[[enableSafeBrowsingSubresourceFilter_]]"> <div id="ads" class="settings-box two-line" category$="[[ContentSettingsTypes.ADS]]" - data-route="SITE_SETTINGS_ADS" on-tap="onTapNavigate_" + data-route="SITE_SETTINGS_ADS" on-click="onTapNavigate_" actionable> <iron-icon icon="settings:ads"></iron-icon> <div class="middle"> @@ -207,7 +228,7 @@ </template> <div id="background-sync" class="settings-box two-line" category$="[[ContentSettingsTypes.BACKGROUND_SYNC]]" - data-route="SITE_SETTINGS_BACKGROUND_SYNC" on-tap="onTapNavigate_" + data-route="SITE_SETTINGS_BACKGROUND_SYNC" on-click="onTapNavigate_" actionable> <iron-icon icon="settings:sync"></iron-icon> <div class="middle"> @@ -226,7 +247,7 @@ <template is="dom-if" if="[[enableSoundContentSetting_]]"> <div id="sound" class="settings-box two-line" category$="[[ContentSettingsTypes.SOUND]]" - data-route="SITE_SETTINGS_SOUND" on-tap="onTapNavigate_" + data-route="SITE_SETTINGS_SOUND" on-click="onTapNavigate_" actionable> <iron-icon icon="settings:volume-up"></iron-icon> <div class="middle"> @@ -246,7 +267,7 @@ <div id="automatic-downloads" class="settings-box two-line" category$="[[ContentSettingsTypes.AUTOMATIC_DOWNLOADS]]" data-route="SITE_SETTINGS_AUTOMATIC_DOWNLOADS" - on-tap="onTapNavigate_" actionable> + on-click="onTapNavigate_" actionable> <iron-icon icon="cr:file-download"></iron-icon> <div class="middle"> $i18n{siteSettingsAutomaticDownloads} @@ -264,7 +285,7 @@ <div id="unsandboxed-plugins" class="settings-box two-line" category$="[[ContentSettingsTypes.UNSANDBOXED_PLUGINS]]" data-route="SITE_SETTINGS_UNSANDBOXED_PLUGINS" - on-tap="onTapNavigate_" actionable> + on-click="onTapNavigate_" actionable> <iron-icon icon="cr:extension"></iron-icon> <div class="middle"> $i18n{siteSettingsUnsandboxedPlugins} @@ -283,7 +304,7 @@ <div id="protocol-handlers" class="settings-box two-line" category$="[[ContentSettingsTypes.PROTOCOL_HANDLERS]]" data-route="SITE_SETTINGS_HANDLERS" - on-tap="onTapNavigate_" actionable> + on-click="onTapNavigate_" actionable> <iron-icon icon="settings:protocol-handler"></iron-icon> <div class="middle"> $i18n{siteSettingsHandlers} @@ -302,7 +323,7 @@ <div id="midi-devices" class="settings-box two-line" category$="[[ContentSettingsTypes.MIDI_DEVICES]]" data-route="SITE_SETTINGS_MIDI_DEVICES" - on-tap="onTapNavigate_" actionable> + on-click="onTapNavigate_" actionable> <iron-icon icon="settings:midi"></iron-icon> <div class="middle"> $i18n{siteSettingsMidiDevices} @@ -317,29 +338,9 @@ aria-label="$i18n{siteSettingsMidiDevices}" aria-describedby="midiDevicesSecondary"></button> </div> - <template is="dom-if" if="[[enableClipboardContentSetting_]]"> - <div id="clipboard" class="settings-box two-line" - category$="[[ContentSettingsTypes.CLIPBOARD]]" - data-route="SITE_SETTINGS_CLIPBOARD" on-tap="onTapNavigate_" - actionable> - <iron-icon icon="settings:clipboard"></iron-icon> - <div class="middle"> - $i18n{siteSettingsClipboard} - <div class="secondary" id="clipboardSecondary"> - [[defaultSettingLabel_( - default_.clipboard, - '$i18nPolymer{siteSettingsAskBeforeAccessing}', - '$i18nPolymer{siteSettingsBlocked}')]] - </div> - </div> - <button class="subpage-arrow" is="paper-icon-button-light" - aria-label="$i18n{siteSettingsClipboard}" - aria-describedby="clipboardSecondary"></button> - </div> - </template> <div id="zoom-levels" class="settings-box" category$="[[ContentSettingsTypes.ZOOM_LEVELS]]" - data-route="SITE_SETTINGS_ZOOM_LEVELS" on-tap="onTapNavigate_" + data-route="SITE_SETTINGS_ZOOM_LEVELS" on-click="onTapNavigate_" actionable> <iron-icon icon="settings:zoom-in"></iron-icon> <div class="middle">$i18n{siteSettingsZoomLevels}</div> @@ -348,7 +349,7 @@ </div> <div id="usb-devices" class="settings-box" category$="[[ContentSettingsTypes.USB_DEVICES]]" - data-route="SITE_SETTINGS_USB_DEVICES" on-tap="onTapNavigate_" + data-route="SITE_SETTINGS_USB_DEVICES" on-click="onTapNavigate_" actionable> <iron-icon icon="settings:usb"></iron-icon> <div class="middle">$i18n{siteSettingsUsbDevices}</div> @@ -356,7 +357,7 @@ aria-label="$i18n{siteSettingsUsbDevices}"></button> </div> <div id="pdf-documents" class="settings-box" - data-route="SITE_SETTINGS_PDF_DOCUMENTS" on-tap="onTapNavigate_" + data-route="SITE_SETTINGS_PDF_DOCUMENTS" on-click="onTapNavigate_" actionable> <iron-icon icon="settings:pdf"></iron-icon> <div class="middle">$i18n{siteSettingsPdfDocuments}</div> @@ -364,13 +365,33 @@ aria-label="$i18n{siteSettingsPdfDocuments}"></button> </div> <div id="protected-content" class="settings-box" - data-route="SITE_SETTINGS_PROTECTED_CONTENT" on-tap="onTapNavigate_" + data-route="SITE_SETTINGS_PROTECTED_CONTENT" on-click="onTapNavigate_" actionable> <iron-icon icon="settings:security"></iron-icon> <div class="middle">$i18n{siteSettingsProtectedContent}</div> <button class="subpage-arrow" is="paper-icon-button-light" aria-label="$i18n{siteSettingsProtectedContent}"></button> </div> + <template is="dom-if" if="[[enableClipboardContentSetting_]]"> + <div id="clipboard" class="settings-box two-line" + category$="[[ContentSettingsTypes.CLIPBOARD]]" + data-route="SITE_SETTINGS_CLIPBOARD" on-click="onTapNavigate_" + actionable> + <iron-icon icon="settings:clipboard"></iron-icon> + <div class="middle"> + $i18n{siteSettingsClipboard} + <div class="secondary" id="clipboardSecondary"> + [[defaultSettingLabel_( + default_.clipboard, + '$i18nPolymer{siteSettingsAskBeforeAccessing}', + '$i18nPolymer{siteSettingsBlocked}')]] + </div> + </div> + <button class="subpage-arrow" is="paper-icon-button-light" + aria-label="$i18n{siteSettingsClipboard}" + aria-describedby="clipboardSecondary"></button> + </div> + </template> </template> <script src="site_settings_page.js"></script> </dom-module> diff --git a/chromium/chrome/browser/resources/settings/site_settings_page/site_settings_page.js b/chromium/chrome/browser/resources/settings/site_settings_page/site_settings_page.js index 0b1ce9dc1de..5a3b98d12af 100644 --- a/chromium/chrome/browser/resources/settings/site_settings_page/site_settings_page.js +++ b/chromium/chrome/browser/resources/settings/site_settings_page/site_settings_page.js @@ -67,6 +67,15 @@ Polymer({ } }, + /** @private */ + enableSensorsContentSetting_: { + type: Boolean, + readOnly: true, + value: function() { + return loadTimeData.getBoolean('enableSensorsContentSetting'); + } + }, + /** @type {!Map<string, string>} */ focusConfig: { type: Object, @@ -105,6 +114,7 @@ Polymer({ [R.SITE_SETTINGS_PDF_DOCUMENTS, 'pdf-documents'], [R.SITE_SETTINGS_PROTECTED_CONTENT, 'protected-content'], [R.SITE_SETTINGS_CLIPBOARD, 'clipboard'], + [R.SITE_SETTINGS_SENSORS, 'sensors'], ].forEach(pair => { const route = pair[0]; const id = pair[1]; diff --git a/chromium/chrome/browser/resources/settings/system_page/system_page.html b/chromium/chrome/browser/resources/settings/system_page/system_page.html index 77bc47816f3..fb4ed5031ee 100644 --- a/chromium/chrome/browser/resources/settings/system_page/system_page.html +++ b/chromium/chrome/browser/resources/settings/system_page/system_page.html @@ -29,7 +29,7 @@ </paper-button> </template> </settings-toggle-button> - <div id="proxy" class="settings-box" on-tap="onProxyTap_" + <div id="proxy" class="settings-box" on-click="onProxyTap_" actionable$="[[!isProxyEnforcedByPolicy_]]"> <div class="start">$i18n{proxySettingsLabel}</div> <button is="paper-icon-button-light" class="icon-external" |