| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef NET_PROXY_RESOLUTION_WIN_WINDOWS_SYSTEM_PROXY_RESOLUTION_REQUEST_H_ |
| #define NET_PROXY_RESOLUTION_WIN_WINDOWS_SYSTEM_PROXY_RESOLUTION_REQUEST_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include "base/memory/raw_ptr.h" |
| #include "base/sequence_checker.h" |
| #include "base/time/time.h" |
| #include "net/base/completion_once_callback.h" |
| #include "net/base/net_export.h" |
| #include "net/log/net_log_with_source.h" |
| #include "net/proxy_resolution/proxy_resolution_request.h" |
| #include "net/proxy_resolution/win/windows_system_proxy_resolver.h" |
| #include "net/proxy_resolution/win/winhttp_status.h" |
| #include "url/gurl.h" |
| |
| namespace net { |
| |
| class ProxyInfo; |
| class ProxyList; |
| class WindowsSystemProxyResolutionService; |
| |
| // This is the concrete implementation of ProxyResolutionRequest used by |
| // WindowsSystemProxyResolutionService. Manages a single asynchronous proxy |
| // resolution request. |
| class NET_EXPORT WindowsSystemProxyResolutionRequest |
| : public ProxyResolutionRequest { |
| public: |
| // The |windows_system_proxy_resolver| is not saved by this object. Rather, it |
| // is simply used to kick off proxy resolution in a utility process from |
| // within the constructor. The |windows_system_proxy_resolver| is not needed |
| // after construction. Every other parameter is saved by this object. Details |
| // for each one of these saved parameters can be found below. |
| WindowsSystemProxyResolutionRequest( |
| WindowsSystemProxyResolutionService* service, |
| const GURL& url, |
| const std::string& method, |
| ProxyInfo* results, |
| const CompletionOnceCallback user_callback, |
| const NetLogWithSource& net_log, |
| WindowsSystemProxyResolver* windows_system_proxy_resolver); |
| |
| WindowsSystemProxyResolutionRequest( |
| const WindowsSystemProxyResolutionRequest&) = delete; |
| WindowsSystemProxyResolutionRequest& operator=( |
| const WindowsSystemProxyResolutionRequest&) = delete; |
| |
| ~WindowsSystemProxyResolutionRequest() override; |
| |
| // ProxyResolutionRequest |
| LoadState GetLoadState() const override; |
| |
| // Callback for when the cross-process proxy resolution has completed. The |
| // |proxy_list| is the list of proxies returned by WinHttp translated into |
| // Chromium-friendly terms. The |winhttp_status| describes the status of the |
| // proxy resolution request. If WinHttp fails for some reason, |windows_error| |
| // contains the specific error returned by WinHttp. |
| virtual void ProxyResolutionComplete(const ProxyList& proxy_list, |
| WinHttpStatus winhttp_status, |
| int windows_error); |
| |
| WindowsSystemProxyResolver::Request* GetProxyResolutionRequestForTesting(); |
| void ResetProxyResolutionRequestForTesting(); |
| |
| private: |
| // Cancels the callback from the resolver for a previously started proxy |
| // resolution. |
| void CancelResolveRequest(); |
| |
| // Returns true if the request has been completed. |
| bool was_completed() const { return user_callback_.is_null(); } |
| |
| // Note that Request holds a bare pointer to the |
| // WindowsSystemProxyResolutionService. Outstanding requests are cancelled |
| // during ~WindowsSystemProxyResolutionService, so this is guaranteed to be |
| // valid throughout the lifetime of this object. |
| raw_ptr<WindowsSystemProxyResolutionService> service_; |
| CompletionOnceCallback user_callback_; |
| raw_ptr<ProxyInfo> results_; |
| const GURL url_; |
| const std::string method_; |
| NetLogWithSource net_log_; |
| // Time when the request was created. Stored here rather than in |results_| |
| // because the time in |results_| will be cleared. |
| base::TimeTicks creation_time_; |
| |
| // Manages the cross-process proxy resolution. Deleting this will cancel a |
| // pending proxy resolution. After a callback has been received via |
| // ProxyResolutionComplete(), this object will no longer do anything. |
| std::unique_ptr<WindowsSystemProxyResolver::Request> |
| proxy_resolution_request_; |
| |
| SEQUENCE_CHECKER(sequence_checker_); |
| }; |
| |
| } // namespace net |
| |
| #endif // NET_PROXY_RESOLUTION_WIN_WINDOWS_SYSTEM_PROXY_RESOLUTION_REQUEST_H_ |