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

Side by Side Diff: webkit/browser/fileapi/copy_or_move_operation_delegate.cc

Issue 145303002: Convert Media Galleries to use base::File (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 11 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 (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 "webkit/browser/fileapi/copy_or_move_operation_delegate.h" 5 #include "webkit/browser/fileapi/copy_or_move_operation_delegate.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "net/base/io_buffer.h" 9 #include "net/base/io_buffer.h"
10 #include "net/base/net_errors.h" 10 #include "net/base/net_errors.h"
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 weak_factory_.GetWeakPtr(), callback)); 121 weak_factory_.GetWeakPtr(), callback));
122 } 122 }
123 123
124 virtual void Cancel() OVERRIDE { 124 virtual void Cancel() OVERRIDE {
125 cancel_requested_ = true; 125 cancel_requested_ = true;
126 } 126 }
127 127
128 private: 128 private:
129 void RunAfterCreateSnapshot( 129 void RunAfterCreateSnapshot(
130 const CopyOrMoveOperationDelegate::StatusCallback& callback, 130 const CopyOrMoveOperationDelegate::StatusCallback& callback,
131 base::PlatformFileError error, 131 base::File::Error error,
132 const base::PlatformFileInfo& file_info, 132 const base::File::Info& file_info,
133 const base::FilePath& platform_path, 133 const base::FilePath& platform_path,
134 const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref) { 134 const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref) {
135 if (cancel_requested_) 135 if (cancel_requested_)
136 error = base::PLATFORM_FILE_ERROR_ABORT; 136 error = base::File::FILE_ERROR_ABORT;
137 137
138 if (error != base::PLATFORM_FILE_OK) { 138 if (error != base::File::FILE_OK) {
139 callback.Run(error); 139 callback.Run(error);
140 return; 140 return;
141 } 141 }
142 142
143 // For now we assume CreateSnapshotFile always return a valid local file 143 // For now we assume CreateSnapshotFile always return a valid local file
144 // path. 144 // path.
145 DCHECK(!platform_path.empty()); 145 DCHECK(!platform_path.empty());
146 146
147 if (!validator_factory_) { 147 if (!validator_factory_) {
148 // No validation is needed. 148 // No validation is needed.
149 RunAfterPreWriteValidation(platform_path, file_info, file_ref, callback, 149 RunAfterPreWriteValidation(platform_path, file_info, file_ref, callback,
150 base::PLATFORM_FILE_OK); 150 base::File::FILE_OK);
151 return; 151 return;
152 } 152 }
153 153
154 // Run pre write validation. 154 // Run pre write validation.
155 PreWriteValidation( 155 PreWriteValidation(
156 platform_path, 156 platform_path,
157 base::Bind(&SnapshotCopyOrMoveImpl::RunAfterPreWriteValidation, 157 base::Bind(&SnapshotCopyOrMoveImpl::RunAfterPreWriteValidation,
158 weak_factory_.GetWeakPtr(), 158 weak_factory_.GetWeakPtr(),
159 platform_path, file_info, file_ref, callback)); 159 platform_path, file_info, file_ref, callback));
160 } 160 }
161 161
162 void RunAfterPreWriteValidation( 162 void RunAfterPreWriteValidation(
163 const base::FilePath& platform_path, 163 const base::FilePath& platform_path,
164 const base::PlatformFileInfo& file_info, 164 const base::File::Info& file_info,
165 const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref, 165 const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref,
166 const CopyOrMoveOperationDelegate::StatusCallback& callback, 166 const CopyOrMoveOperationDelegate::StatusCallback& callback,
167 base::PlatformFileError error) { 167 base::File::Error error) {
168 if (cancel_requested_) 168 if (cancel_requested_)
169 error = base::PLATFORM_FILE_ERROR_ABORT; 169 error = base::File::FILE_ERROR_ABORT;
170 170
171 if (error != base::PLATFORM_FILE_OK) { 171 if (error != base::File::FILE_OK) {
172 callback.Run(error); 172 callback.Run(error);
173 return; 173 return;
174 } 174 }
175 175
176 // |file_ref| is unused but necessary to keep the file alive until 176 // |file_ref| is unused but necessary to keep the file alive until
177 // CopyInForeignFile() is completed. 177 // CopyInForeignFile() is completed.
178 operation_runner_->CopyInForeignFile( 178 operation_runner_->CopyInForeignFile(
179 platform_path, dest_url_, 179 platform_path, dest_url_,
180 base::Bind(&SnapshotCopyOrMoveImpl::RunAfterCopyInForeignFile, 180 base::Bind(&SnapshotCopyOrMoveImpl::RunAfterCopyInForeignFile,
181 weak_factory_.GetWeakPtr(), file_info, file_ref, callback)); 181 weak_factory_.GetWeakPtr(), file_info, file_ref, callback));
182 } 182 }
183 183
184 void RunAfterCopyInForeignFile( 184 void RunAfterCopyInForeignFile(
185 const base::PlatformFileInfo& file_info, 185 const base::File::Info& file_info,
186 const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref, 186 const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref,
187 const CopyOrMoveOperationDelegate::StatusCallback& callback, 187 const CopyOrMoveOperationDelegate::StatusCallback& callback,
188 base::PlatformFileError error) { 188 base::File::Error error) {
189 if (cancel_requested_) 189 if (cancel_requested_)
190 error = base::PLATFORM_FILE_ERROR_ABORT; 190 error = base::File::FILE_ERROR_ABORT;
191 191
192 if (error != base::PLATFORM_FILE_OK) { 192 if (error != base::File::FILE_OK) {
193 callback.Run(error); 193 callback.Run(error);
194 return; 194 return;
195 } 195 }
196 196
197 file_progress_callback_.Run(file_info.size); 197 file_progress_callback_.Run(file_info.size);
198 198
199 if (option_ == FileSystemOperation::OPTION_NONE) { 199 if (option_ == FileSystemOperation::OPTION_NONE) {
200 RunAfterTouchFile(callback, base::PLATFORM_FILE_OK); 200 RunAfterTouchFile(callback, base::File::FILE_OK);
201 return; 201 return;
202 } 202 }
203 203
204 operation_runner_->TouchFile( 204 operation_runner_->TouchFile(
205 dest_url_, base::Time::Now() /* last_access */, 205 dest_url_, base::Time::Now() /* last_access */,
206 file_info.last_modified, 206 file_info.last_modified,
207 base::Bind(&SnapshotCopyOrMoveImpl::RunAfterTouchFile, 207 base::Bind(&SnapshotCopyOrMoveImpl::RunAfterTouchFile,
208 weak_factory_.GetWeakPtr(), callback)); 208 weak_factory_.GetWeakPtr(), callback));
209 } 209 }
210 210
211 void RunAfterTouchFile( 211 void RunAfterTouchFile(
212 const CopyOrMoveOperationDelegate::StatusCallback& callback, 212 const CopyOrMoveOperationDelegate::StatusCallback& callback,
213 base::PlatformFileError error) { 213 base::File::Error error) {
214 // Even if TouchFile is failed, just ignore it. 214 // Even if TouchFile is failed, just ignore it.
215 215
216 if (cancel_requested_) { 216 if (cancel_requested_) {
217 callback.Run(base::PLATFORM_FILE_ERROR_ABORT); 217 callback.Run(base::File::FILE_ERROR_ABORT);
218 return; 218 return;
219 } 219 }
220 220
221 // |validator_| is NULL when the destination filesystem does not do 221 // |validator_| is NULL when the destination filesystem does not do
222 // validation. 222 // validation.
223 if (!validator_) { 223 if (!validator_) {
224 // No validation is needed. 224 // No validation is needed.
225 RunAfterPostWriteValidation(callback, base::PLATFORM_FILE_OK); 225 RunAfterPostWriteValidation(callback, base::File::FILE_OK);
226 return; 226 return;
227 } 227 }
228 228
229 PostWriteValidation( 229 PostWriteValidation(
230 base::Bind(&SnapshotCopyOrMoveImpl::RunAfterPostWriteValidation, 230 base::Bind(&SnapshotCopyOrMoveImpl::RunAfterPostWriteValidation,
231 weak_factory_.GetWeakPtr(), callback)); 231 weak_factory_.GetWeakPtr(), callback));
232 } 232 }
233 233
234 void RunAfterPostWriteValidation( 234 void RunAfterPostWriteValidation(
235 const CopyOrMoveOperationDelegate::StatusCallback& callback, 235 const CopyOrMoveOperationDelegate::StatusCallback& callback,
236 base::PlatformFileError error) { 236 base::File::Error error) {
237 if (cancel_requested_) { 237 if (cancel_requested_) {
238 callback.Run(base::PLATFORM_FILE_ERROR_ABORT); 238 callback.Run(base::File::FILE_ERROR_ABORT);
239 return; 239 return;
240 } 240 }
241 241
242 if (error != base::PLATFORM_FILE_OK) { 242 if (error != base::File::FILE_OK) {
243 // Failed to validate. Remove the destination file. 243 // Failed to validate. Remove the destination file.
244 operation_runner_->Remove( 244 operation_runner_->Remove(
245 dest_url_, true /* recursive */, 245 dest_url_, true /* recursive */,
246 base::Bind(&SnapshotCopyOrMoveImpl::DidRemoveDestForError, 246 base::Bind(&SnapshotCopyOrMoveImpl::DidRemoveDestForError,
247 weak_factory_.GetWeakPtr(), error, callback)); 247 weak_factory_.GetWeakPtr(), error, callback));
248 return; 248 return;
249 } 249 }
250 250
251 if (operation_type_ == CopyOrMoveOperationDelegate::OPERATION_COPY) { 251 if (operation_type_ == CopyOrMoveOperationDelegate::OPERATION_COPY) {
252 callback.Run(base::PLATFORM_FILE_OK); 252 callback.Run(base::File::FILE_OK);
253 return; 253 return;
254 } 254 }
255 255
256 DCHECK_EQ(CopyOrMoveOperationDelegate::OPERATION_MOVE, operation_type_); 256 DCHECK_EQ(CopyOrMoveOperationDelegate::OPERATION_MOVE, operation_type_);
257 257
258 // Remove the source for finalizing move operation. 258 // Remove the source for finalizing move operation.
259 operation_runner_->Remove( 259 operation_runner_->Remove(
260 src_url_, true /* recursive */, 260 src_url_, true /* recursive */,
261 base::Bind(&SnapshotCopyOrMoveImpl::RunAfterRemoveSourceForMove, 261 base::Bind(&SnapshotCopyOrMoveImpl::RunAfterRemoveSourceForMove,
262 weak_factory_.GetWeakPtr(), callback)); 262 weak_factory_.GetWeakPtr(), callback));
263 } 263 }
264 264
265 void RunAfterRemoveSourceForMove( 265 void RunAfterRemoveSourceForMove(
266 const CopyOrMoveOperationDelegate::StatusCallback& callback, 266 const CopyOrMoveOperationDelegate::StatusCallback& callback,
267 base::PlatformFileError error) { 267 base::File::Error error) {
268 if (cancel_requested_) 268 if (cancel_requested_)
269 error = base::PLATFORM_FILE_ERROR_ABORT; 269 error = base::File::FILE_ERROR_ABORT;
270 270
271 if (error == base::PLATFORM_FILE_ERROR_NOT_FOUND) 271 if (error == base::File::FILE_ERROR_NOT_FOUND)
272 error = base::PLATFORM_FILE_OK; 272 error = base::File::FILE_OK;
273 callback.Run(error); 273 callback.Run(error);
274 } 274 }
275 275
276 void DidRemoveDestForError( 276 void DidRemoveDestForError(
277 base::PlatformFileError prior_error, 277 base::File::Error prior_error,
278 const CopyOrMoveOperationDelegate::StatusCallback& callback, 278 const CopyOrMoveOperationDelegate::StatusCallback& callback,
279 base::PlatformFileError error) { 279 base::File::Error error) {
280 if (error != base::PLATFORM_FILE_OK) { 280 if (error != base::File::FILE_OK) {
281 VLOG(1) << "Error removing destination file after validation error: " 281 VLOG(1) << "Error removing destination file after validation error: "
282 << error; 282 << error;
283 } 283 }
284 callback.Run(prior_error); 284 callback.Run(prior_error);
285 } 285 }
286 286
287 // Runs pre-write validation. 287 // Runs pre-write validation.
288 void PreWriteValidation( 288 void PreWriteValidation(
289 const base::FilePath& platform_path, 289 const base::FilePath& platform_path,
290 const CopyOrMoveOperationDelegate::StatusCallback& callback) { 290 const CopyOrMoveOperationDelegate::StatusCallback& callback) {
291 DCHECK(validator_factory_); 291 DCHECK(validator_factory_);
292 validator_.reset( 292 validator_.reset(
293 validator_factory_->CreateCopyOrMoveFileValidator( 293 validator_factory_->CreateCopyOrMoveFileValidator(
294 src_url_, platform_path)); 294 src_url_, platform_path));
295 validator_->StartPreWriteValidation(callback); 295 validator_->StartPreWriteValidation(callback);
296 } 296 }
297 297
298 // Runs post-write validation. 298 // Runs post-write validation.
299 void PostWriteValidation( 299 void PostWriteValidation(
300 const CopyOrMoveOperationDelegate::StatusCallback& callback) { 300 const CopyOrMoveOperationDelegate::StatusCallback& callback) {
301 operation_runner_->CreateSnapshotFile( 301 operation_runner_->CreateSnapshotFile(
302 dest_url_, 302 dest_url_,
303 base::Bind( 303 base::Bind(
304 &SnapshotCopyOrMoveImpl::PostWriteValidationAfterCreateSnapshotFile, 304 &SnapshotCopyOrMoveImpl::PostWriteValidationAfterCreateSnapshotFile,
305 weak_factory_.GetWeakPtr(), callback)); 305 weak_factory_.GetWeakPtr(), callback));
306 } 306 }
307 307
308 void PostWriteValidationAfterCreateSnapshotFile( 308 void PostWriteValidationAfterCreateSnapshotFile(
309 const CopyOrMoveOperationDelegate::StatusCallback& callback, 309 const CopyOrMoveOperationDelegate::StatusCallback& callback,
310 base::PlatformFileError error, 310 base::File::Error error,
311 const base::PlatformFileInfo& file_info, 311 const base::File::Info& file_info,
312 const base::FilePath& platform_path, 312 const base::FilePath& platform_path,
313 const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref) { 313 const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref) {
314 if (cancel_requested_) 314 if (cancel_requested_)
315 error = base::PLATFORM_FILE_ERROR_ABORT; 315 error = base::File::FILE_ERROR_ABORT;
316 316
317 if (error != base::PLATFORM_FILE_OK) { 317 if (error != base::File::FILE_OK) {
318 callback.Run(error); 318 callback.Run(error);
319 return; 319 return;
320 } 320 }
321 321
322 DCHECK(validator_); 322 DCHECK(validator_);
323 // Note: file_ref passed here to keep the file alive until after 323 // Note: file_ref passed here to keep the file alive until after
324 // the StartPostWriteValidation operation finishes. 324 // the StartPostWriteValidation operation finishes.
325 validator_->StartPostWriteValidation( 325 validator_->StartPostWriteValidation(
326 platform_path, 326 platform_path,
327 base::Bind(&SnapshotCopyOrMoveImpl::DidPostWriteValidation, 327 base::Bind(&SnapshotCopyOrMoveImpl::DidPostWriteValidation,
328 weak_factory_.GetWeakPtr(), file_ref, callback)); 328 weak_factory_.GetWeakPtr(), file_ref, callback));
329 } 329 }
330 330
331 // |file_ref| is unused; it is passed here to make sure the reference is 331 // |file_ref| is unused; it is passed here to make sure the reference is
332 // alive until after post-write validation is complete. 332 // alive until after post-write validation is complete.
333 void DidPostWriteValidation( 333 void DidPostWriteValidation(
334 const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref, 334 const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref,
335 const CopyOrMoveOperationDelegate::StatusCallback& callback, 335 const CopyOrMoveOperationDelegate::StatusCallback& callback,
336 base::PlatformFileError error) { 336 base::File::Error error) {
337 callback.Run(error); 337 callback.Run(error);
338 } 338 }
339 339
340 FileSystemOperationRunner* operation_runner_; 340 FileSystemOperationRunner* operation_runner_;
341 CopyOrMoveOperationDelegate::OperationType operation_type_; 341 CopyOrMoveOperationDelegate::OperationType operation_type_;
342 FileSystemURL src_url_; 342 FileSystemURL src_url_;
343 FileSystemURL dest_url_; 343 FileSystemURL dest_url_;
344 344
345 CopyOrMoveOperationDelegate::CopyOrMoveOption option_; 345 CopyOrMoveOperationDelegate::CopyOrMoveOption option_;
346 CopyOrMoveFileValidatorFactory* validator_factory_; 346 CopyOrMoveFileValidatorFactory* validator_factory_;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 399
400 virtual void Cancel() OVERRIDE { 400 virtual void Cancel() OVERRIDE {
401 cancel_requested_ = true; 401 cancel_requested_ = true;
402 if (copy_helper_) 402 if (copy_helper_)
403 copy_helper_->Cancel(); 403 copy_helper_->Cancel();
404 } 404 }
405 405
406 private: 406 private:
407 void RunAfterGetMetadataForSource( 407 void RunAfterGetMetadataForSource(
408 const CopyOrMoveOperationDelegate::StatusCallback& callback, 408 const CopyOrMoveOperationDelegate::StatusCallback& callback,
409 base::PlatformFileError error, 409 base::File::Error error,
410 const base::PlatformFileInfo& file_info) { 410 const base::File::Info& file_info) {
411 if (cancel_requested_) 411 if (cancel_requested_)
412 error = base::PLATFORM_FILE_ERROR_ABORT; 412 error = base::File::FILE_ERROR_ABORT;
413 413
414 if (error != base::PLATFORM_FILE_OK) { 414 if (error != base::File::FILE_OK) {
415 callback.Run(error); 415 callback.Run(error);
416 return; 416 return;
417 } 417 }
418 418
419 if (file_info.is_directory) { 419 if (file_info.is_directory) {
420 // If not a directory, failed with appropriate error code. 420 // If not a directory, failed with appropriate error code.
421 callback.Run(base::PLATFORM_FILE_ERROR_NOT_A_FILE); 421 callback.Run(base::File::FILE_ERROR_NOT_A_FILE);
422 return; 422 return;
423 } 423 }
424 424
425 // To use FileStreamWriter, we need to ensure the destination file exists. 425 // To use FileStreamWriter, we need to ensure the destination file exists.
426 operation_runner_->CreateFile( 426 operation_runner_->CreateFile(
427 dest_url_, false /* exclusive */, 427 dest_url_, false /* exclusive */,
428 base::Bind(&StreamCopyOrMoveImpl::RunAfterCreateFileForDestination, 428 base::Bind(&StreamCopyOrMoveImpl::RunAfterCreateFileForDestination,
429 weak_factory_.GetWeakPtr(), 429 weak_factory_.GetWeakPtr(),
430 callback, file_info.last_modified)); 430 callback, file_info.last_modified));
431 } 431 }
432 432
433 void RunAfterCreateFileForDestination( 433 void RunAfterCreateFileForDestination(
434 const CopyOrMoveOperationDelegate::StatusCallback& callback, 434 const CopyOrMoveOperationDelegate::StatusCallback& callback,
435 const base::Time& last_modified, 435 const base::Time& last_modified,
436 base::PlatformFileError error) { 436 base::File::Error error) {
437 if (cancel_requested_) 437 if (cancel_requested_)
438 error = base::PLATFORM_FILE_ERROR_ABORT; 438 error = base::File::FILE_ERROR_ABORT;
439 439
440 if (error != base::PLATFORM_FILE_OK) { 440 if (error != base::File::FILE_OK) {
441 callback.Run(error); 441 callback.Run(error);
442 return; 442 return;
443 } 443 }
444 444
445 const bool need_flush = dest_url_.mount_option().copy_sync_option() == 445 const bool need_flush = dest_url_.mount_option().copy_sync_option() ==
446 fileapi::COPY_SYNC_OPTION_SYNC; 446 fileapi::COPY_SYNC_OPTION_SYNC;
447 447
448 DCHECK(!copy_helper_); 448 DCHECK(!copy_helper_);
449 copy_helper_.reset( 449 copy_helper_.reset(
450 new CopyOrMoveOperationDelegate::StreamCopyHelper( 450 new CopyOrMoveOperationDelegate::StreamCopyHelper(
451 reader_.Pass(), writer_.Pass(), 451 reader_.Pass(), writer_.Pass(),
452 need_flush, 452 need_flush,
453 kReadBufferSize, 453 kReadBufferSize,
454 file_progress_callback_, 454 file_progress_callback_,
455 base::TimeDelta::FromMilliseconds( 455 base::TimeDelta::FromMilliseconds(
456 kMinProgressCallbackInvocationSpanInMilliseconds))); 456 kMinProgressCallbackInvocationSpanInMilliseconds)));
457 copy_helper_->Run( 457 copy_helper_->Run(
458 base::Bind(&StreamCopyOrMoveImpl::RunAfterStreamCopy, 458 base::Bind(&StreamCopyOrMoveImpl::RunAfterStreamCopy,
459 weak_factory_.GetWeakPtr(), callback, last_modified)); 459 weak_factory_.GetWeakPtr(), callback, last_modified));
460 } 460 }
461 461
462 void RunAfterStreamCopy( 462 void RunAfterStreamCopy(
463 const CopyOrMoveOperationDelegate::StatusCallback& callback, 463 const CopyOrMoveOperationDelegate::StatusCallback& callback,
464 const base::Time& last_modified, 464 const base::Time& last_modified,
465 base::PlatformFileError error) { 465 base::File::Error error) {
466 if (cancel_requested_) 466 if (cancel_requested_)
467 error = base::PLATFORM_FILE_ERROR_ABORT; 467 error = base::File::FILE_ERROR_ABORT;
468 468
469 if (error != base::PLATFORM_FILE_OK) { 469 if (error != base::File::FILE_OK) {
470 callback.Run(error); 470 callback.Run(error);
471 return; 471 return;
472 } 472 }
473 473
474 if (option_ == FileSystemOperation::OPTION_NONE) { 474 if (option_ == FileSystemOperation::OPTION_NONE) {
475 RunAfterTouchFile(callback, base::PLATFORM_FILE_OK); 475 RunAfterTouchFile(callback, base::File::FILE_OK);
476 return; 476 return;
477 } 477 }
478 478
479 operation_runner_->TouchFile( 479 operation_runner_->TouchFile(
480 dest_url_, base::Time::Now() /* last_access */, last_modified, 480 dest_url_, base::Time::Now() /* last_access */, last_modified,
481 base::Bind(&StreamCopyOrMoveImpl::RunAfterTouchFile, 481 base::Bind(&StreamCopyOrMoveImpl::RunAfterTouchFile,
482 weak_factory_.GetWeakPtr(), callback)); 482 weak_factory_.GetWeakPtr(), callback));
483 } 483 }
484 484
485 void RunAfterTouchFile( 485 void RunAfterTouchFile(
486 const CopyOrMoveOperationDelegate::StatusCallback& callback, 486 const CopyOrMoveOperationDelegate::StatusCallback& callback,
487 base::PlatformFileError error) { 487 base::File::Error error) {
488 // Even if TouchFile is failed, just ignore it. 488 // Even if TouchFile is failed, just ignore it.
489 if (cancel_requested_) { 489 if (cancel_requested_) {
490 callback.Run(base::PLATFORM_FILE_ERROR_ABORT); 490 callback.Run(base::File::FILE_ERROR_ABORT);
491 return; 491 return;
492 } 492 }
493 493
494 if (operation_type_ == CopyOrMoveOperationDelegate::OPERATION_COPY) { 494 if (operation_type_ == CopyOrMoveOperationDelegate::OPERATION_COPY) {
495 callback.Run(base::PLATFORM_FILE_OK); 495 callback.Run(base::File::FILE_OK);
496 return; 496 return;
497 } 497 }
498 498
499 DCHECK_EQ(CopyOrMoveOperationDelegate::OPERATION_MOVE, operation_type_); 499 DCHECK_EQ(CopyOrMoveOperationDelegate::OPERATION_MOVE, operation_type_);
500 500
501 // Remove the source for finalizing move operation. 501 // Remove the source for finalizing move operation.
502 operation_runner_->Remove( 502 operation_runner_->Remove(
503 src_url_, false /* recursive */, 503 src_url_, false /* recursive */,
504 base::Bind(&StreamCopyOrMoveImpl::RunAfterRemoveForMove, 504 base::Bind(&StreamCopyOrMoveImpl::RunAfterRemoveForMove,
505 weak_factory_.GetWeakPtr(), callback)); 505 weak_factory_.GetWeakPtr(), callback));
506 } 506 }
507 507
508 void RunAfterRemoveForMove( 508 void RunAfterRemoveForMove(
509 const CopyOrMoveOperationDelegate::StatusCallback& callback, 509 const CopyOrMoveOperationDelegate::StatusCallback& callback,
510 base::PlatformFileError error) { 510 base::File::Error error) {
511 if (cancel_requested_) 511 if (cancel_requested_)
512 error = base::PLATFORM_FILE_ERROR_ABORT; 512 error = base::File::FILE_ERROR_ABORT;
513 if (error == base::PLATFORM_FILE_ERROR_NOT_FOUND) 513 if (error == base::File::FILE_ERROR_NOT_FOUND)
514 error = base::PLATFORM_FILE_OK; 514 error = base::File::FILE_OK;
515 callback.Run(error); 515 callback.Run(error);
516 } 516 }
517 517
518 FileSystemOperationRunner* operation_runner_; 518 FileSystemOperationRunner* operation_runner_;
519 CopyOrMoveOperationDelegate::OperationType operation_type_; 519 CopyOrMoveOperationDelegate::OperationType operation_type_;
520 FileSystemURL src_url_; 520 FileSystemURL src_url_;
521 FileSystemURL dest_url_; 521 FileSystemURL dest_url_;
522 CopyOrMoveOperationDelegate::CopyOrMoveOption option_; 522 CopyOrMoveOperationDelegate::CopyOrMoveOption option_;
523 scoped_ptr<webkit_blob::FileStreamReader> reader_; 523 scoped_ptr<webkit_blob::FileStreamReader> reader_;
524 scoped_ptr<FileStreamWriter> writer_; 524 scoped_ptr<FileStreamWriter> writer_;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 io_buffer_.get(), io_buffer_->size(), 572 io_buffer_.get(), io_buffer_->size(),
573 base::Bind(&StreamCopyHelper::DidRead, 573 base::Bind(&StreamCopyHelper::DidRead,
574 weak_factory_.GetWeakPtr(), callback)); 574 weak_factory_.GetWeakPtr(), callback));
575 if (result != net::ERR_IO_PENDING) 575 if (result != net::ERR_IO_PENDING)
576 DidRead(callback, result); 576 DidRead(callback, result);
577 } 577 }
578 578
579 void CopyOrMoveOperationDelegate::StreamCopyHelper::DidRead( 579 void CopyOrMoveOperationDelegate::StreamCopyHelper::DidRead(
580 const StatusCallback& callback, int result) { 580 const StatusCallback& callback, int result) {
581 if (cancel_requested_) { 581 if (cancel_requested_) {
582 callback.Run(base::PLATFORM_FILE_ERROR_ABORT); 582 callback.Run(base::File::FILE_ERROR_ABORT);
583 return; 583 return;
584 } 584 }
585 585
586 if (result < 0) { 586 if (result < 0) {
587 callback.Run(NetErrorToPlatformFileError(result)); 587 callback.Run(NetErrorToFileError(result));
588 return; 588 return;
589 } 589 }
590 590
591 if (result == 0) { 591 if (result == 0) {
592 // Here is the EOF. 592 // Here is the EOF.
593 if (need_flush_) 593 if (need_flush_)
594 Flush(callback, true /* is_eof */); 594 Flush(callback, true /* is_eof */);
595 else 595 else
596 callback.Run(base::PLATFORM_FILE_OK); 596 callback.Run(base::File::FILE_OK);
597 return; 597 return;
598 } 598 }
599 599
600 Write(callback, new net::DrainableIOBuffer(io_buffer_.get(), result)); 600 Write(callback, new net::DrainableIOBuffer(io_buffer_.get(), result));
601 } 601 }
602 602
603 void CopyOrMoveOperationDelegate::StreamCopyHelper::Write( 603 void CopyOrMoveOperationDelegate::StreamCopyHelper::Write(
604 const StatusCallback& callback, 604 const StatusCallback& callback,
605 scoped_refptr<net::DrainableIOBuffer> buffer) { 605 scoped_refptr<net::DrainableIOBuffer> buffer) {
606 DCHECK_GT(buffer->BytesRemaining(), 0); 606 DCHECK_GT(buffer->BytesRemaining(), 0);
607 607
608 int result = writer_->Write( 608 int result = writer_->Write(
609 buffer.get(), buffer->BytesRemaining(), 609 buffer.get(), buffer->BytesRemaining(),
610 base::Bind(&StreamCopyHelper::DidWrite, 610 base::Bind(&StreamCopyHelper::DidWrite,
611 weak_factory_.GetWeakPtr(), callback, buffer)); 611 weak_factory_.GetWeakPtr(), callback, buffer));
612 if (result != net::ERR_IO_PENDING) 612 if (result != net::ERR_IO_PENDING)
613 DidWrite(callback, buffer, result); 613 DidWrite(callback, buffer, result);
614 } 614 }
615 615
616 void CopyOrMoveOperationDelegate::StreamCopyHelper::DidWrite( 616 void CopyOrMoveOperationDelegate::StreamCopyHelper::DidWrite(
617 const StatusCallback& callback, 617 const StatusCallback& callback,
618 scoped_refptr<net::DrainableIOBuffer> buffer, 618 scoped_refptr<net::DrainableIOBuffer> buffer,
619 int result) { 619 int result) {
620 if (cancel_requested_) { 620 if (cancel_requested_) {
621 callback.Run(base::PLATFORM_FILE_ERROR_ABORT); 621 callback.Run(base::File::FILE_ERROR_ABORT);
622 return; 622 return;
623 } 623 }
624 624
625 if (result < 0) { 625 if (result < 0) {
626 callback.Run(NetErrorToPlatformFileError(result)); 626 callback.Run(NetErrorToFileError(result));
627 return; 627 return;
628 } 628 }
629 629
630 buffer->DidConsume(result); 630 buffer->DidConsume(result);
631 num_copied_bytes_ += result; 631 num_copied_bytes_ += result;
632 632
633 // Check the elapsed time since last |file_progress_callback_| invocation. 633 // Check the elapsed time since last |file_progress_callback_| invocation.
634 base::Time now = base::Time::Now(); 634 base::Time now = base::Time::Now();
635 if (now - last_progress_callback_invocation_time_ >= 635 if (now - last_progress_callback_invocation_time_ >=
636 min_progress_callback_invocation_span_) { 636 min_progress_callback_invocation_span_) {
(...skipping 19 matching lines...) Expand all
656 int result = writer_->Flush( 656 int result = writer_->Flush(
657 base::Bind(&StreamCopyHelper::DidFlush, 657 base::Bind(&StreamCopyHelper::DidFlush,
658 weak_factory_.GetWeakPtr(), callback, is_eof)); 658 weak_factory_.GetWeakPtr(), callback, is_eof));
659 if (result != net::ERR_IO_PENDING) 659 if (result != net::ERR_IO_PENDING)
660 DidFlush(callback, is_eof, result); 660 DidFlush(callback, is_eof, result);
661 } 661 }
662 662
663 void CopyOrMoveOperationDelegate::StreamCopyHelper::DidFlush( 663 void CopyOrMoveOperationDelegate::StreamCopyHelper::DidFlush(
664 const StatusCallback& callback, bool is_eof, int result) { 664 const StatusCallback& callback, bool is_eof, int result) {
665 if (cancel_requested_) { 665 if (cancel_requested_) {
666 callback.Run(base::PLATFORM_FILE_ERROR_ABORT); 666 callback.Run(base::File::FILE_ERROR_ABORT);
667 return; 667 return;
668 } 668 }
669 669
670 previous_flush_offset_ = num_copied_bytes_; 670 previous_flush_offset_ = num_copied_bytes_;
671 if (is_eof) 671 if (is_eof)
672 callback.Run(NetErrorToPlatformFileError(result)); 672 callback.Run(NetErrorToFileError(result));
673 else 673 else
674 Read(callback); 674 Read(callback);
675 } 675 }
676 676
677 CopyOrMoveOperationDelegate::CopyOrMoveOperationDelegate( 677 CopyOrMoveOperationDelegate::CopyOrMoveOperationDelegate(
678 FileSystemContext* file_system_context, 678 FileSystemContext* file_system_context,
679 const FileSystemURL& src_root, 679 const FileSystemURL& src_root,
680 const FileSystemURL& dest_root, 680 const FileSystemURL& dest_root,
681 OperationType operation_type, 681 OperationType operation_type,
682 CopyOrMoveOption option, 682 CopyOrMoveOption option,
(...skipping 17 matching lines...) Expand all
700 void CopyOrMoveOperationDelegate::Run() { 700 void CopyOrMoveOperationDelegate::Run() {
701 // Not supported; this should never be called. 701 // Not supported; this should never be called.
702 NOTREACHED(); 702 NOTREACHED();
703 } 703 }
704 704
705 void CopyOrMoveOperationDelegate::RunRecursively() { 705 void CopyOrMoveOperationDelegate::RunRecursively() {
706 // Perform light-weight checks first. 706 // Perform light-weight checks first.
707 707
708 // It is an error to try to copy/move an entry into its child. 708 // It is an error to try to copy/move an entry into its child.
709 if (same_file_system_ && src_root_.path().IsParent(dest_root_.path())) { 709 if (same_file_system_ && src_root_.path().IsParent(dest_root_.path())) {
710 callback_.Run(base::PLATFORM_FILE_ERROR_INVALID_OPERATION); 710 callback_.Run(base::File::FILE_ERROR_INVALID_OPERATION);
711 return; 711 return;
712 } 712 }
713 713
714 if (same_file_system_ && src_root_.path() == dest_root_.path()) { 714 if (same_file_system_ && src_root_.path() == dest_root_.path()) {
715 // In JS API this should return error, but we return success because Pepper 715 // In JS API this should return error, but we return success because Pepper
716 // wants to return success and we have a code path that returns error in 716 // wants to return success and we have a code path that returns error in
717 // Blink for JS (http://crbug.com/329517). 717 // Blink for JS (http://crbug.com/329517).
718 callback_.Run(base::PLATFORM_FILE_OK); 718 callback_.Run(base::File::FILE_OK);
719 return; 719 return;
720 } 720 }
721 721
722 // Start to process the source directory recursively. 722 // Start to process the source directory recursively.
723 // TODO(kinuko): This could be too expensive for same_file_system_==true 723 // TODO(kinuko): This could be too expensive for same_file_system_==true
724 // and operation==MOVE case, probably we can just rename the root directory. 724 // and operation==MOVE case, probably we can just rename the root directory.
725 // http://crbug.com/172187 725 // http://crbug.com/172187
726 StartRecursiveOperation(src_root_, callback_); 726 StartRecursiveOperation(src_root_, callback_);
727 } 727 }
728 728
729 void CopyOrMoveOperationDelegate::ProcessFile( 729 void CopyOrMoveOperationDelegate::ProcessFile(
730 const FileSystemURL& src_url, 730 const FileSystemURL& src_url,
731 const StatusCallback& callback) { 731 const StatusCallback& callback) {
732 if (!progress_callback_.is_null()) { 732 if (!progress_callback_.is_null()) {
733 progress_callback_.Run( 733 progress_callback_.Run(
734 FileSystemOperation::BEGIN_COPY_ENTRY, src_url, FileSystemURL(), 0); 734 FileSystemOperation::BEGIN_COPY_ENTRY, src_url, FileSystemURL(), 0);
735 } 735 }
736 736
737 FileSystemURL dest_url = CreateDestURL(src_url); 737 FileSystemURL dest_url = CreateDestURL(src_url);
738 CopyOrMoveImpl* impl = NULL; 738 CopyOrMoveImpl* impl = NULL;
739 if (same_file_system_) { 739 if (same_file_system_) {
740 impl = new CopyOrMoveOnSameFileSystemImpl( 740 impl = new CopyOrMoveOnSameFileSystemImpl(
741 operation_runner(), operation_type_, src_url, dest_url, option_, 741 operation_runner(), operation_type_, src_url, dest_url, option_,
742 base::Bind(&CopyOrMoveOperationDelegate::OnCopyFileProgress, 742 base::Bind(&CopyOrMoveOperationDelegate::OnCopyFileProgress,
743 weak_factory_.GetWeakPtr(), src_url)); 743 weak_factory_.GetWeakPtr(), src_url));
744 } else { 744 } else {
745 // Cross filesystem case. 745 // Cross filesystem case.
746 base::PlatformFileError error = base::PLATFORM_FILE_ERROR_FAILED; 746 base::File::Error error = base::File::FILE_ERROR_FAILED;
747 CopyOrMoveFileValidatorFactory* validator_factory = 747 CopyOrMoveFileValidatorFactory* validator_factory =
748 file_system_context()->GetCopyOrMoveFileValidatorFactory( 748 file_system_context()->GetCopyOrMoveFileValidatorFactory(
749 dest_root_.type(), &error); 749 dest_root_.type(), &error);
750 if (error != base::PLATFORM_FILE_OK) { 750 if (error != base::File::FILE_OK) {
751 callback.Run(error); 751 callback.Run(error);
752 return; 752 return;
753 } 753 }
754 754
755 if (!validator_factory) { 755 if (!validator_factory) {
756 scoped_ptr<webkit_blob::FileStreamReader> reader = 756 scoped_ptr<webkit_blob::FileStreamReader> reader =
757 file_system_context()->CreateFileStreamReader( 757 file_system_context()->CreateFileStreamReader(
758 src_url, 0, base::Time()); 758 src_url, 0, base::Time());
759 scoped_ptr<FileStreamWriter> writer = 759 scoped_ptr<FileStreamWriter> writer =
760 file_system_context()->CreateFileStreamWriter(dest_url, 0); 760 file_system_context()->CreateFileStreamWriter(dest_url, 0);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
805 } 805 }
806 806
807 ProcessDirectoryInternal(src_url, CreateDestURL(src_url), callback); 807 ProcessDirectoryInternal(src_url, CreateDestURL(src_url), callback);
808 } 808 }
809 809
810 void CopyOrMoveOperationDelegate::PostProcessDirectory( 810 void CopyOrMoveOperationDelegate::PostProcessDirectory(
811 const FileSystemURL& src_url, 811 const FileSystemURL& src_url,
812 const StatusCallback& callback) { 812 const StatusCallback& callback) {
813 if (option_ == FileSystemOperation::OPTION_NONE) { 813 if (option_ == FileSystemOperation::OPTION_NONE) {
814 PostProcessDirectoryAfterTouchFile( 814 PostProcessDirectoryAfterTouchFile(
815 src_url, callback, base::PLATFORM_FILE_OK); 815 src_url, callback, base::File::FILE_OK);
816 return; 816 return;
817 } 817 }
818 818
819 operation_runner()->GetMetadata( 819 operation_runner()->GetMetadata(
820 src_url, 820 src_url,
821 base::Bind( 821 base::Bind(
822 &CopyOrMoveOperationDelegate::PostProcessDirectoryAfterGetMetadata, 822 &CopyOrMoveOperationDelegate::PostProcessDirectoryAfterGetMetadata,
823 weak_factory_.GetWeakPtr(), src_url, callback)); 823 weak_factory_.GetWeakPtr(), src_url, callback));
824 } 824 }
825 825
826 void CopyOrMoveOperationDelegate::OnCancel() { 826 void CopyOrMoveOperationDelegate::OnCancel() {
827 // Request to cancel all running Copy/Move file. 827 // Request to cancel all running Copy/Move file.
828 for (std::set<CopyOrMoveImpl*>::iterator iter = running_copy_set_.begin(); 828 for (std::set<CopyOrMoveImpl*>::iterator iter = running_copy_set_.begin();
829 iter != running_copy_set_.end(); ++iter) 829 iter != running_copy_set_.end(); ++iter)
830 (*iter)->Cancel(); 830 (*iter)->Cancel();
831 } 831 }
832 832
833 void CopyOrMoveOperationDelegate::DidCopyOrMoveFile( 833 void CopyOrMoveOperationDelegate::DidCopyOrMoveFile(
834 const FileSystemURL& src_url, 834 const FileSystemURL& src_url,
835 const FileSystemURL& dest_url, 835 const FileSystemURL& dest_url,
836 const StatusCallback& callback, 836 const StatusCallback& callback,
837 CopyOrMoveImpl* impl, 837 CopyOrMoveImpl* impl,
838 base::PlatformFileError error) { 838 base::File::Error error) {
839 running_copy_set_.erase(impl); 839 running_copy_set_.erase(impl);
840 delete impl; 840 delete impl;
841 841
842 if (!progress_callback_.is_null() && error == base::PLATFORM_FILE_OK) { 842 if (!progress_callback_.is_null() && error == base::File::FILE_OK) {
843 progress_callback_.Run( 843 progress_callback_.Run(
844 FileSystemOperation::END_COPY_ENTRY, src_url, dest_url, 0); 844 FileSystemOperation::END_COPY_ENTRY, src_url, dest_url, 0);
845 } 845 }
846 846
847 callback.Run(error); 847 callback.Run(error);
848 } 848 }
849 849
850 void CopyOrMoveOperationDelegate::DidTryRemoveDestRoot( 850 void CopyOrMoveOperationDelegate::DidTryRemoveDestRoot(
851 const StatusCallback& callback, 851 const StatusCallback& callback,
852 base::PlatformFileError error) { 852 base::File::Error error) {
853 if (error == base::PLATFORM_FILE_ERROR_NOT_A_DIRECTORY) { 853 if (error == base::File::FILE_ERROR_NOT_A_DIRECTORY) {
854 callback_.Run(base::PLATFORM_FILE_ERROR_INVALID_OPERATION); 854 callback_.Run(base::File::FILE_ERROR_INVALID_OPERATION);
855 return; 855 return;
856 } 856 }
857 if (error != base::PLATFORM_FILE_OK && 857 if (error != base::File::FILE_OK &&
858 error != base::PLATFORM_FILE_ERROR_NOT_FOUND) { 858 error != base::File::FILE_ERROR_NOT_FOUND) {
859 callback_.Run(error); 859 callback_.Run(error);
860 return; 860 return;
861 } 861 }
862 862
863 ProcessDirectoryInternal(src_root_, dest_root_, callback); 863 ProcessDirectoryInternal(src_root_, dest_root_, callback);
864 } 864 }
865 865
866 void CopyOrMoveOperationDelegate::ProcessDirectoryInternal( 866 void CopyOrMoveOperationDelegate::ProcessDirectoryInternal(
867 const FileSystemURL& src_url, 867 const FileSystemURL& src_url,
868 const FileSystemURL& dest_url, 868 const FileSystemURL& dest_url,
869 const StatusCallback& callback) { 869 const StatusCallback& callback) {
870 // If operation_type == Move we may need to record directories and 870 // If operation_type == Move we may need to record directories and
871 // restore directory timestamps in the end, though it may have 871 // restore directory timestamps in the end, though it may have
872 // negative performance impact. 872 // negative performance impact.
873 // See http://crbug.com/171284 for more details. 873 // See http://crbug.com/171284 for more details.
874 operation_runner()->CreateDirectory( 874 operation_runner()->CreateDirectory(
875 dest_url, false /* exclusive */, false /* recursive */, 875 dest_url, false /* exclusive */, false /* recursive */,
876 base::Bind(&CopyOrMoveOperationDelegate::DidCreateDirectory, 876 base::Bind(&CopyOrMoveOperationDelegate::DidCreateDirectory,
877 weak_factory_.GetWeakPtr(), src_url, dest_url, callback)); 877 weak_factory_.GetWeakPtr(), src_url, dest_url, callback));
878 } 878 }
879 879
880 void CopyOrMoveOperationDelegate::DidCreateDirectory( 880 void CopyOrMoveOperationDelegate::DidCreateDirectory(
881 const FileSystemURL& src_url, 881 const FileSystemURL& src_url,
882 const FileSystemURL& dest_url, 882 const FileSystemURL& dest_url,
883 const StatusCallback& callback, 883 const StatusCallback& callback,
884 base::PlatformFileError error) { 884 base::File::Error error) {
885 if (!progress_callback_.is_null() && error == base::PLATFORM_FILE_OK) { 885 if (!progress_callback_.is_null() && error == base::File::FILE_OK) {
886 progress_callback_.Run( 886 progress_callback_.Run(
887 FileSystemOperation::END_COPY_ENTRY, src_url, dest_url, 0); 887 FileSystemOperation::END_COPY_ENTRY, src_url, dest_url, 0);
888 } 888 }
889 889
890 callback.Run(error); 890 callback.Run(error);
891 } 891 }
892 892
893 void CopyOrMoveOperationDelegate::PostProcessDirectoryAfterGetMetadata( 893 void CopyOrMoveOperationDelegate::PostProcessDirectoryAfterGetMetadata(
894 const FileSystemURL& src_url, 894 const FileSystemURL& src_url,
895 const StatusCallback& callback, 895 const StatusCallback& callback,
896 base::PlatformFileError error, 896 base::File::Error error,
897 const base::PlatformFileInfo& file_info) { 897 const base::File::Info& file_info) {
898 if (error != base::PLATFORM_FILE_OK) { 898 if (error != base::File::FILE_OK) {
899 // Ignore the error, and run post process which should run after TouchFile. 899 // Ignore the error, and run post process which should run after TouchFile.
900 PostProcessDirectoryAfterTouchFile( 900 PostProcessDirectoryAfterTouchFile(
901 src_url, callback, base::PLATFORM_FILE_OK); 901 src_url, callback, base::File::FILE_OK);
902 return; 902 return;
903 } 903 }
904 904
905 operation_runner()->TouchFile( 905 operation_runner()->TouchFile(
906 CreateDestURL(src_url), base::Time::Now() /* last access */, 906 CreateDestURL(src_url), base::Time::Now() /* last access */,
907 file_info.last_modified, 907 file_info.last_modified,
908 base::Bind( 908 base::Bind(
909 &CopyOrMoveOperationDelegate::PostProcessDirectoryAfterTouchFile, 909 &CopyOrMoveOperationDelegate::PostProcessDirectoryAfterTouchFile,
910 weak_factory_.GetWeakPtr(), src_url, callback)); 910 weak_factory_.GetWeakPtr(), src_url, callback));
911 } 911 }
912 912
913 void CopyOrMoveOperationDelegate::PostProcessDirectoryAfterTouchFile( 913 void CopyOrMoveOperationDelegate::PostProcessDirectoryAfterTouchFile(
914 const FileSystemURL& src_url, 914 const FileSystemURL& src_url,
915 const StatusCallback& callback, 915 const StatusCallback& callback,
916 base::PlatformFileError error) { 916 base::File::Error error) {
917 // Even if the TouchFile is failed, just ignore it. 917 // Even if the TouchFile is failed, just ignore it.
918 918
919 if (operation_type_ == OPERATION_COPY) { 919 if (operation_type_ == OPERATION_COPY) {
920 callback.Run(base::PLATFORM_FILE_OK); 920 callback.Run(base::File::FILE_OK);
921 return; 921 return;
922 } 922 }
923 923
924 DCHECK_EQ(OPERATION_MOVE, operation_type_); 924 DCHECK_EQ(OPERATION_MOVE, operation_type_);
925 925
926 // All files and subdirectories in the directory should be moved here, 926 // All files and subdirectories in the directory should be moved here,
927 // so remove the source directory for finalizing move operation. 927 // so remove the source directory for finalizing move operation.
928 operation_runner()->Remove( 928 operation_runner()->Remove(
929 src_url, false /* recursive */, 929 src_url, false /* recursive */,
930 base::Bind(&CopyOrMoveOperationDelegate::DidRemoveSourceForMove, 930 base::Bind(&CopyOrMoveOperationDelegate::DidRemoveSourceForMove,
931 weak_factory_.GetWeakPtr(), callback)); 931 weak_factory_.GetWeakPtr(), callback));
932 } 932 }
933 933
934 void CopyOrMoveOperationDelegate::DidRemoveSourceForMove( 934 void CopyOrMoveOperationDelegate::DidRemoveSourceForMove(
935 const StatusCallback& callback, 935 const StatusCallback& callback,
936 base::PlatformFileError error) { 936 base::File::Error error) {
937 if (error == base::PLATFORM_FILE_ERROR_NOT_FOUND) 937 if (error == base::File::FILE_ERROR_NOT_FOUND)
938 error = base::PLATFORM_FILE_OK; 938 error = base::File::FILE_OK;
939 callback.Run(error); 939 callback.Run(error);
940 } 940 }
941 941
942 void CopyOrMoveOperationDelegate::OnCopyFileProgress( 942 void CopyOrMoveOperationDelegate::OnCopyFileProgress(
943 const FileSystemURL& src_url, int64 size) { 943 const FileSystemURL& src_url, int64 size) {
944 if (!progress_callback_.is_null()) { 944 if (!progress_callback_.is_null()) {
945 progress_callback_.Run( 945 progress_callback_.Run(
946 FileSystemOperation::PROGRESS, src_url, FileSystemURL(), size); 946 FileSystemOperation::PROGRESS, src_url, FileSystemURL(), size);
947 } 947 }
948 } 948 }
949 949
950 FileSystemURL CopyOrMoveOperationDelegate::CreateDestURL( 950 FileSystemURL CopyOrMoveOperationDelegate::CreateDestURL(
951 const FileSystemURL& src_url) const { 951 const FileSystemURL& src_url) const {
952 DCHECK_EQ(src_root_.type(), src_url.type()); 952 DCHECK_EQ(src_root_.type(), src_url.type());
953 DCHECK_EQ(src_root_.origin(), src_url.origin()); 953 DCHECK_EQ(src_root_.origin(), src_url.origin());
954 954
955 base::FilePath relative = dest_root_.virtual_path(); 955 base::FilePath relative = dest_root_.virtual_path();
956 src_root_.virtual_path().AppendRelativePath(src_url.virtual_path(), 956 src_root_.virtual_path().AppendRelativePath(src_url.virtual_path(),
957 &relative); 957 &relative);
958 return file_system_context()->CreateCrackedFileSystemURL( 958 return file_system_context()->CreateCrackedFileSystemURL(
959 dest_root_.origin(), 959 dest_root_.origin(),
960 dest_root_.mount_type(), 960 dest_root_.mount_type(),
961 relative); 961 relative);
962 } 962 }
963 963
964 } // namespace fileapi 964 } // namespace fileapi
OLDNEW
« no previous file with comments | « webkit/browser/fileapi/copy_or_move_operation_delegate.h ('k') | webkit/browser/fileapi/dragged_file_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698