Commit 72b9e047 authored by Lily Chen's avatar Lily Chen Committed by Commit Bot

Add reprioritization to SOCKSConnectJobs

This change makes a reprioritized SOCKSConnectJob pass down the priority
change to its underlying transport socket handle.

Bug: 166689
Change-Id: I5fdb0d9ea4e14b6ba6ec73925c9b2158791fa57d
Reviewed-on: https://chromium-review.googlesource.com/c/1329347Reviewed-by: default avatarMatt Menke <mmenke@chromium.org>
Commit-Queue: Lily Chen <chlily@chromium.org>
Cr-Commit-Position: refs/heads/master@{#609031}
parent 1c8b6637
......@@ -176,6 +176,12 @@ int SOCKSConnectJob::ConnectInternal() {
return DoLoop(OK);
}
void SOCKSConnectJob::ChangePriorityInternal(RequestPriority priority) {
// Currently doesn't change host resolution request priority for SOCKS4 case.
if (transport_socket_handle_)
transport_socket_handle_->SetPriority(priority);
}
std::unique_ptr<ConnectJob>
SOCKSClientSocketPool::SOCKSConnectJobFactory::NewConnectJob(
const std::string& group_name,
......
......@@ -103,6 +103,8 @@ class SOCKSConnectJob : public ConnectJob {
// Otherwise, it returns a net error code.
int ConnectInternal() override;
void ChangePriorityInternal(RequestPriority priority) override;
scoped_refptr<SOCKSSocketParams> socks_params_;
TransportClientSocketPool* const transport_pool_;
HostResolver* const resolver_;
......
......@@ -168,10 +168,42 @@ TEST_F(SOCKSClientSocketPoolTest, SetSocketRequestPriorityOnInit) {
ClientSocketPool::RespectLimits::ENABLED,
CompletionOnceCallback(), &pool_, NetLogWithSource()));
EXPECT_EQ(priority, transport_socket_pool_.last_request_priority());
EXPECT_EQ(priority, transport_socket_pool_.requests()[i]->priority());
handle.socket()->Disconnect();
}
}
TEST_F(SOCKSClientSocketPoolTest, SetSocketRequestPriority) {
SOCKS5MockData data1(ASYNC);
transport_client_socket_factory_.AddSocketDataProvider(data1.data_provider());
SOCKS5MockData data2(ASYNC);
transport_client_socket_factory_.AddSocketDataProvider(data2.data_provider());
TestCompletionCallback callback1;
ClientSocketHandle handle1;
int rv1 = handle1.Init("a", CreateSOCKSv5Params(), LOW, SocketTag(),
ClientSocketPool::RespectLimits::ENABLED,
callback1.callback(), &pool_, NetLogWithSource());
EXPECT_THAT(rv1, IsError(ERR_IO_PENDING));
EXPECT_FALSE(handle1.is_initialized());
EXPECT_FALSE(handle1.socket());
EXPECT_EQ(LOW, transport_socket_pool_.requests()[0]->priority());
TestCompletionCallback callback2;
ClientSocketHandle handle2;
int rv2 = handle2.Init("a", CreateSOCKSv5Params(), MEDIUM, SocketTag(),
ClientSocketPool::RespectLimits::ENABLED,
callback2.callback(), &pool_, NetLogWithSource());
EXPECT_THAT(rv2, IsError(ERR_IO_PENDING));
EXPECT_FALSE(handle2.is_initialized());
EXPECT_FALSE(handle2.socket());
EXPECT_EQ(MEDIUM, transport_socket_pool_.requests()[1]->priority());
pool_.SetPriority("a", &handle1, HIGHEST);
EXPECT_EQ(HIGHEST, transport_socket_pool_.requests()[0]->priority());
EXPECT_EQ(MEDIUM, transport_socket_pool_.requests()[1]->priority());
}
// Make sure that SOCKSConnectJob passes on its priority to its
// HostResolver request (for non-SOCKS5) on Init.
TEST_F(SOCKSClientSocketPoolTest, SetResolvePriorityOnInit) {
......@@ -190,6 +222,8 @@ TEST_F(SOCKSClientSocketPoolTest, SetResolvePriorityOnInit) {
CompletionOnceCallback(), &pool_, NetLogWithSource()));
EXPECT_EQ(priority, transport_socket_pool_.last_request_priority());
EXPECT_EQ(priority, host_resolver_.last_request_priority());
EXPECT_EQ(priority,
host_resolver_.request_priority(static_cast<size_t>(i) + 1));
EXPECT_TRUE(handle.socket() == NULL);
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment