| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 #include <algorithm> |
| 5 #include <array> |
| 4 | 6 |
| 5 #include "base/values.h" | 7 #include "base/values.h" |
| 6 #include "chrome/browser/devtools/device/devtools_android_bridge.h" | 8 #include "chrome/browser/devtools/device/devtools_android_bridge.h" |
| 7 #include "chrome/browser/devtools/device/tcp_device_provider.h" | 9 #include "chrome/browser/devtools/device/tcp_device_provider.h" |
| 8 #include "chrome/browser/profiles/profile.h" | 10 #include "chrome/browser/profiles/profile.h" |
| 9 #include "chrome/browser/ui/browser.h" | 11 #include "chrome/browser/ui/browser.h" |
| 10 #include "chrome/common/chrome_switches.h" | 12 #include "chrome/common/chrome_switches.h" |
| 11 #include "chrome/common/pref_names.h" | 13 #include "chrome/common/pref_names.h" |
| 12 #include "chrome/test/base/in_process_browser_test.h" | 14 #include "chrome/test/base/in_process_browser_test.h" |
| 13 #include "chrome/test/base/ui_test_utils.h" | 15 #include "chrome/test/base/ui_test_utils.h" |
| 14 #include "components/prefs/pref_service.h" | 16 #include "components/prefs/pref_service.h" |
| 15 | 17 |
| 16 class DevToolsAndroidBridgeTest : public InProcessBrowserTest { | 18 class DevToolsAndroidBridgeTest : public InProcessBrowserTest { |
| 17 }; | 19 }; |
| 18 | 20 |
| 19 static void assign_from_callback(scoped_refptr<TCPDeviceProvider>* store, | 21 static void assign_from_callback(scoped_refptr<TCPDeviceProvider>* store, |
| 20 int* invocation_counter, | 22 int* invocation_counter, |
| 21 scoped_refptr<TCPDeviceProvider> value) { | 23 scoped_refptr<TCPDeviceProvider> value) { |
| 22 (*invocation_counter)++; | 24 (*invocation_counter)++; |
| 23 *store = value; | 25 *store = value; |
| 24 } | 26 } |
| 25 | 27 |
| 26 IN_PROC_BROWSER_TEST_F(DevToolsAndroidBridgeTest, UpdatesTargetDiscovery) { | 28 static std::string SetToString(const std::set<std::string>& values) { |
| 29 std::ostringstream result; |
| 30 std::copy(values.begin(), values.end(), |
| 31 std::ostream_iterator<std::string>(result, ", ")); |
| 32 std::string result_string = result.str(); |
| 33 return result_string.substr(0, result_string.length() - 2); |
| 34 } |
| 35 |
| 36 static std::string AllTargetsString( |
| 37 scoped_refptr<TCPDeviceProvider> provider) { |
| 38 std::set<std::string> actual; |
| 39 for (const net::HostPortPair& hostport : provider->get_targets_for_test()) |
| 40 actual.insert(hostport.ToString()); |
| 41 return SetToString(actual); |
| 42 } |
| 43 |
| 44 IN_PROC_BROWSER_TEST_F(DevToolsAndroidBridgeTest, DiscoveryListChanges) { |
| 27 Profile* profile = browser()->profile(); | 45 Profile* profile = browser()->profile(); |
| 28 | 46 |
| 29 PrefService* service = profile->GetPrefs(); | 47 PrefService* service = profile->GetPrefs(); |
| 30 service->ClearPref(prefs::kDevToolsTargetDiscoveryConfig); | 48 service->ClearPref(prefs::kDevToolsTCPDiscoveryConfig); |
| 49 service->SetBoolean(prefs::kDevToolsDiscoverTCPTargetsEnabled, true); |
| 31 | 50 |
| 32 DevToolsAndroidBridge* bridge = | 51 DevToolsAndroidBridge* bridge = |
| 33 DevToolsAndroidBridge::Factory::GetForProfile(profile); | 52 DevToolsAndroidBridge::Factory::GetForProfile(profile); |
| 34 | 53 |
| 35 scoped_refptr<TCPDeviceProvider> provider; | 54 scoped_refptr<TCPDeviceProvider> provider; |
| 36 int called = 0; | 55 int called = 0; |
| 37 bridge->set_tcp_provider_callback_for_test( | 56 bridge->set_tcp_provider_callback_for_test( |
| 38 base::Bind(assign_from_callback, &provider, &called)); | 57 base::Bind(assign_from_callback, &provider, &called)); |
| 39 | 58 |
| 40 EXPECT_LT(0, called); | 59 EXPECT_LT(0, called); |
| 41 EXPECT_EQ(nullptr, provider); | 60 EXPECT_NE(nullptr, provider); |
| 61 |
| 62 EXPECT_STREQ("localhost:9222, localhost:9229", |
| 63 AllTargetsString(provider).c_str()); |
| 42 | 64 |
| 43 int invocations = called; | 65 int invocations = called; |
| 44 base::ListValue list; | 66 base::ListValue list; |
| 45 list.AppendString("somehost:2000"); | 67 list.AppendString("somehost:2000"); |
| 46 | 68 |
| 47 service->Set(prefs::kDevToolsTargetDiscoveryConfig, list); | 69 service->Set(prefs::kDevToolsTCPDiscoveryConfig, list); |
| 48 | 70 |
| 49 EXPECT_LT(invocations, called); | 71 EXPECT_LT(invocations, called); |
| 50 EXPECT_NE(nullptr, provider); | 72 EXPECT_NE(nullptr, provider); |
| 51 std::set<net::HostPortPair> pairs = provider->get_targets_for_test(); | 73 EXPECT_STREQ("somehost:2000", AllTargetsString(provider).c_str()); |
| 52 EXPECT_EQ(1UL, pairs.size()); | |
| 53 net::HostPortPair pair = *pairs.begin(); | |
| 54 EXPECT_EQ(2000, pair.port()); | |
| 55 EXPECT_EQ("somehost", pair.HostForURL()); | |
| 56 | 74 |
| 57 invocations = called; | 75 invocations = called; |
| 58 list.Clear(); | 76 list.Clear(); |
| 59 service->Set(prefs::kDevToolsTargetDiscoveryConfig, list); | 77 service->Set(prefs::kDevToolsTCPDiscoveryConfig, list); |
| 60 | 78 |
| 61 EXPECT_LT(invocations, called); | 79 EXPECT_LT(invocations, called); |
| 62 EXPECT_EQ(nullptr, provider); | 80 EXPECT_EQ(nullptr, provider); |
| 63 invocations = called; | 81 invocations = called; |
| 64 | 82 |
| 65 list.AppendString("b:1"); | 83 list.AppendString("b:1"); |
| 66 list.AppendString("c:2"); | 84 list.AppendString("c:2"); |
| 67 list.AppendString("<not really a good address."); | 85 list.AppendString("<not really a good address."); |
| 68 list.AppendString("d:3"); | 86 list.AppendString("d:3"); |
| 69 list.AppendString("c:2"); | 87 list.AppendString("c:2"); |
| 70 service->Set(prefs::kDevToolsTargetDiscoveryConfig, list); | 88 service->Set(prefs::kDevToolsTCPDiscoveryConfig, list); |
| 71 | 89 |
| 72 EXPECT_LT(invocations, called); | 90 EXPECT_LT(invocations, called); |
| 73 EXPECT_NE(nullptr, provider); | 91 EXPECT_NE(nullptr, provider); |
| 74 pairs = provider->get_targets_for_test(); | 92 EXPECT_STREQ("b:1, c:2, d:3", AllTargetsString(provider).c_str()); |
| 75 EXPECT_EQ(3UL, pairs.size()); | 93 } |
| 76 for (const net::HostPortPair pair : pairs) { | 94 |
| 77 EXPECT_EQ(pair.port(), pair.HostForURL()[0] - 'a'); | 95 IN_PROC_BROWSER_TEST_F(DevToolsAndroidBridgeTest, DefaultValues) { |
| 96 Profile* profile = browser()->profile(); |
| 97 |
| 98 PrefService* service = profile->GetPrefs(); |
| 99 DevToolsAndroidBridge::Factory::GetForProfile(profile); |
| 100 service->ClearPref(prefs::kDevToolsDiscoverTCPTargetsEnabled); |
| 101 service->ClearPref(prefs::kDevToolsTCPDiscoveryConfig); |
| 102 |
| 103 const base::ListValue* targets = |
| 104 service->GetList(prefs::kDevToolsTCPDiscoveryConfig); |
| 105 EXPECT_NE(nullptr, targets); |
| 106 EXPECT_EQ(2ul, targets->GetSize()); |
| 107 |
| 108 std::set<std::string> actual; |
| 109 for (size_t i = 0; i < targets->GetSize(); i++) { |
| 110 std::string value; |
| 111 targets->GetString(i, &value); |
| 112 actual.insert(value); |
| 78 } | 113 } |
| 114 EXPECT_STREQ("localhost:9222, localhost:9229", SetToString(actual).c_str()); |
| 115 EXPECT_FALSE(service->GetBoolean(prefs::kDevToolsDiscoverTCPTargetsEnabled)); |
| 79 } | 116 } |
| 117 |
| 118 IN_PROC_BROWSER_TEST_F(DevToolsAndroidBridgeTest, TCPEnableChange) { |
| 119 Profile* profile = browser()->profile(); |
| 120 |
| 121 PrefService* service = profile->GetPrefs(); |
| 122 service->ClearPref(prefs::kDevToolsTCPDiscoveryConfig); |
| 123 service->ClearPref(prefs::kDevToolsDiscoverTCPTargetsEnabled); |
| 124 |
| 125 DevToolsAndroidBridge* bridge = |
| 126 DevToolsAndroidBridge::Factory::GetForProfile(profile); |
| 127 |
| 128 scoped_refptr<TCPDeviceProvider> provider; |
| 129 int called = 0; |
| 130 bridge->set_tcp_provider_callback_for_test( |
| 131 base::Bind(assign_from_callback, &provider, &called)); |
| 132 |
| 133 EXPECT_EQ(nullptr, provider); |
| 134 |
| 135 service->SetBoolean(prefs::kDevToolsDiscoverTCPTargetsEnabled, true); |
| 136 |
| 137 EXPECT_NE(nullptr, provider); |
| 138 EXPECT_STREQ("localhost:9222, localhost:9229", |
| 139 AllTargetsString(provider).c_str()); |
| 140 |
| 141 service->SetBoolean(prefs::kDevToolsDiscoverTCPTargetsEnabled, false); |
| 142 |
| 143 EXPECT_EQ(nullptr, provider); |
| 144 } |
| OLD | NEW |