Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // GalleryWatchStateTracker implementation. | 5 // GalleryWatchStateTracker implementation. |
| 6 | 6 |
| 7 #include "chrome/browser/extensions/api/media_galleries_private/gallery_watch_st ate_tracker.h" | 7 #include "chrome/browser/extensions/api/media_galleries_private/gallery_watch_st ate_tracker.h" |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 65 | 65 |
| 66 // Looks up an extension by ID. Does not include disabled extensions. | 66 // Looks up an extension by ID. Does not include disabled extensions. |
| 67 const Extension* GetExtensionById(Profile* profile, | 67 const Extension* GetExtensionById(Profile* profile, |
| 68 const std::string& extension_id) { | 68 const std::string& extension_id) { |
| 69 ExtensionService* service = profile->GetExtensionService(); | 69 ExtensionService* service = profile->GetExtensionService(); |
| 70 if (!service) | 70 if (!service) |
| 71 return NULL; | 71 return NULL; |
| 72 return service->GetExtensionById(extension_id, false); | 72 return service->GetExtensionById(extension_id, false); |
| 73 } | 73 } |
| 74 | 74 |
| 75 // Returns the initialized media galleries preferences for the specified | |
| 76 // |profile|. | |
| 77 chrome::MediaGalleriesPreferences* GetMediaGalleryPreferences( | |
| 78 Profile* profile) { | |
| 79 return g_browser_process->media_file_system_registry()->GetPreferences( | |
| 80 profile); | |
| 81 } | |
| 82 | |
| 83 } // namespace | 75 } // namespace |
| 84 | 76 |
| 85 GalleryWatchStateTracker::GalleryWatchStateTracker(Profile* profile) | 77 GalleryWatchStateTracker::GalleryWatchStateTracker(Profile* profile) |
| 86 : profile_(profile) { | 78 : profile_(profile) { |
| 87 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 79 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 88 DCHECK(profile_); | 80 DCHECK(profile_); |
| 89 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED, | 81 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED, |
| 90 content::Source<Profile>(profile_)); | 82 content::Source<Profile>(profile_)); |
| 91 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, | 83 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, |
| 92 content::Source<Profile>(profile_)); | 84 content::Source<Profile>(profile_)); |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 109 if (!private_api) | 101 if (!private_api) |
| 110 return NULL; // In unit tests, we don't have a MediaGalleriesPrivateAPI. | 102 return NULL; // In unit tests, we don't have a MediaGalleriesPrivateAPI. |
| 111 return private_api->GetGalleryWatchStateTracker(); | 103 return private_api->GetGalleryWatchStateTracker(); |
| 112 #endif | 104 #endif |
| 113 return NULL; | 105 return NULL; |
| 114 } | 106 } |
| 115 | 107 |
| 116 void GalleryWatchStateTracker::OnGalleryPermissionChanged( | 108 void GalleryWatchStateTracker::OnGalleryPermissionChanged( |
| 117 const std::string& extension_id, | 109 const std::string& extension_id, |
| 118 chrome::MediaGalleryPrefId gallery_id, | 110 chrome::MediaGalleryPrefId gallery_id, |
| 119 bool has_permission) { | 111 bool has_permission, |
| 112 chrome::MediaGalleriesPreferences* preferences) { | |
| 120 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 113 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 121 // Granted gallery permission. | 114 // Granted gallery permission. |
| 122 if (has_permission && HasGalleryWatchInfo(extension_id, gallery_id, false)) { | 115 if (has_permission && HasGalleryWatchInfo(extension_id, gallery_id, false)) { |
| 123 SetupGalleryWatch(extension_id, gallery_id); | 116 SetupGalleryWatch(extension_id, gallery_id, preferences); |
| 124 return; | 117 return; |
| 125 } | 118 } |
| 126 | 119 |
| 127 // Revoked gallery permission. | 120 // Revoked gallery permission. |
| 128 if (!has_permission && HasGalleryWatchInfo(extension_id, gallery_id, true)) | 121 if (!has_permission && HasGalleryWatchInfo(extension_id, gallery_id, true)) |
| 129 RemoveGalleryWatch(extension_id, gallery_id); | 122 RemoveGalleryWatch(extension_id, gallery_id, preferences); |
| 130 } | 123 } |
| 131 | 124 |
| 132 chrome::MediaGalleryPrefIdSet | 125 chrome::MediaGalleryPrefIdSet |
| 133 GalleryWatchStateTracker::GetAllWatchedGalleryIDsForExtension( | 126 GalleryWatchStateTracker::GetAllWatchedGalleryIDsForExtension( |
| 134 const std::string& extension_id) const { | 127 const std::string& extension_id) const { |
| 135 chrome::MediaGalleryPrefIdSet gallery_ids; | 128 chrome::MediaGalleryPrefIdSet gallery_ids; |
| 136 WatchedExtensionsMap::const_iterator extension_id_iter = | 129 WatchedExtensionsMap::const_iterator extension_id_iter = |
| 137 watched_extensions_map_.find(extension_id); | 130 watched_extensions_map_.find(extension_id); |
| 138 if (extension_id_iter != watched_extensions_map_.end()) { | 131 if (extension_id_iter != watched_extensions_map_.end()) { |
| 139 for (WatchedGalleriesMap::const_iterator gallery_id_iter = | 132 for (WatchedGalleriesMap::const_iterator gallery_id_iter = |
| 140 extension_id_iter->second.begin(); | 133 extension_id_iter->second.begin(); |
| 141 gallery_id_iter != extension_id_iter->second.end(); | 134 gallery_id_iter != extension_id_iter->second.end(); |
| 142 ++gallery_id_iter) { | 135 ++gallery_id_iter) { |
| 143 gallery_ids.insert(gallery_id_iter->first); | 136 gallery_ids.insert(gallery_id_iter->first); |
| 144 } | 137 } |
| 145 } | 138 } |
| 146 return gallery_ids; | 139 return gallery_ids; |
| 147 } | 140 } |
| 148 | 141 |
| 149 void GalleryWatchStateTracker::RemoveAllGalleryWatchersForExtension( | 142 void GalleryWatchStateTracker::RemoveAllGalleryWatchersForExtension( |
| 150 const std::string& extension_id) { | 143 const std::string& extension_id) { |
| 144 g_browser_process->media_file_system_registry()->GetPreferencesAsync( | |
| 145 profile_, base::Bind( | |
| 146 &GalleryWatchStateTracker::RemoveAllGalleryWatchersWithPreferences, | |
|
vandebo (ex-Chrome)
2013/05/17 22:19:58
Because of this, I think MediaGalleriesPrivateRemo
| |
| 147 AsWeakPtr(), extension_id)); | |
| 148 } | |
| 149 | |
| 150 void GalleryWatchStateTracker::RemoveAllGalleryWatchersWithPreferences( | |
| 151 const std::string& extension_id, | |
| 152 chrome::MediaGalleriesPreferences* preferences) { | |
| 151 WatchedExtensionsMap::iterator extension_id_iter = | 153 WatchedExtensionsMap::iterator extension_id_iter = |
| 152 watched_extensions_map_.find(extension_id); | 154 watched_extensions_map_.find(extension_id); |
| 153 if (extension_id_iter == watched_extensions_map_.end()) | 155 if (extension_id_iter == watched_extensions_map_.end()) |
| 154 return; | 156 return; |
| 155 const WatchedGalleriesMap& galleries = extension_id_iter->second; | 157 const WatchedGalleriesMap& galleries = extension_id_iter->second; |
| 156 for (WatchedGalleriesMap::const_iterator gallery_id_iter = galleries.begin(); | 158 for (WatchedGalleriesMap::const_iterator gallery_id_iter = galleries.begin(); |
| 157 gallery_id_iter != galleries.end(); ++gallery_id_iter) | 159 gallery_id_iter != galleries.end(); ++gallery_id_iter) |
| 158 RemoveGalleryWatch(extension_id, gallery_id_iter->second); | 160 RemoveGalleryWatch(extension_id, gallery_id_iter->second, preferences); |
| 159 watched_extensions_map_.erase(extension_id_iter); | 161 watched_extensions_map_.erase(extension_id_iter); |
| 160 WriteToStorage(extension_id); | 162 WriteToStorage(extension_id); |
| 161 } | 163 } |
| 162 | 164 |
| 163 void GalleryWatchStateTracker::OnGalleryWatchAdded( | 165 void GalleryWatchStateTracker::OnGalleryWatchAdded( |
| 164 const std::string& extension_id, | 166 const std::string& extension_id, |
| 165 chrome::MediaGalleryPrefId gallery_id) { | 167 chrome::MediaGalleryPrefId gallery_id) { |
| 166 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 168 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 167 bool update_storage = | 169 bool update_storage = |
| 168 AddWatchedGalleryIdInfoForExtension(extension_id, gallery_id); | 170 AddWatchedGalleryIdInfoForExtension(extension_id, gallery_id); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 239 WatchedGalleryIdsToValue(gallery_ids).PassAs<base::Value>()); | 241 WatchedGalleryIdsToValue(gallery_ids).PassAs<base::Value>()); |
| 240 } | 242 } |
| 241 | 243 |
| 242 void GalleryWatchStateTracker::ReadFromStorage(const std::string& extension_id, | 244 void GalleryWatchStateTracker::ReadFromStorage(const std::string& extension_id, |
| 243 scoped_ptr<base::Value> value) { | 245 scoped_ptr<base::Value> value) { |
| 244 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 246 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 245 base::ListValue* list = NULL; | 247 base::ListValue* list = NULL; |
| 246 if (!value.get() || !value->GetAsList(&list)) | 248 if (!value.get() || !value->GetAsList(&list)) |
| 247 return; | 249 return; |
| 248 chrome::MediaGalleryPrefIdSet gallery_ids = WatchedGalleryIdsFromValue(list); | 250 chrome::MediaGalleryPrefIdSet gallery_ids = WatchedGalleryIdsFromValue(list); |
| 251 if (!gallery_ids.empty()) { | |
| 252 g_browser_process->media_file_system_registry()->GetPreferencesAsync( | |
| 253 profile_, | |
| 254 base::Bind(&GalleryWatchStateTracker::ReadFromStorageWithPreferences, | |
| 255 AsWeakPtr(), extension_id, gallery_ids)); | |
| 256 } | |
| 257 } | |
| 258 | |
| 259 void GalleryWatchStateTracker::ReadFromStorageWithPreferences( | |
| 260 const std::string& extension_id, | |
| 261 chrome::MediaGalleryPrefIdSet gallery_ids, | |
| 262 chrome::MediaGalleriesPreferences* preferences) { | |
| 249 for (chrome::MediaGalleryPrefIdSet::const_iterator id_iter = | 263 for (chrome::MediaGalleryPrefIdSet::const_iterator id_iter = |
| 250 gallery_ids.begin(); | 264 gallery_ids.begin(); |
| 251 id_iter != gallery_ids.end(); ++id_iter) { | 265 id_iter != gallery_ids.end(); ++id_iter) { |
| 252 watched_extensions_map_[extension_id][*id_iter] = false; | 266 watched_extensions_map_[extension_id][*id_iter] = false; |
| 253 SetupGalleryWatch(extension_id, *id_iter); | 267 SetupGalleryWatch(extension_id, *id_iter, preferences); |
| 254 } | 268 } |
| 255 } | 269 } |
| 256 | 270 |
| 257 void GalleryWatchStateTracker::SetupGalleryWatch( | 271 void GalleryWatchStateTracker::SetupGalleryWatch( |
| 258 const std::string& extension_id, | 272 const std::string& extension_id, |
| 259 chrome::MediaGalleryPrefId gallery_id) { | 273 chrome::MediaGalleryPrefId gallery_id, |
| 274 chrome::MediaGalleriesPreferences* preferences) { | |
| 260 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 275 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 261 const Extension* extension = GetExtensionById(profile_, extension_id); | 276 const Extension* extension = GetExtensionById(profile_, extension_id); |
| 262 DCHECK(extension); | 277 DCHECK(extension); |
| 263 base::FilePath gallery_file_path( | 278 base::FilePath gallery_file_path(preferences->LookUpGalleryPathForExtension( |
| 264 GetMediaGalleryPreferences(profile_)->LookUpGalleryPathForExtension( | 279 gallery_id, extension, false)); |
| 265 gallery_id, extension, false)); | |
| 266 if (gallery_file_path.empty()) | 280 if (gallery_file_path.empty()) |
| 267 return; | 281 return; |
| 268 MediaGalleriesPrivateEventRouter* router = | 282 MediaGalleriesPrivateEventRouter* router = |
| 269 MediaGalleriesPrivateAPI::Get(profile_)->GetEventRouter(); | 283 MediaGalleriesPrivateAPI::Get(profile_)->GetEventRouter(); |
| 270 DCHECK(router); | 284 DCHECK(router); |
| 271 content::BrowserThread::PostTaskAndReplyWithResult( | 285 content::BrowserThread::PostTaskAndReplyWithResult( |
| 272 content::BrowserThread::FILE, | 286 content::BrowserThread::FILE, |
| 273 FROM_HERE, | 287 FROM_HERE, |
| 274 base::Bind(&GalleryWatchManager::SetupGalleryWatch, | 288 base::Bind(&GalleryWatchManager::SetupGalleryWatch, |
| 275 profile_, | 289 profile_, |
| 276 gallery_id, | 290 gallery_id, |
| 277 gallery_file_path, | 291 gallery_file_path, |
| 278 extension_id, | 292 extension_id, |
| 279 router->AsWeakPtr()), | 293 router->AsWeakPtr()), |
| 280 base::Bind(&GalleryWatchStateTracker::HandleSetupGalleryWatchResponse, | 294 base::Bind(&GalleryWatchStateTracker::HandleSetupGalleryWatchResponse, |
| 281 AsWeakPtr(), | 295 AsWeakPtr(), |
| 282 extension_id, | 296 extension_id, |
| 283 gallery_id)); | 297 gallery_id)); |
| 284 } | 298 } |
| 285 | 299 |
| 286 void GalleryWatchStateTracker::RemoveGalleryWatch( | 300 void GalleryWatchStateTracker::RemoveGalleryWatch( |
| 287 const std::string& extension_id, | 301 const std::string& extension_id, |
| 288 chrome::MediaGalleryPrefId gallery_id) { | 302 chrome::MediaGalleryPrefId gallery_id, |
| 303 chrome::MediaGalleriesPreferences* preferences) { | |
| 289 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 304 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 290 const Extension* extension = GetExtensionById(profile_, extension_id); | 305 const Extension* extension = GetExtensionById(profile_, extension_id); |
| 291 DCHECK(extension); | 306 DCHECK(extension); |
| 292 base::FilePath gallery_file_path( | 307 base::FilePath gallery_file_path(preferences->LookUpGalleryPathForExtension( |
| 293 GetMediaGalleryPreferences(profile_)->LookUpGalleryPathForExtension( | 308 gallery_id, extension, true)); |
| 294 gallery_id, extension, true)); | |
| 295 if (gallery_file_path.empty()) | 309 if (gallery_file_path.empty()) |
| 296 return; | 310 return; |
| 297 content::BrowserThread::PostTask( | 311 content::BrowserThread::PostTask( |
| 298 content::BrowserThread::FILE, FROM_HERE, | 312 content::BrowserThread::FILE, FROM_HERE, |
| 299 base::Bind(&GalleryWatchManager::RemoveGalleryWatch, | 313 base::Bind(&GalleryWatchManager::RemoveGalleryWatch, |
| 300 profile_, | 314 profile_, |
| 301 gallery_file_path, | 315 gallery_file_path, |
| 302 extension_id)); | 316 extension_id)); |
| 303 watched_extensions_map_[extension_id][gallery_id] = false; | 317 watched_extensions_map_[extension_id][gallery_id] = false; |
| 304 } | 318 } |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 328 const std::string& extension_id, | 342 const std::string& extension_id, |
| 329 chrome::MediaGalleryPrefId gallery_id) { | 343 chrome::MediaGalleryPrefId gallery_id) { |
| 330 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 344 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 331 if (HasGalleryWatchInfo(extension_id, gallery_id, true)) | 345 if (HasGalleryWatchInfo(extension_id, gallery_id, true)) |
| 332 return false; | 346 return false; |
| 333 watched_extensions_map_[extension_id][gallery_id] = true; | 347 watched_extensions_map_[extension_id][gallery_id] = true; |
| 334 return true; | 348 return true; |
| 335 } | 349 } |
| 336 | 350 |
| 337 } // namespace extensions | 351 } // namespace extensions |
| OLD | NEW |