// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_MEDIA_GALLERIES_IMPORTED_MEDIA_GALLERY_REGISTRY_H_ #define CHROME_BROWSER_MEDIA_GALLERIES_IMPORTED_MEDIA_GALLERY_REGISTRY_H_ #include #include #include "base/basictypes.h" #include "base/files/file_path.h" #include "base/lazy_instance.h" #include "base/memory/scoped_ptr.h" namespace iphoto { class IPhotoDataProvider; class IPhotoDataProviderTest; } namespace itunes { class ITunesDataProvider; class ITunesDataProviderTest; } namespace picasa { class PicasaDataProvider; class PicasaDataProviderTest; } // This class lives on the MediaTaskRunner thread. It has some static // methods which are called on the UI thread. // // MediaTaskRunner is not guaranteed to be one thread, but it is guaranteed // to be a series of sequential calls. See SequencedTaskRunner for details. class ImportedMediaGalleryRegistry { public: static ImportedMediaGalleryRegistry* GetInstance(); void Initialize(); // Should be called on the UI thread only. bool RegisterPicasaFilesystemOnUIThread(const std::string& fs_name, const base::FilePath& database_path); bool RegisterITunesFilesystemOnUIThread( const std::string& fs_name, const base::FilePath& xml_library_path); bool RegisterIPhotoFilesystemOnUIThread( const std::string& fs_name, const base::FilePath& xml_library_path); bool RevokeImportedFilesystemOnUIThread(const std::string& fs_name); // Path where all virtual file systems are "mounted." base::FilePath ImportedRoot(); // Should be called on the MediaTaskRunner thread only. #if defined(OS_WIN) || defined(OS_MACOSX) static picasa::PicasaDataProvider* PicasaDataProvider(); static itunes::ITunesDataProvider* ITunesDataProvider(); #endif // defined(OS_WIN) || defined(OS_MACOSX) #if defined(OS_MACOSX) static iphoto::IPhotoDataProvider* IPhotoDataProvider(); #endif // defined(OS_MACOSX) private: friend struct base::DefaultLazyInstanceTraits; friend class iphoto::IPhotoDataProviderTest; friend class itunes::ITunesDataProviderTest; friend class picasa::PicasaDataProviderTest; ImportedMediaGalleryRegistry(); virtual ~ImportedMediaGalleryRegistry(); #if defined(OS_WIN) || defined(OS_MACOSX) void RegisterPicasaFileSystem(const base::FilePath& database_path); void RevokePicasaFileSystem(); void RegisterITunesFileSystem(const base::FilePath& xml_library_path); void RevokeITunesFileSystem(); #endif // defined(OS_WIN) || defined(OS_MACOSX) #if defined(OS_MACOSX) void RegisterIPhotoFileSystem(const base::FilePath& xml_library_path); void RevokeIPhotoFileSystem(); #endif // defined(OS_MACOSX) base::FilePath imported_root_; #if defined(OS_WIN) || defined(OS_MACOSX) // The data providers are only set or accessed on the task runner thread. scoped_ptr picasa_data_provider_; scoped_ptr itunes_data_provider_; // The remaining members are only accessed on the IO thread. std::set picasa_fs_names_; std::set itunes_fs_names_; #ifndef NDEBUG base::FilePath picasa_database_path_; base::FilePath itunes_xml_library_path_; #endif #endif // defined(OS_WIN) || defined(OS_MACOSX) #if defined(OS_MACOSX) scoped_ptr iphoto_data_provider_; std::set iphoto_fs_names_; #ifndef NDEBUG base::FilePath iphoto_xml_library_path_; #endif #endif // defined(OS_MACOSX) DISALLOW_COPY_AND_ASSIGN(ImportedMediaGalleryRegistry); }; #endif // CHROME_BROWSER_MEDIA_GALLERIES_IMPORTED_MEDIA_GALLERY_REGISTRY_H_