Commit 06b39212 authored by Ben Kelly's avatar Ben Kelly Committed by Commit Bot

Remove WebDataConsumerHandle usage from DataPipeAndDataBytesConsumer.

As a step towards removing WebDataConsumerHandle stop using the type in
DataPipeAndDataBytesConsumer.  Instead this code can instead use
DataPipeBytesConsumer to read the mojo::DataPipe.

Bug: 894819
Change-Id: Ie9cad46dfa9d67998d23bf0efd6300870428f3cb
Reviewed-on: https://chromium-review.googlesource.com/c/1313389Reviewed-by: default avatarYutaka Hirano <yhirano@chromium.org>
Commit-Queue: Ben Kelly <wanderview@chromium.org>
Cr-Commit-Position: refs/heads/master@{#605689}
parent 3811952f
...@@ -143,6 +143,7 @@ void DataPipeBytesConsumer::ClearClient() { ...@@ -143,6 +143,7 @@ void DataPipeBytesConsumer::ClearClient() {
void DataPipeBytesConsumer::Cancel() { void DataPipeBytesConsumer::Cancel() {
DCHECK(!is_in_two_phase_read_); DCHECK(!is_in_two_phase_read_);
ClearClient();
ClearDataPipe(); ClearDataPipe();
SignalComplete(); SignalComplete();
} }
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
#include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/fetch/blob_bytes_consumer.h" #include "third_party/blink/renderer/core/fetch/blob_bytes_consumer.h"
#include "third_party/blink/renderer/core/fetch/bytes_consumer_for_data_consumer_handle.h" #include "third_party/blink/renderer/core/fetch/data_pipe_bytes_consumer.h"
#include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h" #include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h"
#include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer_view.h" #include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer_view.h"
#include "third_party/blink/renderer/platform/blob/blob_data.h" #include "third_party/blink/renderer/platform/blob/blob_data.h"
...@@ -199,11 +199,12 @@ class DataPipeAndDataBytesConsumer final : public BytesConsumer { ...@@ -199,11 +199,12 @@ class DataPipeAndDataBytesConsumer final : public BytesConsumer {
std::move(pipe_producer_handle), std::move(pipe_producer_handle),
WTF::Bind(&DataPipeAndDataBytesConsumer::DataPipeGetterCallback, WTF::Bind(&DataPipeAndDataBytesConsumer::DataPipeGetterCallback,
WrapWeakPersistent(this))); WrapWeakPersistent(this)));
std::unique_ptr<WebDataConsumerHandle> consumer_handle = DataPipeBytesConsumer::CompletionNotifier* completion_notifier =
Platform::Current()->CreateDataConsumerHandle( nullptr;
std::move(pipe_consumer_handle)); data_pipe_consumer_ = new DataPipeBytesConsumer(
data_pipe_consumer_ = new BytesConsumerForDataConsumerHandle( execution_context_, std::move(pipe_consumer_handle),
execution_context_, std::move(consumer_handle)); &completion_notifier);
completion_notifier_ = completion_notifier;
if (client_) if (client_)
data_pipe_consumer_->SetClient(client_); data_pipe_consumer_->SetClient(client_);
} }
...@@ -224,6 +225,7 @@ class DataPipeAndDataBytesConsumer final : public BytesConsumer { ...@@ -224,6 +225,7 @@ class DataPipeAndDataBytesConsumer final : public BytesConsumer {
// We're done. Move on to the next element. // We're done. Move on to the next element.
was_data_pipe_getter_callback_called_ = false; was_data_pipe_getter_callback_called_ = false;
data_pipe_consumer_ = nullptr; data_pipe_consumer_ = nullptr;
completion_notifier_ = nullptr;
++iter_; ++iter_;
return BeginRead(buffer, available); return BeginRead(buffer, available);
} }
...@@ -321,6 +323,7 @@ class DataPipeAndDataBytesConsumer final : public BytesConsumer { ...@@ -321,6 +323,7 @@ class DataPipeAndDataBytesConsumer final : public BytesConsumer {
visitor->Trace(client_); visitor->Trace(client_);
visitor->Trace(simple_consumer_); visitor->Trace(simple_consumer_);
visitor->Trace(data_pipe_consumer_); visitor->Trace(data_pipe_consumer_);
visitor->Trace(completion_notifier_);
BytesConsumer::Trace(visitor); BytesConsumer::Trace(visitor);
} }
...@@ -328,19 +331,28 @@ class DataPipeAndDataBytesConsumer final : public BytesConsumer { ...@@ -328,19 +331,28 @@ class DataPipeAndDataBytesConsumer final : public BytesConsumer {
void DataPipeGetterCallback(int32_t status, uint64_t size) { void DataPipeGetterCallback(int32_t status, uint64_t size) {
switch (state_) { switch (state_) {
case PublicState::kErrored: case PublicState::kErrored:
// The error should have already been propagated to the notifier.
DCHECK(!completion_notifier_);
DCHECK(!data_pipe_consumer_);
return; return;
case PublicState::kClosed: case PublicState::kClosed:
// The data_pipe_consumer_ should already be cleaned up.
DCHECK(!completion_notifier_);
DCHECK(!data_pipe_consumer_);
return; return;
case PublicState::kReadableOrWaiting: case PublicState::kReadableOrWaiting:
break; break;
} }
DCHECK(data_pipe_consumer_); DCHECK(completion_notifier_);
auto client = client_; auto client = client_;
if (status != 0) // 0 is net::OK. if (status != 0) {
// 0 is net::OK.
SetError(); SetError();
else } else {
was_data_pipe_getter_callback_called_ = true; was_data_pipe_getter_callback_called_ = true;
completion_notifier_->SignalComplete();
}
if (client) if (client)
client->OnStateChange(); client->OnStateChange();
...@@ -353,7 +365,11 @@ class DataPipeAndDataBytesConsumer final : public BytesConsumer { ...@@ -353,7 +365,11 @@ class DataPipeAndDataBytesConsumer final : public BytesConsumer {
state_ = PublicState::kClosed; state_ = PublicState::kClosed;
ClearClient(); ClearClient();
simple_consumer_ = nullptr; simple_consumer_ = nullptr;
data_pipe_consumer_ = nullptr; if (data_pipe_consumer_) {
data_pipe_consumer_->Cancel();
data_pipe_consumer_ = nullptr;
completion_notifier_ = nullptr;
}
} }
void SetError() { void SetError() {
...@@ -364,7 +380,11 @@ class DataPipeAndDataBytesConsumer final : public BytesConsumer { ...@@ -364,7 +380,11 @@ class DataPipeAndDataBytesConsumer final : public BytesConsumer {
error_ = Error("error"); error_ = Error("error");
ClearClient(); ClearClient();
simple_consumer_ = nullptr; simple_consumer_ = nullptr;
data_pipe_consumer_ = nullptr; if (completion_notifier_) {
completion_notifier_->SignalError(error_);
completion_notifier_ = nullptr;
data_pipe_consumer_ = nullptr;
}
} }
Member<ExecutionContext> execution_context_; Member<ExecutionContext> execution_context_;
...@@ -374,7 +394,8 @@ class DataPipeAndDataBytesConsumer final : public BytesConsumer { ...@@ -374,7 +394,8 @@ class DataPipeAndDataBytesConsumer final : public BytesConsumer {
Error error_; Error error_;
Member<BytesConsumer::Client> client_; Member<BytesConsumer::Client> client_;
Member<SimpleFormDataBytesConsumer> simple_consumer_; Member<SimpleFormDataBytesConsumer> simple_consumer_;
Member<BytesConsumerForDataConsumerHandle> data_pipe_consumer_; Member<DataPipeBytesConsumer> data_pipe_consumer_;
Member<DataPipeBytesConsumer::CompletionNotifier> completion_notifier_;
bool was_data_pipe_getter_callback_called_ = false; bool was_data_pipe_getter_callback_called_ = false;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment