diff --git a/app/brave_settings_strings.grdp b/app/brave_settings_strings.grdp
index f49cd661e41..d2b036909ab 100644
--- a/app/brave_settings_strings.grdp
+++ b/app/brave_settings_strings.grdp
@@ -189,6 +189,12 @@
Always show toolbar in full screen
+
+ https://chrome.google.com/webstore?hl=[GRITLANGCODE]&category=theme
+
+
+ Open Web Store
+
Get more themes
diff --git a/browser/resources/settings/brave_overrides/appearance_page.ts b/browser/resources/settings/brave_overrides/appearance_page.ts
index 41e7c766482..8dd3c693901 100644
--- a/browser/resources/settings/brave_overrides/appearance_page.ts
+++ b/browser/resources/settings/brave_overrides/appearance_page.ts
@@ -6,12 +6,22 @@
import '../brave_appearance_page/super_referral.js'
import '../brave_appearance_page/brave_theme.js'
-import {html, RegisterPolymerTemplateModifications} from 'chrome://resources/brave/polymer_overriding.js'
+import {
+ html,
+ RegisterPolymerComponentReplacement,
+ RegisterPolymerTemplateModifications
+} from 'chrome://resources/brave/polymer_overriding.js'
+
import {getTrustedHTML} from 'chrome://resources/js/static_types.js'
import {loadTimeData} from '../i18n_setup.js'
import {Router} from '../router.js'
+import {
+ SettingsAppearancePageElement
+} from '../appearance_page/appearance_page.js'
+
+
const superReferralStringId = 'superReferralThemeName'
RegisterPolymerTemplateModifications({
@@ -20,6 +30,26 @@ RegisterPolymerTemplateModifications({
if (!theme) {
console.error(`[Settings] Couldn't find #themeRow`)
} else {
+ // Insert Brave colors dropdown before theme.
+ theme.setAttribute('class', 'settings-row hr')
+ theme.insertAdjacentHTML(
+ 'beforebegin',
+ getTrustedHTML`
+
+
+ `)
+ const openTheme = templateContent.getElementById('openTheme')
+ if (!openTheme) {
+ console.error(`[Settings] Couldn't find #openTheme`)
+ } else {
+ // Remove upstream's click handler. We add our own in
+ // BraveSettingsAppearancePageElement below.
+ openTheme.removeAttribute('on-click')
+ // Restore sub-label to say Open Web Store when no theme is set.
+ openTheme.setAttribute('sub-label',
+ '[[_adjustThemeSublabel(themeSublabel_)]]')
+ }
+ // Fix theme "Reset to default" button.
const useDefaultButtonTemplate = templateContent.querySelector(
'template[is=dom-if][if="[[prefs.extensions.theme.id.value]]"]')
if (!useDefaultButtonTemplate) {
@@ -29,13 +59,6 @@ RegisterPolymerTemplateModifications({
} else {
useDefaultButtonTemplate.setAttribute('restamp', 'true')
}
- theme.setAttribute('class', 'settings-row hr')
- theme.insertAdjacentHTML(
- 'beforebegin',
- getTrustedHTML`
-
-
- `)
}
const customizeToolbar = templateContent.getElementById('customizeToolbar')
@@ -213,3 +236,38 @@ RegisterPolymerTemplateModifications({
}
}
})
+
+RegisterPolymerComponentReplacement(
+ 'settings-appearance-page',
+ class BraveSettingsAppearancePageElement
+ extends SettingsAppearancePageElement {
+ override ready() {
+ super.ready()
+ const openTheme = this.shadowRoot!.getElementById('openTheme')
+ if (!openTheme) {
+ console.error(`[Settings] Couldn't find #openTheme`)
+ } else {
+ // Restore theme link to point to web store instead of to the profile
+ // color picker.
+ openTheme.addEventListener('click',
+ () => {
+ window.open((this as any).themeUrl_ ||
+ loadTimeData.getString('appearanceSettingsThemesGalleryUrl'),
+ '_blank', 'noopener noreferrer');
+ }
+ )
+ }
+ }
+
+ // Restore theme sub-label to say "Open Web Store" when there's no custom
+ // theme set.
+ _adjustThemeSublabel(themeSublabel: string) {
+ //
+ if (themeSublabel === '') {
+ return loadTimeData.getString('appearanceSettingsOpenWebStore')
+ }
+ //
+ return themeSublabel
+ }
+ }
+)
diff --git a/browser/resources/settings/brave_overrides/config.ts b/browser/resources/settings/brave_overrides/config.ts
index 2f79545bc78..a7c77b8f436 100644
--- a/browser/resources/settings/brave_overrides/config.ts
+++ b/browser/resources/settings/brave_overrides/config.ts
@@ -15,6 +15,7 @@ import {RegisterPolymerComponentToIgnore} from 'chrome://resources/brave/polymer
// component before the module is imported).
RegisterPolymerComponentToIgnore('add-site-dialog')
+RegisterPolymerComponentToIgnore('settings-appearance-page')
RegisterPolymerComponentToIgnore('settings-autofill-page')
RegisterPolymerComponentToIgnore('settings-clear-browsing-data-dialog')
RegisterPolymerComponentToIgnore('settings-search-page')
diff --git a/browser/ui/webui/settings/brave_settings_localized_strings_provider.cc b/browser/ui/webui/settings/brave_settings_localized_strings_provider.cc
index dcf5c01d8f3..d15ad47b9f4 100644
--- a/browser/ui/webui/settings/brave_settings_localized_strings_provider.cc
+++ b/browser/ui/webui/settings/brave_settings_localized_strings_provider.cc
@@ -227,6 +227,10 @@ void BraveAddCommonStrings(content::WebUIDataSource* html_source,
IDS_SETTINGS_SITE_SETTINGS_SHIELDS_DESCRIPTION},
{"appearanceSettingsBraveTheme",
IDS_SETTINGS_APPEARANCE_SETTINGS_BRAVE_THEMES},
+ {"appearanceSettingsThemesGalleryUrl",
+ IDS_SETTINGS_APPEARANCE_SETTINGS_THEMES_GALLERY_URL},
+ {"appearanceSettingsOpenWebStore",
+ IDS_SETTINGS_APPEARANCE_SETTINGS_OPEN_WEB_STORE},
{"appearanceSettingsShowBookmarksButton",
IDS_SETTINGS_APPEARANCE_SETTINGS_SHOW_BOOKMARKS_BUTTON},
{"appearanceSettingsLocationBarIsWide",