Index: chrome/browser/extensions/api/media_galleries_private/gallery_watch_manager.h |
diff --git a/chrome/browser/extensions/api/media_galleries_private/gallery_watch_manager.h b/chrome/browser/extensions/api/media_galleries_private/gallery_watch_manager.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c231d1831ba3ae87e26f211af86947c26b8b7514 |
--- /dev/null |
+++ b/chrome/browser/extensions/api/media_galleries_private/gallery_watch_manager.h |
@@ -0,0 +1,141 @@ |
+// 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 |
+// is temporary and will be moved to a permanent, public place in the near |
+// future. |
+ |
+#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 <set> |
+#include <string> |
+ |
+#include "base/file_path.h" |
+#include "base/files/file_path_watcher.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/memory/weak_ptr.h" |
+#include "base/threading/thread_checker.h" |
+#include "base/time.h" |
+ |
+class Profile; |
+ |
+namespace extensions { |
+ |
+// The profile-keyed service that manages the gallery watchers. This class is |
+// constructed, destructed and operated on the FILE thread. |
Lei Zhang
2012/12/15 01:11:54
You can just say "this class lives on the foo thre
kmadhusu
2012/12/17 23:58:05
Done.
|
+class GalleryWatchManager { |
+ public: |
+ typedef std::set<std::string> ExtensionIdSet; |
Lei Zhang
2012/12/15 01:11:54
This seems to be used in 1 place inside the .cc fi
kmadhusu
2012/12/17 23:58:05
Removed typedef.
|
+ |
+ explicit GalleryWatchManager(const Profile* profile); |
+ ~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(const std::string& gallery_id, |
+ const FilePath& watch_path, |
+ const std::string& extension_id); |
+ |
+ // Cancels the gallery watch operation for the extension specified by the |
+ // |extension_id|. |watch_path| specifies the gallery absolute path. |
+ void StopGalleryWatch(const FilePath& watch_path, |
+ const std::string& extension_id); |
+ |
+ // Handles the extension unloaded/uninstalled/destroyed event. |
+ void OnExtensionDestroyed(const std::string& extension_id); |
+ |
+ private: |
+ typedef std::map<std::string, int> ExtensionUsageRegistry; |
Lei Zhang
2012/12/15 04:13:21
This map is too wimpy to a registry.
kmadhusu
2012/12/17 23:58:05
ExtensionUsageRegistry => ExtensionWatchCountMap
|
+ |
+ class GalleryFilePathWatcher; |
+ typedef std::map<FilePath, GalleryFilePathWatcher*> WatcherMap; |
+ |
+ // Gallery file path watcher delegate to handle the gallery change |
Lei Zhang
2012/12/15 04:13:21
You should mention this class does recursive watch
kmadhusu
2012/12/17 23:58:05
Done.
|
+ // notifications. This class manages all the extension usage and forwards |
+ // the gallery change notifications to the extensions. |
+ // This class is constructed, destructed and operated on the FILE thread. |
+ // This class is instantiated per gallery watch path. |
+ class GalleryFilePathWatcher { |
Lei Zhang
2012/12/15 04:13:21
Can this go in the .cc file instead?
kmadhusu
2012/12/17 23:58:05
Done.
|
+ public: |
+ GalleryFilePathWatcher(const Profile* profile, |
+ const std::string& gallery_id, |
+ const FilePath& path, |
+ const std::string& extension_id); |
+ |
+ ~GalleryFilePathWatcher(); |
+ |
+ // Adds the extension specified by the |extension_id| to the |
+ // ExtensionUsageRegistry and initiate the watch operation. |
+ void AddExtension(const std::string& extension_id); |
+ |
+ // Cancels the watch for the extension specified by the |extension_id|. |
+ void RemoveExtension(const std::string& extension_id); |
+ |
+ // Handles the extension unloaded/uninstalled/destroyed event. |
+ void OnExtensionDestroyed(const std::string& extension_id); |
+ |
+ // Returns the total number of watchers for the |gallery_path_|. |
+ unsigned int GetRefCount() const; |
+ |
+ // Sets up the watch operation for the specified |gallery_path_|. On |
+ // success, returns true. |
+ bool SetupWatch(); |
+ |
+ private: |
+ // FilePathWatcher callback. |
+ void OnFilePathChanged(const FilePath& path, bool error); |
+ |
+ // Current profile. |
+ const Profile* profile_; |
+ |
+ // The gallery identifier, e.g "1". |
+ const std::string gallery_id_; |
+ |
+ // The gallery file path watcher. |
+ scoped_ptr<base::files::FilePathWatcher> file_watcher_; |
Lei Zhang
2012/12/15 04:13:21
Does this need to be a scoped_ptr?
kmadhusu
2012/12/17 23:58:05
Not needed.
|
+ |
+ // The gallery file path, e.g "C:/My Pictures". |
Lei Zhang
2012/12/15 04:13:21
nit: C:\, not C:/
kmadhusu
2012/12/17 23:58:05
Done.
|
+ FilePath gallery_path_; |
+ |
+ // Map to keep track of the extension and its corresponding watch count. |
+ // Key: Extension identifier, e.g "qoueruoweuroiwueroiwujkshdf". |
+ // Value: Number of watchers in this extension, e.g "3". |
+ ExtensionUsageRegistry extensions_; |
Lei Zhang
2012/12/15 04:13:21
|extensions_watch_count_map_| ?
kmadhusu
2012/12/17 23:58:05
Done.
|
+ |
+ // Total number of watchers. |
+ unsigned int ref_count_; |
Lei Zhang
2012/12/15 04:13:21
Do you have to manually refcount?
kmadhusu
2012/12/17 23:58:05
Fixed. GalleryFilePathWatch inherits from RefCount
|
+ |
+ // Used to manage the gallery changed events. |
+ base::Time last_gallery_changed_event_; |
Lei Zhang
2012/12/15 04:13:21
This should be per-extension.
Extension AA has a
kmadhusu
2012/12/17 23:58:05
Done.
|
+ |
+ // Make sure all the member functions are called on the right thread. |
+ base::ThreadChecker thread_check_; |
+ |
+ // Used to provide a weak pointer to FilePathWatcher callback. |
+ base::WeakPtrFactory<GalleryFilePathWatcher> weak_ptr_factory_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(GalleryFilePathWatcher); |
+ }; |
+ |
+ // Current profile. |
+ const Profile* profile_; |
+ |
+ // Map to manage the gallery file path watchers. |
+ // Key: Gallery watch path. |
+ // Value: GalleryFilePathWatcher*. |
+ WatcherMap gallery_watchers_; |
+ |
+ // Make sure all the member functions are called on the right thread. |
+ base::ThreadChecker thread_checker_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(GalleryWatchManager); |
+}; |
+ |
+} // namespace extensions |
+ |
+#endif // CHROME_BROWSER_EXTENSIONS_API_MEDIA_GALLERIES_PRIVATE_GALLERY_WATCH_MANAGER_H_ |