Skip to content

Commit f56db6d

Browse files
authored
Merge pull request #2493 from brave/readd-chromecast
Re-add support for Chromecast
2 parents 49c1fb8 + e0ed3de commit f56db6d

17 files changed

+340
-3
lines changed

app/brave_generated_resources.grd

+9
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,15 @@ By installing this extension, you are agreeing to the Google Widevine Terms of U
403403
<message name="IDS_SETTINGS_HANGOUTS_ENABLED_DESC" desc="The description for Hangouts switch in settings">
404404
Uses Hangouts component to enable screen sharing and other features in the browser.
405405
</message>
406+
<message name="IDS_SETTINGS_MEDIA_ROUTER_ENABLED_DESC" desc="The description for Media Router switch in settings">
407+
Uses Media Router component to enable Chromecast in the browser.
408+
</message>
409+
<message name="IDS_SETTINGS_RESTART_NOTICE" desc="Notifies the user that they need to relaunch Brave">
410+
Your changes will take effect the next time you relaunch Brave.
411+
</message>
412+
<message name="IDS_SETTINGS_RELAUNCH_BUTTON_LABEL" desc="Notifies the user that they need to relaunch Brave">
413+
Relaunch Now
414+
</message>
406415
<message name="IDS_SETTINGS_IPFS_COMPANION_ENABLED_DESC" desc="The description for IPFS companion switch in settings">
407416
Uses IPFS companion extension to support IPFS in the browser.
408417
</message>

app/brave_main_delegate.cc

