Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(757)

Unified Diff: chrome/browser/chromeos/imageburner/burn_manager.h

Issue 679633002: chromeos: Remove legacy code for chrome://imageburner (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix unit_tests build Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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_

Powered by Google App Engine
This is Rietveld 408576698