| 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 |