Chromium Code Reviews| 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 3728eff905543c169e6792eaca1f8886a0d656bb..0e75e74833ac92057b3b51d354748266268167b7 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) |
| @@ -68,6 +69,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 kCdmFileIOTestResultHeader[] = "CDMFILEIOTESTRESULT"; |
| // Copies |input_buffer| into a media::DecoderBuffer. If the |input_buffer| is |
| // empty, an empty (end-of-stream) media::DecoderBuffer is returned. |
| @@ -105,6 +108,12 @@ static scoped_refptr<media::DecoderBuffer> CopyDecoderBufferFrom( |
| return output_buffer; |
| } |
| +std::string GetCdmFileIOTestResultMessage(bool success) { |
| + std::string message(kCdmFileIOTestResultHeader); |
| + message += success ? '1' : '0'; |
| + return message; |
| +} |
| + |
| template<typename Type> |
| class ScopedResetter { |
| public: |
| @@ -237,14 +246,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_.key_message()[0]), |
| client_.key_message().size(), |
| client_.default_url().data(), client_.default_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; |
| } |
| @@ -310,7 +323,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); |
| @@ -604,4 +617,28 @@ cdm::Status ClearKeyCdm::GenerateFakeAudioFrames( |
| } |
| #endif // CLEAR_KEY_CDM_USE_FAKE_AUDIO_DECODER |
| +void ClearKeyCdm::StartCdmFileIOTest() { |
| + cdm_file_io_test_.reset(new CdmFileIOTest()); |
| + |
| + cdm::CdmFileIO* cdm_file_io = host_->GetCdmFileIO(cdm_file_io_test_.get()); |
|
ddorwin
2013/12/04 05:27:08
Could/should we encapsulate this in the test file
xhwang
2013/12/10 01:24:25
Done.
|
| + if (!cdm_file_io) { |
| + DVLOG(1) << "Cannot get CDM File IO interface"; |
| + OnCdmFileIOTestComplete(false); |
| + return; |
| + } |
| + |
| + cdm_file_io_test_->Run(cdm_file_io, |
| + base::Bind(&ClearKeyCdm::OnCdmFileIOTestComplete, |
| + base::Unretained(this))); |
| +} |
| + |
| +void ClearKeyCdm::OnCdmFileIOTestComplete(bool success) { |
| + DVLOG(1) << __FUNCTION__ << ": " << success; |
| + std::string message = GetCdmFileIOTestResultMessage(success); |
| + host_->SendKeyMessage(last_session_id_.data(), last_session_id_.size(), |
| + message.data(), message.size(), |
| + NULL, 0); |
| + cdm_file_io_test_.reset(); |
| +} |
| + |
| } // namespace media |