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

Side by Side Diff: chrome/browser/devtools/devtools_target_impl.cc

Issue 459403002: DevTools: Added service workers to remote debugging targets (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Made DevToolsAgentHost::GetType return enum Created 6 years, 4 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 "chrome/browser/devtools/devtools_target_impl.h" 5 #include "chrome/browser/devtools/devtools_target_impl.h"
6 6
7 #include "base/strings/stringprintf.h" 7 #include "base/strings/stringprintf.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "chrome/browser/devtools/devtools_window.h" 9 #include "chrome/browser/devtools/devtools_window.h"
10 #include "chrome/browser/extensions/extension_tab_util.h" 10 #include "chrome/browser/extensions/extension_tab_util.h"
(...skipping 22 matching lines...) Expand all
33 33
34 namespace { 34 namespace {
35 35
36 const char kTargetTypeApp[] = "app"; 36 const char kTargetTypeApp[] = "app";
37 const char kTargetTypeBackgroundPage[] = "background_page"; 37 const char kTargetTypeBackgroundPage[] = "background_page";
38 const char kTargetTypePage[] = "page"; 38 const char kTargetTypePage[] = "page";
39 const char kTargetTypeWorker[] = "worker"; 39 const char kTargetTypeWorker[] = "worker";
40 const char kTargetTypeWebView[] = "webview"; 40 const char kTargetTypeWebView[] = "webview";
41 const char kTargetTypeIFrame[] = "iframe"; 41 const char kTargetTypeIFrame[] = "iframe";
42 const char kTargetTypeOther[] = "other"; 42 const char kTargetTypeOther[] = "other";
43 const char kTargetTypeServiceWorker[] = "service_worker";
43 44
44 // WebContentsTarget -------------------------------------------------------- 45 // WebContentsTarget --------------------------------------------------------
45 46
46 class WebContentsTarget : public DevToolsTargetImpl { 47 class WebContentsTarget : public DevToolsTargetImpl {
47 public: 48 public:
48 WebContentsTarget(WebContents* web_contents, bool is_tab); 49 WebContentsTarget(WebContents* web_contents, bool is_tab);
49 50
50 // DevToolsTargetImpl overrides: 51 // DevToolsTargetImpl overrides:
51 virtual bool Activate() const OVERRIDE;
52 virtual bool Close() const OVERRIDE;
53 virtual WebContents* GetWebContents() const OVERRIDE; 52 virtual WebContents* GetWebContents() const OVERRIDE;
54 virtual int GetTabId() const OVERRIDE; 53 virtual int GetTabId() const OVERRIDE;
55 virtual std::string GetExtensionId() const OVERRIDE; 54 virtual std::string GetExtensionId() const OVERRIDE;
56 virtual void Inspect(Profile* profile) const OVERRIDE; 55 virtual void Inspect(Profile* profile) const OVERRIDE;
57 56
58 private: 57 private:
59 int tab_id_; 58 int tab_id_;
60 std::string extension_id_; 59 std::string extension_id_;
61 }; 60 };
62 61
63 WebContentsTarget::WebContentsTarget(WebContents* web_contents, bool is_tab) 62 WebContentsTarget::WebContentsTarget(WebContents* web_contents, bool is_tab)
64 : DevToolsTargetImpl(DevToolsAgentHost::GetOrCreateFor(web_contents)), 63 : DevToolsTargetImpl(DevToolsAgentHost::GetOrCreateFor(web_contents)),
65 tab_id_(-1) { 64 tab_id_(-1) {
66 set_type(kTargetTypeOther); 65 set_type(kTargetTypeOther);
67 66
68 content::RenderFrameHost* rfh = 67 content::RenderFrameHost* rfh =
69 web_contents->GetRenderViewHost()->GetMainFrame(); 68 web_contents->GetRenderViewHost()->GetMainFrame();
70 if (rfh->IsCrossProcessSubframe()) { 69 if (rfh->IsCrossProcessSubframe()) {
71 set_url(rfh->GetLastCommittedURL()); 70 set_url(rfh->GetLastCommittedURL());
72 set_type(kTargetTypeIFrame); 71 set_type(kTargetTypeIFrame);
73 // TODO(pfeldman) Update for out of process iframes. 72 // TODO(pfeldman) Update for out of process iframes.
74 RenderViewHost* parent_rvh = rfh->GetParent()->GetRenderViewHost(); 73 RenderViewHost* parent_rvh = rfh->GetParent()->GetRenderViewHost();
75 set_parent_id(DevToolsAgentHost::GetOrCreateFor( 74 set_parent_id(DevToolsAgentHost::GetOrCreateFor(
76 WebContents::FromRenderViewHost(parent_rvh))->GetId()); 75 WebContents::FromRenderViewHost(parent_rvh))->GetId());
77 return; 76 return;
78 } 77 }
79 78
80 set_title(base::UTF16ToUTF8(web_contents->GetTitle()));
81 set_url(web_contents->GetURL());
82 content::NavigationController& controller = web_contents->GetController(); 79 content::NavigationController& controller = web_contents->GetController();
83 content::NavigationEntry* entry = controller.GetActiveEntry(); 80 content::NavigationEntry* entry = controller.GetActiveEntry();
84 if (entry != NULL && entry->GetURL().is_valid()) 81 if (entry != NULL && entry->GetURL().is_valid())
85 set_favicon_url(entry->GetFavicon().url); 82 set_favicon_url(entry->GetFavicon().url);
86 set_last_activity_time(web_contents->GetLastActiveTime()); 83 set_last_activity_time(web_contents->GetLastActiveTime());
87 84
88 extensions::GuestViewBase* guest = 85 extensions::GuestViewBase* guest =
89 extensions::GuestViewBase::FromWebContents(web_contents); 86 extensions::GuestViewBase::FromWebContents(web_contents);
90 WebContents* guest_contents = guest ? guest->embedder_web_contents() : NULL; 87 WebContents* guest_contents = guest ? guest->embedder_web_contents() : NULL;
91 if (guest_contents) { 88 if (guest_contents) {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 } else if (extension->is_hosted_app() 120 } else if (extension->is_hosted_app()
124 || extension->is_legacy_packaged_app() 121 || extension->is_legacy_packaged_app()
125 || extension->is_platform_app()) { 122 || extension->is_platform_app()) {
126 set_type(kTargetTypeApp); 123 set_type(kTargetTypeApp);
127 } 124 }
128 set_favicon_url(extensions::ExtensionIconSource::GetIconURL( 125 set_favicon_url(extensions::ExtensionIconSource::GetIconURL(
129 extension, extension_misc::EXTENSION_ICON_SMALLISH, 126 extension, extension_misc::EXTENSION_ICON_SMALLISH,
130 ExtensionIconSet::MATCH_BIGGER, false, NULL)); 127 ExtensionIconSet::MATCH_BIGGER, false, NULL));
131 } 128 }
132 129
133 bool WebContentsTarget::Activate() const {
134 WebContents* web_contents = GetWebContents();
135 if (!web_contents)
136 return false;
137 web_contents->GetDelegate()->ActivateContents(web_contents);
138 return true;
139 }
140
141 bool WebContentsTarget::Close() const {
142 WebContents* web_contents = GetWebContents();
143 if (!web_contents)
144 return false;
145 web_contents->GetRenderViewHost()->ClosePage();
146 return true;
147 }
148
149 WebContents* WebContentsTarget::GetWebContents() const { 130 WebContents* WebContentsTarget::GetWebContents() const {
150 return GetAgentHost()->GetWebContents(); 131 return GetAgentHost()->GetWebContents();
151 } 132 }
152 133
153 int WebContentsTarget::GetTabId() const { 134 int WebContentsTarget::GetTabId() const {
154 return tab_id_; 135 return tab_id_;
155 } 136 }
156 137
157 std::string WebContentsTarget::GetExtensionId() const { 138 std::string WebContentsTarget::GetExtensionId() const {
158 return extension_id_; 139 return extension_id_;
159 } 140 }
160 141
161 void WebContentsTarget::Inspect(Profile* profile) const { 142 void WebContentsTarget::Inspect(Profile* profile) const {
162 WebContents* web_contents = GetWebContents(); 143 WebContents* web_contents = GetWebContents();
163 if (!web_contents) 144 if (!web_contents)
164 return; 145 return;
165 DevToolsWindow::OpenDevToolsWindow(web_contents); 146 DevToolsWindow::OpenDevToolsWindow(web_contents);
166 } 147 }
167 148
168 // WorkerTarget ---------------------------------------------------------------- 149 // WorkerTarget ----------------------------------------------------------------
169 150
170 class WorkerTarget : public DevToolsTargetImpl { 151 class WorkerTarget : public DevToolsTargetImpl {
171 public: 152 public:
172 explicit WorkerTarget(const WorkerService::WorkerInfo& worker_info); 153 explicit WorkerTarget(const WorkerService::WorkerInfo& worker_info);
173 154
174 // content::DevToolsTarget overrides: 155 explicit WorkerTarget(scoped_refptr<DevToolsAgentHost> agent_host);
175 virtual bool Close() const OVERRIDE;
176 156
177 // DevToolsTargetImpl overrides: 157 // DevToolsTargetImpl overrides:
158 virtual std::string GetType() const OVERRIDE;
178 virtual void Inspect(Profile* profile) const OVERRIDE; 159 virtual void Inspect(Profile* profile) const OVERRIDE;
179
180 private:
181 int process_id_;
182 int route_id_;
183 }; 160 };
184 161
185 WorkerTarget::WorkerTarget(const WorkerService::WorkerInfo& worker) 162 WorkerTarget::WorkerTarget(const WorkerService::WorkerInfo& worker)
186 : DevToolsTargetImpl(DevToolsAgentHost::GetForWorker(worker.process_id, 163 : DevToolsTargetImpl(DevToolsAgentHost::GetForWorker(worker.process_id,
187 worker.route_id)) { 164 worker.route_id)) {
188 set_type(kTargetTypeWorker);
189 set_title(base::UTF16ToUTF8(worker.name));
190 set_description(base::StringPrintf("Worker pid:%d",
dgozman 2014/08/22 08:38:28 Leave set_description in this constructor.
vkuzkokov 2014/08/22 11:01:48 Done.
191 base::GetProcId(worker.handle)));
192 set_url(worker.url);
193
194 process_id_ = worker.process_id;
195 route_id_ = worker.route_id;
196 } 165 }
197 166
198 static void TerminateWorker(int process_id, int route_id) { 167 WorkerTarget::WorkerTarget(
199 WorkerService::GetInstance()->TerminateWorker(process_id, route_id); 168 scoped_refptr<DevToolsAgentHost> agent_host)
169 : DevToolsTargetImpl(agent_host) {
200 } 170 }
201 171
202 bool WorkerTarget::Close() const { 172 std::string WorkerTarget::GetType() const {
203 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, 173 switch (GetAgentHost()->GetType()) {
204 base::Bind(&TerminateWorker, process_id_, route_id_)); 174 case DevToolsAgentHost::AGENT_HOST_SHARED_WORKER:
205 return true; 175 return kTargetTypeWorker;
176 case DevToolsAgentHost::AGENT_HOST_SERVICE_WORKER:
177 return kTargetTypeServiceWorker;
178 default:
179 {} // Do nothing.
180 }
181 return kTargetTypeOther;
206 } 182 }
207 183
208 void WorkerTarget::Inspect(Profile* profile) const { 184 void WorkerTarget::Inspect(Profile* profile) const {
209 DevToolsWindow::OpenDevToolsWindowForWorker(profile, GetAgentHost()); 185 DevToolsWindow::OpenDevToolsWindowForWorker(profile, GetAgentHost());
210 } 186 }
211 187
212 } // namespace 188 } // namespace
213 189
214 // DevToolsTargetImpl ---------------------------------------------------------- 190 // DevToolsTargetImpl ----------------------------------------------------------
215 191
216 DevToolsTargetImpl::~DevToolsTargetImpl() { 192 DevToolsTargetImpl::~DevToolsTargetImpl() {
217 } 193 }
218 194
219 DevToolsTargetImpl::DevToolsTargetImpl( 195 DevToolsTargetImpl::DevToolsTargetImpl(
220 scoped_refptr<DevToolsAgentHost> agent_host) 196 scoped_refptr<DevToolsAgentHost> agent_host)
221 : agent_host_(agent_host) { 197 : agent_host_(agent_host),
198 title_(agent_host->GetTitle()),
199 url_(agent_host->GetURL()) {
222 } 200 }
223 201
224 std::string DevToolsTargetImpl::GetParentId() const { 202 std::string DevToolsTargetImpl::GetParentId() const {
225 return parent_id_; 203 return parent_id_;
226 } 204 }
227 205
228 std::string DevToolsTargetImpl::GetId() const { 206 std::string DevToolsTargetImpl::GetId() const {
229 return agent_host_->GetId(); 207 return agent_host_->GetId();
230 } 208 }
231 209
(...skipping 24 matching lines...) Expand all
256 scoped_refptr<content::DevToolsAgentHost> 234 scoped_refptr<content::DevToolsAgentHost>
257 DevToolsTargetImpl::GetAgentHost() const { 235 DevToolsTargetImpl::GetAgentHost() const {
258 return agent_host_; 236 return agent_host_;
259 } 237 }
260 238
261 bool DevToolsTargetImpl::IsAttached() const { 239 bool DevToolsTargetImpl::IsAttached() const {
262 return agent_host_->IsAttached(); 240 return agent_host_->IsAttached();
263 } 241 }
264 242
265 bool DevToolsTargetImpl::Activate() const { 243 bool DevToolsTargetImpl::Activate() const {
266 return false; 244 return agent_host_->Activate();
267 } 245 }
268 246
269 bool DevToolsTargetImpl::Close() const { 247 bool DevToolsTargetImpl::Close() const {
270 return false; 248 return agent_host_->Close();
271 } 249 }
272 250
273 int DevToolsTargetImpl::GetTabId() const { 251 int DevToolsTargetImpl::GetTabId() const {
274 return -1; 252 return -1;
275 } 253 }
276 254
277 WebContents* DevToolsTargetImpl::GetWebContents() const { 255 WebContents* DevToolsTargetImpl::GetWebContents() const {
278 return NULL; 256 return NULL;
279 } 257 }
280 258
(...skipping 16 matching lines...) Expand all
297 } 275 }
298 276
299 // static 277 // static
300 DevToolsTargetImpl::List DevToolsTargetImpl::EnumerateWebContentsTargets() { 278 DevToolsTargetImpl::List DevToolsTargetImpl::EnumerateWebContentsTargets() {
301 std::set<WebContents*> tab_web_contents; 279 std::set<WebContents*> tab_web_contents;
302 for (TabContentsIterator it; !it.done(); it.Next()) 280 for (TabContentsIterator it; !it.done(); it.Next())
303 tab_web_contents.insert(*it); 281 tab_web_contents.insert(*it);
304 282
305 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 283 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
306 DevToolsTargetImpl::List result; 284 DevToolsTargetImpl::List result;
307 std::vector<WebContents*> wc_list = 285 DevToolsAgentHost::List agents = DevToolsAgentHost::GetOrCreateAll();
308 content::DevToolsAgentHost::GetInspectableWebContents(); 286 for (DevToolsAgentHost::List::iterator it = agents.begin();
309 for (std::vector<WebContents*>::iterator it = wc_list.begin(); 287 it != agents.end(); ++it) {
310 it != wc_list.end(); 288 if (WebContents* web_contents = (*it)->GetWebContents()) {
311 ++it) { 289 bool is_tab =
312 bool is_tab = tab_web_contents.find(*it) != tab_web_contents.end(); 290 tab_web_contents.find(web_contents) != tab_web_contents.end();
313 result.push_back(new WebContentsTarget(*it, is_tab)); 291 result.push_back(new WebContentsTarget(web_contents, is_tab));
292 }
314 } 293 }
315 return result; 294 return result;
316 } 295 }
317 296
318 static void CreateWorkerTargets( 297 static void CreateWorkerTargets(
319 const std::vector<WorkerService::WorkerInfo>& worker_info, 298 const std::vector<WorkerService::WorkerInfo>& worker_info,
320 DevToolsTargetImpl::Callback callback) { 299 DevToolsTargetImpl::Callback callback) {
321 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 300 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
322 DevToolsTargetImpl::List result; 301 DevToolsTargetImpl::List result;
323 for (size_t i = 0; i < worker_info.size(); ++i) { 302 for (size_t i = 0; i < worker_info.size(); ++i) {
(...skipping 12 matching lines...) Expand all
336 WorkerService::GetInstance()->GetWorkers(), 315 WorkerService::GetInstance()->GetWorkers(),
337 callback)); 316 callback));
338 } 317 }
339 318
340 static void CollectAllTargets( 319 static void CollectAllTargets(
341 DevToolsTargetImpl::Callback callback, 320 DevToolsTargetImpl::Callback callback,
342 const DevToolsTargetImpl::List& worker_targets) { 321 const DevToolsTargetImpl::List& worker_targets) {
343 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 322 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
344 DevToolsTargetImpl::List result = 323 DevToolsTargetImpl::List result =
345 DevToolsTargetImpl::EnumerateWebContentsTargets(); 324 DevToolsTargetImpl::EnumerateWebContentsTargets();
346 result.insert(result.begin(), worker_targets.begin(), worker_targets.end()); 325 result.insert(result.end(), worker_targets.begin(), worker_targets.end());
326
327 DevToolsAgentHost::List agents = DevToolsAgentHost::GetOrCreateAll();
328 for (DevToolsAgentHost::List::iterator it = agents.begin();
329 it != agents.end(); ++it) {
330 if ((*it)->GetType() == DevToolsAgentHost::AGENT_HOST_SERVICE_WORKER)
331 result.push_back(new WorkerTarget(*it));
332 }
347 callback.Run(result); 333 callback.Run(result);
348 } 334 }
349 335
350 // static 336 // static
351 void DevToolsTargetImpl::EnumerateAllTargets(Callback callback) { 337 void DevToolsTargetImpl::EnumerateAllTargets(Callback callback) {
352 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 338 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
353 content::BrowserThread::PostTask( 339 content::BrowserThread::PostTask(
354 content::BrowserThread::IO, 340 content::BrowserThread::IO,
355 FROM_HERE, 341 FROM_HERE,
356 base::Bind(&DevToolsTargetImpl::EnumerateWorkerTargets, 342 base::Bind(&DevToolsTargetImpl::EnumerateWorkerTargets,
357 base::Bind(&CollectAllTargets, callback))); 343 base::Bind(&CollectAllTargets, callback)));
358 } 344 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698