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

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

Issue 2290453005: service worker: Refactor blob reading out of ServiceWorkerURLRequestJob (Closed)
Patch Set: 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: content/browser/service_worker/service_worker_blob_reader.cc
diff --git a/content/browser/service_worker/service_worker_blob_reader.cc b/content/browser/service_worker/service_worker_blob_reader.cc
new file mode 100644
index 0000000000000000000000000000000000000000..527b2b2978676f3e23ce68299d7756dbee2a1534
--- /dev/null
+++ b/content/browser/service_worker/service_worker_blob_reader.cc
@@ -0,0 +1,86 @@
+// 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_blob_reader.h"
+
+#include <utility>
+
+#include "storage/browser/blob/blob_data_handle.h"
+#include "storage/browser/blob/blob_url_request_job_factory.h"
+
+namespace content {
+
+ServiceWorkerBlobReader::ServiceWorkerBlobReader(
+ ServiceWorkerURLRequestJob* owner)
+ : owner_(owner) {}
+
+ServiceWorkerBlobReader::~ServiceWorkerBlobReader() {}
+
+void ServiceWorkerBlobReader::Start(
+ std::unique_ptr<storage::BlobDataHandle> blob_data_handle,
+ const net::URLRequestContext* request_context) {
+ blob_request_ = storage::BlobProtocolHandler::CreateBlobRequest(
+ std::move(blob_data_handle), request_context, this);
+ blob_request_->Start();
+}
+
+void ServiceWorkerBlobReader::OnReceivedRedirect(
+ net::URLRequest* request,
+ const net::RedirectInfo& redirect_info,
+ bool* defer_redirect) {
+ NOTREACHED();
+}
+
+void ServiceWorkerBlobReader::OnAuthRequired(
+ net::URLRequest* request,
+ net::AuthChallengeInfo* auth_info) {
+ NOTREACHED();
+}
+
+void ServiceWorkerBlobReader::OnCertificateRequested(
+ net::URLRequest* request,
+ net::SSLCertRequestInfo* cert_request_info) {
+ NOTREACHED();
+}
+
+void ServiceWorkerBlobReader::OnSSLCertificateError(
+ net::URLRequest* request,
+ const net::SSLInfo& ssl_info,
+ bool fatal) {
+ NOTREACHED();
+}
+
+void ServiceWorkerBlobReader::OnResponseStarted(net::URLRequest* request) {
+ // TODO(falken): This should check request->status() per URLRequest::Delegate
+ // contract.
+ // TODO(falken): Add Content-Length, Content-Type if they were not provided in
+ // the ServiceWorkerResponse.
+ owner_->OnResponseStarted();
+}
+
+void ServiceWorkerBlobReader::OnReadCompleted(net::URLRequest* request,
+ int bytes_read) {
+ if (!request->status().is_success()) {
+ owner_->RecordResult(ServiceWorkerMetrics::REQUEST_JOB_ERROR_BLOB_READ);
+ } else if (bytes_read == 0) {
+ owner_->RecordResult(ServiceWorkerMetrics::REQUEST_JOB_BLOB_RESPONSE);
+ }
+ net::URLRequestStatus status = request->status();
+ owner_->OnReadRawDataComplete(status.is_success() ? bytes_read
+ : status.error());
+}
+
+int ServiceWorkerBlobReader::ReadRawData(net::IOBuffer* buf, int buf_size) {
+ int bytes_read = 0;
+ blob_request_->Read(buf, buf_size, &bytes_read);
+ net::URLRequestStatus status = blob_request_->status();
+ if (status.status() != net::URLRequestStatus::SUCCESS)
+ return status.error();
+ if (bytes_read == 0) {
+ owner_->RecordResult(ServiceWorkerMetrics::REQUEST_JOB_BLOB_RESPONSE);
+ }
+ return bytes_read;
+}
+
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698