| 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/child/service_worker/service_worker_dispatcher.h" | 5 #include "content/child/service_worker/service_worker_dispatcher.h" |
| 6 | 6 |
| 7 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
| 8 #include "base/lazy_instance.h" | 8 #include "base/lazy_instance.h" |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "base/threading/thread_local.h" | 10 #include "base/threading/thread_local.h" |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerStateChanged, | 75 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerStateChanged, |
| 76 OnServiceWorkerStateChanged) | 76 OnServiceWorkerStateChanged) |
| 77 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetVersionAttributes, | 77 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetVersionAttributes, |
| 78 OnSetVersionAttributes) | 78 OnSetVersionAttributes) |
| 79 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_UpdateFound, | 79 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_UpdateFound, |
| 80 OnUpdateFound) | 80 OnUpdateFound) |
| 81 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetControllerServiceWorker, | 81 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetControllerServiceWorker, |
| 82 OnSetControllerServiceWorker) | 82 OnSetControllerServiceWorker) |
| 83 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToDocument, | 83 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToDocument, |
| 84 OnPostMessage) | 84 OnPostMessage) |
| 85 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_GetClientInfo, | |
| 86 OnGetClientInfo) | |
| 87 IPC_MESSAGE_UNHANDLED(handled = false) | 85 IPC_MESSAGE_UNHANDLED(handled = false) |
| 88 IPC_END_MESSAGE_MAP() | 86 IPC_END_MESSAGE_MAP() |
| 89 DCHECK(handled) << "Unhandled message:" << msg.type(); | 87 DCHECK(handled) << "Unhandled message:" << msg.type(); |
| 90 } | 88 } |
| 91 | 89 |
| 92 bool ServiceWorkerDispatcher::Send(IPC::Message* msg) { | 90 bool ServiceWorkerDispatcher::Send(IPC::Message* msg) { |
| 93 return thread_safe_sender_->Send(msg); | 91 return thread_safe_sender_->Send(msg); |
| 94 } | 92 } |
| 95 | 93 |
| 96 void ServiceWorkerDispatcher::RegisterServiceWorker( | 94 void ServiceWorkerDispatcher::RegisterServiceWorker( |
| (...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 631 for (size_t i = 0; i < sent_message_port_ids.size(); ++i) { | 629 for (size_t i = 0; i < sent_message_port_ids.size(); ++i) { |
| 632 ports[i] = new WebMessagePortChannelImpl( | 630 ports[i] = new WebMessagePortChannelImpl( |
| 633 new_routing_ids[i], sent_message_port_ids[i], | 631 new_routing_ids[i], sent_message_port_ids[i], |
| 634 base::MessageLoopProxy::current()); | 632 base::MessageLoopProxy::current()); |
| 635 } | 633 } |
| 636 } | 634 } |
| 637 | 635 |
| 638 found->second->dispatchMessageEvent(message, ports); | 636 found->second->dispatchMessageEvent(message, ports); |
| 639 } | 637 } |
| 640 | 638 |
| 641 void ServiceWorkerDispatcher::OnGetClientInfo(int thread_id, | |
| 642 int embedded_worker_id, | |
| 643 int request_id, | |
| 644 int provider_id) { | |
| 645 blink::WebServiceWorkerClientInfo info; | |
| 646 ProviderClientMap::iterator found = provider_clients_.find(provider_id); | |
| 647 // TODO(ksakamoto): Could we track these values in the browser side? Except | |
| 648 // for |isFocused|, it would be pretty easy. | |
| 649 if (found != provider_clients_.end() && found->second->getClientInfo(&info)) { | |
| 650 ServiceWorkerClientInfo result; | |
| 651 result.client_id = info.clientID; | |
| 652 result.page_visibility_state = info.pageVisibilityState; | |
| 653 result.is_focused = info.isFocused; | |
| 654 result.url = info.url; | |
| 655 result.frame_type = static_cast<RequestContextFrameType>(info.frameType); | |
| 656 | |
| 657 thread_safe_sender_->Send(new ServiceWorkerHostMsg_GetClientInfoSuccess( | |
| 658 embedded_worker_id, request_id, result)); | |
| 659 } else { | |
| 660 thread_safe_sender_->Send(new ServiceWorkerHostMsg_GetClientInfoError( | |
| 661 embedded_worker_id, request_id)); | |
| 662 } | |
| 663 } | |
| 664 | |
| 665 void ServiceWorkerDispatcher::AddServiceWorker( | 639 void ServiceWorkerDispatcher::AddServiceWorker( |
| 666 int handle_id, WebServiceWorkerImpl* worker) { | 640 int handle_id, WebServiceWorkerImpl* worker) { |
| 667 DCHECK(!ContainsKey(service_workers_, handle_id)); | 641 DCHECK(!ContainsKey(service_workers_, handle_id)); |
| 668 service_workers_[handle_id] = worker; | 642 service_workers_[handle_id] = worker; |
| 669 } | 643 } |
| 670 | 644 |
| 671 void ServiceWorkerDispatcher::RemoveServiceWorker(int handle_id) { | 645 void ServiceWorkerDispatcher::RemoveServiceWorker(int handle_id) { |
| 672 DCHECK(ContainsKey(service_workers_, handle_id)); | 646 DCHECK(ContainsKey(service_workers_, handle_id)); |
| 673 service_workers_.erase(handle_id); | 647 service_workers_.erase(handle_id); |
| 674 } | 648 } |
| (...skipping 29 matching lines...) Expand all Loading... |
| 704 attrs.installing, thread_safe_sender_.get()); | 678 attrs.installing, thread_safe_sender_.get()); |
| 705 ServiceWorkerHandleReference::Adopt( | 679 ServiceWorkerHandleReference::Adopt( |
| 706 attrs.waiting, thread_safe_sender_.get()); | 680 attrs.waiting, thread_safe_sender_.get()); |
| 707 ServiceWorkerHandleReference::Adopt( | 681 ServiceWorkerHandleReference::Adopt( |
| 708 attrs.active, thread_safe_sender_.get()); | 682 attrs.active, thread_safe_sender_.get()); |
| 709 } | 683 } |
| 710 return registration; | 684 return registration; |
| 711 } | 685 } |
| 712 | 686 |
| 713 } // namespace content | 687 } // namespace content |
| OLD | NEW |