Home | History | Annotate | Download | only in file_system
      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