| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |