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

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

Issue 14556015: [Media Galleries] Lazily initialize the storage monitor. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Windows compile tweaks Created 7 years, 7 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
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 // MediaFileSystemRegistry implementation. 5 // MediaFileSystemRegistry implementation.
6 6
7 #include "chrome/browser/media_galleries/media_file_system_registry.h" 7 #include "chrome/browser/media_galleries/media_file_system_registry.h"
8 8
9 #include <set> 9 #include <set>
10 #include <vector> 10 #include <vector>
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 }; 424 };
425 425
426 /****************** 426 /******************
427 * Public methods 427 * Public methods
428 ******************/ 428 ******************/
429 429
430 void MediaFileSystemRegistry::GetMediaFileSystemsForExtension( 430 void MediaFileSystemRegistry::GetMediaFileSystemsForExtension(
431 const content::RenderViewHost* rvh, 431 const content::RenderViewHost* rvh,
432 const extensions::Extension* extension, 432 const extensions::Extension* extension,
433 const MediaFileSystemsCallback& callback) { 433 const MediaFileSystemsCallback& callback) {
434 LOG(INFO) << "GetFSForExt";
434 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 435 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
435 436
436 Profile* profile = 437 Profile* profile =
437 Profile::FromBrowserContext(rvh->GetProcess()->GetBrowserContext()); 438 Profile::FromBrowserContext(rvh->GetProcess()->GetBrowserContext());
438 MediaGalleriesPreferences* preferences = GetPreferences(profile); 439 GetPreferencesAsync(
440 profile, base::Bind(
441 &MediaFileSystemRegistry::GetMediaFileSystemsPostStorageMonitorInit,
442 base::Unretained(this),
443 rvh, extension, callback));
444 }
445
446 void MediaFileSystemRegistry::GetMediaFileSystemsPostStorageMonitorInit(
447 const content::RenderViewHost* rvh,
448 const extensions::Extension* extension,
449 const MediaFileSystemsCallback& callback,
450 MediaGalleriesPreferences* preferences) {
451 LOG(INFO) << "GetFSForExtPostInit";
439 MediaGalleryPrefIdSet galleries = 452 MediaGalleryPrefIdSet galleries =
440 preferences->GalleriesForExtension(*extension); 453 preferences->GalleriesForExtension(*extension);
441 454
442 if (galleries.empty()) { 455 if (galleries.empty()) {
443 callback.Run(std::vector<MediaFileSystemInfo>()); 456 callback.Run(std::vector<MediaFileSystemInfo>());
444 return; 457 return;
445 } 458 }
446 459
460 Profile* profile =
461 Profile::FromBrowserContext(rvh->GetProcess()->GetBrowserContext());
447 if (!ContainsKey(pref_change_registrar_map_, profile)) { 462 if (!ContainsKey(pref_change_registrar_map_, profile)) {
448 PrefChangeRegistrar* pref_registrar = new PrefChangeRegistrar; 463 PrefChangeRegistrar* pref_registrar = new PrefChangeRegistrar;
449 pref_registrar->Init(profile->GetPrefs()); 464 pref_registrar->Init(profile->GetPrefs());
450 pref_registrar->Add( 465 pref_registrar->Add(
451 prefs::kMediaGalleriesRememberedGalleries, 466 prefs::kMediaGalleriesRememberedGalleries,
452 base::Bind(&MediaFileSystemRegistry::OnRememberedGalleriesChanged, 467 base::Bind(&MediaFileSystemRegistry::OnRememberedGalleriesChanged,
453 base::Unretained(this), 468 base::Unretained(this),
454 pref_registrar->prefs())); 469 pref_registrar->prefs()));
455 pref_change_registrar_map_[profile] = pref_registrar; 470 pref_change_registrar_map_[profile] = pref_registrar;
456 } 471 }
457 472
458 ExtensionGalleriesHost* extension_host = 473 ExtensionGalleriesHost* extension_host =
459 extension_hosts_map_[profile][extension->id()].get(); 474 extension_hosts_map_[profile][extension->id()].get();
460 if (!extension_host) { 475 if (!extension_host) {
461 extension_host = new ExtensionGalleriesHost( 476 extension_host = new ExtensionGalleriesHost(
462 file_system_context_.get(), 477 file_system_context_.get(),
463 base::Bind(&MediaFileSystemRegistry::OnExtensionGalleriesHostEmpty, 478 base::Bind(&MediaFileSystemRegistry::OnExtensionGalleriesHostEmpty,
464 base::Unretained(this), profile, extension->id())); 479 base::Unretained(this), profile, extension->id()));
465 extension_hosts_map_[profile][extension->id()] = extension_host; 480 extension_hosts_map_[profile][extension->id()] = extension_host;
466 } 481 }
467 extension_host->ReferenceFromRVH(rvh); 482 extension_host->ReferenceFromRVH(rvh);
468 483
469 extension_host->GetMediaFileSystems(galleries, preferences->known_galleries(), 484 extension_host->GetMediaFileSystems(galleries, preferences->known_galleries(),
470 callback); 485 callback);
471 } 486 }
472 487
488 void MediaFileSystemRegistry::GetPreferencesAsync(
489 Profile* profile,
490 base::Callback<void(MediaGalleriesPreferences*)> callback) {
491 LOG(INFO) << "GetPreferencesAsync";
492 StorageMonitor* monitor = StorageMonitor::GetInstance();
493 if (!monitor) {
Lei Zhang 2013/05/10 05:24:43 Do we want to just make tests that use MediaFSRegi
Greg Billock 2013/05/10 16:20:27 Yes, I think that'd be better. I kind of suspect t
Lei Zhang 2013/05/11 02:12:22 Can you add a TODO so we don't forget?
Greg Billock 2013/05/13 21:20:38 Done.
494 callback.Run(MediaGalleriesPreferencesFactory::GetForProfile(profile));
495 return;
496 }
497
498 if (monitor->IsInitialized()) {
499 callback.Run(GetPreferences(profile));
500 return;
501 }
502
503 monitor->Initialize(
504 base::Bind(&MediaFileSystemRegistry::OnStorageMonitorInitialized,
505 base::Unretained(this),
506 profile, callback));
507
508 // TODO(gbillock): set a timeout here to bail out of init?
509 }
510
511 void MediaFileSystemRegistry::OnStorageMonitorInitialized(
512 Profile* profile,
513 base::Callback<void(MediaGalleriesPreferences*)> callback) {
514 LOG(INFO) << "StorageMonitor inialized...";
515 callback.Run(GetPreferences(profile));
516 }
517
473 MediaGalleriesPreferences* MediaFileSystemRegistry::GetPreferences( 518 MediaGalleriesPreferences* MediaFileSystemRegistry::GetPreferences(
474 Profile* profile) { 519 Profile* profile) {
520 LOG(INFO) << "MFSR::GetPreferences";
475 MediaGalleriesPreferences* preferences = 521 MediaGalleriesPreferences* preferences =
476 MediaGalleriesPreferencesFactory::GetForProfile(profile); 522 MediaGalleriesPreferencesFactory::GetForProfile(profile);
477 if (ContainsKey(extension_hosts_map_, profile)) 523 if (ContainsKey(extension_hosts_map_, profile))
478 return preferences; 524 return preferences;
479 525
480 // Create an empty entry so the initialization code below only gets called 526 // Create an empty entry so the initialization code below only gets called
481 // once per profile. 527 // once per profile.
482 extension_hosts_map_[profile] = ExtensionHostMap(); 528 extension_hosts_map_[profile] = ExtensionHostMap();
483 529
484 // StorageMonitor may be NULL in unit tests. 530 // StorageMonitor may be NULL in unit tests.
485 StorageMonitor* monitor = StorageMonitor::GetInstance(); 531 StorageMonitor* monitor = StorageMonitor::GetInstance();
486 if (!monitor) 532 if (!monitor)
487 return preferences; 533 return preferences;
534 DCHECK(monitor->IsInitialized());
488 std::vector<StorageInfo> existing_devices = monitor->GetAttachedStorage(); 535 std::vector<StorageInfo> existing_devices = monitor->GetAttachedStorage();
489 for (size_t i = 0; i < existing_devices.size(); i++) { 536 for (size_t i = 0; i < existing_devices.size(); i++) {
490 if (!MediaStorageUtil::IsMediaDevice(existing_devices[i].device_id)) 537 if (!MediaStorageUtil::IsMediaDevice(existing_devices[i].device_id))
491 continue; 538 continue;
492 preferences->AddGalleryWithName(existing_devices[i].device_id, 539 preferences->AddGalleryWithName(existing_devices[i].device_id,
493 existing_devices[i].name, 540 existing_devices[i].name,
494 base::FilePath(), 541 base::FilePath(),
495 false /*not user added*/); 542 false /*not user added*/);
496 } 543 }
497 return preferences; 544 return preferences;
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
728 // previously used. 775 // previously used.
729 PrefChangeRegistrarMap::iterator pref_it = 776 PrefChangeRegistrarMap::iterator pref_it =
730 pref_change_registrar_map_.find(profile); 777 pref_change_registrar_map_.find(profile);
731 DCHECK(pref_it != pref_change_registrar_map_.end()); 778 DCHECK(pref_it != pref_change_registrar_map_.end());
732 delete pref_it->second; 779 delete pref_it->second;
733 pref_change_registrar_map_.erase(pref_it); 780 pref_change_registrar_map_.erase(pref_it);
734 } 781 }
735 } 782 }
736 783
737 } // namespace chrome 784 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698