Index: chrome/browser/extensions/api/media_galleries_private/media_galleries_private_api.cc |
diff --git a/chrome/browser/extensions/api/media_galleries_private/media_galleries_private_api.cc b/chrome/browser/extensions/api/media_galleries_private/media_galleries_private_api.cc |
index 64854f673fc46b4e64c02fc6088c66577768312a..b2ba2ddac10ac634920219e01685254e9f7a1d1c 100644 |
--- a/chrome/browser/extensions/api/media_galleries_private/media_galleries_private_api.cc |
+++ b/chrome/browser/extensions/api/media_galleries_private/media_galleries_private_api.cc |
@@ -60,29 +60,6 @@ void HandleProfileShutdownOnFileThread(void* profile_id) { |
GalleryWatchManager::OnProfileShutdown(profile_id); |
} |
-// Gets the |gallery_file_path| and |gallery_pref_id| of the gallery specified |
-// by the |gallery_id|. Returns true and set |gallery_file_path| and |
-// |gallery_pref_id| if the |gallery_id| is valid and returns false otherwise. |
-bool GetGalleryFilePathAndId(const std::string& gallery_id, |
- Profile* profile, |
- const Extension* extension, |
- base::FilePath* gallery_file_path, |
- chrome::MediaGalleryPrefId* gallery_pref_id) { |
- chrome::MediaGalleryPrefId pref_id; |
- if (!base::StringToUint64(gallery_id, &pref_id)) |
- return false; |
- chrome::MediaFileSystemRegistry* registry = |
- g_browser_process->media_file_system_registry(); |
- base::FilePath file_path( |
- registry->GetPreferences(profile)->LookUpGalleryPathForExtension( |
- pref_id, extension, false)); |
- if (file_path.empty()) |
- return false; |
- *gallery_pref_id = pref_id; |
- *gallery_file_path = file_path; |
- return true; |
-} |
- |
bool GetMediaGalleryPermissionFromDictionary( |
const DictionaryValue* dict, |
chrome::MediaGalleryPermission* out_permission) { |
@@ -304,14 +281,37 @@ bool MediaGalleriesPrivateAddGalleryWatchFunction::RunImpl() { |
scoped_ptr<AddGalleryWatch::Params> params( |
AddGalleryWatch::Params::Create(*args_)); |
EXTENSION_FUNCTION_VALIDATE(params.get()); |
- base::FilePath gallery_file_path; |
- chrome::MediaGalleryPrefId gallery_pref_id = 0; |
- if (!GetGalleryFilePathAndId(params->gallery_id, profile_, GetExtension(), |
- &gallery_file_path, &gallery_pref_id)) { |
+ |
+ chrome::MediaGalleryPrefId pref_id = chrome::kInvalidMediaGalleryPrefId; |
+ if (!base::StringToUint64(params->gallery_id, &pref_id) || |
+ pref_id == chrome::kInvalidMediaGalleryPrefId) { |
error_ = kInvalidGalleryIDError; |
return false; |
} |
+ chrome::MediaFileSystemRegistry* registry = |
+ g_browser_process->media_file_system_registry(); |
+ registry->GetPreferencesAsync(profile_, |
+ base::Bind(&MediaGalleriesPrivateAddGalleryWatchFunction::OnPreferences, |
+ this, pref_id)); |
+ return true; |
+} |
+ |
+void MediaGalleriesPrivateAddGalleryWatchFunction::OnPreferences( |
+ chrome::MediaGalleryPrefId pref_id, |
+ chrome::MediaGalleriesPreferences* preferences) { |
+ base::FilePath file_path(preferences->LookUpGalleryPathForExtension( |
+ pref_id, GetExtension(), false)); |
+ |
+ if (file_path.empty()) { |
+ HandleResponse(pref_id, false); |
+ return; |
+ } |
+ |
+ GalleryWatchStateTracker* state_tracker = |
+ MediaGalleriesPrivateAPI::Get(profile_)->GetGalleryWatchStateTracker(); |
+ state_tracker->SetPreferences(preferences); |
+ |
#if defined(OS_WIN) |
MediaGalleriesPrivateEventRouter* router = |
MediaGalleriesPrivateAPI::Get(profile_)->GetEventRouter(); |
@@ -321,19 +321,18 @@ bool MediaGalleriesPrivateAddGalleryWatchFunction::RunImpl() { |
FROM_HERE, |
base::Bind(&GalleryWatchManager::SetupGalleryWatch, |
profile_, |
- gallery_pref_id, |
- gallery_file_path, |
+ pref_id, |
+ file_path, |
extension_id(), |
router->AsWeakPtr()), |
base::Bind(&MediaGalleriesPrivateAddGalleryWatchFunction::HandleResponse, |
this, |
- gallery_pref_id)); |
+ pref_id)); |
#else |
// Recursive gallery watch operation is not currently supported on |
// non-windows platforms. Please refer to crbug.com/144491 for more details. |
- HandleResponse(gallery_pref_id, false); |
+ HandleResponse(pref_id, false); |
#endif |
- return true; |
} |
void MediaGalleriesPrivateAddGalleryWatchFunction::HandleResponse( |
@@ -373,24 +372,47 @@ bool MediaGalleriesPrivateRemoveGalleryWatchFunction::RunImpl() { |
RemoveGalleryWatch::Params::Create(*args_)); |
EXTENSION_FUNCTION_VALIDATE(params.get()); |
- base::FilePath gallery_file_path; |
- chrome::MediaGalleryPrefId gallery_pref_id = 0; |
- if (!GetGalleryFilePathAndId(params->gallery_id, profile_, GetExtension(), |
- &gallery_file_path, &gallery_pref_id)) { |
+ chrome::MediaGalleryPrefId pref_id = chrome::kInvalidMediaGalleryPrefId; |
+ if (!base::StringToUint64(params->gallery_id, &pref_id) || |
+ pref_id == chrome::kInvalidMediaGalleryPrefId) { |
error_ = kInvalidGalleryIDError; |
return false; |
} |
+ chrome::MediaFileSystemRegistry* registry = |
+ g_browser_process->media_file_system_registry(); |
+ registry->GetPreferencesAsync(profile_, base::Bind( |
+ &MediaGalleriesPrivateRemoveGalleryWatchFunction::OnPreferences, |
+ base::Unretained(this), pref_id)); |
+ return true; |
+} |
+ |
+void MediaGalleriesPrivateRemoveGalleryWatchFunction::OnPreferences( |
+ chrome::MediaGalleriesPreferences* preferences, |
+ chrome::MediaGalleryPrefId pref_id) { |
+ base::FilePath file_path(preferences->LookUpGalleryPathForExtension( |
+ pref_id, GetExtension(), false)); |
+ |
+ if (file_path.empty) { |
+ HandleResponse(pref_id, false); |
+ return; |
+ } |
+ |
+ GalleryWatchStateTracker* state_tracker = |
+ MediaGalleriesPrivateAPI::Get(profile_)->GetGalleryWatchStateTracker(); |
+ state_tracker->SetPreferences(preferences); |
+ |
content::BrowserThread::PostTask( |
content::BrowserThread::FILE, FROM_HERE, |
base::Bind(&GalleryWatchManager::RemoveGalleryWatch, |
profile_, |
- gallery_file_path, |
+ preferences, |
+ file_path, |
extension_id())); |
GalleryWatchStateTracker* state_tracker = |
MediaGalleriesPrivateAPI::Get(profile_)->GetGalleryWatchStateTracker(); |
- state_tracker->OnGalleryWatchRemoved(extension_id(), gallery_pref_id); |
+ state_tracker->OnGalleryWatchRemoved(extension_id(), pref_id); |
#endif |
return true; |
} |