+7-1
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,14 @@ bool BraveMainDelegate::BasicStartupComplete(int* exit_code) {
137137
command_line.AppendSwitch(switches::kDisableDomainReliability);
138138
command_line.AppendSwitch(switches::kDisableChromeGoogleURLTrackingClient);
139139
command_line.AppendSwitch(switches::kNoPings);
140-
command_line.AppendSwitchASCII(switches::kExtensionsInstallVerification,
140+
141+
// Setting these to default values in Chromium to maintain parity
142+
// See: ChromeContentVerifierDelegate::GetDefaultMode for ContentVerification
143+
// See: GetStatus in install_verifier.cc for InstallVerification
144+
command_line.AppendSwitchASCII(switches::kExtensionContentVerification,
141145
switches::kExtensionContentVerificationEnforceStrict);
146+
command_line.AppendSwitchASCII(switches::kExtensionsInstallVerification,
147+
"enforce");
142148

143149
// Enabled features.
144150
const std::unordered_set<const char*> enabled_features = {

browser/brave_profile_prefs.cc

+13
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
#include "components/signin/core/browser/signin_pref_names.h"
2121
#include "components/spellcheck/browser/pref_names.h"
2222
#include "components/sync/base/pref_names.h"
23+
#include "extensions/buildflags/buildflags.h"
24+
#include "extensions/common/feature_switch.h"
2325
#include "third_party/widevine/cdm/buildflags.h"
2426

2527
#if BUILDFLAG(BUNDLE_WIDEVINE_CDM)
@@ -34,6 +36,8 @@
3436
#include "brave/browser/tor/tor_profile_service.h"
3537
#endif
3638

39+
using extensions::FeatureSwitch;
40+
3741
namespace brave {
3842

3943
void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
@@ -82,6 +86,15 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
8286
// Media Router
8387
registry->SetDefaultPrefValue(prefs::kEnableMediaRouter, base::Value(false));
8488

89+
// 1. We do not want to enable the MediaRouter pref directly, so
90+
// using a proxy pref to handle Media Router setting
91+
// 2. On upgrade users might have enabled Media Router and the pref should
92+
// be set correctly, so we use feature switch to set the initial value
93+
#if BUILDFLAG(ENABLE_EXTENSIONS)
94+
registry->RegisterBooleanPref(kBraveEnabledMediaRouter,
95+
FeatureSwitch::load_media_router_component_extension()->IsEnabled());
96+
#endif
97+
8598
// No sign into Brave functionality
8699
registry->SetDefaultPrefValue(prefs::kSigninAllowed, base::Value(false));
87100

browser/extensions/api/settings_private/brave_prefs_util.cc

+3
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ const PrefsUtil::TypedPrefMap& BravePrefsUtil::GetWhitelistedKeys() {
8383
// IPFS Companion pref
8484
(*s_brave_whitelist)[kIPFSCompanionEnabled] =
8585
settings_api::PrefType::PREF_TYPE_BOOLEAN;
86+
// Media Router Pref
87+
(*s_brave_whitelist)[kBraveEnabledMediaRouter] =
88+
settings_api::PrefType::PREF_TYPE_BOOLEAN;
8689
return *s_brave_whitelist;
8790
}
8891

browser/net/brave_common_static_redirect_network_delegate_helper.cc

+20
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,33 @@ int OnBeforeURLRequest_CommonStaticRedirectWork(
4545
const ResponseCallback& next_callback,
4646
std::shared_ptr<BraveRequestInfo> ctx) {
4747
GURL::Replacements replacements;
48+
static URLPattern chromecast_pattern(
49+
URLPattern::SCHEME_HTTP | URLPattern::SCHEME_HTTPS, kChromeCastPrefix);
50+
static URLPattern clients4_pattern(
51+
URLPattern::SCHEME_HTTP | URLPattern::SCHEME_HTTPS, kClients4Prefix);
52+
4853
if (IsUpdaterURL(ctx->request_url)) {
4954
replacements.SetQueryStr(ctx->request_url.query_piece());
5055
ctx->new_url_spec = GURL(kBraveUpdatesExtensionsEndpoint)
5156
.ReplaceComponents(replacements)
5257
.spec();
5358
return net::OK;
5459
}
60+
61+
if (chromecast_pattern.MatchesURL(ctx->request_url)) {
62+
replacements.SetSchemeStr("https");
63+
replacements.SetHostStr(kBraveRedirectorProxy);
64+
ctx->new_url_spec = ctx->request_url.ReplaceComponents(replacements).spec();
65+
return net::OK;
66+
}
67+
68+
if (clients4_pattern.MatchesHost(ctx->request_url)) {
69+
replacements.SetSchemeStr("https");
70+
replacements.SetHostStr(kBraveClients4Proxy);
71+
ctx->new_url_spec = ctx->request_url.ReplaceComponents(replacements).spec();
72+
return net::OK;
73+
}
74+
5575
return net::OK;
5676
}
5777

browser/net/brave_common_static_redirect_network_delegate_helper_unittest.cc

+47
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,51 @@ TEST_F(BraveCommonStaticRedirectNetworkDelegateHelperTest,
7575
EXPECT_EQ(ret, net::OK);
7676
}
7777

78+
TEST_F(BraveCommonStaticRedirectNetworkDelegateHelperTest,
79+
RedirectChromecastDownload) {
80+
net::TestDelegate test_delegate;
81+
GURL url(
82+
"http://redirector.gvt1.com/edgedl/chromewebstore/"
83+
"random_hash/random_version_pkedcjkdefgpdelpbcmbmeomcjbeemfm.crx");
84+
std::unique_ptr<net::URLRequest> request = context()->CreateRequest(
85+
url, net::IDLE, &test_delegate, TRAFFIC_ANNOTATION_FOR_TESTS);
86+
87+
std::shared_ptr<brave::BraveRequestInfo> before_url_context(
88+
new brave::BraveRequestInfo());
89+
brave::BraveRequestInfo::FillCTXFromRequest(request.get(),
90+
before_url_context);
91+
brave::ResponseCallback callback;
92+
93+
int ret = OnBeforeURLRequest_CommonStaticRedirectWork(callback,
94+
before_url_context);
95+
GURL redirect = GURL(before_url_context->new_url_spec);
96+
EXPECT_EQ(redirect.host(), kBraveRedirectorProxy);
97+
EXPECT_TRUE(redirect.SchemeIs(url::kHttpsScheme));
98+
EXPECT_EQ(redirect.path(), url.path());
99+
EXPECT_EQ(ret, net::OK);
100+
}
101+
102+
TEST_F(BraveCommonStaticRedirectNetworkDelegateHelperTest,
103+
RedirectGoogleClients4) {
104+
net::TestDelegate test_delegate;
105+
GURL url(
106+
"https://clients4.google.com/chrome-sync/dev");
107+
std::unique_ptr<net::URLRequest> request = context()->CreateRequest(
108+
url, net::IDLE, &test_delegate, TRAFFIC_ANNOTATION_FOR_TESTS);
109+
110+
std::shared_ptr<brave::BraveRequestInfo> before_url_context(
111+
new brave::BraveRequestInfo());
112+
brave::BraveRequestInfo::FillCTXFromRequest(request.get(),
113+
before_url_context);
114+
brave::ResponseCallback callback;
115+
116+
int ret = OnBeforeURLRequest_CommonStaticRedirectWork(callback,
117+
before_url_context);
118+
GURL redirect = GURL(before_url_context->new_url_spec);
119+
EXPECT_EQ(redirect.host(), kBraveClients4Proxy);
120+
EXPECT_TRUE(redirect.SchemeIs(url::kHttpsScheme));
121+
EXPECT_EQ(redirect.path(), url.path());
122+
EXPECT_EQ(ret, net::OK);
123+
}
124+
78125
} // namespace

browser/resources/settings/brave_default_extensions_page/brave_default_extensions_browser_proxy.js

+7
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ cr.define('settings', function() {
1111
setWebTorrentEnabled(value) {}
1212
setHangoutsEnabled(value) {}
1313
setIPFSCompanionEnabled(value) {}
14+
getRestartNeeded() {}
1415
}
1516

1617
/**
@@ -27,6 +28,12 @@ cr.define('settings', function() {
2728
setIPFSCompanionEnabled(value) {
2829
chrome.send('setIPFSCompanionEnabled', [value]);
2930
}
31+
setMediaRouterEnabled(value) {
32+
chrome.send('setMediaRouterEnabled', [value]);
33+
}
34+
getRestartNeeded() {
35+
return cr.sendWithPromise('getRestartNeeded');
36+
}
3037
}
3138

3239
cr.addSingletonGetter(BraveDefaultExtensionsBrowserProxyImpl);

browser/resources/settings/brave_default_extensions_page/brave_default_extensions_page.html

+67
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
<link rel="import" href="chrome://resources/cr_elements/cr_link_row/cr_link_row.html">
55
<link rel="import" href="chrome://resources/html/i18n_behavior.html">
6+
<link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html">
67
<link rel="import" href="brave_default_extensions_browser_proxy.html">
78
<link rel="import" href="../settings_page/settings_section.html">
89
<link rel="import" href="../settings_shared_css.html">
@@ -14,6 +15,53 @@
1415
.settings-row:not(:first-child) {
1516
border-top: var(--cr-separator-line);
1617
}
18+
19+
#needsRestart {
20+
background-color: #fff;
21+
bottom: 0;
22+
box-shadow: 0 -2px 2px 0 var(--shadow-color);
23+
box-sizing: border-box;
24+
left: 0;
25+
opacity: 1;
26+
padding: 16px;
27+
position: fixed;
28+
transform: translate(0);
29+
transition: all 225ms var(--ease-in-out);
30+
width: 100%;
31+
z-index: 10;
32+
}
33+
34+
:host-context([dark]) #needsRestart {
35+
background-color: #161719;
36+
}
37+
38+
#needsRestart .flex:last-child {
39+
text-align: right; /* csschecker-disable-line left-right */
40+
}
41+
42+
.flex {
43+
align-self: center;
44+
flex: 1 1 auto;
45+
}
46+
47+
.flex-container {
48+
display: flex;
49+
padding: 8px 1em;
50+
}
51+
52+
.restart-notice {
53+
font-size: .9375rem;
54+
line-height: 1.4;
55+
}
56+
57+
button.primary {
58+
background: var(--interactive-color);
59+
border: 0;
60+
border-radius: 3px;
61+
color: white;
62+
font-size: .875rem;
63+
padding: 14px 38px;
64+
}
1765
</style>
1866
<settings-toggle-button id="webTorrentEnabled"
1967
class="first"
@@ -34,11 +82,30 @@
3482
sub-label="$i18n{ipfsCompanionEnabledDesc}"
3583
on-settings-boolean-control-change="onIPFSCompanionEnabledChange_">
3684
</settings-toggle-button>
85+
<settings-toggle-button id="mediaRouterEnabled"
86+
pref="{{prefs.brave.enable_media_router}}"
87+
label="Media Router"
88+
sub-label="$i18n{mediaRouterEnabledDesc}"
89+
on-settings-boolean-control-change="onMediaRouterEnabledChange_">
90+
</settings-toggle-button>
3791
<div class="settings-row" id="manageExtensionsRow">
3892
<cr-link-row icon-class="icon-external"
3993
label="$i18n{manageExtensionsLabel}" on-click="openExtensionsPage_">
4094
</cr-link-row>
4195
</div>
96+
<template is="dom-if" if="{{ showRestartToast }}">
97+
<div id="needsRestart">
98+
<div class="flex-container">
99+
<div class="flex restart-notice" jstcache="0">$i18n{restartNotice}</div>
100+
<div class="flex">
101+
<button id="restartButton" class="primary" tabindex="9" on-click="restartBrowser_">
102+
$i18n{relaunchButtonLabel}
103+
</button>
104+
</div>
105+
</div>
106+
</div>
107+
</div>
108+
</template>
42109
</template>
43110
<script src="brave_default_extensions_page.js"></script>
44111
</dom-module>

browser/resources/settings/brave_default_extensions_page/brave_default_extensions_page.js

+20
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,23 @@
1212
Polymer({
1313
is: 'settings-brave-default-extensions-page',
1414

15+
behaviors: [
16+
WebUIListenerBehavior,
17+
],
18+
1519
/** @private {?settings.BraveDefaultExtensionsBrowserProxy} */
1620
browserProxy_: null,
21+
showRestartToast: false,
1722

1823
/** @override */
1924
created: function() {
2025
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+
})
2132
},
2233

2334
/** @override */
@@ -26,6 +37,7 @@ Polymer({
2637
this.onHangoutsEnabledChange_ = this.onHangoutsEnabledChange_.bind(this)
2738
this.onIPFSCompanionEnabledChange_ = this.onIPFSCompanionEnabledChange_.bind(this)
2839
this.openExtensionsPage_ = this.openExtensionsPage_.bind(this)
40+
this.restartBrowser_ = this.restartBrowser_.bind(this)
2941
},
3042

3143
onWebTorrentEnabledChange_: function() {
@@ -40,6 +52,14 @@ Polymer({
4052
this.browserProxy_.setIPFSCompanionEnabled(this.$.ipfsCompanionEnabled.checked);
4153
},
4254

55+
restartBrowser_: function() {
56+
window.open("chrome://restart", "_self");
57+
},
58+
59+
onMediaRouterEnabledChange_: function() {
60+
this.browserProxy_.setMediaRouterEnabled(this.$.mediaRouterEnabled.checked);
61+
},
62+
4363
openExtensionsPage_: function() {
4464
window.open("chrome://extensions", "_self");
4565
},

0 commit comments

Comments
 (0)