| Index: webkit/media/webmediaplayer_impl.cc
|
| diff --git a/webkit/media/webmediaplayer_impl.cc b/webkit/media/webmediaplayer_impl.cc
|
| index 891398f9be4d8f2dafa5030e89d26fcb9ab57ef1..ca66349caf9cd136b9f1a85067d4ce3edfab6e67 100644
|
| --- a/webkit/media/webmediaplayer_impl.cc
|
| +++ b/webkit/media/webmediaplayer_impl.cc
|
| @@ -22,7 +22,6 @@
|
| #include "media/base/media_switches.h"
|
| #include "media/base/pipeline.h"
|
| #include "media/base/video_frame.h"
|
| -#include "media/crypto/aes_decryptor.h"
|
| #include "media/filters/audio_renderer_impl.h"
|
| #include "media/filters/video_renderer_base.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebVideoFrame.h"
|
| @@ -33,8 +32,9 @@
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURL.h"
|
| #include "v8/include/v8.h"
|
| #include "webkit/media/buffered_data_source.h"
|
| +#include "webkit/media/crypto/key_systems.h"
|
| +#include "webkit/media/crypto/proxy_decryptor.h"
|
| #include "webkit/media/filter_helpers.h"
|
| -#include "webkit/media/key_systems.h"
|
| #include "webkit/media/webmediaplayer_delegate.h"
|
| #include "webkit/media/webmediaplayer_proxy.h"
|
| #include "webkit/media/webmediaplayer_util.h"
|
| @@ -82,9 +82,9 @@ const float kMaxRate = 16.0f;
|
|
|
| namespace webkit_media {
|
|
|
| -#define COMPILE_ASSERT_MATCHING_ENUM(name) \
|
| +#define COMPILE_ASSERT_MATCHING_ENUM(name) \
|
| COMPILE_ASSERT(static_cast<int>(WebKit::WebMediaPlayer::CORSMode ## name) == \
|
| - static_cast<int>(BufferedResourceLoader::k ## name), \
|
| + static_cast<int>(BufferedResourceLoader::k ## name), \
|
| mismatching_enums)
|
| COMPILE_ASSERT_MATCHING_ENUM(Unspecified);
|
| COMPILE_ASSERT_MATCHING_ENUM(Anonymous);
|
| @@ -120,7 +120,8 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
|
| accelerated_compositing_reported_(false),
|
| incremented_externally_allocated_memory_(false),
|
| audio_source_provider_(audio_source_provider),
|
| - is_local_source_(false) {
|
| + is_local_source_(false),
|
| + decryptor_(new ProxyDecryptor(proxy_.get())) {
|
| media_log_->AddEvent(
|
| media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED));
|
|
|
| @@ -154,8 +155,6 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
|
| // Create default audio renderer.
|
| filter_collection_->AddAudioRenderer(
|
| new media::AudioRendererImpl(new media::NullAudioSink()));
|
| -
|
| - decryptor_.reset(new media::AesDecryptor(proxy_.get()));
|
| }
|
|
|
| WebMediaPlayerImpl::~WebMediaPlayerImpl() {
|
| @@ -714,6 +713,12 @@ WebMediaPlayerImpl::generateKeyRequest(const WebString& key_system,
|
| if (!IsSupportedKeySystem(key_system))
|
| return WebKit::WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported;
|
|
|
| + // We do not support run-time switching between key systems for now.
|
| + if (current_key_system_.isEmpty())
|
| + current_key_system_ = key_system;
|
| + else if (key_system != current_key_system_)
|
| + return WebKit::WebMediaPlayer::MediaKeyExceptionInvalidPlayerState;
|
| +
|
| DVLOG(1) << "generateKeyRequest: " << key_system.utf8().data() << ": "
|
| << std::string(reinterpret_cast<const char*>(init_data),
|
| static_cast<size_t>(init_data_length));
|
| @@ -736,6 +741,9 @@ WebKit::WebMediaPlayer::MediaKeyException WebMediaPlayerImpl::addKey(
|
| if (!IsSupportedKeySystem(key_system))
|
| return WebKit::WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported;
|
|
|
| + if (current_key_system_.isEmpty() || key_system != current_key_system_)
|
| + return WebKit::WebMediaPlayer::MediaKeyExceptionInvalidPlayerState;
|
| +
|
| DVLOG(1) << "addKey: " << key_system.utf8().data() << ": "
|
| << std::string(reinterpret_cast<const char*>(key),
|
| static_cast<size_t>(key_length)) << ", "
|
| @@ -754,6 +762,9 @@ WebKit::WebMediaPlayer::MediaKeyException WebMediaPlayerImpl::cancelKeyRequest(
|
| if (!IsSupportedKeySystem(key_system))
|
| return WebKit::WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported;
|
|
|
| + if (current_key_system_.isEmpty() || key_system != current_key_system_)
|
| + return WebKit::WebMediaPlayer::MediaKeyExceptionInvalidPlayerState;
|
| +
|
| decryptor_->CancelKeyRequest(key_system.utf8(), session_id.utf8());
|
| return WebKit::WebMediaPlayer::MediaKeyExceptionNoError;
|
| }
|
| @@ -891,6 +902,18 @@ void WebMediaPlayerImpl::OnNeedKey(const std::string& key_system,
|
| init_data_size);
|
| }
|
|
|
| +#define COMPILE_ASSERT_MATCHING_ENUM(name) \
|
| + COMPILE_ASSERT(static_cast<int>(WebKit::WebMediaPlayerClient::name) == \
|
| + static_cast<int>(media::Decryptor::k ## name), \
|
| + mismatching_enums)
|
| +COMPILE_ASSERT_MATCHING_ENUM(UnknownError);
|
| +COMPILE_ASSERT_MATCHING_ENUM(ClientError);
|
| +COMPILE_ASSERT_MATCHING_ENUM(ServiceError);
|
| +COMPILE_ASSERT_MATCHING_ENUM(OutputError);
|
| +COMPILE_ASSERT_MATCHING_ENUM(HardwareChangeError);
|
| +COMPILE_ASSERT_MATCHING_ENUM(DomainError);
|
| +#undef COMPILE_ASSERT_MATCHING_ENUM
|
| +
|
| void WebMediaPlayerImpl::OnKeyError(const std::string& key_system,
|
| const std::string& session_id,
|
| media::Decryptor::KeyError error_code,
|
|
|