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

Side by Side Diff: media/cdm/ppapi/external_clear_key/clear_key_cdm.cc

Issue 2831963003: EME: Allow temporary sessions to be removed for ClearKey only. (Closed)
Patch Set: rebase Created 3 years, 8 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 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 "media/cdm/ppapi/external_clear_key/clear_key_cdm.h" 5 #include "media/cdm/ppapi/external_clear_key/clear_key_cdm.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cstring> 8 #include <cstring>
9 #include <sstream> 9 #include <sstream>
10 #include <utility> 10 #include <utility>
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 323
324 namespace media { 324 namespace media {
325 325
326 ClearKeyCdm::ClearKeyCdm(ClearKeyCdmHost* host, 326 ClearKeyCdm::ClearKeyCdm(ClearKeyCdmHost* host,
327 const std::string& key_system, 327 const std::string& key_system,
328 const GURL& origin) 328 const GURL& origin)
329 : decryptor_(new AesDecryptor( 329 : decryptor_(new AesDecryptor(
330 origin, 330 origin,
331 base::Bind(&ClearKeyCdm::OnSessionMessage, base::Unretained(this)), 331 base::Bind(&ClearKeyCdm::OnSessionMessage, base::Unretained(this)),
332 base::Bind(&ClearKeyCdm::OnSessionClosed, base::Unretained(this)), 332 base::Bind(&ClearKeyCdm::OnSessionClosed, base::Unretained(this)),
333 base::Bind(&ClearKeyCdm::OnSessionKeysChange, 333 base::Bind(&ClearKeyCdm::OnSessionKeysChange, base::Unretained(this)),
334 base::Bind(&ClearKeyCdm::OnSessionExpirationUpdate,
334 base::Unretained(this)))), 335 base::Unretained(this)))),
335 host_(host), 336 host_(host),
336 key_system_(key_system), 337 key_system_(key_system),
337 has_received_keys_change_event_for_emulated_loadsession_(false), 338 has_received_keys_change_event_for_emulated_loadsession_(false),
338 timer_delay_ms_(kInitialTimerDelayMs), 339 timer_delay_ms_(kInitialTimerDelayMs),
339 renewal_timer_set_(false), 340 renewal_timer_set_(false),
340 is_running_output_protection_test_(false), 341 is_running_output_protection_test_(false),
341 is_running_platform_verification_test_(false) { 342 is_running_platform_verification_test_(false) {
342 #if defined(CLEAR_KEY_CDM_USE_FAKE_AUDIO_DECODER) 343 #if defined(CLEAR_KEY_CDM_USE_FAKE_AUDIO_DECODER)
343 channel_count_ = 0; 344 channel_count_ = 0;
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 decryptor_->CloseSession(web_session_str, std::move(promise)); 483 decryptor_->CloseSession(web_session_str, std::move(promise));
483 } 484 }
484 485
485 void ClearKeyCdm::RemoveSession(uint32_t promise_id, 486 void ClearKeyCdm::RemoveSession(uint32_t promise_id,
486 const char* session_id, 487 const char* session_id,
487 uint32_t session_id_length) { 488 uint32_t session_id_length) {
488 DVLOG(1) << __func__; 489 DVLOG(1) << __func__;
489 std::string web_session_str(session_id, session_id_length); 490 std::string web_session_str(session_id, session_id_length);
490 491
491 // RemoveSession only allowed for the loadable session. 492 // RemoveSession only allowed for the loadable session.
492 if (web_session_str == std::string(kLoadableSessionId)) { 493 if (web_session_str == std::string(kLoadableSessionId))
493 web_session_str = session_id_for_emulated_loadsession_; 494 web_session_str = session_id_for_emulated_loadsession_;
494 } else {
495 // TODO(jrummell): This should be a DCHECK once blink does the proper
496 // checks.
497 std::string message("Not supported for non-persistent sessions.");
498 host_->OnRejectPromise(promise_id,
499 cdm::kInvalidAccessError,
500 0,
501 message.data(),
502 message.length());
503 return;
504 }
505 495
506 std::unique_ptr<media::SimpleCdmPromise> promise( 496 std::unique_ptr<media::SimpleCdmPromise> promise(
507 new media::CdmCallbackPromise<>( 497 new media::CdmCallbackPromise<>(
508 base::Bind(&ClearKeyCdm::OnPromiseResolved, base::Unretained(this), 498 base::Bind(&ClearKeyCdm::OnPromiseResolved, base::Unretained(this),
509 promise_id), 499 promise_id),
510 base::Bind(&ClearKeyCdm::OnPromiseFailed, base::Unretained(this), 500 base::Bind(&ClearKeyCdm::OnPromiseFailed, base::Unretained(this),
511 promise_id))); 501 promise_id)));
512 decryptor_->RemoveSession(web_session_str, std::move(promise)); 502 decryptor_->RemoveSession(web_session_str, std::move(promise));
513 } 503 }
514 504
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
885 keys_vector.size()); 875 keys_vector.size());
886 } 876 }
887 877
888 void ClearKeyCdm::OnSessionClosed(const std::string& session_id) { 878 void ClearKeyCdm::OnSessionClosed(const std::string& session_id) {
889 std::string new_session_id = session_id; 879 std::string new_session_id = session_id;
890 if (new_session_id == session_id_for_emulated_loadsession_) 880 if (new_session_id == session_id_for_emulated_loadsession_)
891 new_session_id = std::string(kLoadableSessionId); 881 new_session_id = std::string(kLoadableSessionId);
892 host_->OnSessionClosed(new_session_id.data(), new_session_id.length()); 882 host_->OnSessionClosed(new_session_id.data(), new_session_id.length());
893 } 883 }
894 884
885 void ClearKeyCdm::OnSessionExpirationUpdate(const std::string& session_id,
886 base::Time new_expiry_time) {
887 std::string new_session_id = session_id;
888 if (new_session_id == session_id_for_emulated_loadsession_)
889 new_session_id = std::string(kLoadableSessionId);
890 host_->OnExpirationChange(new_session_id.data(), new_session_id.length(),
891 new_expiry_time.ToDoubleT());
892 }
893
895 void ClearKeyCdm::OnSessionCreated(uint32_t promise_id, 894 void ClearKeyCdm::OnSessionCreated(uint32_t promise_id,
896 const std::string& session_id) { 895 const std::string& session_id) {
897 // Save the latest session ID for renewal and file IO test messages. 896 // Save the latest session ID for renewal and file IO test messages.
898 last_session_id_ = session_id; 897 last_session_id_ = session_id;
899 898
900 host_->OnResolveNewSessionPromise(promise_id, session_id.data(), 899 host_->OnResolveNewSessionPromise(promise_id, session_id.data(),
901 session_id.length()); 900 session_id.length());
902 } 901 }
903 902
904 void ClearKeyCdm::OnSessionLoaded(uint32_t promise_id, 903 void ClearKeyCdm::OnSessionLoaded(uint32_t promise_id,
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1065 challenge.data(), challenge.size()); 1064 challenge.data(), challenge.size());
1066 } 1065 }
1067 1066
1068 void ClearKeyCdm::VerifyCdmHostTest() { 1067 void ClearKeyCdm::VerifyCdmHostTest() {
1069 // VerifyCdmHost() should have already been called and test result stored 1068 // VerifyCdmHost() should have already been called and test result stored
1070 // in |g_verify_host_files_result|. 1069 // in |g_verify_host_files_result|.
1071 OnUnitTestComplete(g_verify_host_files_result); 1070 OnUnitTestComplete(g_verify_host_files_result);
1072 } 1071 }
1073 1072
1074 } // namespace media 1073 } // namespace media
OLDNEW
« no previous file with comments | « media/cdm/ppapi/external_clear_key/clear_key_cdm.h ('k') | media/mojo/clients/mojo_cdm_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698