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_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" | 8 #include "content/browser/frame_host/frame_tree.h" |
9 #include "content/browser/frame_host/frame_tree_node.h" | 9 #include "content/browser/frame_host/frame_tree_node.h" |
10 #include "content/browser/frame_host/render_frame_host_impl.h" | 10 #include "content/browser/frame_host/render_frame_host_impl.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 #include "content/common/service_worker/service_worker_types.h" | 23 #include "content/common/service_worker/service_worker_types.h" |
24 #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" | 25 #include "content/public/browser/render_widget_host_view.h" |
26 #include "content/public/browser/web_contents.h" | 26 #include "content/public/browser/web_contents.h" |
27 #include "content/public/common/child_process_host.h" | 27 #include "content/public/common/child_process_host.h" |
28 | 28 |
29 namespace content { | 29 namespace content { |
30 | 30 |
31 namespace { | 31 namespace { |
32 | 32 |
33 ServiceWorkerClientInfo GetClientInfoOnUIThread( | |
34 int render_process_id, | |
35 int render_frame_id) { | |
36 RenderFrameHostImpl* render_frame_host = | |
37 RenderFrameHostImpl::FromID(render_process_id, render_frame_id); | |
38 if (!render_frame_host) | |
39 return ServiceWorkerClientInfo(); | |
40 | |
41 // TODO(mlamouri,michaeln): it is possible to end up collecting information | |
42 // for a frame that is actually being navigated and isn't exactly what we are | |
43 // expecting. | |
44 return ServiceWorkerClientInfo( | |
45 render_frame_host->GetVisibilityState(), | |
46 render_frame_host->IsFocused(), | |
47 render_frame_host->GetLastCommittedURL(), | |
48 render_frame_host->GetParent() ? REQUEST_CONTEXT_FRAME_TYPE_NESTED | |
49 : REQUEST_CONTEXT_FRAME_TYPE_TOP_LEVEL); | |
50 } | |
51 | |
52 ServiceWorkerClientInfo FocusOnUIThread( | 33 ServiceWorkerClientInfo FocusOnUIThread( |
53 int render_process_id, | 34 int render_process_id, |
54 int render_frame_id) { | 35 int render_frame_id) { |
55 RenderFrameHostImpl* render_frame_host = | 36 RenderFrameHostImpl* render_frame_host = |
56 RenderFrameHostImpl::FromID(render_process_id, render_frame_id); | 37 RenderFrameHostImpl::FromID(render_process_id, render_frame_id); |
57 WebContentsImpl* web_contents = static_cast<WebContentsImpl*>( | 38 WebContentsImpl* web_contents = static_cast<WebContentsImpl*>( |
58 WebContents::FromRenderFrameHost(render_frame_host)); | 39 WebContents::FromRenderFrameHost(render_frame_host)); |
59 | 40 |
60 if (!render_frame_host || !web_contents) | 41 if (!render_frame_host || !web_contents) |
61 return ServiceWorkerClientInfo(); | 42 return ServiceWorkerClientInfo(); |
62 | 43 |
63 FrameTreeNode* frame_tree_node = render_frame_host->frame_tree_node(); | 44 FrameTreeNode* frame_tree_node = render_frame_host->frame_tree_node(); |
64 | 45 |
65 // Focus the frame in the frame tree node, in case it has changed. | 46 // Focus the frame in the frame tree node, in case it has changed. |
66 frame_tree_node->frame_tree()->SetFocusedFrame(frame_tree_node); | 47 frame_tree_node->frame_tree()->SetFocusedFrame(frame_tree_node); |
67 | 48 |
68 // Focus the frame's view to make sure the frame is now considered as focused. | 49 // Focus the frame's view to make sure the frame is now considered as focused. |
69 render_frame_host->GetView()->Focus(); | 50 render_frame_host->GetView()->Focus(); |
70 | 51 |
71 // Move the web contents to the foreground. | 52 // Move the web contents to the foreground. |
72 web_contents->Activate(); | 53 web_contents->Activate(); |
73 | 54 |
74 return GetClientInfoOnUIThread(render_process_id, render_frame_id); | 55 return ServiceWorkerProviderHost::GetClientInfoOnUI( |
| 56 render_process_id, render_frame_id); |
75 } | 57 } |
76 | 58 |
77 } // anonymous namespace | 59 } // anonymous namespace |
78 | 60 |
79 ServiceWorkerProviderHost::ServiceWorkerProviderHost( | 61 ServiceWorkerProviderHost::ServiceWorkerProviderHost( |
80 int render_process_id, | 62 int render_process_id, |
81 int render_frame_id, | 63 int render_frame_id, |
82 int provider_id, | 64 int provider_id, |
83 ServiceWorkerProviderType provider_type, | 65 ServiceWorkerProviderType provider_type, |
84 base::WeakPtr<ServiceWorkerContextCore> context, | 66 base::WeakPtr<ServiceWorkerContextCore> context, |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
298 base::Bind(&FocusOnUIThread, | 280 base::Bind(&FocusOnUIThread, |
299 render_process_id_, | 281 render_process_id_, |
300 render_frame_id_), | 282 render_frame_id_), |
301 callback); | 283 callback); |
302 } | 284 } |
303 | 285 |
304 void ServiceWorkerProviderHost::GetClientInfo( | 286 void ServiceWorkerProviderHost::GetClientInfo( |
305 const GetClientInfoCallback& callback) const { | 287 const GetClientInfoCallback& callback) const { |
306 BrowserThread::PostTaskAndReplyWithResult( | 288 BrowserThread::PostTaskAndReplyWithResult( |
307 BrowserThread::UI, FROM_HERE, | 289 BrowserThread::UI, FROM_HERE, |
308 base::Bind(&GetClientInfoOnUIThread, | 290 base::Bind(&ServiceWorkerProviderHost::GetClientInfoOnUI, |
309 render_process_id_, | 291 render_process_id_, |
310 render_frame_id_), | 292 render_frame_id_), |
311 callback); | 293 callback); |
312 } | 294 } |
313 | 295 |
| 296 // static |
| 297 ServiceWorkerClientInfo ServiceWorkerProviderHost::GetClientInfoOnUI( |
| 298 int render_process_id, int render_frame_id) { |
| 299 RenderFrameHostImpl* render_frame_host = |
| 300 RenderFrameHostImpl::FromID(render_process_id, render_frame_id); |
| 301 if (!render_frame_host) |
| 302 return ServiceWorkerClientInfo(); |
| 303 |
| 304 // TODO(mlamouri,michaeln): it is possible to end up collecting information |
| 305 // for a frame that is actually being navigated and isn't exactly what we are |
| 306 // expecting. |
| 307 return ServiceWorkerClientInfo( |
| 308 render_frame_host->GetVisibilityState(), |
| 309 render_frame_host->IsFocused(), |
| 310 render_frame_host->GetLastCommittedURL(), |
| 311 render_frame_host->GetParent() ? REQUEST_CONTEXT_FRAME_TYPE_NESTED |
| 312 : REQUEST_CONTEXT_FRAME_TYPE_TOP_LEVEL); |
| 313 } |
| 314 |
314 void ServiceWorkerProviderHost::AddScopedProcessReferenceToPattern( | 315 void ServiceWorkerProviderHost::AddScopedProcessReferenceToPattern( |
315 const GURL& pattern) { | 316 const GURL& pattern) { |
316 associated_patterns_.push_back(pattern); | 317 associated_patterns_.push_back(pattern); |
317 IncreaseProcessReference(pattern); | 318 IncreaseProcessReference(pattern); |
318 } | 319 } |
319 | 320 |
320 void ServiceWorkerProviderHost::ClaimedByRegistration( | 321 void ServiceWorkerProviderHost::ClaimedByRegistration( |
321 ServiceWorkerRegistration* registration) { | 322 ServiceWorkerRegistration* registration) { |
322 DCHECK(registration->active_version()); | 323 DCHECK(registration->active_version()); |
323 is_claiming_ = true; | 324 is_claiming_ = true; |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
510 return context_ != NULL; | 511 return context_ != NULL; |
511 } | 512 } |
512 | 513 |
513 void ServiceWorkerProviderHost::Send(IPC::Message* message) const { | 514 void ServiceWorkerProviderHost::Send(IPC::Message* message) const { |
514 DCHECK(dispatcher_host_); | 515 DCHECK(dispatcher_host_); |
515 DCHECK(IsReadyToSendMessages()); | 516 DCHECK(IsReadyToSendMessages()); |
516 dispatcher_host_->Send(message); | 517 dispatcher_host_->Send(message); |
517 } | 518 } |
518 | 519 |
519 } // namespace content | 520 } // namespace content |
OLD | NEW |