158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file. 458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include <vector> 64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/files/file_enumerator.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/memory/ref_counted.h" 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/message_loop/message_loop.h" 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/run_loop.h" 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "build/build_config.h" 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/media_galleries/fileapi/media_file_system_backend.h" 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/media_galleries/fileapi/picasa_data_provider.h" 17d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/common/media_galleries/picasa_test_util.h" 1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/common/media_galleries/picasa_types.h" 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/test/test_browser_thread.h" 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace picasa { 2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace { 2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 26d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void VerifyTestAlbumTable(PicasaDataProvider* data_provider, 27d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::FilePath test_folder_1_path, 28d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::FilePath test_folder_2_path) { 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<AlbumMap> folders = data_provider->GetFolders(); 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(folders.get()); 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(2u, folders->size()); 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) AlbumMap::const_iterator folder_1 = folders->find( 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) test_folder_1_path.BaseName().AsUTF8Unsafe() + " 1899-12-30"); 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_NE(folders->end(), folder_1); 3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(test_folder_1_path.BaseName().AsUTF8Unsafe(), 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) folder_1->second.name); 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(test_folder_1_path, folder_1->second.path); 3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ("uid1", folder_1->second.uid); 4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) AlbumMap::const_iterator folder_2 = folders->find( 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) test_folder_2_path.BaseName().AsUTF8Unsafe() + " 1899-12-30"); 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_NE(folders->end(), folder_2); 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(test_folder_2_path.BaseName().AsUTF8Unsafe(), 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) folder_2->second.name); 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(test_folder_2_path, folder_2->second.path); 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ("uid4", folder_2->second.uid); 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<AlbumMap> albums = data_provider->GetAlbums(); 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(albums.get()); 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(2u, albums->size()); 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) AlbumMap::const_iterator album_1 = albums->find("Album 1 Name 1899-12-30"); 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_NE(albums->end(), album_1); 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ("Album 1 Name", album_1->second.name); 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(base::FilePath(), album_1->second.path); 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ("uid3", album_1->second.uid); 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) AlbumMap::const_iterator album_2 = albums->find("Album 2 Name 1899-12-30"); 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_NE(albums->end(), album_2); 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ("Album 2 Name", album_2->second.name); 6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(base::FilePath(), album_2->second.path); 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ("uid5", album_2->second.uid); 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 66d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void VerifyTestAlbumsImagesIndex(PicasaDataProvider* data_provider, 67d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::FilePath test_folder_1_path, 68d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::FilePath test_folder_2_path) { 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::File::Error error; 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<AlbumImages> album_1_images = 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) data_provider->FindAlbumImages("uid3", &error); 7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(album_1_images); 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::File::FILE_OK, error); 7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(2u, album_1_images->size()); 7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_NE(album_1_images->end(), album_1_images->find("InBoth.jpg")); 7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(test_folder_1_path.AppendASCII("InBoth.jpg"), 7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) (*album_1_images)["InBoth.jpg"]); 7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_NE(album_1_images->end(), 7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) album_1_images->find("InFirstAlbumOnly.jpg")); 8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(test_folder_2_path.AppendASCII("InFirstAlbumOnly.jpg"), 8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) (*album_1_images)["InFirstAlbumOnly.jpg"]); 8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<AlbumImages> album_2_images = 8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) data_provider->FindAlbumImages("uid5", &error); 8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(album_2_images); 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::File::FILE_OK, error); 8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(2u, album_2_images->size()); 8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_NE(album_2_images->end(), album_2_images->find("InBoth.jpg")); 8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(test_folder_1_path.AppendASCII("InBoth.jpg"), 9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) (*album_2_images)["InBoth.jpg"]); 9158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_NE(album_2_images->end(), 9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) album_2_images->find("InSecondAlbumOnly.jpg")); 9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(test_folder_1_path.AppendASCII("InSecondAlbumOnly.jpg"), 9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) (*album_2_images)["InSecondAlbumOnly.jpg"]); 9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace 9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class TestPicasaDataProvider : public PicasaDataProvider { 10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public: 10158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) explicit TestPicasaDataProvider(const base::FilePath& database_path) 1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) : PicasaDataProvider(database_path), 1034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) file_watch_request_returned_(false) { 10458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 10558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 10658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual ~TestPicasaDataProvider() {} 10758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // |ready_callback| called with true if and when the file watch is started 1094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // successfully. If the file watch fails, it's called with false. 1104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void EnsureFileWatchStartedForTesting(const ReadyCallback& ready_callback) { 1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!file_watch_request_returned_) { 1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) file_watch_started_callbacks_.push_back(ready_callback); 1134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return; 1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ready_callback.Run(temp_dir_watcher_.get() != NULL); 1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 11858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Simulates the actual writing process of moving all the database files 11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // from the temporary directory to the database directory in a loop. 12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void MoveTempFilesToDatabase() { 12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(MediaFileSystemBackend::CurrentlyOnMediaTaskRunnerThread()); 12258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 12358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::FileEnumerator file_enumerator( 12458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) database_path_.DirName().AppendASCII(kPicasaTempDirName), 12558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) false /* recursive */, 12658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::FileEnumerator::FILES); 12758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 12858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (base::FilePath src_path = file_enumerator.Next(); !src_path.empty(); 12958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) src_path = file_enumerator.Next()) { 13058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE( 13158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Move(src_path, database_path_.Append(src_path.BaseName()))); 13258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 13358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 13458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 13558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void SetInvalidateCallback(const base::Closure& callback) { 13658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(invalidate_callback_.is_null()); 13758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) invalidate_callback_ = callback; 13858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 13958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 14058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void InvalidateData() OVERRIDE { 14158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) PicasaDataProvider::InvalidateData(); 14258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 14358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!invalidate_callback_.is_null()) { 14458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) invalidate_callback_.Run(); 14558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) invalidate_callback_.Reset(); 14658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 14758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 14858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 14958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void SetAlbumMapsForTesting(const AlbumMap& album_map, 15058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const AlbumMap& folder_map) { 15158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) album_map_ = album_map; 15258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) folder_map_ = folder_map; 15358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 15458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 15558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private: 1564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void OnTempDirWatchStarted( 1574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<base::FilePathWatcher> temp_dir_watcher) OVERRIDE { 1584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) PicasaDataProvider::OnTempDirWatchStarted(temp_dir_watcher.Pass()); 1594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) file_watch_request_returned_ = true; 1614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) for (std::vector<ReadyCallback>::const_iterator it = 1624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) file_watch_started_callbacks_.begin(); 1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) it != file_watch_started_callbacks_.end(); 1644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ++it) { 1654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) it->Run(temp_dir_watcher_.get() != NULL); 1664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) file_watch_started_callbacks_.clear(); 1684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Used for test that utilizes file watch 1714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool file_watch_request_returned_; 1724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::vector<ReadyCallback> file_watch_started_callbacks_; 1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 17458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Closure invalidate_callback_; 17558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 17658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 17758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class PicasaDataProviderTest : public InProcessBrowserTest { 17858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public: 179d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) PicasaDataProviderTest() {} 18058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual ~PicasaDataProviderTest() {} 18158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 18258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected: 18358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Runs on the MediaTaskRunner and designed to be overridden by subclasses. 18458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void InitializeTestData() {} 18558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 18658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void RunTest() { 187e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 18858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::RunLoop loop; 18958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) quit_closure_ = loop.QuitClosure(); 19058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) MediaFileSystemBackend::MediaTaskRunner()->PostTask( 19158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) FROM_HERE, 19258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind(&PicasaDataProviderTest::SetupFoldersAndDataProvider, 19358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Unretained(this))); 19458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) MediaFileSystemBackend::MediaTaskRunner()->PostTask( 19558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) FROM_HERE, 19658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind(&PicasaDataProviderTest::InitializeTestData, 19758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Unretained(this))); 19858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) MediaFileSystemBackend::MediaTaskRunner()->PostTask( 19958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) FROM_HERE, 20058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind(&PicasaDataProviderTest::StartTestOnMediaTaskRunner, 20158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Unretained(this))); 20258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) loop.Run(); 20358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 20458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 20558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual PicasaDataProvider::DataType RequestedDataType() const = 0; 20658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 20758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Start the test. The data provider is refreshed before calling StartTest 20858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // and the result of the refresh is passed in. 20958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void VerifyRefreshResults(bool parse_success) {}; 21058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 21158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void TestDone() { 21258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(MediaFileSystemBackend::CurrentlyOnMediaTaskRunnerThread()); 21358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 21458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // The data provider must be destructed on the MediaTaskRunner. This is done 21558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // in a posted task rather than directly because TestDone is called by 21658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // PicasaDataProvider. The callee should not destroy the caller. 21758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) MediaFileSystemBackend::MediaTaskRunner()->PostTask( 21858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) FROM_HERE, 21958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind(&PicasaDataProviderTest::DestructDataProviderThenQuit, 22058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Unretained(this))); 22158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 22258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 22358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const base::FilePath& test_folder_1_path() { return test_folder_1_.path(); } 22458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const base::FilePath& test_folder_2_path() { return test_folder_2_.path(); } 22558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 22658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TestPicasaDataProvider* data_provider() const { 22758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return picasa_data_provider_.get(); 22858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 22958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 230d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const base::FilePath GetTempDirPath() const { 231d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return picasa_root_dir_.path().AppendASCII(kPicasaTempDirName); 23258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 23358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 234d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual base::FilePath GetColumnFileDestination() const { 235d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return picasa_root_dir_.path().AppendASCII(kPicasaDatabaseDirName); 236d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 237d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 238d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) private: 23958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void SetupFoldersAndDataProvider() { 24058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(MediaFileSystemBackend::CurrentlyOnMediaTaskRunnerThread()); 24158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(test_folder_1_.CreateUniqueTempDir()); 24258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(test_folder_2_.CreateUniqueTempDir()); 243d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_TRUE(picasa_root_dir_.CreateUniqueTempDir()); 244a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateDirectory( 245d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) picasa_root_dir_.path().AppendASCII(kPicasaDatabaseDirName))); 246a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateDirectory( 247d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) picasa_root_dir_.path().AppendASCII(kPicasaTempDirName))); 248d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 24958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) picasa_data_provider_.reset(new TestPicasaDataProvider( 250d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) picasa_root_dir_.path().AppendASCII(kPicasaDatabaseDirName))); 25158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 25258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 25358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void StartTestOnMediaTaskRunner() { 25458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(MediaFileSystemBackend::CurrentlyOnMediaTaskRunnerThread()); 25558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 25658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) data_provider()->RefreshData( 25758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) RequestedDataType(), 25858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind(&PicasaDataProviderTest::VerifyRefreshResults, 25958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Unretained(this))); 26058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 26158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 26258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void DestructDataProviderThenQuit() { 26358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(MediaFileSystemBackend::CurrentlyOnMediaTaskRunnerThread()); 26458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) picasa_data_provider_.reset(); 26558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::BrowserThread::PostTask( 26658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::BrowserThread::UI, FROM_HERE, quit_closure_); 26758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 26858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 26958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::ScopedTempDir test_folder_1_; 27058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::ScopedTempDir test_folder_2_; 271d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::ScopedTempDir picasa_root_dir_; 27258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 27358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<TestPicasaDataProvider> picasa_data_provider_; 27458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 27558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Closure quit_closure_; 27658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 27758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PicasaDataProviderTest); 27858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 27958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 28058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class PicasaDataProviderNoDatabaseGetListTest : public PicasaDataProviderTest { 28158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected: 28258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual PicasaDataProvider::DataType RequestedDataType() const OVERRIDE { 28358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return PicasaDataProvider::LIST_OF_ALBUMS_AND_FOLDERS_DATA; 28458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 28558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void VerifyRefreshResults(bool parse_success) OVERRIDE { 28658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FALSE(parse_success); 28758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TestDone(); 28858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 28958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 29058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 29158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PicasaDataProviderNoDatabaseGetListTest, 29258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) NoDatabaseGetList) { 29358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) RunTest(); 29458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 29558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 29658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class PicasaDataProviderNoDatabaseGetAlbumsImagesTest 29758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) : public PicasaDataProviderTest { 29858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected: 29958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual PicasaDataProvider::DataType RequestedDataType() const OVERRIDE { 30058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return PicasaDataProvider::ALBUMS_IMAGES_DATA; 30158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 30258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void VerifyRefreshResults(bool parse_success) OVERRIDE { 30358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FALSE(parse_success); 30458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TestDone(); 30558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 30658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 30758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 30858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PicasaDataProviderNoDatabaseGetAlbumsImagesTest, 30958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) NoDatabaseGetAlbumsImages) { 31058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) RunTest(); 31158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 31258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 31358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class PicasaDataProviderGetListTest : public PicasaDataProviderTest { 31458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected: 31558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void InitializeTestData() OVERRIDE { 316d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) WriteTestAlbumTable(GetColumnFileDestination(), test_folder_1_path(), 317d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) test_folder_2_path()); 31858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 31958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 32058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual PicasaDataProvider::DataType RequestedDataType() const OVERRIDE { 32158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return PicasaDataProvider::LIST_OF_ALBUMS_AND_FOLDERS_DATA; 32258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 32358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 32458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void VerifyRefreshResults(bool parse_success) OVERRIDE { 32558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(parse_success); 326d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) VerifyTestAlbumTable( 32758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) data_provider(), test_folder_1_path(), test_folder_2_path()); 32858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TestDone(); 32958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 33058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 33158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 33258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PicasaDataProviderGetListTest, GetListTest) { 33358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) RunTest(); 33458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 33558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 33658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class PicasaDataProviderGetAlbumsImagesTest : public PicasaDataProviderTest { 33758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected: 33858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void InitializeTestData() OVERRIDE { 339d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) WriteTestAlbumTable(GetColumnFileDestination(), test_folder_1_path(), 340d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) test_folder_2_path()); 341d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) WriteTestAlbumsImagesIndex(test_folder_1_path(), test_folder_2_path()); 34258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 34358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 34458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual PicasaDataProvider::DataType RequestedDataType() const OVERRIDE { 34558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return PicasaDataProvider::ALBUMS_IMAGES_DATA; 34658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 34758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 34858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void VerifyRefreshResults(bool parse_success) OVERRIDE { 34958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(parse_success); 350d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) VerifyTestAlbumTable( 35158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) data_provider(), test_folder_1_path(), test_folder_2_path()); 352d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) VerifyTestAlbumsImagesIndex( 35358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) data_provider(), test_folder_1_path(), test_folder_2_path()); 35458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TestDone(); 35558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 35658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 35758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 35858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PicasaDataProviderGetAlbumsImagesTest, 35958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GetAlbumsImagesTest) { 36058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) RunTest(); 36158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 36258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 36358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class PicasaDataProviderMultipleMixedCallbacksTest 36458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) : public PicasaDataProviderTest { 36558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public: 36658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) PicasaDataProviderMultipleMixedCallbacksTest() 36758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) : list_callbacks_called_(0), albums_images_callbacks_called_(0) {} 36858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 36958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void InitializeTestData() OVERRIDE { 370d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) WriteTestAlbumTable(GetColumnFileDestination(), test_folder_1_path(), 371d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) test_folder_2_path()); 372d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) WriteTestAlbumsImagesIndex(test_folder_1_path(), test_folder_2_path()); 37358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 37458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 37558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual PicasaDataProvider::DataType RequestedDataType() const OVERRIDE { 37658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return PicasaDataProvider::ALBUMS_IMAGES_DATA; 37758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 37858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 37958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected: 38058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void ListCallback(int expected_list_callbacks_called, 38158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool parse_success) { 38258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(parse_success); 38358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(expected_list_callbacks_called, ++list_callbacks_called_); 384d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) VerifyTestAlbumTable( 38558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) data_provider(), test_folder_1_path(), test_folder_2_path()); 38658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CheckTestDone(); 38758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 38858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 38958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void AlbumsImagesCallback(int expected_albums_images_callbacks_called, 39058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool parse_success) { 39158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(parse_success); 39258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_EQ(expected_albums_images_callbacks_called, 39358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ++albums_images_callbacks_called_); 394d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) VerifyTestAlbumsImagesIndex( 39558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) data_provider(), test_folder_1_path(), test_folder_2_path()); 39658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CheckTestDone(); 39758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 39858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 39958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private: 40058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void CheckTestDone() { 40158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_LE(list_callbacks_called_, 2); 40258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_LE(albums_images_callbacks_called_, 2); 40358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (list_callbacks_called_ == 2 && albums_images_callbacks_called_ == 2) 40458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) TestDone(); 40558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 40658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 40758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void StartTestOnMediaTaskRunner() OVERRIDE { 40858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(MediaFileSystemBackend::CurrentlyOnMediaTaskRunnerThread()); 40958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 41058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) data_provider()->RefreshData( 41158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) PicasaDataProvider::LIST_OF_ALBUMS_AND_FOLDERS_DATA, 41258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind(&PicasaDataProviderMultipleMixedCallbacksTest::ListCallback, 41358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Unretained(this), 41458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1)); 41558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) data_provider()->RefreshData( 41658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) PicasaDataProvider::ALBUMS_IMAGES_DATA, 41758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind( 41858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) &PicasaDataProviderMultipleMixedCallbacksTest::AlbumsImagesCallback, 41958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Unretained(this), 42058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1)); 42158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) data_provider()->RefreshData( 42258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) PicasaDataProvider::LIST_OF_ALBUMS_AND_FOLDERS_DATA, 42358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind(&PicasaDataProviderMultipleMixedCallbacksTest::ListCallback, 42458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Unretained(this), 42558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2)); 42658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) data_provider()->RefreshData( 42758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) PicasaDataProvider::ALBUMS_IMAGES_DATA, 42858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind( 42958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) &PicasaDataProviderMultipleMixedCallbacksTest::AlbumsImagesCallback, 43058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Unretained(this), 43158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2)); 43258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 43358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 43458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) int list_callbacks_called_; 43558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) int albums_images_callbacks_called_; 43658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 43758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 43858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PicasaDataProviderMultipleMixedCallbacksTest, 43958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) MultipleMixedCallbacks) { 44058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) RunTest(); 44158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 44258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 44358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class PicasaDataProviderFileWatcherInvalidateTest 44458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) : public PicasaDataProviderGetListTest { 44558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected: 44658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void ListCallback(bool parse_success) { 44758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_FALSE(parse_success); 4484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) data_provider()->EnsureFileWatchStartedForTesting( 4494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(&PicasaDataProviderFileWatcherInvalidateTest:: 4504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OnPicasaTempDirWatchStarted, 4514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Unretained(this))); 4524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 4534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void OnPicasaTempDirWatchStarted(bool file_watch_successful) { 4554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ASSERT_TRUE(file_watch_successful); 45658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 45758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Validate the list after the file move triggers an invalidate. 45858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) data_provider()->SetInvalidateCallback(base::Bind( 45958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) &PicasaDataProvider::RefreshData, 46058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Unretained(data_provider()), 46158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) RequestedDataType(), 46258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind( 46358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) &PicasaDataProviderFileWatcherInvalidateTest::VerifyRefreshResults, 46458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Unretained(this)))); 46558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 46658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) data_provider()->MoveTempFilesToDatabase(); 46758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 46858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 469d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual base::FilePath GetColumnFileDestination() const OVERRIDE { 470d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return GetTempDirPath(); 47158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 47258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 473d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) private: 47458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void StartTestOnMediaTaskRunner() OVERRIDE { 47558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(MediaFileSystemBackend::CurrentlyOnMediaTaskRunnerThread()); 47658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 47758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Refresh before moving album table to database dir, guaranteeing failure. 47858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) data_provider()->RefreshData( 47958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) RequestedDataType(), 48058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind( 48158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) &PicasaDataProviderFileWatcherInvalidateTest::ListCallback, 48258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Unretained(this))); 48358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 48458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 48558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 48658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PicasaDataProviderFileWatcherInvalidateTest, 4874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FileWatcherInvalidateTest) { 48858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) RunTest(); 48958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 49058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 49158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class PicasaDataProviderInvalidateInflightTableReaderTest 49258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) : public PicasaDataProviderGetListTest { 49358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected: 49458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Don't write the database files until later. 49558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void InitializeTestData() OVERRIDE {} 49658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 49758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private: 49858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void StartTestOnMediaTaskRunner() OVERRIDE { 49958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(MediaFileSystemBackend::CurrentlyOnMediaTaskRunnerThread()); 50058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 50158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Refresh before the database files have been written. 50258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // This is guaranteed to fail to read the album table. 50358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) data_provider()->RefreshData( 50458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) RequestedDataType(), 50558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind(&PicasaDataProviderInvalidateInflightTableReaderTest:: 50658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) VerifyRefreshResults, 50758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Unretained(this))); 50858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 50958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Now write the album table and invalidate the inflight table reader. 51058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) PicasaDataProviderGetListTest::InitializeTestData(); 51158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) data_provider()->InvalidateData(); 51258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 51358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // VerifyRefreshResults callback should receive correct results now. 51458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 51558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 51658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 51758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PicasaDataProviderInvalidateInflightTableReaderTest, 51858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) InvalidateInflightTableReaderTest) { 51958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) RunTest(); 52058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 52158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 52258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class PicasaDataProviderInvalidateInflightAlbumsIndexerTest 52358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) : public PicasaDataProviderGetAlbumsImagesTest { 52458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected: 52558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void ListCallback(bool parse_success) { 52658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(parse_success); 52758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 52858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Empty the album maps to guarantee that the first utility process will 52958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // fail to get the correct albums-images index. 53058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) data_provider()->SetAlbumMapsForTesting(AlbumMap(), AlbumMap()); 53158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) data_provider()->RefreshData( 53258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) PicasaDataProvider::ALBUMS_IMAGES_DATA, 53358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind(&PicasaDataProviderInvalidateInflightAlbumsIndexerTest:: 53458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) VerifyRefreshResults, 53558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Unretained(this))); 53658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 53758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Now invalidate all the data. The album maps will be re-read. 53858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) data_provider()->InvalidateData(); 53958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 54058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // VerifyRefreshResults callback should receive correct results now. 54158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 54258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 54358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private: 54458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void StartTestOnMediaTaskRunner() OVERRIDE { 54558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(MediaFileSystemBackend::CurrentlyOnMediaTaskRunnerThread()); 54658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 54758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) data_provider()->RefreshData( 54858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) PicasaDataProvider::LIST_OF_ALBUMS_AND_FOLDERS_DATA, 54958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Bind(&PicasaDataProviderInvalidateInflightAlbumsIndexerTest:: 55058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ListCallback, 55158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::Unretained(this))); 55258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 55358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 55458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 55558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PicasaDataProviderInvalidateInflightAlbumsIndexerTest, 5561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) InvalidateInflightAlbumsIndexerTest) { 55758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) RunTest(); 55858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 55958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 56058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace picasa 561