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

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,
35 int render_process_id, 35 int render_frame_id) {
36 int render_frame_id) {
37 RenderFrameHostImpl* render_frame_host = 36 RenderFrameHostImpl* render_frame_host =
38 RenderFrameHostImpl::FromID(render_process_id, render_frame_id); 37 RenderFrameHostImpl::FromID(render_process_id, render_frame_id);
39 WebContentsImpl* web_contents = static_cast<WebContentsImpl*>( 38 WebContentsImpl* web_contents = static_cast<WebContentsImpl*>(
40 WebContents::FromRenderFrameHost(render_frame_host)); 39 WebContents::FromRenderFrameHost(render_frame_host));
41 40
42 if (!render_frame_host || !web_contents) 41 if (!render_frame_host || !web_contents)
43 return ServiceWorkerClientInfo(); 42 return ServiceWorkerClientInfo();
44 43
45 FrameTreeNode* frame_tree_node = render_frame_host->frame_tree_node(); 44 FrameTreeNode* frame_tree_node = render_frame_host->frame_tree_node();
46 45
(...skipping 16 matching lines...) Expand all
63 const GetRegistrationForReadyCallback& callback) 62 const GetRegistrationForReadyCallback& callback)
64 : callback(callback), 63 : callback(callback),
65 called(false) { 64 called(false) {
66 } 65 }
67 66
68 ServiceWorkerProviderHost::OneShotGetReadyCallback::~OneShotGetReadyCallback() { 67 ServiceWorkerProviderHost::OneShotGetReadyCallback::~OneShotGetReadyCallback() {
69 } 68 }
70 69
71 ServiceWorkerProviderHost::ServiceWorkerProviderHost( 70 ServiceWorkerProviderHost::ServiceWorkerProviderHost(
72 int render_process_id, 71 int render_process_id,
73 int render_frame_id, 72 int route_id,
74 int provider_id, 73 int provider_id,
75 ServiceWorkerProviderType provider_type, 74 ServiceWorkerProviderType provider_type,
76 base::WeakPtr<ServiceWorkerContextCore> context, 75 base::WeakPtr<ServiceWorkerContextCore> context,
77 ServiceWorkerDispatcherHost* dispatcher_host) 76 ServiceWorkerDispatcherHost* dispatcher_host)
78 : client_uuid_(base::GenerateGUID()), 77 : client_uuid_(base::GenerateGUID()),
79 render_process_id_(render_process_id), 78 render_process_id_(render_process_id),
80 render_frame_id_(render_frame_id), 79 route_id_(route_id),
81 render_thread_id_(kDocumentMainThreadId), 80 render_thread_id_(kDocumentMainThreadId),
82 provider_id_(provider_id), 81 provider_id_(provider_id),
83 provider_type_(provider_type), 82 provider_type_(provider_type),
84 context_(context), 83 context_(context),
85 dispatcher_host_(dispatcher_host), 84 dispatcher_host_(dispatcher_host),
86 allow_association_(true) { 85 allow_association_(true) {
87 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, render_process_id_); 86 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, render_process_id_);
88 DCHECK_NE(SERVICE_WORKER_PROVIDER_UNKNOWN, provider_type_); 87 DCHECK_NE(SERVICE_WORKER_PROVIDER_UNKNOWN, provider_type_);
89 if (provider_type_ == SERVICE_WORKER_PROVIDER_FOR_CONTROLLER) { 88 if (provider_type_ == SERVICE_WORKER_PROVIDER_FOR_CONTROLLER) {
90 // Actual thread id is set when the service worker context gets started. 89 // Actual thread id is set when the service worker context gets started.
(...skipping 14 matching lines...) Expand all
105 104
106 for (auto& key_registration : matching_registrations_) { 105 for (auto& key_registration : matching_registrations_) {
107 DecreaseProcessReference(key_registration.second->pattern()); 106 DecreaseProcessReference(key_registration.second->pattern());
108 key_registration.second->RemoveListener(this); 107 key_registration.second->RemoveListener(this);
109 } 108 }
110 109
111 for (const GURL& pattern : associated_patterns_) 110 for (const GURL& pattern : associated_patterns_)
112 DecreaseProcessReference(pattern); 111 DecreaseProcessReference(pattern);
113 } 112 }
114 113
114 int ServiceWorkerProviderHost::frame_id() const {
115 if (provider_type_ == SERVICE_WORKER_PROVIDER_FOR_WINDOW)
116 return route_id_;
117 return MSG_ROUTING_NONE;
118 }
119
115 void ServiceWorkerProviderHost::OnVersionAttributesChanged( 120 void ServiceWorkerProviderHost::OnVersionAttributesChanged(
116 ServiceWorkerRegistration* registration, 121 ServiceWorkerRegistration* registration,
117 ChangedVersionAttributesMask changed_mask, 122 ChangedVersionAttributesMask changed_mask,
118 const ServiceWorkerRegistrationInfo& info) { 123 const ServiceWorkerRegistrationInfo& info) {
119 if (!get_ready_callback_ || get_ready_callback_->called) 124 if (!get_ready_callback_ || get_ready_callback_->called)
120 return; 125 return;
121 if (changed_mask.active_changed() && registration->active_version()) { 126 if (changed_mask.active_changed() && registration->active_version()) {
122 // Wait until the state change so we don't send the get for ready 127 // Wait until the state change so we don't send the get for ready
123 // registration complete message before set version attributes message. 128 // registration complete message before set version attributes message.
124 registration->active_version()->RegisterStatusChangeCallback(base::Bind( 129 registration->active_version()->RegisterStatusChangeCallback(base::Bind(
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 &new_routing_ids); 384 &new_routing_ids);
380 385
381 Send(new ServiceWorkerMsg_MessageToDocument( 386 Send(new ServiceWorkerMsg_MessageToDocument(
382 kDocumentMainThreadId, provider_id(), 387 kDocumentMainThreadId, provider_id(),
383 message, 388 message,
384 sent_message_ports, 389 sent_message_ports,
385 new_routing_ids)); 390 new_routing_ids));
386 } 391 }
387 392
388 void ServiceWorkerProviderHost::Focus(const GetClientInfoCallback& callback) { 393 void ServiceWorkerProviderHost::Focus(const GetClientInfoCallback& callback) {
394 if (provider_type_ != SERVICE_WORKER_PROVIDER_FOR_WINDOW) {
395 callback.Run(ServiceWorkerClientInfo());
396 return;
397 }
389 BrowserThread::PostTaskAndReplyWithResult( 398 BrowserThread::PostTaskAndReplyWithResult(
390 BrowserThread::UI, FROM_HERE, 399 BrowserThread::UI, FROM_HERE,
391 base::Bind(&FocusOnUIThread, 400 base::Bind(&FocusOnUIThread, render_process_id_, route_id_), callback);
392 render_process_id_,
393 render_frame_id_),
394 callback);
395 } 401 }
396 402
397 void ServiceWorkerProviderHost::GetWindowClientInfo( 403 void ServiceWorkerProviderHost::GetWindowClientInfo(
398 const GetClientInfoCallback& callback) const { 404 const GetClientInfoCallback& callback) const {
405 if (provider_type_ != SERVICE_WORKER_PROVIDER_FOR_WINDOW) {
406 callback.Run(ServiceWorkerClientInfo());
407 return;
408 }
399 BrowserThread::PostTaskAndReplyWithResult( 409 BrowserThread::PostTaskAndReplyWithResult(
400 BrowserThread::UI, FROM_HERE, 410 BrowserThread::UI, FROM_HERE,
401 base::Bind(&ServiceWorkerProviderHost::GetWindowClientInfoOnUI, 411 base::Bind(&ServiceWorkerProviderHost::GetWindowClientInfoOnUI,
402 render_process_id_, render_frame_id_), 412 render_process_id_, route_id_),
403 callback); 413 callback);
404 } 414 }
405 415
406 // static 416 // static
407 ServiceWorkerClientInfo ServiceWorkerProviderHost::GetWindowClientInfoOnUI( 417 ServiceWorkerClientInfo ServiceWorkerProviderHost::GetWindowClientInfoOnUI(
408 int render_process_id, 418 int render_process_id,
409 int render_frame_id) { 419 int render_frame_id) {
410 RenderFrameHostImpl* render_frame_host = 420 RenderFrameHostImpl* render_frame_host =
411 RenderFrameHostImpl::FromID(render_process_id, render_frame_id); 421 RenderFrameHostImpl::FromID(render_process_id, render_frame_id);
412 if (!render_frame_host) 422 if (!render_frame_host)
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 const GetRegistrationForReadyCallback& callback) { 456 const GetRegistrationForReadyCallback& callback) {
447 if (get_ready_callback_) 457 if (get_ready_callback_)
448 return false; 458 return false;
449 get_ready_callback_.reset(new OneShotGetReadyCallback(callback)); 459 get_ready_callback_.reset(new OneShotGetReadyCallback(callback));
450 ReturnRegistrationForReadyIfNeeded(); 460 ReturnRegistrationForReadyIfNeeded();
451 return true; 461 return true;
452 } 462 }
453 463
454 void ServiceWorkerProviderHost::PrepareForCrossSiteTransfer() { 464 void ServiceWorkerProviderHost::PrepareForCrossSiteTransfer() {
455 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, render_process_id_); 465 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, render_process_id_);
456 DCHECK_NE(MSG_ROUTING_NONE, render_frame_id_); 466 DCHECK_NE(MSG_ROUTING_NONE, route_id_);
457 DCHECK_EQ(kDocumentMainThreadId, render_thread_id_); 467 DCHECK_EQ(kDocumentMainThreadId, render_thread_id_);
458 DCHECK_NE(SERVICE_WORKER_PROVIDER_UNKNOWN, provider_type_); 468 DCHECK_NE(SERVICE_WORKER_PROVIDER_UNKNOWN, provider_type_);
459 469
460 for (const GURL& pattern : associated_patterns_) 470 for (const GURL& pattern : associated_patterns_)
461 DecreaseProcessReference(pattern); 471 DecreaseProcessReference(pattern);
462 472
463 for (auto& key_registration : matching_registrations_) 473 for (auto& key_registration : matching_registrations_)
464 DecreaseProcessReference(key_registration.second->pattern()); 474 DecreaseProcessReference(key_registration.second->pattern());
465 475
466 if (associated_registration_.get()) { 476 if (associated_registration_.get()) {
467 if (dispatcher_host_) { 477 if (dispatcher_host_) {
468 Send(new ServiceWorkerMsg_DisassociateRegistration( 478 Send(new ServiceWorkerMsg_DisassociateRegistration(
469 render_thread_id_, provider_id())); 479 render_thread_id_, provider_id()));
470 } 480 }
471 } 481 }
472 482
473 render_process_id_ = ChildProcessHost::kInvalidUniqueID; 483 render_process_id_ = ChildProcessHost::kInvalidUniqueID;
474 render_frame_id_ = MSG_ROUTING_NONE; 484 route_id_ = MSG_ROUTING_NONE;
475 render_thread_id_ = kInvalidEmbeddedWorkerThreadId; 485 render_thread_id_ = kInvalidEmbeddedWorkerThreadId;
476 provider_id_ = kInvalidServiceWorkerProviderId; 486 provider_id_ = kInvalidServiceWorkerProviderId;
477 provider_type_ = SERVICE_WORKER_PROVIDER_UNKNOWN; 487 provider_type_ = SERVICE_WORKER_PROVIDER_UNKNOWN;
478 dispatcher_host_ = nullptr; 488 dispatcher_host_ = nullptr;
479 } 489 }
480 490
481 void ServiceWorkerProviderHost::CompleteCrossSiteTransfer( 491 void ServiceWorkerProviderHost::CompleteCrossSiteTransfer(
482 int new_process_id, 492 int new_process_id,
483 int new_frame_id, 493 int new_frame_id,
484 int new_provider_id, 494 int new_provider_id,
485 ServiceWorkerProviderType new_provider_type, 495 ServiceWorkerProviderType new_provider_type,
486 ServiceWorkerDispatcherHost* new_dispatcher_host) { 496 ServiceWorkerDispatcherHost* new_dispatcher_host) {
487 DCHECK_EQ(ChildProcessHost::kInvalidUniqueID, render_process_id_); 497 DCHECK_EQ(ChildProcessHost::kInvalidUniqueID, render_process_id_);
488 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, new_process_id); 498 DCHECK_NE(ChildProcessHost::kInvalidUniqueID, new_process_id);
489 DCHECK_NE(MSG_ROUTING_NONE, new_frame_id); 499 DCHECK_NE(MSG_ROUTING_NONE, new_frame_id);
490 500
491 render_process_id_ = new_process_id; 501 render_process_id_ = new_process_id;
492 render_frame_id_ = new_frame_id; 502 route_id_ = new_frame_id;
493 render_thread_id_ = kDocumentMainThreadId; 503 render_thread_id_ = kDocumentMainThreadId;
494 provider_id_ = new_provider_id; 504 provider_id_ = new_provider_id;
495 provider_type_ = new_provider_type; 505 provider_type_ = new_provider_type;
496 dispatcher_host_ = new_dispatcher_host; 506 dispatcher_host_ = new_dispatcher_host;
497 507
498 for (const GURL& pattern : associated_patterns_) 508 for (const GURL& pattern : associated_patterns_)
499 IncreaseProcessReference(pattern); 509 IncreaseProcessReference(pattern);
500 510
501 for (auto& key_registration : matching_registrations_) 511 for (auto& key_registration : matching_registrations_)
502 IncreaseProcessReference(key_registration.second->pattern()); 512 IncreaseProcessReference(key_registration.second->pattern());
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
650 return context_ != NULL; 660 return context_ != NULL;
651 } 661 }
652 662
653 void ServiceWorkerProviderHost::Send(IPC::Message* message) const { 663 void ServiceWorkerProviderHost::Send(IPC::Message* message) const {
654 DCHECK(dispatcher_host_); 664 DCHECK(dispatcher_host_);
655 DCHECK(IsReadyToSendMessages()); 665 DCHECK(IsReadyToSendMessages());
656 dispatcher_host_->Send(message); 666 dispatcher_host_->Send(message);
657 } 667 }
658 668
659 } // namespace content 669 } // 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