// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Manages all the gallery file watchers for the associated profile. This class // lives on the file thread. This class is instantiated per profile. This // is temporary and will be moved to a permanent, public place in the near // future. Please refer to crbug.com/166950 for more details. #ifndef CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERIES_PRIVATE_GALLERY_WATCH_MANAGER_H_ #define CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERIES_PRIVATE_GALLERY_WATCH_MANAGER_H_ #include <map> #include <string> #include "base/files/file_path.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/media_galleries/media_galleries_preferences.h" namespace extensions { class MediaGalleriesPrivateEventRouter; class GalleryWatchManager { public: // Returns the GalleryWatchManager for |profile_id|, creating it if it is not // yet created. static GalleryWatchManager* GetForProfile(void* profile_id); // Returns true if an GalleryWatchManager already exists for the specified // |profile_id|. static bool HasForProfile(void* profile_id); // Notifies about the profile shutdown event. static void OnProfileShutdown(void* profile_id); // Sets up a gallery watch for the extension specified by the |extension_id|. // |profile_id| specifies the extension profile identifier. // |gallery_id| specifies the gallery identifier. // |watch_path| specifies the absolute gallery path. // Returns true, if the watch setup operation was successful. static bool SetupGalleryWatch( void* profile_id, MediaGalleryPrefId gallery_id, const base::FilePath& watch_path, const std::string& extension_id, base::WeakPtr<MediaGalleriesPrivateEventRouter> event_router); // Cancels the gallery watch for the extension specified by the // |extension_id|. |profile_id| specifies the extension profile identifier. // |watch_path| specifies the absolute gallery path. static void RemoveGalleryWatch(void* profile_id, const base::FilePath& watch_path, const std::string& extension_id); // Notifies about the extension unloaded/uninstalled event. static void OnExtensionUnloaded(void* profile_id, const std::string& extension_id); private: class GalleryFilePathWatcher; typedef std::map<base::FilePath, GalleryFilePathWatcher*> WatcherMap; // Use GetForProfile(). GalleryWatchManager(); ~GalleryWatchManager(); // Initiates a gallery watch operation for the extension specified by // the |extension_id|. |gallery_id| specifies the gallery identifier and // |watch_path| specifies the absolute path of the gallery. Returns true, // if the watch was set successfully. bool StartGalleryWatch( MediaGalleryPrefId gallery_id, const base::FilePath& watch_path, const std::string& extension_id, base::WeakPtr<MediaGalleriesPrivateEventRouter> event_router); // Cancels the gallery watch operation for the extension specified by the // |extension_id|. |watch_path| specifies the absolute path of the gallery. void StopGalleryWatch(const base::FilePath& watch_path, const std::string& extension_id); // Handles the extension unloaded/uninstalled event. void HandleExtensionUnloadedEvent(const std::string& extension_id); // Deletes the gallery watchers. void DeleteAllWatchers(); // Removes the GalleryFilePathWatcher entry associated with the given // |watch_path|. void RemoveGalleryFilePathWatcherEntry(const base::FilePath& watch_path); // Map to manage the gallery file path watchers. // Key: Gallery watch path. // Value: GalleryFilePathWatcher*. WatcherMap gallery_watchers_; DISALLOW_COPY_AND_ASSIGN(GalleryWatchManager); }; } // namespace extensions #endif // CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERIES_PRIVATE_GALLERY_WATCH_MANAGER_H_