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