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

Side by Side Diff: content/browser/service_worker/service_worker_provider_host.cc

Issue 894853007: [ServiceWorker] Update SWProviderHost::Focus() to return a Client. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@sw_open_window
Patch Set: Created 5 years, 10 months 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/browser/service_worker/service_worker_provider_host.h" 5 #include "content/browser/service_worker/service_worker_provider_host.h"
6 6
7 #include "base/stl_util.h" 7 #include "base/stl_util.h"
8 #include "content/browser/frame_host/frame_tree.h"
9 #include "content/browser/frame_host/frame_tree_node.h"
8 #include "content/browser/frame_host/render_frame_host_impl.h" 10 #include "content/browser/frame_host/render_frame_host_impl.h"
9 #include "content/browser/message_port_message_filter.h" 11 #include "content/browser/message_port_message_filter.h"
10 #include "content/browser/service_worker/service_worker_context_core.h" 12 #include "content/browser/service_worker/service_worker_context_core.h"
11 #include "content/browser/service_worker/service_worker_context_request_handler. h" 13 #include "content/browser/service_worker/service_worker_context_request_handler. h"
12 #include "content/browser/service_worker/service_worker_controllee_request_handl er.h" 14 #include "content/browser/service_worker/service_worker_controllee_request_handl er.h"
13 #include "content/browser/service_worker/service_worker_dispatcher_host.h" 15 #include "content/browser/service_worker/service_worker_dispatcher_host.h"
14 #include "content/browser/service_worker/service_worker_handle.h" 16 #include "content/browser/service_worker/service_worker_handle.h"
15 #include "content/browser/service_worker/service_worker_registration_handle.h" 17 #include "content/browser/service_worker/service_worker_registration_handle.h"
16 #include "content/browser/service_worker/service_worker_utils.h" 18 #include "content/browser/service_worker/service_worker_utils.h"
17 #include "content/browser/service_worker/service_worker_version.h" 19 #include "content/browser/service_worker/service_worker_version.h"
20 #include "content/browser/web_contents/web_contents_impl.h"
18 #include "content/common/resource_request_body.h" 21 #include "content/common/resource_request_body.h"
19 #include "content/common/service_worker/service_worker_messages.h" 22 #include "content/common/service_worker/service_worker_messages.h"
20 #include "content/common/service_worker/service_worker_types.h" 23 #include "content/common/service_worker/service_worker_types.h"
21 #include "content/public/browser/render_frame_host.h" 24 #include "content/public/browser/render_frame_host.h"
25 #include "content/public/browser/render_widget_host_view.h"
22 #include "content/public/browser/web_contents.h" 26 #include "content/public/browser/web_contents.h"
23 #include "content/public/browser/web_contents_delegate.h"
24 #include "content/public/common/child_process_host.h" 27 #include "content/public/common/child_process_host.h"
25 28
26 namespace content { 29 namespace content {
27 30
28 namespace { 31 namespace {
29 32
30 void FocusOnUIThread(int render_process_id,
31 int render_frame_id,
32 const ServiceWorkerProviderHost::FocusCallback& callback) {
33 WebContents* web_contents = WebContents::FromRenderFrameHost(
34 RenderFrameHost::FromID(render_process_id, render_frame_id));
35
36 bool result = false;
37
38 if (web_contents && web_contents->GetDelegate()) {
39 result = true;
40 web_contents->GetDelegate()->ActivateContents(web_contents);
41 }
42
43 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
44 base::Bind(callback, result));
45 }
46
47 void GetClientInfoOnUIThread( 33 void GetClientInfoOnUIThread(
48 int render_process_id, 34 int render_process_id,
49 int render_frame_id, 35 int render_frame_id,
50 const ServiceWorkerProviderHost::GetClientInfoCallback& callback) { 36 const ServiceWorkerProviderHost::GetClientInfoCallback& callback) {
51 RenderFrameHostImpl* render_frame_host = 37 RenderFrameHostImpl* render_frame_host =
52 RenderFrameHostImpl::FromID(render_process_id, render_frame_id); 38 RenderFrameHostImpl::FromID(render_process_id, render_frame_id);
53 if (!render_frame_host) { 39 if (!render_frame_host) {
54 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 40 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
55 base::Bind(callback, ServiceWorkerClientInfo())); 41 base::Bind(callback, ServiceWorkerClientInfo()));
56 return; 42 return;
57 } 43 }
58 44
59 // TODO(mlamouri,michaeln): it is possible to end up collecting information 45 // TODO(mlamouri,michaeln): it is possible to end up collecting information
60 // for a frame that is actually being navigated and isn't exactly what we are 46 // for a frame that is actually being navigated and isn't exactly what we are
61 // expecting. 47 // expecting.
62 ServiceWorkerClientInfo client_info( 48 ServiceWorkerClientInfo client_info(
63 render_frame_host->GetVisibilityState(), 49 render_frame_host->GetVisibilityState(),
64 render_frame_host->IsFocused(), 50 render_frame_host->IsFocused(),
65 render_frame_host->GetLastCommittedURL(), 51 render_frame_host->GetLastCommittedURL(),
66 render_frame_host->GetParent() ? REQUEST_CONTEXT_FRAME_TYPE_NESTED 52 render_frame_host->GetParent() ? REQUEST_CONTEXT_FRAME_TYPE_NESTED
67 : REQUEST_CONTEXT_FRAME_TYPE_TOP_LEVEL); 53 : REQUEST_CONTEXT_FRAME_TYPE_TOP_LEVEL);
68 54
69 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 55 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
70 base::Bind(callback, client_info)); 56 base::Bind(callback, client_info));
71 } 57 }
72 58
59 void FocusOnUIThread(
60 int render_process_id,
61 int render_frame_id,
62 const ServiceWorkerProviderHost::GetClientInfoCallback& callback) {
63 RenderFrameHostImpl* render_frame_host =
64 RenderFrameHostImpl::FromID(render_process_id, render_frame_id);
65 WebContentsImpl* web_contents = static_cast<WebContentsImpl*>(
66 WebContents::FromRenderFrameHost(render_frame_host));
67
68 if (!render_frame_host || !web_contents) {
69 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
70 base::Bind(callback, ServiceWorkerClientInfo()));
71 return;
72 }
73
74 FrameTreeNode* frame_tree_node = render_frame_host->frame_tree_node();
75
76 // Focus the frame in the frame tree node, in case it has changed.
77 frame_tree_node->frame_tree()->SetFocusedFrame(frame_tree_node);
78
79 // Focus the frame's view to make sure the frame is now considered as focused.
80 render_frame_host->GetView()->Focus();
81
82 // Move the web contents to the foreground.
83 web_contents->Activate();
84
85 GetClientInfoOnUIThread(render_process_id, render_frame_id, callback);
86 }
87
73 } // anonymous namespace 88 } // anonymous namespace
74 89
75 ServiceWorkerProviderHost::ServiceWorkerProviderHost( 90 ServiceWorkerProviderHost::ServiceWorkerProviderHost(
76 int render_process_id, 91 int render_process_id,
77 int render_frame_id, 92 int render_frame_id,
78 int provider_id, 93 int provider_id,
79 base::WeakPtr<ServiceWorkerContextCore> context, 94 base::WeakPtr<ServiceWorkerContextCore> context,
80 ServiceWorkerDispatcherHost* dispatcher_host) 95 ServiceWorkerDispatcherHost* dispatcher_host)
81 : render_process_id_(render_process_id), 96 : render_process_id_(render_process_id),
82 render_frame_id_(render_frame_id), 97 render_frame_id_(render_frame_id),
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 UpdateMessagePortsWithNewRoutes(sent_message_port_ids, 293 UpdateMessagePortsWithNewRoutes(sent_message_port_ids,
279 &new_routing_ids); 294 &new_routing_ids);
280 295
281 Send(new ServiceWorkerMsg_MessageToDocument( 296 Send(new ServiceWorkerMsg_MessageToDocument(
282 kDocumentMainThreadId, provider_id(), 297 kDocumentMainThreadId, provider_id(),
283 message, 298 message,
284 sent_message_port_ids, 299 sent_message_port_ids,
285 new_routing_ids)); 300 new_routing_ids));
286 } 301 }
287 302
288 void ServiceWorkerProviderHost::Focus(const FocusCallback& callback) { 303 void ServiceWorkerProviderHost::Focus(const GetClientInfoCallback& callback) {
289 BrowserThread::PostTask( 304 BrowserThread::PostTask(
290 BrowserThread::UI, FROM_HERE, 305 BrowserThread::UI, FROM_HERE,
291 base::Bind(&FocusOnUIThread, 306 base::Bind(&FocusOnUIThread,
292 render_process_id_, 307 render_process_id_,
293 render_frame_id_, 308 render_frame_id_,
294 callback)); 309 callback));
295 } 310 }
296 311
297 void ServiceWorkerProviderHost::GetClientInfo( 312 void ServiceWorkerProviderHost::GetClientInfo(
298 const GetClientInfoCallback& callback) const { 313 const GetClientInfoCallback& callback) const {
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 return context_ != NULL; 513 return context_ != NULL;
499 } 514 }
500 515
501 void ServiceWorkerProviderHost::Send(IPC::Message* message) const { 516 void ServiceWorkerProviderHost::Send(IPC::Message* message) const {
502 DCHECK(dispatcher_host_); 517 DCHECK(dispatcher_host_);
503 DCHECK(IsReadyToSendMessages()); 518 DCHECK(IsReadyToSendMessages());
504 dispatcher_host_->Send(message); 519 dispatcher_host_->Send(message);
505 } 520 }
506 521
507 } // namespace content 522 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/service_worker/service_worker_provider_host.h ('k') | content/browser/service_worker/service_worker_version.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698