| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/device/devtools_android_bridge.h" | 5 #include "chrome/browser/devtools/device/devtools_android_bridge.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <map> | 9 #include <map> |
| 10 #include <set> | 10 #include <set> |
| (...skipping 710 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 721 : profile_(profile), | 721 : profile_(profile), |
| 722 device_manager_(AndroidDeviceManager::Create()), | 722 device_manager_(AndroidDeviceManager::Create()), |
| 723 task_scheduler_(base::Bind(&DevToolsAndroidBridge::ScheduleTaskDefault)), | 723 task_scheduler_(base::Bind(&DevToolsAndroidBridge::ScheduleTaskDefault)), |
| 724 port_forwarding_controller_(new PortForwardingController(profile, this)), | 724 port_forwarding_controller_(new PortForwardingController(profile, this)), |
| 725 weak_factory_(this) { | 725 weak_factory_(this) { |
| 726 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 726 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 727 pref_change_registrar_.Init(profile_->GetPrefs()); | 727 pref_change_registrar_.Init(profile_->GetPrefs()); |
| 728 pref_change_registrar_.Add(prefs::kDevToolsDiscoverUsbDevicesEnabled, | 728 pref_change_registrar_.Add(prefs::kDevToolsDiscoverUsbDevicesEnabled, |
| 729 base::Bind(&DevToolsAndroidBridge::CreateDeviceProviders, | 729 base::Bind(&DevToolsAndroidBridge::CreateDeviceProviders, |
| 730 base::Unretained(this))); | 730 base::Unretained(this))); |
| 731 pref_change_registrar_.Add(prefs::kDevToolsTargetDiscoveryConfig, |
| 732 base::Bind(&DevToolsAndroidBridge::CreateDeviceProviders, |
| 733 base::Unretained(this))); |
| 731 CreateDeviceProviders(); | 734 CreateDeviceProviders(); |
| 732 } | 735 } |
| 733 | 736 |
| 734 void DevToolsAndroidBridge::AddDeviceListListener( | 737 void DevToolsAndroidBridge::AddDeviceListListener( |
| 735 DeviceListListener* listener) { | 738 DeviceListListener* listener) { |
| 736 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 739 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 737 bool polling_was_off = !NeedsDeviceListPolling(); | 740 bool polling_was_off = !NeedsDeviceListPolling(); |
| 738 device_list_listeners_.push_back(listener); | 741 device_list_listeners_.push_back(listener); |
| 739 if (polling_was_off) | 742 if (polling_was_off) |
| 740 StartDeviceListPolling(); | 743 StartDeviceListPolling(); |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 896 | 899 |
| 897 // static | 900 // static |
| 898 void DevToolsAndroidBridge::ScheduleTaskDefault(const base::Closure& task) { | 901 void DevToolsAndroidBridge::ScheduleTaskDefault(const base::Closure& task) { |
| 899 BrowserThread::PostDelayedTask( | 902 BrowserThread::PostDelayedTask( |
| 900 BrowserThread::UI, | 903 BrowserThread::UI, |
| 901 FROM_HERE, | 904 FROM_HERE, |
| 902 task, | 905 task, |
| 903 base::TimeDelta::FromMilliseconds(kAdbPollingIntervalMs)); | 906 base::TimeDelta::FromMilliseconds(kAdbPollingIntervalMs)); |
| 904 } | 907 } |
| 905 | 908 |
| 906 static scoped_refptr<TCPDeviceProvider> CreateTCPDeviceProvider() { | 909 static std::set<net::HostPortPair> ParseTargetDiscoveryPreferenceValue( |
| 910 const base::ListValue* preferenceValue) { |
| 911 std::set<net::HostPortPair> targets; |
| 912 if (!preferenceValue || preferenceValue->empty()) |
| 913 return targets; |
| 914 std::string address; |
| 915 for (size_t i = 0; i < preferenceValue->GetSize(); i++) { |
| 916 if (!preferenceValue->GetString(i, &address)) |
| 917 continue; |
| 918 net::HostPortPair target = net::HostPortPair::FromString(address); |
| 919 if (target.IsEmpty()) { |
| 920 LOG(WARNING) << "Invalid target: " << address; |
| 921 continue; |
| 922 } |
| 923 targets.insert(target); |
| 924 } |
| 925 return targets; |
| 926 } |
| 927 |
| 928 static scoped_refptr<TCPDeviceProvider> CreateTCPDeviceProvider( |
| 929 const base::ListValue* targetDiscoveryConfig) { |
| 907 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); | 930 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
| 908 if (!command_line->HasSwitch(switches::kRemoteDebuggingTargets)) | 931 std::set<net::HostPortPair> targets = |
| 932 ParseTargetDiscoveryPreferenceValue(targetDiscoveryConfig); |
| 933 if (targets.empty() && |
| 934 !command_line->HasSwitch(switches::kRemoteDebuggingTargets)) |
| 909 return nullptr; | 935 return nullptr; |
| 910 std::string value = | 936 std::string value = |
| 911 command_line->GetSwitchValueASCII(switches::kRemoteDebuggingTargets); | 937 command_line->GetSwitchValueASCII(switches::kRemoteDebuggingTargets); |
| 912 std::vector<std::string> addresses = base::SplitString( | 938 std::vector<std::string> addresses = base::SplitString( |
| 913 value, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); | 939 value, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); |
| 914 std::set<net::HostPortPair> targets; | |
| 915 for (const std::string& address : addresses) { | 940 for (const std::string& address : addresses) { |
| 916 net::HostPortPair target = net::HostPortPair::FromString(address); | 941 net::HostPortPair target = net::HostPortPair::FromString(address); |
| 917 if (target.IsEmpty()) { | 942 if (target.IsEmpty()) { |
| 918 LOG(WARNING) << "Invalid target: " << address; | 943 LOG(WARNING) << "Invalid target: " << address; |
| 919 continue; | 944 continue; |
| 920 } | 945 } |
| 921 targets.insert(target); | 946 targets.insert(target); |
| 922 } | 947 } |
| 923 if (targets.empty()) | 948 if (targets.empty()) |
| 924 return nullptr; | 949 return nullptr; |
| 925 return new TCPDeviceProvider(targets); | 950 return new TCPDeviceProvider(targets); |
| 926 } | 951 } |
| 927 | 952 |
| 928 void DevToolsAndroidBridge::CreateDeviceProviders() { | 953 void DevToolsAndroidBridge::CreateDeviceProviders() { |
| 929 AndroidDeviceManager::DeviceProviders device_providers; | 954 AndroidDeviceManager::DeviceProviders device_providers; |
| 955 PrefService* service = profile_->GetPrefs(); |
| 956 const base::ListValue* targets = |
| 957 service->GetList(prefs::kDevToolsTargetDiscoveryConfig); |
| 958 scoped_refptr<TCPDeviceProvider> provider = CreateTCPDeviceProvider(targets); |
| 959 if (tcp_provider_callback_) |
| 960 tcp_provider_callback_.Run(provider); |
| 930 | 961 |
| 931 if (scoped_refptr<TCPDeviceProvider> provider = CreateTCPDeviceProvider()) | 962 if (provider) |
| 932 device_providers.push_back(provider); | 963 device_providers.push_back(provider); |
| 933 | 964 |
| 934 #if defined(ENABLE_SERVICE_DISCOVERY) | 965 #if defined(ENABLE_SERVICE_DISCOVERY) |
| 935 device_providers.push_back(new CastDeviceProvider()); | 966 device_providers.push_back(new CastDeviceProvider()); |
| 936 #endif | 967 #endif |
| 937 | 968 |
| 938 device_providers.push_back(new AdbDeviceProvider()); | 969 device_providers.push_back(new AdbDeviceProvider()); |
| 939 | 970 |
| 940 PrefService* service = profile_->GetPrefs(); | |
| 941 const PrefService::Preference* pref = | 971 const PrefService::Preference* pref = |
| 942 service->FindPreference(prefs::kDevToolsDiscoverUsbDevicesEnabled); | 972 service->FindPreference(prefs::kDevToolsDiscoverUsbDevicesEnabled); |
| 943 const base::Value* pref_value = pref->GetValue(); | 973 const base::Value* pref_value = pref->GetValue(); |
| 944 | 974 |
| 945 bool enabled; | 975 bool enabled; |
| 946 if (pref_value->GetAsBoolean(&enabled) && enabled) { | 976 if (pref_value->GetAsBoolean(&enabled) && enabled) { |
| 947 device_providers.push_back(new UsbDeviceProvider(profile_)); | 977 device_providers.push_back(new UsbDeviceProvider(profile_)); |
| 948 } | 978 } |
| 949 | 979 |
| 950 device_manager_->SetDeviceProviders(device_providers); | 980 device_manager_->SetDeviceProviders(device_providers); |
| 951 if (NeedsDeviceListPolling()) { | 981 if (NeedsDeviceListPolling()) { |
| 952 StopDeviceListPolling(); | 982 StopDeviceListPolling(); |
| 953 StartDeviceListPolling(); | 983 StartDeviceListPolling(); |
| 954 } | 984 } |
| 955 } | 985 } |
| 986 |
| 987 void DevToolsAndroidBridge::set_tcp_provider_callback_for_test( |
| 988 TCPProviderCallback callback) { |
| 989 tcp_provider_callback_ = callback; |
| 990 CreateDeviceProviders(); |
| 991 } |
| OLD | NEW |