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

Side by Side Diff: chrome/browser/chromeos/drive/file_system/remove_operation.cc

Issue 59423002: drive: Simplify RemoveOperation with ResourceEntry::local_id (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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
« no previous file with comments | « chrome/browser/chromeos/drive/file_system/remove_operation.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "chrome/browser/chromeos/drive/file_system/remove_operation.h" 5 #include "chrome/browser/chromeos/drive/file_system/remove_operation.h"
6 6
7 #include "base/sequenced_task_runner.h" 7 #include "base/sequenced_task_runner.h"
8 #include "chrome/browser/chromeos/drive/drive.pb.h" 8 #include "chrome/browser/chromeos/drive/drive.pb.h"
9 #include "chrome/browser/chromeos/drive/file_cache.h" 9 #include "chrome/browser/chromeos/drive/file_cache.h"
10 #include "chrome/browser/chromeos/drive/file_system/operation_observer.h" 10 #include "chrome/browser/chromeos/drive/file_system/operation_observer.h"
11 #include "chrome/browser/chromeos/drive/file_system_util.h" 11 #include "chrome/browser/chromeos/drive/file_system_util.h"
12 #include "chrome/browser/chromeos/drive/job_scheduler.h" 12 #include "chrome/browser/chromeos/drive/job_scheduler.h"
13 #include "content/public/browser/browser_thread.h" 13 #include "content/public/browser/browser_thread.h"
14 14
15 using content::BrowserThread; 15 using content::BrowserThread;
16 16
17 namespace drive { 17 namespace drive {
18 namespace file_system { 18 namespace file_system {
19 19
20 namespace { 20 namespace {
21 21
22 // Checks local metadata state before requesting remote delete. 22 // Checks local metadata state before requesting remote delete.
23 // |parent_resource_id| is set to the resource ID of the parent directory of 23 // |parent_resource_id| is set to the resource ID of the parent directory of
24 // |path|. If it is a special folder like drive/other, empty string is set. 24 // |path|. If it is a special folder like drive/other, empty string is set.
25 // |local_id| is set to the local ID of the entry located at |path|.
26 // |entry| is the resource entry for the |path|. 25 // |entry| is the resource entry for the |path|.
27 FileError CheckLocalState(internal::ResourceMetadata* metadata, 26 FileError CheckLocalState(internal::ResourceMetadata* metadata,
28 const base::FilePath& path, 27 const base::FilePath& path,
29 bool is_recursive, 28 bool is_recursive,
30 std::string* parent_resource_id, 29 std::string* parent_resource_id,
31 std::string* local_id,
32 ResourceEntry* entry) { 30 ResourceEntry* entry) {
33 FileError error = metadata->GetIdByPath(path, local_id); 31 std::string local_id;
32 FileError error = metadata->GetIdByPath(path, &local_id);
34 if (error != FILE_ERROR_OK) 33 if (error != FILE_ERROR_OK)
35 return error; 34 return error;
36 35
37 error = metadata->GetResourceEntryById(*local_id, entry); 36 error = metadata->GetResourceEntryById(local_id, entry);
38 if (error != FILE_ERROR_OK) 37 if (error != FILE_ERROR_OK)
39 return error; 38 return error;
40 39
41 if (entry->file_info().is_directory() && !is_recursive) { 40 if (entry->file_info().is_directory() && !is_recursive) {
42 // Check emptiness of the directory. 41 // Check emptiness of the directory.
43 ResourceEntryVector entries; 42 ResourceEntryVector entries;
44 error = metadata->ReadDirectoryByPath(path, &entries); 43 error = metadata->ReadDirectoryByPath(path, &entries);
45 if (error != FILE_ERROR_OK) 44 if (error != FILE_ERROR_OK)
46 return error; 45 return error;
47 if (!entries.empty()) 46 if (!entries.empty())
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 115 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
117 } 116 }
118 117
119 void RemoveOperation::Remove(const base::FilePath& path, 118 void RemoveOperation::Remove(const base::FilePath& path,
120 bool is_recursive, 119 bool is_recursive,
121 const FileOperationCallback& callback) { 120 const FileOperationCallback& callback) {
122 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 121 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
123 DCHECK(!callback.is_null()); 122 DCHECK(!callback.is_null());
124 123
125 std::string* parent_resource_id = new std::string; 124 std::string* parent_resource_id = new std::string;
126 std::string* local_id = new std::string;
127 ResourceEntry* entry = new ResourceEntry; 125 ResourceEntry* entry = new ResourceEntry;
128 base::PostTaskAndReplyWithResult( 126 base::PostTaskAndReplyWithResult(
129 blocking_task_runner_.get(), 127 blocking_task_runner_.get(),
130 FROM_HERE, 128 FROM_HERE,
131 base::Bind(&CheckLocalState, 129 base::Bind(&CheckLocalState,
132 metadata_, 130 metadata_,
133 path, 131 path,
134 is_recursive, 132 is_recursive,
135 parent_resource_id, 133 parent_resource_id,
136 local_id,
137 entry), 134 entry),
138 base::Bind(&RemoveOperation::RemoveAfterCheckLocalState, 135 base::Bind(&RemoveOperation::RemoveAfterCheckLocalState,
139 weak_ptr_factory_.GetWeakPtr(), 136 weak_ptr_factory_.GetWeakPtr(),
140 callback, 137 callback,
141 base::Owned(parent_resource_id), 138 base::Owned(parent_resource_id),
142 base::Owned(local_id),
143 base::Owned(entry))); 139 base::Owned(entry)));
144 } 140 }
145 141
146 void RemoveOperation::RemoveAfterCheckLocalState( 142 void RemoveOperation::RemoveAfterCheckLocalState(
147 const FileOperationCallback& callback, 143 const FileOperationCallback& callback,
148 const std::string* parent_resource_id, 144 const std::string* parent_resource_id,
149 const std::string* local_id,
150 const ResourceEntry* entry, 145 const ResourceEntry* entry,
151 FileError error) { 146 FileError error) {
152 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 147 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
153 DCHECK(!callback.is_null()); 148 DCHECK(!callback.is_null());
154 149
155 if (error != FILE_ERROR_OK) { 150 if (error != FILE_ERROR_OK) {
156 callback.Run(error); 151 callback.Run(error);
157 return; 152 return;
158 } 153 }
159 154
160 // To match with the behavior of drive.google.com: 155 // To match with the behavior of drive.google.com:
161 // Removal of shared entries under MyDrive is just removing from the parent. 156 // Removal of shared entries under MyDrive is just removing from the parent.
162 // The entry will stay in shared-with-me (in other words, in "drive/other".) 157 // The entry will stay in shared-with-me (in other words, in "drive/other".)
163 // 158 //
164 // TODO(kinaba): to be more precise, we might be better to branch by whether 159 // TODO(kinaba): to be more precise, we might be better to branch by whether
165 // or not the current account is an owner of the file. The code below is 160 // or not the current account is an owner of the file. The code below is
166 // written under the assumption that |shared_with_me| coincides with that. 161 // written under the assumption that |shared_with_me| coincides with that.
167 if (entry->shared_with_me() && !parent_resource_id->empty()) { 162 if (entry->shared_with_me() && !parent_resource_id->empty()) {
168 scheduler_->RemoveResourceFromDirectory( 163 scheduler_->RemoveResourceFromDirectory(
169 *parent_resource_id, 164 *parent_resource_id,
170 entry->resource_id(), 165 entry->resource_id(),
171 base::Bind(&RemoveOperation::RemoveAfterUpdateRemoteState, 166 base::Bind(&RemoveOperation::RemoveAfterUpdateRemoteState,
172 weak_ptr_factory_.GetWeakPtr(), 167 weak_ptr_factory_.GetWeakPtr(),
173 callback, 168 callback,
174 base::Bind(&UpdateLocalStateAfterUnparent, 169 base::Bind(&UpdateLocalStateAfterUnparent,
175 metadata_, 170 metadata_,
176 *local_id))); 171 entry->local_id())));
177 } else { 172 } else {
178 // Otherwise try sending the entry to trash. 173 // Otherwise try sending the entry to trash.
179 scheduler_->DeleteResource( 174 scheduler_->DeleteResource(
180 entry->resource_id(), 175 entry->resource_id(),
181 base::Bind(&RemoveOperation::RemoveAfterUpdateRemoteState, 176 base::Bind(&RemoveOperation::RemoveAfterUpdateRemoteState,
182 weak_ptr_factory_.GetWeakPtr(), 177 weak_ptr_factory_.GetWeakPtr(),
183 callback, 178 callback,
184 base::Bind(&UpdateLocalStateAfterDelete, 179 base::Bind(&UpdateLocalStateAfterDelete,
185 metadata_, 180 metadata_,
186 cache_, 181 cache_,
187 *local_id))); 182 entry->local_id())));
188 } 183 }
189 } 184 }
190 185
191 void RemoveOperation::RemoveAfterUpdateRemoteState( 186 void RemoveOperation::RemoveAfterUpdateRemoteState(
192 const FileOperationCallback& callback, 187 const FileOperationCallback& callback,
193 const base::Callback<FileError(base::FilePath*)>& local_update_task, 188 const base::Callback<FileError(base::FilePath*)>& local_update_task,
194 google_apis::GDataErrorCode status) { 189 google_apis::GDataErrorCode status) {
195 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 190 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
196 DCHECK(!callback.is_null()); 191 DCHECK(!callback.is_null());
197 192
(...skipping 22 matching lines...) Expand all
220 DCHECK(!callback.is_null()); 215 DCHECK(!callback.is_null());
221 216
222 if (error == FILE_ERROR_OK) 217 if (error == FILE_ERROR_OK)
223 observer_->OnDirectoryChangedByOperation(*changed_directory_path); 218 observer_->OnDirectoryChangedByOperation(*changed_directory_path);
224 219
225 callback.Run(error); 220 callback.Run(error);
226 } 221 }
227 222
228 } // namespace file_system 223 } // namespace file_system
229 } // namespace drive 224 } // namespace drive
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/drive/file_system/remove_operation.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698