| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_version.h" | 5 #include "content/browser/service_worker/service_worker_version.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <limits> | 9 #include <limits> |
| 10 #include <map> | 10 #include <map> |
| (...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 559 if (running_status() == RUNNING) { | 559 if (running_status() == RUNNING) { |
| 560 DCHECK(start_callbacks_.empty()); | 560 DCHECK(start_callbacks_.empty()); |
| 561 task.Run(); | 561 task.Run(); |
| 562 return; | 562 return; |
| 563 } | 563 } |
| 564 StartWorker(purpose, | 564 StartWorker(purpose, |
| 565 base::Bind(&RunTaskAfterStartWorker, weak_factory_.GetWeakPtr(), | 565 base::Bind(&RunTaskAfterStartWorker, weak_factory_.GetWeakPtr(), |
| 566 error_callback, task)); | 566 error_callback, task)); |
| 567 } | 567 } |
| 568 | 568 |
| 569 void ServiceWorkerVersion::DispatchFetchEvent( |
| 570 int response_request_id, |
| 571 int finish_request_id, |
| 572 const ServiceWorkerFetchRequest& fetch_request, |
| 573 const FetchResponseCallback& response_callback) { |
| 574 ServiceWorkerMsg_FetchEvent message(response_request_id, finish_request_id, |
| 575 fetch_request); |
| 576 |
| 577 DCHECK_EQ(RUNNING, running_status()); |
| 578 PendingRequest<StatusCallback>* response_request = |
| 579 custom_requests_.Lookup(response_request_id); |
| 580 PendingRequest<StatusCallback>* finish_request = |
| 581 custom_requests_.Lookup(finish_request_id); |
| 582 DCHECK(response_request) << "Invalid request id for response request"; |
| 583 DCHECK(!response_request->listener) |
| 584 << "Request already dispatched an IPC for response request"; |
| 585 DCHECK(finish_request) << "Invalid request id for finish request"; |
| 586 DCHECK(!finish_request->listener) |
| 587 << "Request already dispatched an IPC for finish request"; |
| 588 |
| 589 ServiceWorkerStatusCode status = embedded_worker_->SendMessage(message); |
| 590 if (status != SERVICE_WORKER_OK) { |
| 591 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 592 FROM_HERE, base::Bind(response_request->callback, status)); |
| 593 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 594 FROM_HERE, base::Bind(finish_request->callback, status)); |
| 595 custom_requests_.Remove(response_request_id); |
| 596 custom_requests_.Remove(finish_request_id); |
| 597 return; |
| 598 } |
| 599 |
| 600 response_request->listener.reset( |
| 601 new EventResponseHandler<ServiceWorkerHostMsg_FetchEventResponse, |
| 602 FetchResponseCallback>( |
| 603 embedded_worker()->AsWeakPtr(), response_request_id, |
| 604 response_callback)); |
| 605 finish_request->listener.reset( |
| 606 new EventResponseHandler<ServiceWorkerHostMsg_FetchEventFinished, |
| 607 WebStatusCallback>( |
| 608 embedded_worker()->AsWeakPtr(), finish_request_id, |
| 609 base::Bind(&ServiceWorkerVersion::OnSimpleEventResponse, this))); |
| 610 } |
| 611 |
| 569 void ServiceWorkerVersion::AddControllee( | 612 void ServiceWorkerVersion::AddControllee( |
| 570 ServiceWorkerProviderHost* provider_host) { | 613 ServiceWorkerProviderHost* provider_host) { |
| 571 const std::string& uuid = provider_host->client_uuid(); | 614 const std::string& uuid = provider_host->client_uuid(); |
| 572 CHECK(!provider_host->client_uuid().empty()); | 615 CHECK(!provider_host->client_uuid().empty()); |
| 573 DCHECK(!ContainsKey(controllee_map_, uuid)); | 616 DCHECK(!ContainsKey(controllee_map_, uuid)); |
| 574 controllee_map_[uuid] = provider_host; | 617 controllee_map_[uuid] = provider_host; |
| 575 // Keep the worker alive a bit longer right after a new controllee is added. | 618 // Keep the worker alive a bit longer right after a new controllee is added. |
| 576 RestartTick(&idle_time_); | 619 RestartTick(&idle_time_); |
| 577 FOR_EACH_OBSERVER(Listener, listeners_, | 620 FOR_EACH_OBSERVER(Listener, listeners_, |
| 578 OnControlleeAdded(this, provider_host)); | 621 OnControlleeAdded(this, provider_host)); |
| (...skipping 1124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1703 void ServiceWorkerVersion::OnBeginEvent() { | 1746 void ServiceWorkerVersion::OnBeginEvent() { |
| 1704 if (should_exclude_from_uma_ || running_status() != RUNNING || | 1747 if (should_exclude_from_uma_ || running_status() != RUNNING || |
| 1705 idle_time_.is_null()) { | 1748 idle_time_.is_null()) { |
| 1706 return; | 1749 return; |
| 1707 } | 1750 } |
| 1708 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() - | 1751 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() - |
| 1709 idle_time_); | 1752 idle_time_); |
| 1710 } | 1753 } |
| 1711 | 1754 |
| 1712 } // namespace content | 1755 } // namespace content |
| OLD | NEW |