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

Unified Diff: blimp/engine/mojo/blob_channel_service.cc

Issue 2256363003: Clean up thread handling in Blimp browser tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: wez feedback Created 4 years, 4 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: blimp/engine/mojo/blob_channel_service.cc
diff --git a/blimp/engine/mojo/blob_channel_service.cc b/blimp/engine/mojo/blob_channel_service.cc
index c6dab89c76000bf1a2b22d07fb163d58f01df43e..d3b93f70de125aeed64a460667c97e82f82cfed9 100644
--- a/blimp/engine/mojo/blob_channel_service.cc
+++ b/blimp/engine/mojo/blob_channel_service.cc
@@ -10,24 +10,57 @@
#include <vector>
#include "base/memory/ptr_util.h"
+#include "base/task_runner_util.h"
+#include "base/threading/thread.h"
#include "blimp/net/blob_channel/blob_channel_sender.h"
#include "mojo/public/cpp/system/buffer.h"
namespace blimp {
namespace engine {
+namespace {
-BlobChannelService::BlobChannelService(BlobChannelSender* blob_channel_sender)
- : blob_channel_sender_(blob_channel_sender) {
- DCHECK(blob_channel_sender_);
+std::vector<BlobChannelSender::CacheStateEntry>
+GetCachedBlobIdsFromWeakPtr(base::WeakPtr<BlobChannelSender> sender) {
+ if (sender) {
+ return sender->GetCachedBlobIds();
+ } else {
+ return std::vector<BlobChannelSender::CacheStateEntry>();
+ }
+}
+
+} // namespace
+
+BlobChannelService::BlobChannelService(
+ base::WeakPtr<BlobChannelSender> blob_channel_sender,
+ scoped_refptr<base::SingleThreadTaskRunner> blob_sender_task_runner)
+ : blob_channel_sender_(blob_channel_sender),
+ blob_sender_task_runner_(blob_sender_task_runner),
+ weak_factory_(this) {
+ DCHECK(blob_sender_task_runner_.get());
}
-BlobChannelService::~BlobChannelService() {}
+BlobChannelService::~BlobChannelService() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+}
void BlobChannelService::GetCachedBlobIds(
const BlobChannelService::GetCachedBlobIdsCallback& response_callback) {
+ DCHECK(thread_checker_.CalledOnValidThread());
VLOG(1) << "BlobChannel::GetCachedBlobIds called.";
+
+ // Pull the list of blob IDs from the UI thread.
+ base::PostTaskAndReplyWithResult(
+ blob_sender_task_runner_.get(), FROM_HERE,
+ base::Bind(&GetCachedBlobIdsFromWeakPtr, blob_channel_sender_),
+ base::Bind(&BlobChannelService::OnGetCachedBlobsCompleted,
+ weak_factory_.GetWeakPtr(), response_callback));
+}
+
+void BlobChannelService::OnGetCachedBlobsCompleted(
+ const BlobChannelService::GetCachedBlobIdsCallback& response_callback,
+ const std::vector<BlobChannelSender::CacheStateEntry>& ids) {
std::unordered_map<std::string, bool> cache_state;
- for (const auto& next_entry : blob_channel_sender_->GetCachedBlobIds()) {
+ for (const auto& next_entry : ids) {
cache_state[next_entry.id] = next_entry.was_delivered;
}
response_callback.Run(std::move(cache_state));
@@ -36,6 +69,8 @@ void BlobChannelService::GetCachedBlobIds(
void BlobChannelService::PutBlob(const std::string& id,
mojo::ScopedSharedBufferHandle data,
uint32_t size) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
// Map |data| into the address space and copy out its contents.
if (!data.is_valid()) {
LOG(ERROR) << "Invalid data handle received from renderer process.";
@@ -52,15 +87,27 @@ void BlobChannelService::PutBlob(const std::string& id,
scoped_refptr<BlobData> new_blob(new BlobData);
new_blob->data.assign(reinterpret_cast<const char*>(mapping.get()), size);
- blob_channel_sender_->PutBlob(id, std::move(new_blob));
+
+ blob_sender_task_runner_->PostTask(FROM_HERE,
+ base::Bind(&BlobChannelSender::PutBlob,
+ blob_channel_sender_,
+ id,
+ base::Passed(std::move(new_blob))));
}
void BlobChannelService::DeliverBlob(const std::string& id) {
- blob_channel_sender_->DeliverBlob(id);
+ DCHECK(thread_checker_.CalledOnValidThread());
+
+ blob_sender_task_runner_->PostTask(FROM_HERE,
+ base::Bind(&BlobChannelSender::DeliverBlob,
+ blob_channel_sender_,
+ id));
}
void BlobChannelService::BindRequest(
mojo::InterfaceRequest<mojom::BlobChannel> request) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
bindings_.AddBinding(this, std::move(request));
}
« no previous file with comments | « blimp/engine/mojo/blob_channel_service.h ('k') | blimp/engine/renderer/blob_channel_sender_proxy_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698