| Index: media/cdm/ppapi/external_clear_key/clear_key_cdm.cc
 | 
| diff --git a/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc b/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc
 | 
| index 4820555fdaba1d18ea61d0822c495218786d4f62..54efa56f07d1e6f9fa0b34c086b85c0f4cfbb217 100644
 | 
| --- a/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc
 | 
| +++ b/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc
 | 
| @@ -10,6 +10,7 @@
 | 
|  #include <utility>
 | 
|  
 | 
|  #include "base/bind.h"
 | 
| +#include "base/files/file.h"
 | 
|  #include "base/logging.h"
 | 
|  #include "base/macros.h"
 | 
|  #include "base/time/time.h"
 | 
| @@ -18,6 +19,7 @@
 | 
|  #include "media/base/cdm_key_information.h"
 | 
|  #include "media/base/decoder_buffer.h"
 | 
|  #include "media/base/decrypt_config.h"
 | 
| +#include "media/cdm/api/content_decryption_module_ext.h"
 | 
|  #include "media/cdm/json_web_key.h"
 | 
|  #include "media/cdm/ppapi/cdm_file_io_test.h"
 | 
|  #include "media/cdm/ppapi/external_clear_key/cdm_video_decoder.h"
 | 
| @@ -64,6 +66,8 @@ const char kExternalClearKeyPlatformVerificationTestKeySystem[] =
 | 
|      "org.chromium.externalclearkey.platformverificationtest";
 | 
|  const char kExternalClearKeyCrashKeySystem[] =
 | 
|      "org.chromium.externalclearkey.crash";
 | 
| +const char kExternalClearKeyVerifyCdmHostTestKeySystem[] =
 | 
| +    "org.chromium.externalclearkey.verifycdmhosttest";
 | 
|  
 | 
|  // Constants for the enumalted session that can be loaded by LoadSession().
 | 
|  // These constants need to be in sync with
 | 
| @@ -234,7 +238,8 @@ void* CreateCdmInstance(int cdm_interface_version,
 | 
|        key_system_string != kExternalClearKeyFileIOTestKeySystem &&
 | 
|        key_system_string != kExternalClearKeyOutputProtectionTestKeySystem &&
 | 
|        key_system_string != kExternalClearKeyPlatformVerificationTestKeySystem &&
 | 
| -      key_system_string != kExternalClearKeyCrashKeySystem) {
 | 
| +      key_system_string != kExternalClearKeyCrashKeySystem &&
 | 
| +      key_system_string != kExternalClearKeyVerifyCdmHostTestKeySystem) {
 | 
|      DVLOG(1) << "Unsupported key system:" << key_system_string;
 | 
|      return NULL;
 | 
|    }
 | 
| @@ -256,6 +261,42 @@ const char* GetCdmVersion() {
 | 
|    return kClearKeyCdmVersion;
 | 
|  }
 | 
|  
 | 
| +static bool g_verify_host_files_result = false;
 | 
| +
 | 
| +// Makes sure files and corresponding signature files are readable but not
 | 
| +// writable.
 | 
| +bool VerifyCdmHost_0(const cdm::HostFile* host_files, uint32_t num_files) {
 | 
| +  DVLOG(1) << __func__;
 | 
| +
 | 
| +  // We should always have the CDM and CDM adapter.
 | 
| +  // We might not have any common CDM host file (e.g. chrome) since we are
 | 
| +  // running in browser_tests.
 | 
| +  if (num_files < 2) {
 | 
| +    LOG(ERROR) << "Too few host files: " << num_files;
 | 
| +    g_verify_host_files_result = false;
 | 
| +    return true;
 | 
| +  }
 | 
| +
 | 
| +  for (uint32_t i = 0; i < num_files; ++i) {
 | 
| +    const int kBytesToRead = 10;
 | 
| +    std::vector<char> buffer(kBytesToRead);
 | 
| +
 | 
| +    base::File file(static_cast<base::PlatformFile>(host_files[i].file));
 | 
| +    int bytes_read = file.Read(0, buffer.data(), buffer.size());
 | 
| +    if (bytes_read != kBytesToRead) {
 | 
| +      LOG(ERROR) << "File bytes read: " << bytes_read;
 | 
| +      g_verify_host_files_result = false;
 | 
| +      return true;
 | 
| +    }
 | 
| +
 | 
| +    // TODO(xhwang): Check that the files are not writable.
 | 
| +    // TODO(xhwang): Also verify the signature file when it's available.
 | 
| +  }
 | 
| +
 | 
| +  g_verify_host_files_result = true;
 | 
| +  return true;
 | 
| +}
 | 
| +
 | 
|  namespace media {
 | 
|  
 | 
|  ClearKeyCdm::ClearKeyCdm(ClearKeyCdmHost* host,
 | 
| @@ -317,6 +358,8 @@ void ClearKeyCdm::CreateSessionAndGenerateRequest(
 | 
|    } else if (key_system_ ==
 | 
|               kExternalClearKeyPlatformVerificationTestKeySystem) {
 | 
|      StartPlatformVerificationTest();
 | 
| +  } else if (key_system_ == kExternalClearKeyVerifyCdmHostTestKeySystem) {
 | 
| +    VerifyCdmHostTest();
 | 
|    }
 | 
|  }
 | 
|  
 | 
| @@ -982,4 +1025,10 @@ void ClearKeyCdm::StartPlatformVerificationTest() {
 | 
|                                 challenge.data(), challenge.size());
 | 
|  }
 | 
|  
 | 
| +void ClearKeyCdm::VerifyCdmHostTest() {
 | 
| +  // VerifyCdmHost() should have already been called and test result stored
 | 
| +  // in |g_verify_host_files_result|.
 | 
| +  OnUnitTestComplete(g_verify_host_files_result);
 | 
| +}
 | 
| +
 | 
|  }  // namespace media
 | 
| 
 |