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

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

Issue 1867293004: Set service worker response info data for foreign fetch intercepted fetches. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ff-check-origin
Patch Set: address comment Created 4 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_controllee_request_handl er.h" 5 #include "content/browser/service_worker/service_worker_controllee_request_handl er.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <string> 8 #include <string>
9 9
10 #include "base/trace_event/trace_event.h" 10 #include "base/trace_event/trace_event.h"
11 #include "content/browser/service_worker/service_worker_context_core.h" 11 #include "content/browser/service_worker/service_worker_context_core.h"
12 #include "content/browser/service_worker/service_worker_metrics.h" 12 #include "content/browser/service_worker/service_worker_metrics.h"
13 #include "content/browser/service_worker/service_worker_provider_host.h" 13 #include "content/browser/service_worker/service_worker_provider_host.h"
14 #include "content/browser/service_worker/service_worker_registration.h" 14 #include "content/browser/service_worker/service_worker_registration.h"
15 #include "content/browser/service_worker/service_worker_response_info.h"
15 #include "content/browser/service_worker/service_worker_url_request_job.h" 16 #include "content/browser/service_worker/service_worker_url_request_job.h"
16 #include "content/common/resource_request_body.h" 17 #include "content/common/resource_request_body.h"
17 #include "content/common/service_worker/service_worker_types.h" 18 #include "content/common/service_worker/service_worker_types.h"
18 #include "content/common/service_worker/service_worker_utils.h" 19 #include "content/common/service_worker/service_worker_utils.h"
19 #include "content/public/browser/content_browser_client.h" 20 #include "content/public/browser/content_browser_client.h"
20 #include "content/public/common/content_client.h" 21 #include "content/public/common/content_client.h"
21 #include "content/public/common/resource_response_info.h" 22 #include "content/public/common/resource_response_info.h"
22 #include "net/base/load_flags.h" 23 #include "net/base/load_flags.h"
23 #include "net/base/url_util.h" 24 #include "net/base/url_util.h"
24 #include "net/url_request/url_request.h" 25 #include "net/url_request/url_request.h"
(...skipping 18 matching lines...) Expand all
43 is_main_resource_load_( 44 is_main_resource_load_(
44 ServiceWorkerUtils::IsMainResourceType(resource_type)), 45 ServiceWorkerUtils::IsMainResourceType(resource_type)),
45 request_mode_(request_mode), 46 request_mode_(request_mode),
46 credentials_mode_(credentials_mode), 47 credentials_mode_(credentials_mode),
47 redirect_mode_(redirect_mode), 48 redirect_mode_(redirect_mode),
48 request_context_type_(request_context_type), 49 request_context_type_(request_context_type),
49 frame_type_(frame_type), 50 frame_type_(frame_type),
50 body_(body), 51 body_(body),
51 force_update_started_(false), 52 force_update_started_(false),
52 use_network_(false), 53 use_network_(false),
53 was_fetched_via_service_worker_(false),
54 was_fallback_required_(false),
55 response_type_via_service_worker_(
56 blink::WebServiceWorkerResponseTypeDefault),
57 weak_factory_(this) {} 54 weak_factory_(this) {}
58 55
59 ServiceWorkerControlleeRequestHandler:: 56 ServiceWorkerControlleeRequestHandler::
60 ~ServiceWorkerControlleeRequestHandler() { 57 ~ServiceWorkerControlleeRequestHandler() {
61 // Navigation triggers an update to occur shortly after the page and 58 // Navigation triggers an update to occur shortly after the page and
62 // its initial subresources load. 59 // its initial subresources load.
63 if (provider_host_ && provider_host_->active_version()) { 60 if (provider_host_ && provider_host_->active_version()) {
64 if (is_main_resource_load_ && !force_update_started_) 61 if (is_main_resource_load_ && !force_update_started_)
65 provider_host_->active_version()->ScheduleUpdate(); 62 provider_host_->active_version()->ScheduleUpdate();
66 else 63 else
67 provider_host_->active_version()->DeferScheduledUpdate(); 64 provider_host_->active_version()->DeferScheduledUpdate();
68 } 65 }
69 66
70 if (is_main_resource_load_ && provider_host_) 67 if (is_main_resource_load_ && provider_host_)
71 provider_host_->SetAllowAssociation(true); 68 provider_host_->SetAllowAssociation(true);
72 } 69 }
73 70
74 net::URLRequestJob* ServiceWorkerControlleeRequestHandler::MaybeCreateJob( 71 net::URLRequestJob* ServiceWorkerControlleeRequestHandler::MaybeCreateJob(
75 net::URLRequest* request, 72 net::URLRequest* request,
76 net::NetworkDelegate* network_delegate, 73 net::NetworkDelegate* network_delegate,
77 ResourceContext* resource_context) { 74 ResourceContext* resource_context) {
78 ClearJob(); 75 ClearJob();
76 ServiceWorkerResponseInfo::ResetDataForRequest(request);
79 77
80 if (!context_ || !provider_host_) { 78 if (!context_ || !provider_host_) {
81 // We can't do anything other than to fall back to network. 79 // We can't do anything other than to fall back to network.
82 return NULL; 80 return NULL;
83 } 81 }
84 82
85 // This may get called multiple times for original and redirect requests: 83 // This may get called multiple times for original and redirect requests:
86 // A. original request case: use_network_ is false, no previous location info. 84 // A. original request case: use_network_ is false, no previous location info.
87 // B. redirect or restarted request case: 85 // B. redirect or restarted request case:
88 // a) use_network_ is false if the previous location was forwarded to SW. 86 // a) use_network_ is false if the previous location was forwarded to SW.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 if (!is_main_resource_load_) 124 if (!is_main_resource_load_)
127 use_network_ = true; 125 use_network_ = true;
128 126
129 job.reset(); 127 job.reset();
130 ClearJob(); 128 ClearJob();
131 } 129 }
132 130
133 return job.release(); 131 return job.release();
134 } 132 }
135 133
136 void ServiceWorkerControlleeRequestHandler::GetExtraResponseInfo(
137 ResourceResponseInfo* response_info) const {
138 response_info->was_fetched_via_service_worker =
139 was_fetched_via_service_worker_;
140 response_info->was_fallback_required_by_service_worker =
141 was_fallback_required_;
142 response_info->original_url_via_service_worker =
143 original_url_via_service_worker_;
144 response_info->response_type_via_service_worker =
145 response_type_via_service_worker_;
146 response_info->service_worker_start_time = service_worker_start_time_;
147 response_info->service_worker_ready_time = service_worker_ready_time_;
148 response_info->is_in_cache_storage = response_is_in_cache_storage_;
149 response_info->cache_storage_cache_name = response_cache_storage_cache_name_;
150 }
151
152 void ServiceWorkerControlleeRequestHandler::PrepareForMainResource( 134 void ServiceWorkerControlleeRequestHandler::PrepareForMainResource(
153 const net::URLRequest* request) { 135 const net::URLRequest* request) {
154 DCHECK(job_.get()); 136 DCHECK(job_.get());
155 DCHECK(context_); 137 DCHECK(context_);
156 DCHECK(provider_host_); 138 DCHECK(provider_host_);
157 TRACE_EVENT_ASYNC_BEGIN1( 139 TRACE_EVENT_ASYNC_BEGIN1(
158 "ServiceWorker", 140 "ServiceWorker",
159 "ServiceWorkerControlleeRequestHandler::PrepareForMainResource", 141 "ServiceWorkerControlleeRequestHandler::PrepareForMainResource",
160 job_.get(), 142 job_.get(),
161 "URL", request->url().spec()); 143 "URL", request->url().spec());
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 weak_factory_.GetWeakPtr(), registration, version)); 348 weak_factory_.GetWeakPtr(), registration, version));
367 } 349 }
368 350
369 void ServiceWorkerControlleeRequestHandler::PrepareForSubResource() { 351 void ServiceWorkerControlleeRequestHandler::PrepareForSubResource() {
370 DCHECK(job_.get()); 352 DCHECK(job_.get());
371 DCHECK(context_); 353 DCHECK(context_);
372 DCHECK(provider_host_->active_version()); 354 DCHECK(provider_host_->active_version());
373 job_->ForwardToServiceWorker(); 355 job_->ForwardToServiceWorker();
374 } 356 }
375 357
376 void ServiceWorkerControlleeRequestHandler::OnPrepareToRestart( 358 void ServiceWorkerControlleeRequestHandler::OnPrepareToRestart() {
377 base::TimeTicks service_worker_start_time,
378 base::TimeTicks service_worker_ready_time) {
379 use_network_ = true; 359 use_network_ = true;
380 ClearJob(); 360 ClearJob();
381 // Update times, if not already set by a previous Job.
382 if (service_worker_start_time_.is_null()) {
383 service_worker_start_time_ = service_worker_start_time;
384 service_worker_ready_time_ = service_worker_ready_time;
385 }
386 }
387
388 void ServiceWorkerControlleeRequestHandler::OnStartCompleted(
389 bool was_fetched_via_service_worker,
390 bool was_fallback_required,
391 const GURL& original_url_via_service_worker,
392 blink::WebServiceWorkerResponseType response_type_via_service_worker,
393 base::TimeTicks service_worker_start_time,
394 base::TimeTicks service_worker_ready_time,
395 bool response_is_in_cache_storage,
396 const std::string& response_cache_storage_cache_name) {
397 was_fetched_via_service_worker_ = was_fetched_via_service_worker;
398 was_fallback_required_ = was_fallback_required;
399 original_url_via_service_worker_ = original_url_via_service_worker;
400 response_type_via_service_worker_ = response_type_via_service_worker;
401 response_is_in_cache_storage_ = response_is_in_cache_storage;
402 response_cache_storage_cache_name_ = response_cache_storage_cache_name;
403
404 // Update times, if not already set by a previous Job.
405 if (service_worker_start_time_.is_null()) {
406 service_worker_start_time_ = service_worker_start_time;
407 service_worker_ready_time_ = service_worker_ready_time;
408 }
409 } 361 }
410 362
411 ServiceWorkerVersion* 363 ServiceWorkerVersion*
412 ServiceWorkerControlleeRequestHandler::GetServiceWorkerVersion( 364 ServiceWorkerControlleeRequestHandler::GetServiceWorkerVersion(
413 ServiceWorkerMetrics::URLRequestJobResult* result) { 365 ServiceWorkerMetrics::URLRequestJobResult* result) {
414 if (!provider_host_) { 366 if (!provider_host_) {
415 *result = ServiceWorkerMetrics::REQUEST_JOB_ERROR_NO_PROVIDER_HOST; 367 *result = ServiceWorkerMetrics::REQUEST_JOB_ERROR_NO_PROVIDER_HOST;
416 return nullptr; 368 return nullptr;
417 } 369 }
418 if (!provider_host_->active_version()) { 370 if (!provider_host_->active_version()) {
(...skipping 15 matching lines...) Expand all
434 } 386 }
435 387
436 void ServiceWorkerControlleeRequestHandler::MainResourceLoadFailed() { 388 void ServiceWorkerControlleeRequestHandler::MainResourceLoadFailed() {
437 DCHECK(provider_host_); 389 DCHECK(provider_host_);
438 // Detach the controller so subresource requests also skip the worker. 390 // Detach the controller so subresource requests also skip the worker.
439 provider_host_->NotifyControllerLost(); 391 provider_host_->NotifyControllerLost();
440 } 392 }
441 393
442 void ServiceWorkerControlleeRequestHandler::ClearJob() { 394 void ServiceWorkerControlleeRequestHandler::ClearJob() {
443 job_.reset(); 395 job_.reset();
444 was_fetched_via_service_worker_ = false;
445 was_fallback_required_ = false;
446 original_url_via_service_worker_ = GURL();
447 response_type_via_service_worker_ =
448 blink::WebServiceWorkerResponseTypeDefault;
449 response_is_in_cache_storage_ = false;
450 response_cache_storage_cache_name_ = std::string();
451 } 396 }
452 397
453 } // namespace content 398 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698