1 // Copyright (c) 2012 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.
5 // MediaFileSystemRegistry registers pictures directories and media devices as
6 // File API filesystems and keeps track of the path to filesystem ID mappings.
8 #ifndef CHROME_BROWSER_MEDIA_GALLERIES_MEDIA_FILE_SYSTEM_REGISTRY_H_
9 #define CHROME_BROWSER_MEDIA_GALLERIES_MEDIA_FILE_SYSTEM_REGISTRY_H_
16 #include "base/basictypes.h"
17 #include "base/files/file_path.h"
18 #include "base/memory/ref_counted.h"
19 #include "base/memory/scoped_ptr.h"
20 #include "chrome/browser/media_galleries/media_galleries_preferences.h"
21 #include "chrome/browser/storage_monitor/removable_storage_observer.h"
23 class ExtensionGalleriesHost
;
24 class MediaFileSystemContext
;
25 class MediaGalleriesPreferences
;
32 namespace extensions
{
37 class IsolatedContext
;
40 // Contains information about a particular filesystem being provided to a
41 // client, including metadata like the name and ID, and API handles like the
42 // fsid (filesystem ID) used to hook up the API objects.
43 struct MediaFileSystemInfo
{
44 MediaFileSystemInfo(const base::string16
& fs_name
,
45 const base::FilePath
& fs_path
,
46 const std::string
& filesystem_id
,
47 MediaGalleryPrefId pref_id
,
48 const std::string
& transient_device_id
,
51 MediaFileSystemInfo();
52 ~MediaFileSystemInfo();
57 MediaGalleryPrefId pref_id
;
58 std::string transient_device_id
;
63 typedef base::Callback
<void(const std::vector
<MediaFileSystemInfo
>&)>
64 MediaFileSystemsCallback
;
66 // Tracks usage of filesystems by extensions.
67 // This object lives on the UI thread.
68 class MediaFileSystemRegistry
69 : public RemovableStorageObserver
,
70 public MediaGalleriesPreferences::GalleryChangeObserver
{
72 MediaFileSystemRegistry();
73 virtual ~MediaFileSystemRegistry();
75 // Passes to |callback| the list of media filesystem IDs and paths for a
77 void GetMediaFileSystemsForExtension(
78 const content::RenderViewHost
* rvh
,
79 const extensions::Extension
* extension
,
80 const MediaFileSystemsCallback
& callback
);
82 // Returns the media galleries preferences for the specified |profile|.
83 // Caller is responsible for ensuring that the preferences are initialized
85 MediaGalleriesPreferences
* GetPreferences(Profile
* profile
);
87 // RemovableStorageObserver implementation.
88 virtual void OnRemovableStorageDetached(const StorageInfo
& info
) OVERRIDE
;
91 class MediaFileSystemContextImpl
;
93 friend class MediaFileSystemContextImpl
;
94 friend class MediaFileSystemRegistryTest
;
95 friend class TestMediaFileSystemContext
;
97 // Map an extension to the ExtensionGalleriesHost.
98 typedef std::map
<std::string
/*extension_id*/,
99 scoped_refptr
<ExtensionGalleriesHost
> > ExtensionHostMap
;
100 // Map a profile and extension to the ExtensionGalleriesHost.
101 typedef std::map
<Profile
*, ExtensionHostMap
> ExtensionGalleriesHostMap
;
103 virtual void OnPermissionRemoved(MediaGalleriesPreferences
* pref
,
104 const std::string
& extension_id
,
105 MediaGalleryPrefId pref_id
) OVERRIDE
;
106 virtual void OnGalleryRemoved(MediaGalleriesPreferences
* pref
,
107 MediaGalleryPrefId pref_id
) OVERRIDE
;
109 void OnExtensionGalleriesHostEmpty(Profile
* profile
,
110 const std::string
& extension_id
);
112 // This map owns all the ExtensionGalleriesHost objects created.
113 ExtensionGalleriesHostMap extension_hosts_map_
;
115 scoped_ptr
<MediaFileSystemContext
> file_system_context_
;
117 DISALLOW_COPY_AND_ASSIGN(MediaFileSystemRegistry
);
120 #endif // CHROME_BROWSER_MEDIA_GALLERIES_MEDIA_FILE_SYSTEM_REGISTRY_H_