190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file. 490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#ifndef CHROME_BROWSER_MEDIA_GALLERIES_IMPORTED_MEDIA_GALLERY_REGISTRY_H_ 690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define CHROME_BROWSER_MEDIA_GALLERIES_IMPORTED_MEDIA_GALLERY_REGISTRY_H_ 790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include <set> 990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include <string> 1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/basictypes.h" 1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/files/file_path.h" 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/lazy_instance.h" 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace iphoto { 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class IPhotoDataProvider; 180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)class IPhotoDataProviderTest; 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace itunes { 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class ITunesDataProvider; 23ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass ITunesDataProviderTest; 24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace picasa { 2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class PicasaDataProvider; 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class PicasaDataProviderTest; 2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// This class lives on the MediaTaskRunner thread. It has some static 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// methods which are called on the UI thread. 3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// MediaTaskRunner is not guaranteed to be one thread, but it is guaranteed 3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// to be a series of sequential calls. See SequencedTaskRunner for details. 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class ImportedMediaGalleryRegistry { 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) public: 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static ImportedMediaGalleryRegistry* GetInstance(); 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void Initialize(); 41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Should be called on the UI thread only. 43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool RegisterPicasaFilesystemOnUIThread(const std::string& fs_name, 44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const base::FilePath& database_path); 45868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool RegisterITunesFilesystemOnUIThread( 47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const std::string& fs_name, 48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const base::FilePath& xml_library_path); 49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool RegisterIPhotoFilesystemOnUIThread( 51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const std::string& fs_name, 524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const base::FilePath& xml_library_path); 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool RevokeImportedFilesystemOnUIThread(const std::string& fs_name); 55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Path where all virtual file systems are "mounted." 57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::FilePath ImportedRoot(); 5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Should be called on the MediaTaskRunner thread only. 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_WIN) || defined(OS_MACOSX) 61868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) static picasa::PicasaDataProvider* PicasaDataProvider(); 62868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) static itunes::ITunesDataProvider* ITunesDataProvider(); 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif // defined(OS_WIN) || defined(OS_MACOSX) 6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_MACOSX) 664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) static iphoto::IPhotoDataProvider* IPhotoDataProvider(); 674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // defined(OS_MACOSX) 684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) private: 7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) friend struct base::DefaultLazyInstanceTraits<ImportedMediaGalleryRegistry>; 710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) friend class iphoto::IPhotoDataProviderTest; 72ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch friend class itunes::ITunesDataProviderTest; 7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) friend class picasa::PicasaDataProviderTest; 7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ImportedMediaGalleryRegistry(); 7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~ImportedMediaGalleryRegistry(); 7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_WIN) || defined(OS_MACOSX) 7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void RegisterPicasaFileSystem(const base::FilePath& database_path); 8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void RevokePicasaFileSystem(); 8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 82868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void RegisterITunesFileSystem(const base::FilePath& xml_library_path); 83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void RevokeITunesFileSystem(); 844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // defined(OS_WIN) || defined(OS_MACOSX) 854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_MACOSX) 874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void RegisterIPhotoFileSystem(const base::FilePath& xml_library_path); 884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void RevokeIPhotoFileSystem(); 894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // defined(OS_MACOSX) 90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 91effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::FilePath imported_root_; 92effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN) || defined(OS_MACOSX) 94868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // The data providers are only set or accessed on the task runner thread. 9590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_ptr<picasa::PicasaDataProvider> picasa_data_provider_; 96868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<itunes::ITunesDataProvider> itunes_data_provider_; 97868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 98868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // The remaining members are only accessed on the IO thread. 99effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::set<std::string> picasa_fs_names_; 100effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::set<std::string> itunes_fs_names_; 10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 102868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#ifndef NDEBUG 103868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::FilePath picasa_database_path_; 104868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::FilePath itunes_xml_library_path_; 105868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif // defined(OS_WIN) || defined(OS_MACOSX) 10790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_MACOSX) 1094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<iphoto::IPhotoDataProvider> iphoto_data_provider_; 1104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 111effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::set<std::string> iphoto_fs_names_; 1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#ifndef NDEBUG 1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::FilePath iphoto_xml_library_path_; 1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // defined(OS_MACOSX) 1174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 11890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ImportedMediaGalleryRegistry); 11990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}; 12090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 12190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif // CHROME_BROWSER_MEDIA_GALLERIES_IMPORTED_MEDIA_GALLERY_REGISTRY_H_ 122