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 17namespace base { 18class FilePath; 19class SequencedTaskRunner; 20} // namespace base 21 22namespace google_apis { 23class ResourceEntry; 24} // namespace google_apis 25 26namespace drive { 27 28class FileChange; 29class ResourceEntry; 30 31namespace internal { 32class ResourceMetadata; 33} // namespace internal 34 35namespace file_system { 36 37class OperationDelegate; 38 39// This class encapsulates the drive Move function. It is responsible for 40// updating the local metadata entry. 41class MoveOperation { 42 public: 43 MoveOperation(base::SequencedTaskRunner* blocking_task_runner, 44 OperationDelegate* delegate, 45 internal::ResourceMetadata* metadata); 46 ~MoveOperation(); 47 48 // Performs the move operation on the file at drive path |src_file_path| 49 // with a target of |dest_file_path|. 50 // Invokes |callback| when finished with the result of the operation. 51 // |callback| must not be null. 52 void Move(const base::FilePath& src_file_path, 53 const base::FilePath& dest_file_path, 54 const FileOperationCallback& callback); 55 56 private: 57 // Part of Move(). Called after updating the local state. 58 void MoveAfterUpdateLocalState(const FileOperationCallback& callback, 59 const FileChange* changed_file, 60 const std::string* local_id, 61 FileError error); 62 63 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_; 64 OperationDelegate* delegate_; 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