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 "chrome/browser/chromeos/drive/drive_file_system.h" | 5 #include "chrome/browser/chromeos/drive/drive_file_system.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 12 matching lines...) Expand all Loading... | |
23 #include "chrome/browser/chromeos/drive/drive_test_util.h" | 23 #include "chrome/browser/chromeos/drive/drive_test_util.h" |
24 #include "chrome/browser/chromeos/drive/drive_webapps_registry.h" | 24 #include "chrome/browser/chromeos/drive/drive_webapps_registry.h" |
25 #include "chrome/browser/chromeos/drive/file_system/remove_operation.h" | 25 #include "chrome/browser/chromeos/drive/file_system/remove_operation.h" |
26 #include "chrome/browser/chromeos/drive/mock_directory_change_observer.h" | 26 #include "chrome/browser/chromeos/drive/mock_directory_change_observer.h" |
27 #include "chrome/browser/chromeos/drive/mock_drive_cache_observer.h" | 27 #include "chrome/browser/chromeos/drive/mock_drive_cache_observer.h" |
28 #include "chrome/browser/chromeos/drive/mock_drive_web_apps_registry.h" | 28 #include "chrome/browser/chromeos/drive/mock_drive_web_apps_registry.h" |
29 #include "chrome/browser/chromeos/drive/mock_free_disk_space_getter.h" | 29 #include "chrome/browser/chromeos/drive/mock_free_disk_space_getter.h" |
30 #include "chrome/browser/google_apis/drive_api_parser.h" | 30 #include "chrome/browser/google_apis/drive_api_parser.h" |
31 #include "chrome/browser/google_apis/drive_uploader.h" | 31 #include "chrome/browser/google_apis/drive_uploader.h" |
32 #include "chrome/browser/google_apis/mock_drive_service.h" | 32 #include "chrome/browser/google_apis/mock_drive_service.h" |
33 #include "chrome/browser/google_apis/mock_drive_uploader.h" | |
34 #include "chrome/common/chrome_paths.h" | 33 #include "chrome/common/chrome_paths.h" |
35 #include "chrome/test/base/testing_profile.h" | 34 #include "chrome/test/base/testing_profile.h" |
36 #include "content/public/browser/browser_thread.h" | 35 #include "content/public/browser/browser_thread.h" |
37 #include "content/public/test/test_browser_thread.h" | 36 #include "content/public/test/test_browser_thread.h" |
38 #include "testing/gmock/include/gmock/gmock.h" | 37 #include "testing/gmock/include/gmock/gmock.h" |
39 #include "testing/gtest/include/gtest/gtest.h" | 38 #include "testing/gtest/include/gtest/gtest.h" |
40 | 39 |
41 using ::testing::AnyNumber; | 40 using ::testing::AnyNumber; |
42 using ::testing::AtLeast; | 41 using ::testing::AtLeast; |
43 using ::testing::Eq; | 42 using ::testing::Eq; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
84 } | 83 } |
85 | 84 |
86 // Action used to set mock expectations for | 85 // Action used to set mock expectations for |
87 // DriveServiceInterface::GetDocumentEntry(). | 86 // DriveServiceInterface::GetDocumentEntry(). |
88 ACTION_P2(MockGetDocumentEntry, status, value) { | 87 ACTION_P2(MockGetDocumentEntry, status, value) { |
89 base::MessageLoopProxy::current()->PostTask(FROM_HERE, | 88 base::MessageLoopProxy::current()->PostTask(FROM_HERE, |
90 base::Bind(arg1, status, base::Passed(value))); | 89 base::Bind(arg1, status, base::Passed(value))); |
91 } | 90 } |
92 | 91 |
93 // Action used to set mock expectations for | 92 // Action used to set mock expectations for |
94 // DriveUploaderInterface::UploadExistingFile(). | |
95 ACTION_P4(MockUploadExistingFile, | |
96 error, drive_path, local_file_path, document_entry) { | |
97 scoped_ptr<google_apis::DocumentEntry> scoped_document_entry(document_entry); | |
98 base::MessageLoopProxy::current()->PostTask(FROM_HERE, | |
99 base::Bind(arg5, | |
100 error, | |
101 drive_path, | |
102 local_file_path, | |
103 base::Passed(&scoped_document_entry))); | |
104 | |
105 const int kUploadId = 123; | |
106 return kUploadId; | |
107 } | |
108 | |
109 // Action used to set mock expectations for | |
110 // DriveUploaderInterface::UploadNewFile(). | |
111 ACTION(MockUploadNewFile) { | |
112 scoped_ptr<base::Value> value = | |
113 google_apis::test_util::LoadJSONFile("gdata/uploaded_file.json"); | |
114 scoped_ptr<google_apis::DocumentEntry> document_entry( | |
115 google_apis::DocumentEntry::ExtractAndParse(*value)); | |
116 | |
117 base::MessageLoopProxy::current()->PostTask(FROM_HERE, | |
118 base::Bind(arg7, | |
119 google_apis::DRIVE_UPLOAD_OK, | |
120 arg1, | |
121 arg2, | |
122 base::Passed(&document_entry))); | |
123 | |
124 const int kUploadId = 123; | |
125 return kUploadId; | |
126 } | |
127 | |
128 // Action used to set mock expectations for | |
129 // DriveFileSystem::CopyDocument(). | 93 // DriveFileSystem::CopyDocument(). |
130 ACTION_P2(MockCopyDocument, status, value) { | 94 ACTION_P2(MockCopyDocument, status, value) { |
131 base::MessageLoopProxy::current()->PostTask( | 95 base::MessageLoopProxy::current()->PostTask( |
132 FROM_HERE, | 96 FROM_HERE, |
133 base::Bind(arg2, status, base::Passed(value))); | 97 base::Bind(arg2, status, base::Passed(value))); |
134 } | 98 } |
135 | 99 |
136 ACTION(MockFailingGetDocuments) { | 100 ACTION(MockFailingGetDocuments) { |
137 base::MessageLoopProxy::current()->PostTask( | 101 base::MessageLoopProxy::current()->PostTask( |
138 FROM_HERE, | 102 FROM_HERE, |
139 base::Bind(arg5, google_apis::GDATA_NO_CONNECTION, | 103 base::Bind(arg5, google_apis::GDATA_NO_CONNECTION, |
140 base::Passed(scoped_ptr<base::Value>()))); | 104 base::Passed(scoped_ptr<base::Value>()))); |
141 } | 105 } |
142 | 106 |
143 // Counts the number of files (not directories) in |entries|. | 107 // Counts the number of files (not directories) in |entries|. |
144 int CountFiles(const DriveEntryProtoVector& entries) { | 108 int CountFiles(const DriveEntryProtoVector& entries) { |
145 int num_files = 0; | 109 int num_files = 0; |
146 for (size_t i = 0; i < entries.size(); ++i) { | 110 for (size_t i = 0; i < entries.size(); ++i) { |
147 if (!entries[i].file_info().is_directory()) | 111 if (!entries[i].file_info().is_directory()) |
148 ++num_files; | 112 ++num_files; |
149 } | 113 } |
150 return num_files; | 114 return num_files; |
151 } | 115 } |
152 | 116 |
153 } // namespace | 117 } // namespace |
154 | 118 |
119 // A fake implementation of DriveUploaderInterface, which provides fake | |
120 // behaviors for file uploading. | |
121 class FakeDriveUploader : public google_apis::DriveUploaderInterface { | |
122 public: | |
123 FakeDriveUploader() {}; | |
kinaba
2012/11/22 06:12:13
semicolon not needed.
satorux1
2012/11/22 06:16:13
Done.
| |
124 virtual ~FakeDriveUploader() {}; | |
kinaba
2012/11/22 06:12:13
ditto.
satorux1
2012/11/22 06:16:13
Done.
| |
125 | |
126 // DriveUploaderInterface overrides. | |
127 | |
128 // Pretends that a new file was uploaded successfully, and returns the | |
129 // contents of "gdata/uploaded_file.json" to the caller. | |
130 virtual int UploadNewFile( | |
131 const GURL& upload_location, | |
132 const FilePath& drive_file_path, | |
133 const FilePath& local_file_path, | |
134 const std::string& title, | |
135 const std::string& content_type, | |
136 int64 content_length, | |
137 int64 file_size, | |
138 const google_apis::UploadCompletionCallback& completion_callback, | |
139 const google_apis::UploaderReadyCallback& ready_callback) OVERRIDE { | |
140 scoped_ptr<base::Value> value = | |
141 google_apis::test_util::LoadJSONFile("gdata/uploaded_file.json"); | |
142 scoped_ptr<google_apis::DocumentEntry> document_entry( | |
143 google_apis::DocumentEntry::ExtractAndParse(*value)); | |
144 | |
145 base::MessageLoopProxy::current()->PostTask( | |
146 FROM_HERE, | |
147 base::Bind(completion_callback, | |
148 google_apis::DRIVE_UPLOAD_OK, | |
149 drive_file_path, | |
150 local_file_path, | |
151 base::Passed(&document_entry))); | |
152 | |
153 const int kUploadId = 123; | |
154 return kUploadId; | |
155 } | |
156 | |
157 virtual int StreamExistingFile( | |
158 const GURL& upload_location, | |
159 const FilePath& drive_file_path, | |
160 const FilePath& local_file_path, | |
161 const std::string& content_type, | |
162 int64 content_length, | |
163 int64 file_size, | |
164 const google_apis::UploadCompletionCallback& completion_callback, | |
165 const google_apis::UploaderReadyCallback& ready_callback) OVERRIDE { | |
166 NOTREACHED(); | |
167 return 0; | |
168 } | |
169 | |
170 // Pretends that an existing file ("drive/File 1.txt") was uploaded | |
171 // successfully, and returns an entry for the file in | |
172 // "gdata/root_feed.json" to the caller. | |
173 virtual int UploadExistingFile( | |
174 const GURL& upload_location, | |
175 const FilePath& drive_file_path, | |
176 const FilePath& local_file_path, | |
177 const std::string& content_type, | |
178 int64 file_size, | |
179 const google_apis::UploadCompletionCallback& completion_callback, | |
180 const google_apis::UploaderReadyCallback& ready_callback) { | |
181 // This function can only handle "drive/File 1.txt" whose resource ID is | |
182 // "file:2_file_resource_id". | |
183 DCHECK_EQ("drive/File 1.txt", drive_file_path.value()); | |
184 const std::string kResourceId = "file:2_file_resource_id"; | |
185 | |
186 // Create a google_apis::DocumentEntry, which is needed to return a value | |
187 // from this function. TODO(satorux): This should be cleaned | |
188 // up. crbug.com/134240. | |
189 scoped_ptr<google_apis::DocumentEntry> document_entry; | |
190 scoped_ptr<base::Value> value = | |
191 google_apis::test_util::LoadJSONFile("gdata/root_feed.json"); | |
192 if (!value.get()) | |
193 return -1; | |
194 | |
195 base::DictionaryValue* as_dict = NULL; | |
196 base::ListValue* entry_list = NULL; | |
197 if (value->GetAsDictionary(&as_dict) && | |
198 as_dict->GetList("feed.entry", &entry_list)) { | |
199 for (size_t i = 0; i < entry_list->GetSize(); ++i) { | |
200 base::DictionaryValue* entry = NULL; | |
201 std::string resource_id; | |
202 if (entry_list->GetDictionary(i, &entry) && | |
203 entry->GetString("gd$resourceId.$t", &resource_id) && | |
204 resource_id == kResourceId) { | |
205 document_entry = google_apis::DocumentEntry::CreateFrom(*entry); | |
206 } | |
207 } | |
208 } | |
209 if (!document_entry) | |
210 return -1; | |
211 | |
212 base::MessageLoopProxy::current()->PostTask( | |
213 FROM_HERE, | |
214 base::Bind(completion_callback, | |
215 google_apis::DRIVE_UPLOAD_OK, | |
216 drive_file_path, | |
217 local_file_path, | |
218 base::Passed(&document_entry))); | |
219 | |
220 const int kUploadId = 123; | |
221 return kUploadId; | |
222 } | |
223 | |
224 virtual void UpdateUpload(int upload_id, | |
225 content::DownloadItem* download) OVERRIDE { | |
226 NOTREACHED(); | |
227 } | |
228 | |
229 virtual int64 GetUploadedBytes(int upload_id) const OVERRIDE { | |
230 NOTREACHED(); | |
231 return 0; | |
232 } | |
233 }; | |
234 | |
155 class DriveFileSystemTest : public testing::Test { | 235 class DriveFileSystemTest : public testing::Test { |
156 protected: | 236 protected: |
157 DriveFileSystemTest() | 237 DriveFileSystemTest() |
158 : ui_thread_(content::BrowserThread::UI, &message_loop_), | 238 : ui_thread_(content::BrowserThread::UI, &message_loop_), |
159 io_thread_(content::BrowserThread::IO), | 239 io_thread_(content::BrowserThread::IO), |
160 cache_(NULL), | 240 cache_(NULL), |
161 file_system_(NULL), | 241 file_system_(NULL), |
162 mock_drive_service_(NULL), | 242 mock_drive_service_(NULL), |
163 mock_webapps_registry_(NULL), | 243 mock_webapps_registry_(NULL), |
164 num_callback_invocations_(0), | 244 num_callback_invocations_(0), |
(...skipping 26 matching lines...) Expand all Loading... | |
191 SetFreeDiskSpaceGetterForTesting(mock_free_disk_space_checker_); | 271 SetFreeDiskSpaceGetterForTesting(mock_free_disk_space_checker_); |
192 | 272 |
193 scoped_refptr<base::SequencedWorkerPool> pool = | 273 scoped_refptr<base::SequencedWorkerPool> pool = |
194 content::BrowserThread::GetBlockingPool(); | 274 content::BrowserThread::GetBlockingPool(); |
195 blocking_task_runner_ = | 275 blocking_task_runner_ = |
196 pool->GetSequencedTaskRunner(pool->GetSequenceToken()); | 276 pool->GetSequencedTaskRunner(pool->GetSequenceToken()); |
197 | 277 |
198 cache_ = DriveCache::CreateDriveCache( | 278 cache_ = DriveCache::CreateDriveCache( |
199 DriveCache::GetCacheRootPath(profile_.get()), blocking_task_runner_); | 279 DriveCache::GetCacheRootPath(profile_.get()), blocking_task_runner_); |
200 | 280 |
201 mock_uploader_.reset(new StrictMock<google_apis::MockDriveUploader>); | 281 fake_uploader_.reset(new FakeDriveUploader); |
202 mock_webapps_registry_.reset(new StrictMock<MockDriveWebAppsRegistry>); | 282 mock_webapps_registry_.reset(new StrictMock<MockDriveWebAppsRegistry>); |
203 | 283 |
204 ASSERT_FALSE(file_system_); | 284 ASSERT_FALSE(file_system_); |
205 file_system_ = new DriveFileSystem(profile_.get(), | 285 file_system_ = new DriveFileSystem(profile_.get(), |
206 cache_, | 286 cache_, |
207 mock_drive_service_, | 287 mock_drive_service_, |
208 mock_uploader_.get(), | 288 fake_uploader_.get(), |
209 mock_webapps_registry_.get(), | 289 mock_webapps_registry_.get(), |
210 blocking_task_runner_); | 290 blocking_task_runner_); |
211 | 291 |
212 mock_cache_observer_.reset(new StrictMock<MockDriveCacheObserver>); | 292 mock_cache_observer_.reset(new StrictMock<MockDriveCacheObserver>); |
213 cache_->AddObserver(mock_cache_observer_.get()); | 293 cache_->AddObserver(mock_cache_observer_.get()); |
214 | 294 |
215 mock_directory_observer_.reset(new StrictMock<MockDirectoryChangeObserver>); | 295 mock_directory_observer_.reset(new StrictMock<MockDirectoryChangeObserver>); |
216 file_system_->AddObserver(mock_directory_observer_.get()); | 296 file_system_->AddObserver(mock_directory_observer_.get()); |
217 | 297 |
218 file_system_->Initialize(); | 298 file_system_->Initialize(); |
(...skipping 585 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
804 | 884 |
805 MessageLoopForUI message_loop_; | 885 MessageLoopForUI message_loop_; |
806 // The order of the test threads is important, do not change the order. | 886 // The order of the test threads is important, do not change the order. |
807 // See also content/browser/browser_thread_impl.cc. | 887 // See also content/browser/browser_thread_impl.cc. |
808 content::TestBrowserThread ui_thread_; | 888 content::TestBrowserThread ui_thread_; |
809 content::TestBrowserThread io_thread_; | 889 content::TestBrowserThread io_thread_; |
810 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_; | 890 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_; |
811 scoped_ptr<TestingProfile> profile_; | 891 scoped_ptr<TestingProfile> profile_; |
812 scoped_refptr<CallbackHelper> callback_helper_; | 892 scoped_refptr<CallbackHelper> callback_helper_; |
813 DriveCache* cache_; | 893 DriveCache* cache_; |
814 scoped_ptr<StrictMock<google_apis::MockDriveUploader> > mock_uploader_; | 894 scoped_ptr<FakeDriveUploader> fake_uploader_; |
815 DriveFileSystem* file_system_; | 895 DriveFileSystem* file_system_; |
816 StrictMock<google_apis::MockDriveService>* mock_drive_service_; | 896 StrictMock<google_apis::MockDriveService>* mock_drive_service_; |
817 scoped_ptr<StrictMock<MockDriveWebAppsRegistry> > mock_webapps_registry_; | 897 scoped_ptr<StrictMock<MockDriveWebAppsRegistry> > mock_webapps_registry_; |
818 StrictMock<MockFreeDiskSpaceGetter>* mock_free_disk_space_checker_; | 898 StrictMock<MockFreeDiskSpaceGetter>* mock_free_disk_space_checker_; |
819 scoped_ptr<StrictMock<MockDriveCacheObserver> > mock_cache_observer_; | 899 scoped_ptr<StrictMock<MockDriveCacheObserver> > mock_cache_observer_; |
820 scoped_ptr<StrictMock<MockDirectoryChangeObserver> > mock_directory_observer_; | 900 scoped_ptr<StrictMock<MockDirectoryChangeObserver> > mock_directory_observer_; |
821 | 901 |
822 int num_callback_invocations_; | 902 int num_callback_invocations_; |
823 DriveFileError expected_error_; | 903 DriveFileError expected_error_; |
824 int expected_cache_state_; | 904 int expected_cache_state_; |
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1284 | 1364 |
1285 // Confirm that the remote file does not exist. | 1365 // Confirm that the remote file does not exist. |
1286 const FilePath remote_dest_file_path(FILE_PATH_LITERAL("drive/remote.txt")); | 1366 const FilePath remote_dest_file_path(FILE_PATH_LITERAL("drive/remote.txt")); |
1287 EXPECT_FALSE(EntryExists(remote_dest_file_path)); | 1367 EXPECT_FALSE(EntryExists(remote_dest_file_path)); |
1288 | 1368 |
1289 scoped_ptr<base::Value> value = | 1369 scoped_ptr<base::Value> value = |
1290 google_apis::test_util::LoadJSONFile("gdata/document_to_download.json"); | 1370 google_apis::test_util::LoadJSONFile("gdata/document_to_download.json"); |
1291 scoped_ptr<google_apis::DocumentEntry> document_entry( | 1371 scoped_ptr<google_apis::DocumentEntry> document_entry( |
1292 google_apis::DocumentEntry::ExtractAndParse(*value)); | 1372 google_apis::DocumentEntry::ExtractAndParse(*value)); |
1293 | 1373 |
1294 EXPECT_CALL(*mock_uploader_, UploadNewFile(_, _, _, _, _, _, _, _, _)) | |
1295 .WillOnce(MockUploadNewFile()); | |
1296 | |
1297 // Transfer the local file to Drive. | 1374 // Transfer the local file to Drive. |
1298 file_system_->TransferFileFromLocalToRemote( | 1375 file_system_->TransferFileFromLocalToRemote( |
1299 local_src_file_path, remote_dest_file_path, callback); | 1376 local_src_file_path, remote_dest_file_path, callback); |
1300 google_apis::test_util::RunBlockingPoolTask(); | 1377 google_apis::test_util::RunBlockingPoolTask(); |
1301 | 1378 |
1302 EXPECT_EQ(DRIVE_FILE_OK, callback_helper_->last_error_); | 1379 EXPECT_EQ(DRIVE_FILE_OK, callback_helper_->last_error_); |
1303 | 1380 |
1304 // Now the remote file should exist. | 1381 // Now the remote file should exist. |
1305 EXPECT_TRUE(EntryExists(remote_dest_file_path)); | 1382 EXPECT_TRUE(EntryExists(remote_dest_file_path)); |
1306 } | 1383 } |
(...skipping 1089 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2396 test_util::TEST_CACHE_STATE_DIRTY | | 2473 test_util::TEST_CACHE_STATE_DIRTY | |
2397 test_util::TEST_CACHE_STATE_PERSISTENT, | 2474 test_util::TEST_CACHE_STATE_PERSISTENT, |
2398 DriveCache::CACHE_TYPE_PERSISTENT); | 2475 DriveCache::CACHE_TYPE_PERSISTENT); |
2399 const FilePath outgoing_symlink_path = | 2476 const FilePath outgoing_symlink_path = |
2400 DriveCache::GetCacheRootPath(profile_.get()) | 2477 DriveCache::GetCacheRootPath(profile_.get()) |
2401 .AppendASCII("outgoing") | 2478 .AppendASCII("outgoing") |
2402 .AppendASCII(kResourceId); | 2479 .AppendASCII(kResourceId); |
2403 ASSERT_TRUE(file_util::PathExists(dirty_cache_file_path)); | 2480 ASSERT_TRUE(file_util::PathExists(dirty_cache_file_path)); |
2404 ASSERT_TRUE(file_util::PathExists(outgoing_symlink_path)); | 2481 ASSERT_TRUE(file_util::PathExists(outgoing_symlink_path)); |
2405 | 2482 |
2406 // Create a google_apis::DocumentEntry, which is needed to mock | |
2407 // DriveUploaderInterface::UploadExistingFile(). | |
2408 // TODO(satorux): This should be cleaned up. crbug.com/134240. | |
2409 scoped_ptr<google_apis::DocumentEntry> document_entry; | |
2410 scoped_ptr<base::Value> value = | |
2411 google_apis::test_util::LoadJSONFile("gdata/root_feed.json"); | |
2412 ASSERT_TRUE(value.get()); | |
2413 base::DictionaryValue* as_dict = NULL; | |
2414 base::ListValue* entry_list = NULL; | |
2415 if (value->GetAsDictionary(&as_dict) && | |
2416 as_dict->GetList("feed.entry", &entry_list)) { | |
2417 for (size_t i = 0; i < entry_list->GetSize(); ++i) { | |
2418 base::DictionaryValue* entry = NULL; | |
2419 std::string resource_id; | |
2420 if (entry_list->GetDictionary(i, &entry) && | |
2421 entry->GetString("gd$resourceId.$t", &resource_id) && | |
2422 resource_id == kResourceId) { | |
2423 // This will be deleted by UploadExistingFile(). | |
2424 document_entry = google_apis::DocumentEntry::CreateFrom(*entry); | |
2425 } | |
2426 } | |
2427 } | |
2428 ASSERT_TRUE(document_entry); | |
2429 | |
2430 // The mock uploader will be used to simulate a file upload. | |
2431 EXPECT_CALL(*mock_uploader_, UploadExistingFile( | |
2432 GURL("https://file_link_resumable_edit_media/"), | |
2433 kFilePath, | |
2434 dirty_cache_file_path, | |
2435 "audio/mpeg", | |
2436 kDummyCacheContent.size(), // The size after modification must be used. | |
2437 _, // Completion callback. | |
2438 _)) // Ready callback. | |
2439 .WillOnce(MockUploadExistingFile( | |
2440 google_apis::DRIVE_UPLOAD_OK, | |
2441 FilePath::FromUTF8Unsafe("drive/File1"), | |
2442 dirty_cache_file_path, | |
2443 document_entry.release())); | |
2444 | |
2445 // We'll notify the directory change to the observer upon completion. | 2483 // We'll notify the directory change to the observer upon completion. |
2446 EXPECT_CALL(*mock_directory_observer_, | 2484 EXPECT_CALL(*mock_directory_observer_, |
2447 OnDirectoryChanged(Eq(FilePath(kDriveRootDirectory)))).Times(1); | 2485 OnDirectoryChanged(Eq(FilePath(kDriveRootDirectory)))).Times(1); |
2448 | 2486 |
2449 // The callback will be called upon completion of | 2487 // The callback will be called upon completion of |
2450 // UpdateFileByResourceId(). | 2488 // UpdateFileByResourceId(). |
2451 FileOperationCallback callback = | 2489 FileOperationCallback callback = |
2452 base::Bind(&CallbackHelper::FileOperationCallback, | 2490 base::Bind(&CallbackHelper::FileOperationCallback, |
2453 callback_helper_.get()); | 2491 callback_helper_.get()); |
2454 | 2492 |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2699 | 2737 |
2700 // Try to close the same file twice. | 2738 // Try to close the same file twice. |
2701 file_system_->CloseFile(kFileInRoot, close_file_callback); | 2739 file_system_->CloseFile(kFileInRoot, close_file_callback); |
2702 message_loop_.Run(); | 2740 message_loop_.Run(); |
2703 | 2741 |
2704 // It must fail. | 2742 // It must fail. |
2705 EXPECT_EQ(DRIVE_FILE_ERROR_NOT_FOUND, callback_helper_->last_error_); | 2743 EXPECT_EQ(DRIVE_FILE_ERROR_NOT_FOUND, callback_helper_->last_error_); |
2706 } | 2744 } |
2707 | 2745 |
2708 } // namespace drive | 2746 } // namespace drive |
OLD | NEW |