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

Side by Side Diff: content/browser/service_worker/service_worker_fetch_dispatcher.cc

Issue 2790433003: Support redirect responses for NavigationPreload (Closed)
Patch Set: incorporated falken's comment 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/service_worker/service_worker_fetch_dispatcher.h" 5 #include "content/browser/service_worker/service_worker_fetch_dispatcher.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 url_(request.url) { 125 url_(request.url) {
126 AddDevToolsCallback( 126 AddDevToolsCallback(
127 base::Bind(&NotifyNavigationPreloadRequestSentOnUI, request)); 127 base::Bind(&NotifyNavigationPreloadRequestSentOnUI, request));
128 } 128 }
129 ~DelegatingURLLoaderClient() override { 129 ~DelegatingURLLoaderClient() override {
130 if (!completed_) { 130 if (!completed_) {
131 // Let the service worker know that the request has been canceled. 131 // Let the service worker know that the request has been canceled.
132 ResourceRequestCompletionStatus status; 132 ResourceRequestCompletionStatus status;
133 status.error_code = net::ERR_ABORTED; 133 status.error_code = net::ERR_ABORTED;
134 client_->OnComplete(status); 134 client_->OnComplete(status);
135 AddDevToolsCallback(
136 base::Bind(&NotifyNavigationPreloadCompletedOnUI, status));
135 } 137 }
136 } 138 }
137 139
138 void MayBeReportToDevTools(WorkerId worker_id, int fetch_event_id) { 140 void MayBeReportToDevTools(WorkerId worker_id, int fetch_event_id) {
139 worker_id_ = worker_id; 141 worker_id_ = worker_id;
140 devtools_request_id_ = base::StringPrintf("preload-%d", fetch_event_id); 142 devtools_request_id_ = base::StringPrintf("preload-%d", fetch_event_id);
141 MayBeRunDevToolsCallbacks(); 143 MayBeRunDevToolsCallbacks();
142 } 144 }
143 145
144 void OnDataDownloaded(int64_t data_length, int64_t encoded_length) override { 146 void OnDataDownloaded(int64_t data_length, int64_t encoded_length) override {
(...skipping 14 matching lines...) Expand all
159 const ResourceResponseHead& head, 161 const ResourceResponseHead& head,
160 mojom::DownloadedTempFilePtr downloaded_file) override { 162 mojom::DownloadedTempFilePtr downloaded_file) override {
161 client_->OnReceiveResponse(head, std::move(downloaded_file)); 163 client_->OnReceiveResponse(head, std::move(downloaded_file));
162 DCHECK(on_response_); 164 DCHECK(on_response_);
163 std::move(on_response_).Run(); 165 std::move(on_response_).Run();
164 AddDevToolsCallback( 166 AddDevToolsCallback(
165 base::Bind(&NotifyNavigationPreloadResponseReceivedOnUI, url_, head)); 167 base::Bind(&NotifyNavigationPreloadResponseReceivedOnUI, url_, head));
166 } 168 }
167 void OnReceiveRedirect(const net::RedirectInfo& redirect_info, 169 void OnReceiveRedirect(const net::RedirectInfo& redirect_info,
168 const ResourceResponseHead& head) override { 170 const ResourceResponseHead& head) override {
171 completed_ = true;
172 // When the server returns a redirect response, we only send
173 // OnReceiveRedirect IPC and don't send OnComplete IPC. The service worker
174 // will clean up the preload request when OnReceiveRedirect() is called.
169 client_->OnReceiveRedirect(redirect_info, head); 175 client_->OnReceiveRedirect(redirect_info, head);
176 AddDevToolsCallback(
177 base::Bind(&NotifyNavigationPreloadResponseReceivedOnUI, url_, head));
178 ResourceRequestCompletionStatus status;
179 AddDevToolsCallback(
180 base::Bind(&NotifyNavigationPreloadCompletedOnUI, status));
170 } 181 }
171 void OnStartLoadingResponseBody( 182 void OnStartLoadingResponseBody(
172 mojo::ScopedDataPipeConsumerHandle body) override { 183 mojo::ScopedDataPipeConsumerHandle body) override {
173 client_->OnStartLoadingResponseBody(std::move(body)); 184 client_->OnStartLoadingResponseBody(std::move(body));
174 } 185 }
175 void OnComplete( 186 void OnComplete(
176 const ResourceRequestCompletionStatus& completion_status) override { 187 const ResourceRequestCompletionStatus& completion_status) override {
188 if (completed_)
189 return;
190 completed_ = true;
177 client_->OnComplete(completion_status); 191 client_->OnComplete(completion_status);
178 completed_ = true;
179 AddDevToolsCallback( 192 AddDevToolsCallback(
180 base::Bind(&NotifyNavigationPreloadCompletedOnUI, completion_status)); 193 base::Bind(&NotifyNavigationPreloadCompletedOnUI, completion_status));
181 } 194 }
182 195
183 void Bind(mojom::URLLoaderClientPtr* ptr_info) { binding_.Bind(ptr_info); } 196 void Bind(mojom::URLLoaderClientPtr* ptr_info) { binding_.Bind(ptr_info); }
184 197
185 private: 198 private:
186 void MayBeRunDevToolsCallbacks() { 199 void MayBeRunDevToolsCallbacks() {
187 if (!worker_id_) 200 if (!worker_id_)
188 return; 201 return;
(...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 ServiceWorkerVersion* version, 623 ServiceWorkerVersion* version,
611 int event_finish_id, 624 int event_finish_id,
612 scoped_refptr<URLLoaderAssets> url_loader_assets, 625 scoped_refptr<URLLoaderAssets> url_loader_assets,
613 ServiceWorkerStatusCode status, 626 ServiceWorkerStatusCode status,
614 base::Time dispatch_event_time) { 627 base::Time dispatch_event_time) {
615 version->FinishRequest(event_finish_id, status != SERVICE_WORKER_ERROR_ABORT, 628 version->FinishRequest(event_finish_id, status != SERVICE_WORKER_ERROR_ABORT,
616 dispatch_event_time); 629 dispatch_event_time);
617 } 630 }
618 631
619 } // namespace content 632 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698