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 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_MEDIA_GALLERIES_IMPORTED_MEDIA_GALLERY_REGISTRY_H_ 6#define CHROME_BROWSER_MEDIA_GALLERIES_IMPORTED_MEDIA_GALLERY_REGISTRY_H_ 7 8#include <set> 9#include <string> 10 11#include "base/basictypes.h" 12#include "base/files/file_path.h" 13#include "base/lazy_instance.h" 14#include "base/memory/scoped_ptr.h" 15 16namespace iphoto { 17class IPhotoDataProvider; 18class IPhotoDataProviderTest; 19} 20 21namespace itunes { 22class ITunesDataProvider; 23class ITunesDataProviderTest; 24} 25 26namespace picasa { 27class PicasaDataProvider; 28class PicasaDataProviderTest; 29} 30 31// This class lives on the MediaTaskRunner thread. It has some static 32// methods which are called on the UI thread. 33// 34// MediaTaskRunner is not guaranteed to be one thread, but it is guaranteed 35// to be a series of sequential calls. See SequencedTaskRunner for details. 36class ImportedMediaGalleryRegistry { 37 public: 38 static ImportedMediaGalleryRegistry* GetInstance(); 39 40 void Initialize(); 41 42 // Should be called on the UI thread only. 43 bool RegisterPicasaFilesystemOnUIThread(const std::string& fs_name, 44 const base::FilePath& database_path); 45 46 bool RegisterITunesFilesystemOnUIThread( 47 const std::string& fs_name, 48 const base::FilePath& xml_library_path); 49 50 bool RegisterIPhotoFilesystemOnUIThread( 51 const std::string& fs_name, 52 const base::FilePath& xml_library_path); 53 54 bool RevokeImportedFilesystemOnUIThread(const std::string& fs_name); 55 56 // Path where all virtual file systems are "mounted." 57 base::FilePath ImportedRoot(); 58 59 // Should be called on the MediaTaskRunner thread only. 60#if defined(OS_WIN) || defined(OS_MACOSX) 61 static picasa::PicasaDataProvider* PicasaDataProvider(); 62 static itunes::ITunesDataProvider* ITunesDataProvider(); 63#endif // defined(OS_WIN) || defined(OS_MACOSX) 64 65#if defined(OS_MACOSX) 66 static iphoto::IPhotoDataProvider* IPhotoDataProvider(); 67#endif // defined(OS_MACOSX) 68 69 private: 70 friend struct base::DefaultLazyInstanceTraits<ImportedMediaGalleryRegistry>; 71 friend class iphoto::IPhotoDataProviderTest; 72 friend class itunes::ITunesDataProviderTest; 73 friend class picasa::PicasaDataProviderTest; 74 75 ImportedMediaGalleryRegistry(); 76 virtual ~ImportedMediaGalleryRegistry(); 77 78#if defined(OS_WIN) || defined(OS_MACOSX) 79 void RegisterPicasaFileSystem(const base::FilePath& database_path); 80 void RevokePicasaFileSystem(); 81 82 void RegisterITunesFileSystem(const base::FilePath& xml_library_path); 83 void RevokeITunesFileSystem(); 84#endif // defined(OS_WIN) || defined(OS_MACOSX) 85 86#if defined(OS_MACOSX) 87 void RegisterIPhotoFileSystem(const base::FilePath& xml_library_path); 88 void RevokeIPhotoFileSystem(); 89#endif // defined(OS_MACOSX) 90 91 base::FilePath imported_root_; 92 93#if defined(OS_WIN) || defined(OS_MACOSX) 94 // The data providers are only set or accessed on the task runner thread. 95 scoped_ptr<picasa::PicasaDataProvider> picasa_data_provider_; 96 scoped_ptr<itunes::ITunesDataProvider> itunes_data_provider_; 97 98 // The remaining members are only accessed on the IO thread. 99 std::set<std::string> picasa_fs_names_; 100 std::set<std::string> itunes_fs_names_; 101 102#ifndef NDEBUG 103 base::FilePath picasa_database_path_; 104 base::FilePath itunes_xml_library_path_; 105#endif 106#endif // defined(OS_WIN) || defined(OS_MACOSX) 107 108#if defined(OS_MACOSX) 109 scoped_ptr<iphoto::IPhotoDataProvider> iphoto_data_provider_; 110 111 std::set<std::string> iphoto_fs_names_; 112 113#ifndef NDEBUG 114 base::FilePath iphoto_xml_library_path_; 115#endif 116#endif // defined(OS_MACOSX) 117 118 DISALLOW_COPY_AND_ASSIGN(ImportedMediaGalleryRegistry); 119}; 120 121#endif // CHROME_BROWSER_MEDIA_GALLERIES_IMPORTED_MEDIA_GALLERY_REGISTRY_H_ 122