xref: /aosp_15_r20/external/cronet/net/base/test_proxy_delegate.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2016 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "net/base/test_proxy_delegate.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include <optional>
8*6777b538SAndroid Build Coastguard Worker #include <string>
9*6777b538SAndroid Build Coastguard Worker #include <vector>
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker #include "net/base/net_errors.h"
12*6777b538SAndroid Build Coastguard Worker #include "net/base/proxy_chain.h"
13*6777b538SAndroid Build Coastguard Worker #include "net/base/proxy_server.h"
14*6777b538SAndroid Build Coastguard Worker #include "net/base/proxy_string_util.h"
15*6777b538SAndroid Build Coastguard Worker #include "net/http/http_request_headers.h"
16*6777b538SAndroid Build Coastguard Worker #include "net/http/http_response_headers.h"
17*6777b538SAndroid Build Coastguard Worker #include "net/proxy_resolution/proxy_info.h"
18*6777b538SAndroid Build Coastguard Worker #include "net/proxy_resolution/proxy_resolution_service.h"
19*6777b538SAndroid Build Coastguard Worker #include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
20*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
21*6777b538SAndroid Build Coastguard Worker 
22*6777b538SAndroid Build Coastguard Worker namespace net {
23*6777b538SAndroid Build Coastguard Worker 
24*6777b538SAndroid Build Coastguard Worker TestProxyDelegate::TestProxyDelegate() = default;
25*6777b538SAndroid Build Coastguard Worker 
26*6777b538SAndroid Build Coastguard Worker TestProxyDelegate::~TestProxyDelegate() = default;
27*6777b538SAndroid Build Coastguard Worker 
set_proxy_chain(const ProxyChain & proxy_chain)28*6777b538SAndroid Build Coastguard Worker void TestProxyDelegate::set_proxy_chain(const ProxyChain& proxy_chain) {
29*6777b538SAndroid Build Coastguard Worker   CHECK(proxy_chain.IsValid());
30*6777b538SAndroid Build Coastguard Worker   proxy_chain_ = proxy_chain;
31*6777b538SAndroid Build Coastguard Worker }
32*6777b538SAndroid Build Coastguard Worker 
proxy_chain() const33*6777b538SAndroid Build Coastguard Worker ProxyChain TestProxyDelegate::proxy_chain() const {
34*6777b538SAndroid Build Coastguard Worker   CHECK(proxy_chain_) << "No proxy chain has been set via 'set_proxy_chain()'";
35*6777b538SAndroid Build Coastguard Worker   return *proxy_chain_;
36*6777b538SAndroid Build Coastguard Worker }
37*6777b538SAndroid Build Coastguard Worker 
MakeOnTunnelHeadersReceivedFail(Error result)38*6777b538SAndroid Build Coastguard Worker void TestProxyDelegate::MakeOnTunnelHeadersReceivedFail(Error result) {
39*6777b538SAndroid Build Coastguard Worker   on_tunnel_headers_received_result_ = result;
40*6777b538SAndroid Build Coastguard Worker }
41*6777b538SAndroid Build Coastguard Worker 
VerifyOnTunnelHeadersReceived(const ProxyChain & proxy_chain,size_t chain_index,const std::string & response_header_name,const std::string & response_header_value,size_t call_index) const42*6777b538SAndroid Build Coastguard Worker void TestProxyDelegate::VerifyOnTunnelHeadersReceived(
43*6777b538SAndroid Build Coastguard Worker     const ProxyChain& proxy_chain,
44*6777b538SAndroid Build Coastguard Worker     size_t chain_index,
45*6777b538SAndroid Build Coastguard Worker     const std::string& response_header_name,
46*6777b538SAndroid Build Coastguard Worker     const std::string& response_header_value,
47*6777b538SAndroid Build Coastguard Worker     size_t call_index) const {
48*6777b538SAndroid Build Coastguard Worker   ASSERT_LT(call_index, on_tunnel_headers_received_proxy_chains_.size());
49*6777b538SAndroid Build Coastguard Worker   ASSERT_EQ(on_tunnel_headers_received_proxy_chains_.size(),
50*6777b538SAndroid Build Coastguard Worker             on_tunnel_headers_received_chain_indices_.size());
51*6777b538SAndroid Build Coastguard Worker   ASSERT_EQ(on_tunnel_headers_received_proxy_chains_.size(),
52*6777b538SAndroid Build Coastguard Worker             on_tunnel_headers_received_headers_.size());
53*6777b538SAndroid Build Coastguard Worker 
54*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(proxy_chain,
55*6777b538SAndroid Build Coastguard Worker             on_tunnel_headers_received_proxy_chains_.at(call_index));
56*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(chain_index,
57*6777b538SAndroid Build Coastguard Worker             on_tunnel_headers_received_chain_indices_.at(call_index));
58*6777b538SAndroid Build Coastguard Worker 
59*6777b538SAndroid Build Coastguard Worker   scoped_refptr<HttpResponseHeaders> response_headers =
60*6777b538SAndroid Build Coastguard Worker       on_tunnel_headers_received_headers_.at(call_index);
61*6777b538SAndroid Build Coastguard Worker   ASSERT_NE(response_headers.get(), nullptr);
62*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(response_headers->HasHeaderValue(response_header_name,
63*6777b538SAndroid Build Coastguard Worker                                                response_header_value));
64*6777b538SAndroid Build Coastguard Worker }
65*6777b538SAndroid Build Coastguard Worker 
OnResolveProxy(const GURL & url,const NetworkAnonymizationKey & network_anonymization_key,const std::string & method,const ProxyRetryInfoMap & proxy_retry_info,ProxyInfo * result)66*6777b538SAndroid Build Coastguard Worker void TestProxyDelegate::OnResolveProxy(
67*6777b538SAndroid Build Coastguard Worker     const GURL& url,
68*6777b538SAndroid Build Coastguard Worker     const NetworkAnonymizationKey& network_anonymization_key,
69*6777b538SAndroid Build Coastguard Worker     const std::string& method,
70*6777b538SAndroid Build Coastguard Worker     const ProxyRetryInfoMap& proxy_retry_info,
71*6777b538SAndroid Build Coastguard Worker     ProxyInfo* result) {
72*6777b538SAndroid Build Coastguard Worker   if (proxy_chain_) {
73*6777b538SAndroid Build Coastguard Worker     result->UseProxyChain(*proxy_chain_);
74*6777b538SAndroid Build Coastguard Worker   }
75*6777b538SAndroid Build Coastguard Worker }
76*6777b538SAndroid Build Coastguard Worker 
OnSuccessfulRequestAfterFailures(const ProxyRetryInfoMap & proxy_retry_info)77*6777b538SAndroid Build Coastguard Worker void TestProxyDelegate::OnSuccessfulRequestAfterFailures(
78*6777b538SAndroid Build Coastguard Worker     const ProxyRetryInfoMap& proxy_retry_info) {}
79*6777b538SAndroid Build Coastguard Worker 
OnFallback(const ProxyChain & bad_chain,int net_error)80*6777b538SAndroid Build Coastguard Worker void TestProxyDelegate::OnFallback(const ProxyChain& bad_chain, int net_error) {
81*6777b538SAndroid Build Coastguard Worker }
82*6777b538SAndroid Build Coastguard Worker 
83*6777b538SAndroid Build Coastguard Worker // static
GetExtraHeaderValue(const ProxyServer & proxy_server)84*6777b538SAndroid Build Coastguard Worker std::string TestProxyDelegate::GetExtraHeaderValue(
85*6777b538SAndroid Build Coastguard Worker     const ProxyServer& proxy_server) {
86*6777b538SAndroid Build Coastguard Worker   return ProxyServerToProxyUri(proxy_server);
87*6777b538SAndroid Build Coastguard Worker }
88*6777b538SAndroid Build Coastguard Worker 
OnBeforeTunnelRequest(const ProxyChain & proxy_chain,size_t chain_index,HttpRequestHeaders * extra_headers)89*6777b538SAndroid Build Coastguard Worker void TestProxyDelegate::OnBeforeTunnelRequest(
90*6777b538SAndroid Build Coastguard Worker     const ProxyChain& proxy_chain,
91*6777b538SAndroid Build Coastguard Worker     size_t chain_index,
92*6777b538SAndroid Build Coastguard Worker     HttpRequestHeaders* extra_headers) {
93*6777b538SAndroid Build Coastguard Worker   on_before_tunnel_request_call_count_++;
94*6777b538SAndroid Build Coastguard Worker 
95*6777b538SAndroid Build Coastguard Worker   if (extra_header_name_) {
96*6777b538SAndroid Build Coastguard Worker     extra_headers->SetHeader(
97*6777b538SAndroid Build Coastguard Worker         *extra_header_name_,
98*6777b538SAndroid Build Coastguard Worker         GetExtraHeaderValue(proxy_chain.GetProxyServer(chain_index)));
99*6777b538SAndroid Build Coastguard Worker   }
100*6777b538SAndroid Build Coastguard Worker }
101*6777b538SAndroid Build Coastguard Worker 
OnTunnelHeadersReceived(const ProxyChain & proxy_chain,size_t chain_index,const HttpResponseHeaders & response_headers)102*6777b538SAndroid Build Coastguard Worker Error TestProxyDelegate::OnTunnelHeadersReceived(
103*6777b538SAndroid Build Coastguard Worker     const ProxyChain& proxy_chain,
104*6777b538SAndroid Build Coastguard Worker     size_t chain_index,
105*6777b538SAndroid Build Coastguard Worker     const HttpResponseHeaders& response_headers) {
106*6777b538SAndroid Build Coastguard Worker   on_tunnel_headers_received_headers_.push_back(
107*6777b538SAndroid Build Coastguard Worker       base::MakeRefCounted<HttpResponseHeaders>(
108*6777b538SAndroid Build Coastguard Worker           response_headers.raw_headers()));
109*6777b538SAndroid Build Coastguard Worker 
110*6777b538SAndroid Build Coastguard Worker   on_tunnel_headers_received_proxy_chains_.push_back(proxy_chain);
111*6777b538SAndroid Build Coastguard Worker   on_tunnel_headers_received_chain_indices_.push_back(chain_index);
112*6777b538SAndroid Build Coastguard Worker   return on_tunnel_headers_received_result_;
113*6777b538SAndroid Build Coastguard Worker }
114*6777b538SAndroid Build Coastguard Worker 
SetProxyResolutionService(ProxyResolutionService * proxy_resolution_service)115*6777b538SAndroid Build Coastguard Worker void TestProxyDelegate::SetProxyResolutionService(
116*6777b538SAndroid Build Coastguard Worker     ProxyResolutionService* proxy_resolution_service) {}
117*6777b538SAndroid Build Coastguard Worker 
118*6777b538SAndroid Build Coastguard Worker }  // namespace net
119