| // 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. |
| |
| #ifndef NET_FILE_PATH_WATCHER_CALLBACK_H_ |
| #define NET_FILE_PATH_WATCHER_WRAPPER_H_ |
| #pragma once |
| |
| #include <string> |
| |
| #include "base/basictypes.h" |
| #include "base/callback.h" |
| #include "base/file_path.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/threading/non_thread_safe.h" |
| #include "net/base/net_export.h" |
| |
| namespace base { |
| namespace files { |
| class FilePathWatcher; |
| } |
| } |
| |
| namespace net { |
| |
| // Convenience wrapper which holds a FilePathWatcher and a |
| // FilePathWatcher::Delegate which forwards its calls to a Callback. |
| class NET_EXPORT FilePathWatcherWrapper |
| : NON_EXPORTED_BASE(public base::NonThreadSafe) { |
| public: |
| FilePathWatcherWrapper(); |
| // When deleted, automatically cancels the FilePathWatcher. |
| virtual ~FilePathWatcherWrapper(); |
| |
| // Starts watching the file at |path|. Returns true if Watch succeeds. |
| // If so, the delegate will call callback.Run(true) from OnFilePathChanged and |
| // callback.Run(false) from OnFilePathError. After failure the watch is |
| // cancelled and will have to be restarted. If called again, the previous |
| // watch is cancelled. |
| bool Watch(const FilePath& path, |
| const base::Callback<void(bool succeeded)>& callback); |
| |
| bool IsWatching() const; |
| |
| // Cancels the current watch. |
| void Cancel(); |
| |
| protected: |
| // Creates a FilePathWatcher. Override to provide a different implementation. |
| virtual scoped_ptr<base::files::FilePathWatcher> CreateFilePathWatcher(); |
| |
| private: |
| class WatcherDelegate; |
| |
| void OnFilePathChanged(); |
| void OnFilePathError(); |
| |
| base::Callback<void(bool succeeded)> callback_; |
| scoped_ptr<base::files::FilePathWatcher> watcher_; |
| scoped_refptr<WatcherDelegate> delegate_; |
| DISALLOW_COPY_AND_ASSIGN(FilePathWatcherWrapper); |
| }; |
| |
| } // namespace net |
| |
| #endif // NET_FILE_PATH_WATCHER_CALLBACK_H_ |
| |