[Cardano] dApp permission settings (#29859)

Resolves https://github.com/brave/brave-browser/issues/46125
This commit is contained in:
cypt4
2025-07-04 22:14:43 +07:00
committed by GitHub
parent 81f327a3f6
commit 9545dea554
12 changed files with 116 additions and 14 deletions
+16 -6
View File
@@ -788,25 +788,35 @@
Block sites from autoplaying videos
</message>
<!-- Ethereum -->
<message name="IDS_SETTINGS_SITE_SETTINGS_ETHEREUM" desc="Label for ethereum site settings.">
<message name="IDS_SETTINGS_SITE_SETTINGS_ETHEREUM" desc="Title for ethereum site settings.">
Ethereum
</message>
<message name="IDS_SETTINGS_SITE_SETTINGS_ETHEREUM_ASK" desc="Label for ethereum site settings.">
<message name="IDS_SETTINGS_SITE_SETTINGS_ETHEREUM_ASK" desc="Label for ethereum site settings as group.">
Ask when a site wants to access the Ethereum provider API
</message>
<message name="IDS_SETTINGS_SITE_SETTINGS_ETHEREUM_BLOCK" desc="Label for ethereum site settings.">
<message name="IDS_SETTINGS_SITE_SETTINGS_ETHEREUM_BLOCK" desc="Label for ethereum site settings block group.">
Block sites from accessing the Ethereum provider API
</message>
<!-- Solana -->
<message name="IDS_SETTINGS_SITE_SETTINGS_SOLANA" desc="Label for solana site settings.">
<message name="IDS_SETTINGS_SITE_SETTINGS_SOLANA" desc="Title for solana site settings.">
Solana
</message>
<message name="IDS_SETTINGS_SITE_SETTINGS_SOLANA_ASK" desc="Label for solana site settings.">
<message name="IDS_SETTINGS_SITE_SETTINGS_SOLANA_ASK" desc="Label for solana site settings ask group.">
Ask when a site wants to access the Solana provider API
</message>
<message name="IDS_SETTINGS_SITE_SETTINGS_SOLANA_BLOCK" desc="Label for solana site settings.">
<message name="IDS_SETTINGS_SITE_SETTINGS_SOLANA_BLOCK" desc="Label for solana site settings block group.">
Block sites from accessing the Solana provider API
</message>
<!-- Cardano -->
<message name="IDS_SETTINGS_SITE_SETTINGS_CARDANO" desc="Title for cardano site settings.">
Cardano
</message>
<message name="IDS_SETTINGS_SITE_SETTINGS_CARDANO_ASK" desc="Label for cardano site settings ask group.">
Ask when a site wants to access the Cardano provider API
</message>
<message name="IDS_SETTINGS_SITE_SETTINGS_CARDANO_BLOCK" desc="Label for cardano site settings block group.">
Block sites from accessing the Cardano provider API
</message>
<!-- Google Sign-In setting -->
<message name="IDS_SETTINGS_SITE_SETTINGS_GOOGLE_SIGN_IN" desc="Label for G sign-in site settings.">
Google Sign-In
@@ -162,6 +162,36 @@ function InsertSolanaSubpage (pages: Element)
`)
}
function InsertCardanoSubpage (pages: Element)
{
pages.appendChild(
html`
<template is="dom-if" route-path="/content/cardano" no-search>
<settings-subpage
associated-control="[[$$('#cardano')]]"
page-title="${loadTimeData.getString('siteSettingsCardano')}">
<settings-category-default-radio-group
id="cardanoDefault"
category="[[contentSettingsTypesEnum_.CARDANO]]"
block-option-label=
"${loadTimeData.getString('siteSettingsCardanoBlock')}"
allow-option-label=
"${loadTimeData.getString('siteSettingsCardanoAsk')}"
allow-option-icon="cardano-on"
block-option-icon="cardano-off">
</settings-category-default-radio-group>
<category-setting-exceptions
id="cardanoExceptions"
category="[[contentSettingsTypesEnum_.CARDANO]]"
block-header="${loadTimeData.getString('siteSettingsBlock')}"
allow-header="${loadTimeData.getString('siteSettingsAllow')}"
read-only-list>
</category-setting-exceptions>
</settings-subpage>
</template>
`)
}
function InsertShieldsSubpage (pages: Element)
{
pages.appendChild(
@@ -246,9 +276,14 @@ RegisterPolymerTemplateModifications({
InsertAutoplaySubpage(pages)
const isNativeBraveWalletEnabled =
loadTimeData.getBoolean('isNativeBraveWalletFeatureEnabled')
const isCardanoDappSupportFeatureEnabled =
loadTimeData.getBoolean('isCardanoDappSupportFeatureEnabled')
if (isNativeBraveWalletEnabled) {
InsertEthereumSubpage(pages)
InsertSolanaSubpage(pages)
if (isCardanoDappSupportFeatureEnabled) {
InsertCardanoSubpage(pages)
}
}
InsertShieldsSubpage(pages)
const permissionsLinkRow =
@@ -119,6 +119,8 @@ RegisterPolymerTemplateModifications({
}
const isNativeBraveWalletEnabled =
loadTimeData.getBoolean('isNativeBraveWalletFeatureEnabled')
const isCardanoDappSupportFeatureEnabled =
loadTimeData.getBoolean('isCardanoDappSupportFeatureEnabled')
if (isNativeBraveWalletEnabled) {
insertBefore(firstPermissionItem, html`<site-details-permission
category="[[contentSettingsTypesEnum_.ETHEREUM]]"
@@ -145,6 +147,22 @@ RegisterPolymerTemplateModifications({
solanaSettings.setAttribute(
'label', loadTimeData.getString('siteSettingsSolana'))
}
if (isCardanoDappSupportFeatureEnabled) {
curChild++
insertBefore(firstPermissionItem, html`<site-details-permission
category="[[contentSettingsTypesEnum_.CARDANO]]"
icon="cardano-on">
</site-details-permission>`)
const cardanoSettings = templateContent.querySelector(
`div.list-frame > site-details-permission:nth-child(${curChild})`)
if (!cardanoSettings) {
console.error('[Settings] Couldn\'t find Cardano settings')
} else {
cardanoSettings.setAttribute(
'label', loadTimeData.getString('siteSettingsCardano'))
}
}
const adPersonalization =
templateContent.querySelector('#adPersonalization')
if (!adPersonalization) {
@@ -155,6 +155,8 @@ RegisterPolymerComponentReplacement(
}
const isNativeBraveWalletEnabled =
loadTimeData.getBoolean('isNativeBraveWalletFeatureEnabled')
const isCardanoDappSupportFeatureEnabled =
loadTimeData.getBoolean('isCardanoDappSupportFeatureEnabled')
if (isNativeBraveWalletEnabled) {
currentIndex++
const ethereumItem = {
@@ -176,6 +178,18 @@ RegisterPolymerComponentReplacement(
disabledLabel: 'siteSettingsSolanaBlock'
}
lists.permissionsAdvanced.splice(currentIndex, 0, solanaItem)
if (isCardanoDappSupportFeatureEnabled) {
currentIndex++
const cardanoItem = {
route: routes.SITE_SETTINGS_CARDANO,
id: ContentSettingsTypes.CARDANO,
label: 'siteSettingsCardano',
icon: 'cardano-on',
enabledLabel: 'siteSettingsCardanoAsk',
disabledLabel: 'siteSettingsCardanoBlock'
}
lists.permissionsAdvanced.splice(currentIndex, 0, cardanoItem)
}
}
}
}
@@ -93,9 +93,14 @@ export default function addBraveRoutes(r: Partial<SettingsRoutes>) {
}
const isNativeBraveWalletFeatureEnabled =
loadTimeData.getBoolean('isNativeBraveWalletFeatureEnabled')
const isCardanoDappSupportFeatureEnabled =
loadTimeData.getBoolean('isCardanoDappSupportFeatureEnabled')
if (isNativeBraveWalletFeatureEnabled) {
r.SITE_SETTINGS_ETHEREUM = r.SITE_SETTINGS.createChild('ethereum')
r.SITE_SETTINGS_SOLANA = r.SITE_SETTINGS.createChild('solana')
if (isCardanoDappSupportFeatureEnabled) {
r.SITE_SETTINGS_CARDANO = r.SITE_SETTINGS.createChild('cardano')
}
}
r.SITE_SETTINGS_SHIELDS_STATUS = r.SITE_SETTINGS.createChild('braveShields')
if (r.SITE_SETTINGS_ADS) {
+3
View File
@@ -33,6 +33,7 @@
#include "brave/components/ai_chat/core/common/features.h"
#include "brave/components/brave_vpn/common/buildflags/buildflags.h"
#include "brave/components/brave_vpn/common/features.h"
#include "brave/components/brave_wallet/common/common_utils.h"
#include "brave/components/brave_wallet/common/features.h"
#include "brave/components/commander/common/features.h"
#include "brave/components/commands/common/commands.mojom.h"
@@ -162,6 +163,8 @@ void BraveSettingsUI::AddResources(content::WebUIDataSource* html_source,
"isNativeBraveWalletFeatureEnabled",
base::FeatureList::IsEnabled(
brave_wallet::features::kNativeBraveWalletFeature));
html_source->AddBoolean("isCardanoDappSupportFeatureEnabled",
brave_wallet::IsCardanoDAppSupportEnabled());
html_source->AddBoolean("isBraveWalletAllowed",
brave_wallet::IsAllowedForContext(profile));
html_source->AddBoolean("isForgetFirstPartyStorageFeatureEnabled",
@@ -118,6 +118,9 @@ void BraveAddCommonStrings(content::WebUIDataSource* html_source,
{"siteSettingsCategorySolana", IDS_SETTINGS_SITE_SETTINGS_SOLANA},
{"siteSettingsSolanaAsk", IDS_SETTINGS_SITE_SETTINGS_SOLANA_ASK},
{"siteSettingsSolanaBlock", IDS_SETTINGS_SITE_SETTINGS_SOLANA_BLOCK},
{"siteSettingsCardano", IDS_SETTINGS_SITE_SETTINGS_CARDANO},
{"siteSettingsCardanoAsk", IDS_SETTINGS_SITE_SETTINGS_CARDANO_ASK},
{"siteSettingsCardanoBlock", IDS_SETTINGS_SITE_SETTINGS_CARDANO_BLOCK},
{"siteSettingsGoogleSignIn", IDS_SETTINGS_SITE_SETTINGS_GOOGLE_SIGN_IN},
{"siteSettingsCategoryGoogleSignIn",
@@ -85,8 +85,20 @@ export const WalletSettingsMenu = (props: Props) => {
return
}
const route =
selectedNetwork.coin === BraveWallet.CoinType.ETH ? 'ethereum' : 'solana'
let route: string
switch (selectedNetwork.coin) {
case BraveWallet.CoinType.ETH:
route = 'ethereum'
break
case BraveWallet.CoinType.SOL:
route = 'solana'
break
case BraveWallet.CoinType.ADA:
route = 'cardano'
break
default:
throw new Error('Coin not supported')
}
chrome.tabs.create({ url: `brave://settings/content/${route}` }, () => {
if (chrome.runtime.lastError) {
@@ -1,12 +1,12 @@
diff --git a/chrome/browser/resources/settings/router.ts b/chrome/browser/resources/settings/router.ts
index 25270f0b11a5b29207154fba580fe98978f5035d..1e448ed15c9e4aa2b21242a9020fc93e5c2de79e 100644
index 25270f0b11a5b29207154fba580fe98978f5035d..48de0ed914d8abad79ea2e2cdb61c1c4fbd7fb8f 100644
--- a/chrome/browser/resources/settings/router.ts
+++ b/chrome/browser/resources/settings/router.ts
@@ -121,6 +121,7 @@ export interface SettingsRoutes {
IMPORT_DATA: Route;
SIGN_OUT: Route;
// </if>
+ GET_STARTED: Route; SHIELDS: Route; SOCIAL_BLOCKING: Route; EXTENSIONS: Route; EXTENSIONS_V2: Route; BRAVE_SYNC: Route; BRAVE_SYNC_SETUP: Route; BRAVE_WALLET: Route; BRAVE_WEB3: Route; BRAVE_NEW_TAB: Route; THEMES: Route; SITE_SETTINGS_AUTOPLAY: Route; SITE_SETTINGS_GOOGLE_SIGN_IN: Route; SITE_SETTINGS_LOCALHOST_ACCESS: Route; SITE_SETTINGS_BRAVE_OPEN_AI_CHAT: Route; SITE_SETTINGS_ETHEREUM: Route; SITE_SETTINGS_SOLANA: Route; SITE_SETTINGS_SHIELDS_STATUS: Route; SHIELDS_ADBLOCK: Route; SHORTCUTS: Route; BRAVE_WALLET_NETWORKS: Route; BRAVE_LEO_ASSISTANT: Route; BRAVE_CONTENT: Route; BRAVE_SURVEY_PANELIST: Route; DEFAULT_SEARCH: Route; PRIVATE_SEARCH: Route;
+ GET_STARTED: Route; SHIELDS: Route; SOCIAL_BLOCKING: Route; EXTENSIONS: Route; EXTENSIONS_V2: Route; BRAVE_SYNC: Route; BRAVE_SYNC_SETUP: Route; BRAVE_WALLET: Route; BRAVE_WEB3: Route; BRAVE_NEW_TAB: Route; THEMES: Route; SITE_SETTINGS_AUTOPLAY: Route; SITE_SETTINGS_GOOGLE_SIGN_IN: Route; SITE_SETTINGS_LOCALHOST_ACCESS: Route; SITE_SETTINGS_BRAVE_OPEN_AI_CHAT: Route; SITE_SETTINGS_ETHEREUM: Route; SITE_SETTINGS_SOLANA: Route; SITE_SETTINGS_CARDANO: Route; SITE_SETTINGS_SHIELDS_STATUS: Route; SHIELDS_ADBLOCK: Route; SHORTCUTS: Route; BRAVE_WALLET_NETWORKS: Route; BRAVE_LEO_ASSISTANT: Route; BRAVE_CONTENT: Route; BRAVE_SURVEY_PANELIST: Route; DEFAULT_SEARCH: Route; PRIVATE_SEARCH: Route;
}
/** Class for navigable routes. */
@@ -1,12 +1,12 @@
diff --git a/chrome/browser/resources/settings/site_settings/constants.ts b/chrome/browser/resources/settings/site_settings/constants.ts
index edae5264609c46bfc498d45e569f9b441f5d13b6..fac1a362eb5b433731f6aca4e7adc8b15994957c 100644
index edae5264609c46bfc498d45e569f9b441f5d13b6..cfb0ec586a814bb1caa268d838e9b6f1caa7eb58 100644
--- a/chrome/browser/resources/settings/site_settings/constants.ts
+++ b/chrome/browser/resources/settings/site_settings/constants.ts
@@ -68,6 +68,7 @@ export enum ContentSettingsTypes {
PDF_DOCUMENTS = 'pdfDocuments',
SITE_DATA = 'site-data',
OFFER_WRITING_HELP = 'offer-writing-help',
+ AUTOPLAY = 'autoplay', ETHEREUM = 'ethereum', SOLANA = 'solana', BRAVE_SHIELDS = 'braveShields', GOOGLE_SIGN_IN = 'googleSignIn', LOCALHOST_ACCESS = 'localhostAccess', BRAVE_OPEN_AI_CHAT = 'braveOpenAIChat'
+ AUTOPLAY = 'autoplay', ETHEREUM = 'ethereum', SOLANA = 'solana', CARDANO = 'cardano', BRAVE_SHIELDS = 'braveShields', GOOGLE_SIGN_IN = 'googleSignIn', LOCALHOST_ACCESS = 'localhostAccess', BRAVE_OPEN_AI_CHAT = 'braveOpenAIChat'
}
/**
@@ -1,12 +1,12 @@
diff --git a/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.ts b/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.ts
index 7714bc08dfa780dc3137b9c13596c07ce032fa06..38b4a2e47f6a5164dfe352bd6c6e1be60add3ce6 100644
index 7714bc08dfa780dc3137b9c13596c07ce032fa06..05eed61464ddf53d98117b174e4b4256e3ecb056 100644
--- a/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.ts
+++ b/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.ts
@@ -174,6 +174,7 @@ export class SettingsCategoryDefaultRadioGroupElement extends
case ContentSettingsTypes.WEB_PRINTING:
// "Ask" vs "Blocked".
return ContentSetting.ASK;
+ case ContentSettingsTypes.ETHEREUM: case ContentSettingsTypes.SOLANA: case ContentSettingsTypes.GOOGLE_SIGN_IN: case ContentSettingsTypes.LOCALHOST_ACCESS: case ContentSettingsTypes.BRAVE_OPEN_AI_CHAT: return ContentSetting.ASK; case ContentSettingsTypes.AUTOPLAY: return ContentSetting.ALLOW;
+ case ContentSettingsTypes.ETHEREUM: case ContentSettingsTypes.SOLANA: case ContentSettingsTypes.CARDANO: case ContentSettingsTypes.GOOGLE_SIGN_IN: case ContentSettingsTypes.LOCALHOST_ACCESS: case ContentSettingsTypes.BRAVE_OPEN_AI_CHAT: return ContentSetting.ASK; case ContentSettingsTypes.AUTOPLAY: return ContentSetting.ALLOW;
default:
assertNotReached('Invalid category: ' + this.category);
}
+2
View File
@@ -199,6 +199,8 @@ leo_icons = [
"carat-left.svg",
"carat-right.svg",
"carat-up.svg",
"cardano-off.svg",
"cardano-on.svg",
"check-circle-filled.svg",
"check-circle-outline.svg",
"check-normal.svg",