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

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

Issue 2267283002: media: Separate renewal from default External Clear Key test (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 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
« no previous file with comments | « chrome/renderer/media/chrome_key_systems.cc ('k') | media/test/data/eme_player.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 static bool g_ffmpeg_lib_initialized = InitializeFFmpegLibraries(); 55 static bool g_ffmpeg_lib_initialized = InitializeFFmpegLibraries();
56 56
57 #endif // CLEAR_KEY_CDM_USE_FFMPEG_DECODER 57 #endif // CLEAR_KEY_CDM_USE_FFMPEG_DECODER
58 58
59 const char kClearKeyCdmVersion[] = "0.1.0.1"; 59 const char kClearKeyCdmVersion[] = "0.1.0.1";
60 const char kExternalClearKeyKeySystem[] = "org.chromium.externalclearkey"; 60 const char kExternalClearKeyKeySystem[] = "org.chromium.externalclearkey";
61 61
62 // Variants of External Clear Key key system to test different scenarios. 62 // Variants of External Clear Key key system to test different scenarios.
63 const char kExternalClearKeyDecryptOnlyKeySystem[] = 63 const char kExternalClearKeyDecryptOnlyKeySystem[] =
64 "org.chromium.externalclearkey.decryptonly"; 64 "org.chromium.externalclearkey.decryptonly";
65 const char kExternalClearKeyRenewalKeySystem[] =
66 "org.chromium.externalclearkey.renewal";
65 const char kExternalClearKeyFileIOTestKeySystem[] = 67 const char kExternalClearKeyFileIOTestKeySystem[] =
66 "org.chromium.externalclearkey.fileiotest"; 68 "org.chromium.externalclearkey.fileiotest";
67 const char kExternalClearKeyOutputProtectionTestKeySystem[] = 69 const char kExternalClearKeyOutputProtectionTestKeySystem[] =
68 "org.chromium.externalclearkey.outputprotectiontest"; 70 "org.chromium.externalclearkey.outputprotectiontest";
69 const char kExternalClearKeyCrashKeySystem[] = 71 const char kExternalClearKeyCrashKeySystem[] =
70 "org.chromium.externalclearkey.crash"; 72 "org.chromium.externalclearkey.crash";
71 73
72 // Constants for the enumalted session that can be loaded by LoadSession(). 74 // Constants for the enumalted session that can be loaded by LoadSession().
73 // These constants need to be in sync with 75 // These constants need to be in sync with
74 // chrome/test/data/media/encrypted_media_utils.js 76 // chrome/test/data/media/encrypted_media_utils.js
75 const char kLoadableSessionId[] = "LoadableSession"; 77 const char kLoadableSessionId[] = "LoadableSession";
76 const uint8_t kLoadableSessionKeyId[] = "0123456789012345"; 78 const uint8_t kLoadableSessionKeyId[] = "0123456789012345";
77 const uint8_t kLoadableSessionKey[] = {0xeb, 0xdd, 0x62, 0xf1, 0x68, 0x14, 79 const uint8_t kLoadableSessionKey[] = {0xeb, 0xdd, 0x62, 0xf1, 0x68, 0x14,
78 0xd2, 0x7b, 0x68, 0xef, 0x12, 0x2a, 80 0xd2, 0x7b, 0x68, 0xef, 0x12, 0x2a,
79 0xfc, 0xe4, 0xae, 0x3c}; 81 0xfc, 0xe4, 0xae, 0x3c};
80 82
81 const int64_t kSecondsPerMinute = 60; 83 const int64_t kSecondsPerMinute = 60;
82 const int64_t kMsPerSecond = 1000; 84 const int64_t kMsPerSecond = 1000;
83 const int64_t kInitialTimerDelayMs = 200; 85 const int64_t kInitialTimerDelayMs = 200;
84 const int64_t kMaxTimerDelayMs = 1 * kSecondsPerMinute * kMsPerSecond; 86 const int64_t kMaxTimerDelayMs = 1 * kSecondsPerMinute * kMsPerSecond;
85 // Renewal message header. For prefixed EME, if a key message starts with
86 // |kRenewalHeader|, it's a renewal message. Otherwise, it's a key request.
87 // FIXME(jrummell): Remove this once prefixed EME goes away.
88 const char kRenewalHeader[] = "RENEWAL";
89 87
90 // CDM unit test result header. Must be in sync with UNIT_TEST_RESULT_HEADER in 88 // CDM unit test result header. Must be in sync with UNIT_TEST_RESULT_HEADER in
91 // media/test/data/eme_player_js/globals.js. 89 // media/test/data/eme_player_js/globals.js.
92 const char kUnitTestResultHeader[] = "UNIT_TEST_RESULT"; 90 const char kUnitTestResultHeader[] = "UNIT_TEST_RESULT";
93 91
94 // Copies |input_buffer| into a media::DecoderBuffer. If the |input_buffer| is 92 // Copies |input_buffer| into a media::DecoderBuffer. If the |input_buffer| is
95 // empty, an empty (end-of-stream) media::DecoderBuffer is returned. 93 // empty, an empty (end-of-stream) media::DecoderBuffer is returned.
96 static scoped_refptr<media::DecoderBuffer> CopyDecoderBufferFrom( 94 static scoped_refptr<media::DecoderBuffer> CopyDecoderBufferFrom(
97 const cdm::InputBuffer& input_buffer) { 95 const cdm::InputBuffer& input_buffer) {
98 if (!input_buffer.data) { 96 if (!input_buffer.data) {
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 228
231 void* CreateCdmInstance(int cdm_interface_version, 229 void* CreateCdmInstance(int cdm_interface_version,
232 const char* key_system, uint32_t key_system_size, 230 const char* key_system, uint32_t key_system_size,
233 GetCdmHostFunc get_cdm_host_func, 231 GetCdmHostFunc get_cdm_host_func,
234 void* user_data) { 232 void* user_data) {
235 DVLOG(1) << "CreateCdmInstance()"; 233 DVLOG(1) << "CreateCdmInstance()";
236 234
237 std::string key_system_string(key_system, key_system_size); 235 std::string key_system_string(key_system, key_system_size);
238 if (key_system_string != kExternalClearKeyKeySystem && 236 if (key_system_string != kExternalClearKeyKeySystem &&
239 key_system_string != kExternalClearKeyDecryptOnlyKeySystem && 237 key_system_string != kExternalClearKeyDecryptOnlyKeySystem &&
238 key_system_string != kExternalClearKeyRenewalKeySystem &&
240 key_system_string != kExternalClearKeyFileIOTestKeySystem && 239 key_system_string != kExternalClearKeyFileIOTestKeySystem &&
241 key_system_string != kExternalClearKeyOutputProtectionTestKeySystem && 240 key_system_string != kExternalClearKeyOutputProtectionTestKeySystem &&
242 key_system_string != kExternalClearKeyCrashKeySystem) { 241 key_system_string != kExternalClearKeyCrashKeySystem) {
243 DVLOG(1) << "Unsupported key system:" << key_system_string; 242 DVLOG(1) << "Unsupported key system:" << key_system_string;
244 return NULL; 243 return NULL;
245 } 244 }
246 245
247 if (cdm_interface_version != media::ClearKeyCdmInterface::kVersion) 246 if (cdm_interface_version != media::ClearKeyCdmInterface::kVersion)
248 return NULL; 247 return NULL;
249 248
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 std::unique_ptr<media::SimpleCdmPromise> promise( 370 std::unique_ptr<media::SimpleCdmPromise> promise(
372 new media::CdmCallbackPromise<>( 371 new media::CdmCallbackPromise<>(
373 base::Bind(&ClearKeyCdm::OnPromiseResolved, base::Unretained(this), 372 base::Bind(&ClearKeyCdm::OnPromiseResolved, base::Unretained(this),
374 promise_id), 373 promise_id),
375 base::Bind(&ClearKeyCdm::OnPromiseFailed, base::Unretained(this), 374 base::Bind(&ClearKeyCdm::OnPromiseFailed, base::Unretained(this),
376 promise_id))); 375 promise_id)));
377 decryptor_->UpdateSession( 376 decryptor_->UpdateSession(
378 web_session_str, std::vector<uint8_t>(response, response + response_size), 377 web_session_str, std::vector<uint8_t>(response, response + response_size),
379 std::move(promise)); 378 std::move(promise));
380 379
381 if (!renewal_timer_set_) { 380 if (key_system_ == kExternalClearKeyRenewalKeySystem && !renewal_timer_set_) {
382 ScheduleNextRenewal(); 381 ScheduleNextRenewal();
383 renewal_timer_set_ = true; 382 renewal_timer_set_ = true;
384 } 383 }
385 } 384 }
386 385
387 void ClearKeyCdm::CloseSession(uint32_t promise_id, 386 void ClearKeyCdm::CloseSession(uint32_t promise_id,
388 const char* session_id, 387 const char* session_id,
389 uint32_t session_id_length) { 388 uint32_t session_id_length) {
390 DVLOG(1) << __FUNCTION__; 389 DVLOG(1) << __FUNCTION__;
391 std::string web_session_str(session_id, session_id_length); 390 std::string web_session_str(session_id, session_id_length);
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 } 651 }
653 652
654 void ClearKeyCdm::Destroy() { 653 void ClearKeyCdm::Destroy() {
655 DVLOG(1) << "Destroy()"; 654 DVLOG(1) << "Destroy()";
656 delete this; 655 delete this;
657 } 656 }
658 657
659 void ClearKeyCdm::ScheduleNextRenewal() { 658 void ClearKeyCdm::ScheduleNextRenewal() {
660 // Prepare the next renewal message and set timer. 659 // Prepare the next renewal message and set timer.
661 std::ostringstream msg_stream; 660 std::ostringstream msg_stream;
662 msg_stream << kRenewalHeader << " from ClearKey CDM set at time " 661 msg_stream << "Renewal from ClearKey CDM set at time "
663 << host_->GetCurrentWallTime() << "."; 662 << host_->GetCurrentWallTime() << ".";
664 next_renewal_message_ = msg_stream.str(); 663 next_renewal_message_ = msg_stream.str();
665 664
666 host_->SetTimer(timer_delay_ms_, &next_renewal_message_[0]); 665 host_->SetTimer(timer_delay_ms_, &next_renewal_message_[0]);
667 666
668 // Use a smaller timer delay at start-up to facilitate testing. Increase the 667 // Use a smaller timer delay at start-up to facilitate testing. Increase the
669 // timer delay up to a limit to avoid message spam. 668 // timer delay up to a limit to avoid message spam.
670 if (timer_delay_ms_ < kMaxTimerDelayMs) 669 if (timer_delay_ms_ < kMaxTimerDelayMs)
671 timer_delay_ms_ = std::min(2 * timer_delay_ms_, kMaxTimerDelayMs); 670 timer_delay_ms_ = std::min(2 * timer_delay_ms_, kMaxTimerDelayMs);
672 } 671 }
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 OnUnitTestComplete(success); 955 OnUnitTestComplete(success);
957 file_io_test_runner_.reset(); 956 file_io_test_runner_.reset();
958 } 957 }
959 958
960 void ClearKeyCdm::StartOutputProtectionTest() { 959 void ClearKeyCdm::StartOutputProtectionTest() {
961 is_running_output_protection_test_ = true; 960 is_running_output_protection_test_ = true;
962 host_->QueryOutputProtectionStatus(); 961 host_->QueryOutputProtectionStatus();
963 } 962 }
964 963
965 } // namespace media 964 } // namespace media
OLDNEW
« no previous file with comments | « chrome/renderer/media/chrome_key_systems.cc ('k') | media/test/data/eme_player.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698