Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6016)

Unified Diff: chrome/browser/media_gallery/media_galleries_preferences.cc

Issue 10836199: Clean up media gallery preferences. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix unit tets x2 Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/media_gallery/media_galleries_preferences.cc
diff --git a/chrome/browser/media_gallery/media_galleries_preferences.cc b/chrome/browser/media_gallery/media_galleries_preferences.cc
index 3728dd7e3f2d09d9c339d9d6bd929575228732c5..e8d88f0216442d50d6e4084bc6421caf667e7018 100644
--- a/chrome/browser/media_gallery/media_galleries_preferences.cc
+++ b/chrome/browser/media_gallery/media_galleries_preferences.cc
@@ -116,23 +116,6 @@ DictionaryValue* CreateGalleryPrefInfoDictionary(
return dict;
}
-bool FindPrefIdFromDeviceId(const MediaGalleriesPrefInfoMap& known_galleries,
- const std::string& device_id,
- MediaGalleryPrefId* pref_id) {
- // TODO(vandebo) Handle multiple galleries that use different paths.
- // TODO(vandebo) Should we keep a second map device_id->pref_id?
- for (MediaGalleriesPrefInfoMap::const_iterator it = known_galleries.begin();
- it != known_galleries.end();
- ++it) {
- if (it->second.device_id == device_id) {
- if (pref_id)
- *pref_id = it->second.pref_id;
- return true;
- }
- }
- return false;
-}
-
FilePath MakePathRelative(FilePath path) {
if (!path.IsAbsolute())
return path;
@@ -182,6 +165,7 @@ MediaGalleriesPreferences::~MediaGalleriesPreferences() {}
void MediaGalleriesPreferences::InitFromPrefs() {
known_galleries_.clear();
+ device_map_.clear();
PrefService* prefs = profile_->GetPrefs();
const ListValue* list = prefs->GetList(
@@ -197,6 +181,7 @@ void MediaGalleriesPreferences::InitFromPrefs() {
MediaGalleryPrefInfo gallery_info;
if (PopulateGalleryPrefInfoFromDictionary(*dict, &gallery_info))
known_galleries_[gallery_info.pref_id] = gallery_info;
+ device_map_[gallery_info.device_id].insert(gallery_info.pref_id);
Lei Zhang 2012/09/15 01:17:17 I think you are missing brackets after the if stat
}
}
@@ -205,47 +190,70 @@ bool MediaGalleriesPreferences::LookUpGalleryByPath(
MediaGalleryPrefInfo* gallery_info) const {
std::string device_id =
MediaFileSystemRegistry::GetInstance()->GetDeviceIdFromPath(path);
- MediaGalleryPrefId pref_id;
- if (!FindPrefIdFromDeviceId(known_galleries_, device_id, &pref_id)) {
- if (gallery_info) {
- gallery_info->pref_id = kInvalidMediaGalleryPrefId;
- gallery_info->display_name = ComputeDisplayName(path);
- gallery_info->device_id = device_id;
- gallery_info->path = MakePathRelative(path);
- gallery_info->type = MediaGalleryPrefInfo::kUserAdded;
- }
- return false;
+ FilePath relative_path = MakePathRelative(path);
+ MediaGalleryPrefIdSet galleries_on_device =
+ LookUpGalleriesByDeviceId(device_id);
+ for (MediaGalleryPrefIdSet::const_iterator it = galleries_on_device.begin();
+ it != galleries_on_device.end();
+ ++it) {
+ const MediaGalleryPrefInfo& gallery = known_galleries_.find(*it)->second;
+ if (gallery.path != relative_path)
+ continue;
+
+ if (gallery_info)
+ *gallery_info = gallery;
+ return true;
}
if (gallery_info) {
- MediaGalleriesPrefInfoMap::const_iterator it =
- known_galleries_.find(pref_id);
- DCHECK(it != known_galleries_.end());
- *gallery_info = it->second;
+ gallery_info->pref_id = kInvalidMediaGalleryPrefId;
+ gallery_info->display_name = ComputeDisplayName(path);
+ gallery_info->device_id = device_id;
+ gallery_info->path = relative_path;
+ gallery_info->type = MediaGalleryPrefInfo::kUserAdded;
}
- return true;
+ return false;
+}
+
+MediaGalleryPrefIdSet MediaGalleriesPreferences::LookUpGalleriesByDeviceId(
+ const std::string& device_id) const {
+ DeviceIdPrefIdsMap::const_iterator found = device_map_.find(device_id);
+ if (found == device_map_.end()) {
+ MediaGalleryPrefIdSet result;
+ return result;
+ }
+
+ return found->second;
}
+
MediaGalleryPrefId MediaGalleriesPreferences::AddGallery(
const std::string& device_id, const string16& display_name,
const FilePath& path, bool user_added) {
DCHECK(display_name.length() > 0);
- MediaGalleryPrefId existing_id;
- if (FindPrefIdFromDeviceId(known_galleries_, device_id, &existing_id)) {
- const MediaGalleryPrefInfo& existing = known_galleries_[existing_id];
+ FilePath relative_path = MakePathRelative(path);
+ MediaGalleryPrefIdSet galleries_on_device =
+ LookUpGalleriesByDeviceId(device_id);
+ for (MediaGalleryPrefIdSet::const_iterator it = galleries_on_device.begin();
+ it != galleries_on_device.end();
+ ++it) {
+ if (known_galleries_[*it].path != relative_path)
+ continue;
+
+ const MediaGalleryPrefInfo& existing = known_galleries_[*it];
if (existing.type == MediaGalleryPrefInfo::kBlackListed) {
PrefService* prefs = profile_->GetPrefs();
ListPrefUpdate update(prefs, prefs::kMediaGalleriesRememberedGalleries);
ListValue* list = update.Get();
- for (ListValue::const_iterator it = list->begin();
- it != list->end();
- ++it) {
+ for (ListValue::const_iterator list_iter = list->begin();
+ list_iter != list->end();
+ ++list_iter) {
DictionaryValue* dict;
MediaGalleryPrefId iter_id;
- if ((*it)->GetAsDictionary(&dict) &&
+ if ((*list_iter)->GetAsDictionary(&dict) &&
GetPrefId(*dict, &iter_id) &&
- existing_id == iter_id) {
+ *it == iter_id) {
dict->SetString(kMediaGalleriesTypeKey,
kMediaGalleriesTypeAutoDetectedValue);
InitFromPrefs();
@@ -253,10 +261,9 @@ MediaGalleryPrefId MediaGalleriesPreferences::AddGallery(
}
}
}
- return existing_id;
+ return *it;
}
- FilePath relative_path = MakePathRelative(path);
PrefService* prefs = profile_->GetPrefs();
MediaGalleryPrefInfo gallery_info;
@@ -290,6 +297,9 @@ void MediaGalleriesPreferences::ForgetGalleryById(MediaGalleryPrefId pref_id) {
ListPrefUpdate update(prefs, prefs::kMediaGalleriesRememberedGalleries);
ListValue* list = update.Get();
+ if (known_galleries_.find(pref_id) == known_galleries_.end())
+ return;
+
for (ListValue::iterator iter = list->begin(); iter != list->end(); ++iter) {
DictionaryValue* dict;
MediaGalleryPrefId iter_id;
@@ -310,10 +320,9 @@ void MediaGalleriesPreferences::ForgetGalleryById(MediaGalleryPrefId pref_id) {
}
}
-std::set<MediaGalleryPrefId>
-MediaGalleriesPreferences::GalleriesForExtension(
+MediaGalleryPrefIdSet MediaGalleriesPreferences::GalleriesForExtension(
const extensions::Extension& extension) const {
- std::set<MediaGalleryPrefId> result;
+ MediaGalleryPrefIdSet result;
if (extension.HasAPIPermission(
extensions::APIPermission::kMediaGalleriesAllGalleries)) {
for (MediaGalleriesPrefInfoMap::const_iterator it =
@@ -348,12 +357,16 @@ void MediaGalleriesPreferences::SetGalleryPermissionForExtension(
const extensions::Extension& extension,
MediaGalleryPrefId pref_id,
bool has_permission) {
+ // The gallery may not exist anymore if the user opened a second config
+ // surface concurrently and removed it. Drop the permission update if so.
+ MediaGalleriesPrefInfoMap::iterator gallery_info =
+ known_galleries_.find(pref_id);
+ if (gallery_info == known_galleries_.end())
+ return;
+
bool all_permission = extension.HasAPIPermission(
extensions::APIPermission::kMediaGalleriesAllGalleries);
if (has_permission && all_permission) {
- MediaGalleriesPrefInfoMap::iterator gallery_info =
- known_galleries_.find(pref_id);
- DCHECK(gallery_info != known_galleries_.end());
if (gallery_info->second.type == MediaGalleryPrefInfo::kAutoDetected) {
GetExtensionPrefs()->UnsetMediaGalleryPermission(extension.id(), pref_id);
return;

Powered by Google App Engine
This is Rietveld 408576698