OLD | NEW |
| (Empty) |
1 // Copyright (c) 2013 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 #include "webkit/fileapi/remove_operation_delegate.h" | |
6 | |
7 #include "base/bind.h" | |
8 #include "webkit/browser/fileapi/local_file_system_operation.h" | |
9 #include "webkit/fileapi/file_system_context.h" | |
10 #include "webkit/fileapi/file_system_operation_context.h" | |
11 | |
12 namespace fileapi { | |
13 | |
14 RemoveOperationDelegate::RemoveOperationDelegate( | |
15 FileSystemContext* file_system_context, | |
16 LocalFileSystemOperation* operation, | |
17 const FileSystemURL& url, | |
18 const StatusCallback& callback) | |
19 : RecursiveOperationDelegate(file_system_context, operation), | |
20 url_(url), | |
21 callback_(callback) { | |
22 } | |
23 | |
24 RemoveOperationDelegate::~RemoveOperationDelegate() {} | |
25 | |
26 void RemoveOperationDelegate::Run() { | |
27 NewNestedOperation()->RemoveFile(url_, base::Bind( | |
28 &RemoveOperationDelegate::DidTryRemoveFile, AsWeakPtr())); | |
29 } | |
30 | |
31 void RemoveOperationDelegate::RunRecursively() { | |
32 StartRecursiveOperation( | |
33 url_, | |
34 base::Bind(&RemoveOperationDelegate::RemoveNextDirectory, AsWeakPtr())); | |
35 } | |
36 | |
37 void RemoveOperationDelegate::ProcessFile(const FileSystemURL& url, | |
38 const StatusCallback& callback) { | |
39 if (to_remove_directories_.size() == 1u && | |
40 to_remove_directories_.top() == url) { | |
41 // We seem to have been re-directed from ProcessDirectory. | |
42 to_remove_directories_.pop(); | |
43 } | |
44 NewNestedOperation()->RemoveFile(url, base::Bind( | |
45 &RemoveOperationDelegate::DidRemoveFile, AsWeakPtr(), callback)); | |
46 } | |
47 | |
48 void RemoveOperationDelegate::ProcessDirectory(const FileSystemURL& url, | |
49 const StatusCallback& callback) { | |
50 to_remove_directories_.push(url); | |
51 callback.Run(base::PLATFORM_FILE_OK); | |
52 } | |
53 | |
54 void RemoveOperationDelegate::DidTryRemoveFile( | |
55 base::PlatformFileError error) { | |
56 if (error == base::PLATFORM_FILE_OK || | |
57 error != base::PLATFORM_FILE_ERROR_NOT_A_FILE) { | |
58 callback_.Run(error); | |
59 return; | |
60 } | |
61 NewNestedOperation()->RemoveDirectory(url_, callback_); | |
62 } | |
63 | |
64 void RemoveOperationDelegate::DidRemoveFile(const StatusCallback& callback, | |
65 base::PlatformFileError error) { | |
66 if (error == base::PLATFORM_FILE_ERROR_NOT_FOUND) { | |
67 callback.Run(base::PLATFORM_FILE_OK); | |
68 return; | |
69 } | |
70 callback.Run(error); | |
71 } | |
72 | |
73 void RemoveOperationDelegate::RemoveNextDirectory( | |
74 base::PlatformFileError error) { | |
75 if (error != base::PLATFORM_FILE_OK || | |
76 to_remove_directories_.empty()) { | |
77 callback_.Run(error); | |
78 return; | |
79 } | |
80 FileSystemURL url = to_remove_directories_.top(); | |
81 to_remove_directories_.pop(); | |
82 NewNestedOperation()->RemoveDirectory(url, base::Bind( | |
83 &RemoveOperationDelegate::RemoveNextDirectory, | |
84 AsWeakPtr())); | |
85 } | |
86 | |
87 } // namespace fileapi | |
OLD | NEW |