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

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

Issue 912863002: [DevTools] Remote JSON requests from javascript (Chromium side) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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_targets_ui.h" 5 #include "chrome/browser/devtools/devtools_targets_ui.h"
6 6
7 #include "base/memory/weak_ptr.h" 7 #include "base/memory/weak_ptr.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "base/values.h" 10 #include "base/values.h"
11 #include "base/version.h" 11 #include "base/version.h"
12 #include "chrome/browser/devtools/device/devtools_android_bridge.h" 12 #include "chrome/browser/devtools/device/devtools_android_bridge.h"
13 #include "chrome/browser/devtools/devtools_target_impl.h" 13 #include "chrome/browser/devtools/devtools_target_impl.h"
14 #include "chrome/common/chrome_version_info.h" 14 #include "chrome/common/chrome_version_info.h"
15 #include "content/public/browser/browser_child_process_observer.h" 15 #include "content/public/browser/browser_child_process_observer.h"
16 #include "content/public/browser/browser_thread.h" 16 #include "content/public/browser/browser_thread.h"
17 #include "content/public/browser/child_process_data.h" 17 #include "content/public/browser/child_process_data.h"
18 #include "content/public/browser/notification_observer.h" 18 #include "content/public/browser/notification_observer.h"
19 #include "content/public/browser/notification_registrar.h" 19 #include "content/public/browser/notification_registrar.h"
20 #include "content/public/browser/notification_service.h" 20 #include "content/public/browser/notification_service.h"
21 #include "content/public/browser/notification_source.h" 21 #include "content/public/browser/notification_source.h"
22 #include "content/public/browser/notification_types.h" 22 #include "content/public/browser/notification_types.h"
23 #include "content/public/browser/worker_service.h" 23 #include "content/public/browser/worker_service.h"
24 #include "content/public/browser/worker_service_observer.h" 24 #include "content/public/browser/worker_service_observer.h"
25 #include "content/public/common/process_type.h" 25 #include "content/public/common/process_type.h"
26 #include "net/base/escape.h" 26 #include "net/base/escape.h"
27 #include "net/base/net_errors.h"
27 28
28 using content::BrowserThread; 29 using content::BrowserThread;
29 30
30 namespace { 31 namespace {
31 32
32 const char kTargetSourceField[] = "source"; 33 const char kTargetSourceField[] = "source";
33 const char kTargetSourceLocal[] = "local"; 34 const char kTargetSourceLocal[] = "local";
34 const char kTargetSourceRemote[] = "remote"; 35 const char kTargetSourceRemote[] = "remote";
35 36
36 const char kTargetIdField[] = "id"; 37 const char kTargetIdField[] = "id";
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 &LocalTargetsUIHandler::SendTargets, 238 &LocalTargetsUIHandler::SendTargets,
238 weak_factory_.GetWeakPtr())); 239 weak_factory_.GetWeakPtr()));
239 } 240 }
240 241
241 void LocalTargetsUIHandler::SendTargets( 242 void LocalTargetsUIHandler::SendTargets(
242 const DevToolsTargetImpl::List& targets) { 243 const DevToolsTargetImpl::List& targets) {
243 base::ListValue list_value; 244 base::ListValue list_value;
244 std::map<std::string, base::DictionaryValue*> id_to_descriptor; 245 std::map<std::string, base::DictionaryValue*> id_to_descriptor;
245 246
246 STLDeleteValues(&targets_); 247 STLDeleteValues(&targets_);
247 for (DevToolsTargetImpl::List::const_iterator it = targets.begin(); 248 for (DevToolsTargetImpl* target : targets) {
248 it != targets.end(); ++it) {
249 DevToolsTargetImpl* target = *it;
250 targets_[target->GetId()] = target; 249 targets_[target->GetId()] = target;
251 id_to_descriptor[target->GetId()] = Serialize(*target); 250 id_to_descriptor[target->GetId()] = Serialize(*target);
252 } 251 }
253 252
254 for (TargetMap::iterator it(targets_.begin()); it != targets_.end(); ++it) { 253 for (const auto& pair : targets_) {
255 DevToolsTargetImpl* target = it->second; 254 DevToolsTargetImpl* target = pair.second;
256 base::DictionaryValue* descriptor = id_to_descriptor[target->GetId()]; 255 base::DictionaryValue* descriptor = id_to_descriptor[target->GetId()];
257 std::string parent_id = target->GetParentId(); 256 std::string parent_id = target->GetParentId();
258 if (parent_id.empty() || id_to_descriptor.count(parent_id) == 0) { 257 if (parent_id.empty() || id_to_descriptor.count(parent_id) == 0) {
259 list_value.Append(descriptor); 258 list_value.Append(descriptor);
260 } else { 259 } else {
261 base::DictionaryValue* parent = id_to_descriptor[parent_id]; 260 base::DictionaryValue* parent = id_to_descriptor[parent_id];
262 base::ListValue* guests = NULL; 261 base::ListValue* guests = nullptr;
263 if (!parent->GetList(kGuestList, &guests)) { 262 if (!parent->GetList(kGuestList, &guests)) {
264 guests = new base::ListValue(); 263 guests = new base::ListValue();
265 parent->Set(kGuestList, guests); 264 parent->Set(kGuestList, guests);
266 } 265 }
267 guests->Append(descriptor); 266 guests->Append(descriptor);
268 } 267 }
269 } 268 }
270 269
271 SendSerializedTargets(list_value); 270 SendSerializedTargets(list_value);
272 } 271 }
273 272
274 // AdbTargetsUIHandler -------------------------------------------------------- 273 // AdbTargetsUIHandler --------------------------------------------------------
275 274
276 class AdbTargetsUIHandler 275 class AdbTargetsUIHandler
277 : public DevToolsTargetsUIHandler, 276 : public DevToolsTargetsUIHandler,
278 public DevToolsAndroidBridge::DeviceListListener { 277 public DevToolsAndroidBridge::DeviceListListener {
279 public: 278 public:
280 AdbTargetsUIHandler(const Callback& callback, Profile* profile); 279 AdbTargetsUIHandler(const Callback& callback, Profile* profile);
281 ~AdbTargetsUIHandler() override; 280 ~AdbTargetsUIHandler() override;
282 281
283 void Open(const std::string& browser_id, 282 void Open(const std::string& browser_id,
284 const std::string& url, 283 const std::string& url,
285 const DevToolsTargetsUIHandler::TargetCallback&) override; 284 const DevToolsTargetsUIHandler::TargetCallback&) override;
286 285
287 scoped_refptr<content::DevToolsAgentHost> GetBrowserAgentHost( 286 scoped_refptr<content::DevToolsAgentHost> GetBrowserAgentHost(
288 const std::string& browser_id) override; 287 const std::string& browser_id) override;
289 288
289 void SendJsonRequest(const std::string& browser_id,
290 const std::string& url,
291 const JsonCallback& callback) override;
292
290 private: 293 private:
291 // DevToolsAndroidBridge::Listener overrides. 294 // DevToolsAndroidBridge::Listener overrides.
292 void DeviceListChanged( 295 void DeviceListChanged(
293 const DevToolsAndroidBridge::RemoteDevices& devices) override; 296 const DevToolsAndroidBridge::RemoteDevices& devices) override;
294 297
295 DevToolsAndroidBridge* GetAndroidBridge(); 298 DevToolsAndroidBridge* GetAndroidBridge();
296 299
297 Profile* const profile_; 300 Profile* const profile_;
298 DevToolsAndroidBridge* const android_bridge_; 301 DevToolsAndroidBridge* const android_bridge_;
299 302
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 it->second, 338 it->second,
336 url, 339 url,
337 base::Bind(&CallOnTarget, callback, android_bridge_)); 340 base::Bind(&CallOnTarget, callback, android_bridge_));
338 } 341 }
339 342
340 scoped_refptr<content::DevToolsAgentHost> 343 scoped_refptr<content::DevToolsAgentHost>
341 AdbTargetsUIHandler::GetBrowserAgentHost( 344 AdbTargetsUIHandler::GetBrowserAgentHost(
342 const std::string& browser_id) { 345 const std::string& browser_id) {
343 RemoteBrowsers::iterator it = remote_browsers_.find(browser_id); 346 RemoteBrowsers::iterator it = remote_browsers_.find(browser_id);
344 if (it == remote_browsers_.end()) 347 if (it == remote_browsers_.end())
345 return NULL; 348 return nullptr;
346 349
347 return android_bridge_->GetBrowserAgentHost(it->second); 350 return android_bridge_->GetBrowserAgentHost(it->second);
348 } 351 }
349 352
353 void AdbTargetsUIHandler::SendJsonRequest(const std::string& browser_id,
354 const std::string& url,
355 const JsonCallback& callback) {
356 RemoteBrowsers::iterator it = remote_browsers_.find(browser_id);
357 if (it == remote_browsers_.end()) {
358 callback.Run(net::ERR_FAILED, std::string());
359 } else {
360 android_bridge_->SendJsonRequest(it->second, url, callback);
361 }
362 }
363
350 void AdbTargetsUIHandler::DeviceListChanged( 364 void AdbTargetsUIHandler::DeviceListChanged(
351 const DevToolsAndroidBridge::RemoteDevices& devices) { 365 const DevToolsAndroidBridge::RemoteDevices& devices) {
352 remote_browsers_.clear(); 366 remote_browsers_.clear();
353 STLDeleteValues(&targets_); 367 STLDeleteValues(&targets_);
354 368
355 base::ListValue device_list; 369 base::ListValue device_list;
356 for (DevToolsAndroidBridge::RemoteDevices::const_iterator dit = 370 for (const auto& device : devices) {
357 devices.begin(); dit != devices.end(); ++dit) {
358 DevToolsAndroidBridge::RemoteDevice* device = dit->get();
359 base::DictionaryValue* device_data = new base::DictionaryValue(); 371 base::DictionaryValue* device_data = new base::DictionaryValue();
360 device_data->SetString(kAdbModelField, device->model()); 372 device_data->SetString(kAdbModelField, device->model());
361 device_data->SetString(kAdbSerialField, device->serial()); 373 device_data->SetString(kAdbSerialField, device->serial());
362 device_data->SetBoolean(kAdbConnectedField, device->is_connected()); 374 device_data->SetBoolean(kAdbConnectedField, device->is_connected());
363 std::string device_id = base::StringPrintf( 375 std::string device_id = base::StringPrintf(
364 kAdbDeviceIdFormat, 376 kAdbDeviceIdFormat,
365 device->serial().c_str()); 377 device->serial().c_str());
366 device_data->SetString(kTargetIdField, device_id); 378 device_data->SetString(kTargetIdField, device_id);
367 base::ListValue* browser_list = new base::ListValue(); 379 base::ListValue* browser_list = new base::ListValue();
368 device_data->Set(kAdbBrowsersList, browser_list); 380 device_data->Set(kAdbBrowsersList, browser_list);
369 381
370 DevToolsAndroidBridge::RemoteBrowsers& browsers = device->browsers(); 382 DevToolsAndroidBridge::RemoteBrowsers& browsers = device->browsers();
371 for (DevToolsAndroidBridge::RemoteBrowsers::iterator bit = 383 for (const auto& browser : browsers) {
372 browsers.begin(); bit != browsers.end(); ++bit) {
373 DevToolsAndroidBridge::RemoteBrowser* browser = bit->get();
374 base::DictionaryValue* browser_data = new base::DictionaryValue(); 384 base::DictionaryValue* browser_data = new base::DictionaryValue();
375 browser_data->SetString(kAdbBrowserNameField, browser->display_name()); 385 browser_data->SetString(kAdbBrowserNameField, browser->display_name());
376 browser_data->SetString(kAdbBrowserUserField, browser->user()); 386 browser_data->SetString(kAdbBrowserUserField, browser->user());
377 browser_data->SetString(kAdbBrowserVersionField, browser->version()); 387 browser_data->SetString(kAdbBrowserVersionField, browser->version());
378 DevToolsAndroidBridge::RemoteBrowser::ParsedVersion parsed = 388 DevToolsAndroidBridge::RemoteBrowser::ParsedVersion parsed =
379 browser->GetParsedVersion(); 389 browser->GetParsedVersion();
380 browser_data->SetInteger( 390 browser_data->SetInteger(
381 kAdbBrowserChromeVersionField, 391 kAdbBrowserChromeVersionField,
382 browser->IsChrome() && !parsed.empty() ? parsed[0] : 0); 392 browser->IsChrome() && !parsed.empty() ? parsed[0] : 0);
383 std::string browser_id = SerializeBrowserId(browser); 393 std::string browser_id = SerializeBrowserId(browser);
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 scoped_ptr<DevToolsTargetsUIHandler> 458 scoped_ptr<DevToolsTargetsUIHandler>
449 DevToolsTargetsUIHandler::CreateForAdb( 459 DevToolsTargetsUIHandler::CreateForAdb(
450 const DevToolsTargetsUIHandler::Callback& callback, Profile* profile) { 460 const DevToolsTargetsUIHandler::Callback& callback, Profile* profile) {
451 return scoped_ptr<DevToolsTargetsUIHandler>( 461 return scoped_ptr<DevToolsTargetsUIHandler>(
452 new AdbTargetsUIHandler(callback, profile)); 462 new AdbTargetsUIHandler(callback, profile));
453 } 463 }
454 464
455 DevToolsTargetImpl* DevToolsTargetsUIHandler::GetTarget( 465 DevToolsTargetImpl* DevToolsTargetsUIHandler::GetTarget(
456 const std::string& target_id) { 466 const std::string& target_id) {
457 TargetMap::iterator it = targets_.find(target_id); 467 TargetMap::iterator it = targets_.find(target_id);
458 if (it != targets_.end()) 468 return it == targets_.end() ? nullptr : it->second;
459 return it->second;
460 return NULL;
461 } 469 }
462 470
463 void DevToolsTargetsUIHandler::Open(const std::string& browser_id, 471 void DevToolsTargetsUIHandler::Open(const std::string& browser_id,
464 const std::string& url, 472 const std::string& url,
465 const TargetCallback& callback) { 473 const TargetCallback& callback) {
466 callback.Run(NULL); 474 callback.Run(nullptr);
467 } 475 }
468 476
469 scoped_refptr<content::DevToolsAgentHost> 477 scoped_refptr<content::DevToolsAgentHost>
470 DevToolsTargetsUIHandler::GetBrowserAgentHost(const std::string& browser_id) { 478 DevToolsTargetsUIHandler::GetBrowserAgentHost(const std::string& browser_id) {
471 return NULL; 479 return nullptr;
480 }
481
482 void DevToolsTargetsUIHandler::SendJsonRequest(const std::string& browser_id,
483 const std::string& url,
484 const JsonCallback& callback) {
485 callback.Run(net::ERR_FAILED, std::string());
472 } 486 }
473 487
474 base::DictionaryValue* DevToolsTargetsUIHandler::Serialize( 488 base::DictionaryValue* DevToolsTargetsUIHandler::Serialize(
475 const DevToolsTargetImpl& target) { 489 const DevToolsTargetImpl& target) {
476 base::DictionaryValue* target_data = new base::DictionaryValue(); 490 base::DictionaryValue* target_data = new base::DictionaryValue();
477 target_data->SetString(kTargetSourceField, source_id_); 491 target_data->SetString(kTargetSourceField, source_id_);
478 target_data->SetString(kTargetIdField, target.GetId()); 492 target_data->SetString(kTargetIdField, target.GetId());
479 target_data->SetString(kTargetTypeField, target.GetType()); 493 target_data->SetString(kTargetTypeField, target.GetType());
480 target_data->SetBoolean(kAttachedField, target.IsAttached()); 494 target_data->SetBoolean(kAttachedField, target.IsAttached());
481 target_data->SetString(kUrlField, target.GetURL().spec()); 495 target_data->SetString(kUrlField, target.GetURL().spec());
(...skipping 26 matching lines...) Expand all
508 PortForwardingStatusSerializer::~PortForwardingStatusSerializer() { 522 PortForwardingStatusSerializer::~PortForwardingStatusSerializer() {
509 DevToolsAndroidBridge* android_bridge = 523 DevToolsAndroidBridge* android_bridge =
510 DevToolsAndroidBridge::Factory::GetForProfile(profile_); 524 DevToolsAndroidBridge::Factory::GetForProfile(profile_);
511 if (android_bridge) 525 if (android_bridge)
512 android_bridge->RemovePortForwardingListener(this); 526 android_bridge->RemovePortForwardingListener(this);
513 } 527 }
514 528
515 void PortForwardingStatusSerializer::PortStatusChanged( 529 void PortForwardingStatusSerializer::PortStatusChanged(
516 const ForwardingStatus& status) { 530 const ForwardingStatus& status) {
517 base::DictionaryValue result; 531 base::DictionaryValue result;
518 for (ForwardingStatus::const_iterator sit = status.begin(); 532 for (const auto& device_status : status) {
519 sit != status.end(); ++sit) {
520 base::DictionaryValue* port_status_dict = new base::DictionaryValue(); 533 base::DictionaryValue* port_status_dict = new base::DictionaryValue();
521 const PortStatusMap& port_status_map = sit->second; 534 for (const auto& port_status : device_status.second) {
522 for (PortStatusMap::const_iterator it = port_status_map.begin();
523 it != port_status_map.end(); ++it) {
524 port_status_dict->SetInteger( 535 port_status_dict->SetInteger(
525 base::StringPrintf("%d", it->first), it->second); 536 base::StringPrintf("%d", port_status.first), port_status.second);
526 } 537 }
527 538
528 base::DictionaryValue* device_status_dict = new base::DictionaryValue(); 539 base::DictionaryValue* device_status_dict = new base::DictionaryValue();
529 device_status_dict->Set(kPortForwardingPorts, port_status_dict); 540 device_status_dict->Set(kPortForwardingPorts, port_status_dict);
530 device_status_dict->SetString(kPortForwardingBrowserId, 541 device_status_dict->SetString(kPortForwardingBrowserId,
531 SerializeBrowserId(sit->first)); 542 SerializeBrowserId(device_status.first));
532 543
533 std::string device_id = base::StringPrintf( 544 std::string device_id = base::StringPrintf(
534 kAdbDeviceIdFormat, 545 kAdbDeviceIdFormat,
535 sit->first->serial().c_str()); 546 device_status.first->serial().c_str());
536 result.Set(device_id, device_status_dict); 547 result.Set(device_id, device_status_dict);
537 } 548 }
538 callback_.Run(result); 549 callback_.Run(result);
539 } 550 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698