|  | // Copyright 2016 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_QUIRKS_QUIRKS_CLIENT_H_ | 
|  | #define COMPONENTS_QUIRKS_QUIRKS_CLIENT_H_ | 
|  |  | 
|  | #include <memory> | 
|  |  | 
|  | #include "base/files/file_path.h" | 
|  | #include "base/macros.h" | 
|  | #include "base/threading/thread_checker.h" | 
|  | #include "base/timer/timer.h" | 
|  | #include "net/base/backoff_entry.h" | 
|  |  | 
|  | namespace network { | 
|  | class SimpleURLLoader; | 
|  | } | 
|  |  | 
|  | namespace quirks { | 
|  |  | 
|  | class QuirksManager; | 
|  |  | 
|  | // See declaration in quirks_manager.h. | 
|  | using RequestFinishedCallback = | 
|  | base::Callback<void(const base::FilePath&, bool)>; | 
|  |  | 
|  | // Handles downloading icc and other display data files from Quirks Server. | 
|  | class QuirksClient { | 
|  | public: | 
|  | QuirksClient(int64_t product_id, | 
|  | const std::string& display_name, | 
|  | const RequestFinishedCallback& on_request_finished, | 
|  | QuirksManager* manager); | 
|  | ~QuirksClient(); | 
|  |  | 
|  | void StartDownload(); | 
|  |  | 
|  | int64_t product_id() const { return product_id_; } | 
|  |  | 
|  | private: | 
|  | void OnDownloadComplete(std::unique_ptr<std::string> response_body); | 
|  |  | 
|  | // Send callback and tell manager to delete |this|. | 
|  | void Shutdown(bool success); | 
|  |  | 
|  | // Schedules a retry. | 
|  | void Retry(); | 
|  |  | 
|  | // Translates json with base64-encoded data (|result|) into raw |data|. | 
|  | bool ParseResult(const std::string& result, std::string* data); | 
|  |  | 
|  | // ID of display to request from Quirks Server. | 
|  | const int64_t product_id_; | 
|  |  | 
|  | // Human-readable name to send to Quirks Server. | 
|  | const std::string display_name_; | 
|  |  | 
|  | // Callback supplied by caller. | 
|  | const RequestFinishedCallback on_request_finished_; | 
|  |  | 
|  | // Weak pointer owned by manager, guaranteed to outlive this client object. | 
|  | QuirksManager* manager_; | 
|  |  | 
|  | // Full path to icc file. | 
|  | const base::FilePath icc_path_; | 
|  |  | 
|  | // The class is expected to run on UI thread. | 
|  | base::ThreadChecker thread_checker_; | 
|  |  | 
|  | // This loader is used to download icc file. | 
|  | std::unique_ptr<network::SimpleURLLoader> url_loader_; | 
|  |  | 
|  | // Pending retry. | 
|  | base::OneShotTimer request_scheduled_; | 
|  |  | 
|  | // Controls exponential backoff of time between server checks. | 
|  | net::BackoffEntry backoff_entry_; | 
|  |  | 
|  | // Factory for callbacks. | 
|  | base::WeakPtrFactory<QuirksClient> weak_ptr_factory_; | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(QuirksClient); | 
|  | }; | 
|  |  | 
|  | }  // namespace quirks | 
|  |  | 
|  | #endif  // COMPONENTS_QUIRKS_QUIRKS_CLIENT_H_ |