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 #ifndef CHROME_BROWSER_CHROMEOS_DRIVE_FILE_SYSTEM_MOVE_OPERATION_H_ 6 #define CHROME_BROWSER_CHROMEOS_DRIVE_FILE_SYSTEM_MOVE_OPERATION_H_ 7 8 #include <set> 9 10 #include "base/basictypes.h" 11 #include "base/memory/ref_counted.h" 12 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/weak_ptr.h" 14 #include "chrome/browser/chromeos/drive/file_errors.h" 15 #include "google_apis/drive/gdata_errorcode.h" 16 17 namespace base { 18 class FilePath; 19 class SequencedTaskRunner; 20 } // namespace base 21 22 namespace google_apis { 23 class ResourceEntry; 24 } // namespace google_apis 25 26 namespace drive { 27 28 class ResourceEntry; 29 30 namespace internal { 31 class ResourceMetadata; 32 } // namespace internal 33 34 namespace file_system { 35 36 class OperationObserver; 37 38 // This class encapsulates the drive Move function. It is responsible for 39 // updating the local metadata entry. 40 class MoveOperation { 41 public: 42 MoveOperation(base::SequencedTaskRunner* blocking_task_runner, 43 OperationObserver* observer, 44 internal::ResourceMetadata* metadata); 45 ~MoveOperation(); 46 47 // Performs the move operation on the file at drive path |src_file_path| 48 // with a target of |dest_file_path|. 49 // Invokes |callback| when finished with the result of the operation. 50 // |callback| must not be null. 51 void Move(const base::FilePath& src_file_path, 52 const base::FilePath& dest_file_path, 53 const FileOperationCallback& callback); 54 55 private: 56 // Part of Move(). Called after updating the local state. 57 void MoveAfterUpdateLocalState( 58 const FileOperationCallback& callback, 59 const std::set<base::FilePath>* changed_directories, 60 const std::string* local_id, 61 FileError error); 62 63 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_; 64 OperationObserver* observer_; 65 internal::ResourceMetadata* metadata_; 66 67 // Note: This should remain the last member so it'll be destroyed and 68 // invalidate the weak pointers before any other members are destroyed. 69 base::WeakPtrFactory<MoveOperation> weak_ptr_factory_; 70 DISALLOW_COPY_AND_ASSIGN(MoveOperation); 71 }; 72 73 } // namespace file_system 74 } // namespace drive 75 76 #endif // CHROME_BROWSER_CHROMEOS_DRIVE_FILE_SYSTEM_MOVE_OPERATION_H_ 77