Chromium Code Reviews| Index: chrome/browser/media_galleries/media_file_system_registry.cc |
| diff --git a/chrome/browser/media_galleries/media_file_system_registry.cc b/chrome/browser/media_galleries/media_file_system_registry.cc |
| index e659ad7431d11df61bf904f0e98077d6a3cead7e..70d9e4d36793ee29535742844af3984614c1d74a 100644 |
| --- a/chrome/browser/media_galleries/media_file_system_registry.cc |
| +++ b/chrome/browser/media_galleries/media_file_system_registry.cc |
| @@ -435,7 +435,18 @@ void MediaFileSystemRegistry::GetMediaFileSystemsForExtension( |
| Profile* profile = |
| Profile::FromBrowserContext(rvh->GetProcess()->GetBrowserContext()); |
| - MediaGalleriesPreferences* preferences = GetPreferences(profile); |
| + GetPreferencesAsync( |
| + profile, base::Bind( |
| + &MediaFileSystemRegistry::GetMediaFileSystemsPostStorageMonitorInit, |
| + base::Unretained(this), |
| + rvh, extension, callback)); |
| +} |
| + |
| +void MediaFileSystemRegistry::GetMediaFileSystemsPostStorageMonitorInit( |
| + const content::RenderViewHost* rvh, |
| + const extensions::Extension* extension, |
| + const MediaFileSystemsCallback& callback, |
| + MediaGalleriesPreferences* preferences) { |
| MediaGalleryPrefIdSet galleries = |
| preferences->GalleriesForExtension(*extension); |
| @@ -444,6 +455,8 @@ void MediaFileSystemRegistry::GetMediaFileSystemsForExtension( |
| return; |
| } |
| + Profile* profile = |
| + Profile::FromBrowserContext(rvh->GetProcess()->GetBrowserContext()); |
| if (!ContainsKey(pref_change_registrar_map_, profile)) { |
| PrefChangeRegistrar* pref_registrar = new PrefChangeRegistrar; |
| pref_registrar->Init(profile->GetPrefs()); |
| @@ -470,6 +483,34 @@ void MediaFileSystemRegistry::GetMediaFileSystemsForExtension( |
| callback); |
| } |
| +void MediaFileSystemRegistry::GetPreferencesAsync( |
| + Profile* profile, |
| + base::Callback<void(MediaGalleriesPreferences*)> callback) { |
| + StorageMonitor* monitor = StorageMonitor::GetInstance(); |
|
tommycli
2013/05/10 17:41:24
I see that StorageMonitor::GetInstance() is called
Greg Billock
2013/05/10 17:58:27
Yes. I have a long-term goal to reduce/eliminate t
|
| + if (!monitor) { |
| + callback.Run(MediaGalleriesPreferencesFactory::GetForProfile(profile)); |
| + return; |
| + } |
| + |
| + if (monitor->IsInitialized()) { |
| + callback.Run(GetPreferences(profile)); |
| + return; |
| + } |
| + |
| + monitor->Initialize( |
| + base::Bind(&MediaFileSystemRegistry::OnStorageMonitorInitialized, |
| + base::Unretained(this), |
|
Lei Zhang
2013/05/11 02:12:23
I would probably feel better about this Unretained
Greg Billock
2013/05/13 21:20:38
Shall we add a weak ptr factory?
|
| + profile, callback)); |
| + |
| + // TODO(gbillock): set a timeout here to bail out of init? |
| +} |
| + |
| +void MediaFileSystemRegistry::OnStorageMonitorInitialized( |
| + Profile* profile, |
| + base::Callback<void(MediaGalleriesPreferences*)> callback) { |
| + callback.Run(GetPreferences(profile)); |
| +} |
| + |
| MediaGalleriesPreferences* MediaFileSystemRegistry::GetPreferences( |
| Profile* profile) { |
| MediaGalleriesPreferences* preferences = |
| @@ -486,6 +527,7 @@ MediaGalleriesPreferences* MediaFileSystemRegistry::GetPreferences( |
| StorageMonitor* monitor = StorageMonitor::GetInstance(); |
| if (!monitor) |
| return preferences; |
| + DCHECK(monitor->IsInitialized()); |
| std::vector<StorageInfo> existing_devices = monitor->GetAttachedStorage(); |
| for (size_t i = 0; i < existing_devices.size(); i++) { |
| if (!MediaStorageUtil::IsMediaDevice(existing_devices[i].device_id)) |