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

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

Issue 985113002: ServiceWorker: coalesce all SWClientInfo request into one task. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@relax_sw_openWindow
Patch Set: Created 5 years, 9 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" 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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698