| Index: content/renderer/media/webcontentdecryptionmodule_impl.cc
|
| diff --git a/content/renderer/media/webcontentdecryptionmodule_impl.cc b/content/renderer/media/webcontentdecryptionmodule_impl.cc
|
| index d3201247bcdcb33c4f525d857da22d2f8af24695..14bbc8d5fe925fa29272df787ff2e0879459042e 100644
|
| --- a/content/renderer/media/webcontentdecryptionmodule_impl.cc
|
| +++ b/content/renderer/media/webcontentdecryptionmodule_impl.cc
|
| @@ -20,61 +20,72 @@
|
|
|
| namespace content {
|
|
|
| -// Forwards the reference ID-based callbacks of the MediaKeys interface to the
|
| +// Forwards the session ID-based callbacks of the MediaKeys interface to the
|
| // appropriate session object.
|
| -class ReferenceIdAdapter {
|
| +class SessionIdAdapter {
|
| public:
|
| - ReferenceIdAdapter();
|
| - ~ReferenceIdAdapter();
|
| + SessionIdAdapter();
|
| + ~SessionIdAdapter();
|
|
|
| // On success, creates a MediaKeys, returns it in |media_keys|, returns true.
|
| bool Initialize(const std::string& key_system,
|
| scoped_ptr<media::MediaKeys>* media_keys);
|
|
|
| + // Generates a unique internal session id.
|
| + uint32 GenerateSessionId();
|
| +
|
| // Adds a session to the internal map. Does not take ownership of the session.
|
| - void AddSession(uint32 reference_id,
|
| + void AddSession(uint32 session_id,
|
| WebContentDecryptionModuleSessionImpl* session);
|
|
|
| // Removes a session from the internal map.
|
| - void RemoveSession(uint32 reference_id);
|
| + void RemoveSession(uint32 session_id);
|
|
|
| private:
|
| typedef std::map<uint32, WebContentDecryptionModuleSessionImpl*> SessionMap;
|
|
|
| // Callbacks for firing session events.
|
| - void OnSessionCreated(uint32 reference_id, const std::string& session_id);
|
| - void OnSessionMessage(uint32 reference_id,
|
| + void OnSessionCreated(uint32 session_id, const std::string& web_session_id);
|
| + void OnSessionMessage(uint32 session_id,
|
| const std::vector<uint8>& message,
|
| const std::string& destination_url);
|
| - void OnSessionReady(uint32 reference_id);
|
| - void OnSessionClosed(uint32 reference_id);
|
| - void OnSessionError(uint32 reference_id,
|
| + void OnSessionReady(uint32 session_id);
|
| + void OnSessionClosed(uint32 session_id);
|
| + void OnSessionError(uint32 session_id,
|
| media::MediaKeys::KeyError error_code,
|
| int system_code);
|
|
|
| // Helper function of the callbacks.
|
| - WebContentDecryptionModuleSessionImpl* GetSession(uint32 reference_id);
|
| + WebContentDecryptionModuleSessionImpl* GetSession(uint32 session_id);
|
|
|
| - base::WeakPtrFactory<ReferenceIdAdapter> weak_ptr_factory_;
|
| + base::WeakPtrFactory<SessionIdAdapter> weak_ptr_factory_;
|
|
|
| SessionMap sessions_;
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(ReferenceIdAdapter);
|
| + // Session ID should be unique per renderer process for debugging purposes.
|
| + static uint32 next_session_id_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SessionIdAdapter);
|
| };
|
|
|
| -ReferenceIdAdapter::ReferenceIdAdapter()
|
| +const uint32 kStartingSessionId = 1;
|
| +uint32 SessionIdAdapter::next_session_id_ = kStartingSessionId;
|
| +COMPILE_ASSERT(kStartingSessionId > media::MediaKeys::kInvalidSessionId,
|
| + invalid_starting_value);
|
| +
|
| +SessionIdAdapter::SessionIdAdapter()
|
| : weak_ptr_factory_(this) {
|
| }
|
|
|
| -ReferenceIdAdapter::~ReferenceIdAdapter() {
|
| +SessionIdAdapter::~SessionIdAdapter() {
|
| }
|
|
|
| -bool ReferenceIdAdapter::Initialize(const std::string& key_system,
|
| - scoped_ptr<media::MediaKeys>* media_keys) {
|
| +bool SessionIdAdapter::Initialize(const std::string& key_system,
|
| + scoped_ptr<media::MediaKeys>* media_keys) {
|
| DCHECK(media_keys);
|
| DCHECK(!*media_keys);
|
|
|
| - base::WeakPtr<ReferenceIdAdapter> weak_this = weak_ptr_factory_.GetWeakPtr();
|
| + base::WeakPtr<SessionIdAdapter> weak_this = weak_ptr_factory_.GetWeakPtr();
|
| scoped_ptr<media::MediaKeys> created_media_keys =
|
| ContentDecryptionModuleFactory::Create(
|
| // TODO(ddorwin): Address lower in the stack: http://crbug.com/252065
|
| @@ -91,11 +102,11 @@ bool ReferenceIdAdapter::Initialize(const std::string& key_system,
|
| // TODO(ddorwin): Get the URL for the frame containing the MediaKeys.
|
| GURL(),
|
| #endif // defined(ENABLE_PEPPER_CDMS)
|
| - base::Bind(&ReferenceIdAdapter::OnSessionCreated, weak_this),
|
| - base::Bind(&ReferenceIdAdapter::OnSessionMessage, weak_this),
|
| - base::Bind(&ReferenceIdAdapter::OnSessionReady, weak_this),
|
| - base::Bind(&ReferenceIdAdapter::OnSessionClosed, weak_this),
|
| - base::Bind(&ReferenceIdAdapter::OnSessionError, weak_this));
|
| + base::Bind(&SessionIdAdapter::OnSessionCreated, weak_this),
|
| + base::Bind(&SessionIdAdapter::OnSessionMessage, weak_this),
|
| + base::Bind(&SessionIdAdapter::OnSessionReady, weak_this),
|
| + base::Bind(&SessionIdAdapter::OnSessionClosed, weak_this),
|
| + base::Bind(&SessionIdAdapter::OnSessionError, weak_this));
|
| if (!created_media_keys)
|
| return false;
|
|
|
| @@ -103,47 +114,51 @@ bool ReferenceIdAdapter::Initialize(const std::string& key_system,
|
| return true;
|
| }
|
|
|
| -void ReferenceIdAdapter::AddSession(
|
| - uint32 reference_id,
|
| +uint32 SessionIdAdapter::GenerateSessionId() {
|
| + return next_session_id_++;
|
| +}
|
| +
|
| +void SessionIdAdapter::AddSession(
|
| + uint32 session_id,
|
| WebContentDecryptionModuleSessionImpl* session) {
|
| - DCHECK(sessions_.find(reference_id) == sessions_.end());
|
| - sessions_[reference_id] = session;
|
| + DCHECK(sessions_.find(session_id) == sessions_.end());
|
| + sessions_[session_id] = session;
|
| }
|
|
|
| -void ReferenceIdAdapter::RemoveSession(uint32 reference_id) {
|
| - DCHECK(sessions_.find(reference_id) != sessions_.end());
|
| - sessions_.erase(reference_id);
|
| +void SessionIdAdapter::RemoveSession(uint32 session_id) {
|
| + DCHECK(sessions_.find(session_id) != sessions_.end());
|
| + sessions_.erase(session_id);
|
| }
|
|
|
| -void ReferenceIdAdapter::OnSessionCreated(uint32 reference_id,
|
| - const std::string& session_id) {
|
| - GetSession(reference_id)->OnSessionCreated(session_id);
|
| +void SessionIdAdapter::OnSessionCreated(uint32 session_id,
|
| + const std::string& web_session_id) {
|
| + GetSession(session_id)->OnSessionCreated(web_session_id);
|
| }
|
|
|
| -void ReferenceIdAdapter::OnSessionMessage(uint32 reference_id,
|
| - const std::vector<uint8>& message,
|
| - const std::string& destination_url) {
|
| - GetSession(reference_id)->OnSessionMessage(message, destination_url);
|
| +void SessionIdAdapter::OnSessionMessage(uint32 session_id,
|
| + const std::vector<uint8>& message,
|
| + const std::string& destination_url) {
|
| + GetSession(session_id)->OnSessionMessage(message, destination_url);
|
| }
|
|
|
| -void ReferenceIdAdapter::OnSessionReady(uint32 reference_id) {
|
| - GetSession(reference_id)->OnSessionReady();
|
| +void SessionIdAdapter::OnSessionReady(uint32 session_id) {
|
| + GetSession(session_id)->OnSessionReady();
|
| }
|
|
|
| -void ReferenceIdAdapter::OnSessionClosed(uint32 reference_id) {
|
| - GetSession(reference_id)->OnSessionClosed();
|
| +void SessionIdAdapter::OnSessionClosed(uint32 session_id) {
|
| + GetSession(session_id)->OnSessionClosed();
|
| }
|
|
|
| -void ReferenceIdAdapter::OnSessionError(uint32 reference_id,
|
| - media::MediaKeys::KeyError error_code,
|
| - int system_code) {
|
| - GetSession(reference_id)->OnSessionError(error_code, system_code);
|
| +void SessionIdAdapter::OnSessionError(uint32 session_id,
|
| + media::MediaKeys::KeyError error_code,
|
| + int system_code) {
|
| + GetSession(session_id)->OnSessionError(error_code, system_code);
|
| }
|
|
|
| -WebContentDecryptionModuleSessionImpl* ReferenceIdAdapter::GetSession(
|
| - uint32 reference_id) {
|
| - DCHECK(sessions_.find(reference_id) != sessions_.end());
|
| - return sessions_[reference_id];
|
| +WebContentDecryptionModuleSessionImpl* SessionIdAdapter::GetSession(
|
| + uint32 session_id) {
|
| + DCHECK(sessions_.find(session_id) != sessions_.end());
|
| + return sessions_[session_id];
|
| }
|
|
|
| //------------------------------------------------------------------------------
|
| @@ -157,10 +172,10 @@ WebContentDecryptionModuleImpl::Create(const base::string16& key_system) {
|
| return NULL;
|
| }
|
|
|
| - // ReferenceIdAdapter creates the MediaKeys so it can provide its callbacks to
|
| + // SessionIdAdapter creates the MediaKeys so it can provide its callbacks to
|
| // during creation of the MediaKeys.
|
| scoped_ptr<media::MediaKeys> media_keys;
|
| - scoped_ptr<ReferenceIdAdapter> adapter(new ReferenceIdAdapter());
|
| + scoped_ptr<SessionIdAdapter> adapter(new SessionIdAdapter());
|
| if (!adapter->Initialize(UTF16ToASCII(key_system), &media_keys))
|
| return NULL;
|
|
|
| @@ -169,7 +184,7 @@ WebContentDecryptionModuleImpl::Create(const base::string16& key_system) {
|
|
|
| WebContentDecryptionModuleImpl::WebContentDecryptionModuleImpl(
|
| scoped_ptr<media::MediaKeys> media_keys,
|
| - scoped_ptr<ReferenceIdAdapter> adapter)
|
| + scoped_ptr<SessionIdAdapter> adapter)
|
| : media_keys_(media_keys.Pass()),
|
| adapter_(adapter.Pass()) {
|
| }
|
| @@ -182,19 +197,21 @@ blink::WebContentDecryptionModuleSession*
|
| WebContentDecryptionModuleImpl::createSession(
|
| blink::WebContentDecryptionModuleSession::Client* client) {
|
| DCHECK(media_keys_);
|
| + uint32 session_id = adapter_->GenerateSessionId();
|
| WebContentDecryptionModuleSessionImpl* session =
|
| new WebContentDecryptionModuleSessionImpl(
|
| + session_id,
|
| media_keys_.get(),
|
| client,
|
| base::Bind(&WebContentDecryptionModuleImpl::OnSessionClosed,
|
| base::Unretained(this)));
|
|
|
| - adapter_->AddSession(session->reference_id(), session);
|
| + adapter_->AddSession(session_id, session);
|
| return session;
|
| }
|
|
|
| -void WebContentDecryptionModuleImpl::OnSessionClosed(uint32 reference_id) {
|
| - adapter_->RemoveSession(reference_id);
|
| +void WebContentDecryptionModuleImpl::OnSessionClosed(uint32 session_id) {
|
| + adapter_->RemoveSession(session_id);
|
| }
|
|
|
| } // namespace content
|
|
|