| OLD | NEW | 
|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "chrome/browser/sync_file_system/local/local_file_sync_context.h" | 5 #include "chrome/browser/sync_file_system/local/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/bind_helpers.h" | 
| 10 #include "base/file_util.h" | 11 #include "base/file_util.h" | 
| 11 #include "base/files/file_path.h" | 12 #include "base/files/file_path.h" | 
| 12 #include "base/message_loop/message_loop.h" | 13 #include "base/message_loop/message_loop.h" | 
| 13 #include "base/platform_file.h" | 14 #include "base/platform_file.h" | 
| 14 #include "base/single_thread_task_runner.h" | 15 #include "base/single_thread_task_runner.h" | 
| 15 #include "base/stl_util.h" | 16 #include "base/stl_util.h" | 
| 16 #include "base/threading/thread.h" | 17 #include "base/threading/thread.h" | 
| 17 #include "chrome/browser/sync_file_system/local/canned_syncable_file_system.h" | 18 #include "chrome/browser/sync_file_system/local/canned_syncable_file_system.h" | 
| 18 #include "chrome/browser/sync_file_system/local/local_file_change_tracker.h" | 19 #include "chrome/browser/sync_file_system/local/local_file_change_tracker.h" | 
| 19 #include "chrome/browser/sync_file_system/local/sync_file_system_backend.h" | 20 #include "chrome/browser/sync_file_system/local/sync_file_system_backend.h" | 
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 78                            const FileSystemURL& url, | 79                            const FileSystemURL& url, | 
| 79                            SyncFileMetadata* metadata, | 80                            SyncFileMetadata* metadata, | 
| 80                            FileChangeList* changes) { | 81                            FileChangeList* changes) { | 
| 81     ASSERT_TRUE(changes != NULL); | 82     ASSERT_TRUE(changes != NULL); | 
| 82     ASSERT_FALSE(has_inflight_prepare_for_sync_); | 83     ASSERT_FALSE(has_inflight_prepare_for_sync_); | 
| 83     status_ = SYNC_STATUS_UNKNOWN; | 84     status_ = SYNC_STATUS_UNKNOWN; | 
| 84     has_inflight_prepare_for_sync_ = true; | 85     has_inflight_prepare_for_sync_ = true; | 
| 85     sync_context_->PrepareForSync( | 86     sync_context_->PrepareForSync( | 
| 86         file_system_context, | 87         file_system_context, | 
| 87         url, | 88         url, | 
|  | 89         LocalFileSyncContext::SYNC_EXCLUSIVE, | 
| 88         base::Bind(&LocalFileSyncContextTest::DidPrepareForSync, | 90         base::Bind(&LocalFileSyncContextTest::DidPrepareForSync, | 
| 89                    base::Unretained(this), metadata, changes)); | 91                    base::Unretained(this), metadata, changes)); | 
| 90   } | 92   } | 
| 91 | 93 | 
| 92   SyncStatusCode PrepareForSync(FileSystemContext* file_system_context, | 94   SyncStatusCode PrepareForSync(FileSystemContext* file_system_context, | 
| 93                                 const FileSystemURL& url, | 95                                 const FileSystemURL& url, | 
| 94                                 SyncFileMetadata* metadata, | 96                                 SyncFileMetadata* metadata, | 
| 95                                 FileChangeList* changes) { | 97                                 FileChangeList* changes) { | 
| 96     StartPrepareForSync(file_system_context, url, metadata, changes); | 98     StartPrepareForSync(file_system_context, url, metadata, changes); | 
| 97     base::MessageLoop::current()->Run(); | 99     base::MessageLoop::current()->Run(); | 
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 181           FROM_HERE, | 183           FROM_HERE, | 
| 182           base::Bind(&LocalFileSyncContextTest::DidModifyFile, | 184           base::Bind(&LocalFileSyncContextTest::DidModifyFile, | 
| 183                      base::Unretained(this), error)); | 185                      base::Unretained(this), error)); | 
| 184       return; | 186       return; | 
| 185     } | 187     } | 
| 186     ASSERT_TRUE(ui_task_runner_->RunsTasksOnCurrentThread()); | 188     ASSERT_TRUE(ui_task_runner_->RunsTasksOnCurrentThread()); | 
| 187     file_error_ = error; | 189     file_error_ = error; | 
| 188     async_modify_finished_ = true; | 190     async_modify_finished_ = true; | 
| 189   } | 191   } | 
| 190 | 192 | 
|  | 193   void SimulateFinishSync(FileSystemContext* file_system_context, | 
|  | 194                           const FileSystemURL& url, | 
|  | 195                           SyncStatusCode status) { | 
|  | 196     sync_context_->CommitChangeStatusForURL( | 
|  | 197         file_system_context, | 
|  | 198         url, | 
|  | 199         status, | 
|  | 200         base::Bind(&LocalFileSyncContext::ClearSyncFlagForURL, | 
|  | 201                    sync_context_, url)); | 
|  | 202     base::MessageLoop::current()->RunUntilIdle(); | 
|  | 203   } | 
|  | 204 | 
|  | 205   void PrepareForSync_Basic(LocalFileSyncContext::SyncMode sync_mode, | 
|  | 206                             SyncStatusCode simulate_sync_finish_status) { | 
|  | 207     CannedSyncableFileSystem file_system(GURL(kOrigin1), | 
|  | 208                                          io_task_runner_.get(), | 
|  | 209                                          file_task_runner_.get()); | 
|  | 210     file_system.SetUp(); | 
|  | 211     sync_context_ = new LocalFileSyncContext( | 
|  | 212         ui_task_runner_.get(), io_task_runner_.get()); | 
|  | 213     ASSERT_EQ(SYNC_STATUS_OK, | 
|  | 214               file_system.MaybeInitializeFileSystemContext( | 
|  | 215                   sync_context_.get())); | 
|  | 216     ASSERT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); | 
|  | 217 | 
|  | 218     const FileSystemURL kFile(file_system.URL("file")); | 
|  | 219     EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.CreateFile(kFile)); | 
|  | 220 | 
|  | 221     SyncFileMetadata metadata; | 
|  | 222     FileChangeList changes; | 
|  | 223     EXPECT_EQ(SYNC_STATUS_OK, | 
|  | 224               PrepareForSync(file_system.file_system_context(), kFile, | 
|  | 225                              &metadata, &changes)); | 
|  | 226     EXPECT_EQ(1U, changes.size()); | 
|  | 227     EXPECT_TRUE(changes.list().back().IsFile()); | 
|  | 228     EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); | 
|  | 229 | 
|  | 230     // We should see the same set of changes. | 
|  | 231     file_system.GetChangesForURLInTracker(kFile, &changes); | 
|  | 232     EXPECT_EQ(1U, changes.size()); | 
|  | 233     EXPECT_TRUE(changes.list().back().IsFile()); | 
|  | 234     EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); | 
|  | 235 | 
|  | 236     SimulateFinishSync(file_system.file_system_context(), kFile, | 
|  | 237                        simulate_sync_finish_status); | 
|  | 238 | 
|  | 239     file_system.GetChangesForURLInTracker(kFile, &changes); | 
|  | 240     if (simulate_sync_finish_status == SYNC_STATUS_OK) { | 
|  | 241       // The change's cleared. | 
|  | 242       EXPECT_TRUE(changes.empty()); | 
|  | 243     } else { | 
|  | 244       EXPECT_EQ(1U, changes.size()); | 
|  | 245       EXPECT_TRUE(changes.list().back().IsFile()); | 
|  | 246       EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); | 
|  | 247     } | 
|  | 248 | 
|  | 249     sync_context_->ShutdownOnUIThread(); | 
|  | 250     sync_context_ = NULL; | 
|  | 251 | 
|  | 252     file_system.TearDown(); | 
|  | 253   } | 
|  | 254 | 
| 191   ScopedEnableSyncFSDirectoryOperation enable_directory_operation_; | 255   ScopedEnableSyncFSDirectoryOperation enable_directory_operation_; | 
| 192 | 256 | 
| 193   // These need to remain until the very end. | 257   // These need to remain until the very end. | 
| 194   scoped_ptr<base::Thread> io_thread_; | 258   scoped_ptr<base::Thread> io_thread_; | 
| 195   scoped_ptr<base::Thread> file_thread_; | 259   scoped_ptr<base::Thread> file_thread_; | 
| 196   base::MessageLoop loop_; | 260   base::MessageLoop loop_; | 
| 197 | 261 | 
| 198   scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; | 262   scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; | 
| 199   scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_; | 263   scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_; | 
| 200   scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; | 264   scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; | 
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 329   EXPECT_EQ(SYNC_FILE_TYPE_DIRECTORY, metadata.file_type); | 393   EXPECT_EQ(SYNC_FILE_TYPE_DIRECTORY, metadata.file_type); | 
| 330   EXPECT_EQ(0, metadata.size); | 394   EXPECT_EQ(0, metadata.size); | 
| 331 | 395 | 
| 332   sync_context_->ShutdownOnUIThread(); | 396   sync_context_->ShutdownOnUIThread(); | 
| 333   sync_context_ = NULL; | 397   sync_context_ = NULL; | 
| 334 | 398 | 
| 335   file_system1.TearDown(); | 399   file_system1.TearDown(); | 
| 336   file_system2.TearDown(); | 400   file_system2.TearDown(); | 
| 337 } | 401 } | 
| 338 | 402 | 
|  | 403 TEST_F(LocalFileSyncContextTest, PrepareSync_SyncSuccess_Exclusive) { | 
|  | 404   PrepareForSync_Basic(LocalFileSyncContext::SYNC_EXCLUSIVE, | 
|  | 405                        SYNC_STATUS_OK); | 
|  | 406 } | 
|  | 407 | 
|  | 408 TEST_F(LocalFileSyncContextTest, PrepareSync_SyncSuccess_Snapshot) { | 
|  | 409   PrepareForSync_Basic(LocalFileSyncContext::SYNC_SNAPSHOT, | 
|  | 410                        SYNC_STATUS_OK); | 
|  | 411 } | 
|  | 412 | 
|  | 413 TEST_F(LocalFileSyncContextTest, PrepareSync_SyncFailure_Exclusive) { | 
|  | 414   PrepareForSync_Basic(LocalFileSyncContext::SYNC_EXCLUSIVE, | 
|  | 415                        SYNC_STATUS_FAILED); | 
|  | 416 } | 
|  | 417 | 
|  | 418 TEST_F(LocalFileSyncContextTest, PrepareSync_SyncFailure_Snapshot) { | 
|  | 419   PrepareForSync_Basic(LocalFileSyncContext::SYNC_SNAPSHOT, | 
|  | 420                        SYNC_STATUS_FAILED); | 
|  | 421 } | 
|  | 422 | 
| 339 // LocalFileSyncContextTest.PrepareSyncWhileWriting is flaky on android. | 423 // LocalFileSyncContextTest.PrepareSyncWhileWriting is flaky on android. | 
| 340 // http://crbug.com/239793 | 424 // http://crbug.com/239793 | 
| 341 #if defined(OS_ANDROID) | 425 #if defined(OS_ANDROID) | 
| 342 #define MAYBE_PrepareSyncWhileWriting DISABLED_PrepareSyncWhileWriting | 426 #define MAYBE_PrepareSyncWhileWriting DISABLED_PrepareSyncWhileWriting | 
| 343 #else | 427 #else | 
| 344 #define MAYBE_PrepareSyncWhileWriting PrepareSyncWhileWriting | 428 #define MAYBE_PrepareSyncWhileWriting PrepareSyncWhileWriting | 
| 345 #endif | 429 #endif | 
| 346 TEST_F(LocalFileSyncContextTest, MAYBE_PrepareSyncWhileWriting) { | 430 TEST_F(LocalFileSyncContextTest, MAYBE_PrepareSyncWhileWriting) { | 
| 347   CannedSyncableFileSystem file_system(GURL(kOrigin1), | 431   CannedSyncableFileSystem file_system(GURL(kOrigin1), | 
| 348                                        io_task_runner_.get(), | 432                                        io_task_runner_.get(), | 
| (...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 684 | 768 | 
| 685   // Make sure kDir and kFile are created by ApplyRemoteChange. | 769   // Make sure kDir and kFile are created by ApplyRemoteChange. | 
| 686   EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.FileExists(kFile)); | 770   EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.FileExists(kFile)); | 
| 687   EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.DirectoryExists(kDir)); | 771   EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.DirectoryExists(kDir)); | 
| 688 | 772 | 
| 689   sync_context_->ShutdownOnUIThread(); | 773   sync_context_->ShutdownOnUIThread(); | 
| 690   file_system.TearDown(); | 774   file_system.TearDown(); | 
| 691 } | 775 } | 
| 692 | 776 | 
| 693 }  // namespace sync_file_system | 777 }  // namespace sync_file_system | 
| OLD | NEW | 
|---|