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