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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 // Counts the number of files (not directories) in |entries|. | 85 // Counts the number of files (not directories) in |entries|. |
86 int CountFiles(const DriveEntryProtoVector& entries) { | 86 int CountFiles(const DriveEntryProtoVector& entries) { |
87 int num_files = 0; | 87 int num_files = 0; |
88 for (size_t i = 0; i < entries.size(); ++i) { | 88 for (size_t i = 0; i < entries.size(); ++i) { |
89 if (!entries[i].file_info().is_directory()) | 89 if (!entries[i].file_info().is_directory()) |
90 ++num_files; | 90 ++num_files; |
91 } | 91 } |
92 return num_files; | 92 return num_files; |
93 } | 93 } |
94 | 94 |
95 // A fake implementation of DriveUploaderInterface, which provides fake | |
96 // behaviors for file uploading. | |
97 class FakeDriveUploader : public google_apis::DriveUploaderInterface { | |
98 public: | |
99 FakeDriveUploader() {} | |
100 virtual ~FakeDriveUploader() {} | |
101 | |
102 // DriveUploaderInterface overrides. | |
103 | |
104 // Pretends that a new file was uploaded successfully, and returns the | |
105 // contents of "chromeos/gdata/uploaded_file.json" to the caller. | |
106 virtual void UploadNewFile( | |
107 const std::string& parent_resource_id, | |
108 const base::FilePath& drive_file_path, | |
109 const base::FilePath& local_file_path, | |
110 const std::string& title, | |
111 const std::string& content_type, | |
112 const google_apis::UploadCompletionCallback& callback) OVERRIDE { | |
113 DCHECK(!callback.is_null()); | |
114 | |
115 scoped_ptr<base::Value> value = | |
116 google_apis::test_util::LoadJSONFile( | |
117 "chromeos/gdata/uploaded_file.json"); | |
118 scoped_ptr<google_apis::ResourceEntry> resource_entry( | |
119 google_apis::ResourceEntry::ExtractAndParse(*value)); | |
120 | |
121 base::MessageLoopProxy::current()->PostTask( | |
122 FROM_HERE, | |
123 base::Bind(callback, | |
124 google_apis::DRIVE_UPLOAD_OK, | |
125 drive_file_path, | |
126 local_file_path, | |
127 base::Passed(&resource_entry))); | |
128 } | |
129 | |
130 // Pretends that an existing file ("drive/File 1.txt") was uploaded | |
131 // successfully, and returns an entry for the file in | |
132 // "chromeos/gdata/root_feed.json" to the caller. | |
133 virtual void UploadExistingFile( | |
134 const std::string& resource_id, | |
135 const base::FilePath& drive_file_path, | |
136 const base::FilePath& local_file_path, | |
137 const std::string& content_type, | |
138 const std::string& etag, | |
139 const google_apis::UploadCompletionCallback& callback) OVERRIDE { | |
140 DCHECK(!callback.is_null()); | |
141 | |
142 // This function can only handle "drive/File 1.txt" whose resource ID is | |
143 // "file:2_file_resource_id". | |
144 DCHECK_EQ("drive/File 1.txt", drive_file_path.value()); | |
145 const std::string kResourceId = "file:2_file_resource_id"; | |
146 EXPECT_EQ(kResourceId, resource_id); | |
147 | |
148 // Create a google_apis::ResourceEntry, which is needed to return a value | |
149 // from this function. TODO(satorux): This should be cleaned | |
150 // up. crbug.com/134240. | |
151 scoped_ptr<google_apis::ResourceEntry> resource_entry; | |
152 scoped_ptr<base::Value> value = | |
153 google_apis::test_util::LoadJSONFile("chromeos/gdata/root_feed.json"); | |
154 if (!value.get()) | |
155 return; | |
156 | |
157 base::DictionaryValue* as_dict = NULL; | |
158 base::ListValue* entry_list = NULL; | |
159 if (value->GetAsDictionary(&as_dict) && | |
160 as_dict->GetList("feed.entry", &entry_list)) { | |
161 for (size_t i = 0; i < entry_list->GetSize(); ++i) { | |
162 base::DictionaryValue* entry = NULL; | |
163 std::string entry_resource_id; | |
164 if (entry_list->GetDictionary(i, &entry) && | |
165 entry->GetString("gd$resourceId.$t", &entry_resource_id) && | |
166 entry_resource_id == kResourceId) { | |
167 resource_entry = google_apis::ResourceEntry::CreateFrom(*entry); | |
168 } | |
169 } | |
170 } | |
171 if (!resource_entry) | |
172 return; | |
173 | |
174 base::MessageLoopProxy::current()->PostTask( | |
175 FROM_HERE, | |
176 base::Bind(callback, | |
177 google_apis::DRIVE_UPLOAD_OK, | |
178 drive_file_path, | |
179 local_file_path, | |
180 base::Passed(&resource_entry))); | |
181 } | |
182 }; | |
183 | |
184 } // namespace | 95 } // namespace |
185 | 96 |
186 class DriveFileSystemTest : public testing::Test { | 97 class DriveFileSystemTest : public testing::Test { |
187 protected: | 98 protected: |
188 DriveFileSystemTest() | 99 DriveFileSystemTest() |
189 : ui_thread_(content::BrowserThread::UI, &message_loop_), | 100 : ui_thread_(content::BrowserThread::UI, &message_loop_), |
190 expected_success_(true), | 101 expected_success_(true), |
191 // |root_feed_changestamp_| should be set to the largest changestamp in | 102 // |root_feed_changestamp_| should be set to the largest changestamp in |
192 // account metadata feed. But we fake it by some non-zero positive | 103 // account metadata feed. But we fake it by some non-zero positive |
193 // increasing value. See |LoadFeed()|. | 104 // increasing value. See |LoadFeed()|. |
(...skipping 15 matching lines...) Expand all Loading... |
209 | 120 |
210 scoped_refptr<base::SequencedWorkerPool> pool = | 121 scoped_refptr<base::SequencedWorkerPool> pool = |
211 content::BrowserThread::GetBlockingPool(); | 122 content::BrowserThread::GetBlockingPool(); |
212 blocking_task_runner_ = | 123 blocking_task_runner_ = |
213 pool->GetSequencedTaskRunner(pool->GetSequenceToken()); | 124 pool->GetSequencedTaskRunner(pool->GetSequenceToken()); |
214 | 125 |
215 cache_.reset(new DriveCache(DriveCache::GetCacheRootPath(profile_.get()), | 126 cache_.reset(new DriveCache(DriveCache::GetCacheRootPath(profile_.get()), |
216 blocking_task_runner_, | 127 blocking_task_runner_, |
217 fake_free_disk_space_getter_.get())); | 128 fake_free_disk_space_getter_.get())); |
218 | 129 |
219 fake_uploader_.reset(new FakeDriveUploader); | 130 uploader_.reset(new google_apis::DriveUploader(fake_drive_service_.get())); |
220 drive_webapps_registry_.reset(new DriveWebAppsRegistry); | 131 drive_webapps_registry_.reset(new DriveWebAppsRegistry); |
221 | 132 |
222 | 133 |
223 mock_cache_observer_.reset(new StrictMock<MockDriveCacheObserver>); | 134 mock_cache_observer_.reset(new StrictMock<MockDriveCacheObserver>); |
224 cache_->AddObserver(mock_cache_observer_.get()); | 135 cache_->AddObserver(mock_cache_observer_.get()); |
225 | 136 |
226 mock_directory_observer_.reset(new StrictMock<MockDirectoryChangeObserver>); | 137 mock_directory_observer_.reset(new StrictMock<MockDirectoryChangeObserver>); |
227 | 138 |
228 cache_->RequestInitializeForTesting(); | 139 cache_->RequestInitializeForTesting(); |
229 google_apis::test_util::RunBlockingPoolTask(); | 140 google_apis::test_util::RunBlockingPoolTask(); |
230 | 141 |
231 SetUpResourceMetadataAndFileSystem(); | 142 SetUpResourceMetadataAndFileSystem(); |
232 } | 143 } |
233 | 144 |
234 void SetUpResourceMetadataAndFileSystem() { | 145 void SetUpResourceMetadataAndFileSystem() { |
235 resource_metadata_.reset(new DriveResourceMetadata( | 146 resource_metadata_.reset(new DriveResourceMetadata( |
236 fake_drive_service_->GetRootResourceId(), | 147 fake_drive_service_->GetRootResourceId(), |
237 cache_->GetCacheDirectoryPath(DriveCache::CACHE_TYPE_META), | 148 cache_->GetCacheDirectoryPath(DriveCache::CACHE_TYPE_META), |
238 blocking_task_runner_)); | 149 blocking_task_runner_)); |
239 | 150 |
240 file_system_.reset(new DriveFileSystem(profile_.get(), | 151 file_system_.reset(new DriveFileSystem(profile_.get(), |
241 cache_.get(), | 152 cache_.get(), |
242 fake_drive_service_.get(), | 153 fake_drive_service_.get(), |
243 fake_uploader_.get(), | 154 uploader_.get(), |
244 drive_webapps_registry_.get(), | 155 drive_webapps_registry_.get(), |
245 resource_metadata_.get(), | 156 resource_metadata_.get(), |
246 blocking_task_runner_)); | 157 blocking_task_runner_)); |
247 file_system_->AddObserver(mock_directory_observer_.get()); | 158 file_system_->AddObserver(mock_directory_observer_.get()); |
248 file_system_->Initialize(); | 159 file_system_->Initialize(); |
249 | 160 |
250 DriveFileError error = DRIVE_FILE_ERROR_FAILED; | 161 DriveFileError error = DRIVE_FILE_ERROR_FAILED; |
251 resource_metadata_->Initialize( | 162 resource_metadata_->Initialize( |
252 google_apis::test_util::CreateCopyResultCallback(&error)); | 163 google_apis::test_util::CreateCopyResultCallback(&error)); |
253 google_apis::test_util::RunBlockingPoolTask(); | 164 google_apis::test_util::RunBlockingPoolTask(); |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
537 EXPECT_EQ(entry_proto.resource_id(), resource_id); | 448 EXPECT_EQ(entry_proto.resource_id(), resource_id); |
538 } | 449 } |
539 | 450 |
540 MessageLoopForUI message_loop_; | 451 MessageLoopForUI message_loop_; |
541 // The order of the test threads is important, do not change the order. | 452 // The order of the test threads is important, do not change the order. |
542 // See also content/browser/browser_thread_impl.cc. | 453 // See also content/browser/browser_thread_impl.cc. |
543 content::TestBrowserThread ui_thread_; | 454 content::TestBrowserThread ui_thread_; |
544 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_; | 455 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_; |
545 scoped_ptr<TestingProfile> profile_; | 456 scoped_ptr<TestingProfile> profile_; |
546 scoped_ptr<DriveCache, test_util::DestroyHelperForTests> cache_; | 457 scoped_ptr<DriveCache, test_util::DestroyHelperForTests> cache_; |
547 scoped_ptr<FakeDriveUploader> fake_uploader_; | 458 scoped_ptr<google_apis::DriveUploaderInterface> uploader_; |
548 scoped_ptr<DriveFileSystem> file_system_; | 459 scoped_ptr<DriveFileSystem> file_system_; |
549 scoped_ptr<google_apis::FakeDriveService> fake_drive_service_; | 460 scoped_ptr<google_apis::FakeDriveService> fake_drive_service_; |
550 scoped_ptr<DriveWebAppsRegistry> drive_webapps_registry_; | 461 scoped_ptr<DriveWebAppsRegistry> drive_webapps_registry_; |
551 scoped_ptr<DriveResourceMetadata, test_util::DestroyHelperForTests> | 462 scoped_ptr<DriveResourceMetadata, test_util::DestroyHelperForTests> |
552 resource_metadata_; | 463 resource_metadata_; |
553 scoped_ptr<FakeFreeDiskSpaceGetter> fake_free_disk_space_getter_; | 464 scoped_ptr<FakeFreeDiskSpaceGetter> fake_free_disk_space_getter_; |
554 scoped_ptr<StrictMock<MockDriveCacheObserver> > mock_cache_observer_; | 465 scoped_ptr<StrictMock<MockDriveCacheObserver> > mock_cache_observer_; |
555 scoped_ptr<StrictMock<MockDirectoryChangeObserver> > mock_directory_observer_; | 466 scoped_ptr<StrictMock<MockDirectoryChangeObserver> > mock_directory_observer_; |
556 | 467 |
557 bool expected_success_; | 468 bool expected_success_; |
(...skipping 1657 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2215 | 2126 |
2216 // An app for foo.exe should now be found, as the registry was loaded. | 2127 // An app for foo.exe should now be found, as the registry was loaded. |
2217 drive_webapps_registry_->GetWebAppsForFile( | 2128 drive_webapps_registry_->GetWebAppsForFile( |
2218 base::FilePath(FILE_PATH_LITERAL("foo.exe")), | 2129 base::FilePath(FILE_PATH_LITERAL("foo.exe")), |
2219 "" /* mime_type */, | 2130 "" /* mime_type */, |
2220 &apps); | 2131 &apps); |
2221 EXPECT_EQ(1U, apps.size()); | 2132 EXPECT_EQ(1U, apps.size()); |
2222 } | 2133 } |
2223 | 2134 |
2224 } // namespace drive | 2135 } // namespace drive |
OLD | NEW |