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 #ifndef NET_BASE_TEST_PROXY_DELEGATE_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_BASE_TEST_PROXY_DELEGATE_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <optional> 9*6777b538SAndroid Build Coastguard Worker #include <string> 10*6777b538SAndroid Build Coastguard Worker #include <string_view> 11*6777b538SAndroid Build Coastguard Worker #include <vector> 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker #include "base/memory/scoped_refptr.h" 14*6777b538SAndroid Build Coastguard Worker #include "net/base/proxy_chain.h" 15*6777b538SAndroid Build Coastguard Worker #include "net/base/proxy_delegate.h" 16*6777b538SAndroid Build Coastguard Worker #include "net/base/proxy_server.h" 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Worker class GURL; 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Worker namespace net { 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker class ProxyInfo; 23*6777b538SAndroid Build Coastguard Worker class ProxyResolutionService; 24*6777b538SAndroid Build Coastguard Worker 25*6777b538SAndroid Build Coastguard Worker class TestProxyDelegate : public ProxyDelegate { 26*6777b538SAndroid Build Coastguard Worker public: 27*6777b538SAndroid Build Coastguard Worker TestProxyDelegate(); 28*6777b538SAndroid Build Coastguard Worker ~TestProxyDelegate() override; 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker // Setter and getter for the proxy chain to use for a given URL when 31*6777b538SAndroid Build Coastguard Worker // `OnResolveProxy()` is called. Attempting to get the proxy chain when one 32*6777b538SAndroid Build Coastguard Worker // hasn't been set will result in a crash. 33*6777b538SAndroid Build Coastguard Worker void set_proxy_chain(const ProxyChain& proxy_chain); 34*6777b538SAndroid Build Coastguard Worker ProxyChain proxy_chain() const; 35*6777b538SAndroid Build Coastguard Worker 36*6777b538SAndroid Build Coastguard Worker // Setter for the name of a header to add to the tunnel request. The value of 37*6777b538SAndroid Build Coastguard Worker // the header will be based on the `OnBeforeTunnelRequest()` `proxy_chain` and 38*6777b538SAndroid Build Coastguard Worker // `chain_index` parameters. If no extra header name is provided, no extra 39*6777b538SAndroid Build Coastguard Worker // header will be added to the tunnel request. set_extra_header_name(std::string_view extra_header_name)40*6777b538SAndroid Build Coastguard Worker void set_extra_header_name(std::string_view extra_header_name) { 41*6777b538SAndroid Build Coastguard Worker extra_header_name_ = extra_header_name; 42*6777b538SAndroid Build Coastguard Worker } 43*6777b538SAndroid Build Coastguard Worker 44*6777b538SAndroid Build Coastguard Worker // Returns the header value that may be added to a tunnel request for a given 45*6777b538SAndroid Build Coastguard Worker // proxy server. For more info, see `set_extra_header_name()`. 46*6777b538SAndroid Build Coastguard Worker static std::string GetExtraHeaderValue(const ProxyServer& proxy_server); 47*6777b538SAndroid Build Coastguard Worker 48*6777b538SAndroid Build Coastguard Worker // Returns the number of times `OnBeforeTunnelRequest()` was called. on_before_tunnel_request_call_count()49*6777b538SAndroid Build Coastguard Worker size_t on_before_tunnel_request_call_count() const { 50*6777b538SAndroid Build Coastguard Worker return on_before_tunnel_request_call_count_; 51*6777b538SAndroid Build Coastguard Worker } 52*6777b538SAndroid Build Coastguard Worker 53*6777b538SAndroid Build Coastguard Worker // Returns the number of times `OnTunnelHeadersReceived()` was called. on_tunnel_headers_received_call_count()54*6777b538SAndroid Build Coastguard Worker size_t on_tunnel_headers_received_call_count() { 55*6777b538SAndroid Build Coastguard Worker return on_tunnel_headers_received_headers_.size(); 56*6777b538SAndroid Build Coastguard Worker } 57*6777b538SAndroid Build Coastguard Worker 58*6777b538SAndroid Build Coastguard Worker // Make subsequent calls to `OnTunnelHeadersReceived()` fail with the given 59*6777b538SAndroid Build Coastguard Worker // value. 60*6777b538SAndroid Build Coastguard Worker void MakeOnTunnelHeadersReceivedFail(Error result); 61*6777b538SAndroid Build Coastguard Worker 62*6777b538SAndroid Build Coastguard Worker // Checks whether the provided proxy chain, chain index, response header name, 63*6777b538SAndroid Build Coastguard Worker // and response header value were passed to a given 64*6777b538SAndroid Build Coastguard Worker // `OnTunnelHeadersReceived()` call. 65*6777b538SAndroid Build Coastguard Worker void VerifyOnTunnelHeadersReceived(const ProxyChain& proxy_chain, 66*6777b538SAndroid Build Coastguard Worker size_t chain_index, 67*6777b538SAndroid Build Coastguard Worker const std::string& response_header_name, 68*6777b538SAndroid Build Coastguard Worker const std::string& response_header_value, 69*6777b538SAndroid Build Coastguard Worker size_t call_index = 0) const; 70*6777b538SAndroid Build Coastguard Worker 71*6777b538SAndroid Build Coastguard Worker // ProxyDelegate implementation: 72*6777b538SAndroid Build Coastguard Worker void OnResolveProxy(const GURL& url, 73*6777b538SAndroid Build Coastguard Worker const NetworkAnonymizationKey& network_anonymization_key, 74*6777b538SAndroid Build Coastguard Worker const std::string& method, 75*6777b538SAndroid Build Coastguard Worker const ProxyRetryInfoMap& proxy_retry_info, 76*6777b538SAndroid Build Coastguard Worker ProxyInfo* result) override; 77*6777b538SAndroid Build Coastguard Worker void OnSuccessfulRequestAfterFailures( 78*6777b538SAndroid Build Coastguard Worker const ProxyRetryInfoMap& proxy_retry_info) override; 79*6777b538SAndroid Build Coastguard Worker void OnFallback(const ProxyChain& bad_chain, int net_error) override; 80*6777b538SAndroid Build Coastguard Worker void OnBeforeTunnelRequest(const ProxyChain& proxy_chain, 81*6777b538SAndroid Build Coastguard Worker size_t chain_index, 82*6777b538SAndroid Build Coastguard Worker HttpRequestHeaders* extra_headers) override; 83*6777b538SAndroid Build Coastguard Worker Error OnTunnelHeadersReceived( 84*6777b538SAndroid Build Coastguard Worker const ProxyChain& proxy_chain, 85*6777b538SAndroid Build Coastguard Worker size_t chain_index, 86*6777b538SAndroid Build Coastguard Worker const HttpResponseHeaders& response_headers) override; 87*6777b538SAndroid Build Coastguard Worker void SetProxyResolutionService( 88*6777b538SAndroid Build Coastguard Worker ProxyResolutionService* proxy_resolution_service) override; 89*6777b538SAndroid Build Coastguard Worker 90*6777b538SAndroid Build Coastguard Worker private: 91*6777b538SAndroid Build Coastguard Worker std::optional<ProxyChain> proxy_chain_; 92*6777b538SAndroid Build Coastguard Worker std::optional<std::string> extra_header_name_; 93*6777b538SAndroid Build Coastguard Worker 94*6777b538SAndroid Build Coastguard Worker size_t on_before_tunnel_request_call_count_ = 0; 95*6777b538SAndroid Build Coastguard Worker 96*6777b538SAndroid Build Coastguard Worker Error on_tunnel_headers_received_result_ = OK; 97*6777b538SAndroid Build Coastguard Worker std::vector<ProxyChain> on_tunnel_headers_received_proxy_chains_; 98*6777b538SAndroid Build Coastguard Worker std::vector<size_t> on_tunnel_headers_received_chain_indices_; 99*6777b538SAndroid Build Coastguard Worker std::vector<scoped_refptr<HttpResponseHeaders>> 100*6777b538SAndroid Build Coastguard Worker on_tunnel_headers_received_headers_; 101*6777b538SAndroid Build Coastguard Worker }; 102*6777b538SAndroid Build Coastguard Worker 103*6777b538SAndroid Build Coastguard Worker } // namespace net 104*6777b538SAndroid Build Coastguard Worker 105*6777b538SAndroid Build Coastguard Worker #endif // NET_BASE_TEST_PROXY_DELEGATE_H_ 106