Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(562)

Unified Diff: chrome/utility/media_galleries/ipc_data_source.cc

Issue 2667443002: Convert utility process ParseMediaMetadata blob reading IPC to mojo (Closed)
Patch Set: Remove the damn helper: call ReleaseProcessIfNeeded directly. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698