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

Side by Side Diff: chrome/browser/ui/webui/inspect_ui.cc

Issue 22277007: chrome://inspect: Add "open", "close" and "reload" actions to Devices tab (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: "Addressed comments" Created 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/ui/webui/inspect_ui.h" 5 #include "chrome/browser/ui/webui/inspect_ui.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 67
68 static const char kAppTargetType[] = "app"; 68 static const char kAppTargetType[] = "app";
69 static const char kExtensionTargetType[] = "extension"; 69 static const char kExtensionTargetType[] = "extension";
70 static const char kPageTargetType[] = "page"; 70 static const char kPageTargetType[] = "page";
71 static const char kWorkerTargetType[] = "worker"; 71 static const char kWorkerTargetType[] = "worker";
72 static const char kAdbTargetType[] = "adb_page"; 72 static const char kAdbTargetType[] = "adb_page";
73 73
74 static const char kInitUICommand[] = "init-ui"; 74 static const char kInitUICommand[] = "init-ui";
75 static const char kInspectCommand[] = "inspect"; 75 static const char kInspectCommand[] = "inspect";
76 static const char kTerminateCommand[] = "terminate"; 76 static const char kTerminateCommand[] = "terminate";
77 static const char kReloadCommand[] = "reload";
78 static const char kOpenCommand[] = "open";
79
77 static const char kPortForwardingEnabledCommand[] = 80 static const char kPortForwardingEnabledCommand[] =
78 "set-port-forwarding-enabled"; 81 "set-port-forwarding-enabled";
79 static const char kPortForwardingConfigCommand[] = "set-port-forwarding-config"; 82 static const char kPortForwardingConfigCommand[] = "set-port-forwarding-config";
80 83
81 static const char kTargetTypeField[] = "type"; 84 static const char kTargetTypeField[] = "type";
82 static const char kAttachedField[] = "attached"; 85 static const char kAttachedField[] = "attached";
83 static const char kProcessIdField[] = "processId"; 86 static const char kProcessIdField[] = "processId";
84 static const char kRouteIdField[] = "routeId"; 87 static const char kRouteIdField[] = "routeId";
85 static const char kUrlField[] = "url"; 88 static const char kUrlField[] = "url";
86 static const char kNameField[] = "name"; 89 static const char kNameField[] = "name";
87 static const char kFaviconUrlField[] = "faviconUrl"; 90 static const char kFaviconUrlField[] = "faviconUrl";
88 static const char kPidField[] = "pid"; 91 static const char kPidField[] = "pid";
89 static const char kAdbSerialField[] = "adbSerial"; 92 static const char kAdbSerialField[] = "adbSerial";
90 static const char kAdbModelField[] = "adbModel"; 93 static const char kAdbModelField[] = "adbModel";
91 static const char kAdbBrowserNameField[] = "adbBrowserName"; 94 static const char kAdbBrowserNameField[] = "adbBrowserName";
92 static const char kAdbPageIdField[] = "adbPageId"; 95 static const char kAdbGlobalIdField[] = "adbGlobalId";
93 static const char kAdbBrowsersField[] = "browsers"; 96 static const char kAdbBrowsersField[] = "browsers";
94 static const char kAdbPagesField[] = "pages"; 97 static const char kAdbPagesField[] = "pages";
95 98
96 DictionaryValue* BuildTargetDescriptor( 99 DictionaryValue* BuildTargetDescriptor(
97 const std::string& target_type, 100 const std::string& target_type,
98 bool attached, 101 bool attached,
99 const GURL& url, 102 const GURL& url,
100 const std::string& name, 103 const std::string& name,
101 const GURL& favicon_url, 104 const GURL& favicon_url,
102 int process_id, 105 int process_id,
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 : inspect_ui_(inspect_ui) {} 174 : inspect_ui_(inspect_ui) {}
172 virtual ~InspectMessageHandler() {} 175 virtual ~InspectMessageHandler() {}
173 176
174 private: 177 private:
175 // WebUIMessageHandler implementation. 178 // WebUIMessageHandler implementation.
176 virtual void RegisterMessages() OVERRIDE; 179 virtual void RegisterMessages() OVERRIDE;
177 180
178 void HandleInitUICommand(const ListValue* args); 181 void HandleInitUICommand(const ListValue* args);
179 void HandleInspectCommand(const ListValue* args); 182 void HandleInspectCommand(const ListValue* args);
180 void HandleTerminateCommand(const ListValue* args); 183 void HandleTerminateCommand(const ListValue* args);
184 void HandleReloadCommand(const ListValue* args);
185 void HandleOpenCommand(const ListValue* args);
181 void HandlePortForwardingEnabledCommand(const ListValue* args); 186 void HandlePortForwardingEnabledCommand(const ListValue* args);
182 void HandlePortForwardingConfigCommand(const ListValue* args); 187 void HandlePortForwardingConfigCommand(const ListValue* args);
183 188
184 bool GetProcessAndRouteId(const ListValue* args, 189 static bool GetProcessAndRouteId(const ListValue* args,
185 int* process_id, 190 int* process_id,
186 int* route_id); 191 int* route_id);
192
193 static bool GetRemotePageId(const ListValue* args, std::string* page_id);
187 194
188 InspectUI* inspect_ui_; 195 InspectUI* inspect_ui_;
189 196
190 DISALLOW_COPY_AND_ASSIGN(InspectMessageHandler); 197 DISALLOW_COPY_AND_ASSIGN(InspectMessageHandler);
191 }; 198 };
192 199
193 void InspectMessageHandler::RegisterMessages() { 200 void InspectMessageHandler::RegisterMessages() {
194 web_ui()->RegisterMessageCallback(kInitUICommand, 201 web_ui()->RegisterMessageCallback(kInitUICommand,
195 base::Bind(&InspectMessageHandler::HandleInitUICommand, 202 base::Bind(&InspectMessageHandler::HandleInitUICommand,
196 base::Unretained(this))); 203 base::Unretained(this)));
197 web_ui()->RegisterMessageCallback(kInspectCommand, 204 web_ui()->RegisterMessageCallback(kInspectCommand,
198 base::Bind(&InspectMessageHandler::HandleInspectCommand, 205 base::Bind(&InspectMessageHandler::HandleInspectCommand,
199 base::Unretained(this))); 206 base::Unretained(this)));
200 web_ui()->RegisterMessageCallback(kTerminateCommand, 207 web_ui()->RegisterMessageCallback(kTerminateCommand,
201 base::Bind(&InspectMessageHandler::HandleTerminateCommand, 208 base::Bind(&InspectMessageHandler::HandleTerminateCommand,
202 base::Unretained(this))); 209 base::Unretained(this)));
203 web_ui()->RegisterMessageCallback(kPortForwardingEnabledCommand, 210 web_ui()->RegisterMessageCallback(kPortForwardingEnabledCommand,
204 base::Bind(&InspectMessageHandler::HandlePortForwardingEnabledCommand, 211 base::Bind(&InspectMessageHandler::HandlePortForwardingEnabledCommand,
205 base::Unretained(this))); 212 base::Unretained(this)));
206 web_ui()->RegisterMessageCallback(kPortForwardingConfigCommand, 213 web_ui()->RegisterMessageCallback(kPortForwardingConfigCommand,
207 base::Bind(&InspectMessageHandler::HandlePortForwardingConfigCommand, 214 base::Bind(&InspectMessageHandler::HandlePortForwardingConfigCommand,
208 base::Unretained(this))); 215 base::Unretained(this)));
216 web_ui()->RegisterMessageCallback(kReloadCommand,
217 base::Bind(&InspectMessageHandler::HandleReloadCommand,
218 base::Unretained(this)));
219 web_ui()->RegisterMessageCallback(kOpenCommand,
220 base::Bind(&InspectMessageHandler::HandleOpenCommand,
221 base::Unretained(this)));
209 } 222 }
210 223
211 void InspectMessageHandler::HandleInitUICommand(const ListValue*) { 224 void InspectMessageHandler::HandleInitUICommand(const ListValue*) {
212 inspect_ui_->InitUI(); 225 inspect_ui_->InitUI();
213 } 226 }
214 227
215 void InspectMessageHandler::HandleInspectCommand(const ListValue* args) { 228 void InspectMessageHandler::HandleInspectCommand(const ListValue* args) {
216 Profile* profile = Profile::FromWebUI(web_ui()); 229 Profile* profile = Profile::FromWebUI(web_ui());
217 if (!profile) 230 if (!profile)
218 return; 231 return;
219 232
233 std::string page_id;
234 if (GetRemotePageId(args, &page_id)) {
235 inspect_ui_->InspectRemotePage(page_id);
236 return;
237 }
238
220 int process_id; 239 int process_id;
221 int route_id; 240 int route_id;
222 if (!GetProcessAndRouteId(args, &process_id, &route_id) || process_id == 0 241 if (!GetProcessAndRouteId(args, &process_id, &route_id) || process_id == 0
223 || route_id == 0) { 242 || route_id == 0) {
224 // Check for ADB page id
225 const DictionaryValue* data;
226 std::string page_id;
227 if (args->GetSize() == 1 && args->GetDictionary(0, &data) &&
228 data->GetString(kAdbPageIdField, &page_id)) {
229 inspect_ui_->InspectRemotePage(page_id);
230 }
231 return; 243 return;
232 } 244 }
233 245
234 RenderViewHost* rvh = RenderViewHost::FromID(process_id, route_id); 246 RenderViewHost* rvh = RenderViewHost::FromID(process_id, route_id);
235 if (rvh) { 247 if (rvh) {
236 DevToolsWindow::OpenDevToolsWindow(rvh); 248 DevToolsWindow::OpenDevToolsWindow(rvh);
237 return; 249 return;
238 } 250 }
239 251
240 scoped_refptr<DevToolsAgentHost> agent_host( 252 scoped_refptr<DevToolsAgentHost> agent_host(
241 DevToolsAgentHost::GetForWorker(process_id, route_id)); 253 DevToolsAgentHost::GetForWorker(process_id, route_id));
242 if (!agent_host.get()) 254 if (!agent_host.get())
243 return; 255 return;
244 256
245 DevToolsWindow::OpenDevToolsWindowForWorker(profile, agent_host.get()); 257 DevToolsWindow::OpenDevToolsWindowForWorker(profile, agent_host.get());
246 } 258 }
247 259
248 static void TerminateWorker(int process_id, int route_id) { 260 static void TerminateWorker(int process_id, int route_id) {
249 WorkerService::GetInstance()->TerminateWorker(process_id, route_id); 261 WorkerService::GetInstance()->TerminateWorker(process_id, route_id);
250 } 262 }
251 263
252 void InspectMessageHandler::HandleTerminateCommand(const ListValue* args) { 264 void InspectMessageHandler::HandleTerminateCommand(const ListValue* args) {
265 std::string page_id;
266 if (GetRemotePageId(args, &page_id)) {
267 inspect_ui_->CloseRemotePage(page_id);
268 return;
269 }
270
253 int process_id; 271 int process_id;
254 int route_id; 272 int route_id;
255 if (!GetProcessAndRouteId(args, &process_id, &route_id)) 273 if (!GetProcessAndRouteId(args, &process_id, &route_id))
256 return; 274 return;
257 275
258 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 276 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
259 base::Bind(&TerminateWorker, process_id, route_id)); 277 base::Bind(&TerminateWorker, process_id, route_id));
260 } 278 }
261 279
280 void InspectMessageHandler::HandleReloadCommand(const ListValue* args) {
281 std::string page_id;
282 if (GetRemotePageId(args, &page_id))
283 inspect_ui_->ReloadRemotePage(page_id);
284 }
285
286 void InspectMessageHandler::HandleOpenCommand(const ListValue* args) {
287 std::string browser_id;
288 std::string url;
289 if (args->GetSize() == 2 &&
290 args->GetString(0, &browser_id) &&
291 args->GetString(1, &url)) {
292 inspect_ui_->OpenRemotePage(browser_id, url);
293 }
294 }
295
262 bool InspectMessageHandler::GetProcessAndRouteId(const ListValue* args, 296 bool InspectMessageHandler::GetProcessAndRouteId(const ListValue* args,
263 int* process_id, 297 int* process_id,
264 int* route_id) { 298 int* route_id) {
265 const DictionaryValue* data; 299 const DictionaryValue* data;
266 if (args->GetSize() == 1 && args->GetDictionary(0, &data) && 300 if (args->GetSize() == 1 && args->GetDictionary(0, &data) &&
267 data->GetInteger(kProcessIdField, process_id) && 301 data->GetInteger(kProcessIdField, process_id) &&
268 data->GetInteger(kRouteIdField, route_id)) { 302 data->GetInteger(kRouteIdField, route_id)) {
269 return true; 303 return true;
270 } 304 }
271 return false; 305 return false;
(...skipping 16 matching lines...) Expand all
288 const ListValue* args) { 322 const ListValue* args) {
289 Profile* profile = Profile::FromWebUI(web_ui()); 323 Profile* profile = Profile::FromWebUI(web_ui());
290 if (!profile) 324 if (!profile)
291 return; 325 return;
292 326
293 const DictionaryValue* dict_src; 327 const DictionaryValue* dict_src;
294 if (args->GetSize() == 1 && args->GetDictionary(0, &dict_src)) 328 if (args->GetSize() == 1 && args->GetDictionary(0, &dict_src))
295 profile->GetPrefs()->Set(prefs::kDevToolsPortForwardingConfig, *dict_src); 329 profile->GetPrefs()->Set(prefs::kDevToolsPortForwardingConfig, *dict_src);
296 } 330 }
297 331
332 bool InspectMessageHandler::GetRemotePageId(const ListValue* args,
333 std::string* page_id) {
334 const DictionaryValue* data;
335 if (args->GetSize() == 1 && args->GetDictionary(0, &data) &&
336 data->GetString(kAdbGlobalIdField, page_id)) {
337 return true;
338 }
339 return false;
340 }
341
298 } // namespace 342 } // namespace
299 343
300 class InspectUI::WorkerCreationDestructionListener 344 class InspectUI::WorkerCreationDestructionListener
301 : public WorkerServiceObserver, 345 : public WorkerServiceObserver,
302 public base::RefCountedThreadSafe<WorkerCreationDestructionListener> { 346 public base::RefCountedThreadSafe<WorkerCreationDestructionListener> {
303 public: 347 public:
304 WorkerCreationDestructionListener() 348 WorkerCreationDestructionListener()
305 : discovery_ui_(NULL) {} 349 : discovery_ui_(NULL) {}
306 350
307 void Init(InspectUI* workers_ui) { 351 void Init(InspectUI* workers_ui) {
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 } 456 }
413 457
414 void InspectUI::InspectRemotePage(const std::string& id) { 458 void InspectUI::InspectRemotePage(const std::string& id) {
415 RemotePages::iterator it = remote_pages_.find(id); 459 RemotePages::iterator it = remote_pages_.find(id);
416 if (it != remote_pages_.end()) { 460 if (it != remote_pages_.end()) {
417 Profile* profile = Profile::FromWebUI(web_ui()); 461 Profile* profile = Profile::FromWebUI(web_ui());
418 it->second->Inspect(profile); 462 it->second->Inspect(profile);
419 } 463 }
420 } 464 }
421 465
466 void InspectUI::ReloadRemotePage(const std::string& id) {
467 RemotePages::iterator it = remote_pages_.find(id);
468 if (it != remote_pages_.end())
469 it->second->Reload();
470 }
471
472 void InspectUI::CloseRemotePage(const std::string& id) {
473 RemotePages::iterator it = remote_pages_.find(id);
474 if (it != remote_pages_.end())
475 it->second->Close();
476 }
477
478 void InspectUI::OpenRemotePage(const std::string& browser_id,
479 const std::string& url) {
480 GURL gurl(url);
481 if (!gurl.is_valid()) {
482 gurl = GURL("http://" + url);
483 if (!gurl.is_valid())
484 return;
485 }
486 RemoteBrowsers::iterator it = remote_browsers_.find(browser_id);
487 if (it != remote_browsers_.end())
488 it->second->Open(gurl.spec());
489 }
490
422 void InspectUI::PopulateLists() { 491 void InspectUI::PopulateLists() {
423 std::set<RenderViewHost*> tab_rvhs; 492 std::set<RenderViewHost*> tab_rvhs;
424 for (TabContentsIterator it; !it.done(); it.Next()) 493 for (TabContentsIterator it; !it.done(); it.Next())
425 tab_rvhs.insert(it->GetRenderViewHost()); 494 tab_rvhs.insert(it->GetRenderViewHost());
426 495
427 scoped_ptr<ListValue> target_list(new ListValue()); 496 scoped_ptr<ListValue> target_list(new ListValue());
428 497
429 std::vector<RenderViewHost*> rvh_vector = 498 std::vector<RenderViewHost*> rvh_vector =
430 DevToolsAgentHost::GetValidRenderViewHosts(); 499 DevToolsAgentHost::GetValidRenderViewHosts();
431 500
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 source->SetDefaultResource(IDR_INSPECT_HTML); 570 source->SetDefaultResource(IDR_INSPECT_HTML);
502 return source; 571 return source;
503 } 572 }
504 573
505 void InspectUI::RemoteDevicesChanged( 574 void InspectUI::RemoteDevicesChanged(
506 DevToolsAdbBridge::RemoteDevices* devices) { 575 DevToolsAdbBridge::RemoteDevices* devices) {
507 remote_pages_.clear(); 576 remote_pages_.clear();
508 ListValue device_list; 577 ListValue device_list;
509 for (DevToolsAdbBridge::RemoteDevices::iterator dit = devices->begin(); 578 for (DevToolsAdbBridge::RemoteDevices::iterator dit = devices->begin();
510 dit != devices->end(); ++dit) { 579 dit != devices->end(); ++dit) {
511 DevToolsAdbBridge::RemoteDevice& device = *(dit->get()); 580 DevToolsAdbBridge::RemoteDevice* device = dit->get();
512 DictionaryValue* device_data = new DictionaryValue(); 581 DictionaryValue* device_data = new DictionaryValue();
513 device_data->SetString(kAdbModelField, device.model()); 582 device_data->SetString(kAdbModelField, device->model());
514 device_data->SetString(kAdbSerialField, device.serial()); 583 device_data->SetString(kAdbSerialField, device->serial());
584 device_data->SetString(kAdbGlobalIdField, device->global_id());
515 ListValue* browser_list = new ListValue(); 585 ListValue* browser_list = new ListValue();
516 device_data->Set(kAdbBrowsersField, browser_list); 586 device_data->Set(kAdbBrowsersField, browser_list);
517 587
518 DevToolsAdbBridge::RemoteBrowsers& browsers = device.browsers(); 588 DevToolsAdbBridge::RemoteBrowsers& browsers = device->browsers();
519 for (DevToolsAdbBridge::RemoteBrowsers::iterator bit = 589 for (DevToolsAdbBridge::RemoteBrowsers::iterator bit =
520 browsers.begin(); bit != browsers.end(); ++bit) { 590 browsers.begin(); bit != browsers.end(); ++bit) {
521 DevToolsAdbBridge::RemoteBrowser& browser = *(bit->get()); 591 DevToolsAdbBridge::RemoteBrowser* browser = bit->get();
522 DictionaryValue* browser_data = new DictionaryValue(); 592 DictionaryValue* browser_data = new DictionaryValue();
523 browser_data->SetString(kAdbBrowserNameField, browser.name()); 593 browser_data->SetString(kAdbBrowserNameField, browser->name());
594 browser_data->SetString(kAdbGlobalIdField, browser->global_id());
595 remote_browsers_[browser->global_id()] = browser;
524 ListValue* page_list = new ListValue(); 596 ListValue* page_list = new ListValue();
525 browser_data->Set(kAdbPagesField, page_list); 597 browser_data->Set(kAdbPagesField, page_list);
526 598
527 DevToolsAdbBridge::RemotePages& pages = browser.pages(); 599 DevToolsAdbBridge::RemotePages& pages = browser->pages();
528 for (DevToolsAdbBridge::RemotePages::iterator it = 600 for (DevToolsAdbBridge::RemotePages::iterator it =
529 pages.begin(); it != pages.end(); ++it) { 601 pages.begin(); it != pages.end(); ++it) {
530 DevToolsAdbBridge::RemotePage* page = it->get(); 602 DevToolsAdbBridge::RemotePage* page = it->get();
531 DictionaryValue* page_data = BuildTargetDescriptor(kAdbTargetType, 603 DictionaryValue* page_data = BuildTargetDescriptor(
532 false, GURL(page->url()), page->title(), GURL(page->favicon_url()), 604 kAdbTargetType, page->attached(),
605 GURL(page->url()), page->title(), GURL(page->favicon_url()),
533 0, 0); 606 0, 0);
534 page_data->SetString(kAdbPageIdField, page->global_id()); 607 page_data->SetString(kAdbGlobalIdField, page->global_id());
608 remote_pages_[page->global_id()] = page;
535 page_list->Append(page_data); 609 page_list->Append(page_data);
536 remote_pages_[page->global_id()] = page;
537 } 610 }
538 browser_list->Append(browser_data); 611 browser_list->Append(browser_data);
539 } 612 }
540 device_list.Append(device_data); 613 device_list.Append(device_data);
541 } 614 }
542 web_ui()->CallJavascriptFunction("populateDeviceLists", device_list); 615 web_ui()->CallJavascriptFunction("populateDeviceLists", device_list);
543 } 616 }
544 617
545 void InspectUI::UpdatePortForwardingEnabled() { 618 void InspectUI::UpdatePortForwardingEnabled() {
546 Profile* profile = Profile::FromWebUI(web_ui()); 619 Profile* profile = Profile::FromWebUI(web_ui());
547 const base::Value* value = profile->GetPrefs()->FindPreference( 620 const base::Value* value = profile->GetPrefs()->FindPreference(
548 prefs::kDevToolsPortForwardingEnabled)->GetValue(); 621 prefs::kDevToolsPortForwardingEnabled)->GetValue();
549 web_ui()->CallJavascriptFunction("updatePortForwardingEnabled", *value); 622 web_ui()->CallJavascriptFunction("updatePortForwardingEnabled", *value);
550 623
551 } 624 }
552 625
553 void InspectUI::UpdatePortForwardingConfig() { 626 void InspectUI::UpdatePortForwardingConfig() {
554 Profile* profile = Profile::FromWebUI(web_ui()); 627 Profile* profile = Profile::FromWebUI(web_ui());
555 const base::Value* value = profile->GetPrefs()->FindPreference( 628 const base::Value* value = profile->GetPrefs()->FindPreference(
556 prefs::kDevToolsPortForwardingConfig)->GetValue(); 629 prefs::kDevToolsPortForwardingConfig)->GetValue();
557 web_ui()->CallJavascriptFunction("updatePortForwardingConfig", *value); 630 web_ui()->CallJavascriptFunction("updatePortForwardingConfig", *value);
558 } 631 }
OLDNEW
« chrome/browser/devtools/devtools_adb_bridge.cc ('K') | « chrome/browser/ui/webui/inspect_ui.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698