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

Side by Side Diff: webkit/fileapi/obfuscated_file_util_unittest.cc

Issue 7470037: [Refactor] to rename and re-layer the file_util stack layers. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Rebased on the svn tree. Created 9 years, 3 months 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 | Annotate | Revision Log
« no previous file with comments | « webkit/fileapi/obfuscated_file_util.cc ('k') | webkit/fileapi/quota_file_util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 <algorithm> 5 #include <algorithm>
6 #include <set> 6 #include <set>
7 #include <string> 7 #include <string>
8 8
9 #include "base/file_path.h" 9 #include "base/file_path.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
11 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
12 #include "base/memory/scoped_callback_factory.h" 12 #include "base/memory/scoped_callback_factory.h"
13 #include "base/message_loop.h" 13 #include "base/message_loop.h"
14 #include "base/platform_file.h" 14 #include "base/platform_file.h"
15 #include "base/scoped_temp_dir.h" 15 #include "base/scoped_temp_dir.h"
16 #include "base/sys_string_conversions.h" 16 #include "base/sys_string_conversions.h"
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 #include "webkit/fileapi/file_system_context.h" 18 #include "webkit/fileapi/file_system_context.h"
19 #include "webkit/fileapi/file_system_operation_context.h" 19 #include "webkit/fileapi/file_system_operation_context.h"
20 #include "webkit/fileapi/file_system_path_manager.h" 20 #include "webkit/fileapi/file_system_path_manager.h"
21 #include "webkit/fileapi/file_system_test_helper.h" 21 #include "webkit/fileapi/file_system_test_helper.h"
22 #include "webkit/fileapi/file_system_usage_cache.h" 22 #include "webkit/fileapi/file_system_usage_cache.h"
23 #include "webkit/fileapi/obfuscated_file_system_file_util.h" 23 #include "webkit/fileapi/obfuscated_file_util.h"
24 #include "webkit/quota/mock_special_storage_policy.h" 24 #include "webkit/quota/mock_special_storage_policy.h"
25 #include "webkit/quota/quota_manager.h" 25 #include "webkit/quota/quota_manager.h"
26 #include "webkit/quota/quota_types.h" 26 #include "webkit/quota/quota_types.h"
27 27
28 using namespace fileapi; 28 using namespace fileapi;
29 29
30 namespace { 30 namespace {
31 31
32 FilePath UTF8ToFilePath(const std::string& str) { 32 FilePath UTF8ToFilePath(const std::string& str) {
33 FilePath::StringType result; 33 FilePath::StringType result;
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 {"file://", false, true}, 121 {"file://", false, true},
122 {"http://example.com:8000", false, true}, 122 {"http://example.com:8000", false, true},
123 }; 123 };
124 124
125 } // namespace (anonymous) 125 } // namespace (anonymous)
126 126
127 // TODO(ericu): The vast majority of this and the other FSFU subclass tests 127 // TODO(ericu): The vast majority of this and the other FSFU subclass tests
128 // could theoretically be shared. It would basically be a FSFU interface 128 // could theoretically be shared. It would basically be a FSFU interface
129 // compliance test, and only the subclass-specific bits that look into the 129 // compliance test, and only the subclass-specific bits that look into the
130 // implementation would need to be written per-subclass. 130 // implementation would need to be written per-subclass.
131 class ObfuscatedFileSystemFileUtilTest : public testing::Test { 131 class ObfuscatedFileUtilTest : public testing::Test {
132 public: 132 public:
133 ObfuscatedFileSystemFileUtilTest() 133 ObfuscatedFileUtilTest()
134 : origin_(GURL("http://www.example.com")), 134 : origin_(GURL("http://www.example.com")),
135 type_(kFileSystemTypeTemporary), 135 type_(kFileSystemTypeTemporary),
136 callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), 136 callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
137 test_helper_(origin_, type_), 137 test_helper_(origin_, type_),
138 quota_status_(quota::kQuotaStatusUnknown), 138 quota_status_(quota::kQuotaStatusUnknown),
139 usage_(-1) { 139 usage_(-1) {
140 } 140 }
141 141
142 void SetUp() { 142 void SetUp() {
143 ASSERT_TRUE(data_dir_.CreateUniqueTempDir()); 143 ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
144 144
145 quota_manager_ = new quota::QuotaManager( 145 quota_manager_ = new quota::QuotaManager(
146 false /* is_incognito */, 146 false /* is_incognito */,
147 data_dir_.path(), 147 data_dir_.path(),
148 base::MessageLoopProxy::current(), 148 base::MessageLoopProxy::current(),
149 base::MessageLoopProxy::current(), 149 base::MessageLoopProxy::current(),
150 NULL /* special storage policy */); 150 NULL /* special storage policy */);
151 151
152 // Every time we create a new helper, it creates another context, which 152 // Every time we create a new helper, it creates another context, which
153 // creates another path manager, another sandbox_mount_point_provider, and 153 // creates another path manager, another sandbox_mount_point_provider, and
154 // another OFSFU. We need to pass in the context to skip all that. 154 // another OFU. We need to pass in the context to skip all that.
155 file_system_context_ = new FileSystemContext( 155 file_system_context_ = new FileSystemContext(
156 base::MessageLoopProxy::current(), 156 base::MessageLoopProxy::current(),
157 base::MessageLoopProxy::current(), 157 base::MessageLoopProxy::current(),
158 new quota::MockSpecialStoragePolicy(), 158 new quota::MockSpecialStoragePolicy(),
159 quota_manager_->proxy(), 159 quota_manager_->proxy(),
160 data_dir_.path(), 160 data_dir_.path(),
161 false /* incognito */, 161 false /* incognito */,
162 true /* allow_file_access_from_files */, 162 true /* allow_file_access_from_files */,
163 false /* unlimited_quota */, 163 false /* unlimited_quota */,
164 NULL /* path_manager */); 164 NULL /* path_manager */);
165 165
166 obfuscated_file_system_file_util_ = 166 obfuscated_file_util_ = static_cast<ObfuscatedFileUtil*>(
167 static_cast<ObfuscatedFileSystemFileUtil*>( 167 file_system_context_->path_manager()->GetFileUtil(type_));
168 file_system_context_->path_manager()->GetFileSystemFileUtil(type_));
169
170 168
171 test_helper_.SetUp(file_system_context_.get(), 169 test_helper_.SetUp(file_system_context_.get(),
172 obfuscated_file_system_file_util_.get()); 170 obfuscated_file_util_.get());
173 } 171 }
174 172
175 FileSystemOperationContext* NewContext(FileSystemTestOriginHelper* helper) { 173 FileSystemOperationContext* NewContext(FileSystemTestOriginHelper* helper) {
176 FileSystemOperationContext* context; 174 FileSystemOperationContext* context;
177 if (helper) 175 if (helper)
178 context = helper->NewOperationContext(); 176 context = helper->NewOperationContext();
179 else 177 else
180 context = test_helper_.NewOperationContext(); 178 context = test_helper_.NewOperationContext();
181 context->set_allowed_bytes_growth(1024 * 1024); // Big enough for all tests. 179 context->set_allowed_bytes_growth(1024 * 1024); // Big enough for all tests.
182 return context; 180 return context;
183 } 181 }
184 182
185 // This can only be used after SetUp has run and created file_system_context_ 183 // This can only be used after SetUp has run and created file_system_context_
186 // and obfuscated_file_system_file_util_. 184 // and obfuscated_file_util_.
187 // Use this for tests which need to run in multiple origins; we need a test 185 // Use this for tests which need to run in multiple origins; we need a test
188 // helper per origin. 186 // helper per origin.
189 FileSystemTestOriginHelper* NewHelper( 187 FileSystemTestOriginHelper* NewHelper(
190 const GURL& origin, fileapi::FileSystemType type) { 188 const GURL& origin, fileapi::FileSystemType type) {
191 FileSystemTestOriginHelper* helper = 189 FileSystemTestOriginHelper* helper =
192 new FileSystemTestOriginHelper(origin, type); 190 new FileSystemTestOriginHelper(origin, type);
193 191
194 helper->SetUp(file_system_context_.get(), 192 helper->SetUp(file_system_context_.get(),
195 obfuscated_file_system_file_util_.get()); 193 obfuscated_file_util_.get());
196 return helper; 194 return helper;
197 } 195 }
198 196
199 ObfuscatedFileSystemFileUtil* ofsfu() { 197 ObfuscatedFileUtil* ofu() {
200 return obfuscated_file_system_file_util_.get(); 198 return obfuscated_file_util_.get();
201 } 199 }
202 200
203 const FilePath& test_directory() const { 201 const FilePath& test_directory() const {
204 return data_dir_.path(); 202 return data_dir_.path();
205 } 203 }
206 204
207 const GURL& origin() const { 205 const GURL& origin() const {
208 return origin_; 206 return origin_;
209 } 207 }
210 208
211 fileapi::FileSystemType type() const { 209 fileapi::FileSystemType type() const {
212 return type_; 210 return type_;
213 } 211 }
214 212
215 void GetUsageFromQuotaManager() { 213 void GetUsageFromQuotaManager() {
216 quota_manager_->GetUsageAndQuota( 214 quota_manager_->GetUsageAndQuota(
217 origin(), test_helper_.storage_type(), 215 origin(), test_helper_.storage_type(),
218 callback_factory_.NewCallback( 216 callback_factory_.NewCallback(
219 &ObfuscatedFileSystemFileUtilTest::OnGetUsage)); 217 &ObfuscatedFileUtilTest::OnGetUsage));
220 MessageLoop::current()->RunAllPending(); 218 MessageLoop::current()->RunAllPending();
221 EXPECT_EQ(quota::kQuotaStatusOk, quota_status_); 219 EXPECT_EQ(quota::kQuotaStatusOk, quota_status_);
222 } 220 }
223 221
224 void RevokeUsageCache() { 222 void RevokeUsageCache() {
225 quota_manager_->ResetUsageTracker(test_helper_.storage_type()); 223 quota_manager_->ResetUsageTracker(test_helper_.storage_type());
226 ASSERT_TRUE(test_helper_.RevokeUsageCache()); 224 ASSERT_TRUE(test_helper_.RevokeUsageCache());
227 } 225 }
228 226
229 int64 SizeInUsageFile() { 227 int64 SizeInUsageFile() {
230 return test_helper_.GetCachedOriginUsage(); 228 return test_helper_.GetCachedOriginUsage();
231 } 229 }
232 230
233 int64 usage() const { return usage_; } 231 int64 usage() const { return usage_; }
234 232
235 void OnGetUsage(quota::QuotaStatusCode status, int64 usage, int64 unused) { 233 void OnGetUsage(quota::QuotaStatusCode status, int64 usage, int64 unused) {
236 EXPECT_EQ(quota::kQuotaStatusOk, status); 234 EXPECT_EQ(quota::kQuotaStatusOk, status);
237 quota_status_ = status; 235 quota_status_ = status;
238 usage_ = usage; 236 usage_ = usage;
239 } 237 }
240 238
241 void CheckFileAndCloseHandle( 239 void CheckFileAndCloseHandle(
242 const FilePath& virtual_path, PlatformFile file_handle) { 240 const FilePath& virtual_path, PlatformFile file_handle) {
243 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); 241 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
244 FilePath local_path; 242 FilePath local_path;
245 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetLocalFilePath( 243 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetLocalFilePath(
246 context.get(), virtual_path, &local_path)); 244 context.get(), virtual_path, &local_path));
247 245
248 base::PlatformFileInfo file_info0; 246 base::PlatformFileInfo file_info0;
249 FilePath data_path; 247 FilePath data_path;
250 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetFileInfo( 248 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetFileInfo(
251 context.get(), virtual_path, &file_info0, &data_path)); 249 context.get(), virtual_path, &file_info0, &data_path));
252 EXPECT_EQ(data_path, local_path); 250 EXPECT_EQ(data_path, local_path);
253 EXPECT_TRUE(FileExists(data_path)); 251 EXPECT_TRUE(FileExists(data_path));
254 EXPECT_EQ(0, GetSize(data_path)); 252 EXPECT_EQ(0, GetSize(data_path));
255 253
256 const char data[] = "test data"; 254 const char data[] = "test data";
257 const int length = arraysize(data) - 1; 255 const int length = arraysize(data) - 1;
258 256
259 if (base::kInvalidPlatformFileValue == file_handle) { 257 if (base::kInvalidPlatformFileValue == file_handle) {
260 bool created = true; 258 bool created = true;
261 PlatformFileError error; 259 PlatformFileError error;
262 file_handle = base::CreatePlatformFile( 260 file_handle = base::CreatePlatformFile(
263 data_path, 261 data_path,
264 base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_WRITE, 262 base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_WRITE,
265 &created, 263 &created,
266 &error); 264 &error);
267 ASSERT_NE(base::kInvalidPlatformFileValue, file_handle); 265 ASSERT_NE(base::kInvalidPlatformFileValue, file_handle);
268 ASSERT_EQ(base::PLATFORM_FILE_OK, error); 266 ASSERT_EQ(base::PLATFORM_FILE_OK, error);
269 EXPECT_FALSE(created); 267 EXPECT_FALSE(created);
270 } 268 }
271 ASSERT_EQ(length, base::WritePlatformFile(file_handle, 0, data, length)); 269 ASSERT_EQ(length, base::WritePlatformFile(file_handle, 0, data, length));
272 EXPECT_TRUE(base::ClosePlatformFile(file_handle)); 270 EXPECT_TRUE(base::ClosePlatformFile(file_handle));
273 271
274 base::PlatformFileInfo file_info1; 272 base::PlatformFileInfo file_info1;
275 EXPECT_EQ(length, GetSize(data_path)); 273 EXPECT_EQ(length, GetSize(data_path));
276 context.reset(NewContext(NULL)); 274 context.reset(NewContext(NULL));
277 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetFileInfo( 275 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetFileInfo(
278 context.get(), virtual_path, &file_info1, &data_path)); 276 context.get(), virtual_path, &file_info1, &data_path));
279 EXPECT_EQ(data_path, local_path); 277 EXPECT_EQ(data_path, local_path);
280 278
281 EXPECT_FALSE(file_info0.is_directory); 279 EXPECT_FALSE(file_info0.is_directory);
282 EXPECT_FALSE(file_info1.is_directory); 280 EXPECT_FALSE(file_info1.is_directory);
283 EXPECT_FALSE(file_info0.is_symbolic_link); 281 EXPECT_FALSE(file_info0.is_symbolic_link);
284 EXPECT_FALSE(file_info1.is_symbolic_link); 282 EXPECT_FALSE(file_info1.is_symbolic_link);
285 EXPECT_EQ(0, file_info0.size); 283 EXPECT_EQ(0, file_info0.size);
286 EXPECT_EQ(length, file_info1.size); 284 EXPECT_EQ(length, file_info1.size);
287 EXPECT_LE(file_info0.last_modified, file_info1.last_modified); 285 EXPECT_LE(file_info0.last_modified, file_info1.last_modified);
288 286
289 context.reset(NewContext(NULL)); 287 context.reset(NewContext(NULL));
290 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->Truncate( 288 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->Truncate(
291 context.get(), virtual_path, length * 2)); 289 context.get(), virtual_path, length * 2));
292 EXPECT_EQ(length * 2, GetSize(data_path)); 290 EXPECT_EQ(length * 2, GetSize(data_path));
293 291
294 context.reset(NewContext(NULL)); 292 context.reset(NewContext(NULL));
295 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->Truncate( 293 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->Truncate(
296 context.get(), virtual_path, 0)); 294 context.get(), virtual_path, 0));
297 EXPECT_EQ(0, GetSize(data_path)); 295 EXPECT_EQ(0, GetSize(data_path));
298 } 296 }
299 297
300 void ValidateTestDirectory( 298 void ValidateTestDirectory(
301 const FilePath& root_path, 299 const FilePath& root_path,
302 const std::set<FilePath::StringType>& files, 300 const std::set<FilePath::StringType>& files,
303 const std::set<FilePath::StringType>& directories) { 301 const std::set<FilePath::StringType>& directories) {
304 scoped_ptr<FileSystemOperationContext> context; 302 scoped_ptr<FileSystemOperationContext> context;
305 std::set<FilePath::StringType>::const_iterator iter; 303 std::set<FilePath::StringType>::const_iterator iter;
306 for (iter = files.begin(); iter != files.end(); ++iter) { 304 for (iter = files.begin(); iter != files.end(); ++iter) {
307 bool created = true; 305 bool created = true;
308 context.reset(NewContext(NULL)); 306 context.reset(NewContext(NULL));
309 ASSERT_EQ(base::PLATFORM_FILE_OK, 307 ASSERT_EQ(base::PLATFORM_FILE_OK,
310 ofsfu()->EnsureFileExists( 308 ofu()->EnsureFileExists(
311 context.get(), root_path.Append(*iter), 309 context.get(), root_path.Append(*iter),
312 &created)); 310 &created));
313 ASSERT_FALSE(created); 311 ASSERT_FALSE(created);
314 } 312 }
315 for (iter = directories.begin(); iter != directories.end(); ++iter) { 313 for (iter = directories.begin(); iter != directories.end(); ++iter) {
316 context.reset(NewContext(NULL)); 314 context.reset(NewContext(NULL));
317 EXPECT_TRUE(ofsfu()->DirectoryExists(context.get(), 315 EXPECT_TRUE(ofu()->DirectoryExists(context.get(),
318 root_path.Append(*iter))); 316 root_path.Append(*iter)));
319 } 317 }
320 } 318 }
321 319
322 void FillTestDirectory( 320 void FillTestDirectory(
323 const FilePath& root_path, 321 const FilePath& root_path,
324 std::set<FilePath::StringType>* files, 322 std::set<FilePath::StringType>* files,
325 std::set<FilePath::StringType>* directories) { 323 std::set<FilePath::StringType>* directories) {
326 scoped_ptr<FileSystemOperationContext> context; 324 scoped_ptr<FileSystemOperationContext> context;
327 context.reset(NewContext(NULL)); 325 context.reset(NewContext(NULL));
328 std::vector<base::FileUtilProxy::Entry> entries; 326 std::vector<base::FileUtilProxy::Entry> entries;
329 EXPECT_EQ(base::PLATFORM_FILE_OK, 327 EXPECT_EQ(base::PLATFORM_FILE_OK,
330 ofsfu()->ReadDirectory(context.get(), root_path, &entries)); 328 ofu()->ReadDirectory(context.get(), root_path, &entries));
331 EXPECT_EQ(0UL, entries.size()); 329 EXPECT_EQ(0UL, entries.size());
332 330
333 files->clear(); 331 files->clear();
334 files->insert(FILE_PATH_LITERAL("first")); 332 files->insert(FILE_PATH_LITERAL("first"));
335 files->insert(FILE_PATH_LITERAL("second")); 333 files->insert(FILE_PATH_LITERAL("second"));
336 files->insert(FILE_PATH_LITERAL("third")); 334 files->insert(FILE_PATH_LITERAL("third"));
337 directories->clear(); 335 directories->clear();
338 directories->insert(FILE_PATH_LITERAL("fourth")); 336 directories->insert(FILE_PATH_LITERAL("fourth"));
339 directories->insert(FILE_PATH_LITERAL("fifth")); 337 directories->insert(FILE_PATH_LITERAL("fifth"));
340 directories->insert(FILE_PATH_LITERAL("sixth")); 338 directories->insert(FILE_PATH_LITERAL("sixth"));
341 std::set<FilePath::StringType>::iterator iter; 339 std::set<FilePath::StringType>::iterator iter;
342 for (iter = files->begin(); iter != files->end(); ++iter) { 340 for (iter = files->begin(); iter != files->end(); ++iter) {
343 bool created = false; 341 bool created = false;
344 context.reset(NewContext(NULL)); 342 context.reset(NewContext(NULL));
345 ASSERT_EQ(base::PLATFORM_FILE_OK, 343 ASSERT_EQ(base::PLATFORM_FILE_OK,
346 ofsfu()->EnsureFileExists( 344 ofu()->EnsureFileExists(
347 context.get(), root_path.Append(*iter), &created)); 345 context.get(), root_path.Append(*iter), &created));
348 ASSERT_TRUE(created); 346 ASSERT_TRUE(created);
349 } 347 }
350 for (iter = directories->begin(); iter != directories->end(); ++iter) { 348 for (iter = directories->begin(); iter != directories->end(); ++iter) {
351 bool exclusive = true; 349 bool exclusive = true;
352 bool recursive = false; 350 bool recursive = false;
353 context.reset(NewContext(NULL)); 351 context.reset(NewContext(NULL));
354 EXPECT_EQ(base::PLATFORM_FILE_OK, 352 EXPECT_EQ(base::PLATFORM_FILE_OK,
355 ofsfu()->CreateDirectory( 353 ofu()->CreateDirectory(
356 context.get(), root_path.Append(*iter), exclusive, recursive)); 354 context.get(), root_path.Append(*iter), exclusive, recursive));
357 } 355 }
358 ValidateTestDirectory(root_path, *files, *directories); 356 ValidateTestDirectory(root_path, *files, *directories);
359 } 357 }
360 358
361 void TestReadDirectoryHelper(const FilePath& root_path) { 359 void TestReadDirectoryHelper(const FilePath& root_path) {
362 std::set<FilePath::StringType> files; 360 std::set<FilePath::StringType> files;
363 std::set<FilePath::StringType> directories; 361 std::set<FilePath::StringType> directories;
364 FillTestDirectory(root_path, &files, &directories); 362 FillTestDirectory(root_path, &files, &directories);
365 363
366 scoped_ptr<FileSystemOperationContext> context; 364 scoped_ptr<FileSystemOperationContext> context;
367 std::vector<base::FileUtilProxy::Entry> entries; 365 std::vector<base::FileUtilProxy::Entry> entries;
368 context.reset(NewContext(NULL)); 366 context.reset(NewContext(NULL));
369 EXPECT_EQ(base::PLATFORM_FILE_OK, 367 EXPECT_EQ(base::PLATFORM_FILE_OK,
370 ofsfu()->ReadDirectory(context.get(), root_path, &entries)); 368 ofu()->ReadDirectory(context.get(), root_path, &entries));
371 std::vector<base::FileUtilProxy::Entry>::iterator entry_iter; 369 std::vector<base::FileUtilProxy::Entry>::iterator entry_iter;
372 EXPECT_EQ(files.size() + directories.size(), entries.size()); 370 EXPECT_EQ(files.size() + directories.size(), entries.size());
373 for (entry_iter = entries.begin(); entry_iter != entries.end(); 371 for (entry_iter = entries.begin(); entry_iter != entries.end();
374 ++entry_iter) { 372 ++entry_iter) {
375 const base::FileUtilProxy::Entry& entry = *entry_iter; 373 const base::FileUtilProxy::Entry& entry = *entry_iter;
376 std::set<FilePath::StringType>::iterator iter = files.find(entry.name); 374 std::set<FilePath::StringType>::iterator iter = files.find(entry.name);
377 if (iter != files.end()) { 375 if (iter != files.end()) {
378 EXPECT_FALSE(entry.is_directory); 376 EXPECT_FALSE(entry.is_directory);
379 files.erase(iter); 377 files.erase(iter);
380 continue; 378 continue;
381 } 379 }
382 iter = directories.find(entry.name); 380 iter = directories.find(entry.name);
383 EXPECT_FALSE(directories.end() == iter); 381 EXPECT_FALSE(directories.end() == iter);
384 EXPECT_TRUE(entry.is_directory); 382 EXPECT_TRUE(entry.is_directory);
385 directories.erase(iter); 383 directories.erase(iter);
386 } 384 }
387 } 385 }
388 386
389 void TestTouchHelper(const FilePath& path, bool is_file) { 387 void TestTouchHelper(const FilePath& path, bool is_file) {
390 base::Time last_access_time = base::Time::Now(); 388 base::Time last_access_time = base::Time::Now();
391 base::Time last_modified_time = base::Time::Now(); 389 base::Time last_modified_time = base::Time::Now();
392 390
393 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); 391 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
394 EXPECT_EQ(base::PLATFORM_FILE_OK, 392 EXPECT_EQ(base::PLATFORM_FILE_OK,
395 ofsfu()->Touch( 393 ofu()->Touch(
396 context.get(), path, last_access_time, last_modified_time)); 394 context.get(), path, last_access_time, last_modified_time));
397 FilePath local_path; 395 FilePath local_path;
398 base::PlatformFileInfo file_info; 396 base::PlatformFileInfo file_info;
399 context.reset(NewContext(NULL)); 397 context.reset(NewContext(NULL));
400 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetFileInfo( 398 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetFileInfo(
401 context.get(), path, &file_info, &local_path)); 399 context.get(), path, &file_info, &local_path));
402 // We compare as time_t here to lower our resolution, to avoid false 400 // We compare as time_t here to lower our resolution, to avoid false
403 // negatives caused by conversion to the local filesystem's native 401 // negatives caused by conversion to the local filesystem's native
404 // representation and back. 402 // representation and back.
405 EXPECT_EQ(file_info.last_modified.ToTimeT(), last_modified_time.ToTimeT()); 403 EXPECT_EQ(file_info.last_modified.ToTimeT(), last_modified_time.ToTimeT());
406 404
407 context.reset(NewContext(NULL)); 405 context.reset(NewContext(NULL));
408 last_modified_time += base::TimeDelta::FromHours(1); 406 last_modified_time += base::TimeDelta::FromHours(1);
409 last_access_time += base::TimeDelta::FromHours(14); 407 last_access_time += base::TimeDelta::FromHours(14);
410 EXPECT_EQ(base::PLATFORM_FILE_OK, 408 EXPECT_EQ(base::PLATFORM_FILE_OK,
411 ofsfu()->Touch( 409 ofu()->Touch(
412 context.get(), path, last_access_time, last_modified_time)); 410 context.get(), path, last_access_time, last_modified_time));
413 context.reset(NewContext(NULL)); 411 context.reset(NewContext(NULL));
414 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetFileInfo( 412 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetFileInfo(
415 context.get(), path, &file_info, &local_path)); 413 context.get(), path, &file_info, &local_path));
416 EXPECT_EQ(file_info.last_modified.ToTimeT(), last_modified_time.ToTimeT()); 414 EXPECT_EQ(file_info.last_modified.ToTimeT(), last_modified_time.ToTimeT());
417 if (is_file) // Directories in OFSFU don't support atime. 415 if (is_file) // Directories in OFU don't support atime.
418 EXPECT_EQ(file_info.last_accessed.ToTimeT(), last_access_time.ToTimeT()); 416 EXPECT_EQ(file_info.last_accessed.ToTimeT(), last_access_time.ToTimeT());
419 } 417 }
420 418
421 void TestCopyInForeignFileHelper(bool overwrite) { 419 void TestCopyInForeignFileHelper(bool overwrite) {
422 ScopedTempDir source_dir; 420 ScopedTempDir source_dir;
423 ASSERT_TRUE(source_dir.CreateUniqueTempDir()); 421 ASSERT_TRUE(source_dir.CreateUniqueTempDir());
424 FilePath root_path = source_dir.path(); 422 FilePath root_path = source_dir.path();
425 FilePath src_path = root_path.AppendASCII("file_name"); 423 FilePath src_path = root_path.AppendASCII("file_name");
426 FilePath dest_path(FILE_PATH_LITERAL("new file")); 424 FilePath dest_path(FILE_PATH_LITERAL("new file"));
427 int64 src_file_length = 87; 425 int64 src_file_length = 87;
428 426
429 base::PlatformFileError error_code; 427 base::PlatformFileError error_code;
430 bool created = false; 428 bool created = false;
431 int file_flags = base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE; 429 int file_flags = base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE;
432 base::PlatformFile file_handle = 430 base::PlatformFile file_handle =
433 base::CreatePlatformFile( 431 base::CreatePlatformFile(
434 src_path, file_flags, &created, &error_code); 432 src_path, file_flags, &created, &error_code);
435 EXPECT_TRUE(created); 433 EXPECT_TRUE(created);
436 ASSERT_EQ(base::PLATFORM_FILE_OK, error_code); 434 ASSERT_EQ(base::PLATFORM_FILE_OK, error_code);
437 ASSERT_NE(base::kInvalidPlatformFileValue, file_handle); 435 ASSERT_NE(base::kInvalidPlatformFileValue, file_handle);
438 ASSERT_TRUE(base::TruncatePlatformFile(file_handle, src_file_length)); 436 ASSERT_TRUE(base::TruncatePlatformFile(file_handle, src_file_length));
439 EXPECT_TRUE(base::ClosePlatformFile(file_handle)); 437 EXPECT_TRUE(base::ClosePlatformFile(file_handle));
440 438
441 scoped_ptr<FileSystemOperationContext> context; 439 scoped_ptr<FileSystemOperationContext> context;
442 440
443 if (overwrite) { 441 if (overwrite) {
444 context.reset(NewContext(NULL)); 442 context.reset(NewContext(NULL));
445 EXPECT_EQ(base::PLATFORM_FILE_OK, 443 EXPECT_EQ(base::PLATFORM_FILE_OK,
446 ofsfu()->EnsureFileExists(context.get(), dest_path, &created)); 444 ofu()->EnsureFileExists(context.get(), dest_path, &created));
447 EXPECT_TRUE(created); 445 EXPECT_TRUE(created);
448 } 446 }
449 447
450 const int64 path_cost = 448 const int64 path_cost =
451 ObfuscatedFileSystemFileUtil::ComputeFilePathCost(dest_path); 449 ObfuscatedFileUtil::ComputeFilePathCost(dest_path);
452 if (!overwrite) { 450 if (!overwrite) {
453 // Verify that file creation requires sufficient quota for the path. 451 // Verify that file creation requires sufficient quota for the path.
454 context.reset(NewContext(NULL)); 452 context.reset(NewContext(NULL));
455 context->set_allowed_bytes_growth(path_cost + src_file_length - 1); 453 context->set_allowed_bytes_growth(path_cost + src_file_length - 1);
456 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, 454 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE,
457 ofsfu()->CopyInForeignFile(context.get(), src_path, dest_path)); 455 ofu()->CopyInForeignFile(context.get(), src_path, dest_path));
458 } 456 }
459 457
460 context.reset(NewContext(NULL)); 458 context.reset(NewContext(NULL));
461 context->set_allowed_bytes_growth(path_cost + src_file_length); 459 context->set_allowed_bytes_growth(path_cost + src_file_length);
462 EXPECT_EQ(base::PLATFORM_FILE_OK, 460 EXPECT_EQ(base::PLATFORM_FILE_OK,
463 ofsfu()->CopyInForeignFile(context.get(), src_path, dest_path)); 461 ofu()->CopyInForeignFile(context.get(), src_path, dest_path));
464 462
465 context.reset(NewContext(NULL)); 463 context.reset(NewContext(NULL));
466 EXPECT_TRUE(ofsfu()->PathExists(context.get(), dest_path)); 464 EXPECT_TRUE(ofu()->PathExists(context.get(), dest_path));
467 context.reset(NewContext(NULL)); 465 context.reset(NewContext(NULL));
468 EXPECT_FALSE(ofsfu()->DirectoryExists(context.get(), dest_path)); 466 EXPECT_FALSE(ofu()->DirectoryExists(context.get(), dest_path));
469 context.reset(NewContext(NULL)); 467 context.reset(NewContext(NULL));
470 base::PlatformFileInfo file_info; 468 base::PlatformFileInfo file_info;
471 FilePath data_path; 469 FilePath data_path;
472 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetFileInfo( 470 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetFileInfo(
473 context.get(), dest_path, &file_info, &data_path)); 471 context.get(), dest_path, &file_info, &data_path));
474 EXPECT_NE(data_path, src_path); 472 EXPECT_NE(data_path, src_path);
475 EXPECT_TRUE(FileExists(data_path)); 473 EXPECT_TRUE(FileExists(data_path));
476 EXPECT_EQ(src_file_length, GetSize(data_path)); 474 EXPECT_EQ(src_file_length, GetSize(data_path));
477 475
478 EXPECT_EQ(base::PLATFORM_FILE_OK, 476 EXPECT_EQ(base::PLATFORM_FILE_OK,
479 ofsfu()->DeleteFile(context.get(), dest_path)); 477 ofu()->DeleteFile(context.get(), dest_path));
480 } 478 }
481 479
482 private: 480 private:
483 ScopedTempDir data_dir_; 481 ScopedTempDir data_dir_;
484 scoped_refptr<ObfuscatedFileSystemFileUtil> obfuscated_file_system_file_util_; 482 scoped_refptr<ObfuscatedFileUtil> obfuscated_file_util_;
485 scoped_refptr<quota::QuotaManager> quota_manager_; 483 scoped_refptr<quota::QuotaManager> quota_manager_;
486 scoped_refptr<FileSystemContext> file_system_context_; 484 scoped_refptr<FileSystemContext> file_system_context_;
487 GURL origin_; 485 GURL origin_;
488 fileapi::FileSystemType type_; 486 fileapi::FileSystemType type_;
489 base::ScopedCallbackFactory<ObfuscatedFileSystemFileUtilTest> 487 base::ScopedCallbackFactory<ObfuscatedFileUtilTest>
490 callback_factory_; 488 callback_factory_;
491 FileSystemTestOriginHelper test_helper_; 489 FileSystemTestOriginHelper test_helper_;
492 quota::QuotaStatusCode quota_status_; 490 quota::QuotaStatusCode quota_status_;
493 int64 usage_; 491 int64 usage_;
494 492
495 DISALLOW_COPY_AND_ASSIGN(ObfuscatedFileSystemFileUtilTest); 493 DISALLOW_COPY_AND_ASSIGN(ObfuscatedFileUtilTest);
496 }; 494 };
497 495
498 TEST_F(ObfuscatedFileSystemFileUtilTest, TestCreateAndDeleteFile) { 496 TEST_F(ObfuscatedFileUtilTest, TestCreateAndDeleteFile) {
499 base::PlatformFile file_handle = base::kInvalidPlatformFileValue; 497 base::PlatformFile file_handle = base::kInvalidPlatformFileValue;
500 bool created; 498 bool created;
501 FilePath path = UTF8ToFilePath("fake/file"); 499 FilePath path = UTF8ToFilePath("fake/file");
502 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); 500 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
503 int file_flags = base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE; 501 int file_flags = base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE;
504 502
505 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, 503 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
506 ofsfu()->CreateOrOpen( 504 ofu()->CreateOrOpen(
507 context.get(), path, file_flags, &file_handle, 505 context.get(), path, file_flags, &file_handle,
508 &created)); 506 &created));
509 507
510 context.reset(NewContext(NULL)); 508 context.reset(NewContext(NULL));
511 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, 509 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
512 ofsfu()->DeleteFile(context.get(), path)); 510 ofu()->DeleteFile(context.get(), path));
513 511
514 path = UTF8ToFilePath("test file"); 512 path = UTF8ToFilePath("test file");
515 513
516 // Verify that file creation requires sufficient quota for the path. 514 // Verify that file creation requires sufficient quota for the path.
517 context.reset(NewContext(NULL)); 515 context.reset(NewContext(NULL));
518 context->set_allowed_bytes_growth( 516 context->set_allowed_bytes_growth(
519 ObfuscatedFileSystemFileUtil::ComputeFilePathCost(path) - 1); 517 ObfuscatedFileUtil::ComputeFilePathCost(path) - 1);
520 ASSERT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, 518 ASSERT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE,
521 ofsfu()->CreateOrOpen( 519 ofu()->CreateOrOpen(
522 context.get(), path, file_flags, &file_handle, &created)); 520 context.get(), path, file_flags, &file_handle, &created));
523 521
524 context.reset(NewContext(NULL)); 522 context.reset(NewContext(NULL));
525 context->set_allowed_bytes_growth( 523 context->set_allowed_bytes_growth(
526 ObfuscatedFileSystemFileUtil::ComputeFilePathCost(path)); 524 ObfuscatedFileUtil::ComputeFilePathCost(path));
527 ASSERT_EQ(base::PLATFORM_FILE_OK, 525 ASSERT_EQ(base::PLATFORM_FILE_OK,
528 ofsfu()->CreateOrOpen( 526 ofu()->CreateOrOpen(
529 context.get(), path, file_flags, &file_handle, &created)); 527 context.get(), path, file_flags, &file_handle, &created));
530 ASSERT_TRUE(created); 528 ASSERT_TRUE(created);
531 EXPECT_NE(base::kInvalidPlatformFileValue, file_handle); 529 EXPECT_NE(base::kInvalidPlatformFileValue, file_handle);
532 530
533 CheckFileAndCloseHandle(path, file_handle); 531 CheckFileAndCloseHandle(path, file_handle);
534 532
535 context.reset(NewContext(NULL)); 533 context.reset(NewContext(NULL));
536 FilePath local_path; 534 FilePath local_path;
537 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetLocalFilePath( 535 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetLocalFilePath(
538 context.get(), path, &local_path)); 536 context.get(), path, &local_path));
539 EXPECT_TRUE(file_util::PathExists(local_path)); 537 EXPECT_TRUE(file_util::PathExists(local_path));
540 538
541 // Verify that deleting a file isn't stopped by zero quota, and that it frees 539 // Verify that deleting a file isn't stopped by zero quota, and that it frees
542 // up quote from its path. 540 // up quote from its path.
543 context.reset(NewContext(NULL)); 541 context.reset(NewContext(NULL));
544 context->set_allowed_bytes_growth(0); 542 context->set_allowed_bytes_growth(0);
545 EXPECT_EQ(base::PLATFORM_FILE_OK, 543 EXPECT_EQ(base::PLATFORM_FILE_OK,
546 ofsfu()->DeleteFile(context.get(), path)); 544 ofu()->DeleteFile(context.get(), path));
547 EXPECT_FALSE(file_util::PathExists(local_path)); 545 EXPECT_FALSE(file_util::PathExists(local_path));
548 EXPECT_EQ(ObfuscatedFileSystemFileUtil::ComputeFilePathCost(path), 546 EXPECT_EQ(ObfuscatedFileUtil::ComputeFilePathCost(path),
549 context->allowed_bytes_growth()); 547 context->allowed_bytes_growth());
550 548
551 context.reset(NewContext(NULL)); 549 context.reset(NewContext(NULL));
552 bool exclusive = true; 550 bool exclusive = true;
553 bool recursive = true; 551 bool recursive = true;
554 FilePath directory_path = UTF8ToFilePath("series/of/directories"); 552 FilePath directory_path = UTF8ToFilePath("series/of/directories");
555 path = directory_path.AppendASCII("file name"); 553 path = directory_path.AppendASCII("file name");
556 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory( 554 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
557 context.get(), directory_path, exclusive, recursive)); 555 context.get(), directory_path, exclusive, recursive));
558 556
559 context.reset(NewContext(NULL)); 557 context.reset(NewContext(NULL));
560 file_handle = base::kInvalidPlatformFileValue; 558 file_handle = base::kInvalidPlatformFileValue;
561 ASSERT_EQ(base::PLATFORM_FILE_OK, 559 ASSERT_EQ(base::PLATFORM_FILE_OK,
562 ofsfu()->CreateOrOpen( 560 ofu()->CreateOrOpen(
563 context.get(), path, file_flags, &file_handle, &created)); 561 context.get(), path, file_flags, &file_handle, &created));
564 ASSERT_TRUE(created); 562 ASSERT_TRUE(created);
565 EXPECT_NE(base::kInvalidPlatformFileValue, file_handle); 563 EXPECT_NE(base::kInvalidPlatformFileValue, file_handle);
566 564
567 CheckFileAndCloseHandle(path, file_handle); 565 CheckFileAndCloseHandle(path, file_handle);
568 566
569 context.reset(NewContext(NULL)); 567 context.reset(NewContext(NULL));
570 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetLocalFilePath( 568 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetLocalFilePath(
571 context.get(), path, &local_path)); 569 context.get(), path, &local_path));
572 EXPECT_TRUE(file_util::PathExists(local_path)); 570 EXPECT_TRUE(file_util::PathExists(local_path));
573 571
574 context.reset(NewContext(NULL)); 572 context.reset(NewContext(NULL));
575 EXPECT_EQ(base::PLATFORM_FILE_OK, 573 EXPECT_EQ(base::PLATFORM_FILE_OK,
576 ofsfu()->DeleteFile(context.get(), path)); 574 ofu()->DeleteFile(context.get(), path));
577 EXPECT_FALSE(file_util::PathExists(local_path)); 575 EXPECT_FALSE(file_util::PathExists(local_path));
578 } 576 }
579 577
580 TEST_F(ObfuscatedFileSystemFileUtilTest, TestTruncate) { 578 TEST_F(ObfuscatedFileUtilTest, TestTruncate) {
581 bool created = false; 579 bool created = false;
582 FilePath path = UTF8ToFilePath("file"); 580 FilePath path = UTF8ToFilePath("file");
583 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); 581 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
584 582
585 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, 583 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
586 ofsfu()->Truncate(context.get(), path, 4)); 584 ofu()->Truncate(context.get(), path, 4));
587 585
588 context.reset(NewContext(NULL)); 586 context.reset(NewContext(NULL));
589 ASSERT_EQ(base::PLATFORM_FILE_OK, 587 ASSERT_EQ(base::PLATFORM_FILE_OK,
590 ofsfu()->EnsureFileExists(context.get(), path, &created)); 588 ofu()->EnsureFileExists(context.get(), path, &created));
591 ASSERT_TRUE(created); 589 ASSERT_TRUE(created);
592 590
593 context.reset(NewContext(NULL)); 591 context.reset(NewContext(NULL));
594 FilePath local_path; 592 FilePath local_path;
595 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetLocalFilePath( 593 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetLocalFilePath(
596 context.get(), path, &local_path)); 594 context.get(), path, &local_path));
597 EXPECT_EQ(0, GetSize(local_path)); 595 EXPECT_EQ(0, GetSize(local_path));
598 596
599 context.reset(NewContext(NULL)); 597 context.reset(NewContext(NULL));
600 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->Truncate( 598 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->Truncate(
601 context.get(), path, 10)); 599 context.get(), path, 10));
602 EXPECT_EQ(10, GetSize(local_path)); 600 EXPECT_EQ(10, GetSize(local_path));
603 601
604 context.reset(NewContext(NULL)); 602 context.reset(NewContext(NULL));
605 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->Truncate( 603 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->Truncate(
606 context.get(), path, 1)); 604 context.get(), path, 1));
607 EXPECT_EQ(1, GetSize(local_path)); 605 EXPECT_EQ(1, GetSize(local_path));
608 606
609 context.reset(NewContext(NULL)); 607 context.reset(NewContext(NULL));
610 EXPECT_FALSE(ofsfu()->DirectoryExists(context.get(), path)); 608 EXPECT_FALSE(ofu()->DirectoryExists(context.get(), path));
611 context.reset(NewContext(NULL)); 609 context.reset(NewContext(NULL));
612 EXPECT_TRUE(ofsfu()->PathExists(context.get(), path)); 610 EXPECT_TRUE(ofu()->PathExists(context.get(), path));
613 } 611 }
614 612
615 TEST_F(ObfuscatedFileSystemFileUtilTest, TestEnsureFileExists) { 613 TEST_F(ObfuscatedFileUtilTest, TestEnsureFileExists) {
616 FilePath path = UTF8ToFilePath("fake/file"); 614 FilePath path = UTF8ToFilePath("fake/file");
617 bool created = false; 615 bool created = false;
618 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); 616 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
619 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, 617 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
620 ofsfu()->EnsureFileExists( 618 ofu()->EnsureFileExists(
621 context.get(), path, &created)); 619 context.get(), path, &created));
622 620
623 // Verify that file creation requires sufficient quota for the path. 621 // Verify that file creation requires sufficient quota for the path.
624 context.reset(NewContext(NULL)); 622 context.reset(NewContext(NULL));
625 path = UTF8ToFilePath("test file"); 623 path = UTF8ToFilePath("test file");
626 created = false; 624 created = false;
627 context->set_allowed_bytes_growth( 625 context->set_allowed_bytes_growth(
628 ObfuscatedFileSystemFileUtil::ComputeFilePathCost(path) - 1); 626 ObfuscatedFileUtil::ComputeFilePathCost(path) - 1);
629 ASSERT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, 627 ASSERT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE,
630 ofsfu()->EnsureFileExists(context.get(), path, &created)); 628 ofu()->EnsureFileExists(context.get(), path, &created));
631 ASSERT_FALSE(created); 629 ASSERT_FALSE(created);
632 630
633 context.reset(NewContext(NULL)); 631 context.reset(NewContext(NULL));
634 context->set_allowed_bytes_growth( 632 context->set_allowed_bytes_growth(
635 ObfuscatedFileSystemFileUtil::ComputeFilePathCost(path)); 633 ObfuscatedFileUtil::ComputeFilePathCost(path));
636 ASSERT_EQ(base::PLATFORM_FILE_OK, 634 ASSERT_EQ(base::PLATFORM_FILE_OK,
637 ofsfu()->EnsureFileExists(context.get(), path, &created)); 635 ofu()->EnsureFileExists(context.get(), path, &created));
638 ASSERT_TRUE(created); 636 ASSERT_TRUE(created);
639 637
640 CheckFileAndCloseHandle(path, base::kInvalidPlatformFileValue); 638 CheckFileAndCloseHandle(path, base::kInvalidPlatformFileValue);
641 639
642 context.reset(NewContext(NULL)); 640 context.reset(NewContext(NULL));
643 ASSERT_EQ(base::PLATFORM_FILE_OK, 641 ASSERT_EQ(base::PLATFORM_FILE_OK,
644 ofsfu()->EnsureFileExists(context.get(), path, &created)); 642 ofu()->EnsureFileExists(context.get(), path, &created));
645 ASSERT_FALSE(created); 643 ASSERT_FALSE(created);
646 644
647 // Also test in a subdirectory. 645 // Also test in a subdirectory.
648 path = UTF8ToFilePath("path/to/file.txt"); 646 path = UTF8ToFilePath("path/to/file.txt");
649 context.reset(NewContext(NULL)); 647 context.reset(NewContext(NULL));
650 bool exclusive = true; 648 bool exclusive = true;
651 bool recursive = true; 649 bool recursive = true;
652 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory( 650 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
653 context.get(), path.DirName(), exclusive, recursive)); 651 context.get(), path.DirName(), exclusive, recursive));
654 652
655 context.reset(NewContext(NULL)); 653 context.reset(NewContext(NULL));
656 ASSERT_EQ(base::PLATFORM_FILE_OK, 654 ASSERT_EQ(base::PLATFORM_FILE_OK,
657 ofsfu()->EnsureFileExists(context.get(), path, &created)); 655 ofu()->EnsureFileExists(context.get(), path, &created));
658 ASSERT_TRUE(created); 656 ASSERT_TRUE(created);
659 context.reset(NewContext(NULL)); 657 context.reset(NewContext(NULL));
660 EXPECT_FALSE(ofsfu()->DirectoryExists(context.get(), path)); 658 EXPECT_FALSE(ofu()->DirectoryExists(context.get(), path));
661 context.reset(NewContext(NULL)); 659 context.reset(NewContext(NULL));
662 EXPECT_TRUE(ofsfu()->PathExists(context.get(), path)); 660 EXPECT_TRUE(ofu()->PathExists(context.get(), path));
663 } 661 }
664 662
665 TEST_F(ObfuscatedFileSystemFileUtilTest, TestDirectoryOps) { 663 TEST_F(ObfuscatedFileUtilTest, TestDirectoryOps) {
666 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); 664 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
667 665
668 bool exclusive = false; 666 bool exclusive = false;
669 bool recursive = false; 667 bool recursive = false;
670 FilePath path = UTF8ToFilePath("foo/bar"); 668 FilePath path = UTF8ToFilePath("foo/bar");
671 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, ofsfu()->CreateDirectory( 669 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, ofu()->CreateDirectory(
672 context.get(), path, exclusive, recursive)); 670 context.get(), path, exclusive, recursive));
673 671
674 context.reset(NewContext(NULL)); 672 context.reset(NewContext(NULL));
675 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, 673 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
676 ofsfu()->DeleteSingleDirectory(context.get(), path)); 674 ofu()->DeleteSingleDirectory(context.get(), path));
677 675
678 FilePath root = UTF8ToFilePath(""); 676 FilePath root = UTF8ToFilePath("");
679 context.reset(NewContext(NULL)); 677 context.reset(NewContext(NULL));
680 EXPECT_FALSE(ofsfu()->DirectoryExists(context.get(), path)); 678 EXPECT_FALSE(ofu()->DirectoryExists(context.get(), path));
681 context.reset(NewContext(NULL)); 679 context.reset(NewContext(NULL));
682 EXPECT_FALSE(ofsfu()->PathExists(context.get(), path)); 680 EXPECT_FALSE(ofu()->PathExists(context.get(), path));
683 context.reset(NewContext(NULL)); 681 context.reset(NewContext(NULL));
684 EXPECT_TRUE(ofsfu()->IsDirectoryEmpty(context.get(), root)); 682 EXPECT_TRUE(ofu()->IsDirectoryEmpty(context.get(), root));
685 683
686 context.reset(NewContext(NULL)); 684 context.reset(NewContext(NULL));
687 exclusive = false; 685 exclusive = false;
688 recursive = true; 686 recursive = true;
689 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory( 687 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
690 context.get(), path, exclusive, recursive)); 688 context.get(), path, exclusive, recursive));
691 689
692 context.reset(NewContext(NULL)); 690 context.reset(NewContext(NULL));
693 EXPECT_TRUE(ofsfu()->DirectoryExists(context.get(), path)); 691 EXPECT_TRUE(ofu()->DirectoryExists(context.get(), path));
694 context.reset(NewContext(NULL)); 692 context.reset(NewContext(NULL));
695 EXPECT_TRUE(ofsfu()->PathExists(context.get(), path)); 693 EXPECT_TRUE(ofu()->PathExists(context.get(), path));
696 context.reset(NewContext(NULL)); 694 context.reset(NewContext(NULL));
697 EXPECT_FALSE(ofsfu()->IsDirectoryEmpty(context.get(), root)); 695 EXPECT_FALSE(ofu()->IsDirectoryEmpty(context.get(), root));
698 context.reset(NewContext(NULL)); 696 context.reset(NewContext(NULL));
699 EXPECT_TRUE(ofsfu()->DirectoryExists(context.get(), path.DirName())); 697 EXPECT_TRUE(ofu()->DirectoryExists(context.get(), path.DirName()));
700 context.reset(NewContext(NULL)); 698 context.reset(NewContext(NULL));
701 EXPECT_FALSE(ofsfu()->IsDirectoryEmpty(context.get(), path.DirName())); 699 EXPECT_FALSE(ofu()->IsDirectoryEmpty(context.get(), path.DirName()));
702 700
703 // Can't remove a non-empty directory. 701 // Can't remove a non-empty directory.
704 context.reset(NewContext(NULL)); 702 context.reset(NewContext(NULL));
705 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_EMPTY, 703 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_EMPTY,
706 ofsfu()->DeleteSingleDirectory(context.get(), path.DirName())); 704 ofu()->DeleteSingleDirectory(context.get(), path.DirName()));
707 705
708 base::PlatformFileInfo file_info; 706 base::PlatformFileInfo file_info;
709 FilePath local_path; 707 FilePath local_path;
710 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetFileInfo( 708 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetFileInfo(
711 context.get(), path, &file_info, &local_path)); 709 context.get(), path, &file_info, &local_path));
712 EXPECT_TRUE(local_path.empty()); 710 EXPECT_TRUE(local_path.empty());
713 EXPECT_TRUE(file_info.is_directory); 711 EXPECT_TRUE(file_info.is_directory);
714 EXPECT_FALSE(file_info.is_symbolic_link); 712 EXPECT_FALSE(file_info.is_symbolic_link);
715 713
716 // Same create again should succeed, since exclusive is false. 714 // Same create again should succeed, since exclusive is false.
717 context.reset(NewContext(NULL)); 715 context.reset(NewContext(NULL));
718 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory( 716 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
719 context.get(), path, exclusive, recursive)); 717 context.get(), path, exclusive, recursive));
720 718
721 exclusive = true; 719 exclusive = true;
722 recursive = true; 720 recursive = true;
723 context.reset(NewContext(NULL)); 721 context.reset(NewContext(NULL));
724 EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, ofsfu()->CreateDirectory( 722 EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, ofu()->CreateDirectory(
725 context.get(), path, exclusive, recursive)); 723 context.get(), path, exclusive, recursive));
726 724
727 // Verify that deleting a directory isn't stopped by zero quota, and that it 725 // Verify that deleting a directory isn't stopped by zero quota, and that it
728 // frees up quota from its path. 726 // frees up quota from its path.
729 context.reset(NewContext(NULL)); 727 context.reset(NewContext(NULL));
730 context->set_allowed_bytes_growth(0); 728 context->set_allowed_bytes_growth(0);
731 EXPECT_EQ(base::PLATFORM_FILE_OK, 729 EXPECT_EQ(base::PLATFORM_FILE_OK,
732 ofsfu()->DeleteSingleDirectory(context.get(), path)); 730 ofu()->DeleteSingleDirectory(context.get(), path));
733 EXPECT_EQ(ObfuscatedFileSystemFileUtil::ComputeFilePathCost(path), 731 EXPECT_EQ(ObfuscatedFileUtil::ComputeFilePathCost(path),
734 context->allowed_bytes_growth()); 732 context->allowed_bytes_growth());
735 733
736 path = UTF8ToFilePath("foo/bop"); 734 path = UTF8ToFilePath("foo/bop");
737 735
738 context.reset(NewContext(NULL)); 736 context.reset(NewContext(NULL));
739 EXPECT_FALSE(ofsfu()->DirectoryExists(context.get(), path)); 737 EXPECT_FALSE(ofu()->DirectoryExists(context.get(), path));
740 context.reset(NewContext(NULL)); 738 context.reset(NewContext(NULL));
741 EXPECT_FALSE(ofsfu()->PathExists(context.get(), path)); 739 EXPECT_FALSE(ofu()->PathExists(context.get(), path));
742 context.reset(NewContext(NULL)); 740 context.reset(NewContext(NULL));
743 EXPECT_TRUE(ofsfu()->IsDirectoryEmpty(context.get(), path)); 741 EXPECT_TRUE(ofu()->IsDirectoryEmpty(context.get(), path));
744 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, ofsfu()->GetFileInfo( 742 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, ofu()->GetFileInfo(
745 context.get(), path, &file_info, &local_path)); 743 context.get(), path, &file_info, &local_path));
746 744
747 // Verify that file creation requires sufficient quota for the path. 745 // Verify that file creation requires sufficient quota for the path.
748 exclusive = true; 746 exclusive = true;
749 recursive = false; 747 recursive = false;
750 context.reset(NewContext(NULL)); 748 context.reset(NewContext(NULL));
751 context->set_allowed_bytes_growth( 749 context->set_allowed_bytes_growth(
752 ObfuscatedFileSystemFileUtil::ComputeFilePathCost(path) - 1); 750 ObfuscatedFileUtil::ComputeFilePathCost(path) - 1);
753 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, ofsfu()->CreateDirectory( 751 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, ofu()->CreateDirectory(
754 context.get(), path, exclusive, recursive)); 752 context.get(), path, exclusive, recursive));
755 753
756 context.reset(NewContext(NULL)); 754 context.reset(NewContext(NULL));
757 context->set_allowed_bytes_growth( 755 context->set_allowed_bytes_growth(
758 ObfuscatedFileSystemFileUtil::ComputeFilePathCost(path)); 756 ObfuscatedFileUtil::ComputeFilePathCost(path));
759 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory( 757 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
760 context.get(), path, exclusive, recursive)); 758 context.get(), path, exclusive, recursive));
761 759
762 context.reset(NewContext(NULL)); 760 context.reset(NewContext(NULL));
763 EXPECT_TRUE(ofsfu()->DirectoryExists(context.get(), path)); 761 EXPECT_TRUE(ofu()->DirectoryExists(context.get(), path));
764 context.reset(NewContext(NULL)); 762 context.reset(NewContext(NULL));
765 EXPECT_TRUE(ofsfu()->PathExists(context.get(), path)); 763 EXPECT_TRUE(ofu()->PathExists(context.get(), path));
766 764
767 exclusive = true; 765 exclusive = true;
768 recursive = false; 766 recursive = false;
769 EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, ofsfu()->CreateDirectory( 767 EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, ofu()->CreateDirectory(
770 context.get(), path, exclusive, recursive)); 768 context.get(), path, exclusive, recursive));
771 769
772 exclusive = true; 770 exclusive = true;
773 recursive = false; 771 recursive = false;
774 path = UTF8ToFilePath("foo"); 772 path = UTF8ToFilePath("foo");
775 EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, ofsfu()->CreateDirectory( 773 EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, ofu()->CreateDirectory(
776 context.get(), path, exclusive, recursive)); 774 context.get(), path, exclusive, recursive));
777 775
778 path = UTF8ToFilePath("blah"); 776 path = UTF8ToFilePath("blah");
779 777
780 context.reset(NewContext(NULL)); 778 context.reset(NewContext(NULL));
781 EXPECT_FALSE(ofsfu()->DirectoryExists(context.get(), path)); 779 EXPECT_FALSE(ofu()->DirectoryExists(context.get(), path));
782 context.reset(NewContext(NULL)); 780 context.reset(NewContext(NULL));
783 EXPECT_FALSE(ofsfu()->PathExists(context.get(), path)); 781 EXPECT_FALSE(ofu()->PathExists(context.get(), path));
784 782
785 exclusive = true; 783 exclusive = true;
786 recursive = false; 784 recursive = false;
787 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory( 785 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
788 context.get(), path, exclusive, recursive)); 786 context.get(), path, exclusive, recursive));
789 787
790 context.reset(NewContext(NULL)); 788 context.reset(NewContext(NULL));
791 EXPECT_TRUE(ofsfu()->DirectoryExists(context.get(), path)); 789 EXPECT_TRUE(ofu()->DirectoryExists(context.get(), path));
792 context.reset(NewContext(NULL)); 790 context.reset(NewContext(NULL));
793 EXPECT_TRUE(ofsfu()->PathExists(context.get(), path)); 791 EXPECT_TRUE(ofu()->PathExists(context.get(), path));
794 792
795 exclusive = true; 793 exclusive = true;
796 recursive = false; 794 recursive = false;
797 EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, ofsfu()->CreateDirectory( 795 EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, ofu()->CreateDirectory(
798 context.get(), path, exclusive, recursive)); 796 context.get(), path, exclusive, recursive));
799 } 797 }
800 798
801 TEST_F(ObfuscatedFileSystemFileUtilTest, TestReadDirectory) { 799 TEST_F(ObfuscatedFileUtilTest, TestReadDirectory) {
802 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); 800 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
803 bool exclusive = true; 801 bool exclusive = true;
804 bool recursive = true; 802 bool recursive = true;
805 FilePath path = UTF8ToFilePath("directory/to/use"); 803 FilePath path = UTF8ToFilePath("directory/to/use");
806 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory( 804 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
807 context.get(), path, exclusive, recursive)); 805 context.get(), path, exclusive, recursive));
808 TestReadDirectoryHelper(path); 806 TestReadDirectoryHelper(path);
809 } 807 }
810 808
811 TEST_F(ObfuscatedFileSystemFileUtilTest, TestReadRootWithSlash) { 809 TEST_F(ObfuscatedFileUtilTest, TestReadRootWithSlash) {
812 TestReadDirectoryHelper(UTF8ToFilePath("")); 810 TestReadDirectoryHelper(UTF8ToFilePath(""));
813 } 811 }
814 812
815 TEST_F(ObfuscatedFileSystemFileUtilTest, TestReadRootWithEmptyString) { 813 TEST_F(ObfuscatedFileUtilTest, TestReadRootWithEmptyString) {
816 TestReadDirectoryHelper(UTF8ToFilePath("/")); 814 TestReadDirectoryHelper(UTF8ToFilePath("/"));
817 } 815 }
818 816
819 TEST_F(ObfuscatedFileSystemFileUtilTest, TestReadDirectoryOnFile) { 817 TEST_F(ObfuscatedFileUtilTest, TestReadDirectoryOnFile) {
820 FilePath path = UTF8ToFilePath("file"); 818 FilePath path = UTF8ToFilePath("file");
821 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); 819 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
822 820
823 bool created = false; 821 bool created = false;
824 ASSERT_EQ(base::PLATFORM_FILE_OK, 822 ASSERT_EQ(base::PLATFORM_FILE_OK,
825 ofsfu()->EnsureFileExists(context.get(), path, &created)); 823 ofu()->EnsureFileExists(context.get(), path, &created));
826 ASSERT_TRUE(created); 824 ASSERT_TRUE(created);
827 825
828 context.reset(NewContext(NULL)); 826 context.reset(NewContext(NULL));
829 std::vector<base::FileUtilProxy::Entry> entries; 827 std::vector<base::FileUtilProxy::Entry> entries;
830 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, 828 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
831 ofsfu()->ReadDirectory(context.get(), path, &entries)); 829 ofu()->ReadDirectory(context.get(), path, &entries));
832 830
833 EXPECT_TRUE(ofsfu()->IsDirectoryEmpty(context.get(), path)); 831 EXPECT_TRUE(ofu()->IsDirectoryEmpty(context.get(), path));
834 } 832 }
835 833
836 TEST_F(ObfuscatedFileSystemFileUtilTest, TestTouch) { 834 TEST_F(ObfuscatedFileUtilTest, TestTouch) {
837 FilePath path = UTF8ToFilePath("file"); 835 FilePath path = UTF8ToFilePath("file");
838 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); 836 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
839 837
840 base::Time last_access_time = base::Time::Now(); 838 base::Time last_access_time = base::Time::Now();
841 base::Time last_modified_time = base::Time::Now(); 839 base::Time last_modified_time = base::Time::Now();
842 840
843 // It's not there yet. 841 // It's not there yet.
844 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, 842 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
845 ofsfu()->Touch( 843 ofu()->Touch(
846 context.get(), path, last_access_time, last_modified_time)); 844 context.get(), path, last_access_time, last_modified_time));
847 845
848 // OK, now create it. 846 // OK, now create it.
849 context.reset(NewContext(NULL)); 847 context.reset(NewContext(NULL));
850 bool created = false; 848 bool created = false;
851 ASSERT_EQ(base::PLATFORM_FILE_OK, 849 ASSERT_EQ(base::PLATFORM_FILE_OK,
852 ofsfu()->EnsureFileExists(context.get(), path, &created)); 850 ofu()->EnsureFileExists(context.get(), path, &created));
853 ASSERT_TRUE(created); 851 ASSERT_TRUE(created);
854 TestTouchHelper(path, true); 852 TestTouchHelper(path, true);
855 853
856 // Now test a directory: 854 // Now test a directory:
857 context.reset(NewContext(NULL)); 855 context.reset(NewContext(NULL));
858 bool exclusive = true; 856 bool exclusive = true;
859 bool recursive = false; 857 bool recursive = false;
860 path = UTF8ToFilePath("dir"); 858 path = UTF8ToFilePath("dir");
861 ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory(context.get(), 859 ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(context.get(),
862 path, exclusive, recursive)); 860 path, exclusive, recursive));
863 TestTouchHelper(path, false); 861 TestTouchHelper(path, false);
864 } 862 }
865 863
866 TEST_F(ObfuscatedFileSystemFileUtilTest, TestPathQuotas) { 864 TEST_F(ObfuscatedFileUtilTest, TestPathQuotas) {
867 FilePath path = UTF8ToFilePath("fake/file"); 865 FilePath path = UTF8ToFilePath("fake/file");
868 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); 866 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
869 867
870 path = UTF8ToFilePath("file name"); 868 path = UTF8ToFilePath("file name");
871 context->set_allowed_bytes_growth(5); 869 context->set_allowed_bytes_growth(5);
872 bool created = false; 870 bool created = false;
873 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, 871 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE,
874 ofsfu()->EnsureFileExists( 872 ofu()->EnsureFileExists(context.get(), path, &created));
875 context.get(), path, &created));
876 EXPECT_FALSE(created); 873 EXPECT_FALSE(created);
877 context->set_allowed_bytes_growth(1024); 874 context->set_allowed_bytes_growth(1024);
878 EXPECT_EQ(base::PLATFORM_FILE_OK, 875 EXPECT_EQ(base::PLATFORM_FILE_OK,
879 ofsfu()->EnsureFileExists( 876 ofu()->EnsureFileExists(context.get(), path, &created));
880 context.get(), path, &created));
881 EXPECT_TRUE(created); 877 EXPECT_TRUE(created);
882 int64 path_cost = ObfuscatedFileSystemFileUtil::ComputeFilePathCost(path); 878 int64 path_cost = ObfuscatedFileUtil::ComputeFilePathCost(path);
883 EXPECT_EQ(1024 - path_cost, context->allowed_bytes_growth()); 879 EXPECT_EQ(1024 - path_cost, context->allowed_bytes_growth());
884 880
885 context->set_allowed_bytes_growth(1024); 881 context->set_allowed_bytes_growth(1024);
886 bool exclusive = true; 882 bool exclusive = true;
887 bool recursive = true; 883 bool recursive = true;
888 path = UTF8ToFilePath("directory/to/use"); 884 path = UTF8ToFilePath("directory/to/use");
889 std::vector<FilePath::StringType> components; 885 std::vector<FilePath::StringType> components;
890 path.GetComponents(&components); 886 path.GetComponents(&components);
891 path_cost = 0; 887 path_cost = 0;
892 for (std::vector<FilePath::StringType>::iterator iter = components.begin(); 888 for (std::vector<FilePath::StringType>::iterator iter = components.begin();
893 iter != components.end(); ++iter) { 889 iter != components.end(); ++iter) {
894 path_cost += ObfuscatedFileSystemFileUtil::ComputeFilePathCost( 890 path_cost += ObfuscatedFileUtil::ComputeFilePathCost(
895 FilePath(*iter)); 891 FilePath(*iter));
896 } 892 }
897 context.reset(NewContext(NULL)); 893 context.reset(NewContext(NULL));
898 context->set_allowed_bytes_growth(1024); 894 context->set_allowed_bytes_growth(1024);
899 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory( 895 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
900 context.get(), path, exclusive, recursive)); 896 context.get(), path, exclusive, recursive));
901 EXPECT_EQ(1024 - path_cost, context->allowed_bytes_growth()); 897 EXPECT_EQ(1024 - path_cost, context->allowed_bytes_growth());
902 } 898 }
903 899
904 TEST_F(ObfuscatedFileSystemFileUtilTest, TestCopyOrMoveFileNotFound) { 900 TEST_F(ObfuscatedFileUtilTest, TestCopyOrMoveFileNotFound) {
905 FilePath source_path = UTF8ToFilePath("path0.txt"); 901 FilePath source_path = UTF8ToFilePath("path0.txt");
906 FilePath dest_path = UTF8ToFilePath("path1.txt"); 902 FilePath dest_path = UTF8ToFilePath("path1.txt");
907 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); 903 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
908 904
909 bool is_copy_not_move = false; 905 bool is_copy_not_move = false;
910 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, 906 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
911 ofsfu()->CopyOrMoveFile(context.get(), source_path, dest_path, 907 ofu()->CopyOrMoveFile(context.get(), source_path, dest_path,
912 is_copy_not_move)); 908 is_copy_not_move));
913 context.reset(NewContext(NULL)); 909 context.reset(NewContext(NULL));
914 is_copy_not_move = true; 910 is_copy_not_move = true;
915 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, 911 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
916 ofsfu()->CopyOrMoveFile(context.get(), source_path, dest_path, 912 ofu()->CopyOrMoveFile(context.get(), source_path, dest_path,
917 is_copy_not_move)); 913 is_copy_not_move));
918 source_path = UTF8ToFilePath("dir/dir/file"); 914 source_path = UTF8ToFilePath("dir/dir/file");
919 bool exclusive = true; 915 bool exclusive = true;
920 bool recursive = true; 916 bool recursive = true;
921 context.reset(NewContext(NULL)); 917 context.reset(NewContext(NULL));
922 ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory( 918 ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
923 context.get(), source_path.DirName(), exclusive, recursive)); 919 context.get(), source_path.DirName(), exclusive, recursive));
924 is_copy_not_move = false; 920 is_copy_not_move = false;
925 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, 921 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
926 ofsfu()->CopyOrMoveFile(context.get(), source_path, dest_path, 922 ofu()->CopyOrMoveFile(context.get(), source_path, dest_path,
927 is_copy_not_move)); 923 is_copy_not_move));
928 context.reset(NewContext(NULL)); 924 context.reset(NewContext(NULL));
929 is_copy_not_move = true; 925 is_copy_not_move = true;
930 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, 926 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
931 ofsfu()->CopyOrMoveFile(context.get(), source_path, dest_path, 927 ofu()->CopyOrMoveFile(context.get(), source_path, dest_path,
932 is_copy_not_move)); 928 is_copy_not_move));
933 } 929 }
934 930
935 TEST_F(ObfuscatedFileSystemFileUtilTest, TestCopyOrMoveFileSuccess) { 931 TEST_F(ObfuscatedFileUtilTest, TestCopyOrMoveFileSuccess) {
936 const int64 kSourceLength = 5; 932 const int64 kSourceLength = 5;
937 const int64 kDestLength = 50; 933 const int64 kDestLength = 50;
938 934
939 for (size_t i = 0; i < arraysize(kCopyMoveTestCases); ++i) { 935 for (size_t i = 0; i < arraysize(kCopyMoveTestCases); ++i) {
940 SCOPED_TRACE(testing::Message() << "kCopyMoveTestCase " << i); 936 SCOPED_TRACE(testing::Message() << "kCopyMoveTestCase " << i);
941 const CopyMoveTestCaseRecord& test_case = kCopyMoveTestCases[i]; 937 const CopyMoveTestCaseRecord& test_case = kCopyMoveTestCases[i];
942 SCOPED_TRACE(testing::Message() << "\t is_copy_not_move " << 938 SCOPED_TRACE(testing::Message() << "\t is_copy_not_move " <<
943 test_case.is_copy_not_move); 939 test_case.is_copy_not_move);
944 SCOPED_TRACE(testing::Message() << "\t source_path " << 940 SCOPED_TRACE(testing::Message() << "\t source_path " <<
945 test_case.source_path); 941 test_case.source_path);
946 SCOPED_TRACE(testing::Message() << "\t dest_path " << 942 SCOPED_TRACE(testing::Message() << "\t dest_path " <<
947 test_case.dest_path); 943 test_case.dest_path);
948 SCOPED_TRACE(testing::Message() << "\t cause_overwrite " << 944 SCOPED_TRACE(testing::Message() << "\t cause_overwrite " <<
949 test_case.cause_overwrite); 945 test_case.cause_overwrite);
950 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); 946 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
951 947
952 bool exclusive = false; 948 bool exclusive = false;
953 bool recursive = true; 949 bool recursive = true;
954 FilePath source_path = UTF8ToFilePath(test_case.source_path); 950 FilePath source_path = UTF8ToFilePath(test_case.source_path);
955 FilePath dest_path = UTF8ToFilePath(test_case.dest_path); 951 FilePath dest_path = UTF8ToFilePath(test_case.dest_path);
956 952
957 context.reset(NewContext(NULL)); 953 context.reset(NewContext(NULL));
958 ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory( 954 ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
959 context.get(), source_path.DirName(), exclusive, recursive)); 955 context.get(), source_path.DirName(), exclusive, recursive));
960 context.reset(NewContext(NULL)); 956 context.reset(NewContext(NULL));
961 ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory( 957 ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
962 context.get(), dest_path.DirName(), exclusive, recursive)); 958 context.get(), dest_path.DirName(), exclusive, recursive));
963 959
964 bool created = false; 960 bool created = false;
965 context.reset(NewContext(NULL)); 961 context.reset(NewContext(NULL));
966 ASSERT_EQ(base::PLATFORM_FILE_OK, 962 ASSERT_EQ(base::PLATFORM_FILE_OK,
967 ofsfu()->EnsureFileExists(context.get(), source_path, &created)); 963 ofu()->EnsureFileExists(context.get(), source_path, &created));
968 ASSERT_TRUE(created); 964 ASSERT_TRUE(created);
969 context.reset(NewContext(NULL)); 965 context.reset(NewContext(NULL));
970 ASSERT_EQ(base::PLATFORM_FILE_OK, 966 ASSERT_EQ(base::PLATFORM_FILE_OK,
971 ofsfu()->Truncate(context.get(), source_path, kSourceLength)); 967 ofu()->Truncate(context.get(), source_path, kSourceLength));
972 968
973 if (test_case.cause_overwrite) { 969 if (test_case.cause_overwrite) {
974 context.reset(NewContext(NULL)); 970 context.reset(NewContext(NULL));
975 created = false; 971 created = false;
976 ASSERT_EQ(base::PLATFORM_FILE_OK, 972 ASSERT_EQ(base::PLATFORM_FILE_OK,
977 ofsfu()->EnsureFileExists(context.get(), dest_path, &created)); 973 ofu()->EnsureFileExists(context.get(), dest_path, &created));
978 ASSERT_TRUE(created); 974 ASSERT_TRUE(created);
979 context.reset(NewContext(NULL)); 975 context.reset(NewContext(NULL));
980 ASSERT_EQ(base::PLATFORM_FILE_OK, 976 ASSERT_EQ(base::PLATFORM_FILE_OK,
981 ofsfu()->Truncate(context.get(), dest_path, kDestLength)); 977 ofu()->Truncate(context.get(), dest_path, kDestLength));
982 } 978 }
983 979
984 context.reset(NewContext(NULL)); 980 context.reset(NewContext(NULL));
985 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CopyOrMoveFile(context.get(), 981 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->CopyOrMoveFile(context.get(),
986 source_path, dest_path, test_case.is_copy_not_move)); 982 source_path, dest_path, test_case.is_copy_not_move));
987 if (test_case.is_copy_not_move) { 983 if (test_case.is_copy_not_move) {
988 base::PlatformFileInfo file_info; 984 base::PlatformFileInfo file_info;
989 FilePath local_path; 985 FilePath local_path;
990 context.reset(NewContext(NULL)); 986 context.reset(NewContext(NULL));
991 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetFileInfo( 987 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetFileInfo(
992 context.get(), source_path, &file_info, &local_path)); 988 context.get(), source_path, &file_info, &local_path));
993 EXPECT_EQ(kSourceLength, file_info.size); 989 EXPECT_EQ(kSourceLength, file_info.size);
994 EXPECT_EQ(base::PLATFORM_FILE_OK, 990 EXPECT_EQ(base::PLATFORM_FILE_OK,
995 ofsfu()->DeleteFile(context.get(), source_path)); 991 ofu()->DeleteFile(context.get(), source_path));
996 } else { 992 } else {
997 base::PlatformFileInfo file_info; 993 base::PlatformFileInfo file_info;
998 FilePath local_path; 994 FilePath local_path;
999 context.reset(NewContext(NULL)); 995 context.reset(NewContext(NULL));
1000 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, ofsfu()->GetFileInfo( 996 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, ofu()->GetFileInfo(
1001 context.get(), source_path, &file_info, &local_path)); 997 context.get(), source_path, &file_info, &local_path));
1002 } 998 }
1003 base::PlatformFileInfo file_info; 999 base::PlatformFileInfo file_info;
1004 FilePath local_path; 1000 FilePath local_path;
1005 EXPECT_EQ(base::PLATFORM_FILE_OK, ofsfu()->GetFileInfo( 1001 EXPECT_EQ(base::PLATFORM_FILE_OK, ofu()->GetFileInfo(
1006 context.get(), dest_path, &file_info, &local_path)); 1002 context.get(), dest_path, &file_info, &local_path));
1007 EXPECT_EQ(kSourceLength, file_info.size); 1003 EXPECT_EQ(kSourceLength, file_info.size);
1008 1004
1009 EXPECT_EQ(base::PLATFORM_FILE_OK, 1005 EXPECT_EQ(base::PLATFORM_FILE_OK,
1010 ofsfu()->DeleteFile(context.get(), dest_path)); 1006 ofu()->DeleteFile(context.get(), dest_path));
1011 } 1007 }
1012 } 1008 }
1013 1009
1014 TEST_F(ObfuscatedFileSystemFileUtilTest, TestCopyPathQuotas) { 1010 TEST_F(ObfuscatedFileUtilTest, TestCopyPathQuotas) {
1015 FilePath src_path = UTF8ToFilePath("src path"); 1011 FilePath src_path = UTF8ToFilePath("src path");
1016 FilePath dest_path = UTF8ToFilePath("destination path"); 1012 FilePath dest_path = UTF8ToFilePath("destination path");
1017 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); 1013 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
1018 bool created = false; 1014 bool created = false;
1019 ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->EnsureFileExists( 1015 ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->EnsureFileExists(
1020 context.get(), src_path, &created)); 1016 context.get(), src_path, &created));
1021 1017
1022 bool is_copy = true; 1018 bool is_copy = true;
1023 // Copy, no overwrite. 1019 // Copy, no overwrite.
1024 context->set_allowed_bytes_growth( 1020 context->set_allowed_bytes_growth(
1025 ObfuscatedFileSystemFileUtil::ComputeFilePathCost(dest_path) - 1); 1021 ObfuscatedFileUtil::ComputeFilePathCost(dest_path) - 1);
1026 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, 1022 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE,
1027 ofsfu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy)); 1023 ofu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
1028 context.reset(NewContext(NULL)); 1024 context.reset(NewContext(NULL));
1029 context->set_allowed_bytes_growth( 1025 context->set_allowed_bytes_growth(
1030 ObfuscatedFileSystemFileUtil::ComputeFilePathCost(dest_path)); 1026 ObfuscatedFileUtil::ComputeFilePathCost(dest_path));
1031 EXPECT_EQ(base::PLATFORM_FILE_OK, 1027 EXPECT_EQ(base::PLATFORM_FILE_OK,
1032 ofsfu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy)); 1028 ofu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
1033 1029
1034 // Copy, with overwrite. 1030 // Copy, with overwrite.
1035 context.reset(NewContext(NULL)); 1031 context.reset(NewContext(NULL));
1036 context->set_allowed_bytes_growth(0); 1032 context->set_allowed_bytes_growth(0);
1037 EXPECT_EQ(base::PLATFORM_FILE_OK, 1033 EXPECT_EQ(base::PLATFORM_FILE_OK,
1038 ofsfu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy)); 1034 ofu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
1039 } 1035 }
1040 1036
1041 TEST_F(ObfuscatedFileSystemFileUtilTest, TestMovePathQuotasWithRename) { 1037 TEST_F(ObfuscatedFileUtilTest, TestMovePathQuotasWithRename) {
1042 FilePath src_path = UTF8ToFilePath("src path"); 1038 FilePath src_path = UTF8ToFilePath("src path");
1043 FilePath dest_path = UTF8ToFilePath("destination path"); 1039 FilePath dest_path = UTF8ToFilePath("destination path");
1044 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); 1040 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
1045 bool created = false; 1041 bool created = false;
1046 ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->EnsureFileExists( 1042 ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->EnsureFileExists(
1047 context.get(), src_path, &created)); 1043 context.get(), src_path, &created));
1048 1044
1049 bool is_copy = false; 1045 bool is_copy = false;
1050 // Move, rename, no overwrite. 1046 // Move, rename, no overwrite.
1051 context.reset(NewContext(NULL)); 1047 context.reset(NewContext(NULL));
1052 context->set_allowed_bytes_growth( 1048 context->set_allowed_bytes_growth(
1053 ObfuscatedFileSystemFileUtil::ComputeFilePathCost(dest_path) - 1049 ObfuscatedFileUtil::ComputeFilePathCost(dest_path) -
1054 ObfuscatedFileSystemFileUtil::ComputeFilePathCost(src_path) - 1); 1050 ObfuscatedFileUtil::ComputeFilePathCost(src_path) - 1);
1055 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, 1051 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE,
1056 ofsfu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy)); 1052 ofu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
1057 context.reset(NewContext(NULL)); 1053 context.reset(NewContext(NULL));
1058 context->set_allowed_bytes_growth( 1054 context->set_allowed_bytes_growth(
1059 ObfuscatedFileSystemFileUtil::ComputeFilePathCost(dest_path) - 1055 ObfuscatedFileUtil::ComputeFilePathCost(dest_path) -
1060 ObfuscatedFileSystemFileUtil::ComputeFilePathCost(src_path)); 1056 ObfuscatedFileUtil::ComputeFilePathCost(src_path));
1061 EXPECT_EQ(base::PLATFORM_FILE_OK, 1057 EXPECT_EQ(base::PLATFORM_FILE_OK,
1062 ofsfu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy)); 1058 ofu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
1063 1059
1064 context.reset(NewContext(NULL)); 1060 context.reset(NewContext(NULL));
1065 ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->EnsureFileExists( 1061 ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->EnsureFileExists(
1066 context.get(), src_path, &created)); 1062 context.get(), src_path, &created));
1067 1063
1068 // Move, rename, with overwrite. 1064 // Move, rename, with overwrite.
1069 context.reset(NewContext(NULL)); 1065 context.reset(NewContext(NULL));
1070 context->set_allowed_bytes_growth(0); 1066 context->set_allowed_bytes_growth(0);
1071 EXPECT_EQ(base::PLATFORM_FILE_OK, 1067 EXPECT_EQ(base::PLATFORM_FILE_OK,
1072 ofsfu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy)); 1068 ofu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
1073 } 1069 }
1074 1070
1075 TEST_F(ObfuscatedFileSystemFileUtilTest, TestMovePathQuotasWithoutRename) { 1071 TEST_F(ObfuscatedFileUtilTest, TestMovePathQuotasWithoutRename) {
1076 FilePath src_path = UTF8ToFilePath("src path"); 1072 FilePath src_path = UTF8ToFilePath("src path");
1077 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); 1073 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
1078 bool created = false; 1074 bool created = false;
1079 ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->EnsureFileExists( 1075 ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->EnsureFileExists(
1080 context.get(), src_path, &created)); 1076 context.get(), src_path, &created));
1081 1077
1082 bool exclusive = true; 1078 bool exclusive = true;
1083 bool recursive = false; 1079 bool recursive = false;
1084 FilePath dir_path = UTF8ToFilePath("directory path"); 1080 FilePath dir_path = UTF8ToFilePath("directory path");
1085 context.reset(NewContext(NULL)); 1081 context.reset(NewContext(NULL));
1086 ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory( 1082 ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
1087 context.get(), dir_path, exclusive, recursive)); 1083 context.get(), dir_path, exclusive, recursive));
1088 1084
1089 FilePath dest_path = dir_path.Append(src_path); 1085 FilePath dest_path = dir_path.Append(src_path);
1090 1086
1091 bool is_copy = false; 1087 bool is_copy = false;
1092 int64 allowed_bytes_growth = -1000; // Over quota, this should still work. 1088 int64 allowed_bytes_growth = -1000; // Over quota, this should still work.
1093 // Move, no rename, no overwrite. 1089 // Move, no rename, no overwrite.
1094 context.reset(NewContext(NULL)); 1090 context.reset(NewContext(NULL));
1095 context->set_allowed_bytes_growth(allowed_bytes_growth); 1091 context->set_allowed_bytes_growth(allowed_bytes_growth);
1096 EXPECT_EQ(base::PLATFORM_FILE_OK, 1092 EXPECT_EQ(base::PLATFORM_FILE_OK,
1097 ofsfu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy)); 1093 ofu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
1098 EXPECT_EQ(allowed_bytes_growth, context->allowed_bytes_growth()); 1094 EXPECT_EQ(allowed_bytes_growth, context->allowed_bytes_growth());
1099 1095
1100 // Move, no rename, with overwrite. 1096 // Move, no rename, with overwrite.
1101 context.reset(NewContext(NULL)); 1097 context.reset(NewContext(NULL));
1102 ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->EnsureFileExists( 1098 ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->EnsureFileExists(
1103 context.get(), src_path, &created)); 1099 context.get(), src_path, &created));
1104 context.reset(NewContext(NULL)); 1100 context.reset(NewContext(NULL));
1105 context->set_allowed_bytes_growth(allowed_bytes_growth); 1101 context->set_allowed_bytes_growth(allowed_bytes_growth);
1106 EXPECT_EQ(base::PLATFORM_FILE_OK, 1102 EXPECT_EQ(base::PLATFORM_FILE_OK,
1107 ofsfu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy)); 1103 ofu()->CopyOrMoveFile(context.get(), src_path, dest_path, is_copy));
1108 EXPECT_EQ( 1104 EXPECT_EQ(
1109 allowed_bytes_growth + 1105 allowed_bytes_growth +
1110 ObfuscatedFileSystemFileUtil::ComputeFilePathCost(src_path), 1106 ObfuscatedFileUtil::ComputeFilePathCost(src_path),
1111 context->allowed_bytes_growth()); 1107 context->allowed_bytes_growth());
1112 } 1108 }
1113 1109
1114 TEST_F(ObfuscatedFileSystemFileUtilTest, TestCopyInForeignFile) { 1110 TEST_F(ObfuscatedFileUtilTest, TestCopyInForeignFile) {
1115 TestCopyInForeignFileHelper(false /* overwrite */); 1111 TestCopyInForeignFileHelper(false /* overwrite */);
1116 TestCopyInForeignFileHelper(true /* overwrite */); 1112 TestCopyInForeignFileHelper(true /* overwrite */);
1117 } 1113 }
1118 1114
1119 TEST_F(ObfuscatedFileSystemFileUtilTest, TestEnumerator) { 1115 TEST_F(ObfuscatedFileUtilTest, TestEnumerator) {
1120 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); 1116 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
1121 FilePath src_path = UTF8ToFilePath("source dir"); 1117 FilePath src_path = UTF8ToFilePath("source dir");
1122 bool exclusive = true; 1118 bool exclusive = true;
1123 bool recursive = false; 1119 bool recursive = false;
1124 ASSERT_EQ(base::PLATFORM_FILE_OK, ofsfu()->CreateDirectory( 1120 ASSERT_EQ(base::PLATFORM_FILE_OK, ofu()->CreateDirectory(
1125 context.get(), src_path, exclusive, recursive)); 1121 context.get(), src_path, exclusive, recursive));
1126 1122
1127 std::set<FilePath::StringType> files; 1123 std::set<FilePath::StringType> files;
1128 std::set<FilePath::StringType> directories; 1124 std::set<FilePath::StringType> directories;
1129 FillTestDirectory(src_path, &files, &directories); 1125 FillTestDirectory(src_path, &files, &directories);
1130 1126
1131 FilePath dest_path = UTF8ToFilePath("destination dir"); 1127 FilePath dest_path = UTF8ToFilePath("destination dir");
1132 1128
1133 context.reset(NewContext(NULL)); 1129 context.reset(NewContext(NULL));
1134 EXPECT_FALSE(ofsfu()->DirectoryExists(context.get(), dest_path)); 1130 EXPECT_FALSE(ofu()->DirectoryExists(context.get(), dest_path));
1135 context.reset(NewContext(NULL)); 1131 context.reset(NewContext(NULL));
1136 ASSERT_EQ(base::PLATFORM_FILE_OK, 1132 ASSERT_EQ(base::PLATFORM_FILE_OK,
1137 ofsfu()->Copy(context.get(), src_path, dest_path)); 1133 ofu()->Copy(context.get(), src_path, dest_path));
1138 1134
1139 ValidateTestDirectory(dest_path, files, directories); 1135 ValidateTestDirectory(dest_path, files, directories);
1140 context.reset(NewContext(NULL)); 1136 context.reset(NewContext(NULL));
1141 EXPECT_TRUE(ofsfu()->DirectoryExists(context.get(), src_path)); 1137 EXPECT_TRUE(ofu()->DirectoryExists(context.get(), src_path));
1142 context.reset(NewContext(NULL)); 1138 context.reset(NewContext(NULL));
1143 EXPECT_TRUE(ofsfu()->DirectoryExists(context.get(), dest_path)); 1139 EXPECT_TRUE(ofu()->DirectoryExists(context.get(), dest_path));
1144 context.reset(NewContext(NULL)); 1140 context.reset(NewContext(NULL));
1145 recursive = true; 1141 recursive = true;
1146 ASSERT_EQ(base::PLATFORM_FILE_OK, 1142 ASSERT_EQ(base::PLATFORM_FILE_OK,
1147 ofsfu()->Delete(context.get(), dest_path, recursive)); 1143 ofu()->Delete(context.get(), dest_path, recursive));
1148 context.reset(NewContext(NULL)); 1144 context.reset(NewContext(NULL));
1149 EXPECT_FALSE(ofsfu()->DirectoryExists(context.get(), dest_path)); 1145 EXPECT_FALSE(ofu()->DirectoryExists(context.get(), dest_path));
1150 } 1146 }
1151 1147
1152 TEST_F(ObfuscatedFileSystemFileUtilTest, TestMigration) { 1148 TEST_F(ObfuscatedFileUtilTest, TestMigration) {
1153 ScopedTempDir source_dir; 1149 ScopedTempDir source_dir;
1154 ASSERT_TRUE(source_dir.CreateUniqueTempDir()); 1150 ASSERT_TRUE(source_dir.CreateUniqueTempDir());
1155 FilePath root_path = source_dir.path().AppendASCII("chrome-pLmnMWXE7NzTFRsn"); 1151 FilePath root_path = source_dir.path().AppendASCII("chrome-pLmnMWXE7NzTFRsn");
1156 ASSERT_TRUE(file_util::CreateDirectory(root_path)); 1152 ASSERT_TRUE(file_util::CreateDirectory(root_path));
1157 1153
1158 for (size_t i = 0; i < arraysize(kMigrationTestCases); ++i) { 1154 for (size_t i = 0; i < arraysize(kMigrationTestCases); ++i) {
1159 SCOPED_TRACE(testing::Message() << "Creating kMigrationTestPath " << i); 1155 SCOPED_TRACE(testing::Message() << "Creating kMigrationTestPath " << i);
1160 const MigrationTestCaseRecord& test_case = kMigrationTestCases[i]; 1156 const MigrationTestCaseRecord& test_case = kMigrationTestCases[i];
1161 FilePath local_src_path = root_path.Append(test_case.path); 1157 FilePath local_src_path = root_path.Append(test_case.path);
1162 if (test_case.is_directory) { 1158 if (test_case.is_directory) {
1163 ASSERT_TRUE( 1159 ASSERT_TRUE(
1164 file_util::CreateDirectory(local_src_path)); 1160 file_util::CreateDirectory(local_src_path));
1165 } else { 1161 } else {
1166 base::PlatformFileError error_code; 1162 base::PlatformFileError error_code;
1167 bool created = false; 1163 bool created = false;
1168 int file_flags = base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE; 1164 int file_flags = base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE;
1169 base::PlatformFile file_handle = 1165 base::PlatformFile file_handle =
1170 base::CreatePlatformFile( 1166 base::CreatePlatformFile(
1171 local_src_path, file_flags, &created, &error_code); 1167 local_src_path, file_flags, &created, &error_code);
1172 EXPECT_TRUE(created); 1168 EXPECT_TRUE(created);
1173 ASSERT_NE(base::kInvalidPlatformFileValue, file_handle); 1169 ASSERT_NE(base::kInvalidPlatformFileValue, file_handle);
1174 ASSERT_EQ(base::PLATFORM_FILE_OK, error_code); 1170 ASSERT_EQ(base::PLATFORM_FILE_OK, error_code);
1175 ASSERT_TRUE( 1171 ASSERT_TRUE(
1176 base::TruncatePlatformFile(file_handle, test_case.data_file_size)); 1172 base::TruncatePlatformFile(file_handle, test_case.data_file_size));
1177 EXPECT_TRUE(base::ClosePlatformFile(file_handle)); 1173 EXPECT_TRUE(base::ClosePlatformFile(file_handle));
1178 } 1174 }
1179 } 1175 }
1180 1176
1181 EXPECT_TRUE(ofsfu()->MigrateFromOldSandbox(origin(), type(), root_path)); 1177 EXPECT_TRUE(ofu()->MigrateFromOldSandbox(origin(), type(), root_path));
1182 1178
1183 FilePath new_root = 1179 FilePath new_root =
1184 test_directory().AppendASCII("File System").AppendASCII("000").Append( 1180 test_directory().AppendASCII("File System").AppendASCII("000").Append(
1185 ofsfu()->GetDirectoryNameForType(type())).AppendASCII("Legacy"); 1181 ofu()->GetDirectoryNameForType(type())).AppendASCII("Legacy");
1186 for (size_t i = 0; i < arraysize(kMigrationTestCases); ++i) { 1182 for (size_t i = 0; i < arraysize(kMigrationTestCases); ++i) {
1187 SCOPED_TRACE(testing::Message() << "Validating kMigrationTestPath " << i); 1183 SCOPED_TRACE(testing::Message() << "Validating kMigrationTestPath " << i);
1188 const MigrationTestCaseRecord& test_case = kMigrationTestCases[i]; 1184 const MigrationTestCaseRecord& test_case = kMigrationTestCases[i];
1189 FilePath local_data_path = new_root.Append(test_case.path); 1185 FilePath local_data_path = new_root.Append(test_case.path);
1190 #if defined(OS_WIN) 1186 #if defined(OS_WIN)
1191 local_data_path = local_data_path.NormalizeWindowsPathSeparators(); 1187 local_data_path = local_data_path.NormalizeWindowsPathSeparators();
1192 #endif 1188 #endif
1193 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); 1189 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
1194 base::PlatformFileInfo ofsfu_file_info; 1190 base::PlatformFileInfo ofu_file_info;
1195 FilePath data_path; 1191 FilePath data_path;
1196 SCOPED_TRACE(testing::Message() << "Path is " << test_case.path); 1192 SCOPED_TRACE(testing::Message() << "Path is " << test_case.path);
1197 EXPECT_EQ(base::PLATFORM_FILE_OK, 1193 EXPECT_EQ(base::PLATFORM_FILE_OK,
1198 ofsfu()->GetFileInfo(context.get(), FilePath(test_case.path), 1194 ofu()->GetFileInfo(context.get(), FilePath(test_case.path),
1199 &ofsfu_file_info, &data_path)); 1195 &ofu_file_info, &data_path));
1200 if (test_case.is_directory) { 1196 if (test_case.is_directory) {
1201 EXPECT_TRUE(ofsfu_file_info.is_directory); 1197 EXPECT_TRUE(ofu_file_info.is_directory);
1202 } else { 1198 } else {
1203 base::PlatformFileInfo platform_file_info; 1199 base::PlatformFileInfo platform_file_info;
1204 SCOPED_TRACE(testing::Message() << "local_data_path is " << 1200 SCOPED_TRACE(testing::Message() << "local_data_path is " <<
1205 local_data_path.value()); 1201 local_data_path.value());
1206 SCOPED_TRACE(testing::Message() << "data_path is " << data_path.value()); 1202 SCOPED_TRACE(testing::Message() << "data_path is " << data_path.value());
1207 ASSERT_TRUE(file_util::GetFileInfo(local_data_path, &platform_file_info)); 1203 ASSERT_TRUE(file_util::GetFileInfo(local_data_path, &platform_file_info));
1208 EXPECT_EQ(test_case.data_file_size, platform_file_info.size); 1204 EXPECT_EQ(test_case.data_file_size, platform_file_info.size);
1209 EXPECT_FALSE(platform_file_info.is_directory); 1205 EXPECT_FALSE(platform_file_info.is_directory);
1210 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); 1206 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
1211 EXPECT_EQ(local_data_path, data_path); 1207 EXPECT_EQ(local_data_path, data_path);
1212 EXPECT_EQ(platform_file_info.size, ofsfu_file_info.size); 1208 EXPECT_EQ(platform_file_info.size, ofu_file_info.size);
1213 EXPECT_FALSE(ofsfu_file_info.is_directory); 1209 EXPECT_FALSE(ofu_file_info.is_directory);
1214 } 1210 }
1215 } 1211 }
1216 } 1212 }
1217 1213
1218 TEST_F(ObfuscatedFileSystemFileUtilTest, TestOriginEnumerator) { 1214 TEST_F(ObfuscatedFileUtilTest, TestOriginEnumerator) {
1219 scoped_ptr<ObfuscatedFileSystemFileUtil::AbstractOriginEnumerator> 1215 scoped_ptr<ObfuscatedFileUtil::AbstractOriginEnumerator>
1220 enumerator(ofsfu()->CreateOriginEnumerator()); 1216 enumerator(ofu()->CreateOriginEnumerator());
1221 // The test helper starts out with a single filesystem. 1217 // The test helper starts out with a single filesystem.
1222 EXPECT_TRUE(enumerator.get()); 1218 EXPECT_TRUE(enumerator.get());
1223 EXPECT_EQ(origin(), enumerator->Next()); 1219 EXPECT_EQ(origin(), enumerator->Next());
1224 ASSERT_TRUE(type() == kFileSystemTypeTemporary); 1220 ASSERT_TRUE(type() == kFileSystemTypeTemporary);
1225 EXPECT_TRUE(enumerator->HasFileSystemType(kFileSystemTypeTemporary)); 1221 EXPECT_TRUE(enumerator->HasFileSystemType(kFileSystemTypeTemporary));
1226 EXPECT_FALSE(enumerator->HasFileSystemType(kFileSystemTypePersistent)); 1222 EXPECT_FALSE(enumerator->HasFileSystemType(kFileSystemTypePersistent));
1227 EXPECT_EQ(GURL(), enumerator->Next()); 1223 EXPECT_EQ(GURL(), enumerator->Next());
1228 EXPECT_FALSE(enumerator->HasFileSystemType(kFileSystemTypeTemporary)); 1224 EXPECT_FALSE(enumerator->HasFileSystemType(kFileSystemTypeTemporary));
1229 EXPECT_FALSE(enumerator->HasFileSystemType(kFileSystemTypePersistent)); 1225 EXPECT_FALSE(enumerator->HasFileSystemType(kFileSystemTypePersistent));
1230 1226
1231 std::set<GURL> origins_expected; 1227 std::set<GURL> origins_expected;
1232 origins_expected.insert(origin()); 1228 origins_expected.insert(origin());
1233 1229
1234 for (size_t i = 0; i < arraysize(kOriginEnumerationTestRecords); ++i) { 1230 for (size_t i = 0; i < arraysize(kOriginEnumerationTestRecords); ++i) {
1235 SCOPED_TRACE(testing::Message() << 1231 SCOPED_TRACE(testing::Message() <<
1236 "Validating kOriginEnumerationTestRecords " << i); 1232 "Validating kOriginEnumerationTestRecords " << i);
1237 const OriginEnumerationTestRecord& record = 1233 const OriginEnumerationTestRecord& record =
1238 kOriginEnumerationTestRecords[i]; 1234 kOriginEnumerationTestRecords[i];
1239 GURL origin_url(record.origin_url); 1235 GURL origin_url(record.origin_url);
1240 origins_expected.insert(origin_url); 1236 origins_expected.insert(origin_url);
1241 if (record.has_temporary) { 1237 if (record.has_temporary) {
1242 scoped_ptr<FileSystemTestOriginHelper> helper( 1238 scoped_ptr<FileSystemTestOriginHelper> helper(
1243 NewHelper(origin_url, kFileSystemTypeTemporary)); 1239 NewHelper(origin_url, kFileSystemTypeTemporary));
1244 scoped_ptr<FileSystemOperationContext> context(NewContext(helper.get())); 1240 scoped_ptr<FileSystemOperationContext> context(NewContext(helper.get()));
1245 context->set_src_origin_url(origin_url); 1241 context->set_src_origin_url(origin_url);
1246 context->set_src_type(kFileSystemTypeTemporary); 1242 context->set_src_type(kFileSystemTypeTemporary);
1247 bool created = false; 1243 bool created = false;
1248 ASSERT_EQ(base::PLATFORM_FILE_OK, 1244 ASSERT_EQ(base::PLATFORM_FILE_OK,
1249 ofsfu()->EnsureFileExists(context.get(), 1245 ofu()->EnsureFileExists(context.get(),
1250 FilePath().AppendASCII("file"), &created)); 1246 FilePath().AppendASCII("file"), &created));
1251 EXPECT_TRUE(created); 1247 EXPECT_TRUE(created);
1252 } 1248 }
1253 if (record.has_persistent) { 1249 if (record.has_persistent) {
1254 scoped_ptr<FileSystemTestOriginHelper> helper( 1250 scoped_ptr<FileSystemTestOriginHelper> helper(
1255 NewHelper(origin_url, kFileSystemTypePersistent)); 1251 NewHelper(origin_url, kFileSystemTypePersistent));
1256 scoped_ptr<FileSystemOperationContext> context(NewContext(helper.get())); 1252 scoped_ptr<FileSystemOperationContext> context(NewContext(helper.get()));
1257 context->set_src_origin_url(origin_url); 1253 context->set_src_origin_url(origin_url);
1258 context->set_src_type(kFileSystemTypePersistent); 1254 context->set_src_type(kFileSystemTypePersistent);
1259 bool created = false; 1255 bool created = false;
1260 ASSERT_EQ(base::PLATFORM_FILE_OK, 1256 ASSERT_EQ(base::PLATFORM_FILE_OK,
1261 ofsfu()->EnsureFileExists(context.get(), 1257 ofu()->EnsureFileExists(context.get(),
1262 FilePath().AppendASCII("file"), &created)); 1258 FilePath().AppendASCII("file"), &created));
1263 EXPECT_TRUE(created); 1259 EXPECT_TRUE(created);
1264 } 1260 }
1265 } 1261 }
1266 enumerator.reset(ofsfu()->CreateOriginEnumerator()); 1262 enumerator.reset(ofu()->CreateOriginEnumerator());
1267 EXPECT_TRUE(enumerator.get()); 1263 EXPECT_TRUE(enumerator.get());
1268 std::set<GURL> origins_found; 1264 std::set<GURL> origins_found;
1269 GURL origin_url; 1265 GURL origin_url;
1270 while (!(origin_url = enumerator->Next()).is_empty()) { 1266 while (!(origin_url = enumerator->Next()).is_empty()) {
1271 origins_found.insert(origin_url); 1267 origins_found.insert(origin_url);
1272 SCOPED_TRACE(testing::Message() << "Handling " << origin_url.spec()); 1268 SCOPED_TRACE(testing::Message() << "Handling " << origin_url.spec());
1273 bool found = false; 1269 bool found = false;
1274 for (size_t i = 0; !found && i < arraysize(kOriginEnumerationTestRecords); 1270 for (size_t i = 0; !found && i < arraysize(kOriginEnumerationTestRecords);
1275 ++i) { 1271 ++i) {
1276 const OriginEnumerationTestRecord& record = 1272 const OriginEnumerationTestRecord& record =
(...skipping 18 matching lines...) Expand all
1295 EXPECT_TRUE(found); 1291 EXPECT_TRUE(found);
1296 } 1292 }
1297 1293
1298 std::set<GURL> diff; 1294 std::set<GURL> diff;
1299 std::set_symmetric_difference(origins_expected.begin(), 1295 std::set_symmetric_difference(origins_expected.begin(),
1300 origins_expected.end(), origins_found.begin(), origins_found.end(), 1296 origins_expected.end(), origins_found.begin(), origins_found.end(),
1301 inserter(diff, diff.begin())); 1297 inserter(diff, diff.begin()));
1302 EXPECT_TRUE(diff.empty()); 1298 EXPECT_TRUE(diff.empty());
1303 } 1299 }
1304 1300
1305 TEST_F(ObfuscatedFileSystemFileUtilTest, TestRevokeUsageCache) { 1301 TEST_F(ObfuscatedFileUtilTest, TestRevokeUsageCache) {
1306 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL)); 1302 scoped_ptr<FileSystemOperationContext> context(NewContext(NULL));
1307 1303
1308 int64 expected_quota = 0; 1304 int64 expected_quota = 0;
1309 1305
1310 for (size_t i = 0; i < arraysize(kMigrationTestCases); ++i) { 1306 for (size_t i = 0; i < arraysize(kMigrationTestCases); ++i) {
1311 SCOPED_TRACE(testing::Message() << "Creating kMigrationTestPath " << i); 1307 SCOPED_TRACE(testing::Message() << "Creating kMigrationTestPath " << i);
1312 const MigrationTestCaseRecord& test_case = kMigrationTestCases[i]; 1308 const MigrationTestCaseRecord& test_case = kMigrationTestCases[i];
1313 FilePath path(test_case.path); 1309 FilePath path(test_case.path);
1314 expected_quota += ObfuscatedFileSystemFileUtil::ComputeFilePathCost(path); 1310 expected_quota += ObfuscatedFileUtil::ComputeFilePathCost(path);
1315 if (test_case.is_directory) { 1311 if (test_case.is_directory) {
1316 bool exclusive = true; 1312 bool exclusive = true;
1317 bool recursive = false; 1313 bool recursive = false;
1318 ASSERT_EQ(base::PLATFORM_FILE_OK, 1314 ASSERT_EQ(base::PLATFORM_FILE_OK,
1319 ofsfu()->CreateDirectory(context.get(), path, exclusive, recursive)); 1315 ofu()->CreateDirectory(context.get(), path, exclusive, recursive));
1320 } else { 1316 } else {
1321 bool created = false; 1317 bool created = false;
1322 ASSERT_EQ(base::PLATFORM_FILE_OK, 1318 ASSERT_EQ(base::PLATFORM_FILE_OK,
1323 ofsfu()->EnsureFileExists(context.get(), path, &created)); 1319 ofu()->EnsureFileExists(context.get(), path, &created));
1324 ASSERT_TRUE(created); 1320 ASSERT_TRUE(created);
1325 ASSERT_EQ(base::PLATFORM_FILE_OK, 1321 ASSERT_EQ(base::PLATFORM_FILE_OK,
1326 ofsfu()->Truncate(context.get(), path, 1322 ofu()->Truncate(context.get(), path,
1327 test_case.data_file_size)); 1323 test_case.data_file_size));
1328 expected_quota += test_case.data_file_size; 1324 expected_quota += test_case.data_file_size;
1329 } 1325 }
1330 } 1326 }
1331 EXPECT_EQ(expected_quota, SizeInUsageFile()); 1327 EXPECT_EQ(expected_quota, SizeInUsageFile());
1332 RevokeUsageCache(); 1328 RevokeUsageCache();
1333 EXPECT_EQ(-1, SizeInUsageFile()); 1329 EXPECT_EQ(-1, SizeInUsageFile());
1334 GetUsageFromQuotaManager(); 1330 GetUsageFromQuotaManager();
1335 EXPECT_EQ(expected_quota, SizeInUsageFile()); 1331 EXPECT_EQ(expected_quota, SizeInUsageFile());
1336 EXPECT_EQ(expected_quota, usage()); 1332 EXPECT_EQ(expected_quota, usage());
1337 } 1333 }
1338 1334
1339 TEST_F(ObfuscatedFileSystemFileUtilTest, TestInconsistency) { 1335 TEST_F(ObfuscatedFileUtilTest, TestInconsistency) {
1340 const FilePath kPath1 = FilePath().AppendASCII("hoge"); 1336 const FilePath kPath1 = FilePath().AppendASCII("hoge");
1341 const FilePath kPath2 = FilePath().AppendASCII("fuga"); 1337 const FilePath kPath2 = FilePath().AppendASCII("fuga");
1342 1338
1343 scoped_ptr<FileSystemOperationContext> context; 1339 scoped_ptr<FileSystemOperationContext> context;
1344 base::PlatformFile file; 1340 base::PlatformFile file;
1345 base::PlatformFileInfo file_info; 1341 base::PlatformFileInfo file_info;
1346 FilePath data_path; 1342 FilePath data_path;
1347 bool created = false; 1343 bool created = false;
1348 1344
1349 // Create a non-empty file. 1345 // Create a non-empty file.
1350 context.reset(NewContext(NULL)); 1346 context.reset(NewContext(NULL));
1351 EXPECT_EQ(base::PLATFORM_FILE_OK, 1347 EXPECT_EQ(base::PLATFORM_FILE_OK,
1352 ofsfu()->EnsureFileExists(context.get(), kPath1, &created)); 1348 ofu()->EnsureFileExists(context.get(), kPath1, &created));
1353 EXPECT_TRUE(created); 1349 EXPECT_TRUE(created);
1354 context.reset(NewContext(NULL)); 1350 context.reset(NewContext(NULL));
1355 EXPECT_EQ(base::PLATFORM_FILE_OK, 1351 EXPECT_EQ(base::PLATFORM_FILE_OK,
1356 ofsfu()->Truncate(context.get(), kPath1, 10)); 1352 ofu()->Truncate(context.get(), kPath1, 10));
1357 context.reset(NewContext(NULL)); 1353 context.reset(NewContext(NULL));
1358 EXPECT_EQ(base::PLATFORM_FILE_OK, 1354 EXPECT_EQ(base::PLATFORM_FILE_OK,
1359 ofsfu()->GetFileInfo( 1355 ofu()->GetFileInfo(
1360 context.get(), kPath1, &file_info, &data_path)); 1356 context.get(), kPath1, &file_info, &data_path));
1361 EXPECT_EQ(10, file_info.size); 1357 EXPECT_EQ(10, file_info.size);
1362 1358
1363 // Destroy database to make inconsistency between database and filesystem. 1359 // Destroy database to make inconsistency between database and filesystem.
1364 ofsfu()->DestroyDirectoryDatabase(origin(), type()); 1360 ofu()->DestroyDirectoryDatabase(origin(), type());
1365 1361
1366 // Try to get file info of broken file. 1362 // Try to get file info of broken file.
1367 context.reset(NewContext(NULL)); 1363 context.reset(NewContext(NULL));
1368 EXPECT_FALSE(ofsfu()->PathExists(context.get(), kPath1)); 1364 EXPECT_FALSE(ofu()->PathExists(context.get(), kPath1));
1369 context.reset(NewContext(NULL)); 1365 context.reset(NewContext(NULL));
1370 EXPECT_EQ(base::PLATFORM_FILE_OK, 1366 EXPECT_EQ(base::PLATFORM_FILE_OK,
1371 ofsfu()->EnsureFileExists(context.get(), kPath1, &created)); 1367 ofu()->EnsureFileExists(context.get(), kPath1, &created));
1372 EXPECT_TRUE(created); 1368 EXPECT_TRUE(created);
1373 context.reset(NewContext(NULL)); 1369 context.reset(NewContext(NULL));
1374 EXPECT_EQ(base::PLATFORM_FILE_OK, 1370 EXPECT_EQ(base::PLATFORM_FILE_OK,
1375 ofsfu()->GetFileInfo( 1371 ofu()->GetFileInfo(
1376 context.get(), kPath1, &file_info, &data_path)); 1372 context.get(), kPath1, &file_info, &data_path));
1377 EXPECT_EQ(0, file_info.size); 1373 EXPECT_EQ(0, file_info.size);
1378 1374
1379 // Make another broken file to |kPath2|. 1375 // Make another broken file to |kPath2|.
1380 context.reset(NewContext(NULL)); 1376 context.reset(NewContext(NULL));
1381 EXPECT_EQ(base::PLATFORM_FILE_OK, 1377 EXPECT_EQ(base::PLATFORM_FILE_OK,
1382 ofsfu()->EnsureFileExists(context.get(), kPath2, &created)); 1378 ofu()->EnsureFileExists(context.get(), kPath2, &created));
1383 EXPECT_TRUE(created); 1379 EXPECT_TRUE(created);
1384 1380
1385 // Destroy again. 1381 // Destroy again.
1386 ofsfu()->DestroyDirectoryDatabase(origin(), type()); 1382 ofu()->DestroyDirectoryDatabase(origin(), type());
1387 1383
1388 // Repair broken |kPath1|. 1384 // Repair broken |kPath1|.
1389 context.reset(NewContext(NULL)); 1385 context.reset(NewContext(NULL));
1390 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, 1386 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND,
1391 ofsfu()->Touch(context.get(), kPath1, base::Time::Now(), 1387 ofu()->Touch(context.get(), kPath1, base::Time::Now(),
1392 base::Time::Now())); 1388 base::Time::Now()));
1393 EXPECT_EQ(base::PLATFORM_FILE_OK, 1389 EXPECT_EQ(base::PLATFORM_FILE_OK,
1394 ofsfu()->EnsureFileExists(context.get(), kPath1, &created)); 1390 ofu()->EnsureFileExists(context.get(), kPath1, &created));
1395 EXPECT_TRUE(created); 1391 EXPECT_TRUE(created);
1396 1392
1397 // Copy from sound |kPath1| to broken |kPath2|. 1393 // Copy from sound |kPath1| to broken |kPath2|.
1398 context.reset(NewContext(NULL)); 1394 context.reset(NewContext(NULL));
1399 EXPECT_EQ(base::PLATFORM_FILE_OK, 1395 EXPECT_EQ(base::PLATFORM_FILE_OK,
1400 ofsfu()->CopyOrMoveFile(context.get(), kPath1, kPath2, 1396 ofu()->CopyOrMoveFile(context.get(), kPath1, kPath2,
1401 true /* copy */)); 1397 true /* copy */));
1402 1398
1403 ofsfu()->DestroyDirectoryDatabase(origin(), type()); 1399 ofu()->DestroyDirectoryDatabase(origin(), type());
1404 context.reset(NewContext(NULL)); 1400 context.reset(NewContext(NULL));
1405 EXPECT_EQ(base::PLATFORM_FILE_OK, 1401 EXPECT_EQ(base::PLATFORM_FILE_OK,
1406 ofsfu()->CreateOrOpen( 1402 ofu()->CreateOrOpen(
1407 context.get(), kPath1, 1403 context.get(), kPath1,
1408 base::PLATFORM_FILE_READ | base::PLATFORM_FILE_CREATE, 1404 base::PLATFORM_FILE_READ | base::PLATFORM_FILE_CREATE,
1409 &file, &created)); 1405 &file, &created));
1410 EXPECT_TRUE(created); 1406 EXPECT_TRUE(created);
1411 EXPECT_TRUE(base::GetPlatformFileInfo(file, &file_info)); 1407 EXPECT_TRUE(base::GetPlatformFileInfo(file, &file_info));
1412 EXPECT_EQ(0, file_info.size); 1408 EXPECT_EQ(0, file_info.size);
1413 EXPECT_TRUE(base::ClosePlatformFile(file)); 1409 EXPECT_TRUE(base::ClosePlatformFile(file));
1414 } 1410 }
1415 1411
1416 TEST_F(ObfuscatedFileSystemFileUtilTest, TestIncompleteDirectoryReading) { 1412 TEST_F(ObfuscatedFileUtilTest, TestIncompleteDirectoryReading) {
1417 const FilePath kPath[] = { 1413 const FilePath kPath[] = {
1418 FilePath().AppendASCII("foo"), 1414 FilePath().AppendASCII("foo"),
1419 FilePath().AppendASCII("bar"), 1415 FilePath().AppendASCII("bar"),
1420 FilePath().AppendASCII("baz") 1416 FilePath().AppendASCII("baz")
1421 }; 1417 };
1422 scoped_ptr<FileSystemOperationContext> context; 1418 scoped_ptr<FileSystemOperationContext> context;
1423 1419
1424 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kPath); ++i) { 1420 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kPath); ++i) {
1425 bool created = false; 1421 bool created = false;
1426 context.reset(NewContext(NULL)); 1422 context.reset(NewContext(NULL));
1427 EXPECT_EQ(base::PLATFORM_FILE_OK, 1423 EXPECT_EQ(base::PLATFORM_FILE_OK,
1428 ofsfu()->EnsureFileExists(context.get(), kPath[i], &created)); 1424 ofu()->EnsureFileExists(context.get(), kPath[i], &created));
1429 EXPECT_TRUE(created); 1425 EXPECT_TRUE(created);
1430 } 1426 }
1431 1427
1432 context.reset(NewContext(NULL)); 1428 context.reset(NewContext(NULL));
1433 std::vector<base::FileUtilProxy::Entry> entries; 1429 std::vector<base::FileUtilProxy::Entry> entries;
1434 EXPECT_EQ(base::PLATFORM_FILE_OK, 1430 EXPECT_EQ(base::PLATFORM_FILE_OK,
1435 ofsfu()->ReadDirectory(context.get(), FilePath(), &entries)); 1431 ofu()->ReadDirectory(context.get(), FilePath(), &entries));
1436 EXPECT_EQ(3u, entries.size()); 1432 EXPECT_EQ(3u, entries.size());
1437 1433
1438 context.reset(NewContext(NULL)); 1434 context.reset(NewContext(NULL));
1439 FilePath local_path; 1435 FilePath local_path;
1440 EXPECT_EQ(base::PLATFORM_FILE_OK, 1436 EXPECT_EQ(base::PLATFORM_FILE_OK,
1441 ofsfu()->GetLocalFilePath(context.get(), kPath[0], &local_path)); 1437 ofu()->GetLocalFilePath(context.get(), kPath[0], &local_path));
1442 EXPECT_TRUE(file_util::Delete(local_path, false)); 1438 EXPECT_TRUE(file_util::Delete(local_path, false));
1443 1439
1444 context.reset(NewContext(NULL)); 1440 context.reset(NewContext(NULL));
1445 entries.clear(); 1441 entries.clear();
1446 EXPECT_EQ(base::PLATFORM_FILE_OK, 1442 EXPECT_EQ(base::PLATFORM_FILE_OK,
1447 ofsfu()->ReadDirectory(context.get(), FilePath(), &entries)); 1443 ofu()->ReadDirectory(context.get(), FilePath(), &entries));
1448 EXPECT_EQ(ARRAYSIZE_UNSAFE(kPath) - 1, entries.size()); 1444 EXPECT_EQ(ARRAYSIZE_UNSAFE(kPath) - 1, entries.size());
1449 } 1445 }
OLDNEW
« no previous file with comments | « webkit/fileapi/obfuscated_file_util.cc ('k') | webkit/fileapi/quota_file_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698