Chromium Code Reviews| 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" |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 285 const DevToolsTargetsUIHandler::TargetCallback&) OVERRIDE; | 285 const DevToolsTargetsUIHandler::TargetCallback&) OVERRIDE; |
| 286 | 286 |
| 287 virtual scoped_refptr<content::DevToolsAgentHost> GetBrowserAgentHost( | 287 virtual scoped_refptr<content::DevToolsAgentHost> GetBrowserAgentHost( |
| 288 const std::string& browser_id) OVERRIDE; | 288 const std::string& browser_id) OVERRIDE; |
| 289 | 289 |
| 290 private: | 290 private: |
| 291 // DevToolsAndroidBridge::Listener overrides. | 291 // DevToolsAndroidBridge::Listener overrides. |
| 292 virtual void DeviceListChanged( | 292 virtual void DeviceListChanged( |
| 293 const DevToolsAndroidBridge::RemoteDevices& devices) OVERRIDE; | 293 const DevToolsAndroidBridge::RemoteDevices& devices) OVERRIDE; |
| 294 | 294 |
| 295 DevToolsAndroidBridge* GetAndroidBridge(); | |
| 296 | |
| 295 Profile* profile_; | 297 Profile* profile_; |
| 296 | 298 |
| 297 typedef std::map<std::string, | 299 typedef std::map<std::string, |
| 298 scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> > RemoteBrowsers; | 300 scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> > RemoteBrowsers; |
| 299 RemoteBrowsers remote_browsers_; | 301 RemoteBrowsers remote_browsers_; |
| 300 }; | 302 }; |
| 301 | 303 |
| 302 AdbTargetsUIHandler::AdbTargetsUIHandler(const Callback& callback, | 304 AdbTargetsUIHandler::AdbTargetsUIHandler(const Callback& callback, |
| 303 Profile* profile) | 305 Profile* profile) |
| 304 : DevToolsTargetsUIHandler(kTargetSourceRemote, callback), | 306 : DevToolsTargetsUIHandler(kTargetSourceRemote, callback), |
| 305 profile_(profile) { | 307 profile_(profile) { |
| 306 DevToolsAndroidBridge* android_bridge = | 308 DevToolsAndroidBridge* android_bridge = GetAndroidBridge(); |
| 307 DevToolsAndroidBridge::Factory::GetForProfile(profile_); | |
| 308 if (android_bridge) | 309 if (android_bridge) |
| 309 android_bridge->AddDeviceListListener(this); | 310 android_bridge->AddDeviceListListener(this); |
| 310 } | 311 } |
| 311 | 312 |
| 312 AdbTargetsUIHandler::~AdbTargetsUIHandler() { | 313 AdbTargetsUIHandler::~AdbTargetsUIHandler() { |
| 313 DevToolsAndroidBridge* android_bridge = | 314 DevToolsAndroidBridge* android_bridge = GetAndroidBridge(); |
| 314 DevToolsAndroidBridge::Factory::GetForProfile(profile_); | |
| 315 if (android_bridge) | 315 if (android_bridge) |
| 316 android_bridge->RemoveDeviceListListener(this); | 316 android_bridge->RemoveDeviceListListener(this); |
| 317 } | 317 } |
| 318 | 318 |
| 319 static void CallOnTarget( | 319 static void CallOnTarget( |
| 320 const DevToolsTargetsUIHandler::TargetCallback& callback, | 320 const DevToolsTargetsUIHandler::TargetCallback& callback, |
| 321 DevToolsAndroidBridge::RemotePage* page) { | 321 DevToolsAndroidBridge::RemotePage* page) { |
| 322 scoped_ptr<DevToolsAndroidBridge::RemotePage> my_page(page); | 322 scoped_ptr<DevToolsAndroidBridge::RemotePage> my_page(page); |
| 323 callback.Run(my_page ? my_page->GetTarget() : NULL); | 323 callback.Run(my_page ? my_page->GetTarget() : NULL); |
| 324 } | 324 } |
| 325 | 325 |
| 326 void AdbTargetsUIHandler::Open( | 326 void AdbTargetsUIHandler::Open( |
| 327 const std::string& browser_id, | 327 const std::string& browser_id, |
| 328 const std::string& url, | 328 const std::string& url, |
| 329 const DevToolsTargetsUIHandler::TargetCallback& callback) { | 329 const DevToolsTargetsUIHandler::TargetCallback& callback) { |
| 330 RemoteBrowsers::iterator it = remote_browsers_.find(browser_id); | 330 RemoteBrowsers::iterator it = remote_browsers_.find(browser_id); |
| 331 if (it != remote_browsers_.end()) | 331 if (it == remote_browsers_.end()) |
| 332 it->second->Open(url, base::Bind(&CallOnTarget, callback)); | 332 return; |
| 333 | |
| 334 DevToolsAndroidBridge* android_bridge = GetAndroidBridge(); | |
| 335 if (android_bridge) | |
| 336 android_bridge->Open(it->second, url, base::Bind(&CallOnTarget, callback)); | |
| 333 } | 337 } |
| 334 | 338 |
| 335 scoped_refptr<content::DevToolsAgentHost> | 339 scoped_refptr<content::DevToolsAgentHost> |
| 336 AdbTargetsUIHandler::GetBrowserAgentHost( | 340 AdbTargetsUIHandler::GetBrowserAgentHost( |
| 337 const std::string& browser_id) { | 341 const std::string& browser_id) { |
| 338 RemoteBrowsers::iterator it = remote_browsers_.find(browser_id); | 342 RemoteBrowsers::iterator it = remote_browsers_.find(browser_id); |
| 339 return it != remote_browsers_.end() ? it->second->GetAgentHost() : NULL; | 343 if (it == remote_browsers_.end()) |
| 344 return NULL; | |
| 345 | |
| 346 DevToolsAndroidBridge* android_bridge = GetAndroidBridge(); | |
| 347 return android_bridge ? android_bridge->GetBrowserAgentHost(it->second) | |
| 348 : NULL; | |
| 340 } | 349 } |
| 341 | 350 |
| 342 void AdbTargetsUIHandler::DeviceListChanged( | 351 void AdbTargetsUIHandler::DeviceListChanged( |
| 343 const DevToolsAndroidBridge::RemoteDevices& devices) { | 352 const DevToolsAndroidBridge::RemoteDevices& devices) { |
| 344 remote_browsers_.clear(); | 353 remote_browsers_.clear(); |
| 345 STLDeleteValues(&targets_); | 354 STLDeleteValues(&targets_); |
| 346 | 355 |
| 356 DevToolsAndroidBridge* android_bridge = GetAndroidBridge(); | |
| 347 base::ListValue device_list; | 357 base::ListValue device_list; |
| 348 for (DevToolsAndroidBridge::RemoteDevices::const_iterator dit = | 358 for (DevToolsAndroidBridge::RemoteDevices::const_iterator dit = |
| 349 devices.begin(); dit != devices.end(); ++dit) { | 359 devices.begin(); dit != devices.end(); ++dit) { |
| 350 DevToolsAndroidBridge::RemoteDevice* device = dit->get(); | 360 DevToolsAndroidBridge::RemoteDevice* device = dit->get(); |
| 351 base::DictionaryValue* device_data = new base::DictionaryValue(); | 361 base::DictionaryValue* device_data = new base::DictionaryValue(); |
| 352 device_data->SetString(kAdbModelField, device->model()); | 362 device_data->SetString(kAdbModelField, device->model()); |
| 353 device_data->SetString(kAdbSerialField, device->serial()); | 363 device_data->SetString(kAdbSerialField, device->serial()); |
| 354 device_data->SetBoolean(kAdbConnectedField, device->is_connected()); | 364 device_data->SetBoolean(kAdbConnectedField, device->is_connected()); |
| 355 std::string device_id = base::StringPrintf( | 365 std::string device_id = base::StringPrintf( |
| 356 kAdbDeviceIdFormat, | 366 kAdbDeviceIdFormat, |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 382 base::Version local_version(version_info.Version()); | 392 base::Version local_version(version_info.Version()); |
| 383 | 393 |
| 384 browser_data->SetBoolean(kCompatibleVersion, | 394 browser_data->SetBoolean(kCompatibleVersion, |
| 385 (!remote_version.IsValid()) || (!local_version.IsValid()) || | 395 (!remote_version.IsValid()) || (!local_version.IsValid()) || |
| 386 remote_version.components()[0] <= local_version.components()[0]); | 396 remote_version.components()[0] <= local_version.components()[0]); |
| 387 | 397 |
| 388 base::ListValue* page_list = new base::ListValue(); | 398 base::ListValue* page_list = new base::ListValue(); |
| 389 remote_browsers_[browser_id] = browser; | 399 remote_browsers_[browser_id] = browser; |
| 390 browser_data->Set(kAdbPagesList, page_list); | 400 browser_data->Set(kAdbPagesList, page_list); |
| 391 std::vector<DevToolsAndroidBridge::RemotePage*> pages = | 401 std::vector<DevToolsAndroidBridge::RemotePage*> pages = |
| 392 browser->CreatePages(); | 402 android_bridge->CreatePages(browser); |
| 393 for (std::vector<DevToolsAndroidBridge::RemotePage*>::iterator it = | 403 for (std::vector<DevToolsAndroidBridge::RemotePage*>::iterator it = |
| 394 pages.begin(); it != pages.end(); ++it) { | 404 pages.begin(); it != pages.end(); ++it) { |
| 395 DevToolsAndroidBridge::RemotePage* page = *it; | 405 DevToolsAndroidBridge::RemotePage* page = *it; |
| 396 DevToolsTargetImpl* target = page->GetTarget(); | 406 DevToolsTargetImpl* target = page->GetTarget(); |
| 397 base::DictionaryValue* target_data = Serialize(*target); | 407 base::DictionaryValue* target_data = Serialize(*target); |
| 398 target_data->SetBoolean( | 408 target_data->SetBoolean( |
| 399 kAdbAttachedForeignField, | 409 kAdbAttachedForeignField, |
| 400 target->IsAttached() && | 410 target->IsAttached() && |
| 401 !DevToolsAndroidBridge::HasDevToolsWindow(target->GetId())); | 411 !android_bridge->HasDevToolsWindow(target->GetId())); |
| 402 // Pass the screen size in the target object to make sure that | 412 // Pass the screen size in the target object to make sure that |
| 403 // the caching logic does not prevent the target item from updating | 413 // the caching logic does not prevent the target item from updating |
| 404 // when the screen size changes. | 414 // when the screen size changes. |
| 405 gfx::Size screen_size = device->screen_size(); | 415 gfx::Size screen_size = device->screen_size(); |
| 406 target_data->SetInteger(kAdbScreenWidthField, screen_size.width()); | 416 target_data->SetInteger(kAdbScreenWidthField, screen_size.width()); |
| 407 target_data->SetInteger(kAdbScreenHeightField, screen_size.height()); | 417 target_data->SetInteger(kAdbScreenHeightField, screen_size.height()); |
| 408 targets_[target->GetId()] = target; | 418 targets_[target->GetId()] = target; |
| 409 page_list->Append(target_data); | 419 page_list->Append(target_data); |
| 410 } | 420 } |
| 411 browser_list->Append(browser_data); | 421 browser_list->Append(browser_data); |
| 412 } | 422 } |
| 413 | 423 |
| 414 device_list.Append(device_data); | 424 device_list.Append(device_data); |
| 415 } | 425 } |
| 416 SendSerializedTargets(device_list); | 426 SendSerializedTargets(device_list); |
| 417 } | 427 } |
| 418 | 428 |
| 429 DevToolsAndroidBridge* AdbTargetsUIHandler::GetAndroidBridge() { | |
| 430 return DevToolsAndroidBridge::Factory::GetForProfile(profile_); | |
|
dgozman
2014/10/02 12:19:34
Why don't you just get it once and save to |androi
vkuzkokov
2014/10/02 13:07:46
Done.
| |
| 431 } | |
| 432 | |
| 419 } // namespace | 433 } // namespace |
| 420 | 434 |
| 421 // DevToolsTargetsUIHandler --------------------------------------------------- | 435 // DevToolsTargetsUIHandler --------------------------------------------------- |
| 422 | 436 |
| 423 DevToolsTargetsUIHandler::DevToolsTargetsUIHandler( | 437 DevToolsTargetsUIHandler::DevToolsTargetsUIHandler( |
| 424 const std::string& source_id, | 438 const std::string& source_id, |
| 425 const Callback& callback) | 439 const Callback& callback) |
| 426 : source_id_(source_id), | 440 : source_id_(source_id), |
| 427 callback_(callback) { | 441 callback_(callback) { |
| 428 } | 442 } |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 525 device_status_dict->SetString(kPortForwardingBrowserId, | 539 device_status_dict->SetString(kPortForwardingBrowserId, |
| 526 SerializeBrowserId(sit->first)); | 540 SerializeBrowserId(sit->first)); |
| 527 | 541 |
| 528 std::string device_id = base::StringPrintf( | 542 std::string device_id = base::StringPrintf( |
| 529 kAdbDeviceIdFormat, | 543 kAdbDeviceIdFormat, |
| 530 sit->first->serial().c_str()); | 544 sit->first->serial().c_str()); |
| 531 result.Set(device_id, device_status_dict); | 545 result.Set(device_id, device_status_dict); |
| 532 } | 546 } |
| 533 callback_.Run(result); | 547 callback_.Run(result); |
| 534 } | 548 } |
| OLD | NEW |