| 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 |