Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(183)

Side by Side Diff: content/renderer/media/crypto/proxy_media_keys.cc

Issue 555223004: Update MediaKeys interface for EME (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/media/crypto/proxy_media_keys.h" 5 #include "content/renderer/media/crypto/proxy_media_keys.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/stl_util.h" 11 #include "base/stl_util.h"
12 #include "content/renderer/media/crypto/key_systems.h" 12 #include "content/renderer/media/crypto/key_systems.h"
13 #include "content/renderer/media/crypto/renderer_cdm_manager.h" 13 #include "content/renderer/media/crypto/renderer_cdm_manager.h"
14 #include "media/base/cdm_promise.h" 14 #include "media/base/cdm_promise.h"
15 15
16 namespace content { 16 namespace content {
17 17
18 scoped_ptr<ProxyMediaKeys> ProxyMediaKeys::Create( 18 scoped_ptr<ProxyMediaKeys> ProxyMediaKeys::Create(
19 const std::string& key_system, 19 const std::string& key_system,
20 const GURL& security_origin, 20 const GURL& security_origin,
21 RendererCdmManager* manager, 21 RendererCdmManager* manager,
22 const media::SessionMessageCB& session_message_cb, 22 const media::SessionMessageCB& session_message_cb,
23 const media::SessionReadyCB& session_ready_cb, 23 const media::SessionReadyCB& session_ready_cb,
24 const media::SessionClosedCB& session_closed_cb, 24 const media::SessionClosedCB& session_closed_cb,
25 const media::SessionErrorCB& session_error_cb) { 25 const media::SessionErrorCB& session_error_cb,
26 const media::SessionKeysChangeCB& session_keys_change_cb,
27 const media::SessionExpirationChangeCB& session_expiration_change_cb) {
26 DCHECK(manager); 28 DCHECK(manager);
29
30 // TODO(jrummell): Add support for SessionKeysChangeCB and
31 // SessionExpirationChangeCB.
27 scoped_ptr<ProxyMediaKeys> proxy_media_keys( 32 scoped_ptr<ProxyMediaKeys> proxy_media_keys(
28 new ProxyMediaKeys(manager, 33 new ProxyMediaKeys(manager,
29 session_message_cb, 34 session_message_cb,
30 session_ready_cb, 35 session_ready_cb,
31 session_closed_cb, 36 session_closed_cb,
32 session_error_cb)); 37 session_error_cb));
33 proxy_media_keys->InitializeCdm(key_system, security_origin); 38 proxy_media_keys->InitializeCdm(key_system, security_origin);
34 return proxy_media_keys.Pass(); 39 return proxy_media_keys.Pass();
35 } 40 }
36 41
37 ProxyMediaKeys::~ProxyMediaKeys() { 42 ProxyMediaKeys::~ProxyMediaKeys() {
38 manager_->DestroyCdm(cdm_id_); 43 manager_->DestroyCdm(cdm_id_);
39 manager_->UnregisterMediaKeys(cdm_id_); 44 manager_->UnregisterMediaKeys(cdm_id_);
40 45
41 // Reject any outstanding promises. 46 // Reject any outstanding promises.
42 for (PromiseMap::iterator it = session_id_to_promise_map_.begin(); 47 for (PromiseMap::iterator it = session_id_to_promise_map_.begin();
43 it != session_id_to_promise_map_.end(); 48 it != session_id_to_promise_map_.end();
44 ++it) { 49 ++it) {
45 it->second->reject( 50 it->second->reject(
46 media::MediaKeys::NOT_SUPPORTED_ERROR, 0, "The operation was aborted."); 51 media::MediaKeys::NOT_SUPPORTED_ERROR, 0, "The operation was aborted.");
47 } 52 }
48 session_id_to_promise_map_.clear(); 53 session_id_to_promise_map_.clear();
49 } 54 }
50 55
56 void ProxyMediaKeys::SetServerCertificate(
57 const uint8* certificate_data,
58 int certificate_data_length,
59 scoped_ptr<media::SimpleCdmPromise> promise) {
60 promise->reject(NOT_SUPPORTED_ERROR, 0, "Not yet implemented.");
61 }
62
51 void ProxyMediaKeys::CreateSession( 63 void ProxyMediaKeys::CreateSession(
52 const std::string& init_data_type, 64 const std::string& init_data_type,
53 const uint8* init_data, 65 const uint8* init_data,
54 int init_data_length, 66 int init_data_length,
55 SessionType session_type, 67 SessionType session_type,
56 scoped_ptr<media::NewSessionCdmPromise> promise) { 68 scoped_ptr<media::NewSessionCdmPromise> promise) {
57 // TODO(xhwang): Move these checks up to blink and DCHECK here. 69 // TODO(xhwang): Move these checks up to blink and DCHECK here.
58 // See http://crbug.com/342510 70 // See http://crbug.com/342510
59 CdmHostMsg_CreateSession_ContentType create_session_content_type; 71 CdmHostMsg_CreateSession_ContentType create_session_content_type;
60 if (init_data_type == "cenc") { 72 if (init_data_type == "cenc") {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 return; 112 return;
101 } 113 }
102 114
103 SavePromise(session_id, promise.PassAs<media::CdmPromise>()); 115 SavePromise(session_id, promise.PassAs<media::CdmPromise>());
104 manager_->UpdateSession( 116 manager_->UpdateSession(
105 cdm_id_, 117 cdm_id_,
106 session_id, 118 session_id,
107 std::vector<uint8>(response, response + response_length)); 119 std::vector<uint8>(response, response + response_length));
108 } 120 }
109 121
110 void ProxyMediaKeys::ReleaseSession( 122 void ProxyMediaKeys::CloseSession(const std::string& web_session_id,
111 const std::string& web_session_id, 123 scoped_ptr<media::SimpleCdmPromise> promise) {
112 scoped_ptr<media::SimpleCdmPromise> promise) {
113 uint32 session_id = LookupSessionId(web_session_id); 124 uint32 session_id = LookupSessionId(web_session_id);
114 if (!session_id) { 125 if (!session_id) {
115 promise->reject(INVALID_ACCESS_ERROR, 0, "Session does not exist."); 126 promise->reject(INVALID_ACCESS_ERROR, 0, "Session does not exist.");
116 return; 127 return;
117 } 128 }
118 129
119 SavePromise(session_id, promise.PassAs<media::CdmPromise>()); 130 SavePromise(session_id, promise.PassAs<media::CdmPromise>());
120 manager_->ReleaseSession(cdm_id_, session_id); 131 manager_->ReleaseSession(cdm_id_, session_id);
121 } 132 }
122 133
134 void ProxyMediaKeys::RemoveSession(
135 const std::string& web_session_id,
136 scoped_ptr<media::SimpleCdmPromise> promise) {
137 promise->reject(NOT_SUPPORTED_ERROR, 0, "Not yet implemented.");
138 }
139
140 void ProxyMediaKeys::GetUsableKeyIds(const std::string& web_session_id,
141 scoped_ptr<media::KeyIdsPromise> promise) {
142 promise->reject(NOT_SUPPORTED_ERROR, 0, "Not yet implemented.");
143 }
144
123 void ProxyMediaKeys::OnSessionCreated(uint32 session_id, 145 void ProxyMediaKeys::OnSessionCreated(uint32 session_id,
124 const std::string& web_session_id) { 146 const std::string& web_session_id) {
125 AssignWebSessionId(session_id, web_session_id); 147 AssignWebSessionId(session_id, web_session_id);
126 scoped_ptr<media::CdmPromise> promise = TakePromise(session_id); 148 scoped_ptr<media::CdmPromise> promise = TakePromise(session_id);
127 if (promise) { 149 if (promise) {
128 media::NewSessionCdmPromise* session_promise( 150 media::NewSessionCdmPromise* session_promise(
129 static_cast<media::NewSessionCdmPromise*>(promise.get())); 151 static_cast<media::NewSessionCdmPromise*>(promise.get()));
130 session_promise->resolve(web_session_id); 152 session_promise->resolve(web_session_id);
131 } 153 }
132 } 154 }
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 286
265 scoped_ptr<media::CdmPromise> ProxyMediaKeys::TakePromise(uint32_t session_id) { 287 scoped_ptr<media::CdmPromise> ProxyMediaKeys::TakePromise(uint32_t session_id) {
266 PromiseMap::iterator it = session_id_to_promise_map_.find(session_id); 288 PromiseMap::iterator it = session_id_to_promise_map_.find(session_id);
267 // May not be a promise associated with this session for asynchronous events. 289 // May not be a promise associated with this session for asynchronous events.
268 if (it == session_id_to_promise_map_.end()) 290 if (it == session_id_to_promise_map_.end())
269 return scoped_ptr<media::CdmPromise>(); 291 return scoped_ptr<media::CdmPromise>();
270 return session_id_to_promise_map_.take_and_erase(it); 292 return session_id_to_promise_map_.take_and_erase(it);
271 } 293 }
272 294
273 } // namespace content 295 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698