| OLD | NEW |
| 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 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 const base::Closure& prepare_callback, | 110 const base::Closure& prepare_callback, |
| 111 const FetchCallback& fetch_callback) | 111 const FetchCallback& fetch_callback) |
| 112 : version_(version), | 112 : version_(version), |
| 113 net_log_(net_log), | 113 net_log_(net_log), |
| 114 prepare_callback_(prepare_callback), | 114 prepare_callback_(prepare_callback), |
| 115 fetch_callback_(fetch_callback), | 115 fetch_callback_(fetch_callback), |
| 116 request_(std::move(request)), | 116 request_(std::move(request)), |
| 117 resource_type_(resource_type), | 117 resource_type_(resource_type), |
| 118 did_complete_(false), | 118 did_complete_(false), |
| 119 weak_factory_(this) { | 119 weak_factory_(this) { |
| 120 LOG(ERROR) << "ServiceWorkerFetchDispatcher::ServiceWorkerFetchDispatcher " |
| 121 << this; |
| 120 net_log_.BeginEvent(net::NetLog::TYPE_SERVICE_WORKER_DISPATCH_FETCH_EVENT, | 122 net_log_.BeginEvent(net::NetLog::TYPE_SERVICE_WORKER_DISPATCH_FETCH_EVENT, |
| 121 net::NetLog::StringCallback( | 123 net::NetLog::StringCallback( |
| 122 "event_type", ServiceWorkerMetrics::EventTypeToString( | 124 "event_type", ServiceWorkerMetrics::EventTypeToString( |
| 123 GetEventType()))); | 125 GetEventType()))); |
| 124 } | 126 } |
| 125 | 127 |
| 126 ServiceWorkerFetchDispatcher::~ServiceWorkerFetchDispatcher() { | 128 ServiceWorkerFetchDispatcher::~ServiceWorkerFetchDispatcher() { |
| 129 LOG(ERROR) << "ServiceWorkerFetchDispatcher::~ServiceWorkerFetchDispatcher " |
| 130 << this; |
| 127 if (!did_complete_) | 131 if (!did_complete_) |
| 128 net_log_.EndEvent(net::NetLog::TYPE_SERVICE_WORKER_DISPATCH_FETCH_EVENT); | 132 net_log_.EndEvent(net::NetLog::TYPE_SERVICE_WORKER_DISPATCH_FETCH_EVENT); |
| 129 } | 133 } |
| 130 | 134 |
| 131 void ServiceWorkerFetchDispatcher::Run() { | 135 void ServiceWorkerFetchDispatcher::Run() { |
| 132 DCHECK(version_->status() == ServiceWorkerVersion::ACTIVATING || | 136 DCHECK(version_->status() == ServiceWorkerVersion::ACTIVATING || |
| 133 version_->status() == ServiceWorkerVersion::ACTIVATED) | 137 version_->status() == ServiceWorkerVersion::ACTIVATED) |
| 134 << version_->status(); | 138 << version_->status(); |
| 135 | 139 |
| 136 if (version_->status() == ServiceWorkerVersion::ACTIVATING) { | 140 if (version_->status() == ServiceWorkerVersion::ACTIVATING) { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 176 } | 180 } |
| 177 | 181 |
| 178 void ServiceWorkerFetchDispatcher::DidFailToStartWorker( | 182 void ServiceWorkerFetchDispatcher::DidFailToStartWorker( |
| 179 ServiceWorkerStatusCode status) { | 183 ServiceWorkerStatusCode status) { |
| 180 EndNetLogEventWithServiceWorkerStatus( | 184 EndNetLogEventWithServiceWorkerStatus( |
| 181 net_log_, net::NetLog::TYPE_SERVICE_WORKER_START_WORKER, status); | 185 net_log_, net::NetLog::TYPE_SERVICE_WORKER_START_WORKER, status); |
| 182 DidFail(status); | 186 DidFail(status); |
| 183 } | 187 } |
| 184 | 188 |
| 185 void ServiceWorkerFetchDispatcher::DispatchFetchEvent() { | 189 void ServiceWorkerFetchDispatcher::DispatchFetchEvent() { |
| 190 LOG(ERROR) << "ServiceWorkerFetchDispatcher::DispatchFetchEvent"; |
| 186 DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()) | 191 DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()) |
| 187 << "Worker stopped too soon after it was started."; | 192 << "Worker stopped too soon after it was started."; |
| 188 | 193 |
| 189 DCHECK(!prepare_callback_.is_null()); | 194 DCHECK(!prepare_callback_.is_null()); |
| 190 base::Closure prepare_callback = prepare_callback_; | 195 base::Closure prepare_callback = prepare_callback_; |
| 191 prepare_callback.Run(); | 196 prepare_callback.Run(); |
| 192 | 197 |
| 193 net_log_.BeginEvent(net::NetLog::TYPE_SERVICE_WORKER_FETCH_EVENT); | 198 net_log_.BeginEvent(net::NetLog::TYPE_SERVICE_WORKER_FETCH_EVENT); |
| 199 |
| 200 if (version_->IsIsolatedWorker()) { |
| 201 int response_id = version_->StartRequest( |
| 202 GetEventType(), |
| 203 base::Bind(&ServiceWorkerFetchDispatcher::DidFailToDispatch, |
| 204 weak_factory_.GetWeakPtr())); |
| 205 int event_finish_id = version_->StartRequest( |
| 206 FetchTypeToWaitUntilEventType(request_->fetch_type), |
| 207 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
| 208 version_->isolated_worker_ptr()->OnFetchEvent( |
| 209 response_id, event_finish_id, request_->url.spec(), |
| 210 request_->mode == FETCH_REQUEST_MODE_NAVIGATE, |
| 211 base::Bind(&ServiceWorkerFetchDispatcher::OnFetchEventCallback, |
| 212 weak_factory_.GetWeakPtr())); |
| 213 return; |
| 214 } |
| 215 |
| 194 int response_id = version_->StartRequest( | 216 int response_id = version_->StartRequest( |
| 195 GetEventType(), | 217 GetEventType(), |
| 196 base::Bind(&ServiceWorkerFetchDispatcher::DidFailToDispatch, | 218 base::Bind(&ServiceWorkerFetchDispatcher::DidFailToDispatch, |
| 197 weak_factory_.GetWeakPtr())); | 219 weak_factory_.GetWeakPtr())); |
| 198 int event_finish_id = version_->StartRequest( | 220 int event_finish_id = version_->StartRequest( |
| 199 FetchTypeToWaitUntilEventType(request_->fetch_type), | 221 FetchTypeToWaitUntilEventType(request_->fetch_type), |
| 200 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); | 222 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
| 201 | 223 |
| 202 ResponseCallback* response_callback = | 224 ResponseCallback* response_callback = |
| 203 new ResponseCallback(weak_factory_.GetWeakPtr(), version_.get()); | 225 new ResponseCallback(weak_factory_.GetWeakPtr(), version_.get()); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 226 } | 248 } |
| 227 | 249 |
| 228 void ServiceWorkerFetchDispatcher::DidFinish( | 250 void ServiceWorkerFetchDispatcher::DidFinish( |
| 229 int request_id, | 251 int request_id, |
| 230 ServiceWorkerFetchEventResult fetch_result, | 252 ServiceWorkerFetchEventResult fetch_result, |
| 231 const ServiceWorkerResponse& response) { | 253 const ServiceWorkerResponse& response) { |
| 232 net_log_.EndEvent(net::NetLog::TYPE_SERVICE_WORKER_FETCH_EVENT); | 254 net_log_.EndEvent(net::NetLog::TYPE_SERVICE_WORKER_FETCH_EVENT); |
| 233 Complete(SERVICE_WORKER_OK, fetch_result, response); | 255 Complete(SERVICE_WORKER_OK, fetch_result, response); |
| 234 } | 256 } |
| 235 | 257 |
| 258 void ServiceWorkerFetchDispatcher::OnFetchEventCallback( |
| 259 bool handled, |
| 260 mojo::StructPtr<blink::mojom::ServiceWorkerResponse> response) { |
| 261 LOG(ERROR) << "ServiceWorkerFetchDispatcher::OnFetchEventCallback " |
| 262 << handled; |
| 263 net_log_.EndEvent(net::NetLog::TYPE_SERVICE_WORKER_FETCH_EVENT); |
| 264 ServiceWorkerResponse result; |
| 265 if (response) { |
| 266 LOG(ERROR) << " url: " << response->url; |
| 267 LOG(ERROR) << " status_code: " << response->status_code; |
| 268 LOG(ERROR) << " status_text: " << response->status_text; |
| 269 LOG(ERROR) << " blob_uuid: " << response->blob_uuid; |
| 270 LOG(ERROR) << " blob_size: " << response->blob_size; |
| 271 LOG(ERROR) << " stream_url: " << response->stream_url; |
| 272 result.url = GURL(std::string(response->url)); |
| 273 result.status_code = response->status_code; |
| 274 result.status_text = response->status_text; |
| 275 result.blob_uuid = response->blob_uuid; |
| 276 result.blob_size = response->blob_size; |
| 277 result.stream_url = GURL(std::string(response->stream_url)); |
| 278 } |
| 279 Complete(SERVICE_WORKER_OK, |
| 280 handled ? SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE |
| 281 : SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, |
| 282 result); |
| 283 } |
| 284 |
| 236 void ServiceWorkerFetchDispatcher::Complete( | 285 void ServiceWorkerFetchDispatcher::Complete( |
| 237 ServiceWorkerStatusCode status, | 286 ServiceWorkerStatusCode status, |
| 238 ServiceWorkerFetchEventResult fetch_result, | 287 ServiceWorkerFetchEventResult fetch_result, |
| 239 const ServiceWorkerResponse& response) { | 288 const ServiceWorkerResponse& response) { |
| 240 DCHECK(!fetch_callback_.is_null()); | 289 DCHECK(!fetch_callback_.is_null()); |
| 241 | 290 |
| 242 did_complete_ = true; | 291 did_complete_ = true; |
| 243 net_log_.EndEvent( | 292 net_log_.EndEvent( |
| 244 net::NetLog::TYPE_SERVICE_WORKER_DISPATCH_FETCH_EVENT, | 293 net::NetLog::TYPE_SERVICE_WORKER_DISPATCH_FETCH_EVENT, |
| 245 base::Bind(&NetLogFetchEventCallback, status, fetch_result)); | 294 base::Bind(&NetLogFetchEventCallback, status, fetch_result)); |
| 246 | 295 |
| 247 FetchCallback fetch_callback = fetch_callback_; | 296 FetchCallback fetch_callback = fetch_callback_; |
| 248 scoped_refptr<ServiceWorkerVersion> version = version_; | 297 scoped_refptr<ServiceWorkerVersion> version = version_; |
| 249 fetch_callback.Run(status, fetch_result, response, version); | 298 fetch_callback.Run(status, fetch_result, response, version); |
| 250 } | 299 } |
| 251 | 300 |
| 252 ServiceWorkerMetrics::EventType ServiceWorkerFetchDispatcher::GetEventType() | 301 ServiceWorkerMetrics::EventType ServiceWorkerFetchDispatcher::GetEventType() |
| 253 const { | 302 const { |
| 254 if (request_->fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) | 303 if (request_->fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) |
| 255 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH; | 304 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH; |
| 256 return ResourceTypeToEventType(resource_type_); | 305 return ResourceTypeToEventType(resource_type_); |
| 257 } | 306 } |
| 258 | 307 |
| 259 } // namespace content | 308 } // namespace content |
| OLD | NEW |