Skip to content

Commit b1d0576

Browse files
authored
Merge pull request #4046 from brave/add_options_for_disabling_tor
Add setting option for disabling tor component
2 parents ab933b3 + 3e01e1f commit b1d0576

20 files changed

+321
-101
lines changed

app/brave_generated_resources.grd

+6
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,12 @@
178178
<message name="IDS_SETTINGS_ASK_WIDEVINE_INSTALL_DESC" desc="Text fragment for asking widevine install or not">
179179
Ask when a site wants to install Widevine on your computer.
180180
</message>
181+
<message name="IDS_SETTINGS_ENABLE_TOR_TITLE" desc="Text fragment for enabling tor component">
182+
Private Window with Tor
183+
</message>
184+
<message name="IDS_SETTINGS_ENABLE_TOR_DESC" desc="Text fragment for enabling tor component">
185+
Tor hides your IP address from the sites you visit.
186+
</message>
181187
<if expr="is_linux">
182188
<message name="IDS_WIDEVINE_PERMISSION_REQUEST_TEXT_FRAGMENT_INSTALL" desc="Text fragment for Widevine permission request. 'Widevine' is the name of a plugin and should not be translated.">
183189
Install Widevine

browser/brave_browser_process_impl.cc

+24
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "brave/browser/component_updater/brave_component_updater_delegate.h"
1717
#include "brave/browser/profiles/brave_profile_manager.h"
1818
#include "brave/browser/tor/buildflags.h"
19+
#include "brave/browser/ui/brave_browser_command_controller.h"
1920
#include "brave/components/brave_component_updater/browser/local_data_files_service.h"
2021
#include "brave/components/brave_shields/browser/ad_block_custom_filters_service.h"
2122
#include "brave/components/brave_shields/browser/ad_block_regional_service_manager.h"
@@ -27,6 +28,7 @@
2728
#include "brave/components/p3a/buildflags.h"
2829
#include "brave/components/p3a/brave_histogram_rewrite.h"
2930
#include "brave/components/p3a/brave_p3a_service.h"
31+
#include "chrome/browser/ui/browser_list.h"
3032
#include "chrome/common/buildflags.h"
3133
#include "chrome/common/chrome_paths.h"
3234
#include "components/component_updater/component_updater_service.h"
@@ -57,11 +59,14 @@
5759

5860
#if BUILDFLAG(ENABLE_TOR)
5961
#include "brave/browser/extensions/brave_tor_client_updater.h"
62+
#include "brave/common/tor/pref_names.h"
6063
#endif
6164

6265
#if defined(OS_ANDROID)
6366
#include "chrome/browser/android/chrome_feature_list.h"
6467
#include "chrome/browser/android/component_updater/background_task_update_scheduler.h"
68+
#else
69+
#include "chrome/browser/ui/browser.h"
6570
#endif
6671

6772
BraveBrowserProcessImpl* g_brave_browser_process = nullptr;
@@ -102,6 +107,17 @@ BraveBrowserProcessImpl::BraveBrowserProcessImpl(StartupData* startup_data)
102107
#endif // BUILDFLAG(BRAVE_P3A_ENABLED)
103108
}
104109

110+
void BraveBrowserProcessImpl::Init() {
111+
BrowserProcessImpl::Init();
112+
113+
#if BUILDFLAG(ENABLE_TOR)
114+
pref_change_registrar_.Add(
115+
tor::prefs::kTorDisabled,
116+
base::Bind(&BraveBrowserProcessImpl::OnTorEnabledChanged,
117+
base::Unretained(this)));
118+
#endif
119+
}
120+
105121
brave_component_updater::BraveComponent::Delegate*
106122
BraveBrowserProcessImpl::brave_component_updater_delegate() {
107123
if (!brave_component_updater_delegate_)
@@ -246,6 +262,14 @@ BraveBrowserProcessImpl::tor_client_updater() {
246262
brave_component_updater_delegate());
247263
return tor_client_updater_.get();
248264
}
265+
266+
void BraveBrowserProcessImpl::OnTorEnabledChanged() {
267+
// Update all browsers' tor command status.
268+
for (Browser* browser : *BrowserList::GetInstance()) {
269+
static_cast<chrome::BraveBrowserCommandController*>(
270+
browser->command_controller())->UpdateCommandForTor();
271+
}
272+
}
249273
#endif
250274

