Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(214)

Side by Side Diff: chrome/browser/media_galleries/fileapi/picasa/picasa_file_util_unittest.cc

Issue 18986012: Media Galleries API Picasa: Make PicasaDataProvider handle async PMP and INI parsing robustly. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@0039-picasa-import-sandbox-ini-parsing
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 <set> 5 #include <set>
6 #include <string> 6 #include <string>
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind_helpers.h" 9 #include "base/bind_helpers.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
11 #include "base/files/file_path.h"
11 #include "base/files/scoped_temp_dir.h" 12 #include "base/files/scoped_temp_dir.h"
12 #include "base/memory/scoped_vector.h" 13 #include "base/memory/scoped_vector.h"
13 #include "base/message_loop/message_loop.h" 14 #include "base/message_loop/message_loop.h"
14 #include "base/message_loop/message_loop_proxy.h" 15 #include "base/message_loop/message_loop_proxy.h"
15 #include "base/run_loop.h" 16 #include "base/run_loop.h"
16 #include "base/strings/stringprintf.h" 17 #include "base/strings/stringprintf.h"
18 #include "base/synchronization/waitable_event.h"
17 #include "base/time/time.h" 19 #include "base/time/time.h"
18 #include "chrome/browser/media_galleries/fileapi/media_file_system_backend.h" 20 #include "chrome/browser/media_galleries/fileapi/media_file_system_backend.h"
19 #include "chrome/browser/media_galleries/fileapi/media_path_filter.h" 21 #include "chrome/browser/media_galleries/fileapi/media_path_filter.h"
20 #include "chrome/browser/media_galleries/fileapi/picasa/picasa_data_provider.h" 22 #include "chrome/browser/media_galleries/fileapi/picasa/picasa_data_provider.h"
21 #include "chrome/browser/media_galleries/fileapi/picasa/picasa_file_util.h" 23 #include "chrome/browser/media_galleries/fileapi/picasa/picasa_file_util.h"
22 #include "chrome/common/media_galleries/picasa_types.h" 24 #include "chrome/common/media_galleries/picasa_types.h"
23 #include "chrome/common/media_galleries/pmp_constants.h" 25 #include "chrome/common/media_galleries/pmp_constants.h"
24 #include "content/public/browser/browser_thread.h" 26 #include "content/public/browser/browser_thread.h"
25 #include "content/public/test/test_browser_thread.h" 27 #include "content/public/test/test_browser_thread.h"
26 #include "testing/gtest/include/gtest/gtest.h" 28 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 DCHECK(completed); 146 DCHECK(completed);
145 base::RunLoop run_loop; 147 base::RunLoop run_loop;
146 runner->ReadDirectory( 148 runner->ReadDirectory(
147 url, base::Bind(&ReadDirectoryTestHelperCallback, &run_loop, contents, 149 url, base::Bind(&ReadDirectoryTestHelperCallback, &run_loop, contents,
148 completed)); 150 completed));
149 run_loop.Run(); 151 run_loop.Run();
150 } 152 }
151 153
152 } // namespace 154 } // namespace
153 155
154 class TestPicasaDataProvider : public PicasaDataProvider {
155 public:
156 TestPicasaDataProvider()
157 : PicasaDataProvider(base::FilePath(FILE_PATH_LITERAL("Fake"))),
158 initialized_(false) {
159 }
160
161 virtual ~TestPicasaDataProvider() {}
162
163 virtual void RefreshData(const base::Closure& ready_callback) OVERRIDE {
164 DCHECK(initialized_);
165 ready_callback.Run();
166 }
167
168 void Init(const std::vector<AlbumInfo>& albums,
169 const std::vector<AlbumInfo>& folders) {
170 UniquifyNames(albums, &album_map_);
171 UniquifyNames(folders, &folder_map_);
172 initialized_ = true;
173 }
174
175 private:
176 bool initialized_;
177 };
178
179 class TestPicasaFileUtil : public PicasaFileUtil { 156 class TestPicasaFileUtil : public PicasaFileUtil {
180 public: 157 public:
181 TestPicasaFileUtil(chrome::MediaPathFilter* media_path_filter, 158 TestPicasaFileUtil(chrome::MediaPathFilter* media_path_filter,
182 PicasaDataProvider* data_provider) 159 PicasaDataProvider* data_provider)
183 : PicasaFileUtil(media_path_filter), 160 : PicasaFileUtil(media_path_filter),
184 data_provider_(data_provider) { 161 data_provider_(data_provider) {
185 } 162 }
186 virtual ~TestPicasaFileUtil() {} 163 virtual ~TestPicasaFileUtil() {}
187 private: 164 private:
188 virtual PicasaDataProvider* GetDataProvider() OVERRIDE { 165 virtual PicasaDataProvider* GetDataProvider() OVERRIDE {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 : io_thread_(content::BrowserThread::IO, &message_loop_) { 197 : io_thread_(content::BrowserThread::IO, &message_loop_) {
221 } 198 }
222 virtual ~PicasaFileUtilTest() {} 199 virtual ~PicasaFileUtilTest() {}
223 200
224 virtual void SetUp() OVERRIDE { 201 virtual void SetUp() OVERRIDE {
225 ASSERT_TRUE(profile_dir_.CreateUniqueTempDir()); 202 ASSERT_TRUE(profile_dir_.CreateUniqueTempDir());
226 203
227 scoped_refptr<quota::SpecialStoragePolicy> storage_policy = 204 scoped_refptr<quota::SpecialStoragePolicy> storage_policy =
228 new quota::MockSpecialStoragePolicy(); 205 new quota::MockSpecialStoragePolicy();
229 206
207 base::WaitableEvent event(true, false);
vandebo (ex-Chrome) 2013/08/22 17:48:02 Abstract this into void RunOnMediaTaskRunner(const
tommycli 2013/08/22 22:32:51 Done.
208 chrome::MediaFileSystemBackend::MediaTaskRunner()->PostTask(
209 FROM_HERE,
210 base::Bind(&PicasaFileUtilTest::SetUpOnMediaTaskRunner,
211 base::Unretained(this),
212 &event));
213 event.Wait();
214
230 media_path_filter_.reset(new chrome::MediaPathFilter()); 215 media_path_filter_.reset(new chrome::MediaPathFilter());
231 picasa_data_provider_.reset(new TestPicasaDataProvider());
232 216
233 ScopedVector<fileapi::FileSystemBackend> additional_providers; 217 ScopedVector<fileapi::FileSystemBackend> additional_providers;
234 additional_providers.push_back(new TestMediaFileSystemBackend( 218 additional_providers.push_back(new TestMediaFileSystemBackend(
235 profile_dir_.path(), 219 profile_dir_.path(),
236 new TestPicasaFileUtil(media_path_filter_.get(), 220 new TestPicasaFileUtil(media_path_filter_.get(),
237 picasa_data_provider_.get()))); 221 picasa_data_provider_.get())));
238 222
239 file_system_context_ = new fileapi::FileSystemContext( 223 file_system_context_ = new fileapi::FileSystemContext(
240 base::MessageLoopProxy::current().get(), 224 base::MessageLoopProxy::current().get(),
241 base::MessageLoopProxy::current().get(), 225 base::MessageLoopProxy::current().get(),
242 fileapi::ExternalMountPoints::CreateRefCounted().get(), 226 fileapi::ExternalMountPoints::CreateRefCounted().get(),
243 storage_policy.get(), 227 storage_policy.get(),
244 NULL, 228 NULL,
245 additional_providers.Pass(), 229 additional_providers.Pass(),
246 profile_dir_.path(), 230 profile_dir_.path(),
247 fileapi::CreateAllowFileAccessOptions()); 231 fileapi::CreateAllowFileAccessOptions());
248 } 232 }
249 233
234 virtual void TearDown() OVERRIDE {
235 base::WaitableEvent event(true, false);
vandebo (ex-Chrome) 2013/08/22 17:48:02 Why not use a runloop like in the browser test?
tommycli 2013/08/22 22:32:51 I believe this was because Runloops can only be us
vandebo (ex-Chrome) 2013/08/23 16:42:41 If calling on the wrong thread is the only issue,
tommycli 2013/08/26 22:06:17 Done.
236 chrome::MediaFileSystemBackend::MediaTaskRunner()->PostTask(
237 FROM_HERE,
238 base::Bind(&PicasaFileUtilTest::TearDownOnMediaTaskRunner,
239 base::Unretained(this),
240 &event));
241 event.Wait();
242 }
243
250 protected: 244 protected:
245 void SetUpOnMediaTaskRunner(base::WaitableEvent* event) {
246 picasa_data_provider_.reset(new PicasaDataProvider(base::FilePath()));
247 event->Signal();
248 }
249
250 void TearDownOnMediaTaskRunner(base::WaitableEvent* event) {
251 picasa_data_provider_.reset();
252 event->Signal();
253 }
254
255 void SetupDataProvider(PicasaDataProvider* picasa_data_provider,
256 const std::vector<AlbumInfo>& albums,
257 const std::vector<AlbumInfo>& folders) {
258 PicasaDataProvider::UniquifyNames(albums,
259 &picasa_data_provider->album_map_);
260 PicasaDataProvider::UniquifyNames(folders,
261 &picasa_data_provider->folder_map_);
262 picasa_data_provider->state_ =
263 PicasaDataProvider::ALBUMS_IMAGES_FRESH_STATE;
264 }
265
251 // |test_folders| must be in alphabetical order for easy verification 266 // |test_folders| must be in alphabetical order for easy verification
252 void SetupFolders(ScopedVector<TestFolder>* test_folders) { 267 void SetupFolders(ScopedVector<TestFolder>* test_folders) {
253 std::vector<AlbumInfo> folders; 268 std::vector<AlbumInfo> folders;
254 for (ScopedVector<TestFolder>::iterator it = test_folders->begin(); 269 for (ScopedVector<TestFolder>::iterator it = test_folders->begin();
255 it != test_folders->end(); ++it) { 270 it != test_folders->end(); ++it) {
256 TestFolder* test_folder = *it; 271 TestFolder* test_folder = *it;
257 ASSERT_TRUE(test_folder->Init()); 272 ASSERT_TRUE(test_folder->Init());
258 folders.push_back(test_folder->folder_info()); 273 folders.push_back(test_folder->folder_info());
259 } 274 }
260 picasa_data_provider_->Init(std::vector<AlbumInfo>(), folders); 275
276 SetupDataProvider(
277 picasa_data_provider_.get(), std::vector<AlbumInfo>(), folders);
261 } 278 }
262 279
263 void VerifyFolderDirectoryList(const ScopedVector<TestFolder>& test_folders) { 280 void VerifyFolderDirectoryList(const ScopedVector<TestFolder>& test_folders) {
264 FileSystemOperation::FileEntryList contents; 281 FileSystemOperation::FileEntryList contents;
265 FileSystemURL url = CreateURL(kPicasaDirFolders); 282 FileSystemURL url = CreateURL(kPicasaDirFolders);
266 bool completed = false; 283 bool completed = false;
267 ReadDirectoryTestHelper(operation_runner(), url, &contents, &completed); 284 ReadDirectoryTestHelper(operation_runner(), url, &contents, &completed);
268 285
269 ASSERT_TRUE(completed); 286 ASSERT_TRUE(completed);
270 ASSERT_EQ(test_folders.size(), contents.size()); 287 ASSERT_EQ(test_folders.size(), contents.size());
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 return file_system_context_; 347 return file_system_context_;
331 } 348 }
332 349
333 private: 350 private:
334 base::MessageLoop message_loop_; 351 base::MessageLoop message_loop_;
335 content::TestBrowserThread io_thread_; 352 content::TestBrowserThread io_thread_;
336 353
337 base::ScopedTempDir profile_dir_; 354 base::ScopedTempDir profile_dir_;
338 355
339 scoped_refptr<fileapi::FileSystemContext> file_system_context_; 356 scoped_refptr<fileapi::FileSystemContext> file_system_context_;
357 scoped_ptr<PicasaDataProvider> picasa_data_provider_;
340 scoped_ptr<chrome::MediaPathFilter> media_path_filter_; 358 scoped_ptr<chrome::MediaPathFilter> media_path_filter_;
341 scoped_ptr<TestPicasaDataProvider> picasa_data_provider_;
342 359
343 DISALLOW_COPY_AND_ASSIGN(PicasaFileUtilTest); 360 DISALLOW_COPY_AND_ASSIGN(PicasaFileUtilTest);
344 }; 361 };
345 362
346 TEST_F(PicasaFileUtilTest, DateFormat) { 363 TEST_F(PicasaFileUtilTest, DateFormat) {
347 base::Time::Exploded exploded_shortmonth = { 2013, 4, 0, 16, 0, 0, 0, 0 }; 364 base::Time::Exploded exploded_shortmonth = { 2013, 4, 0, 16, 0, 0, 0, 0 };
348 base::Time shortmonth = base::Time::FromLocalExploded(exploded_shortmonth); 365 base::Time shortmonth = base::Time::FromLocalExploded(exploded_shortmonth);
349 366
350 base::Time::Exploded exploded_shortday = { 2013, 11, 0, 3, 0, 0, 0, 0 }; 367 base::Time::Exploded exploded_shortday = { 2013, 11, 0, 3, 0, 0, 0, 0 };
351 base::Time shortday = base::Time::FromLocalExploded(exploded_shortday); 368 base::Time shortday = base::Time::FromLocalExploded(exploded_shortday);
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 new TestFolder(base::StringPrintf("folder-%05d", i), 490 new TestFolder(base::StringPrintf("folder-%05d", i),
474 date, 491 date,
475 base::StringPrintf("uid%05d", i), i % 5, i % 3)); 492 base::StringPrintf("uid%05d", i), i % 5, i % 3));
476 } 493 }
477 494
478 SetupFolders(&test_folders); 495 SetupFolders(&test_folders);
479 VerifyFolderDirectoryList(test_folders); 496 VerifyFolderDirectoryList(test_folders);
480 } 497 }
481 498
482 } // namespace picasa 499 } // namespace picasa
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698