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

Side by Side Diff: chrome/browser/chromeos/imageburner/burn_controller.cc

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, 1 month 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/imageburner/burn_controller.h"
6
7 #include "base/bind.h"
8 #include "base/files/file_path.h"
9 #include "base/memory/weak_ptr.h"
10 #include "chrome/browser/chromeos/imageburner/burn_manager.h"
11 #include "chromeos/network/network_state_handler.h"
12 #include "url/gurl.h"
13
14 namespace chromeos {
15 namespace imageburner {
16
17 namespace {
18
19 // 3.9GB. It is less than 4GB because true device size ussually varies a little.
20 const uint64 kMinDeviceSize = static_cast<uint64>(3.9 * 1000 * 1000 * 1000);
21
22 class BurnControllerImpl
23 : public BurnController,
24 public StateMachine::Observer,
25 public BurnManager::Observer {
26 public:
27 explicit BurnControllerImpl(BurnController::Delegate* delegate)
28 : burn_manager_(NULL),
29 state_machine_(NULL),
30 working_(false),
31 delegate_(delegate) {
32 burn_manager_ = BurnManager::GetInstance();
33 burn_manager_->AddObserver(this);
34 state_machine_ = burn_manager_->state_machine();
35 state_machine_->AddObserver(this);
36 }
37
38 virtual ~BurnControllerImpl() {
39 state_machine_->RemoveObserver(this);
40 burn_manager_->RemoveObserver(this);
41 }
42
43 // BurnManager::Observer override.
44 virtual void OnDeviceAdded(
45 const disks::DiskMountManager::Disk& disk) override {
46 delegate_->OnDeviceAdded(disk);
47 }
48
49 // BurnManager::Observer override.
50 virtual void OnDeviceRemoved(
51 const disks::DiskMountManager::Disk& disk) override {
52 delegate_->OnDeviceRemoved(disk);
53 }
54
55 // BurnManager::Observer override.
56 virtual void OnNetworkDetected() override {
57 delegate_->OnNetworkDetected();
58 }
59
60 // BurnManager::Observer override.
61 virtual void OnSuccess() override {
62 delegate_->OnSuccess();
63 // TODO(hidehiko): Remove |working_| flag.
64 working_ = false;
65 }
66
67 // BurnManager::Observer override.
68 virtual void OnProgressWithRemainingTime(
69 ProgressType progress_type,
70 int64 received_bytes,
71 int64 total_bytes,
72 const base::TimeDelta& estimated_remaining_time) override {
73 delegate_->OnProgressWithRemainingTime(
74 progress_type, received_bytes, total_bytes, estimated_remaining_time);
75 }
76
77 // BurnManager::Observer override.
78 virtual void OnProgress(ProgressType progress_type,
79 int64 received_bytes,
80 int64 total_bytes) override {
81 delegate_->OnProgress(progress_type, received_bytes, total_bytes);
82 }
83
84 // StateMachine::Observer interface.
85 virtual void OnBurnStateChanged(StateMachine::State state) override {
86 if (state != StateMachine::INITIAL && !working_) {
87 // User has started burn process, so let's start observing.
88 StartBurnImage(base::FilePath(), base::FilePath());
89 }
90 }
91
92 virtual void OnError(int error_message_id) override {
93 delegate_->OnFail(error_message_id);
94 working_ = false;
95 }
96
97 // BurnController override.
98 virtual void Init() override {
99 if (state_machine_->state() == StateMachine::BURNING) {
100 // There is nothing else left to do but observe burn progress.
101 burn_manager_->DoBurn();
102 } else if (state_machine_->state() != StateMachine::INITIAL) {
103 // User has started burn process, so let's start observing.
104 StartBurnImage(base::FilePath(), base::FilePath());
105 }
106 }
107
108 // BurnController override.
109 virtual std::vector<disks::DiskMountManager::Disk> GetBurnableDevices()
110 override {
111 // Now this is just a proxy to the BurnManager.
112 // TODO(hidehiko): Remove this method.
113 return burn_manager_->GetBurnableDevices();
114 }
115
116 // BurnController override.
117 virtual void CancelBurnImage() override {
118 burn_manager_->Cancel();
119 }
120
121 // BurnController override.
122 // May be called with empty values if there is a handler that has started
123 // burning, and thus set the target paths.
124 virtual void StartBurnImage(const base::FilePath& target_device_path,
125 const base::FilePath& target_file_path) override {
126 if (!target_device_path.empty() && !target_file_path.empty() &&
127 state_machine_->new_burn_posible()) {
128 if (!NetworkHandler::Get()->network_state_handler()->DefaultNetwork()) {
129 delegate_->OnNoNetwork();
130 return;
131 }
132 burn_manager_->set_target_device_path(target_device_path);
133 burn_manager_->set_target_file_path(target_file_path);
134 uint64 device_size = GetDeviceSize(
135 burn_manager_->target_device_path().value());
136 if (device_size < kMinDeviceSize) {
137 delegate_->OnDeviceTooSmall(device_size);
138 return;
139 }
140 }
141 if (working_)
142 return;
143 working_ = true;
144 // Send progress signal now so ui doesn't hang in intial state until we get
145 // config file
146 delegate_->OnProgress(DOWNLOADING, 0, 0);
147 if (burn_manager_->GetImageDir().empty()) {
148 burn_manager_->CreateImageDir();
149 } else {
150 burn_manager_->FetchConfigFile();
151 }
152 }
153
154 private:
155 int64 GetDeviceSize(const std::string& device_path) {
156 disks::DiskMountManager* disk_mount_manager =
157 disks::DiskMountManager::GetInstance();
158 const disks::DiskMountManager::Disk* disk =
159 disk_mount_manager->FindDiskBySourcePath(device_path);
160 return disk ? disk->total_size_in_bytes() : 0;
161 }
162
163 BurnManager* burn_manager_;
164 StateMachine* state_machine_;
165 bool working_;
166 BurnController::Delegate* delegate_;
167
168 DISALLOW_COPY_AND_ASSIGN(BurnControllerImpl);
169 };
170
171 } // namespace
172
173 // static
174 BurnController* BurnController::CreateBurnController(
175 content::WebContents* web_contents,
176 Delegate* delegate) {
177 return new BurnControllerImpl(delegate);
178 }
179
180 } // namespace imageburner
181 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/imageburner/burn_controller.h ('k') | chrome/browser/chromeos/imageburner/burn_device_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698