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

Side by Side Diff: content/browser/media/cdm/browser_cdm_manager.cc

Issue 1407933010: media: Make MediaKeys ref-counted. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase only Created 5 years, 1 month 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/browser/media/cdm/browser_cdm_manager.h" 5 #include "content/browser/media/cdm/browser_cdm_manager.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
11 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
12 #include "base/task_runner.h" 12 #include "base/task_runner.h"
13 #include "content/public/browser/browser_context.h" 13 #include "content/public/browser/browser_context.h"
14 #include "content/public/browser/browser_thread.h" 14 #include "content/public/browser/browser_thread.h"
15 #include "content/public/browser/content_browser_client.h" 15 #include "content/public/browser/content_browser_client.h"
16 #include "content/public/browser/permission_manager.h" 16 #include "content/public/browser/permission_manager.h"
17 #include "content/public/browser/permission_type.h" 17 #include "content/public/browser/permission_type.h"
18 #include "content/public/browser/render_frame_host.h" 18 #include "content/public/browser/render_frame_host.h"
19 #include "content/public/browser/render_process_host.h" 19 #include "content/public/browser/render_process_host.h"
20 #include "content/public/browser/render_process_host_observer.h" 20 #include "content/public/browser/render_process_host_observer.h"
21 #include "content/public/browser/web_contents.h" 21 #include "content/public/browser/web_contents.h"
22 #include "media/base/browser_cdm.h"
23 #include "media/base/browser_cdm_factory.h" 22 #include "media/base/browser_cdm_factory.h"
24 #include "media/base/cdm_promise.h" 23 #include "media/base/cdm_promise.h"
25 #include "media/base/limits.h" 24 #include "media/base/limits.h"
26 25
27 #if defined(OS_ANDROID) 26 #if defined(OS_ANDROID)
28 #include "content/public/common/renderer_preferences.h" 27 #include "content/public/common/renderer_preferences.h"
29 #endif 28 #endif
30 29
31 namespace content { 30 namespace content {
32 31
33 using media::BrowserCdm;
34 using media::MediaKeys; 32 using media::MediaKeys;
35 using media::ScopedBrowserCdmPtr;
36 33
37 namespace { 34 namespace {
38 35
39 #if defined(OS_ANDROID) 36 #if defined(OS_ANDROID)
40 // Android only supports 128-bit key IDs. 37 // Android only supports 128-bit key IDs.
41 const size_t kAndroidKeyIdBytes = 128 / 8; 38 const size_t kAndroidKeyIdBytes = 128 / 8;
42 #endif 39 #endif
43 40
44 // The ID used in this class is a concatenation of |render_frame_id| and 41 // The ID used in this class is a concatenation of |render_frame_id| and
45 // |cdm_id|, i.e. (render_frame_id << 32) + cdm_id. 42 // |cdm_id|, i.e. (render_frame_id << 32) + cdm_id.
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 IPC_MESSAGE_HANDLER(CdmHostMsg_LoadSession, OnLoadSession) 212 IPC_MESSAGE_HANDLER(CdmHostMsg_LoadSession, OnLoadSession)
216 IPC_MESSAGE_HANDLER(CdmHostMsg_UpdateSession, OnUpdateSession) 213 IPC_MESSAGE_HANDLER(CdmHostMsg_UpdateSession, OnUpdateSession)
217 IPC_MESSAGE_HANDLER(CdmHostMsg_CloseSession, OnCloseSession) 214 IPC_MESSAGE_HANDLER(CdmHostMsg_CloseSession, OnCloseSession)
218 IPC_MESSAGE_HANDLER(CdmHostMsg_RemoveSession, OnRemoveSession) 215 IPC_MESSAGE_HANDLER(CdmHostMsg_RemoveSession, OnRemoveSession)
219 IPC_MESSAGE_HANDLER(CdmHostMsg_DestroyCdm, OnDestroyCdm) 216 IPC_MESSAGE_HANDLER(CdmHostMsg_DestroyCdm, OnDestroyCdm)
220 IPC_MESSAGE_UNHANDLED(handled = false) 217 IPC_MESSAGE_UNHANDLED(handled = false)
221 IPC_END_MESSAGE_MAP() 218 IPC_END_MESSAGE_MAP()
222 return handled; 219 return handled;
223 } 220 }
224 221
225 media::BrowserCdm* BrowserCdmManager::GetCdm(int render_frame_id, 222 scoped_refptr<MediaKeys> BrowserCdmManager::GetCdm(int render_frame_id,
226 int cdm_id) const { 223 int cdm_id) const {
227 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 224 DCHECK(task_runner_->RunsTasksOnCurrentThread());
228 return cdm_map_.get(GetId(render_frame_id, cdm_id)); 225 const auto& iter = cdm_map_.find(GetId(render_frame_id, cdm_id));
226 return iter == cdm_map_.end() ? nullptr : iter->second;
229 } 227 }
230 228
231 void BrowserCdmManager::RenderFrameDeleted(int render_frame_id) { 229 void BrowserCdmManager::RenderFrameDeleted(int render_frame_id) {
232 if (!task_runner_->RunsTasksOnCurrentThread()) { 230 if (!task_runner_->RunsTasksOnCurrentThread()) {
233 task_runner_->PostTask( 231 task_runner_->PostTask(
234 FROM_HERE, 232 FROM_HERE,
235 base::Bind(&BrowserCdmManager::RemoveAllCdmForFrame, 233 base::Bind(&BrowserCdmManager::RemoveAllCdmForFrame,
236 this, render_frame_id)); 234 this, render_frame_id));
237 return; 235 return;
238 } 236 }
(...skipping 18 matching lines...) Expand all
257 return; 255 return;
258 } 256 }
259 257
260 Send(new CdmMsg_ResolvePromiseWithSession(render_frame_id, cdm_id, promise_id, 258 Send(new CdmMsg_ResolvePromiseWithSession(render_frame_id, cdm_id, promise_id,
261 session_id)); 259 session_id));
262 } 260 }
263 261
264 void BrowserCdmManager::RejectPromise(int render_frame_id, 262 void BrowserCdmManager::RejectPromise(int render_frame_id,
265 int cdm_id, 263 int cdm_id,
266 uint32_t promise_id, 264 uint32_t promise_id,
267 media::MediaKeys::Exception exception, 265 MediaKeys::Exception exception,
268 uint32_t system_code, 266 uint32_t system_code,
269 const std::string& error_message) { 267 const std::string& error_message) {
270 Send(new CdmMsg_RejectPromise(render_frame_id, cdm_id, promise_id, exception, 268 Send(new CdmMsg_RejectPromise(render_frame_id, cdm_id, promise_id, exception,
271 system_code, error_message)); 269 system_code, error_message));
272 } 270 }
273 271
274 void BrowserCdmManager::OnSessionMessage( 272 void BrowserCdmManager::OnSessionMessage(int render_frame_id,
275 int render_frame_id, 273 int cdm_id,
276 int cdm_id, 274 const std::string& session_id,
277 const std::string& session_id, 275 MediaKeys::MessageType message_type,
278 media::MediaKeys::MessageType message_type, 276 const std::vector<uint8>& message,
279 const std::vector<uint8>& message, 277 const GURL& legacy_destination_url) {
280 const GURL& legacy_destination_url) {
281 GURL verified_gurl = legacy_destination_url; 278 GURL verified_gurl = legacy_destination_url;
282 if (!verified_gurl.is_valid() && !verified_gurl.is_empty()) { 279 if (!verified_gurl.is_valid() && !verified_gurl.is_empty()) {
283 DLOG(WARNING) << "SessionMessage legacy_destination_url is invalid : " 280 DLOG(WARNING) << "SessionMessage legacy_destination_url is invalid : "
284 << legacy_destination_url.possibly_invalid_spec(); 281 << legacy_destination_url.possibly_invalid_spec();
285 verified_gurl = 282 verified_gurl =
286 GURL::EmptyGURL(); // Replace invalid legacy_destination_url. 283 GURL::EmptyGURL(); // Replace invalid legacy_destination_url.
287 } 284 }
288 285
289 Send(new CdmMsg_SessionMessage(render_frame_id, cdm_id, session_id, 286 Send(new CdmMsg_SessionMessage(render_frame_id, cdm_id, session_id,
290 message_type, message, verified_gurl)); 287 message_type, message, verified_gurl));
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 void BrowserCdmManager::OnSetServerCertificate( 346 void BrowserCdmManager::OnSetServerCertificate(
350 int render_frame_id, 347 int render_frame_id,
351 int cdm_id, 348 int cdm_id,
352 uint32_t promise_id, 349 uint32_t promise_id,
353 const std::vector<uint8_t>& certificate) { 350 const std::vector<uint8_t>& certificate) {
354 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 351 DCHECK(task_runner_->RunsTasksOnCurrentThread());
355 352
356 scoped_ptr<SimplePromise> promise(new SimplePromise( 353 scoped_ptr<SimplePromise> promise(new SimplePromise(
357 weak_ptr_factory_.GetWeakPtr(), render_frame_id, cdm_id, promise_id)); 354 weak_ptr_factory_.GetWeakPtr(), render_frame_id, cdm_id, promise_id));
358 355
359 BrowserCdm* cdm = GetCdm(render_frame_id, cdm_id); 356 scoped_refptr<MediaKeys> cdm = GetCdm(render_frame_id, cdm_id);
360 if (!cdm) { 357 if (!cdm) {
361 promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found."); 358 promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found.");
362 return; 359 return;
363 } 360 }
364 361
365 if (certificate.empty()) { 362 if (certificate.empty()) {
366 promise->reject(MediaKeys::INVALID_ACCESS_ERROR, 0, "Empty certificate."); 363 promise->reject(MediaKeys::INVALID_ACCESS_ERROR, 0, "Empty certificate.");
367 return; 364 return;
368 } 365 }
369 366
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 eme_init_data_type = media::EmeInitDataType::CENC; 404 eme_init_data_type = media::EmeInitDataType::CENC;
408 break; 405 break;
409 #endif 406 #endif
410 default: 407 default:
411 NOTREACHED(); 408 NOTREACHED();
412 promise->reject(MediaKeys::INVALID_ACCESS_ERROR, 0, 409 promise->reject(MediaKeys::INVALID_ACCESS_ERROR, 0,
413 "Invalid init data type."); 410 "Invalid init data type.");
414 return; 411 return;
415 } 412 }
416 413
417 BrowserCdm* cdm = GetCdm(render_frame_id, cdm_id); 414 scoped_refptr<MediaKeys> cdm = GetCdm(render_frame_id, cdm_id);
418 if (!cdm) { 415 if (!cdm) {
419 DLOG(WARNING) << "No CDM found for: " << render_frame_id << ", " << cdm_id; 416 DLOG(WARNING) << "No CDM found for: " << render_frame_id << ", " << cdm_id;
420 promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found."); 417 promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found.");
421 return; 418 return;
422 } 419 }
423 420
424 CheckPermissionStatus( 421 CheckPermissionStatus(
425 render_frame_id, cdm_id, 422 render_frame_id, cdm_id,
426 base::Bind(&BrowserCdmManager::CreateSessionAndGenerateRequestIfPermitted, 423 base::Bind(&BrowserCdmManager::CreateSessionAndGenerateRequestIfPermitted,
427 this, render_frame_id, cdm_id, params.session_type, 424 this, render_frame_id, cdm_id, params.session_type,
428 eme_init_data_type, init_data, base::Passed(&promise))); 425 eme_init_data_type, init_data, base::Passed(&promise)));
429 } 426 }
430 427
431 void BrowserCdmManager::OnLoadSession( 428 void BrowserCdmManager::OnLoadSession(
432 int render_frame_id, 429 int render_frame_id,
433 int cdm_id, 430 int cdm_id,
434 uint32_t promise_id, 431 uint32_t promise_id,
435 media::MediaKeys::SessionType session_type, 432 media::MediaKeys::SessionType session_type,
436 const std::string& session_id) { 433 const std::string& session_id) {
437 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 434 DCHECK(task_runner_->RunsTasksOnCurrentThread());
438 435
439 scoped_ptr<NewSessionPromise> promise(new NewSessionPromise( 436 scoped_ptr<NewSessionPromise> promise(new NewSessionPromise(
440 weak_ptr_factory_.GetWeakPtr(), render_frame_id, cdm_id, promise_id)); 437 weak_ptr_factory_.GetWeakPtr(), render_frame_id, cdm_id, promise_id));
441 438
442 BrowserCdm* cdm = GetCdm(render_frame_id, cdm_id); 439 scoped_refptr<MediaKeys> cdm = GetCdm(render_frame_id, cdm_id);
443 if (!cdm) { 440 if (!cdm) {
444 DLOG(WARNING) << "No CDM found for: " << render_frame_id << ", " << cdm_id; 441 DLOG(WARNING) << "No CDM found for: " << render_frame_id << ", " << cdm_id;
445 promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found."); 442 promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found.");
446 return; 443 return;
447 } 444 }
448 445
449 CheckPermissionStatus( 446 CheckPermissionStatus(
450 render_frame_id, cdm_id, 447 render_frame_id, cdm_id,
451 base::Bind(&BrowserCdmManager::LoadSessionIfPermitted, 448 base::Bind(&BrowserCdmManager::LoadSessionIfPermitted,
452 this, render_frame_id, cdm_id, session_type, 449 this, render_frame_id, cdm_id, session_type,
453 session_id, base::Passed(&promise))); 450 session_id, base::Passed(&promise)));
454 } 451 }
455 452
456 void BrowserCdmManager::OnUpdateSession(int render_frame_id, 453 void BrowserCdmManager::OnUpdateSession(int render_frame_id,
457 int cdm_id, 454 int cdm_id,
458 uint32_t promise_id, 455 uint32_t promise_id,
459 const std::string& session_id, 456 const std::string& session_id,
460 const std::vector<uint8>& response) { 457 const std::vector<uint8>& response) {
461 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 458 DCHECK(task_runner_->RunsTasksOnCurrentThread());
462 459
463 scoped_ptr<SimplePromise> promise(new SimplePromise( 460 scoped_ptr<SimplePromise> promise(new SimplePromise(
464 weak_ptr_factory_.GetWeakPtr(), render_frame_id, cdm_id, promise_id)); 461 weak_ptr_factory_.GetWeakPtr(), render_frame_id, cdm_id, promise_id));
465 462
466 BrowserCdm* cdm = GetCdm(render_frame_id, cdm_id); 463 scoped_refptr<MediaKeys> cdm = GetCdm(render_frame_id, cdm_id);
467 if (!cdm) { 464 if (!cdm) {
468 promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found."); 465 promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found.");
469 return; 466 return;
470 } 467 }
471 468
472 if (response.size() > media::limits::kMaxSessionResponseLength) { 469 if (response.size() > media::limits::kMaxSessionResponseLength) {
473 LOG(WARNING) << "Response for ID " << cdm_id 470 LOG(WARNING) << "Response for ID " << cdm_id
474 << " is too long: " << response.size(); 471 << " is too long: " << response.size();
475 promise->reject(MediaKeys::INVALID_ACCESS_ERROR, 0, "Response too long."); 472 promise->reject(MediaKeys::INVALID_ACCESS_ERROR, 0, "Response too long.");
476 return; 473 return;
477 } 474 }
478 475
479 if (response.empty()) { 476 if (response.empty()) {
480 promise->reject(MediaKeys::INVALID_ACCESS_ERROR, 0, "Response is empty."); 477 promise->reject(MediaKeys::INVALID_ACCESS_ERROR, 0, "Response is empty.");
481 return; 478 return;
482 } 479 }
483 480
484 cdm->UpdateSession(session_id, response, promise.Pass()); 481 cdm->UpdateSession(session_id, response, promise.Pass());
485 } 482 }
486 483
487 void BrowserCdmManager::OnCloseSession(int render_frame_id, 484 void BrowserCdmManager::OnCloseSession(int render_frame_id,
488 int cdm_id, 485 int cdm_id,
489 uint32_t promise_id, 486 uint32_t promise_id,
490 const std::string& session_id) { 487 const std::string& session_id) {
491 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 488 DCHECK(task_runner_->RunsTasksOnCurrentThread());
492 489
493 scoped_ptr<SimplePromise> promise(new SimplePromise( 490 scoped_ptr<SimplePromise> promise(new SimplePromise(
494 weak_ptr_factory_.GetWeakPtr(), render_frame_id, cdm_id, promise_id)); 491 weak_ptr_factory_.GetWeakPtr(), render_frame_id, cdm_id, promise_id));
495 492
496 BrowserCdm* cdm = GetCdm(render_frame_id, cdm_id); 493 scoped_refptr<MediaKeys> cdm = GetCdm(render_frame_id, cdm_id);
497 if (!cdm) { 494 if (!cdm) {
498 promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found."); 495 promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found.");
499 return; 496 return;
500 } 497 }
501 498
502 cdm->CloseSession(session_id, promise.Pass()); 499 cdm->CloseSession(session_id, promise.Pass());
503 } 500 }
504 501
505 void BrowserCdmManager::OnRemoveSession(int render_frame_id, 502 void BrowserCdmManager::OnRemoveSession(int render_frame_id,
506 int cdm_id, 503 int cdm_id,
507 uint32_t promise_id, 504 uint32_t promise_id,
508 const std::string& session_id) { 505 const std::string& session_id) {
509 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 506 DCHECK(task_runner_->RunsTasksOnCurrentThread());
510 507
511 scoped_ptr<SimplePromise> promise(new SimplePromise( 508 scoped_ptr<SimplePromise> promise(new SimplePromise(
512 weak_ptr_factory_.GetWeakPtr(), render_frame_id, cdm_id, promise_id)); 509 weak_ptr_factory_.GetWeakPtr(), render_frame_id, cdm_id, promise_id));
513 510
514 BrowserCdm* cdm = GetCdm(render_frame_id, cdm_id); 511 scoped_refptr<MediaKeys> cdm = GetCdm(render_frame_id, cdm_id);
515 if (!cdm) { 512 if (!cdm) {
516 promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found."); 513 promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found.");
517 return; 514 return;
518 } 515 }
519 516
520 cdm->RemoveSession(session_id, promise.Pass()); 517 cdm->RemoveSession(session_id, promise.Pass());
521 } 518 }
522 519
523 void BrowserCdmManager::OnDestroyCdm(int render_frame_id, int cdm_id) { 520 void BrowserCdmManager::OnDestroyCdm(int render_frame_id, int cdm_id) {
524 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 521 DCHECK(task_runner_->RunsTasksOnCurrentThread());
(...skipping 10 matching lines...) Expand all
535 uint32_t promise_id, 532 uint32_t promise_id,
536 const std::string& key_system, 533 const std::string& key_system,
537 const GURL& security_origin, 534 const GURL& security_origin,
538 bool use_hw_secure_codecs) { 535 bool use_hw_secure_codecs) {
539 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 536 DCHECK(task_runner_->RunsTasksOnCurrentThread());
540 DCHECK(!GetCdm(render_frame_id, cdm_id)); 537 DCHECK(!GetCdm(render_frame_id, cdm_id));
541 538
542 scoped_ptr<SimplePromise> promise(new SimplePromise( 539 scoped_ptr<SimplePromise> promise(new SimplePromise(
543 weak_ptr_factory_.GetWeakPtr(), render_frame_id, cdm_id, promise_id)); 540 weak_ptr_factory_.GetWeakPtr(), render_frame_id, cdm_id, promise_id));
544 541
545 ScopedBrowserCdmPtr cdm(media::CreateBrowserCdm( 542 scoped_refptr<MediaKeys> cdm(media::CreateBrowserCdm(
546 key_system, use_hw_secure_codecs, 543 key_system, use_hw_secure_codecs,
547 BROWSER_CDM_MANAGER_CB(OnSessionMessage), 544 BROWSER_CDM_MANAGER_CB(OnSessionMessage),
548 BROWSER_CDM_MANAGER_CB(OnSessionClosed), 545 BROWSER_CDM_MANAGER_CB(OnSessionClosed),
549 BROWSER_CDM_MANAGER_CB(OnLegacySessionError), 546 BROWSER_CDM_MANAGER_CB(OnLegacySessionError),
550 BROWSER_CDM_MANAGER_CB(OnSessionKeysChange), 547 BROWSER_CDM_MANAGER_CB(OnSessionKeysChange),
551 BROWSER_CDM_MANAGER_CB(OnSessionExpirationUpdate))); 548 BROWSER_CDM_MANAGER_CB(OnSessionExpirationUpdate)));
552 549
553 if (!cdm) { 550 if (!cdm) {
554 DVLOG(1) << "failed to create CDM."; 551 DVLOG(1) << "failed to create CDM.";
555 promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "Failed to create CDM."); 552 promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "Failed to create CDM.");
556 return; 553 return;
557 } 554 }
558 555
559 uint64 id = GetId(render_frame_id, cdm_id); 556 uint64 id = GetId(render_frame_id, cdm_id);
560 cdm_map_.add(id, cdm.Pass()); 557 cdm_map_[id] = cdm;
561 cdm_security_origin_map_[id] = security_origin; 558 cdm_security_origin_map_[id] = security_origin;
562 promise->resolve(); 559 promise->resolve();
563 } 560 }
564 561
565 void BrowserCdmManager::RemoveAllCdmForFrame(int render_frame_id) { 562 void BrowserCdmManager::RemoveAllCdmForFrame(int render_frame_id) {
566 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 563 DCHECK(task_runner_->RunsTasksOnCurrentThread());
567 564
568 std::vector<uint64> ids_to_remove; 565 std::vector<uint64> ids_to_remove;
569 for (CdmMap::iterator it = cdm_map_.begin(); it != cdm_map_.end(); ++it) { 566 for (const auto& entry : cdm_map_) {
570 if (IdBelongsToFrame(it->first, render_frame_id)) 567 if (IdBelongsToFrame(entry.first, render_frame_id))
571 ids_to_remove.push_back(it->first); 568 ids_to_remove.push_back(entry.first);
572 } 569 }
573 570
574 for (size_t i = 0; i < ids_to_remove.size(); ++i) 571 for (const auto& id_to_remove : ids_to_remove)
575 RemoveCdm(ids_to_remove[i]); 572 RemoveCdm(id_to_remove);
576 } 573 }
577 574
578 void BrowserCdmManager::RemoveCdm(uint64 id) { 575 void BrowserCdmManager::RemoveCdm(uint64 id) {
579 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 576 DCHECK(task_runner_->RunsTasksOnCurrentThread());
580 577
581 cdm_map_.erase(id); 578 cdm_map_.erase(id);
582 cdm_security_origin_map_.erase(id); 579 cdm_security_origin_map_.erase(id);
583 } 580 }
584 581
585 void BrowserCdmManager::CheckPermissionStatus( 582 void BrowserCdmManager::CheckPermissionStatus(
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
646 const std::vector<uint8>& init_data, 643 const std::vector<uint8>& init_data,
647 scoped_ptr<media::NewSessionCdmPromise> promise, 644 scoped_ptr<media::NewSessionCdmPromise> promise,
648 bool permission_was_allowed) { 645 bool permission_was_allowed) {
649 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 646 DCHECK(task_runner_->RunsTasksOnCurrentThread());
650 647
651 if (!permission_was_allowed) { 648 if (!permission_was_allowed) {
652 promise->reject(MediaKeys::NOT_SUPPORTED_ERROR, 0, "Permission denied."); 649 promise->reject(MediaKeys::NOT_SUPPORTED_ERROR, 0, "Permission denied.");
653 return; 650 return;
654 } 651 }
655 652
656 BrowserCdm* cdm = GetCdm(render_frame_id, cdm_id); 653 scoped_refptr<MediaKeys> cdm = GetCdm(render_frame_id, cdm_id);
657 if (!cdm) { 654 if (!cdm) {
658 promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found."); 655 promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found.");
659 return; 656 return;
660 } 657 }
661 658
662 cdm->CreateSessionAndGenerateRequest(session_type, init_data_type, 659 cdm->CreateSessionAndGenerateRequest(session_type, init_data_type,
663 init_data, promise.Pass()); 660 init_data, promise.Pass());
664 } 661 }
665 662
666 void BrowserCdmManager::LoadSessionIfPermitted( 663 void BrowserCdmManager::LoadSessionIfPermitted(
667 int render_frame_id, 664 int render_frame_id,
668 int cdm_id, 665 int cdm_id,
669 media::MediaKeys::SessionType session_type, 666 media::MediaKeys::SessionType session_type,
670 const std::string& session_id, 667 const std::string& session_id,
671 scoped_ptr<media::NewSessionCdmPromise> promise, 668 scoped_ptr<media::NewSessionCdmPromise> promise,
672 bool permission_was_allowed) { 669 bool permission_was_allowed) {
673 DCHECK_NE(media::MediaKeys::SessionType::TEMPORARY_SESSION, session_type); 670 DCHECK_NE(media::MediaKeys::SessionType::TEMPORARY_SESSION, session_type);
674 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 671 DCHECK(task_runner_->RunsTasksOnCurrentThread());
675 672
676 if (!permission_was_allowed) { 673 if (!permission_was_allowed) {
677 promise->reject(MediaKeys::NOT_SUPPORTED_ERROR, 0, "Permission denied."); 674 promise->reject(MediaKeys::NOT_SUPPORTED_ERROR, 0, "Permission denied.");
678 return; 675 return;
679 } 676 }
680 677
681 BrowserCdm* cdm = GetCdm(render_frame_id, cdm_id); 678 scoped_refptr<MediaKeys> cdm = GetCdm(render_frame_id, cdm_id);
682 if (!cdm) { 679 if (!cdm) {
683 promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found."); 680 promise->reject(MediaKeys::INVALID_STATE_ERROR, 0, "CDM not found.");
684 return; 681 return;
685 } 682 }
686 683
687 cdm->LoadSession(session_type, session_id, promise.Pass()); 684 cdm->LoadSession(session_type, session_id, promise.Pass());
688 } 685 }
689 686
690 } // namespace content 687 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/media/cdm/browser_cdm_manager.h ('k') | content/browser/media/media_web_contents_observer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698