OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 #ifndef CHROME_BROWSER_CHROMEOS_DRIVE_FILE_SYSTEM_MOVE_OPERATION_H_ | 5 #ifndef CHROME_BROWSER_CHROMEOS_DRIVE_FILE_SYSTEM_MOVE_OPERATION_H_ |
6 #define CHROME_BROWSER_CHROMEOS_DRIVE_FILE_SYSTEM_MOVE_OPERATION_H_ | 6 #define CHROME_BROWSER_CHROMEOS_DRIVE_FILE_SYSTEM_MOVE_OPERATION_H_ |
7 | 7 |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/memory/weak_ptr.h" | 10 #include "base/memory/weak_ptr.h" |
11 #include "chrome/browser/chromeos/drive/drive_resource_metadata.h" | 11 #include "chrome/browser/chromeos/drive/drive_resource_metadata.h" |
12 #include "chrome/browser/google_apis/gdata_errorcode.h" | 12 #include "chrome/browser/google_apis/gdata_errorcode.h" |
13 | 13 |
| 14 class GURL; |
| 15 |
| 16 namespace base { |
14 class FilePath; | 17 class FilePath; |
15 class GURL; | 18 } |
16 | 19 |
17 namespace drive { | 20 namespace drive { |
18 | 21 |
19 class DriveCache; | 22 class DriveCache; |
20 class DriveEntryProto; | 23 class DriveEntryProto; |
21 class DriveResourceMetadata; | 24 class DriveResourceMetadata; |
22 class DriveScheduler; | 25 class DriveScheduler; |
23 | 26 |
24 namespace file_system { | 27 namespace file_system { |
25 | 28 |
26 class OperationObserver; | 29 class OperationObserver; |
27 | 30 |
28 // This class encapsulates the drive Move function. It is responsible for | 31 // This class encapsulates the drive Move function. It is responsible for |
29 // sending the request to the drive API, then updating the local state and | 32 // sending the request to the drive API, then updating the local state and |
30 // metadata to reflect the new state. | 33 // metadata to reflect the new state. |
31 class MoveOperation { | 34 class MoveOperation { |
32 public: | 35 public: |
33 MoveOperation(DriveScheduler* drive_scheduler, | 36 MoveOperation(DriveScheduler* drive_scheduler, |
34 DriveResourceMetadata* metadata, | 37 DriveResourceMetadata* metadata, |
35 OperationObserver* observer); | 38 OperationObserver* observer); |
36 virtual ~MoveOperation(); | 39 virtual ~MoveOperation(); |
37 | 40 |
38 // Performs the move operation on the file at drive path |src_file_path| | 41 // Performs the move operation on the file at drive path |src_file_path| |
39 // with a target of |dest_file_path|. Invokes |callback| when finished with | 42 // with a target of |dest_file_path|. Invokes |callback| when finished with |
40 // the result of the operation. |callback| must not be null. | 43 // the result of the operation. |callback| must not be null. |
41 virtual void Move(const FilePath& src_file_path, | 44 virtual void Move(const base::FilePath& src_file_path, |
42 const FilePath& dest_file_path, | 45 const base::FilePath& dest_file_path, |
43 const FileOperationCallback& callback); | 46 const FileOperationCallback& callback); |
44 private: | 47 private: |
45 // Part of Move(). Called after GetEntryInfoPairByPaths() is | 48 // Part of Move(). Called after GetEntryInfoPairByPaths() is |
46 // complete. |callback| must not be null. | 49 // complete. |callback| must not be null. |
47 void MoveAfterGetEntryInfoPair( | 50 void MoveAfterGetEntryInfoPair( |
48 const FilePath& dest_file_path, | 51 const base::FilePath& dest_file_path, |
49 const FileOperationCallback& callback, | 52 const FileOperationCallback& callback, |
50 scoped_ptr<EntryInfoPairResult> result); | 53 scoped_ptr<EntryInfoPairResult> result); |
51 | 54 |
52 // A pass-through callback used for bridging from | 55 // A pass-through callback used for bridging from |
53 // FileMoveCallback to FileOperationCallback. | 56 // FileMoveCallback to FileOperationCallback. |
54 void OnFilePathUpdated(const FileOperationCallback& cllback, | 57 void OnFilePathUpdated(const FileOperationCallback& cllback, |
55 DriveFileError error, | 58 DriveFileError error, |
56 const FilePath& file_path); | 59 const base::FilePath& file_path); |
57 | 60 |
58 // Renames a file or directory at |file_path| to |new_name| in the same | 61 // Renames a file or directory at |file_path| to |new_name| in the same |
59 // directory. |callback| will receive the new file path if the operation is | 62 // directory. |callback| will receive the new file path if the operation is |
60 // successful. If the new name already exists in the same directory, the file | 63 // successful. If the new name already exists in the same directory, the file |
61 // name is uniquified by adding a parenthesized serial number like | 64 // name is uniquified by adding a parenthesized serial number like |
62 // "foo (2).txt" | 65 // "foo (2).txt" |
63 // | 66 // |
64 // Can be called from UI thread. |callback| is run on the calling thread. | 67 // Can be called from UI thread. |callback| is run on the calling thread. |
65 // |callback| must not be null. | 68 // |callback| must not be null. |
66 void Rename(const FilePath& file_path, | 69 void Rename(const base::FilePath& file_path, |
67 const FilePath::StringType& new_name, | 70 const base::FilePath::StringType& new_name, |
68 const FileMoveCallback& callback); | 71 const FileMoveCallback& callback); |
69 | 72 |
70 // Part of Rename(). Called after GetEntryInfoByPath() is complete. | 73 // Part of Rename(). Called after GetEntryInfoByPath() is complete. |
71 // |callback| must not be null. | 74 // |callback| must not be null. |
72 void RenameAfterGetEntryInfo(const FilePath& file_path, | 75 void RenameAfterGetEntryInfo(const base::FilePath& file_path, |
73 const FilePath::StringType& new_name, | 76 const base::FilePath::StringType& new_name, |
74 const FileMoveCallback& callback, | 77 const FileMoveCallback& callback, |
75 DriveFileError error, | 78 DriveFileError error, |
76 scoped_ptr<DriveEntryProto> entry_proto); | 79 scoped_ptr<DriveEntryProto> entry_proto); |
77 | 80 |
78 // Callback for handling resource rename attempt. Renames a file or | 81 // Callback for handling resource rename attempt. Renames a file or |
79 // directory at |file_path| on the client side. | 82 // directory at |file_path| on the client side. |
80 // |callback| must not be null. | 83 // |callback| must not be null. |
81 void RenameEntryLocally(const FilePath& file_path, | 84 void RenameEntryLocally(const base::FilePath& file_path, |
82 const FilePath::StringType& new_name, | 85 const base::FilePath::StringType& new_name, |
83 const FileMoveCallback& callback, | 86 const FileMoveCallback& callback, |
84 google_apis::GDataErrorCode status); | 87 google_apis::GDataErrorCode status); |
85 | 88 |
86 // Removes a file or directory at |file_path| from the current directory. | 89 // Removes a file or directory at |file_path| from the current directory. |
87 // It moves the entry to a dangle, no-parent state on the server side. | 90 // It moves the entry to a dangle, no-parent state on the server side. |
88 // | 91 // |
89 // Can be called from UI thread. |callback| is run on the calling thread. | 92 // Can be called from UI thread. |callback| is run on the calling thread. |
90 // |callback| must not be null. | 93 // |callback| must not be null. |
91 void RemoveEntryFromDirectory(const FileMoveCallback& callback, | 94 void RemoveEntryFromDirectory(const FileMoveCallback& callback, |
92 DriveFileError error, | 95 DriveFileError error, |
93 const FilePath& file_path); | 96 const base::FilePath& file_path); |
94 | 97 |
95 // Part of RemoveEntryFromDirectory(). Called after | 98 // Part of RemoveEntryFromDirectory(). Called after |
96 // GetEntryInfoPairByPaths() is complete. |callback| must not be null. | 99 // GetEntryInfoPairByPaths() is complete. |callback| must not be null. |
97 void RemoveEntryFromDirectoryAfterEntryInfoPair( | 100 void RemoveEntryFromDirectoryAfterEntryInfoPair( |
98 const FileMoveCallback& callback, | 101 const FileMoveCallback& callback, |
99 scoped_ptr<EntryInfoPairResult> result); | 102 scoped_ptr<EntryInfoPairResult> result); |
100 | 103 |
101 // Moves a file or directory at |file_path| to another directory at | 104 // Moves a file or directory at |file_path| to another directory at |
102 // |dir_path|. | 105 // |dir_path|. |
103 // | 106 // |
104 // Can be called from UI thread. |callback| is run on the calling thread. | 107 // Can be called from UI thread. |callback| is run on the calling thread. |
105 // |callback| must not be null. | 108 // |callback| must not be null. |
106 void AddEntryToDirectory(const FilePath& directory_path, | 109 void AddEntryToDirectory(const base::FilePath& directory_path, |
107 const FileOperationCallback& callback, | 110 const FileOperationCallback& callback, |
108 DriveFileError error, | 111 DriveFileError error, |
109 const FilePath& file_path); | 112 const base::FilePath& file_path); |
110 | 113 |
111 // Part of AddEntryToDirectory(). Called after | 114 // Part of AddEntryToDirectory(). Called after |
112 // GetEntryInfoPairByPaths() is complete. |callback| must not be null. | 115 // GetEntryInfoPairByPaths() is complete. |callback| must not be null. |
113 void AddEntryToDirectoryAfterGetEntryInfoPair( | 116 void AddEntryToDirectoryAfterGetEntryInfoPair( |
114 const FileOperationCallback& callback, | 117 const FileOperationCallback& callback, |
115 scoped_ptr<EntryInfoPairResult> result); | 118 scoped_ptr<EntryInfoPairResult> result); |
116 | 119 |
117 // Moves entry specified by |file_path| to the directory specified by | 120 // Moves entry specified by |file_path| to the directory specified by |
118 // |dir_path| and calls |callback| asynchronously. | 121 // |dir_path| and calls |callback| asynchronously. |
119 // |callback| must not be null. | 122 // |callback| must not be null. |
120 void MoveEntryToDirectory(const FilePath& file_path, | 123 void MoveEntryToDirectory(const base::FilePath& file_path, |
121 const FilePath& directory_path, | 124 const base::FilePath& directory_path, |
122 const FileMoveCallback& callback, | 125 const FileMoveCallback& callback, |
123 google_apis::GDataErrorCode status); | 126 google_apis::GDataErrorCode status); |
124 | 127 |
125 // Callback when an entry is moved to another directory on the client side. | 128 // Callback when an entry is moved to another directory on the client side. |
126 // Notifies the directory change and runs |callback|. | 129 // Notifies the directory change and runs |callback|. |
127 // |callback| must not be null. | 130 // |callback| must not be null. |
128 void NotifyAndRunFileOperationCallback( | 131 void NotifyAndRunFileOperationCallback( |
129 const FileOperationCallback& callback, | 132 const FileOperationCallback& callback, |
130 DriveFileError error, | 133 DriveFileError error, |
131 const FilePath& moved_file_path); | 134 const base::FilePath& moved_file_path); |
132 | 135 |
133 // Callback when an entry is moved to another directory on the client side. | 136 // Callback when an entry is moved to another directory on the client side. |
134 // Notifies the directory change and runs |callback|. | 137 // Notifies the directory change and runs |callback|. |
135 // |callback| must not be null. | 138 // |callback| must not be null. |
136 void NotifyAndRunFileMoveCallback( | 139 void NotifyAndRunFileMoveCallback( |
137 const FileMoveCallback& callback, | 140 const FileMoveCallback& callback, |
138 DriveFileError error, | 141 DriveFileError error, |
139 const FilePath& moved_file_path); | 142 const base::FilePath& moved_file_path); |
140 | 143 |
141 DriveScheduler* drive_scheduler_; | 144 DriveScheduler* drive_scheduler_; |
142 DriveResourceMetadata* metadata_; | 145 DriveResourceMetadata* metadata_; |
143 OperationObserver* observer_; | 146 OperationObserver* observer_; |
144 | 147 |
145 // WeakPtrFactory bound to the UI thread. | 148 // WeakPtrFactory bound to the UI thread. |
146 // Note: This should remain the last member so it'll be destroyed and | 149 // Note: This should remain the last member so it'll be destroyed and |
147 // invalidate the weak pointers before any other members are destroyed. | 150 // invalidate the weak pointers before any other members are destroyed. |
148 base::WeakPtrFactory<MoveOperation> weak_ptr_factory_; | 151 base::WeakPtrFactory<MoveOperation> weak_ptr_factory_; |
149 | 152 |
150 DISALLOW_COPY_AND_ASSIGN(MoveOperation); | 153 DISALLOW_COPY_AND_ASSIGN(MoveOperation); |
151 }; | 154 }; |
152 | 155 |
153 } // namespace file_system | 156 } // namespace file_system |
154 } // namespace drive | 157 } // namespace drive |
155 | 158 |
156 #endif // CHROME_BROWSER_CHROMEOS_DRIVE_FILE_SYSTEM_MOVE_OPERATION_H_ | 159 #endif // CHROME_BROWSER_CHROMEOS_DRIVE_FILE_SYSTEM_MOVE_OPERATION_H_ |
OLD | NEW |