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

Side by Side Diff: content/browser/shared_worker/shared_worker_host.cc

Issue 223123003: Make DevTools support for the embedded SharedWorker. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixed version Created 6 years, 8 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/shared_worker/shared_worker_host.h" 5 #include "content/browser/shared_worker/shared_worker_host.h"
6 6
7 #include "base/metrics/histogram.h" 7 #include "base/metrics/histogram.h"
8 #include "content/browser/devtools/shared_worker_devtools_manager.h"
8 #include "content/browser/frame_host/render_frame_host_delegate.h" 9 #include "content/browser/frame_host/render_frame_host_delegate.h"
9 #include "content/browser/frame_host/render_frame_host_impl.h" 10 #include "content/browser/frame_host/render_frame_host_impl.h"
10 #include "content/browser/message_port_service.h" 11 #include "content/browser/message_port_service.h"
11 #include "content/browser/shared_worker/shared_worker_instance.h" 12 #include "content/browser/shared_worker/shared_worker_instance.h"
12 #include "content/browser/shared_worker/shared_worker_message_filter.h" 13 #include "content/browser/shared_worker/shared_worker_message_filter.h"
14 #include "content/browser/shared_worker/shared_worker_service_impl.h"
13 #include "content/browser/worker_host/worker_document_set.h" 15 #include "content/browser/worker_host/worker_document_set.h"
14 #include "content/common/view_messages.h" 16 #include "content/common/view_messages.h"
15 #include "content/common/worker_messages.h" 17 #include "content/common/worker_messages.h"
16 #include "content/public/browser/browser_thread.h" 18 #include "content/public/browser/browser_thread.h"
17 #include "content/public/browser/content_browser_client.h" 19 #include "content/public/browser/content_browser_client.h"
20 #include "content/public/browser/render_process_host.h"
18 #include "content/public/common/content_client.h" 21 #include "content/public/common/content_client.h"
19 22
20 namespace content { 23 namespace content {
21 namespace { 24 namespace {
22 25
23 // Notifies RenderViewHost that one or more worker objects crashed. 26 // Notifies RenderViewHost that one or more worker objects crashed.
24 void WorkerCrashCallback(int render_process_unique_id, int render_frame_id) { 27 void WorkerCrashCallback(int render_process_unique_id, int render_frame_id) {
25 RenderFrameHostImpl* host = 28 RenderFrameHostImpl* host =
26 RenderFrameHostImpl::FromID(render_process_unique_id, render_frame_id); 29 RenderFrameHostImpl::FromID(render_process_unique_id, render_frame_id);
27 if (host) 30 if (host)
28 host->delegate()->WorkerCrashed(host); 31 host->delegate()->WorkerCrashed(host);
29 } 32 }
30 33
34 void NotifyWorkerScriptLoadedOnUI(int worker_process_id, int worker_route_id) {
35 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
36 SharedWorkerDevToolsManager::GetInstance()->WorkerContextStarted(
37 worker_process_id, worker_route_id);
38 }
39
40 void NotifyWorkerDestroyedOnUI(int worker_process_id, int worker_route_id) {
41 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
42 SharedWorkerDevToolsManager::GetInstance()->WorkerDestroyed(worker_process_id,
43 worker_route_id);
44 }
45
31 } // namespace 46 } // namespace
32 47
33 SharedWorkerHost::SharedWorkerHost(SharedWorkerInstance* instance) 48 SharedWorkerHost::SharedWorkerHost(SharedWorkerInstance* instance,
49 SharedWorkerMessageFilter* filter)
34 : instance_(instance), 50 : instance_(instance),
35 worker_document_set_(new WorkerDocumentSet()), 51 worker_document_set_(new WorkerDocumentSet()),
36 container_render_filter_(NULL), 52 container_render_filter_(filter),
37 worker_route_id_(MSG_ROUTING_NONE), 53 worker_process_id_(filter->render_process_id()),
54 worker_route_id_(filter->GetNextRoutingID()),
38 load_failed_(false), 55 load_failed_(false),
39 closed_(false), 56 closed_(false),
40 creation_time_(base::TimeTicks::Now()) { 57 creation_time_(base::TimeTicks::Now()) {
41 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 58 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
42 } 59 }
43 60
44 SharedWorkerHost::~SharedWorkerHost() { 61 SharedWorkerHost::~SharedWorkerHost() {
45 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 62 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
46 UMA_HISTOGRAM_LONG_TIMES("SharedWorker.TimeToDeleted", 63 UMA_HISTOGRAM_LONG_TIMES("SharedWorker.TimeToDeleted",
47 base::TimeTicks::Now() - creation_time_); 64 base::TimeTicks::Now() - creation_time_);
48 // If we crashed, tell the RenderViewHosts. 65 // If we crashed, tell the RenderViewHosts.
49 if (instance_ && !load_failed_) { 66 if (instance_ && !load_failed_) {
50 const WorkerDocumentSet::DocumentInfoSet& parents = 67 const WorkerDocumentSet::DocumentInfoSet& parents =
51 worker_document_set_->documents(); 68 worker_document_set_->documents();
52 for (WorkerDocumentSet::DocumentInfoSet::const_iterator parent_iter = 69 for (WorkerDocumentSet::DocumentInfoSet::const_iterator parent_iter =
53 parents.begin(); 70 parents.begin();
54 parent_iter != parents.end(); 71 parent_iter != parents.end();
55 ++parent_iter) { 72 ++parent_iter) {
56 BrowserThread::PostTask(BrowserThread::UI, 73 BrowserThread::PostTask(BrowserThread::UI,
57 FROM_HERE, 74 FROM_HERE,
58 base::Bind(&WorkerCrashCallback, 75 base::Bind(&WorkerCrashCallback,
59 parent_iter->render_process_id(), 76 parent_iter->render_process_id(),
60 parent_iter->render_frame_id())); 77 parent_iter->render_frame_id()));
61 } 78 }
62 } 79 }
80 BrowserThread::PostTask(
81 BrowserThread::UI,
82 FROM_HERE,
83 base::Bind(
84 &NotifyWorkerDestroyedOnUI, worker_process_id_, worker_route_id_));
85 SharedWorkerServiceImpl::GetInstance()->NotifyWorkerDestroyed(
86 worker_process_id_, worker_route_id_);
63 } 87 }
64 88
65 bool SharedWorkerHost::Send(IPC::Message* message) { 89 bool SharedWorkerHost::Send(IPC::Message* message) {
66 if (!container_render_filter_) { 90 if (!container_render_filter_) {
67 delete message; 91 delete message;
68 return false; 92 return false;
69 } 93 }
70 return container_render_filter_->Send(message); 94 return container_render_filter_->Send(message);
71 } 95 }
72 96
73 void SharedWorkerHost::Init(SharedWorkerMessageFilter* filter) { 97 void SharedWorkerHost::Start(bool pause_on_start) {
74 CHECK(instance_);
75 DCHECK(worker_route_id_ == MSG_ROUTING_NONE);
76 container_render_filter_ = filter;
77 worker_route_id_ = filter->GetNextRoutingID();
78
79 WorkerProcessMsg_CreateWorker_Params params; 98 WorkerProcessMsg_CreateWorker_Params params;
80 params.url = instance_->url(); 99 params.url = instance_->url();
81 params.name = instance_->name(); 100 params.name = instance_->name();
82 params.content_security_policy = instance_->content_security_policy(); 101 params.content_security_policy = instance_->content_security_policy();
83 params.security_policy_type = instance_->security_policy_type(); 102 params.security_policy_type = instance_->security_policy_type();
103 params.pause_on_start = pause_on_start;
84 params.route_id = worker_route_id_; 104 params.route_id = worker_route_id_;
85 Send(new WorkerProcessMsg_CreateWorker(params)); 105 Send(new WorkerProcessMsg_CreateWorker(params));
86 106
87 for (FilterList::const_iterator i = filters_.begin(); i != filters_.end(); 107 for (FilterList::const_iterator i = filters_.begin(); i != filters_.end();
88 ++i) { 108 ++i) {
89 i->filter()->Send(new ViewMsg_WorkerCreated(i->route_id())); 109 i->filter()->Send(new ViewMsg_WorkerCreated(i->route_id()));
90 } 110 }
91 } 111 }
92 112
93 bool SharedWorkerHost::FilterMessage(const IPC::Message& message, 113 bool SharedWorkerHost::FilterMessage(const IPC::Message& message,
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 } 156 }
137 157
138 void SharedWorkerHost::WorkerContextDestroyed() { 158 void SharedWorkerHost::WorkerContextDestroyed() {
139 if (!instance_) 159 if (!instance_)
140 return; 160 return;
141 instance_.reset(); 161 instance_.reset();
142 worker_document_set_ = NULL; 162 worker_document_set_ = NULL;
143 } 163 }
144 164
145 void SharedWorkerHost::WorkerScriptLoaded() { 165 void SharedWorkerHost::WorkerScriptLoaded() {
146 // TODO(horo): implement this.
147 UMA_HISTOGRAM_TIMES("SharedWorker.TimeToScriptLoaded", 166 UMA_HISTOGRAM_TIMES("SharedWorker.TimeToScriptLoaded",
148 base::TimeTicks::Now() - creation_time_); 167 base::TimeTicks::Now() - creation_time_);
168 BrowserThread::PostTask(
169 BrowserThread::UI,
170 FROM_HERE,
171 base::Bind(
172 &NotifyWorkerScriptLoadedOnUI, worker_process_id_, worker_route_id_));
149 } 173 }
150 174
151 void SharedWorkerHost::WorkerScriptLoadFailed() { 175 void SharedWorkerHost::WorkerScriptLoadFailed() {
152 UMA_HISTOGRAM_TIMES("SharedWorker.TimeToScriptLoadFailed", 176 UMA_HISTOGRAM_TIMES("SharedWorker.TimeToScriptLoadFailed",
153 base::TimeTicks::Now() - creation_time_); 177 base::TimeTicks::Now() - creation_time_);
154 if (!instance_) 178 if (!instance_)
155 return; 179 return;
156 load_failed_ = true; 180 load_failed_ = true;
157 for (FilterList::const_iterator i = filters_.begin(); i != filters_.end(); 181 for (FilterList::const_iterator i = filters_.begin(); i != filters_.end();
158 ++i) { 182 ++i) {
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 int message_port_id) { 319 int message_port_id) {
296 for (FilterList::iterator i = filters_.begin(); i != filters_.end(); ++i) { 320 for (FilterList::iterator i = filters_.begin(); i != filters_.end(); ++i) {
297 if (i->filter() == filter && i->route_id() == route_id) { 321 if (i->filter() == filter && i->route_id() == route_id) {
298 i->set_message_port_id(message_port_id); 322 i->set_message_port_id(message_port_id);
299 return; 323 return;
300 } 324 }
301 } 325 }
302 } 326 }
303 327
304 } // namespace content 328 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/shared_worker/shared_worker_host.h ('k') | content/browser/shared_worker/shared_worker_instance.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698