Index: chrome/browser/chromeos/imageburner/burn_manager.h |
diff --git a/chrome/browser/chromeos/imageburner/burn_manager.h b/chrome/browser/chromeos/imageburner/burn_manager.h |
deleted file mode 100644 |
index f3b05ed16b1a5f11ec504092c30c4dc92c637383..0000000000000000000000000000000000000000 |
--- a/chrome/browser/chromeos/imageburner/burn_manager.h |
+++ /dev/null |
@@ -1,413 +0,0 @@ |
-// 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 CHROME_BROWSER_CHROMEOS_IMAGEBURNER_BURN_MANAGER_H_ |
-#define CHROME_BROWSER_CHROMEOS_IMAGEBURNER_BURN_MANAGER_H_ |
- |
-#include <list> |
-#include <map> |
-#include <set> |
-#include <string> |
-#include <vector> |
- |
-#include "base/files/file_path.h" |
-#include "base/memory/ref_counted_memory.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/observer_list.h" |
-#include "base/time/time.h" |
-#include "chrome/browser/chromeos/imageburner/burn_device_handler.h" |
-#include "chromeos/disks/disk_mount_manager.h" |
-#include "chromeos/network/network_state_handler_observer.h" |
-#include "net/url_request/url_fetcher_delegate.h" |
-#include "url/gurl.h" |
- |
-namespace net { |
-class URLFetcher; |
-class URLRequestContextGetter; |
-} // namespace net |
- |
-namespace chromeos { |
- |
-enum BurnEvent { |
- UNZIP_STARTED, |
- UNZIP_COMPLETE, |
- UNZIP_FAIL, |
- BURN_UPDATE, |
- BURN_SUCCESS, |
- BURN_FAIL, |
- UNKNOWN |
-}; |
- |
-struct ImageBurnStatus { |
- ImageBurnStatus() : amount_burnt(0), total_size(0) { |
- } |
- |
- ImageBurnStatus(int64 burnt, int64 total) |
- : amount_burnt(burnt), total_size(total) { |
- } |
- |
- int64 amount_burnt; |
- int64 total_size; |
-}; |
- |
-namespace imageburner { |
- |
-// An enum used to describe what type of progress is being made. |
-// TODO(hidehiko): This should be merged into the StateMachine's state. |
-enum ProgressType { |
- DOWNLOADING, |
- UNZIPPING, |
- BURNING |
-}; |
- |
-// Config file properties. |
-extern const char kName[]; |
-extern const char kHwid[]; |
-extern const char kFileName[]; |
-extern const char kUrl[]; |
- |
-// Config file is divided into blocks. Each block is associated with one image |
-// and containes information about that image in form of key-value pairs, one |
-// pair per line. Each block starts with name property. |
-// Also, Each image can be associated with multiple hardware classes, so we |
-// treat hwid property separately. |
-// Config file example: |
-// name=image1 |
-// version=version1 |
-// hwid=hwid1 |
-// hwid=hwid2 |
-// |
-// name=name2 |
-// version=version2 |
-// hwid=hwid3 |
-class ConfigFile { |
- public: |
- ConfigFile(); |
- |
- explicit ConfigFile(const std::string& file_content); |
- |
- ~ConfigFile(); |
- |
- // Builds config file data structure. |
- void reset(const std::string& file_content); |
- |
- void clear(); |
- |
- bool empty() const { return config_struct_.empty(); } |
- |
- size_t size() const { return config_struct_.size(); } |
- |
- // Returns property_name property of image for hardware class hwid. |
- const std::string& GetProperty(const std::string& property_name, |
- const std::string& hwid) const; |
- |
- private: |
- void DeleteLastBlockIfHasNoHwid(); |
- void ProcessLine(const std::vector<std::string>& line); |
- |
- typedef std::map<std::string, std::string> PropertyMap; |
- typedef std::set<std::string> HwidsSet; |
- |
- // Struct that contains config file block info. We separate hwid from other |
- // properties for two reasons: |
- // * there are multiple hwids defined for each block. |
- // * we will retieve properties by hwid. |
- struct ConfigFileBlock { |
- ConfigFileBlock(); |
- ~ConfigFileBlock(); |
- |
- PropertyMap properties; |
- HwidsSet hwids; |
- }; |
- |
- // At the moment we have only two entries in the config file, so we can live |
- // with linear search. Should consider changing data structure if number of |
- // entries gets bigger. |
- // Also, there is only one entry for each hwid, if that changes we should |
- // return vector of strings. |
- typedef std::list<ConfigFileBlock> BlockList; |
- BlockList config_struct_; |
-}; |
- |
-class StateMachine { |
- public: |
- enum State { |
- INITIAL, |
- DOWNLOADING, |
- BURNING, |
- }; |
- |
- State state() { return state_; } |
- |
- class Observer { |
- public: |
- virtual void OnBurnStateChanged(State new_state) = 0; |
- virtual void OnError(int error_message_id) = 0; |
- }; |
- |
- StateMachine(); |
- ~StateMachine(); |
- |
- bool download_started() const { return download_started_; } |
- void OnDownloadStarted() { |
- download_started_ = true; |
- state_ = DOWNLOADING; |
- OnStateChanged(); |
- } |
- |
- bool download_finished() const { return download_finished_; } |
- void OnDownloadFinished() { download_finished_ = true; } |
- |
- void OnBurnStarted() { |
- state_ = BURNING; |
- OnStateChanged(); |
- } |
- |
- bool new_burn_posible() const { return state_ == INITIAL; } |
- |
- void OnSuccess(); |
- void OnError(int error_message_id); |
- |
- void OnStateChanged() { |
- FOR_EACH_OBSERVER(Observer, observers_, OnBurnStateChanged(state_)); |
- } |
- |
- void AddObserver(Observer* observer) { |
- observers_.AddObserver(observer); |
- } |
- |
- void RemoveObserver(Observer* observer) { |
- observers_.RemoveObserver(observer); |
- } |
- |
- private: |
- bool download_started_; |
- bool download_finished_; |
- |
- State state_; |
- |
- ObserverList<Observer> observers_; |
- |
- DISALLOW_COPY_AND_ASSIGN(StateMachine); |
-}; |
- |
-// This is a system-wide singleton class to manage burning the recovery media. |
-// Here is how the burning image procedure works: |
-// 0) Choose the device the image to be burned (manually via web-ui). |
-// 1) Create ImageDir, which is a working directory for the procedure. |
-// 2) Download the config file. |
-// 2-1) Fetch the config file from the server. |
-// 2-2) Parse the config file content, and extract url and name of the image |
-// file. |
-// 3) Fetch the image file. |
-// 4) Burn the image to the device. |
-// 4-1) Unzip the fetched image file. |
-// 4-2) Unmount the device from file system. |
-// 4-3) Copy the unzipped file to the device directly. |
-// Currently, this only provides some methods to start/cancel background tasks, |
-// and some accessors to obtain the current status. Other functions are |
-// in BurnController. |
-// TODO(hidehiko): Simplify the relationship among this class, |
-// BurnController and helper classes defined above. |
-class BurnManager : public net::URLFetcherDelegate, |
- public NetworkStateHandlerObserver { |
- public: |
- // Interface for classes that need to observe events for the burning image |
- // tasks. |
- class Observer { |
- public: |
- // Triggered when a burnable device is added. |
- virtual void OnDeviceAdded(const disks::DiskMountManager::Disk& disk) = 0; |
- |
- // Triggered when a burnable device is removed. |
- virtual void OnDeviceRemoved(const disks::DiskMountManager::Disk& disk) = 0; |
- |
- // Triggered when a network is detected. |
- virtual void OnNetworkDetected() = 0; |
- |
- // Triggered when burning the image is successfully done. |
- virtual void OnSuccess() = 0; |
- |
- // Triggered during the image file downloading periodically. |
- // |estimated_remaining_time| is the remaining duration to download the |
- // remaining content estimated based on the elapsed time. |
- virtual void OnProgressWithRemainingTime( |
- ProgressType progress_type, |
- int64 received_bytes, |
- int64 total_bytes, |
- const base::TimeDelta& estimated_remaining_time) = 0; |
- |
- // Triggered when some progress is made, but estimated_remaining_time is |
- // not available. |
- // TODO(hidehiko): We should be able to merge this method with above one. |
- virtual void OnProgress(ProgressType progress_type, |
- int64 received_bytes, |
- int64 total_bytes) = 0; |
- }; |
- |
- // Creates the global BurnManager instance. |
- static void Initialize( |
- const base::FilePath& downloads_directory, |
- scoped_refptr<net::URLRequestContextGetter> context_getter); |
- |
- // Destroys the global BurnManager instance if it exists. |
- static void Shutdown(); |
- |
- // Returns the global BurnManager instance. |
- // Initialize() should already have been called. |
- static BurnManager* GetInstance(); |
- |
- // Add an observer. |
- void AddObserver(Observer* observer); |
- |
- // Remove an observer. |
- void RemoveObserver(Observer* observer); |
- |
- // Returns devices on which we can burn recovery image. |
- std::vector<disks::DiskMountManager::Disk> GetBurnableDevices(); |
- |
- // Cancels a currently running task of burning recovery image. |
- // Note: currently we only support Cancel method, which may look asymmetry |
- // because there is no method to start the task. It is just because that |
- // we are on the way of refactoring. |
- // TODO(hidehiko): Introduce Start method, which actually starts a whole |
- // image burning task, including config/image file fetching and unzipping. |
- void Cancel(); |
- |
- // Error is usually detected by all existing Burn handlers, but only first |
- // one that calls this method should actually process it. |
- // The |message_id| is the id for human readable error message, although |
- // here is not the place to handle UI. |
- // TODO(hidehiko): Replace it with semantical enum value. |
- // Note: currently, due to some implementation reasons, the errors can be |
- // observed in outside classes, and this method is public to be accessed from |
- // them. |
- // TODO(hidehiko): Refactor the structure. |
- void OnError(int message_id); |
- |
- // Creates URL image should be fetched from. |
- // Must be called from UI thread. |
- void FetchConfigFile(); |
- |
- // Fetch a zipped recovery image. |
- void FetchImage(); |
- |
- // Burns the image of |zip_image_file_path_| and |image_file_name| |
- // to |target_device_path_| and |target_file_path_|. |
- // TODO(hidehiko): The name "Burn" sounds confusing because there are two |
- // meaning here. |
- // 1) In wider sense, Burn means a whole process, including config/image |
- // file fetching, or file unzipping. |
- // 2) In narrower sense, Burn means just write the image onto a device. |
- // To avoid such a confusion, rename the method. |
- void DoBurn(); |
- |
- // Cancels the image burning. |
- // TODO(hidehiko): Rename this method along with the renaming of DoBurn. |
- void CancelBurnImage(); |
- |
- // Cancel fetching image. |
- void CancelImageFetch(); |
- |
- // URLFetcherDelegate overrides: |
- virtual void OnURLFetchComplete(const net::URLFetcher* source) override; |
- virtual void OnURLFetchDownloadProgress(const net::URLFetcher* source, |
- int64 current, |
- int64 total) override; |
- |
- // NetworkStateHandlerObserver override. |
- virtual void DefaultNetworkChanged(const NetworkState* network) override; |
- |
- // Creates directory image will be downloaded to. |
- // Must be called from FILE thread. |
- void CreateImageDir(); |
- |
- // Returns the directory to which the recovery image should be downloaded. |
- // If the directory hasn't been previously created, an empty path is returned |
- // (in which case |CreateImageDir()| should be called). |
- base::FilePath GetImageDir(); |
- |
- const base::FilePath& target_device_path() { return target_device_path_; } |
- void set_target_device_path(const base::FilePath& path) { |
- target_device_path_ = path; |
- } |
- |
- const base::FilePath& target_file_path() { return target_file_path_; } |
- void set_target_file_path(const base::FilePath& path) { |
- target_file_path_ = path; |
- } |
- |
- void ResetTargetPaths() { |
- target_device_path_.clear(); |
- target_file_path_.clear(); |
- } |
- |
- StateMachine* state_machine() const { return state_machine_.get(); } |
- |
- private: |
- BurnManager(const base::FilePath& downloads_directory, |
- scoped_refptr<net::URLRequestContextGetter> context_getter); |
- virtual ~BurnManager(); |
- |
- void UpdateBurnStatus(BurnEvent evt, const ImageBurnStatus& status); |
- |
- void OnImageDirCreated(bool success); |
- void ConfigFileFetched(bool fetched, const std::string& content); |
- |
- void OnImageUnzipped(scoped_refptr<base::RefCountedString> source_image_file); |
- void OnDevicesUnmounted(bool success); |
- void OnBurnImageFail(); |
- void OnBurnFinished(const std::string& target_path, |
- bool success, |
- const std::string& error); |
- void OnBurnProgressUpdate(const std::string& target_path, |
- int64 num_bytes_burnt, |
- int64 total_size); |
- |
- void NotifyDeviceAdded(const disks::DiskMountManager::Disk& disk); |
- void NotifyDeviceRemoved(const disks::DiskMountManager::Disk& disk); |
- |
- BurnDeviceHandler device_handler_; |
- |
- bool image_dir_created_; |
- bool unzipping_; |
- bool cancelled_; |
- bool burning_; |
- bool block_burn_signals_; |
- |
- base::FilePath image_dir_; |
- base::FilePath zip_image_file_path_; |
- base::FilePath source_image_path_; |
- base::FilePath target_device_path_; |
- base::FilePath target_file_path_; |
- |
- GURL config_file_url_; |
- bool config_file_fetched_; |
- std::string image_file_name_; |
- GURL image_download_url_; |
- |
- scoped_ptr<StateMachine> state_machine_; |
- |
- scoped_ptr<net::URLFetcher> config_fetcher_; |
- scoped_ptr<net::URLFetcher> image_fetcher_; |
- |
- scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; |
- |
- base::TimeTicks tick_image_download_start_; |
- int64 bytes_image_download_progress_last_reported_; |
- |
- ObserverList<Observer> observers_; |
- |
- // Note: This should remain the last member so it'll be destroyed and |
- // invalidate its weak pointers before any other members are destroyed. |
- base::WeakPtrFactory<BurnManager> weak_ptr_factory_; |
- |
- DISALLOW_COPY_AND_ASSIGN(BurnManager); |
-}; |
- |
-} // namespace imageburner |
- |
-} // namespace chromeos |
- |
-#endif // CHROME_BROWSER_CHROMEOS_IMAGEBURNER_BURN_MANAGER_H_ |