summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--android_webview/lib/main/aw_main_delegate.cc5
-rw-r--r--android_webview/renderer/aw_key_systems.cc6
-rw-r--r--chrome/browser/about_flags.cc7
-rw-r--r--chrome/renderer/media/chrome_key_systems.cc6
-rw-r--r--chromecast/browser/cast_browser_main_parts.cc8
-rw-r--r--chromecast/browser/media/cast_browser_cdm_factory.cc5
-rw-r--r--chromecast/browser/media/cast_browser_cdm_factory.h7
-rw-r--r--chromecast/chromecast.gyp2
-rw-r--r--components/cdm/renderer/android_key_systems.cc13
-rw-r--r--components/cdm/renderer/android_key_systems.h7
-rw-r--r--content/browser/media/cdm/browser_cdm_manager.cc21
-rw-r--r--content/browser/renderer_host/render_process_host_impl.cc1
-rw-r--r--media/base/android/browser_cdm_factory_android.cc18
-rw-r--r--media/base/android/browser_cdm_factory_android.h1
-rw-r--r--media/base/browser_cdm_factory.cc5
-rw-r--r--media/base/browser_cdm_factory.h4
-rw-r--r--media/base/media_switches.cc4
-rw-r--r--media/base/media_switches.h1
18 files changed, 72 insertions, 49 deletions
diff --git a/android_webview/lib/main/aw_main_delegate.cc b/android_webview/lib/main/aw_main_delegate.cc
index 1377618..27e5da9 100644
--- a/android_webview/lib/main/aw_main_delegate.cc
+++ b/android_webview/lib/main/aw_main_delegate.cc
@@ -77,11 +77,8 @@ bool AwMainDelegate::BasicStartupComplete(int* exit_code) {
// Web Notification API and the Push API are not supported (crbug.com/434712)
cl->AppendSwitch(switches::kDisableNotifications);
-#if defined(VIDEO_HOLE)
- // Support EME with hole-punching. For example, Widevine L1.
- cl->AppendSwitch(switches::kMediaDrmEnableNonCompositing);
+ // TODO(ddorwin): Enable unprefixed EME. See http://crbug.com/394931.
cl->AppendSwitch(switches::kDisableEncryptedMedia);
-#endif
// WebRTC hardware decoding is not supported, internal bug 15075307
cl->AppendSwitch(switches::kDisableWebRtcHWDecoding);
diff --git a/android_webview/renderer/aw_key_systems.cc b/android_webview/renderer/aw_key_systems.cc
index cc3059e..29e50ce 100644
--- a/android_webview/renderer/aw_key_systems.cc
+++ b/android_webview/renderer/aw_key_systems.cc
@@ -9,7 +9,11 @@ namespace android_webview {
void AwAddKeySystems(
std::vector<media::KeySystemInfo>* key_systems_info) {
- cdm::AddAndroidWidevine(key_systems_info);
+ // TODO(sandersd): Non-compositing support depends on the
+ // use_video_overlay_for_embedded_encrypted_video pref, which may differ per
+ // WebContents. For now, err on the side of registering support.
+ // http://crbug.com/467779
+ cdm::AddAndroidWidevine(key_systems_info, true);
cdm::AddAndroidPlatformKeySystems(key_systems_info);
}
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index aaade44..9b737b8 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -728,13 +728,6 @@ const Experiment kExperiments[] = {
kOsAndroid,
SINGLE_VALUE_TYPE(switches::kDisableInfobarForProtectedMediaIdentifier)
},
- {
- "mediadrm-enable-non-compositing",
- IDS_FLAGS_MEDIADRM_ENABLE_NON_COMPOSITING_NAME,
- IDS_FLAGS_MEDIADRM_ENABLE_NON_COMPOSITING_DESCRIPTION,
- kOsAndroid,
- SINGLE_VALUE_TYPE(switches::kMediaDrmEnableNonCompositing)
- },
#endif // defined(OS_ANDROID)
{
"disable-javascript-harmony-shipping",
diff --git a/chrome/renderer/media/chrome_key_systems.cc b/chrome/renderer/media/chrome_key_systems.cc
index e80e71b..63d4734 100644
--- a/chrome/renderer/media/chrome_key_systems.cc
+++ b/chrome/renderer/media/chrome_key_systems.cc
@@ -223,6 +223,10 @@ void AddChromeKeySystems(std::vector<KeySystemInfo>* key_systems_info) {
#endif // defined(ENABLE_PEPPER_CDMS)
#if defined(OS_ANDROID)
- cdm::AddAndroidWidevine(key_systems_info);
+ // TODO(sandersd): Non-compositing support depends on the
+ // use_video_overlay_for_embedded_encrypted_video pref, which may differ per
+ // WebContents. For now, Chromium does not support them.
+ // http://crbug.com/467779
+ cdm::AddAndroidWidevine(key_systems_info, false);
#endif // defined(OS_ANDROID)
}
diff --git a/chromecast/browser/cast_browser_main_parts.cc b/chromecast/browser/cast_browser_main_parts.cc
index 6ed8a8d..cdaaf0b 100644
--- a/chromecast/browser/cast_browser_main_parts.cc
+++ b/chromecast/browser/cast_browser_main_parts.cc
@@ -22,7 +22,6 @@
#include "chromecast/browser/cast_browser_context.h"
#include "chromecast/browser/cast_browser_process.h"
#include "chromecast/browser/devtools/remote_debugging_server.h"
-#include "chromecast/browser/media/cast_browser_cdm_factory.h"
#include "chromecast/browser/metrics/cast_metrics_prefs.h"
#include "chromecast/browser/metrics/cast_metrics_service_client.h"
#include "chromecast/browser/pref_service_helper.h"
@@ -40,6 +39,8 @@
#include "chromecast/crash/android/crash_handler.h"
#include "components/crash/browser/crash_dump_manager_android.h"
#include "net/android/network_change_notifier_factory_android.h"
+#else
+#include "chromecast/browser/media/cast_browser_cdm_factory.h"
#endif
#if defined(USE_AURA)
@@ -146,14 +147,11 @@ struct DefaultCommandLineSwitch {
};
DefaultCommandLineSwitch g_default_switches[] = {
- // TODO(ddorwin): Develop a permanent solution. See http://crbug.com/394926.
- // For now, disable unprefixed EME because the video behavior not be
- // consistent with other clients.
+ // TODO(gunsch): Enable unprefixed EME. See http://crbug.com/471936.
{ switches::kDisableEncryptedMedia, ""},
#if defined(OS_ANDROID)
// Disables Chromecast-specific WiFi-related features on ATV for now.
{ switches::kNoWifi, "" },
- { switches::kMediaDrmEnableNonCompositing, ""},
{ switches::kEnableOverlayFullscreenVideo, ""},
{ switches::kDisableInfobarForProtectedMediaIdentifier, ""},
{ switches::kDisableGestureRequirementForMediaPlayback, ""},
diff --git a/chromecast/browser/media/cast_browser_cdm_factory.cc b/chromecast/browser/media/cast_browser_cdm_factory.cc
index 123473c..ef41155 100644
--- a/chromecast/browser/media/cast_browser_cdm_factory.cc
+++ b/chromecast/browser/media/cast_browser_cdm_factory.cc
@@ -13,13 +13,16 @@
namespace chromecast {
namespace media {
-scoped_ptr< ::media::BrowserCdm> CastBrowserCdmFactory::CreateBrowserCdm(
+scoped_ptr<::media::BrowserCdm> CastBrowserCdmFactory::CreateBrowserCdm(
const std::string& key_system_name,
+ bool use_secure_surface,
const ::media::SessionMessageCB& session_message_cb,
const ::media::SessionClosedCB& session_closed_cb,
const ::media::SessionErrorCB& session_error_cb,
const ::media::SessionKeysChangeCB& session_keys_change_cb,
const ::media::SessionExpirationUpdateCB& session_expiration_update_cb) {
+ DCHECK(!use_secure_surface) << "Chromecast does not use |use_secure_surface|";
+
CastKeySystem key_system(GetKeySystemByName(key_system_name));
scoped_ptr<chromecast::media::BrowserCdmCast> browser_cdm;
diff --git a/chromecast/browser/media/cast_browser_cdm_factory.h b/chromecast/browser/media/cast_browser_cdm_factory.h
index 03f4530..dc72919 100644
--- a/chromecast/browser/media/cast_browser_cdm_factory.h
+++ b/chromecast/browser/media/cast_browser_cdm_factory.h
@@ -20,14 +20,15 @@ class CastBrowserCdmFactory : public ::media::BrowserCdmFactory {
~CastBrowserCdmFactory() override {};
// ::media::BrowserCdmFactory implementation:
- scoped_ptr< ::media::BrowserCdm> CreateBrowserCdm(
+ scoped_ptr<::media::BrowserCdm> CreateBrowserCdm(
const std::string& key_system,
+ bool use_secure_surface,
const ::media::SessionMessageCB& session_message_cb,
const ::media::SessionClosedCB& session_closed_cb,
const ::media::SessionErrorCB& session_error_cb,
const ::media::SessionKeysChangeCB& session_keys_change_cb,
- const ::media::SessionExpirationUpdateCB&
- session_expiration_update_cb) override;
+ const ::media::SessionExpirationUpdateCB& session_expiration_update_cb)
+ override;
private:
DISALLOW_COPY_AND_ASSIGN(CastBrowserCdmFactory);
diff --git a/chromecast/chromecast.gyp b/chromecast/chromecast.gyp
index 7702c10..b4ef622 100644
--- a/chromecast/chromecast.gyp
+++ b/chromecast/chromecast.gyp
@@ -280,7 +280,6 @@
'browser/cast_content_browser_client_simple.cc',
'browser/cast_network_delegate_simple.cc',
'browser/devtools/remote_debugging_server_simple.cc',
- 'browser/media/cast_browser_cdm_factory_simple.cc',
'browser/metrics/platform_metrics_providers_simple.cc',
'browser/pref_service_helper_simple.cc',
'common/platform_client_auth_simple.cc',
@@ -295,6 +294,7 @@
],
}, {
'sources': [
+ 'browser/media/cast_browser_cdm_factory_simple.cc',
'browser/service/cast_service_simple.cc',
'browser/service/cast_service_simple.h',
],
diff --git a/components/cdm/renderer/android_key_systems.cc b/components/cdm/renderer/android_key_systems.cc
index d9bb106..e1538ba 100644
--- a/components/cdm/renderer/android_key_systems.cc
+++ b/components/cdm/renderer/android_key_systems.cc
@@ -39,21 +39,22 @@ static SupportedKeySystemResponse QueryKeySystemSupport(
return response;
}
-void AddAndroidWidevine(std::vector<KeySystemInfo>* concrete_key_systems) {
+void AddAndroidWidevine(std::vector<KeySystemInfo>* concrete_key_systems,
+ bool is_non_compositing_supported) {
SupportedKeySystemResponse response = QueryKeySystemSupport(
kWidevineKeySystem);
// When creating the WIDEVINE key system, BrowserCdmFactoryAndroid configures
- // the CDM's security level based on the --mediadrm-enable-non-compositing
- // flag (L1 if the flag is enabled, L3 otherwise). Therefore the supported
- // codec/robustenss combinations depend on that flag.
+ // the CDM's security level based on a pref. Therefore the supported
+ // codec/robustenss combinations depend on that pref, represented by
+ // |bool is_non_compositing_supported|.
// TODO(sandersd): For unprefixed, set the security level based on the
// requested robustness instead of the flag. http://crbug.com/467779
+ // We should also stop using the term "non_compositing."
SupportedCodecs codecs = response.compositing_codecs;
EmeRobustness max_audio_robustness = EmeRobustness::SW_SECURE_CRYPTO;
EmeRobustness max_video_robustness = EmeRobustness::SW_SECURE_CRYPTO;
- if (base::CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kMediaDrmEnableNonCompositing)) {
+ if (is_non_compositing_supported) {
codecs = response.non_compositing_codecs;
max_audio_robustness = EmeRobustness::HW_SECURE_CRYPTO;
max_video_robustness = EmeRobustness::HW_SECURE_ALL;
diff --git a/components/cdm/renderer/android_key_systems.h b/components/cdm/renderer/android_key_systems.h
index fb962b1..b27f57c 100644
--- a/components/cdm/renderer/android_key_systems.h
+++ b/components/cdm/renderer/android_key_systems.h
@@ -12,7 +12,12 @@
namespace cdm {
void AddAndroidWidevine(
- std::vector<media::KeySystemInfo>* concrete_key_systems);
+ std::vector<media::KeySystemInfo>* concrete_key_systems,
+ // TODO(sandersd): Non-compositing support depends on the
+ // use_video_overlay_for_embedded_encrypted_video pref, which may differ per
+ // WebContents, meaning this cannot be a global setting for the renderer
+ // process. Handle this per WebContents instead. http://crbug.com/467779
+ bool is_non_compositing_supported);
// Add platform-supported key systems which are not explicitly handled
// by Chrome.
diff --git a/content/browser/media/cdm/browser_cdm_manager.cc b/content/browser/media/cdm/browser_cdm_manager.cc
index 708cf58..3eb55f1 100644
--- a/content/browser/media/cdm/browser_cdm_manager.cc
+++ b/content/browser/media/cdm/browser_cdm_manager.cc
@@ -25,6 +25,10 @@
#include "media/base/cdm_promise.h"
#include "media/base/limits.h"
+#if defined(OS_ANDROID)
+#include "content/public/common/renderer_preferences.h"
+#endif
+
namespace content {
using media::BrowserCdm;
@@ -446,8 +450,23 @@ void BrowserCdmManager::AddCdm(int render_frame_id,
DCHECK(task_runner_->RunsTasksOnCurrentThread());
DCHECK(!GetCdm(render_frame_id, cdm_id));
+ bool use_secure_surface = false;
+
+#if defined(OS_ANDROID)
+ // TODO(sandersd): Pass the security level from key system instead.
+ // http://crbug.com/467779
+ RenderFrameHost* rfh =
+ RenderFrameHost::FromID(render_process_id_, render_frame_id);
+ WebContents* web_contents = WebContents::FromRenderFrameHost(rfh);
+ if (web_contents) {
+ content::RendererPreferences* prefs =
+ web_contents->GetMutableRendererPrefs();
+ use_secure_surface = prefs->use_video_overlay_for_embedded_encrypted_video;
+ }
+#endif
+
scoped_ptr<BrowserCdm> cdm(media::CreateBrowserCdm(
- key_system, BROWSER_CDM_MANAGER_CB(OnSessionMessage),
+ key_system, use_secure_surface, BROWSER_CDM_MANAGER_CB(OnSessionMessage),
BROWSER_CDM_MANAGER_CB(OnSessionClosed),
BROWSER_CDM_MANAGER_CB(OnLegacySessionError),
BROWSER_CDM_MANAGER_CB(OnSessionKeysChange),
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index 7c50987..1381a16 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -1354,7 +1354,6 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
#if defined(OS_ANDROID)
switches::kDisableGestureRequirementForMediaPlayback,
switches::kDisableWebRTC,
- switches::kMediaDrmEnableNonCompositing,
switches::kDisableWebAudio,
switches::kRendererWaitForJavaDebugger,
#endif
diff --git a/media/base/android/browser_cdm_factory_android.cc b/media/base/android/browser_cdm_factory_android.cc
index 614c8d1..43f586f 100644
--- a/media/base/android/browser_cdm_factory_android.cc
+++ b/media/base/android/browser_cdm_factory_android.cc
@@ -15,6 +15,7 @@ namespace media {
scoped_ptr<BrowserCdm> BrowserCdmFactoryAndroid::CreateBrowserCdm(
const std::string& key_system,
+ bool use_secure_surface,
const SessionMessageCB& session_message_cb,
const SessionClosedCB& session_closed_cb,
const SessionErrorCB& session_error_cb,
@@ -33,25 +34,22 @@ scoped_ptr<BrowserCdm> BrowserCdmFactoryAndroid::CreateBrowserCdm(
return scoped_ptr<BrowserCdm>();
}
- // TODO(xhwang/ddorwin): Pass the security level from key system.
+ // TODO(sandersd): Pass the security level from key system.
// http://crbug.com/467779
if (key_system == kWidevineKeySystem) {
MediaDrmBridge::SecurityLevel security_level =
- MediaDrmBridge::SECURITY_LEVEL_3;
- if (base::CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kMediaDrmEnableNonCompositing)) {
- security_level = MediaDrmBridge::SECURITY_LEVEL_1;
- }
+ use_secure_surface ? MediaDrmBridge::SECURITY_LEVEL_1
+ : MediaDrmBridge::SECURITY_LEVEL_3;
if (!cdm->SetSecurityLevel(security_level)) {
DVLOG(1) << "failed to set security level " << security_level;
return scoped_ptr<BrowserCdm>();
}
} else {
// Assume other key systems do not support full compositing.
- if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kMediaDrmEnableNonCompositing)) {
- NOTREACHED() << key_system << " may require "
- << switches::kMediaDrmEnableNonCompositing;
+ if (!use_secure_surface) {
+ NOTREACHED()
+ << key_system
+ << " may require use_video_overlay_for_embedded_encrypted_video";
return scoped_ptr<BrowserCdm>();
}
}
diff --git a/media/base/android/browser_cdm_factory_android.h b/media/base/android/browser_cdm_factory_android.h
index ff0705b..17c61f7 100644
--- a/media/base/android/browser_cdm_factory_android.h
+++ b/media/base/android/browser_cdm_factory_android.h
@@ -18,6 +18,7 @@ class MEDIA_EXPORT BrowserCdmFactoryAndroid : public BrowserCdmFactory {
scoped_ptr<BrowserCdm> CreateBrowserCdm(
const std::string& key_system,
+ bool use_secure_surface,
const SessionMessageCB& session_message_cb,
const SessionClosedCB& session_closed_cb,
const SessionErrorCB& session_error_cb,
diff --git a/media/base/browser_cdm_factory.cc b/media/base/browser_cdm_factory.cc
index 81b6e97..46e96f5 100644
--- a/media/base/browser_cdm_factory.cc
+++ b/media/base/browser_cdm_factory.cc
@@ -23,6 +23,7 @@ void SetBrowserCdmFactory(BrowserCdmFactory* factory) {
scoped_ptr<BrowserCdm> CreateBrowserCdm(
const std::string& key_system,
+ bool use_secure_surface,
const SessionMessageCB& session_message_cb,
const SessionClosedCB& session_closed_cb,
const SessionErrorCB& session_error_cb,
@@ -38,8 +39,8 @@ scoped_ptr<BrowserCdm> CreateBrowserCdm(
}
return g_cdm_factory->CreateBrowserCdm(
- key_system, session_message_cb, session_closed_cb, session_error_cb,
- session_keys_change_cb, session_expiration_update_cb);
+ key_system, use_secure_surface, session_message_cb, session_closed_cb,
+ session_error_cb, session_keys_change_cb, session_expiration_update_cb);
}
} // namespace media
diff --git a/media/base/browser_cdm_factory.h b/media/base/browser_cdm_factory.h
index f2bd29c..ecce0be 100644
--- a/media/base/browser_cdm_factory.h
+++ b/media/base/browser_cdm_factory.h
@@ -21,6 +21,7 @@ class MEDIA_EXPORT BrowserCdmFactory {
virtual scoped_ptr<BrowserCdm> CreateBrowserCdm(
const std::string& key_system,
+ bool use_secure_surface,
const SessionMessageCB& session_message_cb,
const SessionClosedCB& session_closed_cb,
const SessionErrorCB& session_error_cb,
@@ -37,9 +38,12 @@ void SetBrowserCdmFactory(BrowserCdmFactory* factory);
// Creates a BrowserCdm for |key_system|. Returns NULL if the CDM cannot be
// created.
+// |use_secure_surface| indicates that the CDM should be configured to output
+// to a secure surface (for platforms that support it).
// TODO(xhwang): Add ifdef for IPC based CDM.
scoped_ptr<BrowserCdm> MEDIA_EXPORT
CreateBrowserCdm(const std::string& key_system,
+ bool use_secure_surface,
const SessionMessageCB& session_message_cb,
const SessionClosedCB& session_closed_cb,
const SessionErrorCB& session_error_cb,
diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
index 1ae376d..44dea87 100644
--- a/media/base/media_switches.cc
+++ b/media/base/media_switches.cc
@@ -21,10 +21,6 @@ const char kIgnoreResolutionLimitsForAcceleratedVideoDecode[] =
// Disables the infobar popup for accessing protected media identifier.
const char kDisableInfobarForProtectedMediaIdentifier[] =
"disable-infobar-for-protected-media-identifier";
-
-// Enables use of non-compositing MediaDrm decoding by default for Encrypted
-// Media Extensions implementation.
-const char kMediaDrmEnableNonCompositing[] = "mediadrm-enable-non-compositing";
#endif
#if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(OS_SOLARIS)
diff --git a/media/base/media_switches.h b/media/base/media_switches.h
index 63cdf5a..8c509a1ee 100644
--- a/media/base/media_switches.h
+++ b/media/base/media_switches.h
@@ -21,7 +21,6 @@ MEDIA_EXPORT extern const char
#if defined(OS_ANDROID)
MEDIA_EXPORT extern const char kDisableInfobarForProtectedMediaIdentifier[];
-MEDIA_EXPORT extern const char kMediaDrmEnableNonCompositing[];
#endif
#if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(OS_SOLARIS)