[Rewards] Add a toggle on the internals page to enable verbose mode (#34860)
This commit is contained in:
+4
-1
@@ -149,7 +149,10 @@ source_set("ui") {
|
||||
}
|
||||
|
||||
if (enable_brave_rewards) {
|
||||
deps += [ "//brave/browser/brave_rewards" ]
|
||||
deps += [
|
||||
"//brave/browser/brave_rewards",
|
||||
"//chrome/browser:flags",
|
||||
]
|
||||
|
||||
sources += [
|
||||
"webui/brave_rewards/rewards_page_data_source.cc",
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
|
||||
#include "base/check.h"
|
||||
#include "base/dcheck_is_on.h"
|
||||
#include "base/feature_list.h"
|
||||
#include "base/json/json_reader.h"
|
||||
#include "base/memory/raw_ptr.h"
|
||||
#include "base/memory/weak_ptr.h"
|
||||
@@ -21,13 +22,19 @@
|
||||
#include "brave/components/brave_ads/buildflags/buildflags.h"
|
||||
#include "brave/components/brave_ads/core/browser/service/ads_service.h"
|
||||
#include "brave/components/brave_rewards/content/rewards_service.h"
|
||||
#include "brave/components/brave_rewards/core/features.h"
|
||||
#include "brave/components/brave_rewards/core/mojom/rewards.mojom.h"
|
||||
#include "brave/components/brave_rewards/core/pref_names.h"
|
||||
#include "brave/components/brave_rewards/resources/grit/brave_rewards_resources.h"
|
||||
#include "brave/components/brave_rewards/resources/grit/rewards_internals_generated_map.h"
|
||||
#include "chrome/browser/about_flags.h"
|
||||
#include "chrome/browser/browser_process.h"
|
||||
#include "chrome/browser/lifetime/application_lifetime.h"
|
||||
#include "chrome/browser/profiles/profile.h"
|
||||
#include "components/prefs/pref_service.h"
|
||||
#include "components/webui/flags/pref_service_flags_storage.h"
|
||||
#include "content/public/browser/web_ui.h"
|
||||
#include "content/public/browser/web_ui_data_source.h"
|
||||
#include "content/public/browser/web_ui_message_handler.h"
|
||||
|
||||
#if BUILDFLAG(ENABLE_BRAVE_ADS)
|
||||
@@ -77,6 +84,7 @@ class RewardsInternalsDOMHandler : public content::WebUIMessageHandler {
|
||||
void GetAdDiagnostics(const base::ListValue& args);
|
||||
void OnGetAdDiagnostics(std::optional<base::ListValue> diagnostics);
|
||||
void SetAdDiagnosticId(const base::ListValue& args);
|
||||
void ToggleVerboseLoggingAndRestart(const base::ListValue& args);
|
||||
void GetEnvironment(const base::ListValue& args);
|
||||
void OnGetEnvironment(brave_rewards::mojom::Environment environment);
|
||||
|
||||
@@ -134,6 +142,11 @@ void RewardsInternalsDOMHandler::RegisterMessages() {
|
||||
"brave_rewards_internals.setAdDiagnosticId",
|
||||
base::BindRepeating(&RewardsInternalsDOMHandler::SetAdDiagnosticId,
|
||||
base::Unretained(this)));
|
||||
web_ui()->RegisterMessageCallback(
|
||||
"brave_rewards_internals.toggleVerboseLoggingAndRestart",
|
||||
base::BindRepeating(
|
||||
&RewardsInternalsDOMHandler::ToggleVerboseLoggingAndRestart,
|
||||
base::Unretained(this)));
|
||||
web_ui()->RegisterMessageCallback(
|
||||
"brave_rewards_internals.getEnvironment",
|
||||
base::BindRepeating(&RewardsInternalsDOMHandler::GetEnvironment,
|
||||
@@ -455,6 +468,21 @@ void RewardsInternalsDOMHandler::SetAdDiagnosticId(
|
||||
#endif // BUILDFLAG(ENABLE_BRAVE_ADS)
|
||||
}
|
||||
|
||||
void RewardsInternalsDOMHandler::ToggleVerboseLoggingAndRestart(
|
||||
const base::ListValue& args) {
|
||||
std::string internal_name = "brave-rewards-verbose-logging";
|
||||
if (base::FeatureList::IsEnabled(
|
||||
brave_rewards::features::kVerboseLoggingFeature)) {
|
||||
internal_name += "@0"; // The "Default" (disabled) option.
|
||||
} else {
|
||||
internal_name += "@1"; // The "Enabled" option.
|
||||
}
|
||||
flags_ui::PrefServiceFlagsStorage flags_storage(
|
||||
g_browser_process->local_state());
|
||||
about_flags::SetFeatureEntryEnabled(&flags_storage, internal_name, true);
|
||||
chrome::AttemptRestart();
|
||||
}
|
||||
|
||||
void RewardsInternalsDOMHandler::GetEnvironment(const base::ListValue& args) {
|
||||
if (!rewards_service_) {
|
||||
return;
|
||||
@@ -482,8 +510,13 @@ void RewardsInternalsDOMHandler::OnGetEnvironment(
|
||||
BraveRewardsInternalsUI::BraveRewardsInternalsUI(content::WebUI* web_ui,
|
||||
std::string_view name)
|
||||
: WebUIController(web_ui) {
|
||||
CreateAndAddWebUIDataSource(web_ui, name, kRewardsInternalsGenerated,
|
||||
IDR_BRAVE_REWARDS_INTERNALS_HTML);
|
||||
auto* source =
|
||||
CreateAndAddWebUIDataSource(web_ui, name, kRewardsInternalsGenerated,
|
||||
IDR_BRAVE_REWARDS_INTERNALS_HTML);
|
||||
|
||||
source->AddBoolean("verboseLoggingEnabled",
|
||||
base::FeatureList::IsEnabled(
|
||||
brave_rewards::features::kVerboseLoggingFeature));
|
||||
|
||||
auto handler_owner = std::make_unique<RewardsInternalsDOMHandler>();
|
||||
RewardsInternalsDOMHandler* handler = handler_owner.get();
|
||||
|
||||
+20
-2
@@ -7,6 +7,10 @@ import { color, font } from '@brave/leo/tokens/css/variables'
|
||||
import { scoped } from '$web-common/scoped_css'
|
||||
|
||||
export const style = scoped.css`
|
||||
& {
|
||||
--leo-dialog-padding: 32px;
|
||||
}
|
||||
|
||||
h4 {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -33,8 +37,22 @@ export const style = scoped.css`
|
||||
border: none;
|
||||
}
|
||||
|
||||
.auto-refresh {
|
||||
padding: 0 16px;
|
||||
leo-toggle {
|
||||
font: ${font.small.semibold};
|
||||
margin-inline-end: 4px;
|
||||
}
|
||||
|
||||
.verbose-logging-info {
|
||||
--leo-icon-size: 48px;
|
||||
--leo-icon-color: ${color.systemfeedback.warningIcon};
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 16px;
|
||||
background: ${color.systemfeedback.warningBackground};
|
||||
padding: 24px;
|
||||
border-radius: 8px;
|
||||
border: solid 1px ${color.systemfeedback.warningVibrant};
|
||||
color: ${color.systemfeedback.warningText};
|
||||
}
|
||||
`
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
|
||||
import * as React from 'react'
|
||||
import Button from '@brave/leo/react/button'
|
||||
import Dialog from '@brave/leo/react/dialog'
|
||||
import Icon from '@brave/leo/react/icon'
|
||||
import Toggle from '@brave/leo/react/toggle'
|
||||
|
||||
import { useAppState, useAppActions } from '../lib/app_context'
|
||||
@@ -15,10 +17,14 @@ export function RewardsLog() {
|
||||
const actions = useAppActions()
|
||||
const { getString } = actions
|
||||
const log = useAppState((state) => state.rewardsLog)
|
||||
const verboseLoggingEnabled = useAppState(
|
||||
(state) => state.verboseLoggingEnabled,
|
||||
)
|
||||
|
||||
const textAreaRef = React.useRef<HTMLTextAreaElement>(null)
|
||||
const [logLoaded, setLogLoaded] = React.useState(log.length > 0)
|
||||
const [autoRefresh, setAutoRefresh] = React.useState(false)
|
||||
const [showVerboseDialog, setShowVerboseDialog] = React.useState(false)
|
||||
|
||||
React.useEffect(() => {
|
||||
actions.loadRewardsLog()
|
||||
@@ -77,15 +83,20 @@ export function RewardsLog() {
|
||||
>
|
||||
<h4>
|
||||
<span className='title'>Rewards Log</span>
|
||||
<span className='auto-refresh'>
|
||||
<Toggle
|
||||
size='small'
|
||||
checked={autoRefresh}
|
||||
onChange={() => setAutoRefresh(!autoRefresh)}
|
||||
>
|
||||
Auto-refresh
|
||||
</Toggle>
|
||||
</span>
|
||||
<Toggle
|
||||
size='small'
|
||||
checked={autoRefresh}
|
||||
onChange={() => setAutoRefresh(!autoRefresh)}
|
||||
>
|
||||
Auto-refresh
|
||||
</Toggle>
|
||||
<Toggle
|
||||
size='small'
|
||||
checked={verboseLoggingEnabled}
|
||||
onChange={() => setShowVerboseDialog(true)}
|
||||
>
|
||||
Verbose mode
|
||||
</Toggle>
|
||||
<Button
|
||||
size='small'
|
||||
onClick={download}
|
||||
@@ -105,6 +116,42 @@ export function RewardsLog() {
|
||||
value={log}
|
||||
readOnly
|
||||
/>
|
||||
|
||||
<Dialog
|
||||
isOpen={showVerboseDialog}
|
||||
onClose={() => setShowVerboseDialog(false)}
|
||||
backdropClickCloses={false}
|
||||
>
|
||||
<div slot='title'>Brave Rewards Verbose Logging</div>
|
||||
<div className='verbose-logging-info'>
|
||||
<Icon name='warning-triangle-filled' />
|
||||
<div>
|
||||
Enables detailed logging of Brave Rewards system events to a log
|
||||
file stored on your device. Please note that this log file could
|
||||
include information such as browsing history and credentials such as
|
||||
passwords and access tokens depending on your activity. Please do
|
||||
not share it unless asked to by Brave staff.
|
||||
</div>
|
||||
</div>
|
||||
<div slot='actions'>
|
||||
<Button
|
||||
kind='plain-faint'
|
||||
onClick={() => setShowVerboseDialog(false)}
|
||||
>
|
||||
Cancel
|
||||
</Button>
|
||||
<Button
|
||||
onClick={() => {
|
||||
setShowVerboseDialog(false)
|
||||
actions.toggleVerboseLoggingAndRestart()
|
||||
}}
|
||||
>
|
||||
{verboseLoggingEnabled
|
||||
? 'Disable and Restart'
|
||||
: 'Enable and Restart'}
|
||||
</Button>
|
||||
</div>
|
||||
</Dialog>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ export interface AppState {
|
||||
creationEnvironment: Environment | null
|
||||
contributions: ContributionInfo[]
|
||||
rewardsLog: string
|
||||
verboseLoggingEnabled: boolean
|
||||
externalWallet: ExternalWallet | null
|
||||
externalWalletId: string
|
||||
externalWalletAccountId: string
|
||||
@@ -30,6 +31,7 @@ export interface AppState {
|
||||
clearRewardsLog: () => void
|
||||
loadRewardsLog: () => void
|
||||
fetchFullRewardsLog: () => Promise<string>
|
||||
toggleVerboseLoggingAndRestart: () => void
|
||||
loadContributions: () => void
|
||||
loadRewardsEvents: () => void
|
||||
}
|
||||
@@ -88,6 +90,7 @@ export function defaultAppStore() {
|
||||
creationEnvironment: null,
|
||||
contributions: [],
|
||||
rewardsLog: '',
|
||||
verboseLoggingEnabled: false,
|
||||
externalWallet: null,
|
||||
externalWalletId: '',
|
||||
externalWalletAccountId: '',
|
||||
@@ -104,6 +107,7 @@ export function defaultAppStore() {
|
||||
async fetchFullRewardsLog() {
|
||||
return ''
|
||||
},
|
||||
toggleVerboseLoggingAndRestart() {},
|
||||
loadContributions() {},
|
||||
loadRewardsEvents() {},
|
||||
},
|
||||
|
||||
@@ -192,6 +192,9 @@ export function createAppStore(): AppStore {
|
||||
})
|
||||
|
||||
function loadData() {
|
||||
store.update({
|
||||
verboseLoggingEnabled: loadTimeData.getBoolean('verboseLoggingEnabled'),
|
||||
})
|
||||
chrome.send('brave_rewards_internals.getRewardsInternalsInfo')
|
||||
chrome.send('brave_rewards_internals.getBalance')
|
||||
chrome.send('brave_rewards_internals.getExternalWallet')
|
||||
@@ -228,6 +231,10 @@ export function createAppStore(): AppStore {
|
||||
})
|
||||
},
|
||||
|
||||
toggleVerboseLoggingAndRestart() {
|
||||
chrome.send('brave_rewards_internals.toggleVerboseLoggingAndRestart')
|
||||
},
|
||||
|
||||
loadContributions() {
|
||||
chrome.send('brave_rewards_internals.getContributions')
|
||||
},
|
||||
|
||||
@@ -75,6 +75,12 @@ export function createAppStore(): AppStore {
|
||||
return 'full log'
|
||||
},
|
||||
|
||||
toggleVerboseLoggingAndRestart() {
|
||||
store.update((state) => ({
|
||||
verboseLoggingEnabled: !state.verboseLoggingEnabled,
|
||||
}))
|
||||
},
|
||||
|
||||
loadContributions() {
|
||||
store.update({
|
||||
contributions: [
|
||||
|
||||
Reference in New Issue
Block a user