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 #include "webkit/fileapi/file_system_operation.h" | 5 #include "webkit/fileapi/file_system_operation.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/task_runner.h" |
8 #include "base/time.h" | 9 #include "base/time.h" |
9 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
10 #include "net/base/escape.h" | 11 #include "net/base/escape.h" |
11 #include "net/url_request/url_request_context.h" | 12 #include "net/url_request/url_request_context.h" |
12 #include "webkit/blob/shareable_file_reference.h" | 13 #include "webkit/blob/shareable_file_reference.h" |
13 #include "webkit/fileapi/file_system_context.h" | 14 #include "webkit/fileapi/file_system_context.h" |
14 #include "webkit/fileapi/file_system_file_util_proxy.h" | 15 #include "webkit/fileapi/file_system_file_util_proxy.h" |
15 #include "webkit/fileapi/file_system_mount_point_provider.h" | 16 #include "webkit/fileapi/file_system_mount_point_provider.h" |
16 #include "webkit/fileapi/file_system_operation_context.h" | 17 #include "webkit/fileapi/file_system_operation_context.h" |
17 #include "webkit/fileapi/file_system_quota_util.h" | 18 #include "webkit/fileapi/file_system_quota_util.h" |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
75 : type(kFileSystemTypeUnknown) { | 76 : type(kFileSystemTypeUnknown) { |
76 } | 77 } |
77 | 78 |
78 FileSystemOperation::TaskParamsForDidGetQuota::~TaskParamsForDidGetQuota() {} | 79 FileSystemOperation::TaskParamsForDidGetQuota::~TaskParamsForDidGetQuota() {} |
79 | 80 |
80 FileSystemOperation::~FileSystemOperation() { | 81 FileSystemOperation::~FileSystemOperation() { |
81 if (file_writer_delegate_.get()) { | 82 if (file_writer_delegate_.get()) { |
82 FileSystemOperationContext* c = | 83 FileSystemOperationContext* c = |
83 new FileSystemOperationContext(operation_context_); | 84 new FileSystemOperationContext(operation_context_); |
84 base::FileUtilProxy::RelayClose( | 85 base::FileUtilProxy::RelayClose( |
85 proxy_, | 86 task_runner_, |
86 base::Bind(&FileSystemFileUtil::Close, | 87 base::Bind(&FileSystemFileUtil::Close, |
87 base::Unretained(src_util_), | 88 base::Unretained(src_util_), |
88 base::Owned(c)), | 89 base::Owned(c)), |
89 file_writer_delegate_->file(), | 90 file_writer_delegate_->file(), |
90 base::FileUtilProxy::StatusCallback()); | 91 base::FileUtilProxy::StatusCallback()); |
91 } | 92 } |
92 } | 93 } |
93 | 94 |
94 void FileSystemOperation::CreateFile(const GURL& path_url, | 95 void FileSystemOperation::CreateFile(const GURL& path_url, |
95 bool exclusive, | 96 bool exclusive, |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 | 184 |
184 base::PlatformFileError result = SetUpFileSystemPath( | 185 base::PlatformFileError result = SetUpFileSystemPath( |
185 path_url, &src_path_, &src_util_, PATH_FOR_READ); | 186 path_url, &src_path_, &src_util_, PATH_FOR_READ); |
186 if (result != base::PLATFORM_FILE_OK) { | 187 if (result != base::PLATFORM_FILE_OK) { |
187 callback.Run(result); | 188 callback.Run(result); |
188 delete this; | 189 delete this; |
189 return; | 190 return; |
190 } | 191 } |
191 | 192 |
192 FileSystemFileUtilProxy::GetFileInfo( | 193 FileSystemFileUtilProxy::GetFileInfo( |
193 proxy_, &operation_context_, src_util_, src_path_, | 194 task_runner_, &operation_context_, src_util_, src_path_, |
194 base::Bind(&FileSystemOperation::DidDirectoryExists, | 195 base::Bind(&FileSystemOperation::DidDirectoryExists, |
195 base::Owned(this), callback)); | 196 base::Owned(this), callback)); |
196 } | 197 } |
197 | 198 |
198 void FileSystemOperation::FileExists(const GURL& path_url, | 199 void FileSystemOperation::FileExists(const GURL& path_url, |
199 const StatusCallback& callback) { | 200 const StatusCallback& callback) { |
200 DCHECK(SetPendingOperationType(kOperationFileExists)); | 201 DCHECK(SetPendingOperationType(kOperationFileExists)); |
201 | 202 |
202 base::PlatformFileError result = SetUpFileSystemPath( | 203 base::PlatformFileError result = SetUpFileSystemPath( |
203 path_url, &src_path_, &src_util_, PATH_FOR_READ); | 204 path_url, &src_path_, &src_util_, PATH_FOR_READ); |
204 if (result != base::PLATFORM_FILE_OK) { | 205 if (result != base::PLATFORM_FILE_OK) { |
205 callback.Run(result); | 206 callback.Run(result); |
206 delete this; | 207 delete this; |
207 return; | 208 return; |
208 } | 209 } |
209 | 210 |
210 FileSystemFileUtilProxy::GetFileInfo( | 211 FileSystemFileUtilProxy::GetFileInfo( |
211 proxy_, &operation_context_, src_util_, src_path_, | 212 task_runner_, &operation_context_, src_util_, src_path_, |
212 base::Bind(&FileSystemOperation::DidFileExists, | 213 base::Bind(&FileSystemOperation::DidFileExists, |
213 base::Owned(this), callback)); | 214 base::Owned(this), callback)); |
214 } | 215 } |
215 | 216 |
216 void FileSystemOperation::GetMetadata(const GURL& path_url, | 217 void FileSystemOperation::GetMetadata(const GURL& path_url, |
217 const GetMetadataCallback& callback) { | 218 const GetMetadataCallback& callback) { |
218 DCHECK(SetPendingOperationType(kOperationGetMetadata)); | 219 DCHECK(SetPendingOperationType(kOperationGetMetadata)); |
219 | 220 |
220 base::PlatformFileError result = SetUpFileSystemPath( | 221 base::PlatformFileError result = SetUpFileSystemPath( |
221 path_url, &src_path_, &src_util_, PATH_FOR_READ); | 222 path_url, &src_path_, &src_util_, PATH_FOR_READ); |
222 if (result != base::PLATFORM_FILE_OK) { | 223 if (result != base::PLATFORM_FILE_OK) { |
223 callback.Run(result, base::PlatformFileInfo(), FilePath()); | 224 callback.Run(result, base::PlatformFileInfo(), FilePath()); |
224 delete this; | 225 delete this; |
225 return; | 226 return; |
226 } | 227 } |
227 | 228 |
228 FileSystemFileUtilProxy::GetFileInfo( | 229 FileSystemFileUtilProxy::GetFileInfo( |
229 proxy_, &operation_context_, src_util_, src_path_, | 230 task_runner_, &operation_context_, src_util_, src_path_, |
230 base::Bind(&FileSystemOperation::DidGetMetadata, | 231 base::Bind(&FileSystemOperation::DidGetMetadata, |
231 base::Owned(this), callback)); | 232 base::Owned(this), callback)); |
232 } | 233 } |
233 | 234 |
234 void FileSystemOperation::ReadDirectory(const GURL& path_url, | 235 void FileSystemOperation::ReadDirectory(const GURL& path_url, |
235 const ReadDirectoryCallback& callback) { | 236 const ReadDirectoryCallback& callback) { |
236 DCHECK(SetPendingOperationType(kOperationReadDirectory)); | 237 DCHECK(SetPendingOperationType(kOperationReadDirectory)); |
237 | 238 |
238 base::PlatformFileError result = SetUpFileSystemPath( | 239 base::PlatformFileError result = SetUpFileSystemPath( |
239 path_url, &src_path_, &src_util_, PATH_FOR_READ); | 240 path_url, &src_path_, &src_util_, PATH_FOR_READ); |
240 if (result != base::PLATFORM_FILE_OK) { | 241 if (result != base::PLATFORM_FILE_OK) { |
241 callback.Run(result, std::vector<base::FileUtilProxy::Entry>(), false); | 242 callback.Run(result, std::vector<base::FileUtilProxy::Entry>(), false); |
242 delete this; | 243 delete this; |
243 return; | 244 return; |
244 } | 245 } |
245 | 246 |
246 FileSystemFileUtilProxy::ReadDirectory( | 247 FileSystemFileUtilProxy::ReadDirectory( |
247 proxy_, &operation_context_, src_util_, src_path_, | 248 task_runner_, &operation_context_, src_util_, src_path_, |
248 base::Bind(&FileSystemOperation::DidReadDirectory, | 249 base::Bind(&FileSystemOperation::DidReadDirectory, |
249 base::Owned(this), callback)); | 250 base::Owned(this), callback)); |
250 } | 251 } |
251 | 252 |
252 void FileSystemOperation::Remove(const GURL& path_url, bool recursive, | 253 void FileSystemOperation::Remove(const GURL& path_url, bool recursive, |
253 const StatusCallback& callback) { | 254 const StatusCallback& callback) { |
254 DCHECK(SetPendingOperationType(kOperationRemove)); | 255 DCHECK(SetPendingOperationType(kOperationRemove)); |
255 | 256 |
256 base::PlatformFileError result = SetUpFileSystemPath( | 257 base::PlatformFileError result = SetUpFileSystemPath( |
257 path_url, &src_path_, &src_util_, PATH_FOR_WRITE); | 258 path_url, &src_path_, &src_util_, PATH_FOR_WRITE); |
258 if (result != base::PLATFORM_FILE_OK) { | 259 if (result != base::PLATFORM_FILE_OK) { |
259 callback.Run(result); | 260 callback.Run(result); |
260 delete this; | 261 delete this; |
261 return; | 262 return; |
262 } | 263 } |
263 | 264 |
264 scoped_quota_notifier_.reset(new ScopedQuotaNotifier( | 265 scoped_quota_notifier_.reset(new ScopedQuotaNotifier( |
265 file_system_context(), src_path_.origin(), src_path_.type())); | 266 file_system_context(), src_path_.origin(), src_path_.type())); |
266 | 267 |
267 FileSystemFileUtilProxy::Delete( | 268 FileSystemFileUtilProxy::Delete( |
268 proxy_, &operation_context_, src_util_, src_path_, recursive, | 269 task_runner_, &operation_context_, src_util_, src_path_, recursive, |
269 base::Bind(&FileSystemOperation::DidFinishFileOperation, | 270 base::Bind(&FileSystemOperation::DidFinishFileOperation, |
270 base::Owned(this), callback)); | 271 base::Owned(this), callback)); |
271 } | 272 } |
272 | 273 |
273 void FileSystemOperation::Write( | 274 void FileSystemOperation::Write( |
274 const net::URLRequestContext* url_request_context, | 275 const net::URLRequestContext* url_request_context, |
275 const GURL& path_url, | 276 const GURL& path_url, |
276 const GURL& blob_url, | 277 const GURL& blob_url, |
277 int64 offset, | 278 int64 offset, |
278 const WriteCallback& callback) { | 279 const WriteCallback& callback) { |
279 DCHECK(SetPendingOperationType(kOperationWrite)); | 280 DCHECK(SetPendingOperationType(kOperationWrite)); |
280 | 281 |
281 base::PlatformFileError result = SetUpFileSystemPath( | 282 base::PlatformFileError result = SetUpFileSystemPath( |
282 path_url, &src_path_, &src_util_, PATH_FOR_WRITE); | 283 path_url, &src_path_, &src_util_, PATH_FOR_WRITE); |
283 if (result != base::PLATFORM_FILE_OK) { | 284 if (result != base::PLATFORM_FILE_OK) { |
284 callback.Run(result, 0, false); | 285 callback.Run(result, 0, false); |
285 delete this; | 286 delete this; |
286 return; | 287 return; |
287 } | 288 } |
288 DCHECK(blob_url.is_valid()); | 289 DCHECK(blob_url.is_valid()); |
289 file_writer_delegate_.reset(new FileWriterDelegate( | 290 file_writer_delegate_.reset(new FileWriterDelegate( |
290 this, src_path_, offset, proxy_)); | 291 this, src_path_, offset, task_runner_)); |
291 set_write_callback(callback); | 292 set_write_callback(callback); |
292 blob_request_.reset( | 293 blob_request_.reset( |
293 new net::URLRequest(blob_url, file_writer_delegate_.get())); | 294 new net::URLRequest(blob_url, file_writer_delegate_.get())); |
294 blob_request_->set_context(url_request_context); | 295 blob_request_->set_context(url_request_context); |
295 | 296 |
296 GetUsageAndQuotaThenRunTask( | 297 GetUsageAndQuotaThenRunTask( |
297 src_path_.origin(), src_path_.type(), | 298 src_path_.origin(), src_path_.type(), |
298 base::Bind(&FileSystemOperation::DoWrite, base::Unretained(this)), | 299 base::Bind(&FileSystemOperation::DoWrite, base::Unretained(this)), |
299 base::Bind(callback, base::PLATFORM_FILE_ERROR_FAILED, 0, true)); | 300 base::Bind(callback, base::PLATFORM_FILE_ERROR_FAILED, 0, true)); |
300 } | 301 } |
(...skipping 24 matching lines...) Expand all Loading... |
325 | 326 |
326 base::PlatformFileError result = SetUpFileSystemPath( | 327 base::PlatformFileError result = SetUpFileSystemPath( |
327 path_url, &src_path_, &src_util_, PATH_FOR_WRITE); | 328 path_url, &src_path_, &src_util_, PATH_FOR_WRITE); |
328 if (result != base::PLATFORM_FILE_OK) { | 329 if (result != base::PLATFORM_FILE_OK) { |
329 callback.Run(result); | 330 callback.Run(result); |
330 delete this; | 331 delete this; |
331 return; | 332 return; |
332 } | 333 } |
333 | 334 |
334 FileSystemFileUtilProxy::Touch( | 335 FileSystemFileUtilProxy::Touch( |
335 proxy_, &operation_context_, src_util_, src_path_, | 336 task_runner_, &operation_context_, src_util_, src_path_, |
336 last_access_time, last_modified_time, | 337 last_access_time, last_modified_time, |
337 base::Bind(&FileSystemOperation::DidTouchFile, | 338 base::Bind(&FileSystemOperation::DidTouchFile, |
338 base::Owned(this), callback)); | 339 base::Owned(this), callback)); |
339 } | 340 } |
340 | 341 |
341 void FileSystemOperation::OpenFile(const GURL& path_url, | 342 void FileSystemOperation::OpenFile(const GURL& path_url, |
342 int file_flags, | 343 int file_flags, |
343 base::ProcessHandle peer_handle, | 344 base::ProcessHandle peer_handle, |
344 const OpenFileCallback& callback) { | 345 const OpenFileCallback& callback) { |
345 DCHECK(SetPendingOperationType(kOperationOpenFile)); | 346 DCHECK(SetPendingOperationType(kOperationOpenFile)); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
437 delete this; | 438 delete this; |
438 } | 439 } |
439 | 440 |
440 void FileSystemOperation::CreateSnapshotFile( | 441 void FileSystemOperation::CreateSnapshotFile( |
441 const GURL& path_url, | 442 const GURL& path_url, |
442 const SnapshotFileCallback& callback) { | 443 const SnapshotFileCallback& callback) { |
443 GetMetadata(path_url, base::Bind(&GetMetadataForSnapshot, callback)); | 444 GetMetadata(path_url, base::Bind(&GetMetadataForSnapshot, callback)); |
444 } | 445 } |
445 | 446 |
446 FileSystemOperation::FileSystemOperation( | 447 FileSystemOperation::FileSystemOperation( |
447 scoped_refptr<base::MessageLoopProxy> proxy, | 448 base::TaskRunner* task_runner, |
448 FileSystemContext* file_system_context) | 449 FileSystemContext* file_system_context) |
449 : proxy_(proxy), | 450 : task_runner_(task_runner), |
450 operation_context_(file_system_context), | 451 operation_context_(file_system_context), |
451 src_util_(NULL), | 452 src_util_(NULL), |
452 dest_util_(NULL), | 453 dest_util_(NULL), |
453 peer_handle_(base::kNullProcessHandle), | 454 peer_handle_(base::kNullProcessHandle), |
454 pending_operation_(kOperationNone) { | 455 pending_operation_(kOperationNone) { |
455 } | 456 } |
456 | 457 |
457 void FileSystemOperation::GetUsageAndQuotaThenRunTask( | 458 void FileSystemOperation::GetUsageAndQuotaThenRunTask( |
458 const GURL& origin, FileSystemType type, | 459 const GURL& origin, FileSystemType type, |
459 const base::Closure& task, | 460 const base::Closure& task, |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
498 scoped_quota_notifier_.reset(new ScopedQuotaNotifier( | 499 scoped_quota_notifier_.reset(new ScopedQuotaNotifier( |
499 file_system_context(), params.origin, params.type)); | 500 file_system_context(), params.origin, params.type)); |
500 | 501 |
501 params.task.Run(); | 502 params.task.Run(); |
502 } | 503 } |
503 | 504 |
504 void FileSystemOperation::DoCreateFile( | 505 void FileSystemOperation::DoCreateFile( |
505 const StatusCallback& callback, | 506 const StatusCallback& callback, |
506 bool exclusive) { | 507 bool exclusive) { |
507 FileSystemFileUtilProxy::EnsureFileExists( | 508 FileSystemFileUtilProxy::EnsureFileExists( |
508 proxy_, &operation_context_, src_util_, src_path_, | 509 task_runner_, &operation_context_, src_util_, src_path_, |
509 base::Bind( | 510 base::Bind( |
510 exclusive ? &FileSystemOperation::DidEnsureFileExistsExclusive | 511 exclusive ? &FileSystemOperation::DidEnsureFileExistsExclusive |
511 : &FileSystemOperation::DidEnsureFileExistsNonExclusive, | 512 : &FileSystemOperation::DidEnsureFileExistsNonExclusive, |
512 base::Owned(this), callback)); | 513 base::Owned(this), callback)); |
513 } | 514 } |
514 | 515 |
515 void FileSystemOperation::DoCreateDirectory( | 516 void FileSystemOperation::DoCreateDirectory( |
516 const StatusCallback& callback, | 517 const StatusCallback& callback, |
517 bool exclusive, bool recursive) { | 518 bool exclusive, bool recursive) { |
518 FileSystemFileUtilProxy::CreateDirectory( | 519 FileSystemFileUtilProxy::CreateDirectory( |
519 proxy_, &operation_context_, src_util_, src_path_, exclusive, recursive, | 520 task_runner_, &operation_context_, |
| 521 src_util_, src_path_, exclusive, recursive, |
520 base::Bind(&FileSystemOperation::DidFinishFileOperation, | 522 base::Bind(&FileSystemOperation::DidFinishFileOperation, |
521 base::Owned(this), callback)); | 523 base::Owned(this), callback)); |
522 } | 524 } |
523 | 525 |
524 void FileSystemOperation::DoCopy(const StatusCallback& callback) { | 526 void FileSystemOperation::DoCopy(const StatusCallback& callback) { |
525 FileSystemFileUtilProxy::Copy( | 527 FileSystemFileUtilProxy::Copy( |
526 proxy_, &operation_context_, | 528 task_runner_, &operation_context_, |
527 src_util_, dest_util_, | 529 src_util_, dest_util_, |
528 src_path_, dest_path_, | 530 src_path_, dest_path_, |
529 base::Bind(&FileSystemOperation::DidFinishFileOperation, | 531 base::Bind(&FileSystemOperation::DidFinishFileOperation, |
530 base::Owned(this), callback)); | 532 base::Owned(this), callback)); |
531 } | 533 } |
532 | 534 |
533 void FileSystemOperation::DoMove(const StatusCallback& callback) { | 535 void FileSystemOperation::DoMove(const StatusCallback& callback) { |
534 FileSystemFileUtilProxy::Move( | 536 FileSystemFileUtilProxy::Move( |
535 proxy_, &operation_context_, | 537 task_runner_, &operation_context_, |
536 src_util_, dest_util_, | 538 src_util_, dest_util_, |
537 src_path_, dest_path_, | 539 src_path_, dest_path_, |
538 base::Bind(&FileSystemOperation::DidFinishFileOperation, | 540 base::Bind(&FileSystemOperation::DidFinishFileOperation, |
539 base::Owned(this), callback)); | 541 base::Owned(this), callback)); |
540 } | 542 } |
541 | 543 |
542 void FileSystemOperation::DoWrite() { | 544 void FileSystemOperation::DoWrite() { |
543 int file_flags = base::PLATFORM_FILE_OPEN | | 545 int file_flags = base::PLATFORM_FILE_OPEN | |
544 base::PLATFORM_FILE_WRITE | | 546 base::PLATFORM_FILE_WRITE | |
545 base::PLATFORM_FILE_ASYNC; | 547 base::PLATFORM_FILE_ASYNC; |
546 | 548 |
547 FileSystemFileUtilProxy::CreateOrOpen( | 549 FileSystemFileUtilProxy::CreateOrOpen( |
548 proxy_, &operation_context_, src_util_, src_path_, file_flags, | 550 task_runner_, &operation_context_, src_util_, src_path_, file_flags, |
549 base::Bind(&FileSystemOperation::OnFileOpenedForWrite, | 551 base::Bind(&FileSystemOperation::OnFileOpenedForWrite, |
550 base::Unretained(this))); | 552 base::Unretained(this))); |
551 } | 553 } |
552 | 554 |
553 void FileSystemOperation::DoTruncate(const StatusCallback& callback, | 555 void FileSystemOperation::DoTruncate(const StatusCallback& callback, |
554 int64 length) { | 556 int64 length) { |
555 FileSystemFileUtilProxy::Truncate( | 557 FileSystemFileUtilProxy::Truncate( |
556 proxy_, &operation_context_, src_util_, src_path_, length, | 558 task_runner_, &operation_context_, src_util_, src_path_, length, |
557 base::Bind(&FileSystemOperation::DidFinishFileOperation, | 559 base::Bind(&FileSystemOperation::DidFinishFileOperation, |
558 base::Owned(this), callback)); | 560 base::Owned(this), callback)); |
559 } | 561 } |
560 | 562 |
561 void FileSystemOperation::DoOpenFile(const OpenFileCallback& callback, | 563 void FileSystemOperation::DoOpenFile(const OpenFileCallback& callback, |
562 int file_flags) { | 564 int file_flags) { |
563 FileSystemFileUtilProxy::CreateOrOpen( | 565 FileSystemFileUtilProxy::CreateOrOpen( |
564 proxy_, &operation_context_, src_util_, src_path_, file_flags, | 566 task_runner_, &operation_context_, src_util_, src_path_, file_flags, |
565 base::Bind(&FileSystemOperation::DidOpenFile, | 567 base::Bind(&FileSystemOperation::DidOpenFile, |
566 base::Owned(this), callback)); | 568 base::Owned(this), callback)); |
567 } | 569 } |
568 | 570 |
569 void FileSystemOperation::DidEnsureFileExistsExclusive( | 571 void FileSystemOperation::DidEnsureFileExistsExclusive( |
570 const StatusCallback& callback, | 572 const StatusCallback& callback, |
571 base::PlatformFileError rv, bool created) { | 573 base::PlatformFileError rv, bool created) { |
572 if (rv == base::PLATFORM_FILE_OK && !created) { | 574 if (rv == base::PLATFORM_FILE_OK && !created) { |
573 callback.Run(base::PLATFORM_FILE_ERROR_EXISTS); | 575 callback.Run(base::PLATFORM_FILE_ERROR_EXISTS); |
574 } else { | 576 } else { |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
735 } | 737 } |
736 | 738 |
737 bool FileSystemOperation::SetPendingOperationType(OperationType type) { | 739 bool FileSystemOperation::SetPendingOperationType(OperationType type) { |
738 if (pending_operation_ != kOperationNone) | 740 if (pending_operation_ != kOperationNone) |
739 return false; | 741 return false; |
740 pending_operation_ = type; | 742 pending_operation_ = type; |
741 return true; | 743 return true; |
742 } | 744 } |
743 | 745 |
744 } // namespace fileapi | 746 } // namespace fileapi |
OLD | NEW |