// Copyright 2019 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 COMPONENTS_UPDATE_CLIENT_NETWORK_H_ #define COMPONENTS_UPDATE_CLIENT_NETWORK_H_ #include #include #include #include "base/callback_forward.h" #include "base/containers/flat_map.h" #include "base/macros.h" #include "base/memory/ref_counted.h" class GURL; namespace base { class FilePath; } // namespace base namespace update_client { class NetworkFetcher { public: // If the request does not have an X-Retry-After header, implementations // should pass -1 for |xheader_retry_after_sec|. using PostRequestCompleteCallback = base::OnceCallback response_body, int net_error, const std::string& header_etag, const std::string& header_x_cup_server_proof, int64_t xheader_retry_after_sec)>; using DownloadToFileCompleteCallback = base::OnceCallback; using ResponseStartedCallback = base::OnceCallback; using ProgressCallback = base::RepeatingCallback; // The following two headers carry the ECSDA signature of the POST response, // if signing has been used. Two headers are used for redundancy purposes. // The value of the `X-Cup-Server-Proof` is preferred. static constexpr char kHeaderEtag[] = "ETag"; static constexpr char kHeaderXCupServerProof[] = "X-Cup-Server-Proof"; // The server uses the optional X-Retry-After header to indicate that the // current request should not be attempted again. // // The value of the header is the number of seconds to wait before trying to // do a subsequent update check. Only the values retrieved over HTTPS are // trusted. static constexpr char kHeaderXRetryAfter[] = "X-Retry-After"; virtual ~NetworkFetcher() = default; virtual void PostRequest( const GURL& url, const std::string& post_data, const std::string& content_type, const base::flat_map& post_additional_headers, ResponseStartedCallback response_started_callback, ProgressCallback progress_callback, PostRequestCompleteCallback post_request_complete_callback) = 0; virtual void DownloadToFile( const GURL& url, const base::FilePath& file_path, ResponseStartedCallback response_started_callback, ProgressCallback progress_callback, DownloadToFileCompleteCallback download_to_file_complete_callback) = 0; protected: NetworkFetcher() = default; private: DISALLOW_COPY_AND_ASSIGN(NetworkFetcher); }; class NetworkFetcherFactory : public base::RefCountedThreadSafe { public: virtual std::unique_ptr Create() const = 0; protected: friend class base::RefCountedThreadSafe; NetworkFetcherFactory() = default; virtual ~NetworkFetcherFactory() = default; private: DISALLOW_COPY_AND_ASSIGN(NetworkFetcherFactory); }; } // namespace update_client #endif // COMPONENTS_UPDATE_CLIENT_NETWORK_H_