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

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: comments addressed; adds more tests; fixes impl 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
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 6d3a68ce5ace11d71d1d10b1ba8343e957cd2d17..ef777191e3f9f16c1e914e203c7ef3972463648b 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() {
@@ -207,7 +221,9 @@ void ClearKeyCdm::Client::OnSessionError(uint32 session_id,
system_code_ = system_code;
}
-ClearKeyCdm::ClearKeyCdm(ClearKeyCdmHost* host, bool is_decrypt_only)
+ClearKeyCdm::ClearKeyCdm(ClearKeyCdmHost* host,
+ bool is_decrypt_only,
+ bool test_file_io)
: decryptor_(
base::Bind(&Client::OnSessionCreated, base::Unretained(&client_)),
base::Bind(&Client::OnSessionMessage, base::Unretained(&client_)),
@@ -216,6 +232,7 @@ ClearKeyCdm::ClearKeyCdm(ClearKeyCdmHost* host, bool is_decrypt_only)
base::Bind(&Client::OnSessionError, base::Unretained(&client_))),
host_(host),
is_decrypt_only_(is_decrypt_only),
+ test_file_io_(test_file_io),
timer_delay_ms_(kInitialTimerDelayMs),
timer_set_(false) {
#if defined(CLEAR_KEY_CDM_USE_FAKE_AUDIO_DECODER)
@@ -249,14 +266,19 @@ cdm::Status ClearKeyCdm::GenerateKeyRequest(const char* type,
return cdm::kSessionError;
}
+ std::string web_session_id = client_.web_session_id();
+
host_->SendKeyMessage(
- client_.web_session_id().data(), client_.web_session_id().size(),
+ web_session_id.data(), web_session_id.size(),
reinterpret_cast<const char*>(&client_.message()[0]),
client_.message().size(),
client_.destination_url().data(), client_.destination_url().size());
- // Only save the latest session ID for heartbeat messages.
- heartbeat_session_id_ = client_.web_session_id();
+ // Save the latest session ID for heartbeat and file IO test messages.
+ last_session_id_ = web_session_id;
+
+ if (test_file_io_)
+ StartFileIOTest();
return cdm::kSuccess;
}
@@ -321,7 +343,7 @@ void ClearKeyCdm::TimerExpired(void* context) {
const char url[] = "http://test.externalclearkey.chromium.org";
host_->SendKeyMessage(
- heartbeat_session_id_.data(), heartbeat_session_id_.size(),
+ last_session_id_.data(), last_session_id_.size(),
heartbeat_message.data(), heartbeat_message.size(),
url, arraysize(url) - 1);
@@ -621,4 +643,20 @@ cdm::Status ClearKeyCdm::GenerateFakeAudioFrames(
}
#endif // CLEAR_KEY_CDM_USE_FAKE_AUDIO_DECODER
+void ClearKeyCdm::StartFileIOTest() {
+ cdm_file_io_test_.reset(new FileIOTestRunner(
+ base::Bind(&ClearKeyCdmHost::CreateFileIO, base::Unretained(host_))));
+ cdm_file_io_test_->RunAllTests(
+ base::Bind(&ClearKeyCdm::OnFileIOTestComplete, base::Unretained(this)));
+}
+
+void ClearKeyCdm::OnFileIOTestComplete(bool success) {
+ DVLOG(1) << __FUNCTION__ << ": " << success;
+ std::string message = GetFileIOTestResultMessage(success);
+ host_->SendKeyMessage(last_session_id_.data(), last_session_id_.size(),
+ message.data(), message.size(),
+ NULL, 0);
+ cdm_file_io_test_.reset();
+}
+
} // namespace media

Powered by Google App Engine
This is Rietveld 408576698