OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/ppapi_decryptor.h" | 5 #include "content/renderer/media/crypto/ppapi_decryptor.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/callback_helpers.h" | 10 #include "base/callback_helpers.h" |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 base::Bind(&PpapiDecryptor::OnSessionClosed, weak_this_), | 86 base::Bind(&PpapiDecryptor::OnSessionClosed, weak_this_), |
87 base::Bind(&PpapiDecryptor::OnSessionError, weak_this_)); | 87 base::Bind(&PpapiDecryptor::OnSessionError, weak_this_)); |
88 } | 88 } |
89 | 89 |
90 PpapiDecryptor::~PpapiDecryptor() { | 90 PpapiDecryptor::~PpapiDecryptor() { |
91 plugin_cdm_delegate_ = NULL; | 91 plugin_cdm_delegate_ = NULL; |
92 plugin_instance_ = NULL; | 92 plugin_instance_ = NULL; |
93 destroy_plugin_cb_.Run(); | 93 destroy_plugin_cb_.Run(); |
94 } | 94 } |
95 | 95 |
96 bool PpapiDecryptor::CreateSession(uint32 reference_id, | 96 bool PpapiDecryptor::CreateSession(uint32 session_id, |
97 const std::string& type, | 97 const std::string& type, |
98 const uint8* init_data, | 98 const uint8* init_data, |
99 int init_data_length) { | 99 int init_data_length) { |
100 DVLOG(2) << __FUNCTION__; | 100 DVLOG(2) << __FUNCTION__; |
101 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); | 101 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); |
102 DCHECK(plugin_cdm_delegate_); | 102 DCHECK(plugin_cdm_delegate_); |
103 | 103 |
104 if (!plugin_cdm_delegate_->CreateSession( | 104 if (!plugin_cdm_delegate_->CreateSession( |
105 reference_id, type, init_data, init_data_length)) { | 105 session_id, type, init_data, init_data_length)) { |
106 ReportFailureToCallPlugin(reference_id); | 106 ReportFailureToCallPlugin(session_id); |
107 return false; | 107 return false; |
108 } | 108 } |
109 | 109 |
110 return true; | 110 return true; |
111 } | 111 } |
112 | 112 |
113 void PpapiDecryptor::UpdateSession(uint32 reference_id, | 113 void PpapiDecryptor::UpdateSession(uint32 session_id, |
114 const uint8* response, | 114 const uint8* response, |
115 int response_length) { | 115 int response_length) { |
116 DVLOG(2) << __FUNCTION__; | 116 DVLOG(2) << __FUNCTION__; |
117 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); | 117 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); |
118 | 118 |
119 if (!plugin_cdm_delegate_->UpdateSession( | 119 if (!plugin_cdm_delegate_->UpdateSession( |
120 reference_id, response, response_length)) | 120 session_id, response, response_length)) |
121 ReportFailureToCallPlugin(reference_id); | 121 ReportFailureToCallPlugin(session_id); |
122 | 122 |
123 if (!new_audio_key_cb_.is_null()) | 123 if (!new_audio_key_cb_.is_null()) |
124 new_audio_key_cb_.Run(); | 124 new_audio_key_cb_.Run(); |
125 | 125 |
126 if (!new_video_key_cb_.is_null()) | 126 if (!new_video_key_cb_.is_null()) |
127 new_video_key_cb_.Run(); | 127 new_video_key_cb_.Run(); |
128 } | 128 } |
129 | 129 |
130 void PpapiDecryptor::ReleaseSession(uint32 reference_id) { | 130 void PpapiDecryptor::ReleaseSession(uint32 session_id) { |
131 DVLOG(2) << __FUNCTION__; | 131 DVLOG(2) << __FUNCTION__; |
132 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); | 132 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); |
133 | 133 |
134 if (!plugin_cdm_delegate_->ReleaseSession(reference_id)) | 134 if (!plugin_cdm_delegate_->ReleaseSession(session_id)) |
135 ReportFailureToCallPlugin(reference_id); | 135 ReportFailureToCallPlugin(session_id); |
136 } | 136 } |
137 | 137 |
138 media::Decryptor* PpapiDecryptor::GetDecryptor() { | 138 media::Decryptor* PpapiDecryptor::GetDecryptor() { |
139 #if defined(GOOGLE_TV) | 139 #if defined(GOOGLE_TV) |
140 // Google TV only uses PpapiDecrytor as a MediaKeys and does not need the | 140 // Google TV only uses PpapiDecrytor as a MediaKeys and does not need the |
141 // Decryptor interface of the PpapiDecryptor. | 141 // Decryptor interface of the PpapiDecryptor. |
142 // Details: If we don't do this GTV will be broken. The reason is that during | 142 // Details: If we don't do this GTV will be broken. The reason is that during |
143 // initialization, MediaSourceDelegate tries to use DecryptingDemuxerStream | 143 // initialization, MediaSourceDelegate tries to use DecryptingDemuxerStream |
144 // to decrypt the stream in the renderer process (for ClearKey support). | 144 // to decrypt the stream in the renderer process (for ClearKey support). |
145 // However, for GTV, PpapiDecryptor cannot do decryption at all. By returning | 145 // However, for GTV, PpapiDecryptor cannot do decryption at all. By returning |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 if (!render_loop_proxy_->BelongsToCurrentThread()) { | 286 if (!render_loop_proxy_->BelongsToCurrentThread()) { |
287 render_loop_proxy_->PostTask(FROM_HERE, base::Bind( | 287 render_loop_proxy_->PostTask(FROM_HERE, base::Bind( |
288 &PpapiDecryptor::DeinitializeDecoder, weak_this_, stream_type)); | 288 &PpapiDecryptor::DeinitializeDecoder, weak_this_, stream_type)); |
289 return; | 289 return; |
290 } | 290 } |
291 | 291 |
292 DVLOG(2) << __FUNCTION__ << " - stream_type: " << stream_type; | 292 DVLOG(2) << __FUNCTION__ << " - stream_type: " << stream_type; |
293 plugin_cdm_delegate_->DeinitializeDecoder(stream_type); | 293 plugin_cdm_delegate_->DeinitializeDecoder(stream_type); |
294 } | 294 } |
295 | 295 |
296 void PpapiDecryptor::ReportFailureToCallPlugin(uint32 reference_id) { | 296 void PpapiDecryptor::ReportFailureToCallPlugin(uint32 session_id) { |
297 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); | 297 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); |
298 DVLOG(1) << "Failed to call plugin."; | 298 DVLOG(1) << "Failed to call plugin."; |
299 session_error_cb_.Run(reference_id, kUnknownError, 0); | 299 session_error_cb_.Run(session_id, kUnknownError, 0); |
300 } | 300 } |
301 | 301 |
302 void PpapiDecryptor::OnDecoderInitialized(StreamType stream_type, | 302 void PpapiDecryptor::OnDecoderInitialized(StreamType stream_type, |
303 bool success) { | 303 bool success) { |
304 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); | 304 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); |
305 switch (stream_type) { | 305 switch (stream_type) { |
306 case kAudio: | 306 case kAudio: |
307 DCHECK(!audio_decoder_init_cb_.is_null()); | 307 DCHECK(!audio_decoder_init_cb_.is_null()); |
308 base::ResetAndReturn(&audio_decoder_init_cb_).Run(success); | 308 base::ResetAndReturn(&audio_decoder_init_cb_).Run(success); |
309 break; | 309 break; |
310 case kVideo: | 310 case kVideo: |
311 DCHECK(!video_decoder_init_cb_.is_null()); | 311 DCHECK(!video_decoder_init_cb_.is_null()); |
312 base::ResetAndReturn(&video_decoder_init_cb_).Run(success); | 312 base::ResetAndReturn(&video_decoder_init_cb_).Run(success); |
313 break; | 313 break; |
314 default: | 314 default: |
315 NOTREACHED(); | 315 NOTREACHED(); |
316 } | 316 } |
317 } | 317 } |
318 | 318 |
319 void PpapiDecryptor::OnSessionCreated(uint32 reference_id, | 319 void PpapiDecryptor::OnSessionCreated(uint32 session_id, |
320 const std::string& session_id) { | 320 const std::string& web_session_id) { |
321 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); | 321 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); |
322 session_created_cb_.Run(reference_id, session_id); | 322 session_created_cb_.Run(session_id, web_session_id); |
323 } | 323 } |
324 | 324 |
325 void PpapiDecryptor::OnSessionMessage(uint32 reference_id, | 325 void PpapiDecryptor::OnSessionMessage(uint32 session_id, |
326 const std::vector<uint8>& message, | 326 const std::vector<uint8>& message, |
327 const std::string& destination_url) { | 327 const std::string& destination_url) { |
328 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); | 328 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); |
329 session_message_cb_.Run(reference_id, message, destination_url); | 329 session_message_cb_.Run(session_id, message, destination_url); |
330 } | 330 } |
331 | 331 |
332 void PpapiDecryptor::OnSessionReady(uint32 reference_id) { | 332 void PpapiDecryptor::OnSessionReady(uint32 session_id) { |
333 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); | 333 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); |
334 session_ready_cb_.Run(reference_id); | 334 session_ready_cb_.Run(session_id); |
335 } | 335 } |
336 | 336 |
337 void PpapiDecryptor::OnSessionClosed(uint32 reference_id) { | 337 void PpapiDecryptor::OnSessionClosed(uint32 session_id) { |
338 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); | 338 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); |
339 session_closed_cb_.Run(reference_id); | 339 session_closed_cb_.Run(session_id); |
340 } | 340 } |
341 | 341 |
342 void PpapiDecryptor::OnSessionError(uint32 reference_id, | 342 void PpapiDecryptor::OnSessionError(uint32 session_id, |
343 media::MediaKeys::KeyError error_code, | 343 media::MediaKeys::KeyError error_code, |
344 int system_code) { | 344 int system_code) { |
345 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); | 345 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); |
346 session_error_cb_.Run(reference_id, error_code, system_code); | 346 session_error_cb_.Run(session_id, error_code, system_code); |
347 } | 347 } |
348 | 348 |
349 } // namespace content | 349 } // namespace content |
OLD | NEW |