Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / media_galleries / media_scan_manager.h
index a04e7ea..bbfc10c 100644 (file)
 #include "base/compiler_specific.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
+#include "base/scoped_observer.h"
+#include "base/time/time.h"
 #include "chrome/browser/media_galleries/media_folder_finder.h"
 #include "chrome/browser/media_galleries/media_scan_types.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
+#include "extensions/browser/extension_registry_observer.h"
 
-class Profile;
 class MediaScanManagerObserver;
+class Profile;
 
 namespace extensions {
 class Extension;
-}  // namespace extensions
+class ExtensionRegistry;
+}
 
 // The MediaScanManager is owned by MediaFileSystemRegistry, which is global.
 // This class manages multiple 'virtual' media scans, up to one per extension
 // per profile, and also manages the one physical scan backing them.
 // This class lives and is called on the UI thread.
-class MediaScanManager : public content::NotificationObserver {
+class MediaScanManager : public extensions::ExtensionRegistryObserver {
  public:
   MediaScanManager();
-  virtual ~MediaScanManager();
+  ~MediaScanManager() override;
 
   // There can only be ever one observer registered per profile. Does not take
   // ownership of |observer|. An observer must be registered before scanning.
@@ -51,6 +53,7 @@ class MediaScanManager : public content::NotificationObserver {
 
  protected:
   friend class MediaGalleriesPlatformAppBrowserTest;
+  friend class MediaScanManagerTest;
 
   typedef base::Callback<MediaFolderFinder*(
       const MediaFolderFinder::MediaFolderFinderResultsCallback&)>
@@ -58,6 +61,11 @@ class MediaScanManager : public content::NotificationObserver {
 
   void SetMediaFolderFinderFactory(const MediaFolderFinderFactory& factory);
 
+  // Here so that friend MediaScanManagerTest can access it.
+  static MediaFolderFinder::MediaFolderFinderResults FindContainerScanResults(
+      const MediaFolderFinder::MediaFolderFinderResults& found_folders,
+      const std::vector<base::FilePath>& sensitive_locations);
+
  private:
   struct ScanObservers {
     ScanObservers();
@@ -67,10 +75,11 @@ class MediaScanManager : public content::NotificationObserver {
   };
   typedef std::map<Profile*, ScanObservers> ScanObserverMap;
 
-  // content::NotificationObserver implementation.
-  virtual void Observe(int type,
-                       const content::NotificationSource& source,
-                       const content::NotificationDetails& details) OVERRIDE;
+  // extensions::ExtensionRegistryObserver implementation.
+  void OnExtensionUnloaded(
+      content::BrowserContext* browser_context,
+      const extensions::Extension* extension,
+      extensions::UnloadedExtensionInfo::Reason reason) override;
 
   bool ScanInProgress() const;
 
@@ -84,14 +93,17 @@ class MediaScanManager : public content::NotificationObserver {
 
   scoped_ptr<MediaFolderFinder> folder_finder_;
 
+  base::Time scan_start_time_;
+
   // If not NULL, used to create |folder_finder_|. Used for testing.
   MediaFolderFinderFactory testing_folder_finder_factory_;
 
   // Set of extensions (on all profiles) that have an in-progress scan.
   ScanObserverMap observers_;
 
-  // Used to listen for NOTIFICATION_EXTENSION_UNLOADED events.
-  content::NotificationRegistrar registrar_;
+  ScopedObserver<extensions::ExtensionRegistry,
+                 extensions::ExtensionRegistryObserver>
+      scoped_extension_registry_observer_;
 
   base::WeakPtrFactory<MediaScanManager> weak_factory_;