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

Unified Diff: content/browser/service_worker/service_worker_stream_reader.cc

Issue 2703343002: ServiceWorker: Use mojo's data pipe for respondWith(stream) (Closed)
Patch Set: Addressed comments from kinuko and haraken Created 3 years, 8 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: content/browser/service_worker/service_worker_stream_reader.cc
diff --git a/content/browser/service_worker/service_worker_stream_reader.cc b/content/browser/service_worker/service_worker_stream_reader.cc
deleted file mode 100644
index 062fe770b697bca552544f706e17973099672712..0000000000000000000000000000000000000000
--- a/content/browser/service_worker/service_worker_stream_reader.cc
+++ /dev/null
@@ -1,136 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/browser/service_worker/service_worker_stream_reader.h"
-
-#include "content/browser/resource_context_impl.h"
-#include "content/browser/service_worker/service_worker_version.h"
-#include "content/browser/streams/stream.h"
-#include "content/browser/streams/stream_context.h"
-#include "content/browser/streams/stream_registry.h"
-#include "net/base/io_buffer.h"
-
-namespace content {
-
-ServiceWorkerStreamReader::ServiceWorkerStreamReader(
- ServiceWorkerURLRequestJob* owner,
- scoped_refptr<ServiceWorkerVersion> streaming_version)
- : owner_(owner),
- stream_pending_buffer_size_(0),
- streaming_version_(streaming_version) {
- streaming_version_->AddStreamingURLRequestJob(owner_);
-}
-
-ServiceWorkerStreamReader::~ServiceWorkerStreamReader() {
- if (streaming_version_) {
- streaming_version_->RemoveStreamingURLRequestJob(owner_);
- streaming_version_ = nullptr;
- }
- if (stream_) {
- stream_->RemoveReadObserver(this);
- stream_->Abort();
- stream_ = nullptr;
- }
- if (!waiting_stream_url_.is_empty()) {
- StreamRegistry* stream_registry =
- GetStreamContextForResourceContext(owner_->resource_context())
- ->registry();
- stream_registry->RemoveRegisterObserver(waiting_stream_url_);
- stream_registry->AbortPendingStream(waiting_stream_url_);
- }
-}
-
-void ServiceWorkerStreamReader::Start(const GURL& stream_url) {
- DCHECK(!stream_);
- DCHECK(waiting_stream_url_.is_empty());
-
- StreamContext* stream_context =
- GetStreamContextForResourceContext(owner_->resource_context());
- stream_ = stream_context->registry()->GetStream(stream_url);
- if (!stream_) {
- waiting_stream_url_ = stream_url;
- // Wait for StreamHostMsg_StartBuilding message from the ServiceWorker.
- stream_context->registry()->SetRegisterObserver(waiting_stream_url_, this);
- return;
- }
- stream_->SetReadObserver(this);
- owner_->OnResponseStarted();
-}
-
-int ServiceWorkerStreamReader::ReadRawData(net::IOBuffer* buf, int buf_size) {
- DCHECK(stream_);
- DCHECK(waiting_stream_url_.is_empty());
-
- int bytes_read = 0;
- switch (stream_->ReadRawData(buf, buf_size, &bytes_read)) {
- case Stream::STREAM_HAS_DATA:
- DCHECK_GT(bytes_read, 0);
- return bytes_read;
- case Stream::STREAM_COMPLETE:
- DCHECK_EQ(0, bytes_read);
- owner_->RecordResult(ServiceWorkerMetrics::REQUEST_JOB_STREAM_RESPONSE);
- return 0;
- case Stream::STREAM_EMPTY:
- stream_pending_buffer_ = buf;
- stream_pending_buffer_size_ = buf_size;
- return net::ERR_IO_PENDING;
- case Stream::STREAM_ABORTED:
- // Handle this as connection reset.
- owner_->RecordResult(
- ServiceWorkerMetrics::REQUEST_JOB_ERROR_STREAM_ABORTED);
- return net::ERR_CONNECTION_RESET;
- }
- NOTREACHED();
- return net::ERR_FAILED;
-}
-
-void ServiceWorkerStreamReader::OnDataAvailable(Stream* stream) {
- // Do nothing if stream_pending_buffer_ is empty, i.e. there's no ReadRawData
- // operation waiting for IO completion.
- if (!stream_pending_buffer_)
- return;
-
- // stream_pending_buffer_ is set to the IOBuffer instance provided to
- // ReadRawData() by URLRequestJob.
-
- int result = 0;
- switch (stream_->ReadRawData(stream_pending_buffer_.get(),
- stream_pending_buffer_size_, &result)) {
- case Stream::STREAM_HAS_DATA:
- DCHECK_GT(result, 0);
- break;
- case Stream::STREAM_COMPLETE:
- // Calling NotifyReadComplete with 0 signals completion.
- DCHECK(!result);
- owner_->RecordResult(ServiceWorkerMetrics::REQUEST_JOB_STREAM_RESPONSE);
- break;
- case Stream::STREAM_EMPTY:
- NOTREACHED();
- break;
- case Stream::STREAM_ABORTED:
- // Handle this as connection reset.
- result = net::ERR_CONNECTION_RESET;
- owner_->RecordResult(
- ServiceWorkerMetrics::REQUEST_JOB_ERROR_STREAM_ABORTED);
- break;
- }
-
- // Clear the buffers before notifying the read is complete, so that it is
- // safe for the observer to read.
- stream_pending_buffer_ = nullptr;
- stream_pending_buffer_size_ = 0;
- owner_->OnReadRawDataComplete(result);
-}
-
-void ServiceWorkerStreamReader::OnStreamRegistered(Stream* stream) {
- StreamContext* stream_context =
- GetStreamContextForResourceContext(owner_->resource_context());
- stream_context->registry()->RemoveRegisterObserver(waiting_stream_url_);
- waiting_stream_url_ = GURL();
- stream_ = stream;
- stream_->SetReadObserver(this);
- owner_->OnResponseStarted();
-}
-
-} // namespace content

Powered by Google App Engine
This is Rietveld 408576698