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

Side by Side Diff: trunk/src/chrome/browser/extensions/api/image_writer_private/operation.cc

Issue 175423004: Revert 252466 "In order to support writing on windows we need to..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 years, 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/file_util.h" 5 #include "base/file_util.h"
6 #include "base/files/file_enumerator.h" 6 #include "base/files/file_enumerator.h"
7 #include "base/threading/worker_pool.h" 7 #include "base/threading/worker_pool.h"
8 #include "chrome/browser/extensions/api/image_writer_private/error_messages.h" 8 #include "chrome/browser/extensions/api/image_writer_private/error_messages.h"
9 #include "chrome/browser/extensions/api/image_writer_private/operation.h" 9 #include "chrome/browser/extensions/api/image_writer_private/operation.h"
10 #include "chrome/browser/extensions/api/image_writer_private/operation_manager.h " 10 #include "chrome/browser/extensions/api/image_writer_private/operation_manager.h "
(...skipping 15 matching lines...) Expand all
26 Operation::Operation(base::WeakPtr<OperationManager> manager, 26 Operation::Operation(base::WeakPtr<OperationManager> manager,
27 const ExtensionId& extension_id, 27 const ExtensionId& extension_id,
28 const std::string& device_path) 28 const std::string& device_path)
29 : manager_(manager), 29 : manager_(manager),
30 extension_id_(extension_id), 30 extension_id_(extension_id),
31 #if defined(OS_WIN) 31 #if defined(OS_WIN)
32 device_path_(base::FilePath::FromUTF8Unsafe(device_path)), 32 device_path_(base::FilePath::FromUTF8Unsafe(device_path)),
33 #else 33 #else
34 device_path_(device_path), 34 device_path_(device_path),
35 #endif 35 #endif
36 #if defined(OS_LINUX) && !defined(CHROMEOS)
37 image_file_(base::kInvalidPlatformFileValue),
38 device_file_(base::kInvalidPlatformFileValue),
39 #endif
36 stage_(image_writer_api::STAGE_UNKNOWN), 40 stage_(image_writer_api::STAGE_UNKNOWN),
37 progress_(0) { 41 progress_(0) {
38 } 42 }
39 43
40 Operation::~Operation() {} 44 Operation::~Operation() {}
41 45
42 void Operation::Cancel() { 46 void Operation::Cancel() {
43 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 47 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
44 48
45 stage_ = image_writer_api::STAGE_NONE; 49 stage_ = image_writer_api::STAGE_NONE;
46 50
47 CleanUp(); 51 CleanUp();
48 } 52 }
49 53
50 void Operation::Abort() { 54 void Operation::Abort() {
51 Error(error::kAborted); 55 Error(error::kAborted);
52 } 56 }
53 57
54 int Operation::GetProgress() { 58 int Operation::GetProgress() {
55 return progress_; 59 return progress_;
56 } 60 }
57 61
58 image_writer_api::Stage Operation::GetStage() { 62 image_writer_api::Stage Operation::GetStage() {
59 return stage_; 63 return stage_;
60 } 64 }
61 65
62 #if !defined(OS_CHROMEOS)
63 void Operation::SetUtilityClientForTesting(
64 scoped_refptr<ImageWriterUtilityClient> client) {
65 image_writer_client_ = client;
66 }
67 #endif
68
69 void Operation::Start() { 66 void Operation::Start() {
70 #if defined(OS_CHROMEOS) 67 #if defined(OS_CHROMEOS)
71 if (!temp_dir_.CreateUniqueTempDirUnderPath( 68 if (!temp_dir_.CreateUniqueTempDirUnderPath(
72 base::FilePath(kChromeOSTempRoot))) { 69 base::FilePath(kChromeOSTempRoot))) {
73 #else 70 #else
74 if (!temp_dir_.CreateUniqueTempDir()) { 71 if (!temp_dir_.CreateUniqueTempDir()) {
75 #endif 72 #endif
76 Error(error::kTempDirError); 73 Error(error::kTempDirError);
77 return; 74 return;
78 } 75 }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 zip::ZipReader::EntryInfo* entry_info = zip_reader_.current_entry_info(); 110 zip::ZipReader::EntryInfo* entry_info = zip_reader_.current_entry_info();
114 if (entry_info) { 111 if (entry_info) {
115 image_path_ = temp_dir_.path().Append(entry_info->file_path().BaseName()); 112 image_path_ = temp_dir_.path().Append(entry_info->file_path().BaseName());
116 } else { 113 } else {
117 Error(error::kTempDirError); 114 Error(error::kTempDirError);
118 return; 115 return;
119 } 116 }
120 117
121 zip_reader_.ExtractCurrentEntryToFilePathAsync( 118 zip_reader_.ExtractCurrentEntryToFilePathAsync(
122 image_path_, 119 image_path_,
123 base::Bind(&Operation::CompleteAndContinue, this, continuation), 120 base::Bind(&Operation::OnUnzipSuccess, this, continuation),
124 base::Bind(&Operation::OnUnzipFailure, this), 121 base::Bind(&Operation::OnUnzipFailure, this),
125 base::Bind(&Operation::OnUnzipProgress, 122 base::Bind(&Operation::OnUnzipProgress,
126 this, 123 this,
127 zip_reader_.current_entry_info()->original_size())); 124 zip_reader_.current_entry_info()->original_size()));
128 } 125 }
129 126
130 void Operation::Finish() { 127 void Operation::Finish() {
131 if (!BrowserThread::CurrentlyOn(BrowserThread::FILE)) { 128 if (!BrowserThread::CurrentlyOn(BrowserThread::FILE)) {
132 BrowserThread::PostTask( 129 BrowserThread::PostTask(
133 BrowserThread::FILE, FROM_HERE, base::Bind(&Operation::Finish, this)); 130 BrowserThread::FILE, FROM_HERE, base::Bind(&Operation::Finish, this));
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 if (progress <= progress_) { 174 if (progress <= progress_) {
178 return; 175 return;
179 } 176 }
180 177
181 if (IsCancelled()) { 178 if (IsCancelled()) {
182 return; 179 return;
183 } 180 }
184 181
185 progress_ = progress; 182 progress_ = progress;
186 183
187 BrowserThread::PostTask(BrowserThread::UI, 184 BrowserThread::PostTask(
188 FROM_HERE, 185 BrowserThread::UI,
189 base::Bind(&OperationManager::OnProgress, 186 FROM_HERE,
190 manager_, 187 base::Bind(&OperationManager::OnProgress,
191 extension_id_, 188 manager_,
192 stage_, 189 extension_id_,
193 progress_)); 190 stage_,
191 progress_));
194 } 192 }
195 193
196 void Operation::SetStage(image_writer_api::Stage stage) { 194 void Operation::SetStage(image_writer_api::Stage stage) {
197 if (!BrowserThread::CurrentlyOn(BrowserThread::FILE)) { 195 if (!BrowserThread::CurrentlyOn(BrowserThread::FILE)) {
198 BrowserThread::PostTask( 196 BrowserThread::PostTask(
199 BrowserThread::FILE, 197 BrowserThread::FILE,
200 FROM_HERE, 198 FROM_HERE,
201 base::Bind(&Operation::SetStage, 199 base::Bind(&Operation::SetStage,
202 this, 200 this,
203 stage)); 201 stage));
(...skipping 21 matching lines...) Expand all
225 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 223 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
226 224
227 return stage_ == image_writer_api::STAGE_NONE; 225 return stage_ == image_writer_api::STAGE_NONE;
228 } 226 }
229 227
230 void Operation::AddCleanUpFunction(const base::Closure& callback) { 228 void Operation::AddCleanUpFunction(const base::Closure& callback) {
231 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 229 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
232 cleanup_functions_.push_back(callback); 230 cleanup_functions_.push_back(callback);
233 } 231 }
234 232
235 void Operation::CompleteAndContinue(const base::Closure& continuation) {
236 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
237 SetProgress(kProgressComplete);
238 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, continuation);
239 }
240
241 #if !defined(OS_CHROMEOS)
242 void Operation::StartUtilityClient() {
243 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
244 if (!image_writer_client_) {
245 image_writer_client_ = new ImageWriterUtilityClient();
246 AddCleanUpFunction(base::Bind(&Operation::StopUtilityClient, this));
247 }
248 }
249
250 void Operation::StopUtilityClient() {
251 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
252 BrowserThread::PostTask(
253 BrowserThread::IO,
254 FROM_HERE,
255 base::Bind(&ImageWriterUtilityClient::Shutdown, image_writer_client_));
256 }
257
258 void Operation::WriteImageProgress(int64 total_bytes, int64 curr_bytes) {
259 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
260 if (IsCancelled()) {
261 return;
262 }
263
264 int progress = kProgressComplete * curr_bytes / total_bytes;
265
266 if (progress > GetProgress()) {
267 SetProgress(progress);
268 }
269 }
270 #endif
271
272 void Operation::GetMD5SumOfFile( 233 void Operation::GetMD5SumOfFile(
273 const base::FilePath& file_path, 234 const base::FilePath& file_path,
274 int64 file_size, 235 int64 file_size,
275 int progress_offset, 236 int progress_offset,
276 int progress_scale, 237 int progress_scale,
277 const base::Callback<void(const std::string&)>& callback) { 238 const base::Callback<void(const std::string&)>& callback) {
278 if (IsCancelled()) { 239 if (IsCancelled()) {
279 return; 240 return;
280 } 241 }
281 242
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 // Skip closing the file. 319 // Skip closing the file.
359 return; 320 return;
360 } else { 321 } else {
361 // We didn't read the bytes we expected. 322 // We didn't read the bytes we expected.
362 Error(error::kHashReadError); 323 Error(error::kHashReadError);
363 } 324 }
364 } 325 }
365 base::ClosePlatformFile(file); 326 base::ClosePlatformFile(file);
366 } 327 }
367 328
329 void Operation::OnUnzipSuccess(const base::Closure& continuation) {
330 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
331 SetProgress(kProgressComplete);
332 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, continuation);
333 }
334
368 void Operation::OnUnzipFailure() { 335 void Operation::OnUnzipFailure() {
369 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 336 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
370 Error(error::kUnzipGenericError); 337 Error(error::kUnzipGenericError);
371 } 338 }
372 339
373 void Operation::OnUnzipProgress(int64 total_bytes, int64 progress_bytes) { 340 void Operation::OnUnzipProgress(int64 total_bytes, int64 progress_bytes) {
374 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 341 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
375 342
376 int progress_percent = kProgressComplete * progress_bytes / total_bytes; 343 int progress_percent = 100 * progress_bytes / total_bytes;
377 SetProgress(progress_percent); 344 SetProgress(progress_percent);
378 } 345 }
379 346
380 void Operation::CleanUp() { 347 void Operation::CleanUp() {
381 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 348 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
382 for (std::vector<base::Closure>::iterator it = cleanup_functions_.begin(); 349 for (std::vector<base::Closure>::iterator it = cleanup_functions_.begin();
383 it != cleanup_functions_.end(); 350 it != cleanup_functions_.end();
384 ++it) { 351 ++it) {
385 it->Run(); 352 it->Run();
386 } 353 }
387 cleanup_functions_.clear(); 354 cleanup_functions_.clear();
388 } 355 }
389 356
390 } // namespace image_writer 357 } // namespace image_writer
391 } // namespace extensions 358 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698