251275
brave::BraveP3AService* BraveBrowserProcessImpl::brave_p3a_service() {

browser/brave_browser_process_impl.h

+7
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,16 @@ class BraveBrowserProcessImpl : public BrowserProcessImpl {
9393
brave::BraveStatsUpdater* brave_stats_updater();
9494

9595
private:
96+
// BrowserProcessImpl overrides:
97+
void Init() override;
98+
9699
void CreateProfileManager();
97100
void CreateNotificationPlatformBridge();
98101

102+
#if BUILDFLAG(ENABLE_TOR)
103+
void OnTorEnabledChanged();
104+
#endif
105+
99106
BraveComponent::Delegate* brave_component_updater_delegate();
100107

101108
// local_data_files_service_ should always be first because it needs
+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/* Copyright (c) 2019 The Brave Authors. All rights reserved.
2+
* This Source Code Form is subject to the terms of the Mozilla Public
3+
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
4+
* You can obtain one at http://mozilla.org/MPL/2.0/. */
5+
6+
#include "brave/browser/tor/buildflags.h"
7+
#include "chrome/browser/browser_process.h"
8+
#include "chrome/test/base/in_process_browser_test.h"
9+
10+
#if BUILDFLAG(ENABLE_TOR)
11+
#include "brave/browser/tor/tor_profile_service.h"
12+
#endif
13+
14+
using BraveLocalStateBrowserTest = InProcessBrowserTest;
15+
16+
IN_PROC_BROWSER_TEST_F(BraveLocalStateBrowserTest, BasicTest) {
17+
#if BUILDFLAG(ENABLE_TOR)
18+
// Tor is enabled by default.
19+
EXPECT_FALSE(tor::TorProfileService::IsTorDisabled());
20+
#endif
21+
}

browser/policy/brave_policy_browsertest.cc

+5-9
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#include "brave/browser/tor/buildflags.h"
77
#include "brave/common/pref_names.h"
8+
#include "chrome/browser/browser_process.h"
89
#include "chrome/browser/profiles/profile.h"
910
#include "chrome/browser/ui/browser.h"
1011
#include "chrome/test/base/in_process_browser_test.h"
@@ -15,7 +16,6 @@
1516

1617
#if BUILDFLAG(ENABLE_TOR)
1718
#include "brave/browser/tor/tor_profile_service.h"
18-
#include "brave/common/tor/pref_names.h"
1919
#endif
2020

2121
using testing::_;
@@ -39,7 +39,6 @@ class BravePolicyTest : public InProcessBrowserTest {
3939
};
4040

4141
#if BUILDFLAG(ENABLE_TOR)
42-
#if defined(OS_WIN)
4342
// This policy only exists on Windows.
4443
// Sets the tor policy before the browser is started.
4544
class TorDisabledPolicyBrowserTest : public BravePolicyTest {
@@ -59,6 +58,8 @@ class TorDisabledPolicyBrowserTest : public BravePolicyTest {
5958
};
6059

6160
IN_PROC_BROWSER_TEST_F(TorDisabledPolicyBrowserTest, TorDisabledPrefValueTest) {
61+
// When policy is set, explicit setting doesn't change its pref value.
62+
tor::TorProfileService::SetTorDisabled(false);
6263
EXPECT_TRUE(tor::TorProfileService::IsTorDisabled());
6364
}
6465

@@ -79,15 +80,10 @@ class TorEnabledPolicyBrowserTest : public BravePolicyTest {
7980
};
8081

8182
IN_PROC_BROWSER_TEST_F(TorEnabledPolicyBrowserTest, TorDisabledPrefValueTest) {
83+
// When policy is set, explicit setting doesn't change its pref value.
84+
tor::TorProfileService::SetTorDisabled(true);
8285
EXPECT_FALSE(tor::TorProfileService::IsTorDisabled());
8386
}
84-
85-
// W/o TorDisabled group policy, kTorDisabled pref value should be false.
86-
IN_PROC_BROWSER_TEST_F(NoTorPolicyBrowserTest,
87-
DefaultTorDisabledPrefValueTest) {
88-
EXPECT_FALSE(tor::TorProfileService::IsTorDisabled());
89-
}
90-
#endif // OS_WIN
9187
#endif // ENABLE_TOR
9288

9389
} // namespace policy

browser/resources/settings/BUILD.gn

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import("//brave/browser/tor/buildflags/buildflags.gni")
12
import("//brave/build/config.gni")
23
import("//chrome/browser/resources/optimize_webui.gni")
34
import("//chrome/common/features.gni")
@@ -6,7 +7,10 @@ import("//tools/grit/grit_rule.gni")
67
grit("resources") {
78
source = "settings_resources.grd"
89

9-
defines = ["is_release_channel=$is_release_channel"]
10+
defines = [
11+
"is_release_channel=$is_release_channel",
12+
"enable_tor=$enable_tor",
13+
]
1014

1115
source_is_generated = optimize_webui
1216

browser/resources/settings/brave_default_extensions_page/brave_default_extensions_browser_proxy.js

+12
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ cr.define('settings', function() {
1212
setBraveWalletEnabled(value) {}
1313
setHangoutsEnabled(value) {}
1414
setIPFSCompanionEnabled(value) {}
15+
setTorEnabled(value) {}
16+
isTorEnabled() {}
17+
isTorManaged() {}
1518
getRestartNeeded() {}
1619
}
1720

@@ -35,6 +38,15 @@ cr.define('settings', function() {
3538
setMediaRouterEnabled(value) {
3639
chrome.send('setMediaRouterEnabled', [value]);
3740
}
41+
setTorEnabled(value) {
42+
chrome.send('setTorEnabled', [value]);
43+
}
44+
isTorEnabled() {
45+
return cr.sendWithPromise('isTorEnabled');
46+
}
47+
isTorManaged() {
48+
return cr.sendWithPromise('isTorManaged');
49+
}
3850
getRestartNeeded() {
3951
return cr.sendWithPromise('getRestartNeeded');
4052
}

browser/resources/settings/brave_default_extensions_page/brave_default_extensions_page.html

+22-12
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,6 @@
7272
sub-label="$i18n{braveWalletEnabledDesc}"
7373
on-settings-boolean-control-change="onBraveWalletEnabledChange_">
7474
</settings-toggle-button>
75-
<settings-toggle-button id="webTorrentEnabled"
76-
pref="{{prefs.brave.webtorrent_enabled}}"
77-
label="WebTorrent"
78-
sub-label="$i18n{webTorrentEnabledDesc}"
79-
on-settings-boolean-control-change="onWebTorrentEnabledChange_">
80-
</settings-toggle-button>
8175
<settings-toggle-button id="hangoutsEnabled"
8276
pref="{{prefs.brave.hangouts_enabled}}"
8377
label="Hangouts"
@@ -90,17 +84,33 @@
9084
sub-label="$i18n{ipfsCompanionEnabledDesc}"
9185
on-settings-boolean-control-change="onIPFSCompanionEnabledChange_">
9286
</settings-toggle-button>
93-
<settings-toggle-button
94-
pref="{{prefs.brave.ask_widevine_install}}"
95-
label="Widevine"
96-
sub-label="$i18n{appearanceSettingsAskWidevineInstallDesc}">
97-
</settings-toggle-button>
9887
<settings-toggle-button id="mediaRouterEnabled"
9988
pref="{{prefs.brave.enable_media_router}}"
10089
label="Media Router"
10190
sub-label="$i18n{mediaRouterEnabledDesc}"
10291
on-settings-boolean-control-change="onMediaRouterEnabledChange_">
10392
</settings-toggle-button>
93+
<if expr="enable_tor">
94+
<settings-toggle-button id="torEnabled"
95+
pref=""
96+
checked="[[torEnabled_]]"
97+
label="$i18n{torEnabledLabel}"
98+
sub-label="$i18n{torEnabledDesc}"
99+
disabled="[[disableTorOption_]]"
100+
on-settings-boolean-control-change="onTorEnabledChange_">
101+
</settings-toggle-button>
102+
</if>
103+
<settings-toggle-button id="webTorrentEnabled"
104+
pref="{{prefs.brave.webtorrent_enabled}}"
105+
label="WebTorrent"
106+
sub-label="$i18n{webTorrentEnabledDesc}"
107+
on-settings-boolean-control-change="onWebTorrentEnabledChange_">
108+
</settings-toggle-button>
109+
<settings-toggle-button
110+
pref="{{prefs.brave.ask_widevine_install}}"
111+
label="Widevine"
112+
sub-label="$i18n{appearanceSettingsAskWidevineInstallDesc}">
113+
</settings-toggle-button>
104114
<div class="settings-row" id="manageExtensionsRow">
105115
<cr-link-row icon-class="icon-external"
106116
label="$i18n{manageExtensionsLabel}" on-click="openExtensionsPage_">
@@ -113,7 +123,7 @@
113123
on-click="openWebStoreUrl_" external>
114124
</cr-link-row>
115125
</div>
116-
<template is="dom-if" if="{{ showRestartToast }}">
126+
<template is="dom-if" if="{{ showRestartToast_ }}">
117127
<div id="needsRestart">
118128
<div class="flex-container">
119129
<div class="flex restart-notice" jstcache="0">$i18n{restartNotice}</div>

browser/resources/settings/brave_default_extensions_page/brave_default_extensions_page.js

+28-7
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,18 @@ Polymer({
1616
WebUIListenerBehavior,
1717
],
1818

19+
properties: {
20+
showRestartToast_: Boolean,
21+
torEnabled_: Boolean,
22+
disableTorOption_: Boolean,
23+
},
24+
1925
/** @private {?settings.BraveDefaultExtensionsBrowserProxy} */
2026
browserProxy_: null,
21-
showRestartToast: false,
2227

2328
/** @override */
2429
created: function() {
2530
this.browserProxy_ = settings.BraveDefaultExtensionsBrowserProxyImpl.getInstance();
26-
this.browserProxy_.getRestartNeeded().then(show => {
27-
this.showRestartToast = show;
28-
});
29-
this.addWebUIListener('brave-needs-restart-changed', (needsRestart) => {
30-
this.showRestartToast = needsRestart
31-
})
3231
},
3332

3433
/** @override */
@@ -39,6 +38,24 @@ Polymer({
3938
this.onIPFSCompanionEnabledChange_ = this.onIPFSCompanionEnabledChange_.bind(this)
4039
this.openExtensionsPage_ = this.openExtensionsPage_.bind(this)
4140
this.restartBrowser_ = this.restartBrowser_.bind(this)
41+
this.onTorEnabledChange_ = this.onTorEnabledChange_.bind(this)
42+
43+
this.addWebUIListener('brave-needs-restart-changed', (needsRestart) => {
44+
this.showRestartToast_ = needsRestart
45+
})
46+
this.addWebUIListener('tor-enabled-changed', (enabled) => {
47+
this.torEnabled_ = enabled
48+
})
49+
50+
this.browserProxy_.getRestartNeeded().then(show => {
51+
this.showRestartToast_ = show;
52+
});
53+
this.browserProxy_.isTorEnabled().then(enabled => {
54+
this.torEnabled_ = enabled
55+
})
56+
this.browserProxy_.isTorManaged().then(managed => {
57+
this.disableTorOption_ = managed
58+
})
4259
},
4360

4461
onWebTorrentEnabledChange_: function() {
@@ -65,6 +82,10 @@ Polymer({
6582
this.browserProxy_.setMediaRouterEnabled(this.$.mediaRouterEnabled.checked);
6683
},
6784

85+
onTorEnabledChange_: function() {
86+
this.browserProxy_.setTorEnabled(this.$.torEnabled.checked);
87+
},
88+
6889
openExtensionsPage_: function() {
6990
window.open("chrome://extensions", "_self");
7091
},

browser/tor/tor_profile_service.cc

+5-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ void TorProfileService::RegisterLocalStatePrefs(PrefRegistrySimple* registry) {
5656
const std::string tor_proxy_uri =
5757
std::string(kTorProxyScheme) + std::string(kTorProxyAddress) + ":" + port;
5858
registry->RegisterStringPref(prefs::kTorProxyString, tor_proxy_uri);
59-
// Tor for group policy. Only can be true by group policy.
6059
registry->RegisterBooleanPref(prefs::kTorDisabled, false);
6160
}
6261

@@ -65,6 +64,11 @@ bool TorProfileService::IsTorDisabled() {
6564
return g_browser_process->local_state()->GetBoolean(prefs::kTorDisabled);
6665
}
6766

67+
// static
68+
void TorProfileService::SetTorDisabled(bool disabled) {
69+
g_browser_process->local_state()->SetBoolean(prefs::kTorDisabled, disabled);
70+
}
71+
6872
std::string TorProfileService::GetTorProxyURI() {
6973
return g_browser_process->local_state()->GetString(prefs::kTorProxyString);
7074
}

browser/tor/tor_profile_service.h

+2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class PrefRegistrySyncable;
2828
}
2929

3030
class PrefRegistrySimple;
31+
class BraveAppMenuBrowserTestWithTorDisabled;
3132

3233
namespace tor {
3334

@@ -39,6 +40,7 @@ class TorProfileService : public KeyedService {
3940
~TorProfileService() override;
4041

4142
static void RegisterLocalStatePrefs(PrefRegistrySimple* registry);
43+
static void SetTorDisabled(bool disabled);
4244
static bool IsTorDisabled();
4345

4446
virtual void SetNewTorCircuit(content::WebContents* web_contents) = 0;

browser/ui/BUILD.gn

+8-2
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ source_set("ui") {
169169
"//brave/components/webcompat_reporter/browser",
170170
"//brave/common",
171171
"//brave/common:pref_names",
172+
"//brave/common/tor",
172173
"//brave/components/brave_adblock_ui:generated_resources",
173174
"//brave/components/webcompat_reporter/ui:generated_resources",
174175
"//brave/components/brave_new_tab_ui:generated_resources",
@@ -237,10 +238,15 @@ source_set("ui") {
237238
"views/tabs/brave_new_tab_button.h",
238239
"views/toolbar/brave_toolbar_view.cc",
239240
"views/toolbar/brave_toolbar_view.h",
240-
"webui/settings/brave_default_extensions_handler.cc",
241-
"webui/settings/brave_default_extensions_handler.h",
242241
]
243242

243+
if (enable_extensions) {
244+
sources += [
245+
"webui/settings/brave_default_extensions_handler.cc",
246+
"webui/settings/brave_default_extensions_handler.h",
247+
]
248+
}
249+
244250
if (brave_rewards_enabled) {
245251
sources += [
246252
"views/brave_actions/brave_rewards_action_stub_view.cc",

0 commit comments

Comments
 (0)