Home | History | Annotate | Download | only in media_galleries_private
      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
      3 // found in the LICENSE file.
      4 
      5 // Manages all the gallery file watchers for the associated profile. This class
      6 // lives on the file thread. This class is instantiated per profile. This
      7 // is temporary and will be moved to a permanent, public place in the near
      8 // future. Please refer to crbug.com/166950 for more details.
      9 
     10 #ifndef CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERIES_PRIVATE_GALLERY_WATCH_MANAGER_H_
     11 #define CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERIES_PRIVATE_GALLERY_WATCH_MANAGER_H_
     12 
     13 #include <map>
     14 #include <string>
     15 
     16 #include "base/files/file_path.h"
     17 #include "base/memory/weak_ptr.h"
     18 #include "chrome/browser/media_galleries/media_galleries_preferences.h"
     19 
     20 namespace extensions {
     21 
     22 class MediaGalleriesPrivateEventRouter;
     23 
     24 class GalleryWatchManager {
     25  public:
     26   // Returns the GalleryWatchManager for |profile_id|, creating it if it is not
     27   // yet created.
     28   static GalleryWatchManager* GetForProfile(void* profile_id);
     29 
     30   // Returns true if an GalleryWatchManager already exists for the specified
     31   // |profile_id|.
     32   static bool HasForProfile(void* profile_id);
     33 
     34   // Notifies about the profile shutdown event.
     35   static void OnProfileShutdown(void* profile_id);
     36 
     37   // Sets up a gallery watch for the extension specified by the |extension_id|.
     38   // |profile_id| specifies the extension profile identifier.
     39   // |gallery_id| specifies the gallery identifier.
     40   // |watch_path| specifies the absolute gallery path.
     41   // Returns true, if the watch setup operation was successful.
     42   static bool SetupGalleryWatch(
     43       void* profile_id,
     44       MediaGalleryPrefId gallery_id,
     45       const base::FilePath& watch_path,
     46       const std::string& extension_id,
     47       base::WeakPtr<MediaGalleriesPrivateEventRouter> event_router);
     48 
     49   // Cancels the gallery watch for the extension specified by the
     50   // |extension_id|. |profile_id| specifies the extension profile identifier.
     51   // |watch_path| specifies the absolute gallery path.
     52   static void RemoveGalleryWatch(void* profile_id,
     53                                  const base::FilePath& watch_path,
     54                                  const std::string& extension_id);
     55 
     56   // Notifies about the extension unloaded/uninstalled event.
     57   static void OnExtensionUnloaded(void* profile_id,
     58                                   const std::string& extension_id);
     59 
     60  private:
     61   class GalleryFilePathWatcher;
     62   typedef std::map<base::FilePath, GalleryFilePathWatcher*> WatcherMap;
     63 
     64   // Use GetForProfile().
     65   GalleryWatchManager();
     66   ~GalleryWatchManager();
     67 
     68   // Initiates a gallery watch operation for the extension specified by
     69   // the |extension_id|. |gallery_id| specifies the gallery identifier and
     70   // |watch_path| specifies the absolute path of the gallery. Returns true,
     71   // if the watch was set successfully.
     72   bool StartGalleryWatch(
     73       MediaGalleryPrefId gallery_id,
     74       const base::FilePath& watch_path,
     75       const std::string& extension_id,
     76       base::WeakPtr<MediaGalleriesPrivateEventRouter> event_router);
     77 
     78   // Cancels the gallery watch operation for the extension specified by the
     79   // |extension_id|. |watch_path| specifies the absolute path of the gallery.
     80   void StopGalleryWatch(const base::FilePath& watch_path,
     81                         const std::string& extension_id);
     82 
     83   // Handles the extension unloaded/uninstalled event.
     84   void HandleExtensionUnloadedEvent(const std::string& extension_id);
     85 
     86   // Deletes the gallery watchers.
     87   void DeleteAllWatchers();
     88 
     89   // Removes the GalleryFilePathWatcher entry associated with the given
     90   // |watch_path|.
     91   void RemoveGalleryFilePathWatcherEntry(const base::FilePath& watch_path);
     92 
     93   // Map to manage the gallery file path watchers.
     94   // Key: Gallery watch path.
     95   // Value: GalleryFilePathWatcher*.
     96   WatcherMap gallery_watchers_;
     97 
     98   DISALLOW_COPY_AND_ASSIGN(GalleryWatchManager);
     99 };
    100 
    101 }  // namespace extensions
    102 
    103 #endif  // CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERIES_PRIVATE_GALLERY_WATCH_MANAGER_H_
    104