Chromium Code Reviews| Index: chrome/utility/media_galleries/ipc_data_source.cc |
| diff --git a/chrome/utility/media_galleries/ipc_data_source.cc b/chrome/utility/media_galleries/ipc_data_source.cc |
| index 63e09c449ee7dca35e4bd223ac09f4a54b3de14f..2801d217ab73ce27ddecbbf476fa3db1884e9f85 100644 |
| --- a/chrome/utility/media_galleries/ipc_data_source.cc |
| +++ b/chrome/utility/media_galleries/ipc_data_source.cc |
| @@ -5,13 +5,15 @@ |
| #include "chrome/utility/media_galleries/ipc_data_source.h" |
| #include "base/threading/thread_task_runner_handle.h" |
| -#include "chrome/common/extensions/chrome_utility_extensions_messages.h" |
| #include "content/public/utility/utility_thread.h" |
| namespace metadata { |
| -IPCDataSource::IPCDataSource(int64_t total_size) |
| - : total_size_(total_size), |
| +IPCDataSource::IPCDataSource( |
| + extensions::mojom::MediaDataSourcePtr media_data_source, |
| + int64_t total_size) |
| + : media_data_source_(std::move(media_data_source)), |
|
Sam McNally
2017/02/03 22:14:16
It's probably worth crashing if |media_data_source
Noel Gordon
2017/02/05 23:45:03
Ok, added a Crash() helper which calls IMMEDIATE_C
|
| + total_size_(total_size), |
| utility_task_runner_(base::ThreadTaskRunnerHandle::Get()), |
| next_request_id_(0) { |
| data_source_thread_checker_.DetachFromThread(); |
| @@ -34,10 +36,10 @@ void IPCDataSource::Read(int64_t position, |
| uint8_t* data, |
| const DataSource::ReadCB& read_cb) { |
| DCHECK(data_source_thread_checker_.CalledOnValidThread()); |
| + |
| utility_task_runner_->PostTask( |
| - FROM_HERE, |
| - base::Bind(&IPCDataSource::ReadOnUtilityThread, base::Unretained(this), |
| - position, size, data, read_cb)); |
| + FROM_HERE, base::Bind(&IPCDataSource::ReadBlob, base::Unretained(this), |
| + position, size, data, read_cb)); |
| } |
| bool IPCDataSource::GetSize(int64_t* size_out) { |
| @@ -55,30 +57,18 @@ void IPCDataSource::SetBitrate(int bitrate) { |
| DCHECK(data_source_thread_checker_.CalledOnValidThread()); |
| } |
| -bool IPCDataSource::OnMessageReceived(const IPC::Message& message) { |
| - DCHECK(utility_thread_checker_.CalledOnValidThread()); |
| - bool handled = true; |
| - IPC_BEGIN_MESSAGE_MAP(IPCDataSource, message) |
| - IPC_MESSAGE_HANDLER(ChromeUtilityMsg_RequestBlobBytes_Finished, |
| - OnRequestBlobBytesFinished) |
| - IPC_MESSAGE_UNHANDLED(handled = false) |
| - IPC_END_MESSAGE_MAP() |
| - return handled; |
| -} |
| - |
| -IPCDataSource::Request::Request() |
| - : destination(NULL) { |
| -} |
| - |
| -IPCDataSource::Request::Request(const Request& other) = default; |
| - |
| -IPCDataSource::Request::~Request() { |
| -} |
| - |
| -void IPCDataSource::ReadOnUtilityThread(int64_t position, |
| - int size, |
| - uint8_t* data, |
| - const DataSource::ReadCB& read_cb) { |
| +struct IPCDataSource::Request { |
|
Sam McNally
2017/02/03 22:14:16
Bind |destination| and |callback| into the mojo ca
Noel Gordon
2017/02/05 23:45:03
Removed the map, and curried destination and the r
|
| + Request() : destination(nullptr) {} |
| + Request(const Request& other) = default; |
| + ~Request() = default; |
| + uint8_t* destination; |
| + ReadCB callback; |
| +}; |
| + |
| +void IPCDataSource::ReadBlob(int64_t position, |
| + int size, |
| + uint8_t* data, |
| + const DataSource::ReadCB& read_cb) { |
| DCHECK(utility_thread_checker_.CalledOnValidThread()); |
| CHECK_GE(total_size_, 0); |
| CHECK_GE(position, 0); |
| @@ -96,22 +86,24 @@ void IPCDataSource::ReadOnUtilityThread(int64_t position, |
| request.callback = read_cb; |
| pending_requests_[request_id] = request; |
| - content::UtilityThread::Get()->Send(new ChromeUtilityHostMsg_RequestBlobBytes( |
| - request_id, position, clamped_size)); |
| + |
| + media_data_source_->ReadBlob( |
| + request_id, position, clamped_size, |
| + base::Bind(&IPCDataSource::ReadDone, base::Unretained(this))); |
| } |
| -void IPCDataSource::OnRequestBlobBytesFinished(int64_t request_id, |
| - const std::string& bytes) { |
| +void IPCDataSource::ReadDone(int64_t request_id, |
| + const std::vector<uint8_t>& data) { |
| DCHECK(utility_thread_checker_.CalledOnValidThread()); |
| - std::map<int64_t, Request>::iterator it = pending_requests_.find(request_id); |
| - if (it == pending_requests_.end()) |
| + auto request = pending_requests_.find(request_id); |
| + if (request == pending_requests_.end()) |
| return; |
| - std::copy(bytes.begin(), bytes.end(), it->second.destination); |
| - it->second.callback.Run(bytes.size()); |
| + std::copy(data.begin(), data.end(), request->second.destination); |
| + request->second.callback.Run(data.size()); |
| - pending_requests_.erase(it); |
| + pending_requests_.erase(request); |
| } |
| } // namespace metadata |