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

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

Issue 1149383004: [3/5 chromium] Shows the clients which are controlled by ServiceWorker in DevTools. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: incorporated dcheng's comment Created 5 years, 6 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/guid.h" 7 #include "base/guid.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "content/browser/frame_host/frame_tree.h" 9 #include "content/browser/frame_host/frame_tree.h"
10 #include "content/browser/frame_host/frame_tree_node.h" 10 #include "content/browser/frame_host/frame_tree_node.h"
(...skipping 13 matching lines...) Expand all
24 #include "content/common/service_worker/service_worker_types.h" 24 #include "content/common/service_worker/service_worker_types.h"
25 #include "content/public/browser/render_frame_host.h" 25 #include "content/public/browser/render_frame_host.h"
26 #include "content/public/browser/render_widget_host_view.h" 26 #include "content/public/browser/render_widget_host_view.h"
27 #include "content/public/browser/web_contents.h" 27 #include "content/public/browser/web_contents.h"
28 #include "content/public/common/child_process_host.h" 28 #include "content/public/common/child_process_host.h"
29 29
30 namespace content { 30 namespace content {
31 31
32 namespace { 32 namespace {
33 33
34 ServiceWorkerClientInfo FocusOnUIThread( 34 ServiceWorkerClientInfo FocusOnUIThread(int render_process_id, int route_id) {
dcheng 2015/06/17 23:21:13 Nit: keep this named "render_frame_id"
horo 2015/06/17 23:51:07 Done.
35 int render_process_id,
36 int render_frame_id) {
37 RenderFrameHostImpl* render_frame_host = 35 RenderFrameHostImpl* render_frame_host =
38 RenderFrameHostImpl::FromID(render_process_id, render_frame_id); 36 RenderFrameHostImpl::FromID(render_process_id, route_id);
39 WebContentsImpl* web_contents = static_cast<WebContentsImpl*>( 37 WebContentsImpl* web_contents = static_cast<WebContentsImpl*>(
40 WebContents::FromRenderFrameHost(render_frame_host)); 38 WebContents::FromRenderFrameHost(render_frame_host));
41 39
42 if (!render_frame_host || !web_contents) 40 if (!render_frame_host || !web_contents)
43 return ServiceWorkerClientInfo(); 41 return ServiceWorkerClientInfo();
44 42
45 FrameTreeNode* frame_tree_node = render_frame_host->frame_tree_node(); 43 FrameTreeNode* frame_tree_node = render_frame_host->frame_tree_node();
46 44
47 // Focus the frame in the frame tree node, in case it has changed. 45 // Focus the frame in the frame tree node, in case it has changed.
48 frame_tree_node->frame_tree()->SetFocusedFrame(frame_tree_node); 46 frame_tree_node->frame_tree()->SetFocusedFrame(frame_tree_node);
49 47
50 // Focus the frame's view to make sure the frame is now considered as focused. 48 // Focus the frame's view to make sure the frame is now considered as focused.
51 render_frame_host->GetView()->Focus(); 49 render_frame_host->GetView()->Focus();
52 50
53 // Move the web contents to the foreground. 51 // Move the web contents to the foreground.
54 web_contents->Activate(); 52 web_contents->Activate();
55 53
56 return ServiceWorkerProviderHost::GetWindowClientInfoOnUI(render_process_id, 54 return ServiceWorkerProviderHost::GetWindowClientInfoOnUI(render_process_id,
57 render_frame_id); 55 route_id);
58 } 56 }
59 57
60 } // anonymous namespace 58 } // anonymous namespace
61 59
62 ServiceWorkerProviderHost::OneShotGetReadyCallback::OneShotGetReadyCallback( 60 ServiceWorkerProviderHost::OneShotGetReadyCallback::OneShotGetReadyCallback(
63 const GetRegistrationForReadyCallback& callback) 61 const GetRegistrationForReadyCallback& callback)
64 : callback(callback), 62 : callback(callback),
65 called(false) { 63 called(false) {
66 } 64 }
67 65
68 ServiceWorkerProviderHost::OneShotGetReadyCallback::~OneShotGetReadyCallback() { 66 ServiceWorkerProviderHost::OneShotGetReadyCallback::~OneShotGetReadyCallback() {
69 } 67 }
70 68
71 ServiceWorkerProviderHost::ServiceWorkerProviderHost( 69 ServiceWorkerProviderHost::ServiceWorkerProviderHost(
72 int render_process_id, 70 int render_process_id,
73 int render_frame_id, 71 int route_id,
74 int provider_id, 72 int provider_id,
75 ServiceWorkerProviderType provider_type, 73 ServiceWorkerProviderType provider_type,
76 base::WeakPtr<ServiceWorkerContextCore> context, 74 base::WeakPtr<ServiceWorkerContextCore> context,
77 ServiceWorkerDispatcherHost* dispatcher_host) 75 ServiceWorkerDispatcherHost* dispatcher_host)
78 : client_uuid_(base::GenerateGUID()), 76 : client_uuid_(base::GenerateGUID()),
79 render_process_id_(render_process_id), 77 render_process_id_(render_process_id),
80 render_frame_id_(render_frame_id), 78 route_id_(route_id),
81 render_thread_id_(kDocumentMainThreadId), 79 render_thread_id_(kDocumentMainThreadId),
82 provider_id_(provider_id), 80 provider_id_(provider_id),
83 provider_type_(provider_type), 81 provider_type_(provider_type),
84 context_(context), 82 context_(context),
85 dispatcher_host_(dispatcher_host), 83 dispatcher_host_(dispatcher_host),
86 allow_association_(true) { 84 allow_association_(true) {
87 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, render_process_id_); 85 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, render_process_id_);
88 DCHECK_NE(SERVICE_WORKER_PROVIDER_UNKNOWN, provider_type_); 86 DCHECK_NE(SERVICE_WORKER_PROVIDER_UNKNOWN, provider_type_);
89 if (provider_type_ == SERVICE_WORKER_PROVIDER_FOR_CONTROLLER) { 87 if (provider_type_ == SERVICE_WORKER_PROVIDER_FOR_CONTROLLER) {
90 // Actual thread id is set when the service worker context gets started. 88 // Actual thread id is set when the service worker context gets started.
(...skipping 14 matching lines...) Expand all
105 103
106 for (auto& key_registration : matching_registrations_) { 104 for (auto& key_registration : matching_registrations_) {
107 DecreaseProcessReference(key_registration.second->pattern()); 105 DecreaseProcessReference(key_registration.second->pattern());
108 key_registration.second->RemoveListener(this); 106 key_registration.second->RemoveListener(this);
109 } 107 }
110 108
111 for (const GURL& pattern : associated_patterns_) 109 for (const GURL& pattern : associated_patterns_)
112 DecreaseProcessReference(pattern); 110 DecreaseProcessReference(pattern);
113 } 111 }
114 112
113 int ServiceWorkerProviderHost::frame_id() const {
114 if (provider_type_ == SERVICE_WORKER_PROVIDER_FOR_WINDOW)
115 return route_id_;
116 return MSG_ROUTING_NONE;
117 }
118
115 void ServiceWorkerProviderHost::OnVersionAttributesChanged( 119 void ServiceWorkerProviderHost::OnVersionAttributesChanged(
116 ServiceWorkerRegistration* registration, 120 ServiceWorkerRegistration* registration,
117 ChangedVersionAttributesMask changed_mask, 121 ChangedVersionAttributesMask changed_mask,
118 const ServiceWorkerRegistrationInfo& info) { 122 const ServiceWorkerRegistrationInfo& info) {
119 if (!get_ready_callback_ || get_ready_callback_->called) 123 if (!get_ready_callback_ || get_ready_callback_->called)
120 return; 124 return;
121 if (changed_mask.active_changed() && registration->active_version()) { 125 if (changed_mask.active_changed() && registration->active_version()) {
122 // Wait until the state change so we don't send the get for ready 126 // Wait until the state change so we don't send the get for ready
123 // registration complete message before set version attributes message. 127 // registration complete message before set version attributes message.
124 registration->active_version()->RegisterStatusChangeCallback(base::Bind( 128 registration->active_version()->RegisterStatusChangeCallback(base::Bind(
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 &new_routing_ids); 383 &new_routing_ids);
380 384
381 Send(new ServiceWorkerMsg_MessageToDocument( 385 Send(new ServiceWorkerMsg_MessageToDocument(
382 kDocumentMainThreadId, provider_id(), 386 kDocumentMainThreadId, provider_id(),
383 message, 387 message,
384 sent_message_ports, 388 sent_message_ports,
385 new_routing_ids)); 389 new_routing_ids));
386 } 390 }
387 391
388 void ServiceWorkerProviderHost::Focus(const GetClientInfoCallback& callback) { 392 void ServiceWorkerProviderHost::Focus(const GetClientInfoCallback& callback) {
393 if (provider_type_ != SERVICE_WORKER_PROVIDER_FOR_WINDOW) {
394 callback.Run(ServiceWorkerClientInfo());
395 return;
396 }
389 BrowserThread::PostTaskAndReplyWithResult( 397 BrowserThread::PostTaskAndReplyWithResult(
390 BrowserThread::UI, FROM_HERE, 398 BrowserThread::UI, FROM_HERE,
391 base::Bind(&FocusOnUIThread, 399 base::Bind(&FocusOnUIThread, render_process_id_, route_id_), callback);
392 render_process_id_,
393 render_frame_id_),
394 callback);
395 } 400 }
396 401
397 void ServiceWorkerProviderHost::GetWindowClientInfo( 402 void ServiceWorkerProviderHost::GetWindowClientInfo(
398 const GetClientInfoCallback& callback) const { 403 const GetClientInfoCallback& callback) const {
399 BrowserThread::PostTaskAndReplyWithResult( 404 BrowserThread::PostTaskAndReplyWithResult(
400 BrowserThread::UI, FROM_HERE, 405 BrowserThread::UI, FROM_HERE,
401 base::Bind(&ServiceWorkerProviderHost::GetWindowClientInfoOnUI, 406 base::Bind(&ServiceWorkerProviderHost::GetWindowClientInfoOnUI,
402 render_process_id_, render_frame_id_), 407 render_process_id_, route_id_),
403 callback); 408 callback);
404 } 409 }
405 410
406 // static 411 // static
407 ServiceWorkerClientInfo ServiceWorkerProviderHost::GetWindowClientInfoOnUI( 412 ServiceWorkerClientInfo ServiceWorkerProviderHost::GetWindowClientInfoOnUI(
408 int render_process_id, 413 int render_process_id,
409 int render_frame_id) { 414 int route_id) {
410 RenderFrameHostImpl* render_frame_host = 415 RenderFrameHostImpl* render_frame_host =
411 RenderFrameHostImpl::FromID(render_process_id, render_frame_id); 416 RenderFrameHostImpl::FromID(render_process_id, route_id);
412 if (!render_frame_host) 417 if (!render_frame_host)
413 return ServiceWorkerClientInfo(); 418 return ServiceWorkerClientInfo();
414 419
415 // TODO(mlamouri,michaeln): it is possible to end up collecting information 420 // TODO(mlamouri,michaeln): it is possible to end up collecting information
416 // for a frame that is actually being navigated and isn't exactly what we are 421 // for a frame that is actually being navigated and isn't exactly what we are
417 // expecting. 422 // expecting.
418 return ServiceWorkerClientInfo( 423 return ServiceWorkerClientInfo(
419 render_frame_host->GetVisibilityState(), 424 render_frame_host->GetVisibilityState(),
420 render_frame_host->IsFocused(), 425 render_frame_host->IsFocused(),
421 render_frame_host->GetLastCommittedURL(), 426 render_frame_host->GetLastCommittedURL(),
(...skipping 24 matching lines...) Expand all
446 const GetRegistrationForReadyCallback& callback) { 451 const GetRegistrationForReadyCallback& callback) {
447 if (get_ready_callback_) 452 if (get_ready_callback_)
448 return false; 453 return false;
449 get_ready_callback_.reset(new OneShotGetReadyCallback(callback)); 454 get_ready_callback_.reset(new OneShotGetReadyCallback(callback));
450 ReturnRegistrationForReadyIfNeeded(); 455 ReturnRegistrationForReadyIfNeeded();
451 return true; 456 return true;
452 } 457 }
453 458
454 void ServiceWorkerProviderHost::PrepareForCrossSiteTransfer() { 459 void ServiceWorkerProviderHost::PrepareForCrossSiteTransfer() {
455 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, render_process_id_); 460 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, render_process_id_);
456 DCHECK_NE(MSG_ROUTING_NONE, render_frame_id_); 461 DCHECK_NE(MSG_ROUTING_NONE, route_id_);
457 DCHECK_EQ(kDocumentMainThreadId, render_thread_id_); 462 DCHECK_EQ(kDocumentMainThreadId, render_thread_id_);
458 DCHECK_NE(SERVICE_WORKER_PROVIDER_UNKNOWN, provider_type_); 463 DCHECK_NE(SERVICE_WORKER_PROVIDER_UNKNOWN, provider_type_);
459 464
460 for (const GURL& pattern : associated_patterns_) 465 for (const GURL& pattern : associated_patterns_)
461 DecreaseProcessReference(pattern); 466 DecreaseProcessReference(pattern);
462 467
463 for (auto& key_registration : matching_registrations_) 468 for (auto& key_registration : matching_registrations_)
464 DecreaseProcessReference(key_registration.second->pattern()); 469 DecreaseProcessReference(key_registration.second->pattern());
465 470
466 if (associated_registration_.get()) { 471 if (associated_registration_.get()) {
467 if (dispatcher_host_) { 472 if (dispatcher_host_) {
468 Send(new ServiceWorkerMsg_DisassociateRegistration( 473 Send(new ServiceWorkerMsg_DisassociateRegistration(
469 render_thread_id_, provider_id())); 474 render_thread_id_, provider_id()));
470 } 475 }
471 } 476 }
472 477
473 render_process_id_ = ChildProcessHost::kInvalidUniqueID; 478 render_process_id_ = ChildProcessHost::kInvalidUniqueID;
474 render_frame_id_ = MSG_ROUTING_NONE; 479 route_id_ = MSG_ROUTING_NONE;
475 render_thread_id_ = kInvalidEmbeddedWorkerThreadId; 480 render_thread_id_ = kInvalidEmbeddedWorkerThreadId;
476 provider_id_ = kInvalidServiceWorkerProviderId; 481 provider_id_ = kInvalidServiceWorkerProviderId;
477 provider_type_ = SERVICE_WORKER_PROVIDER_UNKNOWN; 482 provider_type_ = SERVICE_WORKER_PROVIDER_UNKNOWN;
478 dispatcher_host_ = nullptr; 483 dispatcher_host_ = nullptr;
479 } 484 }
480 485
481 void ServiceWorkerProviderHost::CompleteCrossSiteTransfer( 486 void ServiceWorkerProviderHost::CompleteCrossSiteTransfer(
482 int new_process_id, 487 int new_process_id,
483 int new_frame_id, 488 int new_frame_id,
484 int new_provider_id, 489 int new_provider_id,
485 ServiceWorkerProviderType new_provider_type, 490 ServiceWorkerProviderType new_provider_type,
486 ServiceWorkerDispatcherHost* new_dispatcher_host) { 491 ServiceWorkerDispatcherHost* new_dispatcher_host) {
487 DCHECK_EQ(ChildProcessHost::kInvalidUniqueID, render_process_id_); 492 DCHECK_EQ(ChildProcessHost::kInvalidUniqueID, render_process_id_);
488 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, new_process_id); 493 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, new_process_id);
489 DCHECK_NE(MSG_ROUTING_NONE, new_frame_id); 494 DCHECK_NE(MSG_ROUTING_NONE, new_frame_id);
490 495
491 render_process_id_ = new_process_id; 496 render_process_id_ = new_process_id;
492 render_frame_id_ = new_frame_id; 497 route_id_ = new_frame_id;
493 render_thread_id_ = kDocumentMainThreadId; 498 render_thread_id_ = kDocumentMainThreadId;
494 provider_id_ = new_provider_id; 499 provider_id_ = new_provider_id;
495 provider_type_ = new_provider_type; 500 provider_type_ = new_provider_type;
496 dispatcher_host_ = new_dispatcher_host; 501 dispatcher_host_ = new_dispatcher_host;
497 502
498 for (const GURL& pattern : associated_patterns_) 503 for (const GURL& pattern : associated_patterns_)
499 IncreaseProcessReference(pattern); 504 IncreaseProcessReference(pattern);
500 505
501 for (auto& key_registration : matching_registrations_) 506 for (auto& key_registration : matching_registrations_)
502 IncreaseProcessReference(key_registration.second->pattern()); 507 IncreaseProcessReference(key_registration.second->pattern());
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
650 return context_ != NULL; 655 return context_ != NULL;
651 } 656 }
652 657
653 void ServiceWorkerProviderHost::Send(IPC::Message* message) const { 658 void ServiceWorkerProviderHost::Send(IPC::Message* message) const {
654 DCHECK(dispatcher_host_); 659 DCHECK(dispatcher_host_);
655 DCHECK(IsReadyToSendMessages()); 660 DCHECK(IsReadyToSendMessages());
656 dispatcher_host_->Send(message); 661 dispatcher_host_->Send(message);
657 } 662 }
658 663
659 } // namespace content 664 } // 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