123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- // Copyright (c) 2012 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef NET_PROXY_RESOLUTION_DHCP_PAC_FILE_FETCHER_H_
- #define NET_PROXY_RESOLUTION_DHCP_PAC_FILE_FETCHER_H_
- #include <string>
- #include "base/compiler_specific.h"
- #include "net/base/completion_once_callback.h"
- #include "net/base/net_export.h"
- #include "net/proxy_resolution/pac_file_fetcher.h"
- #include "net/traffic_annotation/network_traffic_annotation.h"
- #include "url/gurl.h"
- namespace net {
- class NetLogWithSource;
- // Interface for classes that can fetch a PAC file as configured via DHCP.
- //
- // The Fetch method on this interface tries to retrieve the most appropriate
- // PAC script configured via DHCP.
- //
- // Normally there are zero or one DHCP scripts configured, but in the
- // presence of multiple adapters with DHCP enabled, the fetcher resolves
- // which PAC script to use if one or more are available.
- class NET_EXPORT_PRIVATE DhcpPacFileFetcher {
- public:
- DhcpPacFileFetcher(const DhcpPacFileFetcher&) = delete;
- DhcpPacFileFetcher& operator=(const DhcpPacFileFetcher&) = delete;
- // Destruction should cancel any outstanding requests.
- virtual ~DhcpPacFileFetcher();
- // Attempts to retrieve the most appropriate PAC script configured via DHCP,
- // and invokes |callback| on completion.
- //
- // Returns OK on success, otherwise the error code. If the return code is
- // ERR_IO_PENDING, then the request completes asynchronously, and |callback|
- // will be invoked later with the final error code.
- //
- // After synchronous or asynchronous completion with a result code of OK,
- // |*utf16_text| is filled with the response. On failure, the result text is
- // an empty string, and the result code is a network error. Some special
- // network errors that may occur are:
- //
- // ERR_PAC_NOT_IN_DHCP -- no script configured in DHCP.
- //
- // The following all indicate there was one or more script configured
- // in DHCP but all failed to download, and the error for the most
- // preferred adapter that had a script configured was what the error
- // code says:
- //
- // ERR_TIMED_OUT -- fetch took too long to complete.
- // ERR_FILE_TOO_BIG -- response body was too large.
- // ERR_HTTP_RESPONSE_CODE_FAILURE -- script downloaded but returned a
- // non-200 HTTP response.
- // ERR_NOT_IMPLEMENTED -- script required authentication.
- //
- // If the request is cancelled (either using the "Cancel()" method or by
- // deleting |this|), then no callback is invoked.
- //
- // Only one fetch is allowed to be outstanding at a time.
- virtual int Fetch(std::u16string* utf16_text,
- CompletionOnceCallback callback,
- const NetLogWithSource& net_log,
- const NetworkTrafficAnnotationTag traffic_annotation) = 0;
- // Aborts the in-progress fetch (if any).
- virtual void Cancel() = 0;
- // Cancels the in-progress fetch (if any), without invoking its callback.
- // Future requests will fail immediately. Must be called before the
- // URLRequestContext the fetcher was created with is torn down.
- virtual void OnShutdown() = 0;
- // After successful completion of |Fetch()|, this will return the URL
- // retrieved from DHCP. It is reset if/when |Fetch()| is called again.
- virtual const GURL& GetPacURL() const = 0;
- // Intended for unit tests only, so they can test that factories return
- // the right types under given circumstances.
- virtual std::string GetFetcherName() const;
- protected:
- DhcpPacFileFetcher();
- };
- // A do-nothing retriever, always returns synchronously with
- // ERR_NOT_IMPLEMENTED result and empty text.
- class NET_EXPORT_PRIVATE DoNothingDhcpPacFileFetcher
- : public DhcpPacFileFetcher {
- public:
- DoNothingDhcpPacFileFetcher();
- DoNothingDhcpPacFileFetcher(const DoNothingDhcpPacFileFetcher&) = delete;
- DoNothingDhcpPacFileFetcher& operator=(const DoNothingDhcpPacFileFetcher&) =
- delete;
- ~DoNothingDhcpPacFileFetcher() override;
- int Fetch(std::u16string* utf16_text,
- CompletionOnceCallback callback,
- const NetLogWithSource& net_log,
- const NetworkTrafficAnnotationTag traffic_annotation) override;
- void Cancel() override;
- void OnShutdown() override;
- const GURL& GetPacURL() const override;
- std::string GetFetcherName() const override;
- private:
- GURL gurl_;
- };
- } // namespace net
- #endif // NET_PROXY_RESOLUTION_DHCP_PAC_FILE_FETCHER_H_
|