OLD | NEW |
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 "webkit/browser/fileapi/recursive_operation_delegate.h" | 5 #include "webkit/browser/fileapi/recursive_operation_delegate.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 RecordLogEntry(LogEntry::PROCESS_FILE, url); | 64 RecordLogEntry(LogEntry::PROCESS_FILE, url); |
65 operation_runner()->GetMetadata( | 65 operation_runner()->GetMetadata( |
66 url, | 66 url, |
67 base::Bind(&LoggingRecursiveOperation::DidGetMetadata, | 67 base::Bind(&LoggingRecursiveOperation::DidGetMetadata, |
68 weak_factory_.GetWeakPtr(), callback)); | 68 weak_factory_.GetWeakPtr(), callback)); |
69 } | 69 } |
70 | 70 |
71 virtual void ProcessDirectory(const FileSystemURL& url, | 71 virtual void ProcessDirectory(const FileSystemURL& url, |
72 const StatusCallback& callback) OVERRIDE { | 72 const StatusCallback& callback) OVERRIDE { |
73 RecordLogEntry(LogEntry::PROCESS_DIRECTORY, url); | 73 RecordLogEntry(LogEntry::PROCESS_DIRECTORY, url); |
74 callback.Run(base::PLATFORM_FILE_OK); | 74 callback.Run(base::File::FILE_OK); |
75 } | 75 } |
76 | 76 |
77 virtual void PostProcessDirectory(const FileSystemURL& url, | 77 virtual void PostProcessDirectory(const FileSystemURL& url, |
78 const StatusCallback& callback) OVERRIDE { | 78 const StatusCallback& callback) OVERRIDE { |
79 RecordLogEntry(LogEntry::POST_PROCESS_DIRECTORY, url); | 79 RecordLogEntry(LogEntry::POST_PROCESS_DIRECTORY, url); |
80 callback.Run(base::PLATFORM_FILE_OK); | 80 callback.Run(base::File::FILE_OK); |
81 } | 81 } |
82 | 82 |
83 private: | 83 private: |
84 void RecordLogEntry(LogEntry::Type type, const FileSystemURL& url) { | 84 void RecordLogEntry(LogEntry::Type type, const FileSystemURL& url) { |
85 LogEntry entry; | 85 LogEntry entry; |
86 entry.type = type; | 86 entry.type = type; |
87 entry.url = url; | 87 entry.url = url; |
88 log_entries_.push_back(entry); | 88 log_entries_.push_back(entry); |
89 } | 89 } |
90 | 90 |
91 void DidGetMetadata(const StatusCallback& callback, | 91 void DidGetMetadata(const StatusCallback& callback, |
92 base::PlatformFileError result, | 92 base::File::Error result, |
93 const base::PlatformFileInfo& file_info) { | 93 const base::File::Info& file_info) { |
94 if (result != base::PLATFORM_FILE_OK) { | 94 if (result != base::File::FILE_OK) { |
95 callback.Run(result); | 95 callback.Run(result); |
96 return; | 96 return; |
97 } | 97 } |
98 | 98 |
99 callback.Run(file_info.is_directory ? | 99 callback.Run(file_info.is_directory ? |
100 base::PLATFORM_FILE_ERROR_NOT_A_FILE : | 100 base::File::FILE_ERROR_NOT_A_FILE : |
101 base::PLATFORM_FILE_OK); | 101 base::File::FILE_OK); |
102 } | 102 } |
103 | 103 |
104 FileSystemURL root_; | 104 FileSystemURL root_; |
105 StatusCallback callback_; | 105 StatusCallback callback_; |
106 std::vector<LogEntry> log_entries_; | 106 std::vector<LogEntry> log_entries_; |
107 | 107 |
108 base::WeakPtrFactory<LoggingRecursiveOperation> weak_factory_; | 108 base::WeakPtrFactory<LoggingRecursiveOperation> weak_factory_; |
109 DISALLOW_COPY_AND_ASSIGN(LoggingRecursiveOperation); | 109 DISALLOW_COPY_AND_ASSIGN(LoggingRecursiveOperation); |
110 }; | 110 }; |
111 | 111 |
112 void ReportStatus(base::PlatformFileError* out_error, | 112 void ReportStatus(base::File::Error* out_error, |
113 base::PlatformFileError error) { | 113 base::File::Error error) { |
114 DCHECK(out_error); | 114 DCHECK(out_error); |
115 *out_error = error; | 115 *out_error = error; |
116 } | 116 } |
117 | 117 |
118 // To test the Cancel() during operation, calls Cancel() of |operation| | 118 // To test the Cancel() during operation, calls Cancel() of |operation| |
119 // after |counter| times message posting. | 119 // after |counter| times message posting. |
120 void CallCancelLater(fileapi::RecursiveOperationDelegate* operation, | 120 void CallCancelLater(fileapi::RecursiveOperationDelegate* operation, |
121 int counter) { | 121 int counter) { |
122 if (counter > 0) { | 122 if (counter > 0) { |
123 base::MessageLoopProxy::current()->PostTask( | 123 base::MessageLoopProxy::current()->PostTask( |
(...skipping 30 matching lines...) Expand all Loading... |
154 return sandbox_file_system_.file_util(); | 154 return sandbox_file_system_.file_util(); |
155 } | 155 } |
156 | 156 |
157 FileSystemURL URLForPath(const std::string& path) const { | 157 FileSystemURL URLForPath(const std::string& path) const { |
158 return sandbox_file_system_.CreateURLFromUTF8(path); | 158 return sandbox_file_system_.CreateURLFromUTF8(path); |
159 } | 159 } |
160 | 160 |
161 FileSystemURL CreateFile(const std::string& path) { | 161 FileSystemURL CreateFile(const std::string& path) { |
162 FileSystemURL url = URLForPath(path); | 162 FileSystemURL url = URLForPath(path); |
163 bool created = false; | 163 bool created = false; |
164 EXPECT_EQ(base::PLATFORM_FILE_OK, | 164 EXPECT_EQ(base::File::FILE_OK, |
165 file_util()->EnsureFileExists(NewContext().get(), | 165 file_util()->EnsureFileExists(NewContext().get(), |
166 url, &created)); | 166 url, &created)); |
167 EXPECT_TRUE(created); | 167 EXPECT_TRUE(created); |
168 return url; | 168 return url; |
169 } | 169 } |
170 | 170 |
171 FileSystemURL CreateDirectory(const std::string& path) { | 171 FileSystemURL CreateDirectory(const std::string& path) { |
172 FileSystemURL url = URLForPath(path); | 172 FileSystemURL url = URLForPath(path); |
173 EXPECT_EQ(base::PLATFORM_FILE_OK, | 173 EXPECT_EQ(base::File::FILE_OK, |
174 file_util()->CreateDirectory(NewContext().get(), url, | 174 file_util()->CreateDirectory(NewContext().get(), url, |
175 false /* exclusive */, true)); | 175 false /* exclusive */, true)); |
176 return url; | 176 return url; |
177 } | 177 } |
178 | 178 |
179 private: | 179 private: |
180 base::MessageLoop message_loop_; | 180 base::MessageLoop message_loop_; |
181 | 181 |
182 // Common temp base for nondestructive uses. | 182 // Common temp base for nondestructive uses. |
183 base::ScopedTempDir base_; | 183 base::ScopedTempDir base_; |
184 SandboxFileSystemTestHelper sandbox_file_system_; | 184 SandboxFileSystemTestHelper sandbox_file_system_; |
185 }; | 185 }; |
186 | 186 |
187 TEST_F(RecursiveOperationDelegateTest, RootIsFile) { | 187 TEST_F(RecursiveOperationDelegateTest, RootIsFile) { |
188 FileSystemURL src_file(CreateFile("src")); | 188 FileSystemURL src_file(CreateFile("src")); |
189 | 189 |
190 base::PlatformFileError error = base::PLATFORM_FILE_ERROR_FAILED; | 190 base::File::Error error = base::File::FILE_ERROR_FAILED; |
191 scoped_ptr<FileSystemOperationContext> context = NewContext(); | 191 scoped_ptr<FileSystemOperationContext> context = NewContext(); |
192 scoped_ptr<LoggingRecursiveOperation> operation( | 192 scoped_ptr<LoggingRecursiveOperation> operation( |
193 new LoggingRecursiveOperation( | 193 new LoggingRecursiveOperation( |
194 context->file_system_context(), src_file, | 194 context->file_system_context(), src_file, |
195 base::Bind(&ReportStatus, &error))); | 195 base::Bind(&ReportStatus, &error))); |
196 operation->RunRecursively(); | 196 operation->RunRecursively(); |
197 base::RunLoop().RunUntilIdle(); | 197 base::RunLoop().RunUntilIdle(); |
198 ASSERT_EQ(base::PLATFORM_FILE_OK, error); | 198 ASSERT_EQ(base::File::FILE_OK, error); |
199 | 199 |
200 const std::vector<LoggingRecursiveOperation::LogEntry>& log_entries = | 200 const std::vector<LoggingRecursiveOperation::LogEntry>& log_entries = |
201 operation->log_entries(); | 201 operation->log_entries(); |
202 ASSERT_EQ(1U, log_entries.size()); | 202 ASSERT_EQ(1U, log_entries.size()); |
203 const LoggingRecursiveOperation::LogEntry& entry = log_entries[0]; | 203 const LoggingRecursiveOperation::LogEntry& entry = log_entries[0]; |
204 EXPECT_EQ(LoggingRecursiveOperation::LogEntry::PROCESS_FILE, entry.type); | 204 EXPECT_EQ(LoggingRecursiveOperation::LogEntry::PROCESS_FILE, entry.type); |
205 EXPECT_EQ(src_file, entry.url); | 205 EXPECT_EQ(src_file, entry.url); |
206 } | 206 } |
207 | 207 |
208 TEST_F(RecursiveOperationDelegateTest, RootIsDirectory) { | 208 TEST_F(RecursiveOperationDelegateTest, RootIsDirectory) { |
209 FileSystemURL src_root(CreateDirectory("src")); | 209 FileSystemURL src_root(CreateDirectory("src")); |
210 FileSystemURL src_dir1(CreateDirectory("src/dir1")); | 210 FileSystemURL src_dir1(CreateDirectory("src/dir1")); |
211 FileSystemURL src_file1(CreateFile("src/file1")); | 211 FileSystemURL src_file1(CreateFile("src/file1")); |
212 FileSystemURL src_file2(CreateFile("src/dir1/file2")); | 212 FileSystemURL src_file2(CreateFile("src/dir1/file2")); |
213 FileSystemURL src_file3(CreateFile("src/dir1/file3")); | 213 FileSystemURL src_file3(CreateFile("src/dir1/file3")); |
214 | 214 |
215 base::PlatformFileError error = base::PLATFORM_FILE_ERROR_FAILED; | 215 base::File::Error error = base::File::FILE_ERROR_FAILED; |
216 scoped_ptr<FileSystemOperationContext> context = NewContext(); | 216 scoped_ptr<FileSystemOperationContext> context = NewContext(); |
217 scoped_ptr<LoggingRecursiveOperation> operation( | 217 scoped_ptr<LoggingRecursiveOperation> operation( |
218 new LoggingRecursiveOperation( | 218 new LoggingRecursiveOperation( |
219 context->file_system_context(), src_root, | 219 context->file_system_context(), src_root, |
220 base::Bind(&ReportStatus, &error))); | 220 base::Bind(&ReportStatus, &error))); |
221 operation->RunRecursively(); | 221 operation->RunRecursively(); |
222 base::RunLoop().RunUntilIdle(); | 222 base::RunLoop().RunUntilIdle(); |
223 ASSERT_EQ(base::PLATFORM_FILE_OK, error); | 223 ASSERT_EQ(base::File::FILE_OK, error); |
224 | 224 |
225 const std::vector<LoggingRecursiveOperation::LogEntry>& log_entries = | 225 const std::vector<LoggingRecursiveOperation::LogEntry>& log_entries = |
226 operation->log_entries(); | 226 operation->log_entries(); |
227 ASSERT_EQ(8U, log_entries.size()); | 227 ASSERT_EQ(8U, log_entries.size()); |
228 | 228 |
229 EXPECT_EQ(LoggingRecursiveOperation::LogEntry::PROCESS_FILE, | 229 EXPECT_EQ(LoggingRecursiveOperation::LogEntry::PROCESS_FILE, |
230 log_entries[0].type); | 230 log_entries[0].type); |
231 EXPECT_EQ(src_root, log_entries[0].url); | 231 EXPECT_EQ(src_root, log_entries[0].url); |
232 | 232 |
233 EXPECT_EQ(LoggingRecursiveOperation::LogEntry::PROCESS_DIRECTORY, | 233 EXPECT_EQ(LoggingRecursiveOperation::LogEntry::PROCESS_DIRECTORY, |
(...skipping 27 matching lines...) Expand all Loading... |
261 log_entries[7].type); | 261 log_entries[7].type); |
262 EXPECT_EQ(src_root, log_entries[7].url); | 262 EXPECT_EQ(src_root, log_entries[7].url); |
263 } | 263 } |
264 | 264 |
265 TEST_F(RecursiveOperationDelegateTest, Cancel) { | 265 TEST_F(RecursiveOperationDelegateTest, Cancel) { |
266 FileSystemURL src_root(CreateDirectory("src")); | 266 FileSystemURL src_root(CreateDirectory("src")); |
267 FileSystemURL src_dir1(CreateDirectory("src/dir1")); | 267 FileSystemURL src_dir1(CreateDirectory("src/dir1")); |
268 FileSystemURL src_file1(CreateFile("src/file1")); | 268 FileSystemURL src_file1(CreateFile("src/file1")); |
269 FileSystemURL src_file2(CreateFile("src/dir1/file2")); | 269 FileSystemURL src_file2(CreateFile("src/dir1/file2")); |
270 | 270 |
271 base::PlatformFileError error = base::PLATFORM_FILE_ERROR_FAILED; | 271 base::File::Error error = base::File::FILE_ERROR_FAILED; |
272 scoped_ptr<FileSystemOperationContext> context = NewContext(); | 272 scoped_ptr<FileSystemOperationContext> context = NewContext(); |
273 scoped_ptr<LoggingRecursiveOperation> operation( | 273 scoped_ptr<LoggingRecursiveOperation> operation( |
274 new LoggingRecursiveOperation( | 274 new LoggingRecursiveOperation( |
275 context->file_system_context(), src_root, | 275 context->file_system_context(), src_root, |
276 base::Bind(&ReportStatus, &error))); | 276 base::Bind(&ReportStatus, &error))); |
277 operation->RunRecursively(); | 277 operation->RunRecursively(); |
278 | 278 |
279 // Invoke Cancel(), after 5 times message posting. | 279 // Invoke Cancel(), after 5 times message posting. |
280 CallCancelLater(operation.get(), 5); | 280 CallCancelLater(operation.get(), 5); |
281 base::RunLoop().RunUntilIdle(); | 281 base::RunLoop().RunUntilIdle(); |
282 ASSERT_EQ(base::PLATFORM_FILE_ERROR_ABORT, error); | 282 ASSERT_EQ(base::File::FILE_ERROR_ABORT, error); |
283 } | 283 } |
284 | 284 |
285 } // namespace content | 285 } // namespace content |
OLD | NEW |