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 <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/location.h" | 10 #include "base/location.h" |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
246 scoped_refptr<DevToolsAgentHost> host = it.second; | 246 scoped_refptr<DevToolsAgentHost> host = it.second; |
247 base::DictionaryValue* descriptor = id_to_descriptor[host->GetId()]; | 247 base::DictionaryValue* descriptor = id_to_descriptor[host->GetId()]; |
248 DCHECK(descriptor); | 248 DCHECK(descriptor); |
249 std::string parent_id = host->GetParentId(); | 249 std::string parent_id = host->GetParentId(); |
250 if (parent_id.empty() || id_to_descriptor.count(parent_id) == 0) { | 250 if (parent_id.empty() || id_to_descriptor.count(parent_id) == 0) { |
251 list_value.Append(base::WrapUnique(descriptor)); | 251 list_value.Append(base::WrapUnique(descriptor)); |
252 } else { | 252 } else { |
253 base::DictionaryValue* parent = id_to_descriptor[parent_id]; | 253 base::DictionaryValue* parent = id_to_descriptor[parent_id]; |
254 base::ListValue* guests = NULL; | 254 base::ListValue* guests = NULL; |
255 if (!parent->GetList(kGuestList, &guests)) { | 255 if (!parent->GetList(kGuestList, &guests)) { |
256 guests = new base::ListValue(); | 256 auto guests_owned = base::MakeUnique<base::ListValue>(); |
257 parent->Set(kGuestList, guests); | 257 guests = guests_owned.get(); |
258 parent->Set(kGuestList, std::move(guests)); | |
jdoerrie
2017/04/06 14:25:49
Consider renaming guests to guests_weak and guests
vabr (Chromium)
2017/04/07 20:40:39
Oops, potential use-after-free. Thanks for catchin
| |
258 } | 259 } |
259 guests->Append(base::WrapUnique(descriptor)); | 260 guests->Append(base::WrapUnique(descriptor)); |
260 } | 261 } |
261 } | 262 } |
262 | 263 |
263 SendSerializedTargets(list_value); | 264 SendSerializedTargets(list_value); |
264 } | 265 } |
265 | 266 |
266 // AdbTargetsUIHandler -------------------------------------------------------- | 267 // AdbTargetsUIHandler -------------------------------------------------------- |
267 | 268 |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
337 DevToolsAndroidBridge::RemoteDevice* device = dit->get(); | 338 DevToolsAndroidBridge::RemoteDevice* device = dit->get(); |
338 std::unique_ptr<base::DictionaryValue> device_data( | 339 std::unique_ptr<base::DictionaryValue> device_data( |
339 new base::DictionaryValue()); | 340 new base::DictionaryValue()); |
340 device_data->SetString(kAdbModelField, device->model()); | 341 device_data->SetString(kAdbModelField, device->model()); |
341 device_data->SetString(kAdbSerialField, device->serial()); | 342 device_data->SetString(kAdbSerialField, device->serial()); |
342 device_data->SetBoolean(kAdbConnectedField, device->is_connected()); | 343 device_data->SetBoolean(kAdbConnectedField, device->is_connected()); |
343 std::string device_id = base::StringPrintf( | 344 std::string device_id = base::StringPrintf( |
344 kAdbDeviceIdFormat, | 345 kAdbDeviceIdFormat, |
345 device->serial().c_str()); | 346 device->serial().c_str()); |
346 device_data->SetString(kTargetIdField, device_id); | 347 device_data->SetString(kTargetIdField, device_id); |
347 base::ListValue* browser_list = new base::ListValue(); | 348 auto browser_list = base::MakeUnique<base::ListValue>(); |
348 device_data->Set(kAdbBrowsersList, browser_list); | |
349 | 349 |
350 DevToolsAndroidBridge::RemoteBrowsers& browsers = device->browsers(); | 350 DevToolsAndroidBridge::RemoteBrowsers& browsers = device->browsers(); |
351 for (DevToolsAndroidBridge::RemoteBrowsers::iterator bit = | 351 for (DevToolsAndroidBridge::RemoteBrowsers::iterator bit = |
352 browsers.begin(); bit != browsers.end(); ++bit) { | 352 browsers.begin(); bit != browsers.end(); ++bit) { |
353 DevToolsAndroidBridge::RemoteBrowser* browser = bit->get(); | 353 DevToolsAndroidBridge::RemoteBrowser* browser = bit->get(); |
354 std::unique_ptr<base::DictionaryValue> browser_data( | 354 std::unique_ptr<base::DictionaryValue> browser_data( |
355 new base::DictionaryValue()); | 355 new base::DictionaryValue()); |
356 browser_data->SetString(kAdbBrowserNameField, browser->display_name()); | 356 browser_data->SetString(kAdbBrowserNameField, browser->display_name()); |
357 browser_data->SetString(kAdbBrowserUserField, browser->user()); | 357 browser_data->SetString(kAdbBrowserUserField, browser->user()); |
358 browser_data->SetString(kAdbBrowserVersionField, browser->version()); | 358 browser_data->SetString(kAdbBrowserVersionField, browser->version()); |
359 DevToolsAndroidBridge::RemoteBrowser::ParsedVersion parsed = | 359 DevToolsAndroidBridge::RemoteBrowser::ParsedVersion parsed = |
360 browser->GetParsedVersion(); | 360 browser->GetParsedVersion(); |
361 browser_data->SetInteger( | 361 browser_data->SetInteger( |
362 kAdbBrowserChromeVersionField, | 362 kAdbBrowserChromeVersionField, |
363 browser->IsChrome() && !parsed.empty() ? parsed[0] : 0); | 363 browser->IsChrome() && !parsed.empty() ? parsed[0] : 0); |
364 std::string browser_id = browser->GetId(); | 364 std::string browser_id = browser->GetId(); |
365 browser_data->SetString(kTargetIdField, browser_id); | 365 browser_data->SetString(kTargetIdField, browser_id); |
366 browser_data->SetString(kTargetSourceField, source_id()); | 366 browser_data->SetString(kTargetSourceField, source_id()); |
367 | 367 |
368 base::ListValue* page_list = new base::ListValue(); | 368 auto page_list = base::MakeUnique<base::ListValue>(); |
369 remote_browsers_[browser_id] = browser; | 369 remote_browsers_[browser_id] = browser; |
370 browser_data->Set(kAdbPagesList, page_list); | |
371 for (const auto& page : browser->pages()) { | 370 for (const auto& page : browser->pages()) { |
372 scoped_refptr<DevToolsAgentHost> host = page->CreateTarget(); | 371 scoped_refptr<DevToolsAgentHost> host = page->CreateTarget(); |
373 std::unique_ptr<base::DictionaryValue> target_data = Serialize(host); | 372 std::unique_ptr<base::DictionaryValue> target_data = Serialize(host); |
374 // Pass the screen size in the target object to make sure that | 373 // Pass the screen size in the target object to make sure that |
375 // the caching logic does not prevent the target item from updating | 374 // the caching logic does not prevent the target item from updating |
376 // when the screen size changes. | 375 // when the screen size changes. |
377 gfx::Size screen_size = device->screen_size(); | 376 gfx::Size screen_size = device->screen_size(); |
378 target_data->SetInteger(kAdbScreenWidthField, screen_size.width()); | 377 target_data->SetInteger(kAdbScreenWidthField, screen_size.width()); |
379 target_data->SetInteger(kAdbScreenHeightField, screen_size.height()); | 378 target_data->SetInteger(kAdbScreenHeightField, screen_size.height()); |
380 targets_[host->GetId()] = host; | 379 targets_[host->GetId()] = host; |
381 page_list->Append(std::move(target_data)); | 380 page_list->Append(std::move(target_data)); |
382 } | 381 } |
382 browser_data->Set(kAdbPagesList, std::move(page_list)); | |
383 browser_list->Append(std::move(browser_data)); | 383 browser_list->Append(std::move(browser_data)); |
384 } | 384 } |
385 | 385 |
386 device_data->Set(kAdbBrowsersList, std::move(browser_list)); | |
386 device_list.Append(std::move(device_data)); | 387 device_list.Append(std::move(device_data)); |
387 } | 388 } |
388 SendSerializedTargets(device_list); | 389 SendSerializedTargets(device_list); |
389 } | 390 } |
390 | 391 |
391 } // namespace | 392 } // namespace |
392 | 393 |
393 // DevToolsTargetsUIHandler --------------------------------------------------- | 394 // DevToolsTargetsUIHandler --------------------------------------------------- |
394 | 395 |
395 DevToolsTargetsUIHandler::DevToolsTargetsUIHandler( | 396 DevToolsTargetsUIHandler::DevToolsTargetsUIHandler( |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
475 DevToolsAndroidBridge::Factory::GetForProfile(profile_); | 476 DevToolsAndroidBridge::Factory::GetForProfile(profile_); |
476 if (android_bridge) | 477 if (android_bridge) |
477 android_bridge->RemovePortForwardingListener(this); | 478 android_bridge->RemovePortForwardingListener(this); |
478 } | 479 } |
479 | 480 |
480 void PortForwardingStatusSerializer::PortStatusChanged( | 481 void PortForwardingStatusSerializer::PortStatusChanged( |
481 const ForwardingStatus& status) { | 482 const ForwardingStatus& status) { |
482 base::DictionaryValue result; | 483 base::DictionaryValue result; |
483 for (ForwardingStatus::const_iterator sit = status.begin(); | 484 for (ForwardingStatus::const_iterator sit = status.begin(); |
484 sit != status.end(); ++sit) { | 485 sit != status.end(); ++sit) { |
485 base::DictionaryValue* port_status_dict = new base::DictionaryValue(); | 486 auto port_status_dict = base::MakeUnique<base::DictionaryValue>(); |
486 const PortStatusMap& port_status_map = sit->second; | 487 const PortStatusMap& port_status_map = sit->second; |
487 for (PortStatusMap::const_iterator it = port_status_map.begin(); | 488 for (PortStatusMap::const_iterator it = port_status_map.begin(); |
488 it != port_status_map.end(); ++it) { | 489 it != port_status_map.end(); ++it) { |
489 port_status_dict->SetInteger(base::IntToString(it->first), it->second); | 490 port_status_dict->SetInteger(base::IntToString(it->first), it->second); |
490 } | 491 } |
491 | 492 |
492 base::DictionaryValue* device_status_dict = new base::DictionaryValue(); | 493 auto device_status_dict = base::MakeUnique<base::DictionaryValue>(); |
493 device_status_dict->Set(kPortForwardingPorts, port_status_dict); | 494 device_status_dict->Set(kPortForwardingPorts, std::move(port_status_dict)); |
494 device_status_dict->SetString(kPortForwardingBrowserId, | 495 device_status_dict->SetString(kPortForwardingBrowserId, |
495 sit->first->GetId()); | 496 sit->first->GetId()); |
496 | 497 |
497 std::string device_id = base::StringPrintf( | 498 std::string device_id = base::StringPrintf( |
498 kAdbDeviceIdFormat, | 499 kAdbDeviceIdFormat, |
499 sit->first->serial().c_str()); | 500 sit->first->serial().c_str()); |
500 result.Set(device_id, device_status_dict); | 501 result.Set(device_id, std::move(device_status_dict)); |
501 } | 502 } |
502 callback_.Run(result); | 503 callback_.Run(result); |
503 } | 504 } |
OLD | NEW |