| 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/bind_helpers.h" |
| 11 #include "base/file_util.h" | 11 #include "base/file_util.h" |
| 12 #include "base/files/file_path.h" | 12 #include "base/files/file_path.h" |
| 13 #include "base/message_loop/message_loop.h" | 13 #include "base/message_loop/message_loop.h" |
| 14 #include "base/platform_file.h" | 14 #include "base/platform_file.h" |
| 15 #include "base/stl_util.h" | 15 #include "base/stl_util.h" |
| 16 #include "chrome/browser/sync_file_system/local/canned_syncable_file_system.h" | 16 #include "chrome/browser/sync_file_system/local/canned_syncable_file_system.h" |
| 17 #include "chrome/browser/sync_file_system/local/local_file_change_tracker.h" | 17 #include "chrome/browser/sync_file_system/local/local_file_change_tracker.h" |
| 18 #include "chrome/browser/sync_file_system/local/sync_file_system_backend.h" | 18 #include "chrome/browser/sync_file_system/local/sync_file_system_backend.h" |
| 19 #include "chrome/browser/sync_file_system/sync_file_metadata.h" | 19 #include "chrome/browser/sync_file_system/sync_file_metadata.h" |
| 20 #include "chrome/browser/sync_file_system/sync_status_code.h" | 20 #include "chrome/browser/sync_file_system/sync_status_code.h" |
| 21 #include "chrome/browser/sync_file_system/syncable_file_system_util.h" | 21 #include "chrome/browser/sync_file_system/syncable_file_system_util.h" |
| 22 #include "content/public/browser/browser_thread.h" | 22 #include "content/public/browser/browser_thread.h" |
| 23 #include "content/public/test/test_browser_thread_bundle.h" | 23 #include "content/public/test/test_browser_thread_bundle.h" |
| 24 #include "testing/gtest/include/gtest/gtest.h" | 24 #include "testing/gtest/include/gtest/gtest.h" |
| 25 #include "webkit/browser/blob/mock_blob_url_request_context.h" | 25 #include "webkit/browser/blob/mock_blob_url_request_context.h" |
| 26 #include "webkit/browser/fileapi/file_system_context.h" | 26 #include "webkit/browser/fileapi/file_system_context.h" |
| 27 #include "webkit/browser/fileapi/file_system_operation_runner.h" | 27 #include "webkit/browser/fileapi/file_system_operation_runner.h" |
| 28 #include "webkit/browser/fileapi/isolated_context.h" | 28 #include "webkit/browser/fileapi/isolated_context.h" |
| 29 #include "webkit/common/blob/scoped_file.h" |
| 29 | 30 |
| 30 #define FPL FILE_PATH_LITERAL | 31 #define FPL FILE_PATH_LITERAL |
| 31 | 32 |
| 32 using content::BrowserThread; | 33 using content::BrowserThread; |
| 33 using fileapi::FileSystemContext; | 34 using fileapi::FileSystemContext; |
| 34 using fileapi::FileSystemURL; | 35 using fileapi::FileSystemURL; |
| 35 using fileapi::FileSystemURLSet; | 36 using fileapi::FileSystemURLSet; |
| 36 | 37 |
| 37 // This tests LocalFileSyncContext behavior in multi-thread / | 38 // This tests LocalFileSyncContext behavior in multi-thread / |
| 38 // multi-file-system-context environment. | 39 // multi-file-system-context environment. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 53 : thread_bundle_( | 54 : thread_bundle_( |
| 54 content::TestBrowserThreadBundle::REAL_FILE_THREAD | | 55 content::TestBrowserThreadBundle::REAL_FILE_THREAD | |
| 55 content::TestBrowserThreadBundle::REAL_IO_THREAD), | 56 content::TestBrowserThreadBundle::REAL_IO_THREAD), |
| 56 status_(SYNC_FILE_ERROR_FAILED), | 57 status_(SYNC_FILE_ERROR_FAILED), |
| 57 file_error_(base::PLATFORM_FILE_ERROR_FAILED), | 58 file_error_(base::PLATFORM_FILE_ERROR_FAILED), |
| 58 async_modify_finished_(false), | 59 async_modify_finished_(false), |
| 59 has_inflight_prepare_for_sync_(false) {} | 60 has_inflight_prepare_for_sync_(false) {} |
| 60 | 61 |
| 61 virtual void SetUp() OVERRIDE { | 62 virtual void SetUp() OVERRIDE { |
| 62 RegisterSyncableFileSystem(); | 63 RegisterSyncableFileSystem(); |
| 64 ASSERT_TRUE(dir_.CreateUniqueTempDir()); |
| 63 | 65 |
| 64 ui_task_runner_ = base::MessageLoop::current()->message_loop_proxy(); | 66 ui_task_runner_ = base::MessageLoop::current()->message_loop_proxy(); |
| 65 io_task_runner_ = BrowserThread::GetMessageLoopProxyForThread( | 67 io_task_runner_ = BrowserThread::GetMessageLoopProxyForThread( |
| 66 BrowserThread::IO); | 68 BrowserThread::IO); |
| 67 file_task_runner_ = BrowserThread::GetMessageLoopProxyForThread( | 69 file_task_runner_ = BrowserThread::GetMessageLoopProxyForThread( |
| 68 BrowserThread::IO); | 70 BrowserThread::IO); |
| 69 } | 71 } |
| 70 | 72 |
| 71 virtual void TearDown() OVERRIDE { | 73 virtual void TearDown() OVERRIDE { |
| 72 RevokeSyncableFileSystem(); | 74 RevokeSyncableFileSystem(); |
| 73 } | 75 } |
| 74 | 76 |
| 75 void StartPrepareForSync(FileSystemContext* file_system_context, | 77 void StartPrepareForSync(FileSystemContext* file_system_context, |
| 76 const FileSystemURL& url, | 78 const FileSystemURL& url, |
| 79 LocalFileSyncContext::SyncMode sync_mode, |
| 77 SyncFileMetadata* metadata, | 80 SyncFileMetadata* metadata, |
| 78 FileChangeList* changes) { | 81 FileChangeList* changes, |
| 82 webkit_blob::ScopedFile* snapshot) { |
| 79 ASSERT_TRUE(changes != NULL); | 83 ASSERT_TRUE(changes != NULL); |
| 80 ASSERT_FALSE(has_inflight_prepare_for_sync_); | 84 ASSERT_FALSE(has_inflight_prepare_for_sync_); |
| 81 status_ = SYNC_STATUS_UNKNOWN; | 85 status_ = SYNC_STATUS_UNKNOWN; |
| 82 has_inflight_prepare_for_sync_ = true; | 86 has_inflight_prepare_for_sync_ = true; |
| 83 sync_context_->PrepareForSync( | 87 sync_context_->PrepareForSync( |
| 84 file_system_context, | 88 file_system_context, |
| 85 url, | 89 url, |
| 86 LocalFileSyncContext::SYNC_EXCLUSIVE, | 90 sync_mode, |
| 87 base::Bind(&LocalFileSyncContextTest::DidPrepareForSync, | 91 base::Bind(&LocalFileSyncContextTest::DidPrepareForSync, |
| 88 base::Unretained(this), metadata, changes)); | 92 base::Unretained(this), metadata, changes, snapshot)); |
| 89 } | 93 } |
| 90 | 94 |
| 91 SyncStatusCode PrepareForSync(FileSystemContext* file_system_context, | 95 SyncStatusCode PrepareForSync(FileSystemContext* file_system_context, |
| 92 const FileSystemURL& url, | 96 const FileSystemURL& url, |
| 97 LocalFileSyncContext::SyncMode sync_mode, |
| 93 SyncFileMetadata* metadata, | 98 SyncFileMetadata* metadata, |
| 94 FileChangeList* changes) { | 99 FileChangeList* changes, |
| 95 StartPrepareForSync(file_system_context, url, metadata, changes); | 100 webkit_blob::ScopedFile* snapshot) { |
| 101 StartPrepareForSync(file_system_context, url, sync_mode, |
| 102 metadata, changes, snapshot); |
| 96 base::MessageLoop::current()->Run(); | 103 base::MessageLoop::current()->Run(); |
| 97 return status_; | 104 return status_; |
| 98 } | 105 } |
| 99 | 106 |
| 100 base::Closure GetPrepareForSyncClosure(FileSystemContext* file_system_context, | 107 base::Closure GetPrepareForSyncClosure( |
| 101 const FileSystemURL& url, | 108 FileSystemContext* file_system_context, |
| 102 SyncFileMetadata* metadata, | 109 const FileSystemURL& url, |
| 103 FileChangeList* changes) { | 110 LocalFileSyncContext::SyncMode sync_mode, |
| 111 SyncFileMetadata* metadata, |
| 112 FileChangeList* changes, |
| 113 webkit_blob::ScopedFile* snapshot) { |
| 104 return base::Bind(&LocalFileSyncContextTest::StartPrepareForSync, | 114 return base::Bind(&LocalFileSyncContextTest::StartPrepareForSync, |
| 105 base::Unretained(this), | 115 base::Unretained(this), |
| 106 base::Unretained(file_system_context), | 116 base::Unretained(file_system_context), |
| 107 url, metadata, changes); | 117 url, sync_mode, metadata, changes, snapshot); |
| 108 } | 118 } |
| 109 | 119 |
| 110 void DidPrepareForSync(SyncFileMetadata* metadata_out, | 120 void DidPrepareForSync(SyncFileMetadata* metadata_out, |
| 111 FileChangeList* changes_out, | 121 FileChangeList* changes_out, |
| 122 webkit_blob::ScopedFile* snapshot_out, |
| 112 SyncStatusCode status, | 123 SyncStatusCode status, |
| 113 const LocalFileSyncInfo& sync_file_info) { | 124 const LocalFileSyncInfo& sync_file_info, |
| 125 scoped_ptr<webkit_blob::ScopedFile> snapshot) { |
| 114 ASSERT_TRUE(ui_task_runner_->RunsTasksOnCurrentThread()); | 126 ASSERT_TRUE(ui_task_runner_->RunsTasksOnCurrentThread()); |
| 115 has_inflight_prepare_for_sync_ = false; | 127 has_inflight_prepare_for_sync_ = false; |
| 116 status_ = status; | 128 status_ = status; |
| 117 *metadata_out = sync_file_info.metadata; | 129 *metadata_out = sync_file_info.metadata; |
| 118 *changes_out = sync_file_info.changes; | 130 *changes_out = sync_file_info.changes; |
| 131 if (snapshot_out && snapshot) |
| 132 *snapshot_out = snapshot->Pass(); |
| 119 base::MessageLoop::current()->Quit(); | 133 base::MessageLoop::current()->Quit(); |
| 120 } | 134 } |
| 121 | 135 |
| 122 SyncStatusCode ApplyRemoteChange(FileSystemContext* file_system_context, | 136 SyncStatusCode ApplyRemoteChange(FileSystemContext* file_system_context, |
| 123 const FileChange& change, | 137 const FileChange& change, |
| 124 const base::FilePath& local_path, | 138 const base::FilePath& local_path, |
| 125 const FileSystemURL& url, | 139 const FileSystemURL& url, |
| 126 SyncFileType expected_file_type) { | 140 SyncFileType expected_file_type) { |
| 127 SCOPED_TRACE(testing::Message() << "ApplyChange for " << | 141 SCOPED_TRACE(testing::Message() << "ApplyChange for " << |
| 128 url.DebugString()); | 142 url.DebugString()); |
| 129 | 143 |
| 130 // First we should call PrepareForSync to disable writing. | 144 // First we should call PrepareForSync to disable writing. |
| 131 SyncFileMetadata metadata; | 145 SyncFileMetadata metadata; |
| 132 FileChangeList changes; | 146 FileChangeList changes; |
| 133 EXPECT_EQ(SYNC_STATUS_OK, | 147 EXPECT_EQ(SYNC_STATUS_OK, |
| 134 PrepareForSync(file_system_context, url, &metadata, &changes)); | 148 PrepareForSync(file_system_context, url, |
| 149 LocalFileSyncContext::SYNC_EXCLUSIVE, |
| 150 &metadata, &changes, NULL)); |
| 135 EXPECT_EQ(expected_file_type, metadata.file_type); | 151 EXPECT_EQ(expected_file_type, metadata.file_type); |
| 136 | 152 |
| 137 status_ = SYNC_STATUS_UNKNOWN; | 153 status_ = SYNC_STATUS_UNKNOWN; |
| 138 sync_context_->ApplyRemoteChange( | 154 sync_context_->ApplyRemoteChange( |
| 139 file_system_context, change, local_path, url, | 155 file_system_context, change, local_path, url, |
| 140 base::Bind(&LocalFileSyncContextTest::DidApplyRemoteChange, | 156 base::Bind(&LocalFileSyncContextTest::DidApplyRemoteChange, |
| 141 base::Unretained(this))); | 157 base::Unretained(this))); |
| 142 base::MessageLoop::current()->Run(); | 158 base::MessageLoop::current()->Run(); |
| 143 return status_; | 159 return status_; |
| 144 } | 160 } |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 base::MessageLoop::current()->RunUntilIdle(); | 215 base::MessageLoop::current()->RunUntilIdle(); |
| 200 } | 216 } |
| 201 | 217 |
| 202 void PrepareForSync_Basic(LocalFileSyncContext::SyncMode sync_mode, | 218 void PrepareForSync_Basic(LocalFileSyncContext::SyncMode sync_mode, |
| 203 SyncStatusCode simulate_sync_finish_status) { | 219 SyncStatusCode simulate_sync_finish_status) { |
| 204 CannedSyncableFileSystem file_system(GURL(kOrigin1), | 220 CannedSyncableFileSystem file_system(GURL(kOrigin1), |
| 205 io_task_runner_.get(), | 221 io_task_runner_.get(), |
| 206 file_task_runner_.get()); | 222 file_task_runner_.get()); |
| 207 file_system.SetUp(); | 223 file_system.SetUp(); |
| 208 sync_context_ = new LocalFileSyncContext( | 224 sync_context_ = new LocalFileSyncContext( |
| 209 ui_task_runner_.get(), io_task_runner_.get()); | 225 dir_.path(), ui_task_runner_.get(), io_task_runner_.get()); |
| 210 ASSERT_EQ(SYNC_STATUS_OK, | 226 ASSERT_EQ(SYNC_STATUS_OK, |
| 211 file_system.MaybeInitializeFileSystemContext( | 227 file_system.MaybeInitializeFileSystemContext( |
| 212 sync_context_.get())); | 228 sync_context_.get())); |
| 213 ASSERT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); | 229 ASSERT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); |
| 214 | 230 |
| 215 const FileSystemURL kFile(file_system.URL("file")); | 231 const FileSystemURL kFile(file_system.URL("file")); |
| 216 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.CreateFile(kFile)); | 232 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.CreateFile(kFile)); |
| 217 | 233 |
| 218 SyncFileMetadata metadata; | 234 SyncFileMetadata metadata; |
| 219 FileChangeList changes; | 235 FileChangeList changes; |
| 220 EXPECT_EQ(SYNC_STATUS_OK, | 236 EXPECT_EQ(SYNC_STATUS_OK, |
| 221 PrepareForSync(file_system.file_system_context(), kFile, | 237 PrepareForSync(file_system.file_system_context(), kFile, |
| 222 &metadata, &changes)); | 238 sync_mode, &metadata, &changes, NULL)); |
| 223 EXPECT_EQ(1U, changes.size()); | 239 EXPECT_EQ(1U, changes.size()); |
| 224 EXPECT_TRUE(changes.list().back().IsFile()); | 240 EXPECT_TRUE(changes.list().back().IsFile()); |
| 225 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); | 241 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); |
| 226 | 242 |
| 227 // We should see the same set of changes. | 243 // We should see the same set of changes. |
| 228 file_system.GetChangesForURLInTracker(kFile, &changes); | 244 file_system.GetChangesForURLInTracker(kFile, &changes); |
| 229 EXPECT_EQ(1U, changes.size()); | 245 EXPECT_EQ(1U, changes.size()); |
| 230 EXPECT_TRUE(changes.list().back().IsFile()); | 246 EXPECT_TRUE(changes.list().back().IsFile()); |
| 231 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); | 247 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); |
| 232 | 248 |
| 233 SimulateFinishSync(file_system.file_system_context(), kFile, | 249 SimulateFinishSync(file_system.file_system_context(), kFile, |
| 234 simulate_sync_finish_status); | 250 simulate_sync_finish_status); |
| 235 | 251 |
| 236 file_system.GetChangesForURLInTracker(kFile, &changes); | 252 file_system.GetChangesForURLInTracker(kFile, &changes); |
| 237 if (simulate_sync_finish_status == SYNC_STATUS_OK) { | 253 if (simulate_sync_finish_status == SYNC_STATUS_OK) { |
| 238 // The change's cleared. | 254 // The change's cleared. |
| 239 EXPECT_TRUE(changes.empty()); | 255 EXPECT_TRUE(changes.empty()); |
| 240 } else { | 256 } else { |
| 241 EXPECT_EQ(1U, changes.size()); | 257 EXPECT_EQ(1U, changes.size()); |
| 242 EXPECT_TRUE(changes.list().back().IsFile()); | 258 EXPECT_TRUE(changes.list().back().IsFile()); |
| 243 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); | 259 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); |
| 244 } | 260 } |
| 245 | 261 |
| 246 sync_context_->ShutdownOnUIThread(); | 262 sync_context_->ShutdownOnUIThread(); |
| 247 sync_context_ = NULL; | 263 sync_context_ = NULL; |
| 248 | 264 |
| 249 file_system.TearDown(); | 265 file_system.TearDown(); |
| 250 } | 266 } |
| 251 | 267 |
| 268 void PrepareForSync_WriteDuringSync( |
| 269 LocalFileSyncContext::SyncMode sync_mode) { |
| 270 CannedSyncableFileSystem file_system(GURL(kOrigin1), |
| 271 io_task_runner_.get(), |
| 272 file_task_runner_.get()); |
| 273 file_system.SetUp(); |
| 274 sync_context_ = new LocalFileSyncContext( |
| 275 dir_.path(), ui_task_runner_.get(), io_task_runner_.get()); |
| 276 ASSERT_EQ(SYNC_STATUS_OK, |
| 277 file_system.MaybeInitializeFileSystemContext( |
| 278 sync_context_.get())); |
| 279 ASSERT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); |
| 280 |
| 281 const FileSystemURL kFile(file_system.URL("file")); |
| 282 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.CreateFile(kFile)); |
| 283 |
| 284 SyncFileMetadata metadata; |
| 285 FileChangeList changes; |
| 286 webkit_blob::ScopedFile snapshot; |
| 287 EXPECT_EQ(SYNC_STATUS_OK, |
| 288 PrepareForSync(file_system.file_system_context(), kFile, |
| 289 sync_mode, &metadata, &changes, &snapshot)); |
| 290 EXPECT_EQ(1U, changes.size()); |
| 291 EXPECT_TRUE(changes.list().back().IsFile()); |
| 292 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); |
| 293 |
| 294 EXPECT_EQ(sync_mode == LocalFileSyncContext::SYNC_SNAPSHOT, |
| 295 !snapshot.path().empty()); |
| 296 |
| 297 // Tracker keeps same set of changes. |
| 298 file_system.GetChangesForURLInTracker(kFile, &changes); |
| 299 EXPECT_EQ(1U, changes.size()); |
| 300 EXPECT_TRUE(changes.list().back().IsFile()); |
| 301 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); |
| 302 |
| 303 StartModifyFileOnIOThread(&file_system, kFile); |
| 304 |
| 305 if (sync_mode == LocalFileSyncContext::SYNC_SNAPSHOT) { |
| 306 // Write should succeed. |
| 307 EXPECT_EQ(base::PLATFORM_FILE_OK, WaitUntilModifyFileIsDone()); |
| 308 } else { |
| 309 base::MessageLoop::current()->RunUntilIdle(); |
| 310 EXPECT_FALSE(async_modify_finished_); |
| 311 } |
| 312 |
| 313 SimulateFinishSync(file_system.file_system_context(), kFile, |
| 314 SYNC_STATUS_OK); |
| 315 |
| 316 EXPECT_EQ(base::PLATFORM_FILE_OK, WaitUntilModifyFileIsDone()); |
| 317 |
| 318 // Sync succeeded, but the other change that was made during or |
| 319 // after sync is recorded. |
| 320 file_system.GetChangesForURLInTracker(kFile, &changes); |
| 321 EXPECT_EQ(1U, changes.size()); |
| 322 EXPECT_TRUE(changes.list().back().IsFile()); |
| 323 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); |
| 324 |
| 325 sync_context_->ShutdownOnUIThread(); |
| 326 sync_context_ = NULL; |
| 327 |
| 328 file_system.TearDown(); |
| 329 } |
| 330 |
| 252 ScopedEnableSyncFSDirectoryOperation enable_directory_operation_; | 331 ScopedEnableSyncFSDirectoryOperation enable_directory_operation_; |
| 253 | 332 |
| 333 base::ScopedTempDir dir_; |
| 334 |
| 254 // These need to remain until the very end. | 335 // These need to remain until the very end. |
| 255 content::TestBrowserThreadBundle thread_bundle_; | 336 content::TestBrowserThreadBundle thread_bundle_; |
| 256 | 337 |
| 257 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; | 338 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; |
| 258 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_; | 339 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_; |
| 259 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; | 340 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; |
| 260 | 341 |
| 261 scoped_refptr<LocalFileSyncContext> sync_context_; | 342 scoped_refptr<LocalFileSyncContext> sync_context_; |
| 262 | 343 |
| 263 SyncStatusCode status_; | 344 SyncStatusCode status_; |
| 264 base::PlatformFileError file_error_; | 345 base::PlatformFileError file_error_; |
| 265 bool async_modify_finished_; | 346 bool async_modify_finished_; |
| 266 bool has_inflight_prepare_for_sync_; | 347 bool has_inflight_prepare_for_sync_; |
| 267 }; | 348 }; |
| 268 | 349 |
| 269 TEST_F(LocalFileSyncContextTest, ConstructAndDestruct) { | 350 TEST_F(LocalFileSyncContextTest, ConstructAndDestruct) { |
| 270 sync_context_ = new LocalFileSyncContext( | 351 sync_context_ = |
| 271 ui_task_runner_.get(), io_task_runner_.get()); | 352 new LocalFileSyncContext( |
| 353 dir_.path(), ui_task_runner_.get(), io_task_runner_.get()); |
| 272 sync_context_->ShutdownOnUIThread(); | 354 sync_context_->ShutdownOnUIThread(); |
| 273 } | 355 } |
| 274 | 356 |
| 275 TEST_F(LocalFileSyncContextTest, InitializeFileSystemContext) { | 357 TEST_F(LocalFileSyncContextTest, InitializeFileSystemContext) { |
| 276 CannedSyncableFileSystem file_system(GURL(kOrigin1), | 358 CannedSyncableFileSystem file_system(GURL(kOrigin1), |
| 277 io_task_runner_.get(), | 359 io_task_runner_.get(), |
| 278 file_task_runner_.get()); | 360 file_task_runner_.get()); |
| 279 file_system.SetUp(); | 361 file_system.SetUp(); |
| 280 | 362 |
| 281 sync_context_ = new LocalFileSyncContext( | 363 sync_context_ = new LocalFileSyncContext( |
| 282 ui_task_runner_.get(), io_task_runner_.get()); | 364 dir_.path(), ui_task_runner_.get(), io_task_runner_.get()); |
| 283 | 365 |
| 284 // Initializes file_system using |sync_context_|. | 366 // Initializes file_system using |sync_context_|. |
| 285 EXPECT_EQ(SYNC_STATUS_OK, | 367 EXPECT_EQ(SYNC_STATUS_OK, |
| 286 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); | 368 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); |
| 287 | 369 |
| 288 // Make sure everything's set up for file_system to be able to handle | 370 // Make sure everything's set up for file_system to be able to handle |
| 289 // syncable file system operations. | 371 // syncable file system operations. |
| 290 EXPECT_TRUE(file_system.backend()->sync_context() != NULL); | 372 EXPECT_TRUE(file_system.backend()->sync_context() != NULL); |
| 291 EXPECT_TRUE(file_system.backend()->change_tracker() != NULL); | 373 EXPECT_TRUE(file_system.backend()->change_tracker() != NULL); |
| 292 EXPECT_EQ(sync_context_.get(), file_system.backend()->sync_context()); | 374 EXPECT_EQ(sync_context_.get(), file_system.backend()->sync_context()); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 317 CannedSyncableFileSystem file_system1(GURL(kOrigin1), | 399 CannedSyncableFileSystem file_system1(GURL(kOrigin1), |
| 318 io_task_runner_.get(), | 400 io_task_runner_.get(), |
| 319 file_task_runner_.get()); | 401 file_task_runner_.get()); |
| 320 CannedSyncableFileSystem file_system2(GURL(kOrigin2), | 402 CannedSyncableFileSystem file_system2(GURL(kOrigin2), |
| 321 io_task_runner_.get(), | 403 io_task_runner_.get(), |
| 322 file_task_runner_.get()); | 404 file_task_runner_.get()); |
| 323 file_system1.SetUp(); | 405 file_system1.SetUp(); |
| 324 file_system2.SetUp(); | 406 file_system2.SetUp(); |
| 325 | 407 |
| 326 sync_context_ = new LocalFileSyncContext( | 408 sync_context_ = new LocalFileSyncContext( |
| 327 ui_task_runner_.get(), io_task_runner_.get()); | 409 dir_.path(), ui_task_runner_.get(), io_task_runner_.get()); |
| 328 | 410 |
| 329 // Initializes file_system1 and file_system2. | 411 // Initializes file_system1 and file_system2. |
| 330 EXPECT_EQ(SYNC_STATUS_OK, | 412 EXPECT_EQ(SYNC_STATUS_OK, |
| 331 file_system1.MaybeInitializeFileSystemContext(sync_context_.get())); | 413 file_system1.MaybeInitializeFileSystemContext(sync_context_.get())); |
| 332 EXPECT_EQ(SYNC_STATUS_OK, | 414 EXPECT_EQ(SYNC_STATUS_OK, |
| 333 file_system2.MaybeInitializeFileSystemContext(sync_context_.get())); | 415 file_system2.MaybeInitializeFileSystemContext(sync_context_.get())); |
| 334 | 416 |
| 335 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system1.OpenFileSystem()); | 417 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system1.OpenFileSystem()); |
| 336 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system2.OpenFileSystem()); | 418 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system2.OpenFileSystem()); |
| 337 | 419 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 364 // file_system2's tracker now must have the change for kURL2. | 446 // file_system2's tracker now must have the change for kURL2. |
| 365 urls.clear(); | 447 urls.clear(); |
| 366 file_system2.GetChangedURLsInTracker(&urls); | 448 file_system2.GetChangedURLsInTracker(&urls); |
| 367 ASSERT_EQ(1U, urls.size()); | 449 ASSERT_EQ(1U, urls.size()); |
| 368 EXPECT_TRUE(ContainsKey(urls, kURL2)); | 450 EXPECT_TRUE(ContainsKey(urls, kURL2)); |
| 369 | 451 |
| 370 SyncFileMetadata metadata; | 452 SyncFileMetadata metadata; |
| 371 FileChangeList changes; | 453 FileChangeList changes; |
| 372 EXPECT_EQ(SYNC_STATUS_OK, | 454 EXPECT_EQ(SYNC_STATUS_OK, |
| 373 PrepareForSync(file_system1.file_system_context(), kURL1, | 455 PrepareForSync(file_system1.file_system_context(), kURL1, |
| 374 &metadata, &changes)); | 456 LocalFileSyncContext::SYNC_EXCLUSIVE, |
| 457 &metadata, &changes, NULL)); |
| 375 EXPECT_EQ(1U, changes.size()); | 458 EXPECT_EQ(1U, changes.size()); |
| 376 EXPECT_TRUE(changes.list().back().IsFile()); | 459 EXPECT_TRUE(changes.list().back().IsFile()); |
| 377 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); | 460 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); |
| 378 EXPECT_EQ(SYNC_FILE_TYPE_FILE, metadata.file_type); | 461 EXPECT_EQ(SYNC_FILE_TYPE_FILE, metadata.file_type); |
| 379 EXPECT_EQ(0, metadata.size); | 462 EXPECT_EQ(0, metadata.size); |
| 380 | 463 |
| 381 changes.clear(); | 464 changes.clear(); |
| 382 EXPECT_EQ(SYNC_STATUS_OK, | 465 EXPECT_EQ(SYNC_STATUS_OK, |
| 383 PrepareForSync(file_system2.file_system_context(), kURL2, | 466 PrepareForSync(file_system2.file_system_context(), kURL2, |
| 384 &metadata, &changes)); | 467 LocalFileSyncContext::SYNC_EXCLUSIVE, |
| 468 &metadata, &changes, NULL)); |
| 385 EXPECT_EQ(1U, changes.size()); | 469 EXPECT_EQ(1U, changes.size()); |
| 386 EXPECT_FALSE(changes.list().back().IsFile()); | 470 EXPECT_FALSE(changes.list().back().IsFile()); |
| 387 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); | 471 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); |
| 388 EXPECT_EQ(SYNC_FILE_TYPE_DIRECTORY, metadata.file_type); | 472 EXPECT_EQ(SYNC_FILE_TYPE_DIRECTORY, metadata.file_type); |
| 389 EXPECT_EQ(0, metadata.size); | 473 EXPECT_EQ(0, metadata.size); |
| 390 | 474 |
| 391 sync_context_->ShutdownOnUIThread(); | 475 sync_context_->ShutdownOnUIThread(); |
| 392 sync_context_ = NULL; | 476 sync_context_ = NULL; |
| 393 | 477 |
| 394 file_system1.TearDown(); | 478 file_system1.TearDown(); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 408 TEST_F(LocalFileSyncContextTest, PrepareSync_SyncFailure_Exclusive) { | 492 TEST_F(LocalFileSyncContextTest, PrepareSync_SyncFailure_Exclusive) { |
| 409 PrepareForSync_Basic(LocalFileSyncContext::SYNC_EXCLUSIVE, | 493 PrepareForSync_Basic(LocalFileSyncContext::SYNC_EXCLUSIVE, |
| 410 SYNC_STATUS_FAILED); | 494 SYNC_STATUS_FAILED); |
| 411 } | 495 } |
| 412 | 496 |
| 413 TEST_F(LocalFileSyncContextTest, PrepareSync_SyncFailure_Snapshot) { | 497 TEST_F(LocalFileSyncContextTest, PrepareSync_SyncFailure_Snapshot) { |
| 414 PrepareForSync_Basic(LocalFileSyncContext::SYNC_SNAPSHOT, | 498 PrepareForSync_Basic(LocalFileSyncContext::SYNC_SNAPSHOT, |
| 415 SYNC_STATUS_FAILED); | 499 SYNC_STATUS_FAILED); |
| 416 } | 500 } |
| 417 | 501 |
| 502 TEST_F(LocalFileSyncContextTest, PrepareSync_WriteDuringSync_Exclusive) { |
| 503 PrepareForSync_WriteDuringSync(LocalFileSyncContext::SYNC_EXCLUSIVE); |
| 504 } |
| 505 |
| 506 TEST_F(LocalFileSyncContextTest, PrepareSync_WriteDuringSync_Snapshot) { |
| 507 PrepareForSync_WriteDuringSync(LocalFileSyncContext::SYNC_SNAPSHOT); |
| 508 } |
| 509 |
| 418 // LocalFileSyncContextTest.PrepareSyncWhileWriting is flaky on android. | 510 // LocalFileSyncContextTest.PrepareSyncWhileWriting is flaky on android. |
| 419 // http://crbug.com/239793 | 511 // http://crbug.com/239793 |
| 420 #if defined(OS_ANDROID) | 512 #if defined(OS_ANDROID) |
| 421 #define MAYBE_PrepareSyncWhileWriting DISABLED_PrepareSyncWhileWriting | 513 #define MAYBE_PrepareSyncWhileWriting DISABLED_PrepareSyncWhileWriting |
| 422 #else | 514 #else |
| 423 #define MAYBE_PrepareSyncWhileWriting PrepareSyncWhileWriting | 515 #define MAYBE_PrepareSyncWhileWriting PrepareSyncWhileWriting |
| 424 #endif | 516 #endif |
| 425 TEST_F(LocalFileSyncContextTest, MAYBE_PrepareSyncWhileWriting) { | 517 TEST_F(LocalFileSyncContextTest, MAYBE_PrepareSyncWhileWriting) { |
| 426 CannedSyncableFileSystem file_system(GURL(kOrigin1), | 518 CannedSyncableFileSystem file_system(GURL(kOrigin1), |
| 427 io_task_runner_.get(), | 519 io_task_runner_.get(), |
| 428 file_task_runner_.get()); | 520 file_task_runner_.get()); |
| 429 file_system.SetUp(); | 521 file_system.SetUp(); |
| 430 sync_context_ = new LocalFileSyncContext( | 522 sync_context_ = new LocalFileSyncContext( |
| 431 ui_task_runner_.get(), io_task_runner_.get()); | 523 dir_.path(), ui_task_runner_.get(), io_task_runner_.get()); |
| 432 EXPECT_EQ(SYNC_STATUS_OK, | 524 EXPECT_EQ(SYNC_STATUS_OK, |
| 433 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); | 525 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); |
| 434 | 526 |
| 435 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); | 527 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); |
| 436 | 528 |
| 437 const FileSystemURL kURL1(file_system.URL("foo")); | 529 const FileSystemURL kURL1(file_system.URL("foo")); |
| 438 | 530 |
| 439 // Creates a file in file_system. | 531 // Creates a file in file_system. |
| 440 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.CreateFile(kURL1)); | 532 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.CreateFile(kURL1)); |
| 441 | 533 |
| 442 // Kick file write on IO thread. | 534 // Kick file write on IO thread. |
| 443 StartModifyFileOnIOThread(&file_system, kURL1); | 535 StartModifyFileOnIOThread(&file_system, kURL1); |
| 444 | 536 |
| 445 // Until the operation finishes PrepareForSync should return BUSY error. | 537 // Until the operation finishes PrepareForSync should return BUSY error. |
| 446 SyncFileMetadata metadata; | 538 SyncFileMetadata metadata; |
| 447 metadata.file_type = SYNC_FILE_TYPE_UNKNOWN; | 539 metadata.file_type = SYNC_FILE_TYPE_UNKNOWN; |
| 448 FileChangeList changes; | 540 FileChangeList changes; |
| 449 EXPECT_EQ(SYNC_STATUS_FILE_BUSY, | 541 EXPECT_EQ(SYNC_STATUS_FILE_BUSY, |
| 450 PrepareForSync(file_system.file_system_context(), | 542 PrepareForSync(file_system.file_system_context(), kURL1, |
| 451 kURL1, &metadata, &changes)); | 543 LocalFileSyncContext::SYNC_EXCLUSIVE, |
| 544 &metadata, &changes, NULL)); |
| 452 EXPECT_EQ(SYNC_FILE_TYPE_FILE, metadata.file_type); | 545 EXPECT_EQ(SYNC_FILE_TYPE_FILE, metadata.file_type); |
| 453 | 546 |
| 454 // Register PrepareForSync method to be invoked when kURL1 becomes | 547 // Register PrepareForSync method to be invoked when kURL1 becomes |
| 455 // syncable. (Actually this may be done after all operations are done | 548 // syncable. (Actually this may be done after all operations are done |
| 456 // on IO thread in this test.) | 549 // on IO thread in this test.) |
| 457 metadata.file_type = SYNC_FILE_TYPE_UNKNOWN; | 550 metadata.file_type = SYNC_FILE_TYPE_UNKNOWN; |
| 458 changes.clear(); | 551 changes.clear(); |
| 459 sync_context_->RegisterURLForWaitingSync( | 552 sync_context_->RegisterURLForWaitingSync( |
| 460 kURL1, GetPrepareForSyncClosure(file_system.file_system_context(), | 553 kURL1, GetPrepareForSyncClosure(file_system.file_system_context(), kURL1, |
| 461 kURL1, &metadata, &changes)); | 554 LocalFileSyncContext::SYNC_EXCLUSIVE, |
| 555 &metadata, &changes, NULL)); |
| 462 | 556 |
| 463 // Wait for the completion. | 557 // Wait for the completion. |
| 464 EXPECT_EQ(base::PLATFORM_FILE_OK, WaitUntilModifyFileIsDone()); | 558 EXPECT_EQ(base::PLATFORM_FILE_OK, WaitUntilModifyFileIsDone()); |
| 465 | 559 |
| 466 // The PrepareForSync must have been started; wait until DidPrepareForSync | 560 // The PrepareForSync must have been started; wait until DidPrepareForSync |
| 467 // is done. | 561 // is done. |
| 468 base::MessageLoop::current()->Run(); | 562 base::MessageLoop::current()->Run(); |
| 469 ASSERT_FALSE(has_inflight_prepare_for_sync_); | 563 ASSERT_FALSE(has_inflight_prepare_for_sync_); |
| 470 | 564 |
| 471 // Now PrepareForSync should have run and returned OK. | 565 // Now PrepareForSync should have run and returned OK. |
| 472 EXPECT_EQ(SYNC_STATUS_OK, status_); | 566 EXPECT_EQ(SYNC_STATUS_OK, status_); |
| 473 EXPECT_EQ(1U, changes.size()); | 567 EXPECT_EQ(1U, changes.size()); |
| 474 EXPECT_TRUE(changes.list().back().IsFile()); | 568 EXPECT_TRUE(changes.list().back().IsFile()); |
| 475 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); | 569 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); |
| 476 EXPECT_EQ(SYNC_FILE_TYPE_FILE, metadata.file_type); | 570 EXPECT_EQ(SYNC_FILE_TYPE_FILE, metadata.file_type); |
| 477 EXPECT_EQ(1, metadata.size); | 571 EXPECT_EQ(1, metadata.size); |
| 478 | 572 |
| 479 sync_context_->ShutdownOnUIThread(); | 573 sync_context_->ShutdownOnUIThread(); |
| 480 sync_context_ = NULL; | 574 sync_context_ = NULL; |
| 481 file_system.TearDown(); | 575 file_system.TearDown(); |
| 482 } | 576 } |
| 483 | 577 |
| 484 TEST_F(LocalFileSyncContextTest, ApplyRemoteChangeForDeletion) { | 578 TEST_F(LocalFileSyncContextTest, ApplyRemoteChangeForDeletion) { |
| 485 CannedSyncableFileSystem file_system(GURL(kOrigin1), | 579 CannedSyncableFileSystem file_system(GURL(kOrigin1), |
| 486 io_task_runner_.get(), | 580 io_task_runner_.get(), |
| 487 file_task_runner_.get()); | 581 file_task_runner_.get()); |
| 488 file_system.SetUp(); | 582 file_system.SetUp(); |
| 489 | 583 |
| 490 sync_context_ = new LocalFileSyncContext( | 584 sync_context_ = new LocalFileSyncContext( |
| 491 ui_task_runner_.get(), io_task_runner_.get()); | 585 dir_.path(), ui_task_runner_.get(), io_task_runner_.get()); |
| 492 ASSERT_EQ(SYNC_STATUS_OK, | 586 ASSERT_EQ(SYNC_STATUS_OK, |
| 493 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); | 587 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); |
| 494 ASSERT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); | 588 ASSERT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); |
| 495 | 589 |
| 496 // Record the initial usage (likely 0). | 590 // Record the initial usage (likely 0). |
| 497 int64 initial_usage = -1; | 591 int64 initial_usage = -1; |
| 498 int64 quota = -1; | 592 int64 quota = -1; |
| 499 EXPECT_EQ(quota::kQuotaStatusOk, | 593 EXPECT_EQ(quota::kQuotaStatusOk, |
| 500 file_system.GetUsageAndQuota(&initial_usage, "a)); | 594 file_system.GetUsageAndQuota(&initial_usage, "a)); |
| 501 | 595 |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 570 TEST_F(LocalFileSyncContextTest, ApplyRemoteChangeForAddOrUpdate) { | 664 TEST_F(LocalFileSyncContextTest, ApplyRemoteChangeForAddOrUpdate) { |
| 571 base::ScopedTempDir temp_dir; | 665 base::ScopedTempDir temp_dir; |
| 572 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 666 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 573 | 667 |
| 574 CannedSyncableFileSystem file_system(GURL(kOrigin1), | 668 CannedSyncableFileSystem file_system(GURL(kOrigin1), |
| 575 io_task_runner_.get(), | 669 io_task_runner_.get(), |
| 576 file_task_runner_.get()); | 670 file_task_runner_.get()); |
| 577 file_system.SetUp(); | 671 file_system.SetUp(); |
| 578 | 672 |
| 579 sync_context_ = new LocalFileSyncContext( | 673 sync_context_ = new LocalFileSyncContext( |
| 580 ui_task_runner_.get(), io_task_runner_.get()); | 674 dir_.path(), ui_task_runner_.get(), io_task_runner_.get()); |
| 581 ASSERT_EQ(SYNC_STATUS_OK, | 675 ASSERT_EQ(SYNC_STATUS_OK, |
| 582 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); | 676 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); |
| 583 ASSERT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); | 677 ASSERT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); |
| 584 | 678 |
| 585 const FileSystemURL kFile1(file_system.URL("file1")); | 679 const FileSystemURL kFile1(file_system.URL("file1")); |
| 586 const FileSystemURL kFile2(file_system.URL("file2")); | 680 const FileSystemURL kFile2(file_system.URL("file2")); |
| 587 const FileSystemURL kDir(file_system.URL("dir")); | 681 const FileSystemURL kDir(file_system.URL("dir")); |
| 588 | 682 |
| 589 const char kTestFileData0[] = "0123456789"; | 683 const char kTestFileData0[] = "0123456789"; |
| 590 const char kTestFileData1[] = "Lorem ipsum!"; | 684 const char kTestFileData1[] = "Lorem ipsum!"; |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 719 TEST_F(LocalFileSyncContextTest, ApplyRemoteChangeForAddOrUpdate_NoParent) { | 813 TEST_F(LocalFileSyncContextTest, ApplyRemoteChangeForAddOrUpdate_NoParent) { |
| 720 base::ScopedTempDir temp_dir; | 814 base::ScopedTempDir temp_dir; |
| 721 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 815 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 722 | 816 |
| 723 CannedSyncableFileSystem file_system(GURL(kOrigin1), | 817 CannedSyncableFileSystem file_system(GURL(kOrigin1), |
| 724 io_task_runner_.get(), | 818 io_task_runner_.get(), |
| 725 file_task_runner_.get()); | 819 file_task_runner_.get()); |
| 726 file_system.SetUp(); | 820 file_system.SetUp(); |
| 727 | 821 |
| 728 sync_context_ = new LocalFileSyncContext( | 822 sync_context_ = new LocalFileSyncContext( |
| 729 ui_task_runner_.get(), io_task_runner_.get()); | 823 dir_.path(), ui_task_runner_.get(), io_task_runner_.get()); |
| 730 ASSERT_EQ(SYNC_STATUS_OK, | 824 ASSERT_EQ(SYNC_STATUS_OK, |
| 731 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); | 825 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); |
| 732 ASSERT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); | 826 ASSERT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); |
| 733 | 827 |
| 734 const char kTestFileData[] = "Lorem ipsum!"; | 828 const char kTestFileData[] = "Lorem ipsum!"; |
| 735 const FileSystemURL kDir(file_system.URL("dir")); | 829 const FileSystemURL kDir(file_system.URL("dir")); |
| 736 const FileSystemURL kFile(file_system.URL("dir/file")); | 830 const FileSystemURL kFile(file_system.URL("dir/file")); |
| 737 | 831 |
| 738 // Either kDir or kFile not exist yet. | 832 // Either kDir or kFile not exist yet. |
| 739 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, file_system.FileExists(kDir)); | 833 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, file_system.FileExists(kDir)); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 763 | 857 |
| 764 // Make sure kDir and kFile are created by ApplyRemoteChange. | 858 // Make sure kDir and kFile are created by ApplyRemoteChange. |
| 765 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.FileExists(kFile)); | 859 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.FileExists(kFile)); |
| 766 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.DirectoryExists(kDir)); | 860 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.DirectoryExists(kDir)); |
| 767 | 861 |
| 768 sync_context_->ShutdownOnUIThread(); | 862 sync_context_->ShutdownOnUIThread(); |
| 769 file_system.TearDown(); | 863 file_system.TearDown(); |
| 770 } | 864 } |
| 771 | 865 |
| 772 } // namespace sync_file_system | 866 } // namespace sync_file_system |
| OLD | NEW |