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

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

Issue 24298002: Media Galleries API: Use Scheduler in MediaGalleriesPreferences initialization. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 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_galleries/media_galleries_preferences.h" 5 #include "chrome/browser/media_galleries/media_galleries_preferences.h"
6 6
7 #include "base/i18n/time_formatting.h" 7 #include "base/i18n/time_formatting.h"
8 #include "base/path_service.h" 8 #include "base/path_service.h"
9 #include "base/prefs/pref_service.h" 9 #include "base/prefs/pref_service.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
11 #include "base/strings/string16.h" 11 #include "base/strings/string16.h"
12 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
13 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
14 #include "base/values.h" 14 #include "base/values.h"
15 #include "chrome/browser/browser_process.h" 15 #include "chrome/browser/browser_process.h"
16 #include "chrome/browser/extensions/api/media_galleries_private/media_galleries_ private_api.h" 16 #include "chrome/browser/extensions/api/media_galleries_private/media_galleries_ private_api.h"
17 #include "chrome/browser/extensions/extension_service.h" 17 #include "chrome/browser/extensions/extension_service.h"
18 #include "chrome/browser/extensions/extension_system.h" 18 #include "chrome/browser/extensions/extension_system.h"
19 #include "chrome/browser/media_galleries/fileapi/itunes_finder.h" 19 #include "chrome/browser/media_galleries/fileapi/itunes_finder.h"
20 #include "chrome/browser/media_galleries/fileapi/picasa_finder.h" 20 #include "chrome/browser/media_galleries/fileapi/picasa_finder.h"
21 #include "chrome/browser/media_galleries/media_file_system_registry.h" 21 #include "chrome/browser/media_galleries/media_file_system_registry.h"
22 #include "chrome/browser/prefs/scoped_user_pref_update.h" 22 #include "chrome/browser/prefs/scoped_user_pref_update.h"
23 #include "chrome/browser/profiles/profile.h" 23 #include "chrome/browser/profiles/profile.h"
24 #include "chrome/browser/storage_monitor/media_storage_util.h" 24 #include "chrome/browser/storage_monitor/media_storage_util.h"
25 #include "chrome/browser/storage_monitor/schedule.h"
25 #include "chrome/browser/storage_monitor/storage_monitor.h" 26 #include "chrome/browser/storage_monitor/storage_monitor.h"
26 #include "chrome/common/chrome_paths.h" 27 #include "chrome/common/chrome_paths.h"
27 #include "chrome/common/extensions/extension.h" 28 #include "chrome/common/extensions/extension.h"
28 #include "chrome/common/extensions/permissions/api_permission.h" 29 #include "chrome/common/extensions/permissions/api_permission.h"
29 #include "chrome/common/extensions/permissions/media_galleries_permission.h" 30 #include "chrome/common/extensions/permissions/media_galleries_permission.h"
30 #include "chrome/common/extensions/permissions/permissions_data.h" 31 #include "chrome/common/extensions/permissions/permissions_data.h"
31 #include "chrome/common/pref_names.h" 32 #include "chrome/common/pref_names.h"
32 #include "components/user_prefs/pref_registry_syncable.h" 33 #include "components/user_prefs/pref_registry_syncable.h"
33 #include "grit/generated_resources.h" 34 #include "grit/generated_resources.h"
34 #include "ui/base/l10n/l10n_util.h" 35 #include "ui/base/l10n/l10n_util.h"
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 return !StorageInfo::IsRemovableDevice(device_id) || 328 return !StorageInfo::IsRemovableDevice(device_id) ||
328 MediaStorageUtil::IsRemovableStorageAttached(device_id); 329 MediaStorageUtil::IsRemovableStorageAttached(device_id);
329 } 330 }
330 331
331 MediaGalleriesPreferences::GalleryChangeObserver::~GalleryChangeObserver() {} 332 MediaGalleriesPreferences::GalleryChangeObserver::~GalleryChangeObserver() {}
332 333
333 MediaGalleriesPreferences::MediaGalleriesPreferences(Profile* profile) 334 MediaGalleriesPreferences::MediaGalleriesPreferences(Profile* profile)
334 : weak_factory_(this), 335 : weak_factory_(this),
335 initializing_(false), 336 initializing_(false),
336 initialized_(false), 337 initialized_(false),
337 pre_initialization_callbacks_waiting_(0),
338 profile_(profile), 338 profile_(profile),
339 extension_prefs_for_testing_(NULL) {} 339 extension_prefs_for_testing_(NULL) {}
340 340
341 MediaGalleriesPreferences::~MediaGalleriesPreferences() { 341 MediaGalleriesPreferences::~MediaGalleriesPreferences() {
342 if (StorageMonitor::GetInstance()) 342 if (StorageMonitor::GetInstance())
343 StorageMonitor::GetInstance()->RemoveObserver(this); 343 StorageMonitor::GetInstance()->RemoveObserver(this);
344 } 344 }
345 345
346 void MediaGalleriesPreferences::EnsureInitialized(base::Closure callback) { 346 void MediaGalleriesPreferences::EnsureInitialized(base::Closure callback) {
347 DCHECK(thread_checker_.CalledOnValidThread()); 347 DCHECK(thread_checker_.CalledOnValidThread());
348 348
349 if (initialized_) { 349 if (initialized_) {
350 if (!callback.is_null()) 350 if (!callback.is_null())
351 callback.Run(); 351 callback.Run();
352 return; 352 return;
353 } 353 }
354 354
355 if (!callback.is_null()) { 355 if (!callback.is_null()) {
356 on_initialize_callbacks_.push_back(callback); 356 on_initialize_callbacks_.push_back(callback);
357 } 357 }
358 358
359 if (initializing_) 359 if (initializing_)
360 return; 360 return;
361 361
362 initializing_ = true; 362 initializing_ = true;
363 363
364 AddDefaultGalleriesIfFreshProfile(); 364 AddDefaultGalleriesIfFreshProfile();
365 365
366 pre_initialization_callbacks_waiting_ = 2; 366 chrome::ScheduleBuilder b("MediaGalleriesPreferencesInit", FROM_HERE);
367 367
368 // Ensure StorageMonitor is initialized. 368 // Ensure StorageMonitor is initialized.
369 StorageMonitor::GetInstance()->EnsureInitialized( 369 b.RunAsync(base::Bind(&StorageMonitor::EnsureInitialized,
370 base::Bind(&MediaGalleriesPreferences::OnInitializationCallbackReturned, 370 base::Unretained(StorageMonitor::GetInstance()),
371 weak_factory_.GetWeakPtr())); 371 b.ContinueClosure()));
372 372 b.RunAsync(base::Bind(&itunes::ITunesFinder::FindITunesLibrary,
373 // Look for optional default galleries every time. 373 base::Bind(&MediaGalleriesPreferences::OnFinderDeviceID,
374 itunes::ITunesFinder::FindITunesLibrary( 374 weak_factory_.GetWeakPtr(),
375 base::Bind(&MediaGalleriesPreferences::OnFinderDeviceID, 375 b.ContinueClosure())));
376 weak_factory_.GetWeakPtr()));
377
378 // TODO(tommycli): Turn on when Picasa code is ready. 376 // TODO(tommycli): Turn on when Picasa code is ready.
379 #if 0 377 #if 0
380 picasa::PicasaFinder::FindPicasaDatabaseOnUIThread( 378 b.RunAsync(base::Bind(&picasa::PicasaFinder::FindPicasaDatabaseOnUIThread,
381 base::Bind(&MediaGalleriesPreferences::OnFinderDeviceID, 379 base::Bind(&MediaGalleriesPreferences::OnFinderDeviceID,
382 weak_factory_.GetWeakPtr())); 380 weak_factory_.GetWeakPtr(),
381 b.ContinueClosure())));
383 #endif 382 #endif
383
384 b.NextStage();
385 b.Run(base::Bind(&MediaGalleriesPreferences::FinishInitialization,
386 weak_factory_.GetWeakPtr()));
387 b.Build()->Start();
Greg Billock 2013/09/19 22:34:08 This looks nice. Agreed it makes it easier to foll
tommycli 2013/09/19 22:37:05 Yeah! That'd be pimp. I'm also a bit annoyed that
384 } 388 }
385 389
386 bool MediaGalleriesPreferences::IsInitialized() const { return initialized_; } 390 bool MediaGalleriesPreferences::IsInitialized() const { return initialized_; }
387 391
388 Profile* MediaGalleriesPreferences::profile() { return profile_; } 392 Profile* MediaGalleriesPreferences::profile() { return profile_; }
389 393
390 void MediaGalleriesPreferences::OnInitializationCallbackReturned() {
391 DCHECK(!IsInitialized());
392 DCHECK(pre_initialization_callbacks_waiting_ > 0);
393 if (--pre_initialization_callbacks_waiting_ == 0)
394 FinishInitialization();
395 }
396
397 void MediaGalleriesPreferences::FinishInitialization() { 394 void MediaGalleriesPreferences::FinishInitialization() {
398 DCHECK(!IsInitialized()); 395 DCHECK(!IsInitialized());
399 396
400 initialized_ = true; 397 initialized_ = true;
401 398
402 StorageMonitor* monitor = StorageMonitor::GetInstance(); 399 StorageMonitor* monitor = StorageMonitor::GetInstance();
403 DCHECK(monitor->IsInitialized()); 400 DCHECK(monitor->IsInitialized());
404 401
405 std::vector<StorageInfo> existing_devices = 402 std::vector<StorageInfo> existing_devices =
406 monitor->GetAllAvailableStorages(); 403 monitor->GetAllAvailableStorages();
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 FOR_EACH_OBSERVER(GalleryChangeObserver, 489 FOR_EACH_OBSERVER(GalleryChangeObserver,
493 gallery_change_observers_, 490 gallery_change_observers_,
494 OnGalleryInfoUpdated(this, pref_id)); 491 OnGalleryInfoUpdated(this, pref_id));
495 } 492 }
496 return true; 493 return true;
497 } 494 }
498 } 495 }
499 return false; 496 return false;
500 } 497 }
501 498
502 void MediaGalleriesPreferences::OnFinderDeviceID(const std::string& device_id) { 499 void MediaGalleriesPreferences::OnFinderDeviceID(base::Closure callback,
500 const std::string& device_id) {
503 if (!device_id.empty() && !UpdateDeviceIDForSingletonType(device_id)) { 501 if (!device_id.empty() && !UpdateDeviceIDForSingletonType(device_id)) {
504 std::string gallery_name; 502 std::string gallery_name;
505 if (StorageInfo::IsITunesDevice(device_id)) 503 if (StorageInfo::IsITunesDevice(device_id))
506 gallery_name = kITunesGalleryName; 504 gallery_name = kITunesGalleryName;
507 else if (StorageInfo::IsPicasaDevice(device_id)) 505 else if (StorageInfo::IsPicasaDevice(device_id))
508 gallery_name = kPicasaGalleryName; 506 gallery_name = kPicasaGalleryName;
509 else 507 else
510 NOTREACHED(); 508 NOTREACHED();
511 509
512 AddGalleryInternal(device_id, ASCIIToUTF16(gallery_name), 510 AddGalleryInternal(device_id, ASCIIToUTF16(gallery_name),
513 base::FilePath(), false /*not user added*/, 511 base::FilePath(), false /*not user added*/,
514 string16(), string16(), string16(), 0, 512 string16(), string16(), string16(), 0,
515 base::Time(), false, 2); 513 base::Time(), false, 2);
516 } 514 }
517 515
518 if (!IsInitialized()) 516 if (!callback.is_null())
Greg Billock 2013/09/19 22:34:08 Although we may not use it, this is a nice testabi
tommycli 2013/09/19 22:37:05 Yeah I could see exploiting that in a test. Making
519 OnInitializationCallbackReturned(); 517 callback.Run();
520 } 518 }
521 519
522 void MediaGalleriesPreferences::InitFromPrefs() { 520 void MediaGalleriesPreferences::InitFromPrefs() {
523 known_galleries_.clear(); 521 known_galleries_.clear();
524 device_map_.clear(); 522 device_map_.clear();
525 523
526 PrefService* prefs = profile_->GetPrefs(); 524 PrefService* prefs = profile_->GetPrefs();
527 const ListValue* list = prefs->GetList( 525 const ListValue* list = prefs->GetList(
528 prefs::kMediaGalleriesRememberedGalleries); 526 prefs::kMediaGalleriesRememberedGalleries);
529 if (list) { 527 if (list) {
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after
1048 if (extension_prefs_for_testing_) 1046 if (extension_prefs_for_testing_)
1049 return extension_prefs_for_testing_; 1047 return extension_prefs_for_testing_;
1050 return extensions::ExtensionPrefs::Get(profile_); 1048 return extensions::ExtensionPrefs::Get(profile_);
1051 } 1049 }
1052 1050
1053 void MediaGalleriesPreferences::SetExtensionPrefsForTesting( 1051 void MediaGalleriesPreferences::SetExtensionPrefsForTesting(
1054 extensions::ExtensionPrefs* extension_prefs) { 1052 extensions::ExtensionPrefs* extension_prefs) {
1055 DCHECK(IsInitialized()); 1053 DCHECK(IsInitialized());
1056 extension_prefs_for_testing_ = extension_prefs; 1054 extension_prefs_for_testing_ = extension_prefs;
1057 } 1055 }
OLDNEW
« no previous file with comments | « chrome/browser/media_galleries/media_galleries_preferences.h ('k') | chrome/browser/storage_monitor/schedule.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698