OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/foreign_fetch_request_handler.h" | 5 #include "content/browser/service_worker/foreign_fetch_request_handler.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 void ForeignFetchRequestHandler::InitializeHandler( | 69 void ForeignFetchRequestHandler::InitializeHandler( |
70 net::URLRequest* request, | 70 net::URLRequest* request, |
71 ServiceWorkerContextWrapper* context_wrapper, | 71 ServiceWorkerContextWrapper* context_wrapper, |
72 storage::BlobStorageContext* blob_storage_context, | 72 storage::BlobStorageContext* blob_storage_context, |
73 int process_id, | 73 int process_id, |
74 int provider_id, | 74 int provider_id, |
75 ServiceWorkerMode service_worker_mode, | 75 ServiceWorkerMode service_worker_mode, |
76 FetchRequestMode request_mode, | 76 FetchRequestMode request_mode, |
77 FetchCredentialsMode credentials_mode, | 77 FetchCredentialsMode credentials_mode, |
78 FetchRedirectMode redirect_mode, | 78 FetchRedirectMode redirect_mode, |
| 79 const std::string& integrity, |
79 ResourceType resource_type, | 80 ResourceType resource_type, |
80 RequestContextType request_context_type, | 81 RequestContextType request_context_type, |
81 RequestContextFrameType frame_type, | 82 RequestContextFrameType frame_type, |
82 scoped_refptr<ResourceRequestBody> body, | 83 scoped_refptr<ResourceRequestBody> body, |
83 bool initiated_in_secure_context) { | 84 bool initiated_in_secure_context) { |
84 if (!IsForeignFetchEnabled()) | 85 if (!IsForeignFetchEnabled()) |
85 return; | 86 return; |
86 | 87 |
87 if (!context_wrapper || !context_wrapper->context() || | 88 if (!context_wrapper || !context_wrapper->context() || |
88 provider_id == kInvalidServiceWorkerProviderId) { | 89 provider_id == kInvalidServiceWorkerProviderId) { |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 if (!context_wrapper->OriginHasForeignFetchRegistrations( | 123 if (!context_wrapper->OriginHasForeignFetchRegistrations( |
123 request->url().GetOrigin())) { | 124 request->url().GetOrigin())) { |
124 return; | 125 return; |
125 } | 126 } |
126 | 127 |
127 // Any more precise checks to see if the request should be intercepted are | 128 // Any more precise checks to see if the request should be intercepted are |
128 // asynchronous, so just create our handler in all cases. | 129 // asynchronous, so just create our handler in all cases. |
129 std::unique_ptr<ForeignFetchRequestHandler> handler = | 130 std::unique_ptr<ForeignFetchRequestHandler> handler = |
130 base::WrapUnique(new ForeignFetchRequestHandler( | 131 base::WrapUnique(new ForeignFetchRequestHandler( |
131 context_wrapper, blob_storage_context->AsWeakPtr(), request_mode, | 132 context_wrapper, blob_storage_context->AsWeakPtr(), request_mode, |
132 credentials_mode, redirect_mode, resource_type, request_context_type, | 133 credentials_mode, redirect_mode, integrity, resource_type, |
133 frame_type, body, timeout)); | 134 request_context_type, frame_type, body, timeout)); |
134 request->SetUserData(&kUserDataKey, std::move(handler)); | 135 request->SetUserData(&kUserDataKey, std::move(handler)); |
135 } | 136 } |
136 | 137 |
137 ForeignFetchRequestHandler* ForeignFetchRequestHandler::GetHandler( | 138 ForeignFetchRequestHandler* ForeignFetchRequestHandler::GetHandler( |
138 net::URLRequest* request) { | 139 net::URLRequest* request) { |
139 return static_cast<ForeignFetchRequestHandler*>( | 140 return static_cast<ForeignFetchRequestHandler*>( |
140 request->GetUserData(&kUserDataKey)); | 141 request->GetUserData(&kUserDataKey)); |
141 } | 142 } |
142 | 143 |
143 std::unique_ptr<net::URLRequestInterceptor> | 144 std::unique_ptr<net::URLRequestInterceptor> |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 // other foreign fetch service workers. | 176 // other foreign fetch service workers. |
176 return nullptr; | 177 return nullptr; |
177 } | 178 } |
178 | 179 |
179 // It's for original request (A) or redirect case (B-a or B-b). | 180 // It's for original request (A) or redirect case (B-a or B-b). |
180 DCHECK(!job_.get() || job_->ShouldForwardToServiceWorker()); | 181 DCHECK(!job_.get() || job_->ShouldForwardToServiceWorker()); |
181 | 182 |
182 ServiceWorkerURLRequestJob* job = new ServiceWorkerURLRequestJob( | 183 ServiceWorkerURLRequestJob* job = new ServiceWorkerURLRequestJob( |
183 request, network_delegate, std::string(), blob_storage_context_, | 184 request, network_delegate, std::string(), blob_storage_context_, |
184 resource_context, request_mode_, credentials_mode_, redirect_mode_, | 185 resource_context, request_mode_, credentials_mode_, redirect_mode_, |
185 resource_type_, request_context_type_, frame_type_, body_, | 186 integrity_, resource_type_, request_context_type_, frame_type_, body_, |
186 ServiceWorkerFetchType::FOREIGN_FETCH, timeout_, this); | 187 ServiceWorkerFetchType::FOREIGN_FETCH, timeout_, this); |
187 job_ = job->GetWeakPtr(); | 188 job_ = job->GetWeakPtr(); |
188 resource_context_ = resource_context; | 189 resource_context_ = resource_context; |
189 | 190 |
190 context_->FindReadyRegistrationForDocument( | 191 context_->FindReadyRegistrationForDocument( |
191 request->url(), | 192 request->url(), |
192 base::Bind(&ForeignFetchRequestHandler::DidFindRegistration, | 193 base::Bind(&ForeignFetchRequestHandler::DidFindRegistration, |
193 weak_factory_.GetWeakPtr(), job_)); | 194 weak_factory_.GetWeakPtr(), job_)); |
194 | 195 |
195 return job_.get(); | 196 return job_.get(); |
196 } | 197 } |
197 | 198 |
198 ForeignFetchRequestHandler::ForeignFetchRequestHandler( | 199 ForeignFetchRequestHandler::ForeignFetchRequestHandler( |
199 ServiceWorkerContextWrapper* context, | 200 ServiceWorkerContextWrapper* context, |
200 base::WeakPtr<storage::BlobStorageContext> blob_storage_context, | 201 base::WeakPtr<storage::BlobStorageContext> blob_storage_context, |
201 FetchRequestMode request_mode, | 202 FetchRequestMode request_mode, |
202 FetchCredentialsMode credentials_mode, | 203 FetchCredentialsMode credentials_mode, |
203 FetchRedirectMode redirect_mode, | 204 FetchRedirectMode redirect_mode, |
| 205 const std::string& integrity, |
204 ResourceType resource_type, | 206 ResourceType resource_type, |
205 RequestContextType request_context_type, | 207 RequestContextType request_context_type, |
206 RequestContextFrameType frame_type, | 208 RequestContextFrameType frame_type, |
207 scoped_refptr<ResourceRequestBody> body, | 209 scoped_refptr<ResourceRequestBody> body, |
208 const base::Optional<base::TimeDelta>& timeout) | 210 const base::Optional<base::TimeDelta>& timeout) |
209 : context_(context), | 211 : context_(context), |
210 blob_storage_context_(blob_storage_context), | 212 blob_storage_context_(blob_storage_context), |
211 resource_type_(resource_type), | 213 resource_type_(resource_type), |
212 request_mode_(request_mode), | 214 request_mode_(request_mode), |
213 credentials_mode_(credentials_mode), | 215 credentials_mode_(credentials_mode), |
214 redirect_mode_(redirect_mode), | 216 redirect_mode_(redirect_mode), |
| 217 integrity_(integrity), |
215 request_context_type_(request_context_type), | 218 request_context_type_(request_context_type), |
216 frame_type_(frame_type), | 219 frame_type_(frame_type), |
217 body_(body), | 220 body_(body), |
218 timeout_(timeout), | 221 timeout_(timeout), |
219 weak_factory_(this) {} | 222 weak_factory_(this) {} |
220 | 223 |
221 void ForeignFetchRequestHandler::DidFindRegistration( | 224 void ForeignFetchRequestHandler::DidFindRegistration( |
222 const base::WeakPtr<ServiceWorkerURLRequestJob>& job, | 225 const base::WeakPtr<ServiceWorkerURLRequestJob>& job, |
223 ServiceWorkerStatusCode status, | 226 ServiceWorkerStatusCode status, |
224 scoped_refptr<ServiceWorkerRegistration> registration) { | 227 scoped_refptr<ServiceWorkerRegistration> registration) { |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 // The worker entry in the database was written by old version Chrome (< M56) | 308 // The worker entry in the database was written by old version Chrome (< M56) |
306 // and the main script was not loaded yet. In this case, we can't check the | 309 // and the main script was not loaded yet. In this case, we can't check the |
307 // origin trial token. | 310 // origin trial token. |
308 if (!active_version->origin_trial_tokens()) | 311 if (!active_version->origin_trial_tokens()) |
309 return true; | 312 return true; |
310 const auto& token_map = *active_version->origin_trial_tokens(); | 313 const auto& token_map = *active_version->origin_trial_tokens(); |
311 return base::ContainsKey(token_map, "ForeignFetch"); | 314 return base::ContainsKey(token_map, "ForeignFetch"); |
312 } | 315 } |
313 | 316 |
314 } // namespace content | 317 } // namespace content |
OLD | NEW |