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

Unified Diff: media/cdm/ppapi/clear_key_cdm.cc

Issue 93243003: Add CDM FileIO tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: not to use base::MessageLoopProxy::current() Created 7 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/cdm/ppapi/clear_key_cdm.h ('k') | media/media_cdm.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/cdm/ppapi/clear_key_cdm.cc
diff --git a/media/cdm/ppapi/clear_key_cdm.cc b/media/cdm/ppapi/clear_key_cdm.cc
index 16a00a5ae6e9f7d7d80ab239985b54fdde0f9697..ea89e82cae9f1359c337b79b745a3f4e0172d9e2 100644
--- a/media/cdm/ppapi/clear_key_cdm.cc
+++ b/media/cdm/ppapi/clear_key_cdm.cc
@@ -15,6 +15,7 @@
#include "base/time/time.h"
#include "media/base/decoder_buffer.h"
#include "media/base/decrypt_config.h"
+#include "media/cdm/ppapi/cdm_file_io_test.h"
#include "media/cdm/ppapi/cdm_video_decoder.h"
#if defined(CLEAR_KEY_CDM_USE_FAKE_AUDIO_DECODER)
@@ -63,6 +64,8 @@ const char kClearKeyCdmVersion[] = "0.1.0.1";
const char kExternalClearKeyKeySystem[] = "org.chromium.externalclearkey";
const char kExternalClearKeyDecryptOnlyKeySystem[] =
"org.chromium.externalclearkey.decryptonly";
+const char kExternalClearKeyFileIOTestKeySystem[] =
+ "org.chromium.externalclearkey.fileiotest";
const int64 kSecondsPerMinute = 60;
const int64 kMsPerSecond = 1000;
const int64 kInitialTimerDelayMs = 200;
@@ -70,6 +73,8 @@ const int64 kMaxTimerDelayMs = 1 * kSecondsPerMinute * kMsPerSecond;
// Heart beat message header. If a key message starts with |kHeartBeatHeader|,
// it's a heart beat message. Otherwise, it's a key request.
const char kHeartBeatHeader[] = "HEARTBEAT";
+// CDM file IO test result header.
+const char kFileIOTestResultHeader[] = "FILEIOTESTRESULT";
// Copies |input_buffer| into a media::DecoderBuffer. If the |input_buffer| is
// empty, an empty (end-of-stream) media::DecoderBuffer is returned.
@@ -107,6 +112,12 @@ static scoped_refptr<media::DecoderBuffer> CopyDecoderBufferFrom(
return output_buffer;
}
+static std::string GetFileIOTestResultMessage(bool success) {
+ std::string message(kFileIOTestResultHeader);
+ message += success ? '1' : '0';
+ return message;
+}
+
template<typename Type>
class ScopedResetter {
public:
@@ -135,7 +146,8 @@ void* CreateCdmInstance(int cdm_interface_version,
std::string key_system_string(key_system, key_system_size);
if (key_system_string != kExternalClearKeyKeySystem &&
- key_system_string != kExternalClearKeyDecryptOnlyKeySystem) {
+ key_system_string != kExternalClearKeyDecryptOnlyKeySystem &&
+ key_system_string != kExternalClearKeyFileIOTestKeySystem) {
DVLOG(1) << "Unsupported key system:" << key_system_string;
return NULL;
}
@@ -149,7 +161,9 @@ void* CreateCdmInstance(int cdm_interface_version,
return NULL;
return new media::ClearKeyCdm(
- host, key_system_string == kExternalClearKeyDecryptOnlyKeySystem);
+ host,
+ key_system_string == kExternalClearKeyDecryptOnlyKeySystem,
+ key_system_string == kExternalClearKeyFileIOTestKeySystem);
}
const char* GetCdmVersion() {
@@ -158,7 +172,9 @@ const char* GetCdmVersion() {
namespace media {
-ClearKeyCdm::ClearKeyCdm(ClearKeyCdmHost* host, bool is_decrypt_only)
+ClearKeyCdm::ClearKeyCdm(ClearKeyCdmHost* host,
+ bool is_decrypt_only,
+ bool should_test_file_io)
: decryptor_(
base::Bind(&ClearKeyCdm::OnSessionCreated, base::Unretained(this)),
base::Bind(&ClearKeyCdm::OnSessionMessage, base::Unretained(this)),
@@ -167,7 +183,8 @@ ClearKeyCdm::ClearKeyCdm(ClearKeyCdmHost* host, bool is_decrypt_only)
base::Bind(&ClearKeyCdm::OnSessionError, base::Unretained(this))),
host_(host),
is_decrypt_only_(is_decrypt_only),
- heartbeat_session_id_(0),
+ should_test_file_io_(should_test_file_io),
+ last_session_id_(MediaKeys::kInvalidSessionId),
timer_delay_ms_(kInitialTimerDelayMs),
timer_set_(false) {
#if defined(CLEAR_KEY_CDM_USE_FAKE_AUDIO_DECODER)
@@ -190,8 +207,11 @@ void ClearKeyCdm::CreateSession(uint32 session_id,
decryptor_.CreateSession(
session_id, std::string(type, type_size), init_data, init_data_size);
- // Only save the latest session ID for heartbeat messages.
- heartbeat_session_id_ = session_id;
+ // Save the latest session ID for heartbeat and file IO test messages.
+ last_session_id_ = session_id;
+
+ if (should_test_file_io_)
+ StartFileIOTest();
}
void ClearKeyCdm::UpdateSession(uint32 session_id,
@@ -224,7 +244,7 @@ void ClearKeyCdm::TimerExpired(void* context) {
// There is no service at this URL, so applications should ignore it.
const char url[] = "http://test.externalclearkey.chromium.org";
- host_->OnSessionMessage(heartbeat_session_id_,
+ host_->OnSessionMessage(last_session_id_,
heartbeat_message.data(),
heartbeat_message.size(),
url,
@@ -556,4 +576,19 @@ cdm::Status ClearKeyCdm::GenerateFakeAudioFrames(
}
#endif // CLEAR_KEY_CDM_USE_FAKE_AUDIO_DECODER
+void ClearKeyCdm::StartFileIOTest() {
+ file_io_test_runner_.reset(new FileIOTestRunner(
+ base::Bind(&ClearKeyCdmHost::CreateFileIO, base::Unretained(host_))));
+ file_io_test_runner_->RunAllTests(
+ base::Bind(&ClearKeyCdm::OnFileIOTestComplete, base::Unretained(this)));
+}
+
+void ClearKeyCdm::OnFileIOTestComplete(bool success) {
+ DVLOG(1) << __FUNCTION__ << ": " << success;
+ std::string message = GetFileIOTestResultMessage(success);
+ host_->OnSessionMessage(
+ last_session_id_, message.data(), message.size(), NULL, 0);
+ file_io_test_runner_.reset();
+}
+
} // namespace media
« no previous file with comments | « media/cdm/ppapi/clear_key_cdm.h ('k') | media/media_cdm.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698