| 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" |
| 11 #include "base/trace_event/trace_event.h" | 11 #include "base/trace_event/trace_event.h" |
| 12 #include "content/browser/service_worker/embedded_worker_status.h" | 12 #include "content/browser/service_worker/embedded_worker_status.h" |
| 13 #include "content/browser/service_worker/service_worker_version.h" | 13 #include "content/browser/service_worker/service_worker_version.h" |
| 14 #include "content/common/service_worker/service_worker_messages.h" | 14 #include "content/common/service_worker/service_worker_messages.h" |
| 15 #include "content/common/service_worker/service_worker_utils.h" |
| 15 | 16 |
| 16 namespace content { | 17 namespace content { |
| 17 | 18 |
| 18 namespace { | 19 namespace { |
| 19 | 20 |
| 20 using EventType = ServiceWorkerMetrics::EventType; | 21 using EventType = ServiceWorkerMetrics::EventType; |
| 21 EventType ResourceTypeToEventType(ResourceType resource_type) { | 22 EventType ResourceTypeToEventType(ResourceType resource_type) { |
| 22 switch (resource_type) { | 23 switch (resource_type) { |
| 23 case RESOURCE_TYPE_MAIN_FRAME: | 24 case RESOURCE_TYPE_MAIN_FRAME: |
| 24 return EventType::FETCH_MAIN_FRAME; | 25 return EventType::FETCH_MAIN_FRAME; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 54 return std::move(dict); | 55 return std::move(dict); |
| 55 } | 56 } |
| 56 | 57 |
| 57 void EndNetLogEventWithServiceWorkerStatus(const net::BoundNetLog& net_log, | 58 void EndNetLogEventWithServiceWorkerStatus(const net::BoundNetLog& net_log, |
| 58 net::NetLog::EventType type, | 59 net::NetLog::EventType type, |
| 59 ServiceWorkerStatusCode status) { | 60 ServiceWorkerStatusCode status) { |
| 60 net_log.EndEvent(type, | 61 net_log.EndEvent(type, |
| 61 base::Bind(&NetLogServiceWorkerStatusCallback, status)); | 62 base::Bind(&NetLogServiceWorkerStatusCallback, status)); |
| 62 } | 63 } |
| 63 | 64 |
| 65 ServiceWorkerMetrics::EventType FetchTypeToWaitUntilEventType( |
| 66 ServiceWorkerFetchType type) { |
| 67 if (type == ServiceWorkerFetchType::FOREIGN_FETCH) |
| 68 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH_WAITUNTIL; |
| 69 return ServiceWorkerMetrics::EventType::FETCH_WAITUNTIL; |
| 70 } |
| 71 |
| 64 } // namespace | 72 } // namespace |
| 65 | 73 |
| 66 ServiceWorkerFetchDispatcher::ServiceWorkerFetchDispatcher( | 74 ServiceWorkerFetchDispatcher::ServiceWorkerFetchDispatcher( |
| 67 std::unique_ptr<ServiceWorkerFetchRequest> request, | 75 std::unique_ptr<ServiceWorkerFetchRequest> request, |
| 68 ServiceWorkerVersion* version, | 76 ServiceWorkerVersion* version, |
| 69 ResourceType resource_type, | 77 ResourceType resource_type, |
| 70 const net::BoundNetLog& net_log, | 78 const net::BoundNetLog& net_log, |
| 71 const base::Closure& prepare_callback, | 79 const base::Closure& prepare_callback, |
| 72 const FetchCallback& fetch_callback) | 80 const FetchCallback& fetch_callback) |
| 73 : version_(version), | 81 : version_(version), |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 | 153 |
| 146 void ServiceWorkerFetchDispatcher::DispatchFetchEvent() { | 154 void ServiceWorkerFetchDispatcher::DispatchFetchEvent() { |
| 147 DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()) | 155 DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()) |
| 148 << "Worker stopped too soon after it was started."; | 156 << "Worker stopped too soon after it was started."; |
| 149 | 157 |
| 150 DCHECK(!prepare_callback_.is_null()); | 158 DCHECK(!prepare_callback_.is_null()); |
| 151 base::Closure prepare_callback = prepare_callback_; | 159 base::Closure prepare_callback = prepare_callback_; |
| 152 prepare_callback.Run(); | 160 prepare_callback.Run(); |
| 153 | 161 |
| 154 net_log_.BeginEvent(net::NetLog::TYPE_SERVICE_WORKER_FETCH_EVENT); | 162 net_log_.BeginEvent(net::NetLog::TYPE_SERVICE_WORKER_FETCH_EVENT); |
| 155 int request_id = version_->StartRequest( | 163 int response_id = version_->StartRequest( |
| 156 GetEventType(), | 164 GetEventType(), |
| 157 base::Bind(&ServiceWorkerFetchDispatcher::DidFailToDispatch, | 165 base::Bind(&ServiceWorkerFetchDispatcher::DidFailToDispatch, |
| 158 weak_factory_.GetWeakPtr())); | 166 weak_factory_.GetWeakPtr())); |
| 159 version_->DispatchEvent<ServiceWorkerHostMsg_FetchEventFinished>( | 167 int event_finish_id = version_->StartRequest( |
| 160 request_id, ServiceWorkerMsg_FetchEvent(request_id, *request_.get()), | 168 FetchTypeToWaitUntilEventType(request_->fetch_type), |
| 161 base::Bind(&ServiceWorkerFetchDispatcher::DidFinish, | 169 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
| 162 weak_factory_.GetWeakPtr())); | 170 |
| 171 version_->RegisterRequestCallback<ServiceWorkerHostMsg_FetchEventResponse>( |
| 172 response_id, base::Bind(&ServiceWorkerFetchDispatcher::DidFinish, |
| 173 weak_factory_.GetWeakPtr())); |
| 174 version_->RegisterSimpleRequest<ServiceWorkerHostMsg_FetchEventFinished>( |
| 175 event_finish_id); |
| 176 version_->DispatchEvent({response_id, event_finish_id}, |
| 177 ServiceWorkerMsg_FetchEvent( |
| 178 response_id, event_finish_id, *request_.get())); |
| 163 } | 179 } |
| 164 | 180 |
| 165 void ServiceWorkerFetchDispatcher::DidFailToDispatch( | 181 void ServiceWorkerFetchDispatcher::DidFailToDispatch( |
| 166 ServiceWorkerStatusCode status) { | 182 ServiceWorkerStatusCode status) { |
| 167 EndNetLogEventWithServiceWorkerStatus( | 183 EndNetLogEventWithServiceWorkerStatus( |
| 168 net_log_, net::NetLog::TYPE_SERVICE_WORKER_FETCH_EVENT, status); | 184 net_log_, net::NetLog::TYPE_SERVICE_WORKER_FETCH_EVENT, status); |
| 169 DidFail(status); | 185 DidFail(status); |
| 170 } | 186 } |
| 171 | 187 |
| 172 void ServiceWorkerFetchDispatcher::DidFail(ServiceWorkerStatusCode status) { | 188 void ServiceWorkerFetchDispatcher::DidFail(ServiceWorkerStatusCode status) { |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 } | 222 } |
| 207 | 223 |
| 208 ServiceWorkerMetrics::EventType ServiceWorkerFetchDispatcher::GetEventType() | 224 ServiceWorkerMetrics::EventType ServiceWorkerFetchDispatcher::GetEventType() |
| 209 const { | 225 const { |
| 210 if (request_->fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) | 226 if (request_->fetch_type == ServiceWorkerFetchType::FOREIGN_FETCH) |
| 211 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH; | 227 return ServiceWorkerMetrics::EventType::FOREIGN_FETCH; |
| 212 return ResourceTypeToEventType(resource_type_); | 228 return ResourceTypeToEventType(resource_type_); |
| 213 } | 229 } |
| 214 | 230 |
| 215 } // namespace content | 231 } // namespace content |
| OLD | NEW |