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 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerStateChanged, | 77 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerStateChanged, |
78 OnServiceWorkerStateChanged) | 78 OnServiceWorkerStateChanged) |
79 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetVersionAttributes, | 79 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetVersionAttributes, |
80 OnSetVersionAttributes) | 80 OnSetVersionAttributes) |
81 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_UpdateFound, | 81 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_UpdateFound, |
82 OnUpdateFound) | 82 OnUpdateFound) |
83 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetControllerServiceWorker, | 83 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetControllerServiceWorker, |
84 OnSetControllerServiceWorker) | 84 OnSetControllerServiceWorker) |
85 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToDocument, | 85 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToDocument, |
86 OnPostMessage) | 86 OnPostMessage) |
87 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_GetClientInfo, | |
88 OnGetClientInfo) | |
89 IPC_MESSAGE_UNHANDLED(handled = false) | 87 IPC_MESSAGE_UNHANDLED(handled = false) |
90 IPC_END_MESSAGE_MAP() | 88 IPC_END_MESSAGE_MAP() |
91 DCHECK(handled) << "Unhandled message:" << msg.type(); | 89 DCHECK(handled) << "Unhandled message:" << msg.type(); |
92 } | 90 } |
93 | 91 |
94 bool ServiceWorkerDispatcher::Send(IPC::Message* msg) { | 92 bool ServiceWorkerDispatcher::Send(IPC::Message* msg) { |
95 return thread_safe_sender_->Send(msg); | 93 return thread_safe_sender_->Send(msg); |
96 } | 94 } |
97 | 95 |
98 void ServiceWorkerDispatcher::RegisterServiceWorker( | 96 void ServiceWorkerDispatcher::RegisterServiceWorker( |
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
654 for (size_t i = 0; i < sent_message_port_ids.size(); ++i) { | 652 for (size_t i = 0; i < sent_message_port_ids.size(); ++i) { |
655 ports[i] = new WebMessagePortChannelImpl( | 653 ports[i] = new WebMessagePortChannelImpl( |
656 new_routing_ids[i], sent_message_port_ids[i], | 654 new_routing_ids[i], sent_message_port_ids[i], |
657 base::MessageLoopProxy::current()); | 655 base::MessageLoopProxy::current()); |
658 } | 656 } |
659 } | 657 } |
660 | 658 |
661 found->second->dispatchMessageEvent(message, ports); | 659 found->second->dispatchMessageEvent(message, ports); |
662 } | 660 } |
663 | 661 |
664 void ServiceWorkerDispatcher::OnGetClientInfo(int thread_id, | |
665 int embedded_worker_id, | |
666 int request_id, | |
667 int provider_id) { | |
668 blink::WebServiceWorkerClientInfo info; | |
669 ProviderClientMap::iterator found = provider_clients_.find(provider_id); | |
670 // TODO(ksakamoto): Could we track these values in the browser side? Except | |
671 // for |isFocused|, it would be pretty easy. | |
672 if (found != provider_clients_.end() && found->second->getClientInfo(&info)) { | |
673 ServiceWorkerClientInfo result; | |
674 result.client_id = info.clientID; | |
675 result.page_visibility_state = info.pageVisibilityState; | |
676 result.is_focused = info.isFocused; | |
677 result.url = info.url; | |
678 result.frame_type = static_cast<RequestContextFrameType>(info.frameType); | |
679 | |
680 thread_safe_sender_->Send(new ServiceWorkerHostMsg_GetClientInfoSuccess( | |
681 embedded_worker_id, request_id, result)); | |
682 } else { | |
683 thread_safe_sender_->Send(new ServiceWorkerHostMsg_GetClientInfoError( | |
684 embedded_worker_id, request_id)); | |
685 } | |
686 } | |
687 | |
688 void ServiceWorkerDispatcher::AddServiceWorker( | 662 void ServiceWorkerDispatcher::AddServiceWorker( |
689 int handle_id, WebServiceWorkerImpl* worker) { | 663 int handle_id, WebServiceWorkerImpl* worker) { |
690 DCHECK(!ContainsKey(service_workers_, handle_id)); | 664 DCHECK(!ContainsKey(service_workers_, handle_id)); |
691 service_workers_[handle_id] = worker; | 665 service_workers_[handle_id] = worker; |
692 } | 666 } |
693 | 667 |
694 void ServiceWorkerDispatcher::RemoveServiceWorker(int handle_id) { | 668 void ServiceWorkerDispatcher::RemoveServiceWorker(int handle_id) { |
695 DCHECK(ContainsKey(service_workers_, handle_id)); | 669 DCHECK(ContainsKey(service_workers_, handle_id)); |
696 service_workers_.erase(handle_id); | 670 service_workers_.erase(handle_id); |
697 } | 671 } |
(...skipping 29 matching lines...) Expand all Loading... |
727 attrs.installing, thread_safe_sender_.get()); | 701 attrs.installing, thread_safe_sender_.get()); |
728 ServiceWorkerHandleReference::Adopt( | 702 ServiceWorkerHandleReference::Adopt( |
729 attrs.waiting, thread_safe_sender_.get()); | 703 attrs.waiting, thread_safe_sender_.get()); |
730 ServiceWorkerHandleReference::Adopt( | 704 ServiceWorkerHandleReference::Adopt( |
731 attrs.active, thread_safe_sender_.get()); | 705 attrs.active, thread_safe_sender_.get()); |
732 } | 706 } |
733 return registration; | 707 return registration; |
734 } | 708 } |
735 | 709 |
736 } // namespace content | 710 } // namespace content |
OLD | NEW |