diff options
author | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-18 20:38:09 +0000 |
---|---|---|
committer | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-18 20:38:09 +0000 |
commit | 33f8e3dfcc9c04c4aaa19757d8994161b650e040 (patch) | |
tree | 7a6065bacc7197182f1b22c6f37de6c1838aa08f /base/directory_watcher_win.cc | |
parent | 3083a622a26104514d1db147194cc8d9fa7c8752 (diff) | |
download | chromium_src-33f8e3dfcc9c04c4aaa19757d8994161b650e040.zip chromium_src-33f8e3dfcc9c04c4aaa19757d8994161b650e040.tar.gz chromium_src-33f8e3dfcc9c04c4aaa19757d8994161b650e040.tar.bz2 |
Cleanup in DirectoryWatcher:
- share more code between different platforms
- put more code inside anonymous namespace
- add more DISALLOW_COPY_AND_ASSIGNs
- small #include cleanup
Review URL: http://codereview.chromium.org/42343
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@12007 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/directory_watcher_win.cc')
-rw-r--r-- | base/directory_watcher_win.cc | 56 |
1 files changed, 26 insertions, 30 deletions
diff --git a/base/directory_watcher_win.cc b/base/directory_watcher_win.cc index 21fdd38..a1e3ff7 100644 --- a/base/directory_watcher_win.cc +++ b/base/directory_watcher_win.cc @@ -7,18 +7,18 @@ #include "base/file_path.h" #include "base/logging.h" #include "base/object_watcher.h" +#include "base/ref_counted.h" -// Private implementation class implementing the behavior of DirectoryWatcher. -class DirectoryWatcher::Impl : public base::RefCounted<DirectoryWatcher::Impl>, - public base::ObjectWatcher::Delegate { +namespace { + +class DirectoryWatcherImpl : public DirectoryWatcher::PlatformDelegate, + public base::ObjectWatcher::Delegate { public: - Impl(DirectoryWatcher::Delegate* delegate) - : delegate_(delegate), handle_(INVALID_HANDLE_VALUE) {} - ~Impl(); + DirectoryWatcherImpl() : handle_(INVALID_HANDLE_VALUE) {} + virtual ~DirectoryWatcherImpl(); - // Register interest in any changes in |path|. - // Returns false on error. - bool Watch(const FilePath& path); + virtual bool Watch(const FilePath& path, DirectoryWatcher::Delegate* delegate, + bool recursive); // Callback from MessageLoopForIO. virtual void OnObjectSignaled(HANDLE object); @@ -32,20 +32,27 @@ class DirectoryWatcher::Impl : public base::RefCounted<DirectoryWatcher::Impl>, HANDLE handle_; // ObjectWatcher to watch handle_ for events. base::ObjectWatcher watcher_; + + DISALLOW_COPY_AND_ASSIGN(DirectoryWatcherImpl); }; -DirectoryWatcher::Impl::~Impl() { +DirectoryWatcherImpl::~DirectoryWatcherImpl() { if (handle_ != INVALID_HANDLE_VALUE) { watcher_.StopWatching(); FindCloseChangeNotification(handle_); } } -bool DirectoryWatcher::Impl::Watch(const FilePath& path) { +bool DirectoryWatcherImpl::Watch(const FilePath& path, + DirectoryWatcher::Delegate* delegate, bool recursive) { DCHECK(path_.value().empty()); // Can only watch one path. - // NOTE: If you want to change this code to *not* watch subdirectories, have a - // look at http://code.google.com/p/chromium/issues/detail?id=5072 first. + if (!recursive) { + // See http://crbug.com/5072. + NOTIMPLEMENTED(); + return false; + } + handle_ = FindFirstChangeNotification( path.value().c_str(), TRUE, // Watch subtree. @@ -54,16 +61,17 @@ bool DirectoryWatcher::Impl::Watch(const FilePath& path) { if (handle_ == INVALID_HANDLE_VALUE) return false; + delegate_ = delegate; path_ = path; watcher_.StartWatching(handle_, this); return true; } -void DirectoryWatcher::Impl::OnObjectSignaled(HANDLE object) { +void DirectoryWatcherImpl::OnObjectSignaled(HANDLE object) { DCHECK(object == handle_); // Make sure we stay alive through the body of this function. - scoped_refptr<DirectoryWatcher::Impl> keep_alive(this); + scoped_refptr<DirectoryWatcherImpl> keep_alive(this); delegate_->OnDirectoryChanged(path_); @@ -73,20 +81,8 @@ void DirectoryWatcher::Impl::OnObjectSignaled(HANDLE object) { watcher_.StartWatching(object, this); } -DirectoryWatcher::DirectoryWatcher() { -} - -DirectoryWatcher::~DirectoryWatcher() { - // Declared in .cc file for access to ~DirectoryWatcher::Impl. -} +} // namespace -bool DirectoryWatcher::Watch(const FilePath& path, - Delegate* delegate, bool recursive) { - if (!recursive) { - // See http://crbug.com/5072. - NOTIMPLEMENTED(); - return false; - } - impl_ = new DirectoryWatcher::Impl(delegate); - return impl_->Watch(path); +DirectoryWatcher::DirectoryWatcher() { + impl_ = new DirectoryWatcherImpl(); } |