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

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

Issue 845313004: Service Worker: Improve error messages from register(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: git-cl format Created 5 years, 11 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_write_to_cache_job.cc
diff --git a/content/browser/service_worker/service_worker_write_to_cache_job.cc b/content/browser/service_worker/service_worker_write_to_cache_job.cc
index 0445ad0418e0028fe7447df4d8c624adf4325f38..dcf828df235e25f7eaf69ab91d1fdd5bf76b50e1 100644
--- a/content/browser/service_worker/service_worker_write_to_cache_job.cc
+++ b/content/browser/service_worker/service_worker_write_to_cache_job.cc
@@ -6,9 +6,12 @@
#include "base/debug/trace_event.h"
#include "base/profiler/scoped_tracker.h"
+#include "base/strings/stringprintf.h"
+#include "base/strings/stringprintf.h"
#include "content/browser/service_worker/service_worker_context_core.h"
#include "content/browser/service_worker/service_worker_disk_cache.h"
#include "content/browser/service_worker/service_worker_metrics.h"
+#include "content/common/service_worker/service_worker_types.h"
#include "net/base/io_buffer.h"
#include "net/base/net_errors.h"
#include "net/http/http_network_session.h"
@@ -21,6 +24,21 @@
namespace content {
+namespace {
+
+const char kKilledError[] = "The request to fetch the script was interrupted.";
+const char kBadHTTPResponseError[] =
+ "A bad HTTP response code (%d) was received when fetching the script.";
+const char kSSLError[] =
+ "An SSL certificate error occurred when fetching the script.";
+const char kBadMIMEError[] = "The script has an unsupported MIME type ('%s').";
+const char kNoMIMEError[] = "The script does not have a MIME type.";
+const char kClientAuthenticationError[] =
+ "Client authentication was required to fetch the script.";
+const char kRedirectError[] =
+ "The script resource is behind a redirect, which is disallowed.";
+}
+
ServiceWorkerWriteToCacheJob::ServiceWorkerWriteToCacheJob(
net::URLRequest* request,
net::NetworkDelegate* network_delegate,
@@ -70,9 +88,9 @@ void ServiceWorkerWriteToCacheJob::Kill() {
net_request_.reset();
if (did_notify_started_ && !did_notify_finished_) {
version_->script_cache_map()->NotifyFinishedCaching(
- url_,
- -1,
- net::URLRequestStatus(net::URLRequestStatus::FAILED, net::ERR_ABORTED));
+ url_, -1,
+ net::URLRequestStatus(net::URLRequestStatus::FAILED, net::ERR_ABORTED),
+ kKilledError);
did_notify_finished_ = true;
}
writer_.reset();
@@ -137,7 +155,7 @@ bool ServiceWorkerWriteToCacheJob::ReadRawData(
// No more data to process, the job is complete.
io_buffer_ = NULL;
version_->script_cache_map()->NotifyFinishedCaching(
- url_, writer_->amount_written(), status);
+ url_, writer_->amount_written(), status, std::string());
did_notify_finished_ = true;
return status.is_success();
}
@@ -204,8 +222,9 @@ net::URLRequestStatus ServiceWorkerWriteToCacheJob::ReadNetData(
void ServiceWorkerWriteToCacheJob::WriteHeadersToCache() {
if (!context_) {
- AsyncNotifyDoneHelper(net::URLRequestStatus(
- net::URLRequestStatus::FAILED, net::ERR_FAILED));
+ AsyncNotifyDoneHelper(
+ net::URLRequestStatus(net::URLRequestStatus::FAILED, net::ERR_FAILED),
+ kFetchScriptError);
return;
}
TRACE_EVENT_ASYNC_STEP_INTO0("ServiceWorker",
@@ -227,8 +246,9 @@ void ServiceWorkerWriteToCacheJob::OnWriteHeadersComplete(int result) {
if (result < 0) {
ServiceWorkerMetrics::CountWriteResponseResult(
ServiceWorkerMetrics::WRITE_HEADERS_ERROR);
- AsyncNotifyDoneHelper(net::URLRequestStatus(
- net::URLRequestStatus::FAILED, result));
+ AsyncNotifyDoneHelper(
+ net::URLRequestStatus(net::URLRequestStatus::FAILED, result),
+ kFetchScriptError);
return;
}
http_info_.reset(info_buffer_->http_info.release());
@@ -259,15 +279,17 @@ void ServiceWorkerWriteToCacheJob::OnWriteDataComplete(int result) {
DCHECK_NE(0, result);
io_buffer_ = NULL;
if (!context_) {
- AsyncNotifyDoneHelper(net::URLRequestStatus(
- net::URLRequestStatus::FAILED, net::ERR_FAILED));
+ AsyncNotifyDoneHelper(
+ net::URLRequestStatus(net::URLRequestStatus::FAILED, net::ERR_FAILED),
+ kFetchScriptError);
return;
}
if (result < 0) {
ServiceWorkerMetrics::CountWriteResponseResult(
ServiceWorkerMetrics::WRITE_DATA_ERROR);
- AsyncNotifyDoneHelper(net::URLRequestStatus(
- net::URLRequestStatus::FAILED, result));
+ AsyncNotifyDoneHelper(
+ net::URLRequestStatus(net::URLRequestStatus::FAILED, result),
+ kFetchScriptError);
return;
}
ServiceWorkerMetrics::CountWriteResponseResult(
@@ -287,8 +309,9 @@ void ServiceWorkerWriteToCacheJob::OnReceivedRedirect(
TRACE_EVENT0("ServiceWorker",
"ServiceWorkerWriteToCacheJob::OnReceivedRedirect");
// Script resources can't redirect.
- AsyncNotifyDoneHelper(net::URLRequestStatus(
- net::URLRequestStatus::FAILED, net::ERR_UNSAFE_REDIRECT));
+ AsyncNotifyDoneHelper(net::URLRequestStatus(net::URLRequestStatus::FAILED,
+ net::ERR_UNSAFE_REDIRECT),
+ kRedirectError);
}
void ServiceWorkerWriteToCacheJob::OnAuthRequired(
@@ -298,8 +321,9 @@ void ServiceWorkerWriteToCacheJob::OnAuthRequired(
TRACE_EVENT0("ServiceWorker",
"ServiceWorkerWriteToCacheJob::OnAuthRequired");
// TODO(michaeln): Pass this thru to our jobs client.
- AsyncNotifyDoneHelper(net::URLRequestStatus(
- net::URLRequestStatus::FAILED, net::ERR_FAILED));
+ AsyncNotifyDoneHelper(
+ net::URLRequestStatus(net::URLRequestStatus::FAILED, net::ERR_FAILED),
+ kClientAuthenticationError);
}
void ServiceWorkerWriteToCacheJob::OnCertificateRequested(
@@ -310,8 +334,9 @@ void ServiceWorkerWriteToCacheJob::OnCertificateRequested(
"ServiceWorkerWriteToCacheJob::OnCertificateRequested");
// TODO(michaeln): Pass this thru to our jobs client.
// see NotifyCertificateRequested.
- AsyncNotifyDoneHelper(net::URLRequestStatus(
- net::URLRequestStatus::FAILED, net::ERR_FAILED));
+ AsyncNotifyDoneHelper(
+ net::URLRequestStatus(net::URLRequestStatus::FAILED, net::ERR_FAILED),
+ kClientAuthenticationError);
}
void ServiceWorkerWriteToCacheJob::OnSSLCertificateError(
@@ -323,8 +348,9 @@ void ServiceWorkerWriteToCacheJob::OnSSLCertificateError(
"ServiceWorkerWriteToCacheJob::OnSSLCertificateError");
// TODO(michaeln): Pass this thru to our jobs client,
// see NotifySSLCertificateError.
- AsyncNotifyDoneHelper(net::URLRequestStatus(
- net::URLRequestStatus::FAILED, net::ERR_INSECURE_RESPONSE));
+ AsyncNotifyDoneHelper(net::URLRequestStatus(net::URLRequestStatus::FAILED,
+ net::ERR_INSECURE_RESPONSE),
+ kSSLError);
}
void ServiceWorkerWriteToCacheJob::OnBeforeNetworkStart(
@@ -345,12 +371,15 @@ void ServiceWorkerWriteToCacheJob::OnResponseStarted(
DCHECK_EQ(net_request_, request);
if (!request->status().is_success()) {
- AsyncNotifyDoneHelper(request->status());
+ AsyncNotifyDoneHelper(request->status(), kFetchScriptError);
return;
}
if (request->GetResponseCode() / 100 != 2) {
- AsyncNotifyDoneHelper(net::URLRequestStatus(
- net::URLRequestStatus::FAILED, net::ERR_FAILED));
+ std::string error_message =
+ base::StringPrintf(kBadHTTPResponseError, request->GetResponseCode());
+ AsyncNotifyDoneHelper(net::URLRequestStatus(net::URLRequestStatus::FAILED,
+ net::ERR_INVALID_RESPONSE),
+ error_message);
// TODO(michaeln): Instead of error'ing immediately, send the net
// response to our consumer, just don't cache it?
return;
@@ -362,7 +391,8 @@ void ServiceWorkerWriteToCacheJob::OnResponseStarted(
request->context()->GetNetworkSessionParams();
if (!session_params || !session_params->ignore_certificate_errors) {
AsyncNotifyDoneHelper(net::URLRequestStatus(net::URLRequestStatus::FAILED,
- net::ERR_INSECURE_RESPONSE));
+ net::ERR_INSECURE_RESPONSE),
+ kSSLError);
return;
}
}
@@ -373,8 +403,13 @@ void ServiceWorkerWriteToCacheJob::OnResponseStarted(
if (mime_type != "application/x-javascript" &&
mime_type != "text/javascript" &&
mime_type != "application/javascript") {
- AsyncNotifyDoneHelper(net::URLRequestStatus(
- net::URLRequestStatus::FAILED, net::ERR_INSECURE_RESPONSE));
+ std::string error_message =
+ mime_type.empty()
+ ? kNoMIMEError
+ : base::StringPrintf(kBadMIMEError, mime_type.c_str());
+ AsyncNotifyDoneHelper(net::URLRequestStatus(net::URLRequestStatus::FAILED,
+ net::ERR_INSECURE_RESPONSE),
+ error_message);
return;
}
}
@@ -392,7 +427,7 @@ void ServiceWorkerWriteToCacheJob::OnReadCompleted(
DCHECK_EQ(net_request_, request);
if (bytes_read < 0) {
DCHECK(!request->status().is_success());
- AsyncNotifyDoneHelper(request->status());
+ AsyncNotifyDoneHelper(request->status(), kFetchScriptError);
return;
}
if (bytes_read > 0) {
@@ -403,21 +438,23 @@ void ServiceWorkerWriteToCacheJob::OnReadCompleted(
DCHECK(request->status().is_success());
io_buffer_ = NULL;
version_->script_cache_map()->NotifyFinishedCaching(
- url_, writer_->amount_written(), net::URLRequestStatus());
+ url_, writer_->amount_written(), net::URLRequestStatus(), std::string());
did_notify_finished_ = true;
SetStatus(net::URLRequestStatus()); // Clear the IO_PENDING status
NotifyReadComplete(0);
}
void ServiceWorkerWriteToCacheJob::AsyncNotifyDoneHelper(
- const net::URLRequestStatus& status) {
+ const net::URLRequestStatus& status,
+ const std::string& status_message) {
DCHECK(!status.is_io_pending());
DCHECK(!did_notify_finished_);
int size = -1;
if (writer_.get()) {
size = writer_->amount_written();
}
- version_->script_cache_map()->NotifyFinishedCaching(url_, size, status);
+ version_->script_cache_map()->NotifyFinishedCaching(url_, size, status,
+ status_message);
did_notify_finished_ = true;
SetStatus(status);
NotifyDone(status);

Powered by Google App Engine
This is Rietveld 408576698