Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(58)

Side by Side Diff: content/child/service_worker/service_worker_dispatcher.cc

Issue 771103002: Implement ServiceWorkerClient attributes [2/3] (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Forgot to clear callbacks in OnStopped Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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"
11 #include "content/child/child_thread.h" 11 #include "content/child/child_thread.h"
12 #include "content/child/service_worker/service_worker_handle_reference.h" 12 #include "content/child/service_worker/service_worker_handle_reference.h"
13 #include "content/child/service_worker/service_worker_provider_context.h" 13 #include "content/child/service_worker/service_worker_provider_context.h"
14 #include "content/child/service_worker/service_worker_registration_handle_refere nce.h" 14 #include "content/child/service_worker/service_worker_registration_handle_refere nce.h"
15 #include "content/child/service_worker/web_service_worker_impl.h" 15 #include "content/child/service_worker/web_service_worker_impl.h"
16 #include "content/child/service_worker/web_service_worker_registration_impl.h" 16 #include "content/child/service_worker/web_service_worker_registration_impl.h"
17 #include "content/child/thread_safe_sender.h" 17 #include "content/child/thread_safe_sender.h"
18 #include "content/child/webmessageportchannel_impl.h" 18 #include "content/child/webmessageportchannel_impl.h"
19 #include "content/common/service_worker/service_worker_messages.h" 19 #include "content/common/service_worker/service_worker_messages.h"
20 #include "content/public/common/url_utils.h" 20 #include "content/public/common/url_utils.h"
21 #include "third_party/WebKit/public/platform/WebServiceWorkerClientsInfo.h"
21 #include "third_party/WebKit/public/platform/WebServiceWorkerProviderClient.h" 22 #include "third_party/WebKit/public/platform/WebServiceWorkerProviderClient.h"
22 #include "third_party/WebKit/public/web/WebSecurityOrigin.h" 23 #include "third_party/WebKit/public/web/WebSecurityOrigin.h"
23 24
24 using blink::WebServiceWorkerError; 25 using blink::WebServiceWorkerError;
25 using blink::WebServiceWorkerProvider; 26 using blink::WebServiceWorkerProvider;
26 using base::ThreadLocalPointer; 27 using base::ThreadLocalPointer;
27 28
28 namespace content { 29 namespace content {
29 30
30 namespace { 31 namespace {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerStateChanged, 73 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerStateChanged,
73 OnServiceWorkerStateChanged) 74 OnServiceWorkerStateChanged)
74 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetVersionAttributes, 75 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetVersionAttributes,
75 OnSetVersionAttributes) 76 OnSetVersionAttributes)
76 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_UpdateFound, 77 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_UpdateFound,
77 OnUpdateFound) 78 OnUpdateFound)
78 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetControllerServiceWorker, 79 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetControllerServiceWorker,
79 OnSetControllerServiceWorker) 80 OnSetControllerServiceWorker)
80 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToDocument, 81 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToDocument,
81 OnPostMessage) 82 OnPostMessage)
83 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_GetClientInfo,
84 OnGetClientInfo)
82 IPC_MESSAGE_UNHANDLED(handled = false) 85 IPC_MESSAGE_UNHANDLED(handled = false)
83 IPC_END_MESSAGE_MAP() 86 IPC_END_MESSAGE_MAP()
84 DCHECK(handled) << "Unhandled message:" << msg.type(); 87 DCHECK(handled) << "Unhandled message:" << msg.type();
85 } 88 }
86 89
87 bool ServiceWorkerDispatcher::Send(IPC::Message* msg) { 90 bool ServiceWorkerDispatcher::Send(IPC::Message* msg) {
88 return thread_safe_sender_->Send(msg); 91 return thread_safe_sender_->Send(msg);
89 } 92 }
90 93
91 void ServiceWorkerDispatcher::RegisterServiceWorker( 94 void ServiceWorkerDispatcher::RegisterServiceWorker(
(...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after
681 for (size_t i = 0; i < sent_message_port_ids.size(); ++i) { 684 for (size_t i = 0; i < sent_message_port_ids.size(); ++i) {
682 ports[i] = new WebMessagePortChannelImpl( 685 ports[i] = new WebMessagePortChannelImpl(
683 new_routing_ids[i], sent_message_port_ids[i], 686 new_routing_ids[i], sent_message_port_ids[i],
684 base::MessageLoopProxy::current()); 687 base::MessageLoopProxy::current());
685 } 688 }
686 } 689 }
687 690
688 found->second->dispatchMessageEvent(message, ports); 691 found->second->dispatchMessageEvent(message, ports);
689 } 692 }
690 693
694 void ServiceWorkerDispatcher::OnGetClientInfo(int thread_id,
695 int embedded_worker_id,
696 int request_id,
697 int provider_id) {
698 blink::WebServiceWorkerClientInfo info;
699 ScriptClientMap::iterator found = script_clients_.find(provider_id);
700 // TODO(ksakamoto): Could we track these values in the browser side? Except
701 // for |isFocused|, it would be pretty easy.
702 if (found != script_clients_.end() && found->second->getClientInfo(&info)) {
703 ServiceWorkerClientInfo result;
704 result.client_id = info.clientID;
705 result.visibility_state = info.visibilityState.utf8();
706 result.is_focused = info.isFocused;
707 result.url = info.url;
708 result.frame_type = static_cast<RequestContextFrameType>(info.frameType);
709
710 thread_safe_sender_->Send(new ServiceWorkerHostMsg_GetClientInfoSuccess(
711 embedded_worker_id, request_id, result));
712 } else {
713 thread_safe_sender_->Send(new ServiceWorkerHostMsg_GetClientInfoError(
714 embedded_worker_id, request_id));
715 }
716 }
717
691 void ServiceWorkerDispatcher::AddServiceWorker( 718 void ServiceWorkerDispatcher::AddServiceWorker(
692 int handle_id, WebServiceWorkerImpl* worker) { 719 int handle_id, WebServiceWorkerImpl* worker) {
693 DCHECK(!ContainsKey(service_workers_, handle_id)); 720 DCHECK(!ContainsKey(service_workers_, handle_id));
694 service_workers_[handle_id] = worker; 721 service_workers_[handle_id] = worker;
695 } 722 }
696 723
697 void ServiceWorkerDispatcher::RemoveServiceWorker(int handle_id) { 724 void ServiceWorkerDispatcher::RemoveServiceWorker(int handle_id) {
698 DCHECK(ContainsKey(service_workers_, handle_id)); 725 DCHECK(ContainsKey(service_workers_, handle_id));
699 service_workers_.erase(handle_id); 726 service_workers_.erase(handle_id);
700 } 727 }
(...skipping 29 matching lines...) Expand all
730 attrs.installing, thread_safe_sender_.get()); 757 attrs.installing, thread_safe_sender_.get());
731 ServiceWorkerHandleReference::Adopt( 758 ServiceWorkerHandleReference::Adopt(
732 attrs.waiting, thread_safe_sender_.get()); 759 attrs.waiting, thread_safe_sender_.get());
733 ServiceWorkerHandleReference::Adopt( 760 ServiceWorkerHandleReference::Adopt(
734 attrs.active, thread_safe_sender_.get()); 761 attrs.active, thread_safe_sender_.get());
735 } 762 }
736 return registration; 763 return registration;
737 } 764 }
738 765
739 } // namespace content 766 } // namespace content
OLDNEW
« no previous file with comments | « content/child/service_worker/service_worker_dispatcher.h ('k') | content/common/service_worker/service_worker_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698