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

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

Issue 603913002: [ServiceWorker] Add was_fallback_required flag to ResourceResponseInfo. [2/2 chromium] (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: s/which/whose/ Created 6 years, 3 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_url_request_job.cc
diff --git a/content/browser/service_worker/service_worker_url_request_job.cc b/content/browser/service_worker/service_worker_url_request_job.cc
index 630075c48d738ec59dfa44f8b9f26fd4ac4abb93..191988461791f9989fb890ecf8a2624aff876aa2 100644
--- a/content/browser/service_worker/service_worker_url_request_job.cc
+++ b/content/browser/service_worker/service_worker_url_request_job.cc
@@ -43,6 +43,7 @@ ServiceWorkerURLRequestJob::ServiceWorkerURLRequestJob(
is_started_(false),
blob_storage_context_(blob_storage_context),
request_mode_(request_mode),
+ fall_back_required_(false),
body_(body),
weak_factory_(this) {
}
@@ -195,16 +196,19 @@ const net::HttpResponseInfo* ServiceWorkerURLRequestJob::http_info() const {
void ServiceWorkerURLRequestJob::GetExtraResponseInfo(
bool* was_fetched_via_service_worker,
+ bool* was_fallback_required_by_service_worker,
GURL* original_url_via_service_worker,
base::TimeTicks* fetch_start_time,
base::TimeTicks* fetch_ready_time,
base::TimeTicks* fetch_end_time) const {
if (response_type_ != FORWARD_TO_SERVICE_WORKER) {
*was_fetched_via_service_worker = false;
+ *was_fallback_required_by_service_worker = false;
*original_url_via_service_worker = GURL();
return;
}
*was_fetched_via_service_worker = true;
+ *was_fallback_required_by_service_worker = fall_back_required_;
*original_url_via_service_worker = response_url_;
*fetch_start_time = fetch_start_time_;
*fetch_ready_time = fetch_ready_time_;
@@ -373,6 +377,18 @@ void ServiceWorkerURLRequestJob::DidDispatchFetchEvent(
}
if (fetch_result == SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK) {
+ // When the request_mode is |CORS| or |CORS-with-forced-preflight| we can't
+ // simply fallback to the network in the browser process. It is because the
+ // CORS preflight logic is implemented in the renderer. So we returns a
+ // fall_back_required response to the renderer.
+ if (request_mode_ == FETCH_REQUEST_MODE_CORS ||
+ request_mode_ == FETCH_REQUEST_MODE_CORS_WITH_FORCED_PREFLIGHT) {
+ fall_back_required_ = true;
+ CreateResponseHeader(
+ 400, "Service Worker Fallback Required", ServiceWorkerHeaderMap());
+ CommitResponseHeader();
+ return;
+ }
// Change the response type and restart the request to fallback to
// the network.
response_type_ = FALLBACK_TO_NETWORK;
« no previous file with comments | « content/browser/service_worker/service_worker_url_request_job.h ('k') | content/child/web_url_loader_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698