OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "webkit/fileapi/syncable/local_file_sync_context.h" | 5 #include "webkit/fileapi/syncable/local_file_sync_context.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/file_path.h" | 10 #include "base/file_path.h" |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 ASSERT_TRUE(ui_task_runner_->RunsTasksOnCurrentThread()); | 112 ASSERT_TRUE(ui_task_runner_->RunsTasksOnCurrentThread()); |
113 has_inflight_prepare_for_sync_ = false; | 113 has_inflight_prepare_for_sync_ = false; |
114 status_ = status; | 114 status_ = status; |
115 *metadata_out = sync_file_info.metadata; | 115 *metadata_out = sync_file_info.metadata; |
116 *changes_out = sync_file_info.changes; | 116 *changes_out = sync_file_info.changes; |
117 MessageLoop::current()->Quit(); | 117 MessageLoop::current()->Quit(); |
118 } | 118 } |
119 | 119 |
120 SyncStatusCode ApplyRemoteChange(FileSystemContext* file_system_context, | 120 SyncStatusCode ApplyRemoteChange(FileSystemContext* file_system_context, |
121 const FileChange& change, | 121 const FileChange& change, |
122 const FilePath& local_path, | 122 const base::FilePath& local_path, |
123 const FileSystemURL& url, | 123 const FileSystemURL& url, |
124 SyncFileType expected_file_type) { | 124 SyncFileType expected_file_type) { |
125 SCOPED_TRACE(testing::Message() << "ApplyChange for " << | 125 SCOPED_TRACE(testing::Message() << "ApplyChange for " << |
126 url.DebugString()); | 126 url.DebugString()); |
127 | 127 |
128 // First we should call PrepareForSync to disable writing. | 128 // First we should call PrepareForSync to disable writing. |
129 SyncFileMetadata metadata; | 129 SyncFileMetadata metadata; |
130 FileChangeList changes; | 130 FileChangeList changes; |
131 EXPECT_EQ(SYNC_STATUS_OK, | 131 EXPECT_EQ(SYNC_STATUS_OK, |
132 PrepareForSync(file_system_context, url, &metadata, &changes)); | 132 PrepareForSync(file_system_context, url, &metadata, &changes)); |
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
424 int64 new_usage = -1; | 424 int64 new_usage = -1; |
425 EXPECT_EQ(quota::kQuotaStatusOk, | 425 EXPECT_EQ(quota::kQuotaStatusOk, |
426 file_system.GetUsageAndQuota(&new_usage, "a)); | 426 file_system.GetUsageAndQuota(&new_usage, "a)); |
427 EXPECT_GT(new_usage, initial_usage); | 427 EXPECT_GT(new_usage, initial_usage); |
428 | 428 |
429 // Now let's apply remote deletion changes. | 429 // Now let's apply remote deletion changes. |
430 FileChange change(FileChange::FILE_CHANGE_DELETE, | 430 FileChange change(FileChange::FILE_CHANGE_DELETE, |
431 SYNC_FILE_TYPE_FILE); | 431 SYNC_FILE_TYPE_FILE); |
432 EXPECT_EQ(SYNC_STATUS_OK, | 432 EXPECT_EQ(SYNC_STATUS_OK, |
433 ApplyRemoteChange(file_system.file_system_context(), | 433 ApplyRemoteChange(file_system.file_system_context(), |
434 change, FilePath(), kFile, | 434 change, base::FilePath(), kFile, |
435 SYNC_FILE_TYPE_FILE)); | 435 SYNC_FILE_TYPE_FILE)); |
436 | 436 |
437 // The implementation doesn't check file type for deletion, and it must be ok | 437 // The implementation doesn't check file type for deletion, and it must be ok |
438 // even if we don't know if the deletion change was for a file or a directory. | 438 // even if we don't know if the deletion change was for a file or a directory. |
439 change = FileChange(FileChange::FILE_CHANGE_DELETE, SYNC_FILE_TYPE_UNKNOWN); | 439 change = FileChange(FileChange::FILE_CHANGE_DELETE, SYNC_FILE_TYPE_UNKNOWN); |
440 EXPECT_EQ(SYNC_STATUS_OK, | 440 EXPECT_EQ(SYNC_STATUS_OK, |
441 ApplyRemoteChange(file_system.file_system_context(), | 441 ApplyRemoteChange(file_system.file_system_context(), |
442 change, FilePath(), kDir, | 442 change, base::FilePath(), kDir, |
443 SYNC_FILE_TYPE_DIRECTORY)); | 443 SYNC_FILE_TYPE_DIRECTORY)); |
444 | 444 |
445 // Check the directory/files are deleted successfully. | 445 // Check the directory/files are deleted successfully. |
446 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, | 446 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, |
447 file_system.FileExists(kFile)); | 447 file_system.FileExists(kFile)); |
448 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, | 448 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, |
449 file_system.DirectoryExists(kDir)); | 449 file_system.DirectoryExists(kDir)); |
450 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, | 450 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, |
451 file_system.FileExists(kChild)); | 451 file_system.FileExists(kChild)); |
452 | 452 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
499 file_system.DirectoryExists(kDir)); | 499 file_system.DirectoryExists(kDir)); |
500 | 500 |
501 // file_system's change tracker must have recorded the creation. | 501 // file_system's change tracker must have recorded the creation. |
502 FileSystemURLSet urls; | 502 FileSystemURLSet urls; |
503 file_system.GetChangedURLsInTracker(&urls); | 503 file_system.GetChangedURLsInTracker(&urls); |
504 ASSERT_EQ(1U, urls.size()); | 504 ASSERT_EQ(1U, urls.size()); |
505 EXPECT_TRUE(ContainsKey(urls, kFile1)); | 505 EXPECT_TRUE(ContainsKey(urls, kFile1)); |
506 file_system.ClearChangeForURLInTracker(*urls.begin()); | 506 file_system.ClearChangeForURLInTracker(*urls.begin()); |
507 | 507 |
508 // Prepare temporary files which represent the remote file data. | 508 // Prepare temporary files which represent the remote file data. |
509 const FilePath kFilePath1(temp_dir.path().Append(FPL("file1"))); | 509 const base::FilePath kFilePath1(temp_dir.path().Append(FPL("file1"))); |
510 const FilePath kFilePath2(temp_dir.path().Append(FPL("file2"))); | 510 const base::FilePath kFilePath2(temp_dir.path().Append(FPL("file2"))); |
511 | 511 |
512 ASSERT_EQ(static_cast<int>(arraysize(kTestFileData1) - 1), | 512 ASSERT_EQ(static_cast<int>(arraysize(kTestFileData1) - 1), |
513 file_util::WriteFile(kFilePath1, kTestFileData1, | 513 file_util::WriteFile(kFilePath1, kTestFileData1, |
514 arraysize(kTestFileData1) - 1)); | 514 arraysize(kTestFileData1) - 1)); |
515 ASSERT_EQ(static_cast<int>(arraysize(kTestFileData2) - 1), | 515 ASSERT_EQ(static_cast<int>(arraysize(kTestFileData2) - 1), |
516 file_util::WriteFile(kFilePath2, kTestFileData2, | 516 file_util::WriteFile(kFilePath2, kTestFileData2, |
517 arraysize(kTestFileData2) - 1)); | 517 arraysize(kTestFileData2) - 1)); |
518 | 518 |
519 // Record the usage. | 519 // Record the usage. |
520 int64 usage = -1, new_usage = -1; | 520 int64 usage = -1, new_usage = -1; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
558 SYNC_FILE_TYPE_FILE); | 558 SYNC_FILE_TYPE_FILE); |
559 EXPECT_EQ(SYNC_STATUS_OK, | 559 EXPECT_EQ(SYNC_STATUS_OK, |
560 ApplyRemoteChange(file_system.file_system_context(), | 560 ApplyRemoteChange(file_system.file_system_context(), |
561 change, kFilePath2, kFile2, | 561 change, kFilePath2, kFile2, |
562 SYNC_FILE_TYPE_UNKNOWN)); | 562 SYNC_FILE_TYPE_UNKNOWN)); |
563 | 563 |
564 change = FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, | 564 change = FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, |
565 SYNC_FILE_TYPE_DIRECTORY); | 565 SYNC_FILE_TYPE_DIRECTORY); |
566 EXPECT_EQ(SYNC_STATUS_OK, | 566 EXPECT_EQ(SYNC_STATUS_OK, |
567 ApplyRemoteChange(file_system.file_system_context(), | 567 ApplyRemoteChange(file_system.file_system_context(), |
568 change, FilePath(), kDir, | 568 change, base::FilePath(), kDir, |
569 SYNC_FILE_TYPE_UNKNOWN)); | 569 SYNC_FILE_TYPE_UNKNOWN)); |
570 | 570 |
571 // This should not happen, but calling ApplyRemoteChange | 571 // This should not happen, but calling ApplyRemoteChange |
572 // with wrong file type will result in error. | 572 // with wrong file type will result in error. |
573 change = FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, | 573 change = FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, |
574 SYNC_FILE_TYPE_FILE); | 574 SYNC_FILE_TYPE_FILE); |
575 EXPECT_NE(SYNC_STATUS_OK, | 575 EXPECT_NE(SYNC_STATUS_OK, |
576 ApplyRemoteChange(file_system.file_system_context(), | 576 ApplyRemoteChange(file_system.file_system_context(), |
577 change, kFilePath1, kDir, | 577 change, kFilePath1, kDir, |
578 SYNC_FILE_TYPE_DIRECTORY)); | 578 SYNC_FILE_TYPE_DIRECTORY)); |
(...skipping 15 matching lines...) Expand all Loading... |
594 // Make sure all three files/directory exist. | 594 // Make sure all three files/directory exist. |
595 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.FileExists(kFile1)); | 595 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.FileExists(kFile1)); |
596 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.FileExists(kFile2)); | 596 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.FileExists(kFile2)); |
597 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.DirectoryExists(kDir)); | 597 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.DirectoryExists(kDir)); |
598 | 598 |
599 sync_context_->ShutdownOnUIThread(); | 599 sync_context_->ShutdownOnUIThread(); |
600 file_system.TearDown(); | 600 file_system.TearDown(); |
601 } | 601 } |
602 | 602 |
603 } // namespace fileapi | 603 } // namespace fileapi |
OLD | NEW |