| Index: content/child/shared_memory_data_consumer_handle.cc
|
| diff --git a/content/child/shared_memory_data_consumer_handle.cc b/content/child/shared_memory_data_consumer_handle.cc
|
| index 3c9b7a26ff8e65e81374fbc3a9524c8323ac5d96..1c99859556ed3c1bd263f3fcac9d8f92c9e796f1 100644
|
| --- a/content/child/shared_memory_data_consumer_handle.cc
|
| +++ b/content/child/shared_memory_data_consumer_handle.cc
|
| @@ -15,6 +15,7 @@
|
| #include "base/single_thread_task_runner.h"
|
| #include "base/synchronization/lock.h"
|
| #include "base/threading/thread_task_runner_handle.h"
|
| +#include "components/scheduler/child/web_task_runner_impl.h"
|
| #include "content/public/child/fixed_received_data.h"
|
|
|
| namespace content {
|
| @@ -115,11 +116,13 @@ class SharedMemoryDataConsumerHandle::Context final
|
| lock_.AssertAcquired();
|
| result_ = r;
|
| }
|
| - void AcquireReaderLock(Client* client) {
|
| + void AcquireReaderLock(
|
| + Client* client,
|
| + scoped_refptr<base::SingleThreadTaskRunner> notification_task_runner) {
|
| lock_.AssertAcquired();
|
| DCHECK(!notification_task_runner_);
|
| DCHECK(!client_);
|
| - notification_task_runner_ = base::ThreadTaskRunnerHandle::Get();
|
| + notification_task_runner_ = std::move(notification_task_runner);
|
| client_ = client;
|
| if (client && !(IsEmpty() && result() == Ok)) {
|
| // We cannot notify synchronously because the user doesn't have the reader
|
| @@ -362,11 +365,12 @@ void SharedMemoryDataConsumerHandle::Writer::Fail() {
|
|
|
| SharedMemoryDataConsumerHandle::ReaderImpl::ReaderImpl(
|
| scoped_refptr<Context> context,
|
| - Client* client)
|
| + Client* client,
|
| + scoped_refptr<base::SingleThreadTaskRunner> reader_task_runner)
|
| : context_(context) {
|
| base::AutoLock lock(context_->lock());
|
| DCHECK(!context_->is_handle_locked());
|
| - context_->AcquireReaderLock(client);
|
| + context_->AcquireReaderLock(client, std::move(reader_task_runner));
|
| }
|
|
|
| SharedMemoryDataConsumerHandle::ReaderImpl::~ReaderImpl() {
|
| @@ -473,8 +477,19 @@ SharedMemoryDataConsumerHandle::~SharedMemoryDataConsumerHandle() {
|
| }
|
|
|
| std::unique_ptr<blink::WebDataConsumerHandle::Reader>
|
| -SharedMemoryDataConsumerHandle::obtainReader(Client* client) {
|
| - return base::WrapUnique(new ReaderImpl(context_, client));
|
| +SharedMemoryDataConsumerHandle::obtainReader(
|
| + Client* client,
|
| + std::unique_ptr<blink::WebTaskRunner> reader_task_runner) {
|
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner;
|
| + if (reader_task_runner) {
|
| + task_runner =
|
| + scheduler::WebTaskRunnerImpl::GetBaseTaskRunner(*reader_task_runner);
|
| + } else {
|
| + task_runner = base::ThreadTaskRunnerHandle::Get();
|
| + }
|
| +
|
| + return base::WrapUnique(new ReaderImpl(context_, client,
|
| + std::move(task_runner)));
|
| }
|
|
|
| const char* SharedMemoryDataConsumerHandle::debugName() const {
|
|
|