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

Side by Side Diff: chrome/browser/media_gallery/media_galleries_preferences.cc

Issue 12114019: Media Galleries: Add MediaGalleriesPreferences::GalleryChangeObserver class. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 #include "chrome/browser/media_gallery/media_galleries_preferences.h" 5 #include "chrome/browser/media_gallery/media_galleries_preferences.h"
6 6
7 #include "base/path_service.h" 7 #include "base/path_service.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "base/string_number_conversions.h" 9 #include "base/string_number_conversions.h"
10 #include "base/values.h" 10 #include "base/values.h"
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 : pref_id(kInvalidMediaGalleryPrefId), 129 : pref_id(kInvalidMediaGalleryPrefId),
130 type(kInvalidType) { 130 type(kInvalidType) {
131 } 131 }
132 MediaGalleryPrefInfo::~MediaGalleryPrefInfo() {} 132 MediaGalleryPrefInfo::~MediaGalleryPrefInfo() {}
133 133
134 FilePath MediaGalleryPrefInfo::AbsolutePath() const { 134 FilePath MediaGalleryPrefInfo::AbsolutePath() const {
135 FilePath base_path = MediaStorageUtil::FindDevicePathById(device_id); 135 FilePath base_path = MediaStorageUtil::FindDevicePathById(device_id);
136 return base_path.Append(path); 136 return base_path.Append(path);
137 } 137 }
138 138
139 MediaGalleriesPreferences::GalleryChangeObserver::~GalleryChangeObserver() {}
140
139 MediaGalleriesPreferences::MediaGalleriesPreferences(Profile* profile) 141 MediaGalleriesPreferences::MediaGalleriesPreferences(Profile* profile)
140 : profile_(profile) { 142 : profile_(profile) {
141 AddDefaultGalleriesIfFreshProfile(); 143 AddDefaultGalleriesIfFreshProfile();
142 InitFromPrefs(); 144 InitFromPrefs(false /*no notification*/);
143 } 145 }
144 146
145 MediaGalleriesPreferences::~MediaGalleriesPreferences() {} 147 MediaGalleriesPreferences::~MediaGalleriesPreferences() {}
146 148
147 void MediaGalleriesPreferences::AddDefaultGalleriesIfFreshProfile() { 149 void MediaGalleriesPreferences::AddDefaultGalleriesIfFreshProfile() {
148 // Only add defaults the first time. 150 // Only add defaults the first time.
149 if (APIHasBeenUsed(profile_)) 151 if (APIHasBeenUsed(profile_))
150 return; 152 return;
151 153
152 // Fresh profile case. 154 // Fresh profile case.
(...skipping 11 matching lines...) Expand all
164 std::string device_id; 166 std::string device_id;
165 string16 display_name; 167 string16 display_name;
166 FilePath relative_path; 168 FilePath relative_path;
167 if (MediaStorageUtil::GetDeviceInfoFromPath(path, &device_id, &display_name, 169 if (MediaStorageUtil::GetDeviceInfoFromPath(path, &device_id, &display_name,
168 &relative_path)) { 170 &relative_path)) {
169 AddGallery(device_id, display_name, relative_path, false /*user added*/); 171 AddGallery(device_id, display_name, relative_path, false /*user added*/);
170 } 172 }
171 } 173 }
172 } 174 }
173 175
174 void MediaGalleriesPreferences::InitFromPrefs() { 176 void MediaGalleriesPreferences::InitFromPrefs(bool notify_observers) {
175 known_galleries_.clear(); 177 known_galleries_.clear();
176 device_map_.clear(); 178 device_map_.clear();
177 179
178 PrefService* prefs = profile_->GetPrefs(); 180 PrefService* prefs = profile_->GetPrefs();
179 const ListValue* list = prefs->GetList( 181 const ListValue* list = prefs->GetList(
180 prefs::kMediaGalleriesRememberedGalleries); 182 prefs::kMediaGalleriesRememberedGalleries);
181 if (!list) 183 if (list) {
182 return; 184 for (ListValue::const_iterator it = list->begin();
185 it != list->end(); ++it) {
186 const DictionaryValue* dict = NULL;
187 if (!(*it)->GetAsDictionary(&dict))
188 continue;
183 189
184 for (ListValue::const_iterator it = list->begin(); it != list->end(); ++it) { 190 MediaGalleryPrefInfo gallery_info;
185 const DictionaryValue* dict = NULL; 191 if (!PopulateGalleryPrefInfoFromDictionary(*dict, &gallery_info))
186 if (!(*it)->GetAsDictionary(&dict)) 192 continue;
187 continue;
188 193
189 MediaGalleryPrefInfo gallery_info; 194 known_galleries_[gallery_info.pref_id] = gallery_info;
190 if (!PopulateGalleryPrefInfoFromDictionary(*dict, &gallery_info)) 195 device_map_[gallery_info.device_id].insert(gallery_info.pref_id);
191 continue; 196 }
197 }
198 if (notify_observers)
199 NotifyChangeObservers();
200 }
192 201
193 known_galleries_[gallery_info.pref_id] = gallery_info; 202 void MediaGalleriesPreferences::NotifyChangeObservers() {
194 device_map_[gallery_info.device_id].insert(gallery_info.pref_id); 203 FOR_EACH_OBSERVER(GalleryChangeObserver,
195 } 204 gallery_change_observers_,
205 OnGalleryChanged(this));
206 }
207
208 void MediaGalleriesPreferences::AddGalleryChangeObserver(
209 GalleryChangeObserver* observer) {
210 gallery_change_observers_.AddObserver(observer);
211 }
212
213 void MediaGalleriesPreferences::RemoveGalleryChangeObserver(
214 GalleryChangeObserver* observer) {
215 gallery_change_observers_.RemoveObserver(observer);
196 } 216 }
197 217
198 bool MediaGalleriesPreferences::LookUpGalleryByPath( 218 bool MediaGalleriesPreferences::LookUpGalleryByPath(
199 const FilePath& path, 219 const FilePath& path,
200 MediaGalleryPrefInfo* gallery_info) const { 220 MediaGalleryPrefInfo* gallery_info) const {
201 std::string device_id; 221 std::string device_id;
202 string16 device_name; 222 string16 device_name;
203 FilePath relative_path; 223 FilePath relative_path;
204 if (!MediaStorageUtil::GetDeviceInfoFromPath(path, &device_id, &device_name, 224 if (!MediaStorageUtil::GetDeviceInfoFromPath(path, &device_id, &device_name,
205 &relative_path)) { 225 &relative_path)) {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 MediaGalleryPrefId iter_id; 294 MediaGalleryPrefId iter_id;
275 if ((*list_iter)->GetAsDictionary(&dict) && 295 if ((*list_iter)->GetAsDictionary(&dict) &&
276 GetPrefId(*dict, &iter_id) && 296 GetPrefId(*dict, &iter_id) &&
277 *it == iter_id) { 297 *it == iter_id) {
278 if (update_gallery_type) { 298 if (update_gallery_type) {
279 dict->SetString(kMediaGalleriesTypeKey, 299 dict->SetString(kMediaGalleriesTypeKey,
280 kMediaGalleriesTypeAutoDetectedValue); 300 kMediaGalleriesTypeAutoDetectedValue);
281 } 301 }
282 if (update_gallery_name) 302 if (update_gallery_name)
283 dict->SetString(kMediaGalleriesDisplayNameKey, display_name); 303 dict->SetString(kMediaGalleriesDisplayNameKey, display_name);
284 InitFromPrefs(); 304 InitFromPrefs(true /* notify observers */);
285 break; 305 break;
286 } 306 }
287 } 307 }
288 } 308 }
289 return *it; 309 return *it;
290 } 310 }
291 311
292 PrefService* prefs = profile_->GetPrefs(); 312 PrefService* prefs = profile_->GetPrefs();
293 313
294 MediaGalleryPrefInfo gallery_info; 314 MediaGalleryPrefInfo gallery_info;
295 gallery_info.pref_id = prefs->GetUint64(prefs::kMediaGalleriesUniqueId); 315 gallery_info.pref_id = prefs->GetUint64(prefs::kMediaGalleriesUniqueId);
296 prefs->SetUint64(prefs::kMediaGalleriesUniqueId, gallery_info.pref_id + 1); 316 prefs->SetUint64(prefs::kMediaGalleriesUniqueId, gallery_info.pref_id + 1);
297 gallery_info.display_name = display_name; 317 gallery_info.display_name = display_name;
298 gallery_info.device_id = device_id; 318 gallery_info.device_id = device_id;
299 gallery_info.path = normalized_relative_path; 319 gallery_info.path = normalized_relative_path;
300 gallery_info.type = MediaGalleryPrefInfo::kAutoDetected; 320 gallery_info.type = MediaGalleryPrefInfo::kAutoDetected;
301 if (user_added) 321 if (user_added)
302 gallery_info.type = MediaGalleryPrefInfo::kUserAdded; 322 gallery_info.type = MediaGalleryPrefInfo::kUserAdded;
303 323
304 ListPrefUpdate update(prefs, prefs::kMediaGalleriesRememberedGalleries); 324 ListPrefUpdate update(prefs, prefs::kMediaGalleriesRememberedGalleries);
305 ListValue* list = update.Get(); 325 ListValue* list = update.Get();
306 list->Append(CreateGalleryPrefInfoDictionary(gallery_info)); 326 list->Append(CreateGalleryPrefInfoDictionary(gallery_info));
307 InitFromPrefs(); 327 InitFromPrefs(true /* notify observers */);
308 328
309 return gallery_info.pref_id; 329 return gallery_info.pref_id;
310 } 330 }
311 331
312 MediaGalleryPrefId MediaGalleriesPreferences::AddGalleryByPath( 332 MediaGalleryPrefId MediaGalleriesPreferences::AddGalleryByPath(
313 const FilePath& path) { 333 const FilePath& path) {
314 MediaGalleryPrefInfo gallery_info; 334 MediaGalleryPrefInfo gallery_info;
315 if (LookUpGalleryByPath(path, &gallery_info) && 335 if (LookUpGalleryByPath(path, &gallery_info) &&
316 gallery_info.type != MediaGalleryPrefInfo::kBlackListed) { 336 gallery_info.type != MediaGalleryPrefInfo::kBlackListed) {
317 return gallery_info.pref_id; 337 return gallery_info.pref_id;
(...skipping 17 matching lines...) Expand all
335 pref_id == iter_id) { 355 pref_id == iter_id) {
336 GetExtensionPrefs()->RemoveMediaGalleryPermissions(pref_id); 356 GetExtensionPrefs()->RemoveMediaGalleryPermissions(pref_id);
337 MediaGalleryPrefInfo::Type type; 357 MediaGalleryPrefInfo::Type type;
338 if (GetType(*dict, &type) && 358 if (GetType(*dict, &type) &&
339 type == MediaGalleryPrefInfo::kAutoDetected) { 359 type == MediaGalleryPrefInfo::kAutoDetected) {
340 dict->SetString(kMediaGalleriesTypeKey, 360 dict->SetString(kMediaGalleriesTypeKey,
341 kMediaGalleriesTypeBlackListedValue); 361 kMediaGalleriesTypeBlackListedValue);
342 } else { 362 } else {
343 list->Erase(iter, NULL); 363 list->Erase(iter, NULL);
344 } 364 }
345 InitFromPrefs(); 365 InitFromPrefs(true /* notify observers */);
346 return; 366 return;
347 } 367 }
348 } 368 }
349 } 369 }
350 370
351 MediaGalleryPrefIdSet MediaGalleriesPreferences::GalleriesForExtension( 371 MediaGalleryPrefIdSet MediaGalleriesPreferences::GalleriesForExtension(
352 const extensions::Extension& extension) const { 372 const extensions::Extension& extension) const {
353 MediaGalleryPrefIdSet result; 373 MediaGalleryPrefIdSet result;
354 374
355 if (HasAutoDetectedGalleryPermission(extension)) { 375 if (HasAutoDetectedGalleryPermission(extension)) {
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 } 449 }
430 450
431 extensions::ExtensionPrefs* 451 extensions::ExtensionPrefs*
432 MediaGalleriesPreferences::GetExtensionPrefs() const { 452 MediaGalleriesPreferences::GetExtensionPrefs() const {
433 ExtensionService* extension_service = 453 ExtensionService* extension_service =
434 extensions::ExtensionSystem::Get(profile_)->extension_service(); 454 extensions::ExtensionSystem::Get(profile_)->extension_service();
435 return extension_service->extension_prefs(); 455 return extension_service->extension_prefs();
436 } 456 }
437 457
438 } // namespace chrome 458 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698