Index: media/cdm/ppapi/cdm_file_io_impl.cc |
diff --git a/media/cdm/ppapi/cdm_file_io_impl.cc b/media/cdm/ppapi/cdm_file_io_impl.cc |
index 170799bdb9593cdc00666c04aaf5776ba8484741..c06531b6564835d94a2553dae6e9d68d0e8cd26b 100644 |
--- a/media/cdm/ppapi/cdm_file_io_impl.cc |
+++ b/media/cdm/ppapi/cdm_file_io_impl.cc |
@@ -56,12 +56,16 @@ CdmFileIOImpl::ResourceTracker::~ResourceTracker() { |
delete CdmFileIOImpl::file_lock_map_; |
} |
-CdmFileIOImpl::CdmFileIOImpl(cdm::FileIOClient* client, PP_Instance pp_instance) |
+CdmFileIOImpl::CdmFileIOImpl( |
+ cdm::FileIOClient* client, |
+ PP_Instance pp_instance, |
+ const pp::CompletionCallback& file_read_cb) |
: state_(FILE_UNOPENED), |
client_(client), |
pp_instance_handle_(pp_instance), |
callback_factory_(this), |
- io_offset_(0) { |
+ io_offset_(0), |
+ file_read_cb_(file_read_cb) { |
PP_DCHECK(IsMainThread()); |
PP_DCHECK(pp_instance); // 0 indicates a "NULL handle". |
} |
@@ -338,6 +342,11 @@ void CdmFileIOImpl::OnFileRead(int32_t bytes_read) { |
state_ = FILE_OPENED; |
const uint8_t* data = local_buffer.empty() ? |
NULL : reinterpret_cast<const uint8_t*>(&local_buffer[0]); |
+ |
+ // Call this before OnReadComplete() so that we always have the latest file |
+ // size before CDM fires errors. |
+ file_read_cb_.Run(local_buffer.size()); |
+ |
client_->OnReadComplete( |
cdm::FileIOClient::kSuccess, data, local_buffer.size()); |
} |