| Index: components/cdm/renderer/widevine_key_systems.cc
|
| diff --git a/components/cdm/renderer/widevine_key_systems.cc b/components/cdm/renderer/widevine_key_systems.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d42ec7d680c7cd268e6a37cfd0655a85f1cc176c
|
| --- /dev/null
|
| +++ b/components/cdm/renderer/widevine_key_systems.cc
|
| @@ -0,0 +1,93 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "components/cdm/renderer/widevine_key_systems.h"
|
| +
|
| +#include <string>
|
| +#include <vector>
|
| +
|
| +#include "base/logging.h"
|
| +#include "components/cdm/common/cdm_messages_android.h"
|
| +#include "content/public/renderer/key_system_info.h"
|
| +#include "content/public/renderer/render_thread.h"
|
| +
|
| +#include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR.
|
| +
|
| +#if defined(WIDEVINE_CDM_AVAILABLE)
|
| +
|
| +using content::KeySystemInfo;
|
| +using content::SupportedCodecs;
|
| +
|
| +namespace cdm {
|
| +
|
| +// Return |name|'s parent key system.
|
| +static std::string GetDirectParentName(std::string name) {
|
| + int last_period = name.find_last_of('.');
|
| + DCHECK_GT(last_period, 0);
|
| + return name.substr(0, last_period);
|
| +}
|
| +
|
| +void AddWidevineWithCodecs(WidevineCdmType widevine_cdm_type,
|
| + SupportedCodecs supported_codecs,
|
| + std::vector<KeySystemInfo>* concrete_key_systems) {
|
| + KeySystemInfo info(kWidevineKeySystem);
|
| +
|
| + switch (widevine_cdm_type) {
|
| + case WIDEVINE:
|
| + // For standard Widevine, add parent name.
|
| + info.parent_key_system = GetDirectParentName(kWidevineKeySystem);
|
| + break;
|
| +#if defined(OS_ANDROID)
|
| + case WIDEVINE_HR_NON_COMPOSITING:
|
| + info.key_system.append(".hrnoncompositing");
|
| + break;
|
| +#endif // defined(OS_ANDROID)
|
| + default:
|
| + NOTREACHED();
|
| + }
|
| +
|
| + // TODO(xhwang): A container or an initDataType may be supported even though
|
| + // there are no codecs supported in that container. Fix this when we support
|
| + // initDataType.
|
| + info.supported_codecs = supported_codecs;
|
| +
|
| +#if defined(ENABLE_PEPPER_CDMS)
|
| + info.pepper_type = kWidevineCdmPluginMimeType;
|
| +#endif // defined(ENABLE_PEPPER_CDMS)
|
| +
|
| + concrete_key_systems->push_back(info);
|
| +}
|
| +
|
| +#if defined(OS_ANDROID)
|
| +void AddAndroidWidevine(std::vector<KeySystemInfo>* concrete_key_systems) {
|
| + SupportedKeySystemRequest request;
|
| + SupportedKeySystemResponse response;
|
| +
|
| + request.key_system = kWidevineKeySystem;
|
| + request.codecs = content::EME_CODEC_WEBM_ALL | content::EME_CODEC_MP4_ALL;
|
| + content::RenderThread::Get()->Send(
|
| + new ChromeViewHostMsg_GetSupportedKeySystems(request, &response));
|
| + DCHECK(response.compositing_codecs & content::EME_CODEC_ALL)
|
| + << "unrecognized codec";
|
| + DCHECK(response.non_compositing_codecs & content::EME_CODEC_ALL)
|
| + << "unrecognized codec";
|
| + if (response.compositing_codecs != content::EME_CODEC_NONE) {
|
| + AddWidevineWithCodecs(
|
| + WIDEVINE,
|
| + static_cast<SupportedCodecs>(response.compositing_codecs),
|
| + concrete_key_systems);
|
| + }
|
| +
|
| + if (response.non_compositing_codecs != content::EME_CODEC_NONE) {
|
| + AddWidevineWithCodecs(
|
| + WIDEVINE_HR_NON_COMPOSITING,
|
| + static_cast<SupportedCodecs>(response.non_compositing_codecs),
|
| + concrete_key_systems);
|
| + }
|
| +}
|
| +#endif // OS_ANDROID
|
| +
|
| +} // namespace cdm
|
| +
|
| +#endif // defined(WIDEVINE_CDM_AVAILABLE)
|
|
|