[Shields UI] Add advanced view to new panel UI (#34192)
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
/* Copyright (c) 2026 The Brave Authors. All rights reserved.
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
|
||||
import { color, font } from '@brave/leo/tokens/css/variables'
|
||||
import { scoped } from '$web-common/scoped_css'
|
||||
|
||||
export const style = scoped.css`
|
||||
|
||||
& {
|
||||
--leo-icon-size: 20px;
|
||||
|
||||
padding: 8px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
|
||||
> * {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
padding: 0 4px 0 8px;
|
||||
|
||||
> :last-child {
|
||||
padding: 4px;
|
||||
min-width: 28px;
|
||||
margin-inline-start: -4px;
|
||||
}
|
||||
|
||||
> button {
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
> button:hover {
|
||||
background: ${color.button.hover};
|
||||
}
|
||||
|
||||
> button:disabled {
|
||||
visibility: hidden;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.toggle {
|
||||
flex: 1 1 auto;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
padding: 11px 8px;
|
||||
|
||||
& > *:last-child {
|
||||
margin-inline-start: auto;
|
||||
}
|
||||
}
|
||||
|
||||
leo-dropdown {
|
||||
flex: 1 1 auto;
|
||||
|
||||
[slot=value] {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.counter {
|
||||
border-radius: 6px;
|
||||
padding: 2px 4px;
|
||||
background-color: ${color.neutral[10]};
|
||||
font: ${font.small.semibold};
|
||||
color: ${color.neutral[60]};
|
||||
}
|
||||
|
||||
.block-scripts-text {
|
||||
> * {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.note {
|
||||
font: ${font.small.regular};
|
||||
color: ${color.text.tertiary};
|
||||
}
|
||||
}
|
||||
|
||||
.block-elements {
|
||||
padding: 11px 8px;
|
||||
|
||||
button {
|
||||
color: ${color.text.interactive};
|
||||
font: ${font.small.regular};
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
`
|
||||
@@ -0,0 +1,414 @@
|
||||
/* Copyright (c) 2026 The Brave Authors. All rights reserved.
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
|
||||
import * as React from 'react'
|
||||
import Dropdown from '@brave/leo/react/dropdown'
|
||||
import Icon from '@brave/leo/react/icon'
|
||||
import Toggle from '@brave/leo/react/toggle'
|
||||
|
||||
import { useShieldsApi } from '../api/shields_api_context'
|
||||
import { StringKey, getString } from './strings'
|
||||
|
||||
import {
|
||||
AdBlockMode,
|
||||
HttpsUpgradeMode,
|
||||
FingerprintMode,
|
||||
CookieBlockMode,
|
||||
ContentSettingSource,
|
||||
} from 'gen/brave/components/brave_shields/core/common/shields_settings.mojom.m.js'
|
||||
|
||||
import { ContentSetting } from 'gen/components/content_settings/core/common/content_settings.mojom.m'
|
||||
|
||||
import { style } from './advanced_settings.style'
|
||||
|
||||
interface Props {
|
||||
showFingerprintingDetails: () => void
|
||||
showAdsBlocked: () => void
|
||||
showScriptsBlocked: () => void
|
||||
}
|
||||
|
||||
export function AdvancedSettings(props: Props) {
|
||||
const api = useShieldsApi()
|
||||
const { data: siteBlockInfo } = api.useGetSiteBlockInfo()
|
||||
const showAdvancedView = api.useGetAdvancedViewEnabledData()
|
||||
|
||||
const shieldsEnabled = siteBlockInfo?.isBraveShieldsEnabled
|
||||
const adblockOnlyEnabled = siteBlockInfo?.isBraveShieldsAdBlockOnlyModeEnabled
|
||||
|
||||
if (!shieldsEnabled || !showAdvancedView || adblockOnlyEnabled) {
|
||||
return null
|
||||
}
|
||||
|
||||
return (
|
||||
<div
|
||||
data-css-scope={style.scope}
|
||||
className='scrollable'
|
||||
>
|
||||
<AdBlockControl showDetails={props.showAdsBlocked} />
|
||||
<HttpsUpgradeControls />
|
||||
<BlockScriptsControls showDetails={props.showScriptsBlocked} />
|
||||
<FingerprintingControls showDetails={props.showFingerprintingDetails} />
|
||||
<CookieBlockControls />
|
||||
<ForgetFirstPartyStorageControls />
|
||||
<BlockElementsControls />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function AdBlockControl(props: { showDetails: () => void }) {
|
||||
const api = useShieldsApi()
|
||||
const { data: siteSettings } = api.useGetSiteSettings()
|
||||
const { data: siteBlockInfo } = api.useGetSiteBlockInfo()
|
||||
|
||||
if (!siteSettings || !siteBlockInfo) {
|
||||
return null
|
||||
}
|
||||
|
||||
const adBlockMode = siteSettings.adBlockMode
|
||||
const adsBlocked = siteBlockInfo.adsList.length
|
||||
const isManaged = siteBlockInfo.isBraveShieldsManaged
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Icon name='hand-raised' />
|
||||
<Dropdown
|
||||
value={String(adBlockMode)}
|
||||
disabled={isManaged}
|
||||
onChange={({ value }) => {
|
||||
withEnumValue(value, (mode) => api.setAdBlockMode([mode]))
|
||||
}}
|
||||
>
|
||||
<span slot='value'>
|
||||
{getString(getAdBlockModeLabel(adBlockMode))}
|
||||
<Counter count={adsBlocked} />
|
||||
</span>
|
||||
<leo-option value={String(AdBlockMode.AGGRESSIVE)}>
|
||||
{getString(getAdBlockModeLabel(AdBlockMode.AGGRESSIVE))}
|
||||
</leo-option>
|
||||
<leo-option value={String(AdBlockMode.STANDARD)}>
|
||||
{getString(getAdBlockModeLabel(AdBlockMode.STANDARD))}
|
||||
</leo-option>
|
||||
<leo-option value={String(AdBlockMode.ALLOW)}>
|
||||
{getString(getAdBlockModeLabel(AdBlockMode.ALLOW))}
|
||||
</leo-option>
|
||||
</Dropdown>
|
||||
<button
|
||||
onClick={props.showDetails}
|
||||
disabled={adsBlocked <= 0}
|
||||
>
|
||||
<Icon name='carat-right' />
|
||||
</button>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function getAdBlockModeLabel(mode: number | undefined) {
|
||||
switch (mode) {
|
||||
case AdBlockMode.AGGRESSIVE:
|
||||
return 'BRAVE_SHIELDS_TRACKERS_AND_ADS_BLOCKED_AGG'
|
||||
case AdBlockMode.STANDARD:
|
||||
return 'BRAVE_SHIELDS_TRACKERS_AND_ADS_BLOCKED_STD'
|
||||
case AdBlockMode.ALLOW:
|
||||
return 'BRAVE_SHIELDS_TRACKERS_AND_ADS_ALLOW_ALL'
|
||||
}
|
||||
throw new Error(`Unrecognized AdBlockMode value: ${mode}`)
|
||||
}
|
||||
|
||||
function HttpsUpgradeControls() {
|
||||
const api = useShieldsApi()
|
||||
const { data: siteSettings } = api.useGetSiteSettings()
|
||||
const isHttpsByDefaultEnabled = api.useIsHttpsByDefaultEnabledData()
|
||||
const isTorProfile = api.useIsTorProfileData()
|
||||
|
||||
if (!siteSettings) {
|
||||
return null
|
||||
}
|
||||
|
||||
const httpsUpgradeMode = siteSettings.httpsUpgradeMode
|
||||
|
||||
if (!isHttpsByDefaultEnabled || isTorProfile) {
|
||||
return null
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Icon name='lock-dots' />
|
||||
<Dropdown
|
||||
value={String(httpsUpgradeMode)}
|
||||
onChange={({ value }) => {
|
||||
withEnumValue(value, (mode) => api.setHttpsUpgradeMode([mode]))
|
||||
}}
|
||||
>
|
||||
<leo-option value={String(HttpsUpgradeMode.STRICT_MODE)}>
|
||||
{getString('BRAVE_SHIELDS_HTTPS_UPGRADE_MODE_STRICT')}
|
||||
</leo-option>
|
||||
<leo-option value={String(HttpsUpgradeMode.STANDARD_MODE)}>
|
||||
{getString('BRAVE_SHIELDS_HTTPS_UPGRADE_MODE_STANDARD')}
|
||||
</leo-option>
|
||||
<leo-option value={String(HttpsUpgradeMode.DISABLED_MODE)}>
|
||||
{getString('BRAVE_SHIELDS_HTTPS_UPGRADE_MODE_DISABLED')}
|
||||
</leo-option>
|
||||
</Dropdown>
|
||||
<div />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function BlockScriptsControls(props: { showDetails: () => void }) {
|
||||
const api = useShieldsApi()
|
||||
const { data: siteBlockInfo } = api.useGetSiteBlockInfo()
|
||||
const { data: siteSettings } = api.useGetSiteSettings()
|
||||
|
||||
if (!siteBlockInfo || !siteSettings) {
|
||||
return null
|
||||
}
|
||||
|
||||
const jsBlocked = siteBlockInfo.blockedJsList.length
|
||||
const jsAllowed = siteBlockInfo.allowedJsList.length
|
||||
const isNoscriptEnabled = siteSettings.isNoscriptEnabled
|
||||
const isManaged = siteBlockInfo.isBraveShieldsManaged
|
||||
const hasBlockedOrAllowed = jsBlocked > 0 || jsAllowed > 0
|
||||
|
||||
const overrideStatus = siteSettings.scriptsBlockedOverrideStatus
|
||||
const overrideSource = overrideStatus?.overrideSource
|
||||
|
||||
const scriptsBlockedEnforced =
|
||||
overrideStatus
|
||||
&& overrideStatus.status !== ContentSetting.DEFAULT
|
||||
&& overrideSource !== ContentSettingSource.kUser
|
||||
&& overrideSource !== ContentSettingSource.kNone
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Icon name='code' />
|
||||
<div className='toggle'>
|
||||
<div className='block-scripts-text'>
|
||||
<div>
|
||||
{getString('BRAVE_SHIELDS_SCRIPTS_BLOCKED')}
|
||||
<Counter count={jsBlocked} />
|
||||
</div>
|
||||
{scriptsBlockedEnforced && (
|
||||
<div className='note'>
|
||||
{getString(getEnforcedDescription(overrideSource))}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
<Toggle
|
||||
checked={isNoscriptEnabled}
|
||||
disabled={isManaged || scriptsBlockedEnforced}
|
||||
size='small'
|
||||
onChange={(event) => {
|
||||
api.setIsNoScriptsEnabled([event.checked])
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<button
|
||||
onClick={props.showDetails}
|
||||
disabled={
|
||||
!isNoscriptEnabled || !hasBlockedOrAllowed || scriptsBlockedEnforced
|
||||
}
|
||||
>
|
||||
<Icon name='carat-right' />
|
||||
</button>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function getEnforcedDescription(overrideSource: number | undefined): StringKey {
|
||||
switch (overrideSource) {
|
||||
case ContentSettingSource.kExtension:
|
||||
return 'BRAVE_SHIELDS_SCRIPTS_BLOCKED_OVERRIDDEN_BY_EXTENSION'
|
||||
case ContentSettingSource.kPolicy:
|
||||
return 'BRAVE_SHIELDS_SCRIPTS_BLOCKED_OVERRIDDEN_BY_POLICY'
|
||||
case ContentSettingSource.kAllowList:
|
||||
return 'BRAVE_SHIELDS_SCRIPTS_BLOCKED_OVERRIDDEN_BY_ALLOWLIST'
|
||||
case ContentSettingSource.kSupervised:
|
||||
return 'BRAVE_SHIELDS_SCRIPTS_BLOCKED_OVERRIDDEN_BY_SUPERVISOR'
|
||||
case ContentSettingSource.kInstalledWebApp:
|
||||
return 'BRAVE_SHIELDS_SCRIPTS_BLOCKED_OVERRIDDEN_BY_PWA'
|
||||
default:
|
||||
return 'BRAVE_SHIELDS_SCRIPTS_BLOCKED_OVERRIDDEN'
|
||||
}
|
||||
}
|
||||
|
||||
function FingerprintingControls(props: { showDetails: () => void }) {
|
||||
const api = useShieldsApi()
|
||||
const { data: siteBlockInfo } = api.useGetSiteBlockInfo()
|
||||
const { data: siteSettings } = api.useGetSiteSettings()
|
||||
const showStrictMode = api.useShowStrictFingerprintingModeData()
|
||||
const webcompatExceptionsEnabled =
|
||||
api.useIsWebcompatExceptionsServiceEnabledData()
|
||||
|
||||
if (!siteBlockInfo || !siteSettings) {
|
||||
return null
|
||||
}
|
||||
|
||||
const isManaged = siteBlockInfo.isBraveShieldsManaged
|
||||
const fingerprintMode = siteSettings.fingerprintMode
|
||||
const invokedWebcompatCount = siteBlockInfo.invokedWebcompatList.length
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Icon name='biometric-login' />
|
||||
{showStrictMode ? (
|
||||
<Dropdown
|
||||
value={String(fingerprintMode)}
|
||||
disabled={isManaged}
|
||||
onChange={({ value }) => {
|
||||
withEnumValue(value, (mode) => api.setFingerprintMode([mode]))
|
||||
}}
|
||||
>
|
||||
<leo-option value={String(FingerprintMode.STRICT_MODE)}>
|
||||
{getString('BRAVE_SHIELDS_FINGERPRINTING_BLOCKED_AGG')}
|
||||
</leo-option>
|
||||
<leo-option value={String(FingerprintMode.STANDARD_MODE)}>
|
||||
{getString('BRAVE_SHIELDS_FINGERPRINTING_BLOCKED_STD')}
|
||||
</leo-option>
|
||||
<leo-option value={String(FingerprintMode.ALLOW_MODE)}>
|
||||
{getString('BRAVE_SHIELDS_FINGERPRINTING_ALLOW_ALL')}
|
||||
</leo-option>
|
||||
</Dropdown>
|
||||
) : (
|
||||
<div className='toggle'>
|
||||
{getString('BRAVE_SHIELDS_FINGERPRINTING_BLOCKED_STD')}
|
||||
<Toggle
|
||||
checked={fingerprintMode !== FingerprintMode.ALLOW_MODE}
|
||||
disabled={isManaged}
|
||||
size='small'
|
||||
onChange={(event) => {
|
||||
api.setFingerprintMode([
|
||||
event.checked
|
||||
? FingerprintMode.STANDARD_MODE
|
||||
: FingerprintMode.ALLOW_MODE,
|
||||
])
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
<button
|
||||
onClick={props.showDetails}
|
||||
disabled={
|
||||
!webcompatExceptionsEnabled
|
||||
|| invokedWebcompatCount <= 0
|
||||
|| fingerprintMode === FingerprintMode.ALLOW_MODE
|
||||
}
|
||||
>
|
||||
<Icon name='carat-right' />
|
||||
</button>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function CookieBlockControls() {
|
||||
const api = useShieldsApi()
|
||||
const { data: siteSettings } = api.useGetSiteSettings()
|
||||
const { data: siteBlockInfo } = api.useGetSiteBlockInfo()
|
||||
|
||||
if (!siteBlockInfo || !siteSettings) {
|
||||
return null
|
||||
}
|
||||
|
||||
const cookieBlockMode = siteSettings.cookieBlockMode
|
||||
const isManaged = siteBlockInfo.isBraveShieldsManaged
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Icon name='cookie' />
|
||||
<Dropdown
|
||||
value={String(cookieBlockMode)}
|
||||
disabled={isManaged}
|
||||
onChange={({ value }) => {
|
||||
withEnumValue(value, (mode) => api.setCookieBlockMode([mode]))
|
||||
}}
|
||||
>
|
||||
<leo-option value={String(CookieBlockMode.BLOCKED)}>
|
||||
{getString('BRAVE_SHIELDS_COOKIES_BLOCKED')}
|
||||
</leo-option>
|
||||
<leo-option value={String(CookieBlockMode.CROSS_SITE_BLOCKED)}>
|
||||
{getString('BRAVE_SHIELDS_THIRD_PARTY_COOKIES_BLOCKED')}
|
||||
</leo-option>
|
||||
<leo-option value={String(CookieBlockMode.ALLOW)}>
|
||||
{getString('BRAVE_SHIELDS_COOKIES_ALLOWED_ALL')}
|
||||
</leo-option>
|
||||
</Dropdown>
|
||||
<div />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function ForgetFirstPartyStorageControls() {
|
||||
const api = useShieldsApi()
|
||||
const { data: siteSettings } = api.useGetSiteSettings()
|
||||
const { data: siteBlockInfo } = api.useGetSiteBlockInfo()
|
||||
const forgetFeatureEnabled =
|
||||
api.useIsBraveForgetFirstPartyStorageFeatureEnabledData()
|
||||
|
||||
if (!siteBlockInfo || !siteSettings) {
|
||||
return null
|
||||
}
|
||||
|
||||
const isForgetEnabled = siteSettings.isForgetFirstPartyStorageEnabled
|
||||
const isManaged = siteBlockInfo.isBraveShieldsManaged
|
||||
|
||||
if (!forgetFeatureEnabled) {
|
||||
return null
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Icon name='eye-off' />
|
||||
<div className='toggle'>
|
||||
{getString('BRAVE_SHIELDS_FORGET_FIRST_PARTY_STORAGE_LABEL')}
|
||||
<Toggle
|
||||
checked={isForgetEnabled}
|
||||
disabled={isManaged}
|
||||
size='small'
|
||||
onChange={(event) => {
|
||||
api.setForgetFirstPartyStorageEnabled([event.checked])
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<div />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function BlockElementsControls() {
|
||||
const api = useShieldsApi()
|
||||
const blockedElementsPresent = api.useAreAnyBlockedElementsPresentData()
|
||||
|
||||
if (!blockedElementsPresent) {
|
||||
return null
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Icon name='disable-outline' />
|
||||
<div className='block-elements'>
|
||||
<div>{getString('BRAVE_SHIELDS_BLOCK_ELEMENTS')}</div>
|
||||
<button onClick={() => api.resetBlockedElements()}>
|
||||
{getString('BRAVE_SHIELDS_SHOW_ALL_BLOCKED_ELEMENTS')}
|
||||
</button>
|
||||
</div>
|
||||
<div />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function Counter(props: { count: number }) {
|
||||
if (props.count <= 0) {
|
||||
return null
|
||||
}
|
||||
return (
|
||||
<span className='counter'>{props.count > 99 ? '99+' : props.count}</span>
|
||||
)
|
||||
}
|
||||
|
||||
function withEnumValue(s: string | undefined, fn: (value: number) => void) {
|
||||
const value = parseInt(s ?? '', 10)
|
||||
if (!isNaN(value)) {
|
||||
fn(value)
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import * as React from 'react'
|
||||
import { MainCard } from './main_card'
|
||||
import { Footer } from './footer'
|
||||
import { AdvancedSettingsHeader } from './advanced_settings_header'
|
||||
import { AdvancedSettings } from './advanced_settings'
|
||||
import { useInitializedStatus } from './use_initialized_status'
|
||||
import { useCacheInvalidator } from './use_cache_invalidator'
|
||||
|
||||
@@ -61,6 +62,13 @@ function MainView(props: { showView: (view: AppView) => void }) {
|
||||
<main>
|
||||
<MainCard />
|
||||
<AdvancedSettingsHeader />
|
||||
<AdvancedSettings
|
||||
showAdsBlocked={() => props.showView('ads-blocked')}
|
||||
showScriptsBlocked={() => props.showView('scripts-blocked')}
|
||||
showFingerprintingDetails={() =>
|
||||
props.showView('fingerprinting-details')
|
||||
}
|
||||
/>
|
||||
<Footer />
|
||||
</main>
|
||||
)
|
||||
|
||||
@@ -6,6 +6,6 @@
|
||||
import { getLocale } from '$web-common/locale'
|
||||
import { BraveShieldsStrings } from 'gen/components/grit/brave_components_webui_strings'
|
||||
|
||||
type StringKey = keyof typeof BraveShieldsStrings
|
||||
export type StringKey = keyof typeof BraveShieldsStrings
|
||||
|
||||
export const getString = <(key: StringKey) => string>getLocale
|
||||
|
||||
@@ -132,7 +132,11 @@
|
||||
Global Settings
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_SHOW_ALL_BLOCKED_ELEMENTS" desc="Button that shows all blocked elements">
|
||||
<message name="IDS_BRAVE_SHIELDS_BLOCK_ELEMENTS" desc="Label for block elements section." formatter_data="webui=BraveShields">
|
||||
Block elements
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_SHOW_ALL_BLOCKED_ELEMENTS" desc="Button that shows all blocked elements" formatter_data="webui=BraveShields">
|
||||
Clear all blocked elements
|
||||
</message>
|
||||
|
||||
@@ -168,31 +172,31 @@
|
||||
Enable HTTPS
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_SCRIPTS_BLOCKED" desc="A label for scripts Scripts blocked option.">
|
||||
<message name="IDS_BRAVE_SHIELDS_SCRIPTS_BLOCKED" desc="A label for scripts Scripts blocked option." formatter_data="webui=BraveShields">
|
||||
Block scripts
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_SCRIPTS_BLOCKED_OVERRIDDEN" desc="A label for scripts Scripts blocked option which is overridden by rule.">
|
||||
<message name="IDS_BRAVE_SHIELDS_SCRIPTS_BLOCKED_OVERRIDDEN" desc="A label for scripts Scripts blocked option which is overridden by rule." formatter_data="webui=BraveShields">
|
||||
(enforced)
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_SCRIPTS_BLOCKED_OVERRIDDEN_BY_EXTENSION" desc="A label for scripts Scripts blocked option which is overridden by extension rule.">
|
||||
<message name="IDS_BRAVE_SHIELDS_SCRIPTS_BLOCKED_OVERRIDDEN_BY_EXTENSION" desc="A label for scripts Scripts blocked option which is overridden by extension rule." formatter_data="webui=BraveShields">
|
||||
(enforced by extension)
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_SCRIPTS_BLOCKED_OVERRIDDEN_BY_POLICY" desc="A label for scripts Scripts blocked option which is overridden by a policy rule.">
|
||||
<message name="IDS_BRAVE_SHIELDS_SCRIPTS_BLOCKED_OVERRIDDEN_BY_POLICY" desc="A label for scripts Scripts blocked option which is overridden by a policy rule." formatter_data="webui=BraveShields">
|
||||
(enforced by policy)
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_SCRIPTS_BLOCKED_OVERRIDDEN_BY_ALLOWLIST" desc="A label for scripts Scripts blocked option which is overridden by a allowlist built into the browser's WebUI.">
|
||||
<message name="IDS_BRAVE_SHIELDS_SCRIPTS_BLOCKED_OVERRIDDEN_BY_ALLOWLIST" desc="A label for scripts Scripts blocked option which is overridden by a allowlist built into the browser's WebUI." formatter_data="webui=BraveShields">
|
||||
(enforced by allowlist)
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_SCRIPTS_BLOCKED_OVERRIDDEN_BY_SUPERVISOR" desc="A label for scripts Scripts blocked option which is overridden by a supervisor rule.">
|
||||
<message name="IDS_BRAVE_SHIELDS_SCRIPTS_BLOCKED_OVERRIDDEN_BY_SUPERVISOR" desc="A label for scripts Scripts blocked option which is overridden by a supervisor rule." formatter_data="webui=BraveShields">
|
||||
(enforced by supervisor)
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_SCRIPTS_BLOCKED_OVERRIDDEN_BY_PWA" desc="A label for scripts Scripts blocked option which is overridden by a PWA.">
|
||||
<message name="IDS_BRAVE_SHIELDS_SCRIPTS_BLOCKED_OVERRIDDEN_BY_PWA" desc="A label for scripts Scripts blocked option which is overridden by a PWA." formatter_data="webui=BraveShields">
|
||||
(enforced by PWA)
|
||||
</message>
|
||||
|
||||
@@ -204,23 +208,23 @@
|
||||
Trackers & ads
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_TRACKERS_AND_ADS_BLOCKED_STD" desc="Menu option that would block some trackers and advertisement website scripts.">
|
||||
<message name="IDS_BRAVE_SHIELDS_TRACKERS_AND_ADS_BLOCKED_STD" desc="Menu option that would block some trackers and advertisement website scripts." formatter_data="webui=BraveShields">
|
||||
Block trackers & ads
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_TRACKERS_AND_ADS_BLOCKED_AGG" desc="Menu option that would block all trackers and advertisement website scripts.">
|
||||
<message name="IDS_BRAVE_SHIELDS_TRACKERS_AND_ADS_BLOCKED_AGG" desc="Menu option that would block all trackers and advertisement website scripts." formatter_data="webui=BraveShields">
|
||||
Aggressively block trackers & ads
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_TRACKERS_AND_ADS_ALLOW_ALL" desc="Menu option that would stop blocking all trackers and advertisement website scripts">
|
||||
<message name="IDS_BRAVE_SHIELDS_TRACKERS_AND_ADS_ALLOW_ALL" desc="Menu option that would stop blocking all trackers and advertisement website scripts" formatter_data="webui=BraveShields">
|
||||
Allow all trackers & ads
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_THIRD_PARTY_COOKIES_BLOCKED" desc="Menu option that would block third-party cookies.">
|
||||
<message name="IDS_BRAVE_SHIELDS_THIRD_PARTY_COOKIES_BLOCKED" desc="Menu option that would block third-party cookies." formatter_data="webui=BraveShields">
|
||||
Block third-party cookies
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_FORGET_FIRST_PARTY_STORAGE_LABEL" desc="Shields panel toggle label that would forget first party website storage when enabled.">
|
||||
<message name="IDS_BRAVE_SHIELDS_FORGET_FIRST_PARTY_STORAGE_LABEL" desc="Shields panel toggle label that would forget first party website storage when enabled." formatter_data="webui=BraveShields">
|
||||
Forget me when I close this site
|
||||
</message>
|
||||
|
||||
@@ -244,11 +248,11 @@
|
||||
Enables the Shields Block Elements feature in private windows. Note that elements blocked in private windows will also be blocked in non-private windows.
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_COOKIES_BLOCKED" desc="Menu option that would block current website cookies.">
|
||||
<message name="IDS_BRAVE_SHIELDS_COOKIES_BLOCKED" desc="Menu option that would block current website cookies." formatter_data="webui=BraveShields">
|
||||
Block all cookies
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_COOKIES_ALLOWED_ALL" desc="Menu option that would allow all cookies on the current website.">
|
||||
<message name="IDS_BRAVE_SHIELDS_COOKIES_ALLOWED_ALL" desc="Menu option that would allow all cookies on the current website." formatter_data="webui=BraveShields">
|
||||
Allow all cookies
|
||||
</message>
|
||||
|
||||
@@ -256,27 +260,27 @@
|
||||
Fingerprinting blocked
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_FINGERPRINTING_BLOCKED_STD" desc="Menu option that would block some fingerprinting website scripts.">
|
||||
<message name="IDS_BRAVE_SHIELDS_FINGERPRINTING_BLOCKED_STD" desc="Menu option that would block some fingerprinting website scripts." formatter_data="webui=BraveShields">
|
||||
Block fingerprinting
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_FINGERPRINTING_BLOCKED_AGG" desc="Menu option that would block all fingerprinting website scripts.">
|
||||
<message name="IDS_BRAVE_SHIELDS_FINGERPRINTING_BLOCKED_AGG" desc="Menu option that would block all fingerprinting website scripts." formatter_data="webui=BraveShields">
|
||||
Aggressively block fingerprinting
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_FINGERPRINTING_ALLOW_ALL" desc="Menu option that would stop blocking all fingerprinting website scripts.">
|
||||
<message name="IDS_BRAVE_SHIELDS_FINGERPRINTING_ALLOW_ALL" desc="Menu option that would stop blocking all fingerprinting website scripts." formatter_data="webui=BraveShields">
|
||||
Allow fingerprinting
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_HTTPS_UPGRADE_MODE_DISABLED" desc="Menu option that doesn't upgrade HTTP connections.">
|
||||
<message name="IDS_BRAVE_SHIELDS_HTTPS_UPGRADE_MODE_DISABLED" desc="Menu option that doesn't upgrade HTTP connections." formatter_data="webui=BraveShields">
|
||||
Don't upgrade HTTP connections
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_HTTPS_UPGRADE_MODE_STANDARD" desc="Menu option that prefers to use HTTPS whenever possible.">
|
||||
<message name="IDS_BRAVE_SHIELDS_HTTPS_UPGRADE_MODE_STANDARD" desc="Menu option that prefers to use HTTPS whenever possible." formatter_data="webui=BraveShields">
|
||||
Upgrade connections to HTTPS
|
||||
</message>
|
||||
|
||||
<message name="IDS_BRAVE_SHIELDS_HTTPS_UPGRADE_MODE_STRICT" desc="Menu option that requires HTTPS on all connections.">
|
||||
<message name="IDS_BRAVE_SHIELDS_HTTPS_UPGRADE_MODE_STRICT" desc="Menu option that requires HTTPS on all connections." formatter_data="webui=BraveShields">
|
||||
Only connect with HTTPS
|
||||
</message>
|
||||
|
||||
|
||||
@@ -181,6 +181,7 @@ leo_icons = [
|
||||
"bar-chart.svg",
|
||||
"bat-color.svg",
|
||||
"bing-color.svg",
|
||||
"biometric-login.svg",
|
||||
"bluetooth-off.svg",
|
||||
"bluetooth.svg",
|
||||
"brave-icon-monochrome.svg",
|
||||
@@ -283,6 +284,7 @@ leo_icons = [
|
||||
"grid04.svg",
|
||||
"hamburger-menu.svg",
|
||||
"hand-coins.svg",
|
||||
"hand-raised.svg",
|
||||
"hearts.svg",
|
||||
"help-outline.svg",
|
||||
"history.svg",
|
||||
@@ -308,6 +310,7 @@ leo_icons = [
|
||||
"loading-spinner.svg",
|
||||
"location-off.svg",
|
||||
"location-on.svg",
|
||||
"lock-dots.svg",
|
||||
"lock-open.svg",
|
||||
"lock-plain.svg",
|
||||
"lock.svg",
|
||||
|
||||
Reference in New Issue
Block a user