#include "content/browser/preloading/proxy_lookup_client_impl.h"
#include "base/run_loop.h"
#include "content/public/test/browser_task_environment.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/network/test/test_network_context.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
namespace content {
namespace {
class TestNetworkContext : public network::TestNetworkContext {
public:
TestNetworkContext(bool call_on_proxy_lookup_complete,
std::optional<net::ProxyInfo> proxy_info)
: call_on_proxy_lookup_complete_(call_on_proxy_lookup_complete),
proxy_info_(proxy_info) {}
void LookUpProxyForURL(
const GURL& url,
const net::NetworkAnonymizationKey& network_anonymization_key,
mojo::PendingRemote<network::mojom::ProxyLookupClient>
pending_proxy_lookup_client) override {
mojo::Remote<network::mojom::ProxyLookupClient> proxy_lookup_client(
std::move(pending_proxy_lookup_client));
if (call_on_proxy_lookup_complete_) {
proxy_lookup_client->OnProxyLookupComplete(net::OK, proxy_info_);
}
}
private:
bool call_on_proxy_lookup_complete_;
std::optional<net::ProxyInfo> proxy_info_;
};
class ProxyLookupClientImplTest : public ::testing::Test {};
TEST_F(ProxyLookupClientImplTest, NoProxyInfo) {
BrowserTaskEnvironment task_environment;
TestNetworkContext network_context(true,
std::nullopt);
base::RunLoop run_loop;
GURL test_url("example.com");
std::unique_ptr<ProxyLookupClientImpl> proxy_lookup_client =
std::make_unique<ProxyLookupClientImpl>(
test_url,
base::BindOnce(
[](base::RunLoop* run_loop, bool has_proxy) {
EXPECT_FALSE(has_proxy);
run_loop->Quit();
},
&run_loop),
&network_context);
run_loop.Run();
}
TEST_F(ProxyLookupClientImplTest, OnlyDirect) {
BrowserTaskEnvironment task_environment;
net::ProxyInfo direct_proxy_info;
direct_proxy_info.UseDirect();
TestNetworkContext network_context(true,
direct_proxy_info);
base::RunLoop run_loop;
GURL test_url("example.com");
std::unique_ptr<ProxyLookupClientImpl> proxy_lookup_client =
std::make_unique<ProxyLookupClientImpl>(
test_url,
base::BindOnce(
[](base::RunLoop* run_loop, bool has_proxy) {
EXPECT_FALSE(has_proxy);
run_loop->Quit();
},
&run_loop),
&network_context);
run_loop.Run();
}
TEST_F(ProxyLookupClientImplTest, Proxy) {
BrowserTaskEnvironment task_environment;
net::ProxyInfo proxy_info;
proxy_info.UseNamedProxy("proxy.com");
TestNetworkContext network_context(true,
proxy_info);
base::RunLoop run_loop;
GURL test_url("example.com");
std::unique_ptr<ProxyLookupClientImpl> proxy_lookup_client =
std::make_unique<ProxyLookupClientImpl>(
test_url,
base::BindOnce(
[](base::RunLoop* run_loop, bool has_proxy) {
EXPECT_TRUE(has_proxy);
run_loop->Quit();
},
&run_loop),
&network_context);
run_loop.Run();
}
TEST_F(ProxyLookupClientImplTest, Disconnect) {
BrowserTaskEnvironment task_environment;
net::ProxyInfo proxy_info;
proxy_info.UseNamedProxy("proxy.com");
TestNetworkContext network_context(false,
proxy_info);
base::RunLoop run_loop;
GURL test_url("example.com");
std::unique_ptr<ProxyLookupClientImpl> proxy_lookup_client =
std::make_unique<ProxyLookupClientImpl>(
test_url,
base::BindOnce(
[](base::RunLoop* run_loop, bool has_proxy) {
EXPECT_FALSE(has_proxy);
run_loop->Quit();
},
&run_loop),
&network_context);
run_loop.Run();
}
}
}