summaryrefslogtreecommitdiff
path: root/chromium/services/network/p2p
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/services/network/p2p')
-rw-r--r--chromium/services/network/p2p/socket.h5
-rw-r--r--chromium/services/network/p2p/socket_manager.cc15
-rw-r--r--chromium/services/network/p2p/socket_manager.h3
-rw-r--r--chromium/services/network/p2p/socket_tcp.cc13
-rw-r--r--chromium/services/network/p2p/socket_tcp.h3
-rw-r--r--chromium/services/network/p2p/socket_tcp_server.cc10
-rw-r--r--chromium/services/network/p2p/socket_tcp_server.h3
-rw-r--r--chromium/services/network/p2p/socket_tcp_server_unittest.cc4
-rw-r--r--chromium/services/network/p2p/socket_tcp_unittest.cc101
-rw-r--r--chromium/services/network/p2p/socket_udp.cc3
-rw-r--r--chromium/services/network/p2p/socket_udp.h3
-rw-r--r--chromium/services/network/p2p/socket_udp_unittest.cc16
12 files changed, 152 insertions, 27 deletions
diff --git a/chromium/services/network/p2p/socket.h b/chromium/services/network/p2p/socket.h
index 3904fb6414a..63a42ac6b29 100644
--- a/chromium/services/network/p2p/socket.h
+++ b/chromium/services/network/p2p/socket.h
@@ -26,6 +26,7 @@
namespace net {
class NetLog;
+class NetworkIsolationKey;
}
namespace network {
@@ -79,10 +80,12 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) P2PSocket : public mojom::P2PSocket {
// in the valid range.
// If |local_address.port()| is nonzero and not in the valid range,
// initialization will fail.
+ // |network_isolation_key| specifies the network stack cache shard to used.
virtual void Init(const net::IPEndPoint& local_address,
uint16_t min_port,
uint16_t max_port,
- const P2PHostAndIPEndPoint& remote_address) = 0;
+ const P2PHostAndIPEndPoint& remote_address,
+ const net::NetworkIsolationKey& network_isolation_key) = 0;
mojo::PendingRemote<mojom::P2PSocketClient> ReleaseClientForTesting();
mojo::PendingReceiver<mojom::P2PSocket> ReleaseReceiverForTesting();
diff --git a/chromium/services/network/p2p/socket_manager.cc b/chromium/services/network/p2p/socket_manager.cc
index 56dc77eddb7..8b149110739 100644
--- a/chromium/services/network/p2p/socket_manager.cc
+++ b/chromium/services/network/p2p/socket_manager.cc
@@ -15,6 +15,7 @@
#include "net/base/address_list.h"
#include "net/base/net_errors.h"
#include "net/base/network_interfaces.h"
+#include "net/base/network_isolation_key.h"
#include "net/base/sys_addrinfo.h"
#include "net/dns/host_resolver.h"
#include "net/log/net_log_source.h"
@@ -79,7 +80,9 @@ class P2PSocketManager::DnsRequest {
DnsRequest(net::HostResolver* host_resolver, bool enable_mdns)
: resolver_(host_resolver), enable_mdns_(enable_mdns) {}
- void Resolve(const std::string& host_name, DoneCallback done_callback) {
+ void Resolve(const std::string& host_name,
+ const net::NetworkIsolationKey& network_isolation_key,
+ DoneCallback done_callback) {
DCHECK(!done_callback.is_null());
host_name_ = host_name;
@@ -107,8 +110,8 @@ class P2PSocketManager::DnsRequest {
parameters.source = net::HostResolverSource::MULTICAST_DNS;
#endif // ENABLE_MDNS
}
- request_ =
- resolver_->CreateRequest(host, net::NetLogWithSource(), parameters);
+ request_ = resolver_->CreateRequest(host, network_isolation_key,
+ net::NetLogWithSource(), parameters);
int result = request_->Start(base::BindOnce(
&P2PSocketManager::DnsRequest::OnDone, base::Unretained(this)));
@@ -144,6 +147,7 @@ class P2PSocketManager::DnsRequest {
};
P2PSocketManager::P2PSocketManager(
+ const net::NetworkIsolationKey& network_isolation_key,
mojo::PendingRemote<mojom::P2PTrustedSocketManagerClient>
trusted_socket_manager_client,
mojo::PendingReceiver<mojom::P2PTrustedSocketManager>
@@ -153,6 +157,7 @@ P2PSocketManager::P2PSocketManager(
net::URLRequestContext* url_request_context)
: delete_callback_(std::move(delete_callback)),
url_request_context_(url_request_context),
+ network_isolation_key_(network_isolation_key),
network_list_task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
{base::MayBlock(), base::TaskPriority::USER_VISIBLE})),
trusted_socket_manager_client_(std::move(trusted_socket_manager_client)),
@@ -286,7 +291,7 @@ void P2PSocketManager::GetHostAddress(
DnsRequest* request_ptr = request.get();
dns_requests_.insert(std::move(request));
request_ptr->Resolve(
- host_name,
+ host_name, network_isolation_key_,
base::BindOnce(&P2PSocketManager::OnAddressResolved,
base::Unretained(this), request_ptr, std::move(callback)));
}
@@ -327,7 +332,7 @@ void P2PSocketManager::CreateSocket(
// Init() may call SocketManager::DestroySocket(), so it must be called after
// adding the socket to |sockets_|.
socket_ptr->Init(local_address, port_range.min_port, port_range.max_port,
- remote_address);
+ remote_address, network_isolation_key_);
}
void P2PSocketManager::StartRtpDump(bool incoming, bool outgoing) {
diff --git a/chromium/services/network/p2p/socket_manager.h b/chromium/services/network/p2p/socket_manager.h
index f6e793fa556..79f6546cf68 100644
--- a/chromium/services/network/p2p/socket_manager.h
+++ b/chromium/services/network/p2p/socket_manager.h
@@ -26,6 +26,7 @@
#include "net/base/ip_address.h"
#include "net/base/ip_endpoint.h"
#include "net/base/network_change_notifier.h"
+#include "net/base/network_isolation_key.h"
#include "services/network/p2p/socket.h"
#include "services/network/p2p/socket_throttler.h"
#include "services/network/public/cpp/p2p_socket_type.h"
@@ -58,6 +59,7 @@ class P2PSocketManager
// P2PSocketManager. The P2PSocketManager must be destroyed before the
// |url_request_context|.
P2PSocketManager(
+ const net::NetworkIsolationKey& network_isolation_key,
mojo::PendingRemote<mojom::P2PTrustedSocketManagerClient>
trusted_socket_manager_client,
mojo::PendingReceiver<mojom::P2PTrustedSocketManager>
@@ -121,6 +123,7 @@ class P2PSocketManager
DeleteCallback delete_callback_;
net::URLRequestContext* url_request_context_;
+ const net::NetworkIsolationKey network_isolation_key_;
std::unique_ptr<ProxyResolvingClientSocketFactory>
proxy_resolving_socket_factory_;
diff --git a/chromium/services/network/p2p/socket_tcp.cc b/chromium/services/network/p2p/socket_tcp.cc
index 385433b53d8..9d7d9fd7495 100644
--- a/chromium/services/network/p2p/socket_tcp.cc
+++ b/chromium/services/network/p2p/socket_tcp.cc
@@ -14,6 +14,7 @@
#include "jingle/glue/fake_ssl_client_socket.h"
#include "net/base/io_buffer.h"
#include "net/base/net_errors.h"
+#include "net/base/network_isolation_key.h"
#include "net/socket/client_socket_factory.h"
#include "net/socket/client_socket_handle.h"
#include "net/socket/ssl_client_socket.h"
@@ -78,10 +79,12 @@ void P2PSocketTcpBase::InitAccepted(const net::IPEndPoint& remote_address,
DoRead();
}
-void P2PSocketTcpBase::Init(const net::IPEndPoint& local_address,
- uint16_t min_port,
- uint16_t max_port,
- const P2PHostAndIPEndPoint& remote_address) {
+void P2PSocketTcpBase::Init(
+ const net::IPEndPoint& local_address,
+ uint16_t min_port,
+ uint16_t max_port,
+ const P2PHostAndIPEndPoint& remote_address,
+ const net::NetworkIsolationKey& network_isolation_key) {
DCHECK(!socket_);
remote_address_ = remote_address;
@@ -105,7 +108,7 @@ void P2PSocketTcpBase::Init(const net::IPEndPoint& local_address,
// a problem on multi-homed host.
socket_ = proxy_resolving_socket_factory_->CreateSocket(
- GURL("https://" + dest_host_port_pair.ToString()),
+ GURL("https://" + dest_host_port_pair.ToString()), network_isolation_key,
IsTlsClientSocket(type_));
if (IsPseudoTlsClientSocket(type_)) {
diff --git a/chromium/services/network/p2p/socket_tcp.h b/chromium/services/network/p2p/socket_tcp.h
index e4640f181d7..b086186a6aa 100644
--- a/chromium/services/network/p2p/socket_tcp.h
+++ b/chromium/services/network/p2p/socket_tcp.h
@@ -48,7 +48,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) P2PSocketTcpBase : public P2PSocket {
void Init(const net::IPEndPoint& local_address,
uint16_t min_port,
uint16_t max_port,
- const P2PHostAndIPEndPoint& remote_address) override;
+ const P2PHostAndIPEndPoint& remote_address,
+ const net::NetworkIsolationKey& network_isolation_key) override;
// mojom::P2PSocket implementation:
void Send(const std::vector<int8_t>& data,
diff --git a/chromium/services/network/p2p/socket_tcp_server.cc b/chromium/services/network/p2p/socket_tcp_server.cc
index d2bdc4fcd2b..f9dafef98aa 100644
--- a/chromium/services/network/p2p/socket_tcp_server.cc
+++ b/chromium/services/network/p2p/socket_tcp_server.cc
@@ -37,10 +37,12 @@ P2PSocketTcpServer::P2PSocketTcpServer(
P2PSocketTcpServer::~P2PSocketTcpServer() = default;
// TODO(guidou): Add support for port range.
-void P2PSocketTcpServer::Init(const net::IPEndPoint& local_address,
- uint16_t min_port,
- uint16_t max_port,
- const P2PHostAndIPEndPoint& remote_address) {
+void P2PSocketTcpServer::Init(
+ const net::IPEndPoint& local_address,
+ uint16_t min_port,
+ uint16_t max_port,
+ const P2PHostAndIPEndPoint& remote_address,
+ const net::NetworkIsolationKey& network_isolation_key) {
int result = socket_->Listen(local_address, kListenBacklog);
if (result < 0) {
LOG(ERROR) << "Listen() failed: " << result;
diff --git a/chromium/services/network/p2p/socket_tcp_server.h b/chromium/services/network/p2p/socket_tcp_server.h
index b496ba2574e..527110ea7d7 100644
--- a/chromium/services/network/p2p/socket_tcp_server.h
+++ b/chromium/services/network/p2p/socket_tcp_server.h
@@ -39,7 +39,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) P2PSocketTcpServer : public P2PSocket {
void Init(const net::IPEndPoint& local_address,
uint16_t min_port,
uint16_t max_port,
- const P2PHostAndIPEndPoint& remote_address) override;
+ const P2PHostAndIPEndPoint& remote_address,
+ const net::NetworkIsolationKey& network_isolation_key) override;
// mojom::P2PSocket implementation:
void Send(const std::vector<int8_t>& data,
diff --git a/chromium/services/network/p2p/socket_tcp_server_unittest.cc b/chromium/services/network/p2p/socket_tcp_server_unittest.cc
index 87876968539..0c0ec2f4c5d 100644
--- a/chromium/services/network/p2p/socket_tcp_server_unittest.cc
+++ b/chromium/services/network/p2p/socket_tcp_server_unittest.cc
@@ -12,6 +12,7 @@
#include "base/run_loop.h"
#include "base/test/task_environment.h"
#include "net/base/completion_once_callback.h"
+#include "net/base/network_isolation_key.h"
#include "services/network/p2p/socket_tcp.h"
#include "services/network/p2p/socket_test_utils.h"
#include "testing/gmock/include/gmock/gmock.h"
@@ -105,7 +106,8 @@ class P2PSocketTcpServerTest : public testing::Test {
P2PHostAndIPEndPoint dest;
dest.ip_address = ParseAddress(kTestIpAddress1, kTestPort1);
- p2p_socket_->Init(ParseAddress(kTestLocalIpAddress, 0), 0, 0, dest);
+ p2p_socket_->Init(ParseAddress(kTestLocalIpAddress, 0), 0, 0, dest,
+ net::NetworkIsolationKey());
EXPECT_TRUE(socket_->listening());
base::RunLoop().RunUntilIdle();
}
diff --git a/chromium/services/network/p2p/socket_tcp_unittest.cc b/chromium/services/network/p2p/socket_tcp_unittest.cc
index 1150cf293b8..dd1f75cb2a2 100644
--- a/chromium/services/network/p2p/socket_tcp_unittest.cc
+++ b/chromium/services/network/p2p/socket_tcp_unittest.cc
@@ -9,12 +9,17 @@
#include "base/run_loop.h"
#include "base/stl_util.h"
+#include "base/strings/stringprintf.h"
#include "base/sys_byteorder.h"
#include "base/test/bind_test_util.h"
+#include "base/test/scoped_feature_list.h"
#include "base/test/task_environment.h"
#include "jingle/glue/fake_ssl_client_socket.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
+#include "net/base/features.h"
+#include "net/base/network_isolation_key.h"
+#include "net/dns/mock_host_resolver.h"
#include "net/socket/socket_test_util.h"
#include "net/socket/stream_socket.h"
#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
@@ -522,13 +527,104 @@ TEST(P2PSocketTcpWithPseudoTlsTest, Basic) {
&factory);
P2PHostAndIPEndPoint dest;
dest.ip_address = server_addr;
- host.Init(net::IPEndPoint(net::IPAddress::IPv4Localhost(), 0), 0, 0, dest);
+ host.Init(net::IPEndPoint(net::IPAddress::IPv4Localhost(), 0), 0, 0, dest,
+ net::NetworkIsolationKey());
base::RunLoop().RunUntilIdle();
EXPECT_TRUE(data_provider.AllReadDataConsumed());
EXPECT_TRUE(data_provider.AllWriteDataConsumed());
}
+// Test the case where P2PHostAndIPEndPoint::hostname is populated. Make sure
+// there's a DNS lookup using the right hostname and NetworkIsolationKey.
+TEST(P2PSocketTcpWithPseudoTlsTest, Hostname) {
+ base::test::ScopedFeatureList feature_list;
+ feature_list.InitAndEnableFeature(
+ net::features::kSplitHostCacheByNetworkIsolationKey);
+
+ const char kHostname[] = "foo.test";
+ base::test::TaskEnvironment task_environment(
+ base::test::TaskEnvironment::MainThreadType::IO);
+
+ mojo::PendingRemote<mojom::P2PSocketClient> socket_client;
+ mojo::PendingRemote<mojom::P2PSocket> socket;
+ auto socket_receiver = socket.InitWithNewPipeAndPassReceiver();
+
+ FakeSocketClient fake_client2(std::move(socket),
+ socket_client.InitWithNewPipeAndPassReceiver());
+ EXPECT_CALL(fake_client2, SocketCreated(_, _)).Times(1);
+
+ net::TestURLRequestContext context(true);
+ net::MockClientSocketFactory mock_socket_factory;
+ context.set_client_socket_factory(&mock_socket_factory);
+ net::MockCachingHostResolver host_resolver;
+ host_resolver.rules()->AddRule(kHostname, "1.2.3.4");
+ context.set_host_resolver(&host_resolver);
+ context.Init();
+ ProxyResolvingClientSocketFactory factory(&context);
+
+ base::StringPiece ssl_client_hello =
+ jingle_glue::FakeSSLClientSocket::GetSslClientHello();
+ base::StringPiece ssl_server_hello =
+ jingle_glue::FakeSSLClientSocket::GetSslServerHello();
+ net::MockRead reads[] = {
+ net::MockRead(net::ASYNC, ssl_server_hello.data(),
+ ssl_server_hello.size()),
+ net::MockRead(net::SYNCHRONOUS, net::ERR_IO_PENDING)};
+ net::MockWrite writes[] = {net::MockWrite(
+ net::SYNCHRONOUS, ssl_client_hello.data(), ssl_client_hello.size())};
+ net::StaticSocketDataProvider data_provider(reads, writes);
+ net::IPEndPoint server_addr(net::IPAddress::IPv4Localhost(), 1234);
+ data_provider.set_connect_data(
+ net::MockConnect(net::SYNCHRONOUS, net::OK, server_addr));
+ mock_socket_factory.AddSocketDataProvider(&data_provider);
+
+ FakeP2PSocketDelegate socket_delegate;
+ P2PSocketTcp host(&socket_delegate, std::move(socket_client),
+ std::move(socket_receiver), P2P_SOCKET_SSLTCP_CLIENT,
+ &factory);
+ P2PHostAndIPEndPoint dest;
+ dest.ip_address = server_addr;
+ dest.hostname = kHostname;
+ net::NetworkIsolationKey network_isolation_key =
+ net::NetworkIsolationKey::CreateTransient();
+ host.Init(net::IPEndPoint(net::IPAddress::IPv4Localhost(), 0), 0, 0, dest,
+ network_isolation_key);
+
+ base::RunLoop().RunUntilIdle();
+ EXPECT_TRUE(data_provider.AllReadDataConsumed());
+ EXPECT_TRUE(data_provider.AllWriteDataConsumed());
+
+ // Check that the URL in kHostname is in the HostCache, with
+ // |network_isolation_key|.
+ const net::HostPortPair kHostPortPair = net::HostPortPair(kHostname, 0);
+ net::HostResolver::ResolveHostParameters params;
+ params.source = net::HostResolverSource::LOCAL_ONLY;
+ std::unique_ptr<net::HostResolver::ResolveHostRequest> request1 =
+ context.host_resolver()->CreateRequest(kHostPortPair,
+ network_isolation_key,
+ net::NetLogWithSource(), params);
+ net::TestCompletionCallback callback1;
+ int result = request1->Start(callback1.callback());
+ EXPECT_EQ(net::OK, callback1.GetResult(result));
+
+ // Check that the hostname is not in the DNS cache for other possible NIKs.
+ const url::Origin kDestinationOrigin =
+ url::Origin::Create(GURL(base::StringPrintf("https://%s", kHostname)));
+ const net::NetworkIsolationKey kOtherNiks[] = {
+ net::NetworkIsolationKey(),
+ net::NetworkIsolationKey(kDestinationOrigin /* top_frame_origin */,
+ kDestinationOrigin /* frame_origin */)};
+ for (const auto& other_nik : kOtherNiks) {
+ std::unique_ptr<net::HostResolver::ResolveHostRequest> request2 =
+ context.host_resolver()->CreateRequest(kHostPortPair, other_nik,
+ net::NetLogWithSource(), params);
+ net::TestCompletionCallback callback2;
+ int result = request2->Start(callback2.callback());
+ EXPECT_EQ(net::ERR_NAME_NOT_RESOLVED, callback2.GetResult(result));
+ }
+}
+
class P2PSocketTcpWithTlsTest
: public testing::TestWithParam<std::tuple<net::IoMode, P2PSocketType>> {};
@@ -585,7 +681,8 @@ TEST_P(P2PSocketTcpWithTlsTest, Basic) {
}
P2PHostAndIPEndPoint dest;
dest.ip_address = server_addr;
- host->Init(net::IPEndPoint(net::IPAddress::IPv4Localhost(), 0), 0, 0, dest);
+ host->Init(net::IPEndPoint(net::IPAddress::IPv4Localhost(), 0), 0, 0, dest,
+ net::NetworkIsolationKey());
base::RunLoop().RunUntilIdle();
EXPECT_TRUE(data_provider.AllReadDataConsumed());
diff --git a/chromium/services/network/p2p/socket_udp.cc b/chromium/services/network/p2p/socket_udp.cc
index b6d6392873d..bf042cfd6de 100644
--- a/chromium/services/network/p2p/socket_udp.cc
+++ b/chromium/services/network/p2p/socket_udp.cc
@@ -129,7 +129,8 @@ P2PSocketUdp::~P2PSocketUdp() = default;
void P2PSocketUdp::Init(const net::IPEndPoint& local_address,
uint16_t min_port,
uint16_t max_port,
- const P2PHostAndIPEndPoint& remote_address) {
+ const P2PHostAndIPEndPoint& remote_address,
+ const net::NetworkIsolationKey& network_isolation_key) {
DCHECK(!socket_);
DCHECK((min_port == 0 && max_port == 0) || min_port > 0);
DCHECK_LE(min_port, max_port);
diff --git a/chromium/services/network/p2p/socket_udp.h b/chromium/services/network/p2p/socket_udp.h
index 7ffa5e5fead..e2e4f540845 100644
--- a/chromium/services/network/p2p/socket_udp.h
+++ b/chromium/services/network/p2p/socket_udp.h
@@ -58,7 +58,8 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) P2PSocketUdp : public P2PSocket {
void Init(const net::IPEndPoint& local_address,
uint16_t min_port,
uint16_t max_port,
- const P2PHostAndIPEndPoint& remote_address) override;
+ const P2PHostAndIPEndPoint& remote_address,
+ const net::NetworkIsolationKey& network_isolation_key) override;
// mojom::P2PSocket implementation:
void Send(const std::vector<int8_t>& data,
diff --git a/chromium/services/network/p2p/socket_udp_unittest.cc b/chromium/services/network/p2p/socket_udp_unittest.cc
index 624a3b05dac..48d9379dcf8 100644
--- a/chromium/services/network/p2p/socket_udp_unittest.cc
+++ b/chromium/services/network/p2p/socket_udp_unittest.cc
@@ -21,6 +21,7 @@
#include "net/base/io_buffer.h"
#include "net/base/ip_endpoint.h"
#include "net/base/net_errors.h"
+#include "net/base/network_isolation_key.h"
#include "net/log/net_log_with_source.h"
#include "net/socket/datagram_server_socket.h"
#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
@@ -233,7 +234,8 @@ class P2PSocketUdpTest : public testing::Test {
socket_impl_->Init(
local_address_, 0, 0,
P2PHostAndIPEndPoint(std::string(),
- ParseAddress(kTestIpAddress1, kTestPort1)));
+ ParseAddress(kTestIpAddress1, kTestPort1)),
+ net::NetworkIsolationKey());
socket_ = GetSocketFromHost(socket_impl_.get());
dest1_ = ParseAddress(kTestIpAddress1, kTestPort1);
@@ -577,7 +579,8 @@ TEST_F(P2PSocketUdpTest, PortRangeImplicitPort) {
socket_impl->Init(
local_address, min_port, max_port,
P2PHostAndIPEndPoint(std::string(),
- ParseAddress(kTestIpAddress1, kTestPort1)));
+ ParseAddress(kTestIpAddress1, kTestPort1)),
+ net::NetworkIsolationKey());
FakeDatagramServerSocket* socket = GetSocketFromHost(socket_impl.get());
net::IPEndPoint bound_address;
@@ -601,7 +604,8 @@ TEST_F(P2PSocketUdpTest, PortRangeImplicitPort) {
socket_impl_ptr->Init(
local_address, min_port, max_port,
P2PHostAndIPEndPoint(std::string(),
- ParseAddress(kTestIpAddress1, kTestPort1)));
+ ParseAddress(kTestIpAddress1, kTestPort1)),
+ net::NetworkIsolationKey());
base::RunLoop().RunUntilIdle();
@@ -638,7 +642,8 @@ TEST_F(P2PSocketUdpTest, PortRangeExplictValidPort) {
socket_host->Init(
local_address, min_port, max_port,
P2PHostAndIPEndPoint(std::string(),
- ParseAddress(kTestIpAddress1, kTestPort1)));
+ ParseAddress(kTestIpAddress1, kTestPort1)),
+ net::NetworkIsolationKey());
FakeDatagramServerSocket* fake_socket = GetSocketFromHost(socket_host.get());
net::IPEndPoint bound_address;
@@ -679,7 +684,8 @@ TEST_F(P2PSocketUdpTest, PortRangeExplictInvalidPort) {
socket_impl_ptr->Init(
local_address, min_port, max_port,
P2PHostAndIPEndPoint(std::string(),
- ParseAddress(kTestIpAddress1, kTestPort1)));
+ ParseAddress(kTestIpAddress1, kTestPort1)),
+ net::NetworkIsolationKey());
base::RunLoop().RunUntilIdle();