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

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

Issue 207613002: Cleanup: Remove NOTIFICATION_EXTENSION_UNLOADED usage in MediaScanManager. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: rebase, add error console Created 6 years, 8 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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_scan_manager.h" 5 #include "chrome/browser/media_galleries/media_scan_manager.h"
6 6
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/files/file_enumerator.h" 8 #include "base/files/file_enumerator.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
11 #include "base/time/time.h" 11 #include "base/time/time.h"
12 #include "chrome/browser/chrome_notification_types.h"
13 #include "chrome/browser/extensions/extension_service.h" 12 #include "chrome/browser/extensions/extension_service.h"
14 #include "chrome/browser/media_galleries/media_galleries_preferences.h" 13 #include "chrome/browser/media_galleries/media_galleries_preferences.h"
15 #include "chrome/browser/media_galleries/media_galleries_preferences_factory.h" 14 #include "chrome/browser/media_galleries/media_galleries_preferences_factory.h"
16 #include "chrome/browser/media_galleries/media_scan_manager_observer.h" 15 #include "chrome/browser/media_galleries/media_scan_manager_observer.h"
17 #include "chrome/browser/profiles/profile.h" 16 #include "chrome/browser/profiles/profile.h"
18 #include "chrome/common/extensions/api/media_galleries.h" 17 #include "chrome/common/extensions/api/media_galleries.h"
19 #include "content/public/browser/browser_thread.h" 18 #include "content/public/browser/browser_thread.h"
20 #include "content/public/browser/notification_details.h" 19 #include "extensions/browser/extension_registry.h"
21 #include "content/public/browser/notification_source.h"
22 #include "extensions/browser/extension_system.h" 20 #include "extensions/browser/extension_system.h"
23 #include "extensions/common/extension.h" 21 #include "extensions/common/extension.h"
24 22
23 using extensions::ExtensionRegistry;
24
25 namespace media_galleries = extensions::api::media_galleries; 25 namespace media_galleries = extensions::api::media_galleries;
26 26
27 namespace { 27 namespace {
28 28
29 typedef std::set<std::string /*extension id*/> ScanningExtensionIdSet; 29 typedef std::set<std::string /*extension id*/> ScanningExtensionIdSet;
30 30
31 // When multiple scan results have the same parent, sometimes it makes sense 31 // When multiple scan results have the same parent, sometimes it makes sense
32 // to combine them into a single scan result at the parent. This constant 32 // to combine them into a single scan result at the parent. This constant
33 // governs when that happens; kContainerDirectoryMinimumPercent percent of the 33 // governs when that happens; kContainerDirectoryMinimumPercent percent of the
34 // directories in the parent directory must be scan results. 34 // directories in the parent directory must be scan results.
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 file_counts->audio_count += it->second.audio_count; 297 file_counts->audio_count += it->second.audio_count;
298 file_counts->image_count += it->second.image_count; 298 file_counts->image_count += it->second.image_count;
299 file_counts->video_count += it->second.video_count; 299 file_counts->video_count += it->second.video_count;
300 } 300 }
301 } 301 }
302 return gallery_count; 302 return gallery_count;
303 } 303 }
304 304
305 } // namespace 305 } // namespace
306 306
307 MediaScanManager::MediaScanManager() : weak_factory_(this) { 307 MediaScanManager::MediaScanManager()
308 : scoped_extension_registry_observer_(this),
309 weak_factory_(this) {
308 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 310 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
309 } 311 }
310 312
311 MediaScanManager::~MediaScanManager() { 313 MediaScanManager::~MediaScanManager() {
312 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 314 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
313 } 315 }
314 316
315 void MediaScanManager::AddObserver(Profile* profile, 317 void MediaScanManager::AddObserver(Profile* profile,
316 MediaScanManagerObserver* observer) { 318 MediaScanManagerObserver* observer) {
317 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 319 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 int gallery_count = 364 int gallery_count =
363 CountScanResultsForExtension(preferences, extension, &file_counts); 365 CountScanResultsForExtension(preferences, extension, &file_counts);
364 scans_for_profile->second.observer->OnScanStarted(extension->id()); 366 scans_for_profile->second.observer->OnScanStarted(extension->id());
365 scans_for_profile->second.observer->OnScanFinished(extension->id(), 367 scans_for_profile->second.observer->OnScanFinished(extension->id(),
366 gallery_count, 368 gallery_count,
367 file_counts); 369 file_counts);
368 return; 370 return;
369 } 371 }
370 372
371 // On first scan for the |profile|, register to listen for extension unload. 373 // On first scan for the |profile|, register to listen for extension unload.
372 if (scanning_extensions->empty()) { 374 if (scanning_extensions->empty())
373 registrar_.Add( 375 scoped_extension_registry_observer_.Add(ExtensionRegistry::Get(profile));
374 this,
375 chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
376 content::Source<Profile>(profile));
377 }
378 376
379 scanning_extensions->insert(extension->id()); 377 scanning_extensions->insert(extension->id());
380 scans_for_profile->second.observer->OnScanStarted(extension->id()); 378 scans_for_profile->second.observer->OnScanStarted(extension->id());
381 379
382 if (folder_finder_) 380 if (folder_finder_)
383 return; 381 return;
384 382
385 MediaFolderFinder::MediaFolderFinderResultsCallback callback = 383 MediaFolderFinder::MediaFolderFinderResultsCallback callback =
386 base::Bind(&MediaScanManager::OnScanCompleted, 384 base::Bind(&MediaScanManager::OnScanCompleted,
387 weak_factory_.GetWeakPtr()); 385 weak_factory_.GetWeakPtr());
(...skipping 13 matching lines...) Expand all
401 // Erases the logical scan if found, early exit otherwise. 399 // Erases the logical scan if found, early exit otherwise.
402 ScanObserverMap::iterator scans_for_profile = observers_.find(profile); 400 ScanObserverMap::iterator scans_for_profile = observers_.find(profile);
403 if (scans_for_profile == observers_.end() || 401 if (scans_for_profile == observers_.end() ||
404 !scans_for_profile->second.scanning_extensions.erase(extension->id())) { 402 !scans_for_profile->second.scanning_extensions.erase(extension->id())) {
405 return; 403 return;
406 } 404 }
407 405
408 scans_for_profile->second.observer->OnScanCancelled(extension->id()); 406 scans_for_profile->second.observer->OnScanCancelled(extension->id());
409 407
410 // No more scanning extensions for |profile|, so stop listening for unloads. 408 // No more scanning extensions for |profile|, so stop listening for unloads.
411 if (scans_for_profile->second.scanning_extensions.empty()) { 409 if (scans_for_profile->second.scanning_extensions.empty())
412 registrar_.Remove( 410 scoped_extension_registry_observer_.Remove(ExtensionRegistry::Get(profile));
413 this,
414 chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
415 content::Source<Profile>(profile));
416 }
417 411
418 if (!ScanInProgress()) { 412 if (!ScanInProgress()) {
419 folder_finder_.reset(); 413 folder_finder_.reset();
420 DCHECK(!scan_start_time_.is_null()); 414 DCHECK(!scan_start_time_.is_null());
421 UMA_HISTOGRAM_LONG_TIMES("MediaGalleries.ScanCancelTime", 415 UMA_HISTOGRAM_LONG_TIMES("MediaGalleries.ScanCancelTime",
422 base::Time::Now() - scan_start_time_); 416 base::Time::Now() - scan_start_time_);
423 scan_start_time_ = base::Time(); 417 scan_start_time_ = base::Time();
424 } 418 }
425 } 419 }
426 420
427 void MediaScanManager::SetMediaFolderFinderFactory( 421 void MediaScanManager::SetMediaFolderFinderFactory(
428 const MediaFolderFinderFactory& factory) { 422 const MediaFolderFinderFactory& factory) {
429 testing_folder_finder_factory_ = factory; 423 testing_folder_finder_factory_ = factory;
430 } 424 }
431 425
432 MediaScanManager::ScanObservers::ScanObservers() : observer(NULL) {} 426 MediaScanManager::ScanObservers::ScanObservers() : observer(NULL) {}
433 MediaScanManager::ScanObservers::~ScanObservers() {} 427 MediaScanManager::ScanObservers::~ScanObservers() {}
434 428
435 void MediaScanManager::Observe( 429 void MediaScanManager::OnExtensionUnloaded(
436 int type, const content::NotificationSource& source, 430 content::BrowserContext* browser_context,
437 const content::NotificationDetails& details) { 431 const extensions::Extension* extension) {
438 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 432 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
439 switch (type) { 433 CancelScan(Profile::FromBrowserContext(browser_context), extension);
440 case chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: {
441 Profile* profile = content::Source<Profile>(source).ptr();
442 extensions::Extension* extension = const_cast<extensions::Extension*>(
443 content::Details<extensions::UnloadedExtensionInfo>(
444 details)->extension);
445 DCHECK(extension);
446 CancelScan(profile, extension);
447 break;
448 }
449 default:
450 NOTREACHED();
451 }
452 } 434 }
453 435
454 bool MediaScanManager::ScanInProgress() const { 436 bool MediaScanManager::ScanInProgress() const {
455 for (ScanObserverMap::const_iterator it = observers_.begin(); 437 for (ScanObserverMap::const_iterator it = observers_.begin();
456 it != observers_.end(); 438 it != observers_.end();
457 ++it) { 439 ++it) {
458 if (!it->second.scanning_extensions.empty()) 440 if (!it->second.scanning_extensions.empty())
459 return true; 441 return true;
460 } 442 }
461 return false; 443 return false;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 int gallery_count = CountScanResultsForExtension(preferences, extension, 504 int gallery_count = CountScanResultsForExtension(preferences, extension,
523 &file_counts); 505 &file_counts);
524 scans_for_profile->second.observer->OnScanFinished(*extension_id_it, 506 scans_for_profile->second.observer->OnScanFinished(*extension_id_it,
525 gallery_count, 507 gallery_count,
526 file_counts); 508 file_counts);
527 } 509 }
528 } 510 }
529 scanning_extensions->clear(); 511 scanning_extensions->clear();
530 preferences->SetLastScanCompletionTime(base::Time::Now()); 512 preferences->SetLastScanCompletionTime(base::Time::Now());
531 } 513 }
532 registrar_.RemoveAll(); 514 scoped_extension_registry_observer_.RemoveAll();
533 folder_finder_.reset(); 515 folder_finder_.reset();
534 } 516 }
OLDNEW
« no previous file with comments | « chrome/browser/media_galleries/media_scan_manager.h ('k') | extensions/browser/extension_registry.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698