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

Side by Side Diff: storage/browser/fileapi/file_system_operation_runner.cc

Issue 2480293004: Mandate unique_ptr for base::IDMap in IDMapOwnPointer mode. (Closed)
Patch Set: Make changes requested by danakj, fix a few more headers Created 4 years 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "storage/browser/fileapi/file_system_operation_runner.h" 5 #include "storage/browser/fileapi/file_system_operation_runner.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <tuple> 10 #include <tuple>
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 45
46 void FileSystemOperationRunner::Shutdown() { 46 void FileSystemOperationRunner::Shutdown() {
47 operations_.Clear(); 47 operations_.Clear();
48 } 48 }
49 49
50 OperationID FileSystemOperationRunner::CreateFile( 50 OperationID FileSystemOperationRunner::CreateFile(
51 const FileSystemURL& url, 51 const FileSystemURL& url,
52 bool exclusive, 52 bool exclusive,
53 const StatusCallback& callback) { 53 const StatusCallback& callback) {
54 base::File::Error error = base::File::FILE_OK; 54 base::File::Error error = base::File::FILE_OK;
55 FileSystemOperation* operation = 55 std::unique_ptr<FileSystemOperation> operation = base::WrapUnique(
56 file_system_context_->CreateFileSystemOperation(url, &error); 56 file_system_context_->CreateFileSystemOperation(url, &error));
57 57 FileSystemOperation* operation_raw = operation.get();
58 BeginOperationScoper scope; 58 BeginOperationScoper scope;
59 OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr()); 59 OperationHandle handle =
60 if (!operation) { 60 BeginOperation(std::move(operation), scope.AsWeakPtr());
61 if (!operation_raw) {
61 DidFinish(handle, callback, error); 62 DidFinish(handle, callback, error);
62 return handle.id; 63 return handle.id;
63 } 64 }
64 PrepareForWrite(handle.id, url); 65 PrepareForWrite(handle.id, url);
65 operation->CreateFile( 66 operation_raw->CreateFile(
66 url, exclusive, 67 url, exclusive,
67 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(), 68 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
68 handle, callback)); 69 handle, callback));
69 return handle.id; 70 return handle.id;
70 } 71 }
71 72
72 OperationID FileSystemOperationRunner::CreateDirectory( 73 OperationID FileSystemOperationRunner::CreateDirectory(
73 const FileSystemURL& url, 74 const FileSystemURL& url,
74 bool exclusive, 75 bool exclusive,
75 bool recursive, 76 bool recursive,
76 const StatusCallback& callback) { 77 const StatusCallback& callback) {
77 base::File::Error error = base::File::FILE_OK; 78 base::File::Error error = base::File::FILE_OK;
78 FileSystemOperation* operation = 79 std::unique_ptr<FileSystemOperation> operation = base::WrapUnique(
79 file_system_context_->CreateFileSystemOperation(url, &error); 80 file_system_context_->CreateFileSystemOperation(url, &error));
81 FileSystemOperation* operation_raw = operation.get();
80 BeginOperationScoper scope; 82 BeginOperationScoper scope;
81 OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr()); 83 OperationHandle handle =
82 if (!operation) { 84 BeginOperation(std::move(operation), scope.AsWeakPtr());
85 if (!operation_raw) {
83 DidFinish(handle, callback, error); 86 DidFinish(handle, callback, error);
84 return handle.id; 87 return handle.id;
85 } 88 }
86 PrepareForWrite(handle.id, url); 89 PrepareForWrite(handle.id, url);
87 operation->CreateDirectory( 90 operation_raw->CreateDirectory(
88 url, exclusive, recursive, 91 url, exclusive, recursive,
89 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(), 92 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
90 handle, callback)); 93 handle, callback));
91 return handle.id; 94 return handle.id;
92 } 95 }
93 96
94 OperationID FileSystemOperationRunner::Copy( 97 OperationID FileSystemOperationRunner::Copy(
95 const FileSystemURL& src_url, 98 const FileSystemURL& src_url,
96 const FileSystemURL& dest_url, 99 const FileSystemURL& dest_url,
97 CopyOrMoveOption option, 100 CopyOrMoveOption option,
98 ErrorBehavior error_behavior, 101 ErrorBehavior error_behavior,
99 const CopyProgressCallback& progress_callback, 102 const CopyProgressCallback& progress_callback,
100 const StatusCallback& callback) { 103 const StatusCallback& callback) {
101 base::File::Error error = base::File::FILE_OK; 104 base::File::Error error = base::File::FILE_OK;
102 FileSystemOperation* operation = 105 std::unique_ptr<FileSystemOperation> operation = base::WrapUnique(
103 file_system_context_->CreateFileSystemOperation(dest_url, &error); 106 file_system_context_->CreateFileSystemOperation(dest_url, &error));
107 FileSystemOperation* operation_raw = operation.get();
104 BeginOperationScoper scope; 108 BeginOperationScoper scope;
105 OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr()); 109 OperationHandle handle =
106 if (!operation) { 110 BeginOperation(std::move(operation), scope.AsWeakPtr());
111 if (!operation_raw) {
107 DidFinish(handle, callback, error); 112 DidFinish(handle, callback, error);
108 return handle.id; 113 return handle.id;
109 } 114 }
110 PrepareForWrite(handle.id, dest_url); 115 PrepareForWrite(handle.id, dest_url);
111 PrepareForRead(handle.id, src_url); 116 PrepareForRead(handle.id, src_url);
112 operation->Copy(src_url, dest_url, option, error_behavior, 117 operation_raw->Copy(src_url, dest_url, option, error_behavior,
113 progress_callback.is_null() 118 progress_callback.is_null()
114 ? CopyProgressCallback() 119 ? CopyProgressCallback()
115 : base::Bind(&FileSystemOperationRunner::OnCopyProgress, 120 : base::Bind(&FileSystemOperationRunner::OnCopyProgress,
116 AsWeakPtr(), handle, progress_callback), 121 AsWeakPtr(), handle, progress_callback),
117 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(), 122 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
118 handle, callback)); 123 handle, callback));
119 return handle.id; 124 return handle.id;
120 } 125 }
121 126
122 OperationID FileSystemOperationRunner::Move( 127 OperationID FileSystemOperationRunner::Move(
123 const FileSystemURL& src_url, 128 const FileSystemURL& src_url,
124 const FileSystemURL& dest_url, 129 const FileSystemURL& dest_url,
125 CopyOrMoveOption option, 130 CopyOrMoveOption option,
126 const StatusCallback& callback) { 131 const StatusCallback& callback) {
127 base::File::Error error = base::File::FILE_OK; 132 base::File::Error error = base::File::FILE_OK;
128 FileSystemOperation* operation = 133 std::unique_ptr<FileSystemOperation> operation = base::WrapUnique(
129 file_system_context_->CreateFileSystemOperation(dest_url, &error); 134 file_system_context_->CreateFileSystemOperation(dest_url, &error));
135 FileSystemOperation* operation_raw = operation.get();
130 BeginOperationScoper scope; 136 BeginOperationScoper scope;
131 OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr()); 137 OperationHandle handle =
132 if (!operation) { 138 BeginOperation(std::move(operation), scope.AsWeakPtr());
139 if (!operation_raw) {
133 DidFinish(handle, callback, error); 140 DidFinish(handle, callback, error);
134 return handle.id; 141 return handle.id;
135 } 142 }
136 PrepareForWrite(handle.id, dest_url); 143 PrepareForWrite(handle.id, dest_url);
137 PrepareForWrite(handle.id, src_url); 144 PrepareForWrite(handle.id, src_url);
138 operation->Move( 145 operation_raw->Move(
139 src_url, dest_url, option, 146 src_url, dest_url, option,
140 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(), 147 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
141 handle, callback)); 148 handle, callback));
142 return handle.id; 149 return handle.id;
143 } 150 }
144 151
145 OperationID FileSystemOperationRunner::DirectoryExists( 152 OperationID FileSystemOperationRunner::DirectoryExists(
146 const FileSystemURL& url, 153 const FileSystemURL& url,
147 const StatusCallback& callback) { 154 const StatusCallback& callback) {
148 base::File::Error error = base::File::FILE_OK; 155 base::File::Error error = base::File::FILE_OK;
149 FileSystemOperation* operation = 156 std::unique_ptr<FileSystemOperation> operation = base::WrapUnique(
150 file_system_context_->CreateFileSystemOperation(url, &error); 157 file_system_context_->CreateFileSystemOperation(url, &error));
158 FileSystemOperation* operation_raw = operation.get();
151 BeginOperationScoper scope; 159 BeginOperationScoper scope;
152 OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr()); 160 OperationHandle handle =
153 if (!operation) { 161 BeginOperation(std::move(operation), scope.AsWeakPtr());
162 if (!operation_raw) {
154 DidFinish(handle, callback, error); 163 DidFinish(handle, callback, error);
155 return handle.id; 164 return handle.id;
156 } 165 }
157 PrepareForRead(handle.id, url); 166 PrepareForRead(handle.id, url);
158 operation->DirectoryExists( 167 operation_raw->DirectoryExists(
159 url, 168 url,
160 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(), 169 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
161 handle, callback)); 170 handle, callback));
162 return handle.id; 171 return handle.id;
163 } 172 }
164 173
165 OperationID FileSystemOperationRunner::FileExists( 174 OperationID FileSystemOperationRunner::FileExists(
166 const FileSystemURL& url, 175 const FileSystemURL& url,
167 const StatusCallback& callback) { 176 const StatusCallback& callback) {
168 base::File::Error error = base::File::FILE_OK; 177 base::File::Error error = base::File::FILE_OK;
169 FileSystemOperation* operation = 178 std::unique_ptr<FileSystemOperation> operation = base::WrapUnique(
170 file_system_context_->CreateFileSystemOperation(url, &error); 179 file_system_context_->CreateFileSystemOperation(url, &error));
180 FileSystemOperation* operation_raw = operation.get();
171 BeginOperationScoper scope; 181 BeginOperationScoper scope;
172 OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr()); 182 OperationHandle handle =
173 if (!operation) { 183 BeginOperation(std::move(operation), scope.AsWeakPtr());
184 if (!operation_raw) {
174 DidFinish(handle, callback, error); 185 DidFinish(handle, callback, error);
175 return handle.id; 186 return handle.id;
176 } 187 }
177 PrepareForRead(handle.id, url); 188 PrepareForRead(handle.id, url);
178 operation->FileExists( 189 operation_raw->FileExists(
179 url, 190 url,
180 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(), 191 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
181 handle, callback)); 192 handle, callback));
182 return handle.id; 193 return handle.id;
183 } 194 }
184 195
185 OperationID FileSystemOperationRunner::GetMetadata( 196 OperationID FileSystemOperationRunner::GetMetadata(
186 const FileSystemURL& url, 197 const FileSystemURL& url,
187 int fields, 198 int fields,
188 const GetMetadataCallback& callback) { 199 const GetMetadataCallback& callback) {
189 base::File::Error error = base::File::FILE_OK; 200 base::File::Error error = base::File::FILE_OK;
190 FileSystemOperation* operation = 201 std::unique_ptr<FileSystemOperation> operation = base::WrapUnique(
191 file_system_context_->CreateFileSystemOperation(url, &error); 202 file_system_context_->CreateFileSystemOperation(url, &error));
203 FileSystemOperation* operation_raw = operation.get();
192 BeginOperationScoper scope; 204 BeginOperationScoper scope;
193 OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr()); 205 OperationHandle handle =
194 if (!operation) { 206 BeginOperation(std::move(operation), scope.AsWeakPtr());
207 if (!operation_raw) {
195 DidGetMetadata(handle, callback, error, base::File::Info()); 208 DidGetMetadata(handle, callback, error, base::File::Info());
196 return handle.id; 209 return handle.id;
197 } 210 }
198 PrepareForRead(handle.id, url); 211 PrepareForRead(handle.id, url);
199 operation->GetMetadata(url, fields, 212 operation_raw->GetMetadata(url, fields,
200 base::Bind(&FileSystemOperationRunner::DidGetMetadata, 213 base::Bind(&FileSystemOperationRunner::DidGetMetadata,
201 AsWeakPtr(), handle, callback)); 214 AsWeakPtr(), handle, callback));
202 return handle.id; 215 return handle.id;
203 } 216 }
204 217
205 OperationID FileSystemOperationRunner::ReadDirectory( 218 OperationID FileSystemOperationRunner::ReadDirectory(
206 const FileSystemURL& url, 219 const FileSystemURL& url,
207 const ReadDirectoryCallback& callback) { 220 const ReadDirectoryCallback& callback) {
208 base::File::Error error = base::File::FILE_OK; 221 base::File::Error error = base::File::FILE_OK;
209 FileSystemOperation* operation = 222 std::unique_ptr<FileSystemOperation> operation = base::WrapUnique(
210 file_system_context_->CreateFileSystemOperation(url, &error); 223 file_system_context_->CreateFileSystemOperation(url, &error));
224 FileSystemOperation* operation_raw = operation.get();
211 BeginOperationScoper scope; 225 BeginOperationScoper scope;
212 OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr()); 226 OperationHandle handle =
213 if (!operation) { 227 BeginOperation(std::move(operation), scope.AsWeakPtr());
228 if (!operation_raw) {
214 DidReadDirectory(handle, callback, error, std::vector<DirectoryEntry>(), 229 DidReadDirectory(handle, callback, error, std::vector<DirectoryEntry>(),
215 false); 230 false);
216 return handle.id; 231 return handle.id;
217 } 232 }
218 PrepareForRead(handle.id, url); 233 PrepareForRead(handle.id, url);
219 operation->ReadDirectory( 234 operation_raw->ReadDirectory(
220 url, 235 url,
221 base::Bind(&FileSystemOperationRunner::DidReadDirectory, AsWeakPtr(), 236 base::Bind(&FileSystemOperationRunner::DidReadDirectory, AsWeakPtr(),
222 handle, callback)); 237 handle, callback));
223 return handle.id; 238 return handle.id;
224 } 239 }
225 240
226 OperationID FileSystemOperationRunner::Remove( 241 OperationID FileSystemOperationRunner::Remove(
227 const FileSystemURL& url, bool recursive, 242 const FileSystemURL& url, bool recursive,
228 const StatusCallback& callback) { 243 const StatusCallback& callback) {
229 base::File::Error error = base::File::FILE_OK; 244 base::File::Error error = base::File::FILE_OK;
230 FileSystemOperation* operation = 245 std::unique_ptr<FileSystemOperation> operation = base::WrapUnique(
231 file_system_context_->CreateFileSystemOperation(url, &error); 246 file_system_context_->CreateFileSystemOperation(url, &error));
247 FileSystemOperation* operation_raw = operation.get();
232 BeginOperationScoper scope; 248 BeginOperationScoper scope;
233 OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr()); 249 OperationHandle handle =
234 if (!operation) { 250 BeginOperation(std::move(operation), scope.AsWeakPtr());
251 if (!operation_raw) {
235 DidFinish(handle, callback, error); 252 DidFinish(handle, callback, error);
236 return handle.id; 253 return handle.id;
237 } 254 }
238 PrepareForWrite(handle.id, url); 255 PrepareForWrite(handle.id, url);
239 operation->Remove( 256 operation_raw->Remove(
240 url, recursive, 257 url, recursive,
241 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(), 258 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
242 handle, callback)); 259 handle, callback));
243 return handle.id; 260 return handle.id;
244 } 261 }
245 262
246 OperationID FileSystemOperationRunner::Write( 263 OperationID FileSystemOperationRunner::Write(
247 const net::URLRequestContext* url_request_context, 264 const net::URLRequestContext* url_request_context,
248 const FileSystemURL& url, 265 const FileSystemURL& url,
249 std::unique_ptr<storage::BlobDataHandle> blob, 266 std::unique_ptr<storage::BlobDataHandle> blob,
250 int64_t offset, 267 int64_t offset,
251 const WriteCallback& callback) { 268 const WriteCallback& callback) {
252 base::File::Error error = base::File::FILE_OK; 269 base::File::Error error = base::File::FILE_OK;
253 FileSystemOperation* operation = 270 std::unique_ptr<FileSystemOperation> operation = base::WrapUnique(
254 file_system_context_->CreateFileSystemOperation(url, &error); 271 file_system_context_->CreateFileSystemOperation(url, &error));
255 272 FileSystemOperation* operation_raw = operation.get();
256 BeginOperationScoper scope; 273 BeginOperationScoper scope;
257 OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr()); 274 OperationHandle handle =
258 if (!operation) { 275 BeginOperation(std::move(operation), scope.AsWeakPtr());
276 if (!operation_raw) {
259 DidWrite(handle, callback, error, 0, true); 277 DidWrite(handle, callback, error, 0, true);
260 return handle.id; 278 return handle.id;
261 } 279 }
262 280
263 std::unique_ptr<FileStreamWriter> writer( 281 std::unique_ptr<FileStreamWriter> writer(
264 file_system_context_->CreateFileStreamWriter(url, offset)); 282 file_system_context_->CreateFileStreamWriter(url, offset));
265 if (!writer) { 283 if (!writer) {
266 // Write is not supported. 284 // Write is not supported.
267 DidWrite(handle, callback, base::File::FILE_ERROR_SECURITY, 0, true); 285 DidWrite(handle, callback, base::File::FILE_ERROR_SECURITY, 0, true);
268 return handle.id; 286 return handle.id;
269 } 287 }
270 288
271 std::unique_ptr<FileWriterDelegate> writer_delegate(new FileWriterDelegate( 289 std::unique_ptr<FileWriterDelegate> writer_delegate(new FileWriterDelegate(
272 std::move(writer), url.mount_option().flush_policy())); 290 std::move(writer), url.mount_option().flush_policy()));
273 291
274 std::unique_ptr<net::URLRequest> blob_request( 292 std::unique_ptr<net::URLRequest> blob_request(
275 storage::BlobProtocolHandler::CreateBlobRequest( 293 storage::BlobProtocolHandler::CreateBlobRequest(
276 std::move(blob), url_request_context, writer_delegate.get())); 294 std::move(blob), url_request_context, writer_delegate.get()));
277 295
278 PrepareForWrite(handle.id, url); 296 PrepareForWrite(handle.id, url);
279 operation->Write(url, std::move(writer_delegate), std::move(blob_request), 297 operation_raw->Write(url, std::move(writer_delegate), std::move(blob_request),
280 base::Bind(&FileSystemOperationRunner::DidWrite, AsWeakPtr(), 298 base::Bind(&FileSystemOperationRunner::DidWrite, AsWeakPtr(),
281 handle, callback)); 299 handle, callback));
282 return handle.id; 300 return handle.id;
283 } 301 }
284 302
285 OperationID FileSystemOperationRunner::Truncate( 303 OperationID FileSystemOperationRunner::Truncate(
286 const FileSystemURL& url, 304 const FileSystemURL& url,
287 int64_t length, 305 int64_t length,
288 const StatusCallback& callback) { 306 const StatusCallback& callback) {
289 base::File::Error error = base::File::FILE_OK; 307 base::File::Error error = base::File::FILE_OK;
290 FileSystemOperation* operation = 308 std::unique_ptr<FileSystemOperation> operation = base::WrapUnique(
291 file_system_context_->CreateFileSystemOperation(url, &error); 309 file_system_context_->CreateFileSystemOperation(url, &error));
310 FileSystemOperation* operation_raw = operation.get();
292 BeginOperationScoper scope; 311 BeginOperationScoper scope;
293 OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr()); 312 OperationHandle handle =
294 if (!operation) { 313 BeginOperation(std::move(operation), scope.AsWeakPtr());
314 if (!operation_raw) {
295 DidFinish(handle, callback, error); 315 DidFinish(handle, callback, error);
296 return handle.id; 316 return handle.id;
297 } 317 }
298 PrepareForWrite(handle.id, url); 318 PrepareForWrite(handle.id, url);
299 operation->Truncate( 319 operation_raw->Truncate(
300 url, length, 320 url, length,
301 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(), 321 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
302 handle, callback)); 322 handle, callback));
303 return handle.id; 323 return handle.id;
304 } 324 }
305 325
306 void FileSystemOperationRunner::Cancel( 326 void FileSystemOperationRunner::Cancel(
307 OperationID id, 327 OperationID id,
308 const StatusCallback& callback) { 328 const StatusCallback& callback) {
309 if (base::ContainsKey(finished_operations_, id)) { 329 if (base::ContainsKey(finished_operations_, id)) {
310 DCHECK(!base::ContainsKey(stray_cancel_callbacks_, id)); 330 DCHECK(!base::ContainsKey(stray_cancel_callbacks_, id));
311 stray_cancel_callbacks_[id] = callback; 331 stray_cancel_callbacks_[id] = callback;
312 return; 332 return;
313 } 333 }
314 FileSystemOperation* operation = operations_.Lookup(id); 334 FileSystemOperation* operation = operations_.Lookup(id);
315 if (!operation) { 335 if (!operation) {
316 // There is no operation with |id|. 336 // There is no operation with |id|.
317 callback.Run(base::File::FILE_ERROR_INVALID_OPERATION); 337 callback.Run(base::File::FILE_ERROR_INVALID_OPERATION);
318 return; 338 return;
319 } 339 }
320 operation->Cancel(callback); 340 operation->Cancel(callback);
321 } 341 }
322 342
323 OperationID FileSystemOperationRunner::TouchFile( 343 OperationID FileSystemOperationRunner::TouchFile(
324 const FileSystemURL& url, 344 const FileSystemURL& url,
325 const base::Time& last_access_time, 345 const base::Time& last_access_time,
326 const base::Time& last_modified_time, 346 const base::Time& last_modified_time,
327 const StatusCallback& callback) { 347 const StatusCallback& callback) {
328 base::File::Error error = base::File::FILE_OK; 348 base::File::Error error = base::File::FILE_OK;
329 FileSystemOperation* operation = 349 std::unique_ptr<FileSystemOperation> operation = base::WrapUnique(
330 file_system_context_->CreateFileSystemOperation(url, &error); 350 file_system_context_->CreateFileSystemOperation(url, &error));
351 FileSystemOperation* operation_raw = operation.get();
331 BeginOperationScoper scope; 352 BeginOperationScoper scope;
332 OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr()); 353 OperationHandle handle =
333 if (!operation) { 354 BeginOperation(std::move(operation), scope.AsWeakPtr());
355 if (!operation_raw) {
334 DidFinish(handle, callback, error); 356 DidFinish(handle, callback, error);
335 return handle.id; 357 return handle.id;
336 } 358 }
337 PrepareForWrite(handle.id, url); 359 PrepareForWrite(handle.id, url);
338 operation->TouchFile( 360 operation_raw->TouchFile(
339 url, last_access_time, last_modified_time, 361 url, last_access_time, last_modified_time,
340 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(), 362 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
341 handle, callback)); 363 handle, callback));
342 return handle.id; 364 return handle.id;
343 } 365 }
344 366
345 OperationID FileSystemOperationRunner::OpenFile( 367 OperationID FileSystemOperationRunner::OpenFile(
346 const FileSystemURL& url, 368 const FileSystemURL& url,
347 int file_flags, 369 int file_flags,
348 const OpenFileCallback& callback) { 370 const OpenFileCallback& callback) {
349 base::File::Error error = base::File::FILE_OK; 371 base::File::Error error = base::File::FILE_OK;
350 FileSystemOperation* operation = 372 std::unique_ptr<FileSystemOperation> operation = base::WrapUnique(
351 file_system_context_->CreateFileSystemOperation(url, &error); 373 file_system_context_->CreateFileSystemOperation(url, &error));
374 FileSystemOperation* operation_raw = operation.get();
352 BeginOperationScoper scope; 375 BeginOperationScoper scope;
353 OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr()); 376 OperationHandle handle =
354 if (!operation) { 377 BeginOperation(std::move(operation), scope.AsWeakPtr());
378 if (!operation_raw) {
355 DidOpenFile(handle, callback, base::File(error), base::Closure()); 379 DidOpenFile(handle, callback, base::File(error), base::Closure());
356 return handle.id; 380 return handle.id;
357 } 381 }
358 if (file_flags & 382 if (file_flags &
359 (base::File::FLAG_CREATE | base::File::FLAG_OPEN_ALWAYS | 383 (base::File::FLAG_CREATE | base::File::FLAG_OPEN_ALWAYS |
360 base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_OPEN_TRUNCATED | 384 base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_OPEN_TRUNCATED |
361 base::File::FLAG_WRITE | base::File::FLAG_EXCLUSIVE_WRITE | 385 base::File::FLAG_WRITE | base::File::FLAG_EXCLUSIVE_WRITE |
362 base::File::FLAG_DELETE_ON_CLOSE | 386 base::File::FLAG_DELETE_ON_CLOSE |
363 base::File::FLAG_WRITE_ATTRIBUTES)) { 387 base::File::FLAG_WRITE_ATTRIBUTES)) {
364 PrepareForWrite(handle.id, url); 388 PrepareForWrite(handle.id, url);
365 } else { 389 } else {
366 PrepareForRead(handle.id, url); 390 PrepareForRead(handle.id, url);
367 } 391 }
368 operation->OpenFile( 392 operation_raw->OpenFile(
369 url, file_flags, 393 url, file_flags,
370 base::Bind(&FileSystemOperationRunner::DidOpenFile, AsWeakPtr(), 394 base::Bind(&FileSystemOperationRunner::DidOpenFile, AsWeakPtr(),
371 handle, callback)); 395 handle, callback));
372 return handle.id; 396 return handle.id;
373 } 397 }
374 398
375 OperationID FileSystemOperationRunner::CreateSnapshotFile( 399 OperationID FileSystemOperationRunner::CreateSnapshotFile(
376 const FileSystemURL& url, 400 const FileSystemURL& url,
377 const SnapshotFileCallback& callback) { 401 const SnapshotFileCallback& callback) {
378 base::File::Error error = base::File::FILE_OK; 402 base::File::Error error = base::File::FILE_OK;
379 FileSystemOperation* operation = 403 std::unique_ptr<FileSystemOperation> operation = base::WrapUnique(
380 file_system_context_->CreateFileSystemOperation(url, &error); 404 file_system_context_->CreateFileSystemOperation(url, &error));
405 FileSystemOperation* operation_raw = operation.get();
381 BeginOperationScoper scope; 406 BeginOperationScoper scope;
382 OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr()); 407 OperationHandle handle =
383 if (!operation) { 408 BeginOperation(std::move(operation), scope.AsWeakPtr());
409 if (!operation_raw) {
384 DidCreateSnapshot(handle, callback, error, base::File::Info(), 410 DidCreateSnapshot(handle, callback, error, base::File::Info(),
385 base::FilePath(), NULL); 411 base::FilePath(), NULL);
386 return handle.id; 412 return handle.id;
387 } 413 }
388 PrepareForRead(handle.id, url); 414 PrepareForRead(handle.id, url);
389 operation->CreateSnapshotFile( 415 operation_raw->CreateSnapshotFile(
390 url, 416 url,
391 base::Bind(&FileSystemOperationRunner::DidCreateSnapshot, AsWeakPtr(), 417 base::Bind(&FileSystemOperationRunner::DidCreateSnapshot, AsWeakPtr(),
392 handle, callback)); 418 handle, callback));
393 return handle.id; 419 return handle.id;
394 } 420 }
395 421
396 OperationID FileSystemOperationRunner::CopyInForeignFile( 422 OperationID FileSystemOperationRunner::CopyInForeignFile(
397 const base::FilePath& src_local_disk_path, 423 const base::FilePath& src_local_disk_path,
398 const FileSystemURL& dest_url, 424 const FileSystemURL& dest_url,
399 const StatusCallback& callback) { 425 const StatusCallback& callback) {
400 base::File::Error error = base::File::FILE_OK; 426 base::File::Error error = base::File::FILE_OK;
401 FileSystemOperation* operation = 427 std::unique_ptr<FileSystemOperation> operation = base::WrapUnique(
402 file_system_context_->CreateFileSystemOperation(dest_url, &error); 428 file_system_context_->CreateFileSystemOperation(dest_url, &error));
429 FileSystemOperation* operation_raw = operation.get();
403 BeginOperationScoper scope; 430 BeginOperationScoper scope;
404 OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr()); 431 OperationHandle handle =
405 if (!operation) { 432 BeginOperation(std::move(operation), scope.AsWeakPtr());
433 if (!operation_raw) {
406 DidFinish(handle, callback, error); 434 DidFinish(handle, callback, error);
407 return handle.id; 435 return handle.id;
408 } 436 }
409 PrepareForWrite(handle.id, dest_url); 437 PrepareForWrite(handle.id, dest_url);
410 operation->CopyInForeignFile( 438 operation_raw->CopyInForeignFile(
411 src_local_disk_path, dest_url, 439 src_local_disk_path, dest_url,
412 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(), 440 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
413 handle, callback)); 441 handle, callback));
414 return handle.id; 442 return handle.id;
415 } 443 }
416 444
417 OperationID FileSystemOperationRunner::RemoveFile( 445 OperationID FileSystemOperationRunner::RemoveFile(
418 const FileSystemURL& url, 446 const FileSystemURL& url,
419 const StatusCallback& callback) { 447 const StatusCallback& callback) {
420 base::File::Error error = base::File::FILE_OK; 448 base::File::Error error = base::File::FILE_OK;
421 FileSystemOperation* operation = 449 std::unique_ptr<FileSystemOperation> operation = base::WrapUnique(
422 file_system_context_->CreateFileSystemOperation(url, &error); 450 file_system_context_->CreateFileSystemOperation(url, &error));
451 FileSystemOperation* operation_raw = operation.get();
423 BeginOperationScoper scope; 452 BeginOperationScoper scope;
424 OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr()); 453 OperationHandle handle =
425 if (!operation) { 454 BeginOperation(std::move(operation), scope.AsWeakPtr());
455 if (!operation_raw) {
426 DidFinish(handle, callback, error); 456 DidFinish(handle, callback, error);
427 return handle.id; 457 return handle.id;
428 } 458 }
429 PrepareForWrite(handle.id, url); 459 PrepareForWrite(handle.id, url);
430 operation->RemoveFile( 460 operation_raw->RemoveFile(
431 url, 461 url,
432 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(), 462 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
433 handle, callback)); 463 handle, callback));
434 return handle.id; 464 return handle.id;
435 } 465 }
436 466
437 OperationID FileSystemOperationRunner::RemoveDirectory( 467 OperationID FileSystemOperationRunner::RemoveDirectory(
438 const FileSystemURL& url, 468 const FileSystemURL& url,
439 const StatusCallback& callback) { 469 const StatusCallback& callback) {
440 base::File::Error error = base::File::FILE_OK; 470 base::File::Error error = base::File::FILE_OK;
441 FileSystemOperation* operation = 471 std::unique_ptr<FileSystemOperation> operation = base::WrapUnique(
442 file_system_context_->CreateFileSystemOperation(url, &error); 472 file_system_context_->CreateFileSystemOperation(url, &error));
473 FileSystemOperation* operation_raw = operation.get();
443 BeginOperationScoper scope; 474 BeginOperationScoper scope;
444 OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr()); 475 OperationHandle handle =
445 if (!operation) { 476 BeginOperation(std::move(operation), scope.AsWeakPtr());
477 if (!operation_raw) {
446 DidFinish(handle, callback, error); 478 DidFinish(handle, callback, error);
447 return handle.id; 479 return handle.id;
448 } 480 }
449 PrepareForWrite(handle.id, url); 481 PrepareForWrite(handle.id, url);
450 operation->RemoveDirectory( 482 operation_raw->RemoveDirectory(
451 url, 483 url,
452 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(), 484 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
453 handle, callback)); 485 handle, callback));
454 return handle.id; 486 return handle.id;
455 } 487 }
456 488
457 OperationID FileSystemOperationRunner::CopyFileLocal( 489 OperationID FileSystemOperationRunner::CopyFileLocal(
458 const FileSystemURL& src_url, 490 const FileSystemURL& src_url,
459 const FileSystemURL& dest_url, 491 const FileSystemURL& dest_url,
460 CopyOrMoveOption option, 492 CopyOrMoveOption option,
461 const CopyFileProgressCallback& progress_callback, 493 const CopyFileProgressCallback& progress_callback,
462 const StatusCallback& callback) { 494 const StatusCallback& callback) {
463 base::File::Error error = base::File::FILE_OK; 495 base::File::Error error = base::File::FILE_OK;
464 FileSystemOperation* operation = 496 std::unique_ptr<FileSystemOperation> operation = base::WrapUnique(
465 file_system_context_->CreateFileSystemOperation(src_url, &error); 497 file_system_context_->CreateFileSystemOperation(src_url, &error));
498 FileSystemOperation* operation_raw = operation.get();
466 BeginOperationScoper scope; 499 BeginOperationScoper scope;
467 OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr()); 500 OperationHandle handle =
468 if (!operation) { 501 BeginOperation(std::move(operation), scope.AsWeakPtr());
502 if (!operation_raw) {
469 DidFinish(handle, callback, error); 503 DidFinish(handle, callback, error);
470 return handle.id; 504 return handle.id;
471 } 505 }
472 PrepareForRead(handle.id, src_url); 506 PrepareForRead(handle.id, src_url);
473 PrepareForWrite(handle.id, dest_url); 507 PrepareForWrite(handle.id, dest_url);
474 operation->CopyFileLocal( 508 operation_raw->CopyFileLocal(
475 src_url, dest_url, option, progress_callback, 509 src_url, dest_url, option, progress_callback,
476 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(), 510 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
477 handle, callback)); 511 handle, callback));
478 return handle.id; 512 return handle.id;
479 } 513 }
480 514
481 OperationID FileSystemOperationRunner::MoveFileLocal( 515 OperationID FileSystemOperationRunner::MoveFileLocal(
482 const FileSystemURL& src_url, 516 const FileSystemURL& src_url,
483 const FileSystemURL& dest_url, 517 const FileSystemURL& dest_url,
484 CopyOrMoveOption option, 518 CopyOrMoveOption option,
485 const StatusCallback& callback) { 519 const StatusCallback& callback) {
486 base::File::Error error = base::File::FILE_OK; 520 base::File::Error error = base::File::FILE_OK;
487 FileSystemOperation* operation = 521 std::unique_ptr<FileSystemOperation> operation = base::WrapUnique(
488 file_system_context_->CreateFileSystemOperation(src_url, &error); 522 file_system_context_->CreateFileSystemOperation(src_url, &error));
523 FileSystemOperation* operation_raw = operation.get();
489 BeginOperationScoper scope; 524 BeginOperationScoper scope;
490 OperationHandle handle = BeginOperation(operation, scope.AsWeakPtr()); 525 OperationHandle handle =
491 if (!operation) { 526 BeginOperation(std::move(operation), scope.AsWeakPtr());
527 if (!operation_raw) {
492 DidFinish(handle, callback, error); 528 DidFinish(handle, callback, error);
493 return handle.id; 529 return handle.id;
494 } 530 }
495 PrepareForWrite(handle.id, src_url); 531 PrepareForWrite(handle.id, src_url);
496 PrepareForWrite(handle.id, dest_url); 532 PrepareForWrite(handle.id, dest_url);
497 operation->MoveFileLocal( 533 operation_raw->MoveFileLocal(
498 src_url, dest_url, option, 534 src_url, dest_url, option,
499 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(), 535 base::Bind(&FileSystemOperationRunner::DidFinish, AsWeakPtr(),
500 handle, callback)); 536 handle, callback));
501 return handle.id; 537 return handle.id;
502 } 538 }
503 539
504 base::File::Error FileSystemOperationRunner::SyncGetPlatformPath( 540 base::File::Error FileSystemOperationRunner::SyncGetPlatformPath(
505 const FileSystemURL& url, 541 const FileSystemURL& url,
506 base::FilePath* platform_path) { 542 base::FilePath* platform_path) {
507 base::File::Error error = base::File::FILE_OK; 543 base::File::Error error = base::File::FILE_OK;
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 void FileSystemOperationRunner::PrepareForRead(OperationID id, 684 void FileSystemOperationRunner::PrepareForRead(OperationID id,
649 const FileSystemURL& url) { 685 const FileSystemURL& url) {
650 if (file_system_context_->GetAccessObservers(url.type())) { 686 if (file_system_context_->GetAccessObservers(url.type())) {
651 file_system_context_->GetAccessObservers(url.type())->Notify( 687 file_system_context_->GetAccessObservers(url.type())->Notify(
652 &FileAccessObserver::OnAccess, std::make_tuple(url)); 688 &FileAccessObserver::OnAccess, std::make_tuple(url));
653 } 689 }
654 } 690 }
655 691
656 FileSystemOperationRunner::OperationHandle 692 FileSystemOperationRunner::OperationHandle
657 FileSystemOperationRunner::BeginOperation( 693 FileSystemOperationRunner::BeginOperation(
658 FileSystemOperation* operation, 694 std::unique_ptr<FileSystemOperation> operation,
659 base::WeakPtr<BeginOperationScoper> scope) { 695 base::WeakPtr<BeginOperationScoper> scope) {
660 OperationHandle handle; 696 OperationHandle handle;
661 handle.id = operations_.Add(operation); 697 handle.id = operations_.Add(std::move(operation));
662 handle.scope = scope; 698 handle.scope = scope;
663 return handle; 699 return handle;
664 } 700 }
665 701
666 void FileSystemOperationRunner::FinishOperation(OperationID id) { 702 void FileSystemOperationRunner::FinishOperation(OperationID id) {
667 OperationToURLSet::iterator found = write_target_urls_.find(id); 703 OperationToURLSet::iterator found = write_target_urls_.find(id);
668 if (found != write_target_urls_.end()) { 704 if (found != write_target_urls_.end()) {
669 const FileSystemURLSet& urls = found->second; 705 const FileSystemURLSet& urls = found->second;
670 for (FileSystemURLSet::const_iterator iter = urls.begin(); 706 for (FileSystemURLSet::const_iterator iter = urls.begin();
671 iter != urls.end(); ++iter) { 707 iter != urls.end(); ++iter) {
(...skipping 16 matching lines...) Expand all
688 stray_cancel_callbacks_.find(id); 724 stray_cancel_callbacks_.find(id);
689 if (found_cancel != stray_cancel_callbacks_.end()) { 725 if (found_cancel != stray_cancel_callbacks_.end()) {
690 // This cancel has been requested after the operation has finished, 726 // This cancel has been requested after the operation has finished,
691 // so report that we failed to stop it. 727 // so report that we failed to stop it.
692 found_cancel->second.Run(base::File::FILE_ERROR_INVALID_OPERATION); 728 found_cancel->second.Run(base::File::FILE_ERROR_INVALID_OPERATION);
693 stray_cancel_callbacks_.erase(found_cancel); 729 stray_cancel_callbacks_.erase(found_cancel);
694 } 730 }
695 } 731 }
696 732
697 } // namespace storage 733 } // namespace storage
OLDNEW
« no previous file with comments | « storage/browser/fileapi/file_system_operation_runner.h ('k') | third_party/WebKit/Source/modules/cachestorage/Cache.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698