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

Unified Diff: base/file_watcher.h

Issue 661359: Add a FileWatcher to base/. (Closed)
Patch Set: 2s Created 10 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/base.gypi ('k') | base/file_watcher_inotify.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/file_watcher.h
diff --git a/base/file_watcher.h b/base/file_watcher.h
new file mode 100644
index 0000000000000000000000000000000000000000..1147d42a29c3625087359e83eb2b2bcb6a88ef2f
--- /dev/null
+++ b/base/file_watcher.h
@@ -0,0 +1,65 @@
+// Copyright (c) 2010 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.
+
+// This module provides a way to monitor a file for changes.
+
+#ifndef BASE_FILE_WATCHER_H_
+#define BASE_FILE_WATCHER_H_
+
+#include "base/basictypes.h"
+#include "base/ref_counted.h"
+
+class FilePath;
+class MessageLoop;
+
+// This class lets you register interest in changes on a file. The delegate
+// will get called whenever the file is changed, including created or deleted.
+// WARNING: To be able to get create/delete notifications and to work cross
+// platform, we actually listen for changes to the directory containing
+// the file.
+// WARNING: On OSX and Windows, the OS API doesn't tell us which file in the
+// directory changed. We work around this by watching the file time, but this
+// can result in some extra notifications if we get other notifications within
+// 2s of the file having changed.
+class FileWatcher {
+ public:
+ class Delegate {
+ public:
+ virtual ~Delegate() {}
+ virtual void OnFileChanged(const FilePath& path) = 0;
+ };
+
+ FileWatcher();
+ ~FileWatcher() {}
+
+ // Register interest in any changes on the file |path|.
+ // OnFileChanged will be called back for each change to the file.
+ // Any background operations will be ran on |backend_loop|, or inside Watch
+ // if |backend_loop| is NULL. Note: The directory containing |path| must
+ // exist before you try to watch the file.
+ // Returns false on error.
+ bool Watch(const FilePath& path, Delegate* delegate,
+ MessageLoop* backend_loop) {
+ return impl_->Watch(path, delegate, backend_loop);
+ }
+
+ // Used internally to encapsulate different members on different platforms.
+ class PlatformDelegate : public base::RefCounted<PlatformDelegate> {
+ public:
+ virtual bool Watch(const FilePath& path, Delegate* delegate,
+ MessageLoop* backend_loop) = 0;
+
+ protected:
+ friend class base::RefCounted<PlatformDelegate>;
+
+ virtual ~PlatformDelegate() {}
+ };
+
+ private:
+ scoped_refptr<PlatformDelegate> impl_;
+
+ DISALLOW_COPY_AND_ASSIGN(FileWatcher);
+};
+
+#endif // BASE_FILE_WATCHER_H_
« no previous file with comments | « base/base.gypi ('k') | base/file_watcher_inotify.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698