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 3fc10e18960ac7f3493098081886ed6937662443..29218f4798ce913652d87635161ef32e860c1802 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) |
@@ -70,6 +71,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 +110,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: |
@@ -249,14 +258,18 @@ cdm::Status ClearKeyCdm::GenerateKeyRequest(const char* type, |
return cdm::kSessionError; |
} |
+ std::string session_id = client_.session_id(); |
+ |
host_->SendKeyMessage( |
- client_.session_id().data(), client_.session_id().size(), |
+ session_id.data(), 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_.session_id(); |
+ // Save the latest session ID for heartbeat and file IO test messages. |
+ last_session_id_ = client_.session_id(); |
+ |
+ StartCdmFileIOTest(); |
return cdm::kSuccess; |
} |
@@ -321,7 +334,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 +634,19 @@ cdm::Status ClearKeyCdm::GenerateFakeAudioFrames( |
} |
#endif // CLEAR_KEY_CDM_USE_FAKE_AUDIO_DECODER |
+void ClearKeyCdm::StartCdmFileIOTest() { |
+ cdm_file_io_test_.reset(new CdmFileIOTest(host_)); |
ddorwin
2013/12/11 21:16:17
Doh. I'm the one that asked you to encapsulate Fil
xhwang
2013/12/13 02:51:47
Now I pass in a callback for CreateFileIO. But I d
|
+ cdm_file_io_test_->Run( |
+ 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 |