Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5203)

Unified Diff: chrome/browser/devtools/device/devtools_android_bridge_browsertest.cc

Issue 2284083002: [DevTools] A setting for TCP discovery enablement (Closed)
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/devtools/device/devtools_android_bridge_browsertest.cc
diff --git a/chrome/browser/devtools/device/devtools_android_bridge_browsertest.cc b/chrome/browser/devtools/device/devtools_android_bridge_browsertest.cc
index 12717117382c697034c01912a6527956a7023a7c..a7c8bbf1ca963591643e10e59676b6e4725b63a5 100644
--- a/chrome/browser/devtools/device/devtools_android_bridge_browsertest.cc
+++ b/chrome/browser/devtools/device/devtools_android_bridge_browsertest.cc
@@ -2,6 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <algorithm>
+#include <array>
+
#include "base/values.h"
#include "chrome/browser/devtools/device/devtools_android_bridge.h"
#include "chrome/browser/devtools/device/tcp_device_provider.h"
@@ -16,6 +19,31 @@
class DevToolsAndroidBridgeTest : public InProcessBrowserTest {
};
+template<int i, class ... values>
+struct tuple_ops {
+ static void fill_array(std::array<std::string, sizeof...(values)>& array,
+ const std::tuple<values...>& tuple) {
+ array[i] = std::get<i>(tuple);
+ tuple_ops<i - 1, values...>::fill_array(array, tuple);
+ }
+};
+
+template<class ... values>
+struct tuple_ops<0, values ...> {
+ static void fill_array(std::array<std::string, sizeof...(values)>& array,
+ const std::tuple<values...>& tuple) {
+ array[0] = std::get<0>(tuple);
+ }
+};
+
+template<class ... values>
+std::array<std::string, sizeof...(values)> array_from_tuple(
dgozman 2016/08/26 23:31:43 Let's use std::vector<>, and push items there manu
eostroukhov 2016/08/29 22:06:31 I made if even more boring then you suggested...
+ const std::tuple<values...> tuple) {
+ auto result = std::array<std::string, sizeof...(values)>();
+ tuple_ops<sizeof...(values) - 1, values...>::fill_array(result, tuple);
+ return result;
+}
+
static void assign_from_callback(scoped_refptr<TCPDeviceProvider>* store,
int* invocation_counter,
scoped_refptr<TCPDeviceProvider> value) {
@@ -23,11 +51,44 @@ static void assign_from_callback(scoped_refptr<TCPDeviceProvider>* store,
*store = value;
}
-IN_PROC_BROWSER_TEST_F(DevToolsAndroidBridgeTest, UpdatesTargetDiscovery) {
+template<class ... Strings>
+bool expect_all_tcp_targets(const std::tuple<Strings ...>& expected,
dgozman 2016/08/26 23:31:43 Can we just sort two arrays and compare?
eostroukhov 2016/08/29 22:06:31 Acknowledged.
+ scoped_refptr<TCPDeviceProvider> provider) {
+ auto array = array_from_tuple(expected);
+ int mask = 0;
+ bool success = true;
+ for (const net::HostPortPair hostport : provider->get_targets_for_test()) {
+ std::string value = hostport.ToString();
+ auto iter = std::find(array.begin(), array.end(), value);
+ if (iter == array.end()) {
+ fprintf(stderr, "[%s] Unexpected: %s\n", __FUNCTION__, value.c_str());
dgozman 2016/08/26 23:31:43 EXPECT_EQ(vector1, vector2) << "Actual targets: "
eostroukhov 2016/08/29 22:06:31 Acknowledged.
+ success = false;
+ } else {
+ mask |= 1 << (iter - array.begin());
+ }
+ }
+ int all_bits_set = (1 << array.size()) - 1;
+ if (mask == all_bits_set)
+ return success;
+
+ std::string missing;
+ for (size_t i = 0; i < array.size(); i++) {
+ if (!(mask & (1 << i))) {
+ if (!missing.empty())
+ missing += ", ";
+ missing += array[i];
+ }
+ }
+ fprintf(stderr, "[%s] Missing: %s\n", __FUNCTION__, missing.c_str());
+ return false;
+}
+
+IN_PROC_BROWSER_TEST_F(DevToolsAndroidBridgeTest, DiscoveryListChanges) {
Profile* profile = browser()->profile();
PrefService* service = profile->GetPrefs();
- service->ClearPref(prefs::kDevToolsTargetDiscoveryConfig);
+ service->ClearPref(prefs::kDevToolsTCPDiscoveryConfig);
+ service->SetBoolean(prefs::kDevToolsTCPDiscoveryEnabled, true);
DevToolsAndroidBridge* bridge =
DevToolsAndroidBridge::Factory::GetForProfile(profile);
@@ -38,25 +99,25 @@ IN_PROC_BROWSER_TEST_F(DevToolsAndroidBridgeTest, UpdatesTargetDiscovery) {
base::Bind(assign_from_callback, &provider, &called));
EXPECT_LT(0, called);
- EXPECT_EQ(nullptr, provider);
+ EXPECT_NE(nullptr, provider);
+
+ EXPECT_TRUE(expect_all_tcp_targets(
+ std::make_tuple("localhost:9222", "localhost:9229"), provider));
int invocations = called;
base::ListValue list;
list.AppendString("somehost:2000");
- service->Set(prefs::kDevToolsTargetDiscoveryConfig, list);
+ service->Set(prefs::kDevToolsTCPDiscoveryConfig, list);
EXPECT_LT(invocations, called);
EXPECT_NE(nullptr, provider);
- std::set<net::HostPortPair> pairs = provider->get_targets_for_test();
- EXPECT_EQ(1UL, pairs.size());
- net::HostPortPair pair = *pairs.begin();
- EXPECT_EQ(2000, pair.port());
- EXPECT_EQ("somehost", pair.HostForURL());
+ EXPECT_TRUE(expect_all_tcp_targets(
+ std::make_tuple("somehost:2000"), provider));
invocations = called;
list.Clear();
- service->Set(prefs::kDevToolsTargetDiscoveryConfig, list);
+ service->Set(prefs::kDevToolsTCPDiscoveryConfig, list);
EXPECT_LT(invocations, called);
EXPECT_EQ(nullptr, provider);
@@ -67,13 +128,72 @@ IN_PROC_BROWSER_TEST_F(DevToolsAndroidBridgeTest, UpdatesTargetDiscovery) {
list.AppendString("<not really a good address.");
list.AppendString("d:3");
list.AppendString("c:2");
- service->Set(prefs::kDevToolsTargetDiscoveryConfig, list);
+ service->Set(prefs::kDevToolsTCPDiscoveryConfig, list);
EXPECT_LT(invocations, called);
EXPECT_NE(nullptr, provider);
- pairs = provider->get_targets_for_test();
- EXPECT_EQ(3UL, pairs.size());
- for (const net::HostPortPair pair : pairs) {
- EXPECT_EQ(pair.port(), pair.HostForURL()[0] - 'a');
+ EXPECT_TRUE(expect_all_tcp_targets(
+ std::make_tuple("b:1", "c:2", "d:3"), provider));
+}
+
+
+IN_PROC_BROWSER_TEST_F(DevToolsAndroidBridgeTest, DefaultValues) {
+ Profile* profile = browser()->profile();
+
+ PrefService* service = profile->GetPrefs();
+ DevToolsAndroidBridge::Factory::GetForProfile(profile);
+ service->ClearPref(prefs::kDevToolsTCPDiscoveryEnabled);
+ service->ClearPref(prefs::kDevToolsTCPDiscoveryConfig);
+
+ const base::ListValue* targets =
+ service->GetList(prefs::kDevToolsTCPDiscoveryConfig);
+ EXPECT_NE(nullptr, targets);
+ EXPECT_EQ(2ul, targets->GetSize());
+
+ int matched_mask = 0;
+ std::array<std::string, 2> EXPECTED_TARGETS =
+ {{"localhost:9222", "localhost:9229"}};
+
+ for (size_t i = 0; i < targets->GetSize(); i++) {
+ std::string target;
+ EXPECT_TRUE(targets->GetString(i, &target));
+ for (size_t j = 0; j < EXPECTED_TARGETS.size(); j++) {
+ if (target == EXPECTED_TARGETS[j]) {
+ matched_mask |= 1 << j;
+ }
+ }
}
+
+ EXPECT_FALSE(service->GetBoolean(prefs::kDevToolsTCPDiscoveryEnabled));
+
+ EXPECT_EQ(3, matched_mask);
+}
+
+
+IN_PROC_BROWSER_TEST_F(DevToolsAndroidBridgeTest, TCPEnableChange) {
+ Profile* profile = browser()->profile();
+
+ PrefService* service = profile->GetPrefs();
+ service->ClearPref(prefs::kDevToolsTCPDiscoveryConfig);
+ service->ClearPref(prefs::kDevToolsTCPDiscoveryEnabled);
+
+ DevToolsAndroidBridge* bridge =
+ DevToolsAndroidBridge::Factory::GetForProfile(profile);
+
+ scoped_refptr<TCPDeviceProvider> provider;
+ int called = 0;
+ bridge->set_tcp_provider_callback_for_test(
+ base::Bind(assign_from_callback, &provider, &called));
+
+ EXPECT_EQ(nullptr, provider);
+
+ service->SetBoolean(prefs::kDevToolsTCPDiscoveryEnabled, true);
+
+ EXPECT_NE(nullptr, provider);
+ EXPECT_TRUE(expect_all_tcp_targets(
+ std::make_tuple("localhost:9222", "localhost:9229"), provider));
+
+ service->SetBoolean(prefs::kDevToolsTCPDiscoveryEnabled, false);
+
+ EXPECT_EQ(nullptr, provider);
}

Powered by Google App Engine
This is Rietveld 408576698