component_ids;
component_ids = cus->GetComponentIDs();
- return std::find(component_ids.begin(),
- component_ids.end(),
+ return std::find(component_ids.begin(), component_ids.end(),
BraveDrmTabHelper::kWidevineComponentId) !=
- component_ids.end();
+ component_ids.end();
}
#if !defined(OS_LINUX)
content::WebContents* GetActiveWebContents() {
diff --git a/browser/resources/settings/brave_default_extensions_page/brave_default_extensions_browser_proxy.js b/browser/resources/settings/brave_default_extensions_page/brave_default_extensions_browser_proxy.js
index d253972d0924..dec8ad8e6b22 100644
--- a/browser/resources/settings/brave_default_extensions_page/brave_default_extensions_browser_proxy.js
+++ b/browser/resources/settings/brave_default_extensions_page/brave_default_extensions_browser_proxy.js
@@ -19,6 +19,8 @@ cr.define('settings', function () {
setTorEnabled (value) {}
isTorEnabled () {}
isTorManaged () {}
+ setWidevineEnabled() {}
+ isWidevineEnabled() {}
getRestartNeeded () {}
getWeb3ProviderList () {}
wasSignInEnabledAtStartup () {}
@@ -63,6 +65,14 @@ cr.define('settings', function () {
return cr.sendWithPromise('isTorManaged')
}
+ setWidevineEnabled (value) {
+ chrome.send('setWidevineEnabled', [value])
+ }
+
+ isWidevineEnabled () {
+ return cr.sendWithPromise('isWidevineEnabled')
+ }
+
getRestartNeeded () {
return cr.sendWithPromise('getRestartNeeded')
}
diff --git a/browser/resources/settings/brave_default_extensions_page/brave_default_extensions_page.html b/browser/resources/settings/brave_default_extensions_page/brave_default_extensions_page.html
index c69535fe46b3..bd08935b2fb4 100644
--- a/browser/resources/settings/brave_default_extensions_page/brave_default_extensions_page.html
+++ b/browser/resources/settings/brave_default_extensions_page/brave_default_extensions_page.html
@@ -175,6 +175,15 @@
label="Widevine"
sub-label="$i18n{appearanceSettingsAskWidevineInstallDesc}">
+
+
diff --git a/browser/resources/settings/brave_default_extensions_page/brave_default_extensions_page.js b/browser/resources/settings/brave_default_extensions_page/brave_default_extensions_page.js
index 6e90ec3b1cbe..91b2455b1741 100644
--- a/browser/resources/settings/brave_default_extensions_page/brave_default_extensions_page.js
+++ b/browser/resources/settings/brave_default_extensions_page/brave_default_extensions_page.js
@@ -21,6 +21,7 @@ Polymer({
properties: {
showRestartToast_: Boolean,
torEnabled_: Boolean,
+ widevineEnabled_: Boolean,
disableTorOption_: Boolean,
ipfsEnabled_: Boolean,
showChangeIPFSGatewayDialog_: Boolean,
@@ -42,6 +43,7 @@ Polymer({
this.onIPFSCompanionEnabledChange_ = this.onIPFSCompanionEnabledChange_.bind(this)
this.openExtensionsPage_ = this.openExtensionsPage_.bind(this)
this.openKeyboardShortcutsPage_ = this.openKeyboardShortcutsPage_.bind(this)
+ this.onWidevineEnabledChange_ = this.onWidevineEnabledChange_.bind(this)
this.restartBrowser_ = this.restartBrowser_.bind(this)
this.onTorEnabledChange_ = this.onTorEnabledChange_.bind(this)
@@ -51,6 +53,9 @@ Polymer({
this.addWebUIListener('tor-enabled-changed', (enabled) => {
this.torEnabled_ = enabled
})
+ this.addWebUIListener('widevine-enabled-changed', (enabled) => {
+ this.widevineEnabled_ = enabled
+ })
this.browserProxy_.getRestartNeeded().then(show => {
this.showRestartToast_ = show;
@@ -61,6 +66,9 @@ Polymer({
this.browserProxy_.isTorManaged().then(managed => {
this.disableTorOption_ = managed
})
+ this.browserProxy_.isWidevineEnabled().then(enabled => {
+ this.widevineEnabled_ = enabled
+ })
this.browserProxy_.getWeb3ProviderList().then(list => {
this.braveWeb3Providers_ = JSON.parse(list)
});
@@ -101,6 +109,10 @@ Polymer({
this.browserProxy_.setTorEnabled(this.$.torEnabled.checked);
},
+ onWidevineEnabledChange_: function() {
+ this.browserProxy_.setWidevineEnabled(this.$.widevineEnabled.checked);
+ },
+
openExtensionsPage_: function() {
window.open("chrome://extensions", "_self");
},
diff --git a/browser/ui/BUILD.gn b/browser/ui/BUILD.gn
index 623205b3493e..73c543954974 100644
--- a/browser/ui/BUILD.gn
+++ b/browser/ui/BUILD.gn
@@ -9,6 +9,7 @@ import("//brave/components/tor/buildflags/buildflags.gni")
import("//build/config/features.gni")
import("//chrome/common/features.gni")
import("//components/gcm_driver/config.gni")
+import("//third_party/widevine/cdm/widevine.gni")
source_set("favicon_source") {
# Remove when https://github.com/brave/brave-browser/issues/10614 is resolved
@@ -323,6 +324,12 @@ source_set("ui") {
"webui/settings/brave_default_extensions_handler.cc",
"webui/settings/brave_default_extensions_handler.h",
]
+
+ deps += [ "//third_party/widevine/cdm:buildflags" ]
+
+ if (enable_widevine) {
+ deps += [ "//brave/browser/widevine" ]
+ }
}
if (brave_rewards_enabled) {
diff --git a/browser/ui/webui/settings/brave_default_extensions_handler.cc b/browser/ui/webui/settings/brave_default_extensions_handler.cc
index 556b17800c02..c13845f39352 100644
--- a/browser/ui/webui/settings/brave_default_extensions_handler.cc
+++ b/browser/ui/webui/settings/brave_default_extensions_handler.cc
@@ -43,8 +43,16 @@
#include "brave/components/brave_wallet/brave_wallet_constants.h"
#endif
+#if BUILDFLAG(ENABLE_WIDEVINE)
+#include "brave/browser/widevine/widevine_utils.h"
+#endif
+
BraveDefaultExtensionsHandler::BraveDefaultExtensionsHandler()
- : weak_ptr_factory_(this) {}
+ : weak_ptr_factory_(this) {
+#if BUILDFLAG(ENABLE_WIDEVINE)
+ was_widevine_enabled_ = IsWidevineOptedIn();
+#endif
+}
BraveDefaultExtensionsHandler::~BraveDefaultExtensionsHandler() {}
@@ -92,6 +100,14 @@ void BraveDefaultExtensionsHandler::RegisterMessages() {
"isTorManaged",
base::BindRepeating(&BraveDefaultExtensionsHandler::IsTorManaged,
base::Unretained(this)));
+ web_ui()->RegisterMessageCallback(
+ "setWidevineEnabled",
+ base::BindRepeating(&BraveDefaultExtensionsHandler::SetWidevineEnabled,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback(
+ "isWidevineEnabled",
+ base::BindRepeating(&BraveDefaultExtensionsHandler::IsWidevineEnabled,
+ base::Unretained(this)));
// Can't call this in ctor because it needs to access web_ui().
InitializePrefCallbacks();
@@ -108,13 +124,20 @@ void BraveDefaultExtensionsHandler::InitializePrefCallbacks() {
prefs::kEnableMediaRouter,
base::Bind(&BraveDefaultExtensionsHandler::OnMediaRouterEnabledChanged,
base::Unretained(this)));
-#if BUILDFLAG(ENABLE_TOR)
local_state_change_registrar_.Init(g_brave_browser_process->local_state());
+#if BUILDFLAG(ENABLE_TOR)
local_state_change_registrar_.Add(
tor::prefs::kTorDisabled,
base::Bind(&BraveDefaultExtensionsHandler::OnTorEnabledChanged,
base::Unretained(this)));
#endif
+
+#if BUILDFLAG(ENABLE_WIDEVINE)
+ local_state_change_registrar_.Add(
+ kWidevineOptedIn,
+ base::Bind(&BraveDefaultExtensionsHandler::OnWidevineEnabledChanged,
+ base::Unretained(this)));
+#endif
}
void BraveDefaultExtensionsHandler::OnMediaRouterEnabledChanged() {
@@ -126,7 +149,16 @@ bool BraveDefaultExtensionsHandler::IsRestartNeeded() {
profile_->GetPrefs()->GetBoolean(prefs::kEnableMediaRouter);
bool media_router_new_pref =
profile_->GetPrefs()->GetBoolean(kBraveEnabledMediaRouter);
- return media_router_current_pref != media_router_new_pref;
+
+ if (media_router_current_pref != media_router_new_pref)
+ return true;
+
+#if BUILDFLAG(ENABLE_WIDEVINE)
+ if (was_widevine_enabled_ != IsWidevineOptedIn())
+ return true;
+#endif
+
+ return false;
}
void BraveDefaultExtensionsHandler::GetRestartNeeded(
@@ -274,6 +306,41 @@ void BraveDefaultExtensionsHandler::IsTorManaged(const base::ListValue* args) {
ResolveJavascriptCallback(args->GetList()[0], base::Value(is_managed));
}
+void BraveDefaultExtensionsHandler::SetWidevineEnabled(
+ const base::ListValue* args) {
+#if BUILDFLAG(ENABLE_WIDEVINE)
+ CHECK_EQ(args->GetSize(), 1U);
+ bool enabled;
+ args->GetBoolean(0, &enabled);
+ enabled ? EnableWidevineCdmComponent() : DisableWidevineCdmComponent();
+ AllowJavascript();
+#endif
+}
+
+void BraveDefaultExtensionsHandler::IsWidevineEnabled(
+ const base::ListValue* args) {
+ CHECK_EQ(args->GetSize(), 1U);
+ AllowJavascript();
+ ResolveJavascriptCallback(args->GetList()[0],
+#if BUILDFLAG(ENABLE_WIDEVINE)
+ base::Value(IsWidevineOptedIn()));
+#else
+ base::Value(false));
+#endif
+}
+
+void BraveDefaultExtensionsHandler::OnWidevineEnabledChanged() {
+ if (IsJavascriptAllowed()) {
+ FireWebUIListener("widevine-enabled-changed",
+#if BUILDFLAG(ENABLE_WIDEVINE)
+ base::Value(IsWidevineOptedIn()));
+#else
+ base::Value(false));
+#endif
+ OnRestartNeededChanged();
+ }
+}
+
void BraveDefaultExtensionsHandler::SetIPFSCompanionEnabled(
const base::ListValue* args) {
CHECK_EQ(args->GetSize(), 1U);
diff --git a/browser/ui/webui/settings/brave_default_extensions_handler.h b/browser/ui/webui/settings/brave_default_extensions_handler.h
index 57a0ce1abfd6..e2507d662028 100644
--- a/browser/ui/webui/settings/brave_default_extensions_handler.h
+++ b/browser/ui/webui/settings/brave_default_extensions_handler.h
@@ -14,6 +14,7 @@
#include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h"
#include "chrome/common/extensions/webstore_install_result.h"
#include "components/prefs/pref_change_registrar.h"
+#include "third_party/widevine/cdm/buildflags.h"
class Profile;
@@ -40,6 +41,9 @@ class BraveDefaultExtensionsHandler : public settings::SettingsPageUIHandler {
void IsTorEnabled(const base::ListValue* args);
void OnTorEnabledChanged();
void IsTorManaged(const base::ListValue* args);
+ void SetWidevineEnabled(const base::ListValue* args);
+ void IsWidevineEnabled(const base::ListValue* args);
+ void OnWidevineEnabledChanged();
void InitializePrefCallbacks();
@@ -53,6 +57,9 @@ class BraveDefaultExtensionsHandler : public settings::SettingsPageUIHandler {
void OnMediaRouterEnabledChanged();
bool IsRestartNeeded();
+#if BUILDFLAG(ENABLE_WIDEVINE)
+ bool was_widevine_enabled_ = false;
+#endif
Profile* profile_ = nullptr;
PrefChangeRegistrar pref_change_registrar_;
#if BUILDFLAG(ENABLE_TOR)
diff --git a/browser/widevine/BUILD.gn b/browser/widevine/BUILD.gn
index ade84ca67211..2d625702c452 100644
--- a/browser/widevine/BUILD.gn
+++ b/browser/widevine/BUILD.gn
@@ -7,10 +7,12 @@ source_set("widevine") {
"//base",
"//brave/app:brave_generated_resources_grit",
"//brave/common:pref_names",
- "//chrome/browser/ui",
"//chrome/common",
+ "//components/component_updater/",
"//components/content_settings/core/common",
"//components/permissions",
+ "//components/pref_registry",
+ "//components/prefs",
"//components/subresource_filter/content/browser",
"//components/vector_icons",
"//content/public/browser",
diff --git a/browser/widevine/widevine_permission_request.cc b/browser/widevine/widevine_permission_request.cc
index d6f5a2e28d7d..991bfcbfb055 100644
--- a/browser/widevine/widevine_permission_request.cc
+++ b/browser/widevine/widevine_permission_request.cc
@@ -18,9 +18,7 @@ bool WidevinePermissionRequest::is_test_ = false;
WidevinePermissionRequest::WidevinePermissionRequest(
content::WebContents* web_contents,
bool for_restart)
- : web_contents_(web_contents),
- for_restart_(for_restart) {
-}
+ : web_contents_(web_contents), for_restart_(for_restart) {}
WidevinePermissionRequest::~WidevinePermissionRequest() = default;
@@ -47,7 +45,7 @@ void WidevinePermissionRequest::PermissionGranted(bool is_one_time) {
}
#endif
if (!for_restart_)
- EnableWidevineCdmComponent(web_contents_);
+ EnableWidevineCdmComponent();
}
void WidevinePermissionRequest::PermissionDenied() {
diff --git a/browser/widevine/widevine_utils.cc b/browser/widevine/widevine_utils.cc
index df53e522dcf3..b8d49f0750c6 100644
--- a/browser/widevine/widevine_utils.cc
+++ b/browser/widevine/widevine_utils.cc
@@ -10,16 +10,18 @@
#include "base/task/task_traits.h"
#include "base/task/thread_pool.h"
#include "brave/browser/brave_browser_process_impl.h"
+#include "brave/browser/brave_drm_tab_helper.h"
#include "brave/browser/widevine/widevine_permission_request.h"
#include "brave/common/pref_names.h"
#include "brave/grit/brave_generated_resources.h"
#include "chrome/browser/component_updater/widevine_cdm_component_installer.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/chrome_paths.h"
+#include "components/component_updater/component_updater_service.h"
#include "components/permissions/permission_request_manager.h"
+#include "components/pref_registry/pref_registry_syncable.h"
#include "components/prefs/pref_registry_simple.h"
#include "components/prefs/pref_service.h"
-#include "components/pref_registry/pref_registry_syncable.h"
#include "content/public/browser/browser_thread.h"
#include "third_party/widevine/cdm/widevine_cdm_common.h"
@@ -72,9 +74,7 @@ void ClearWidevinePrefs(Profile* profile) {
} // namespace
-void EnableWidevineCdmComponent(content::WebContents* web_contents) {
- DCHECK(web_contents);
-
+void EnableWidevineCdmComponent() {
if (IsWidevineOptedIn())
return;
@@ -82,11 +82,20 @@ void EnableWidevineCdmComponent(content::WebContents* web_contents) {
RegisterWidevineCdmComponent(g_brave_browser_process->component_updater());
}
+void DisableWidevineCdmComponent() {
+ if (!IsWidevineOptedIn())
+ return;
+
+ SetWidevineOptedIn(false);
+ g_brave_browser_process->component_updater()->UnregisterComponent(
+ BraveDrmTabHelper::kWidevineComponentId);
+}
+
int GetWidevinePermissionRequestTextFrangmentResourceId(bool for_restart) {
#if defined(OS_LINUX)
return for_restart
- ? IDS_WIDEVINE_PERMISSION_REQUEST_TEXT_FRAGMENT_RESTART_BROWSER
- : IDS_WIDEVINE_PERMISSION_REQUEST_TEXT_FRAGMENT_INSTALL;
+ ? IDS_WIDEVINE_PERMISSION_REQUEST_TEXT_FRAGMENT_RESTART_BROWSER
+ : IDS_WIDEVINE_PERMISSION_REQUEST_TEXT_FRAGMENT_INSTALL;
#else
return IDS_WIDEVINE_PERMISSION_REQUEST_TEXT_FRAGMENT;
#endif
@@ -149,8 +158,8 @@ void MigrateObsoleteWidevineLocalStatePrefs(PrefService* local_state) {
#if defined(OS_LINUX)
// If local state doesn't have default value, it means we've used old
// widevine binary. Delete old widevine binary.
- if (!local_state->FindPreference(kWidevineInstalledVersion)->
- IsDefaultValue()) {
+ if (!local_state->FindPreference(kWidevineInstalledVersion)
+ ->IsDefaultValue()) {
DeleteOldWidevineBinary();
}
#endif
diff --git a/browser/widevine/widevine_utils.h b/browser/widevine/widevine_utils.h
index 17fd69f43cf4..12b557bd3619 100644
--- a/browser/widevine/widevine_utils.h
+++ b/browser/widevine/widevine_utils.h
@@ -20,7 +20,8 @@ class PrefRegistrySimple;
class PrefService;
class Profile;
-void EnableWidevineCdmComponent(content::WebContents* web_contents);
+void EnableWidevineCdmComponent();
+void DisableWidevineCdmComponent();
void RegisterWidevineProfilePrefsForMigration(
user_prefs::PrefRegistrySyncable* registry);
int GetWidevinePermissionRequestTextFrangmentResourceId(bool for_restart);
diff --git a/chromium_src/chrome/browser/component_updater/widevine_cdm_component_installer.cc b/chromium_src/chrome/browser/component_updater/widevine_cdm_component_installer.cc
index 3af688fe65d0..10aeda33973a 100644
--- a/chromium_src/chrome/browser/component_updater/widevine_cdm_component_installer.cc
+++ b/chromium_src/chrome/browser/component_updater/widevine_cdm_component_installer.cc
@@ -7,7 +7,6 @@
#include "../../../../../chrome/browser/component_updater/widevine_cdm_component_installer.cc" // NOLINT
#undef RegisterWidevineCdmComponent
-#include "brave/browser/brave_browser_process_impl.h"
#include "brave/browser/widevine/widevine_utils.h"
#include "chrome/browser/component_updater/component_updater_utils.h"
#include "components/component_updater/component_updater_service.h"
@@ -15,25 +14,28 @@
namespace component_updater {
+namespace {
+
void OnWidevineRegistered() {
component_updater::BraveOnDemandUpdate(widevine_extension_id);
}
-void RegisterAndInstallWidevine() {
+void RegisterAndInstallWidevine(ComponentUpdateService* cus) {
// This code is similar to RegisterWidevineCdmComponent_ChromiumImpl
// but that ignores the callback, and we handle it so we can force
// an on demand update.
auto installer = base::MakeRefCounted(
std::make_unique());
- installer->Register(g_browser_process->component_updater(),
- base::Bind(&OnWidevineRegistered));
+ installer->Register(cus, base::Bind(&OnWidevineRegistered));
}
+} // namespace
+
// Do nothing unless the user opts in!
void RegisterWidevineCdmComponent(ComponentUpdateService* cus) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
if (IsWidevineOptedIn())
- RegisterAndInstallWidevine();
+ RegisterAndInstallWidevine(cus);
}
} // namespace component_updater
diff --git a/chromium_src/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chromium_src/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
index 1158cb490d24..c96b0bef8eee 100644
--- a/chromium_src/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chromium_src/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -240,6 +240,8 @@ void BraveAddCommonStrings(content::WebUIDataSource* html_source,
{"torEnabledDesc", IDS_SETTINGS_ENABLE_TOR_DESC},
{"autoOnionLocationLabel", IDS_SETTINGS_AUTO_ONION_LOCATION_TITLE},
{"autoOnionLocationDesc", IDS_SETTINGS_AUTO_ONION_LOCATION_DESC},
+ {"widevineEnabledLabel", IDS_SETTINGS_ENABLE_WIDEVINE_TITLE},
+ {"widevineEnabledDesc", IDS_SETTINGS_ENABLE_WIDEVINE_DESC},
{"restartNotice", IDS_SETTINGS_RESTART_NOTICE},
{"relaunchButtonLabel", IDS_SETTINGS_RELAUNCH_BUTTON_LABEL},
{"manageExtensionsLabel", IDS_SETTINGS_MANAGE_EXTENSIONS_LABEL},