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 |