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

Unified Diff: base/files/file_path_watcher_win.cc

Issue 11876025: Eliminate FilePathWatcher::Delegate. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 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/files/file_path_watcher_stub.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/files/file_path_watcher_win.cc
diff --git a/base/files/file_path_watcher_win.cc b/base/files/file_path_watcher_win.cc
index c25260ce0345680b2de35b3964b583c65b30cf49..4df9d0d1e6394ab3ab8954faf2e3db23aac644f8 100644
--- a/base/files/file_path_watcher_win.cc
+++ b/base/files/file_path_watcher_win.cc
@@ -23,14 +23,13 @@ class FilePathWatcherImpl : public FilePathWatcher::PlatformDelegate,
public MessageLoop::DestructionObserver {
public:
FilePathWatcherImpl()
- : delegate_(NULL),
- handle_(INVALID_HANDLE_VALUE),
+ : handle_(INVALID_HANDLE_VALUE),
recursive_watch_(false) {}
// FilePathWatcher::PlatformDelegate overrides.
virtual bool Watch(const FilePath& path,
bool recursive,
- FilePathWatcher::Delegate* delegate) OVERRIDE;
+ const FilePathWatcher::Callback& callback) OVERRIDE;
virtual void Cancel() OVERRIDE;
// Deletion of the FilePathWatcher will call Cancel() to dispose of this
@@ -61,10 +60,10 @@ class FilePathWatcherImpl : public FilePathWatcher::PlatformDelegate,
// Cleans up and stops observing the |message_loop_| thread.
void CancelOnMessageLoopThread() OVERRIDE;
- // Delegate to notify upon changes.
- scoped_refptr<FilePathWatcher::Delegate> delegate_;
+ // Callback to notify upon changes.
+ FilePathWatcher::Callback callback_;
- // Path we're supposed to watch (passed to delegate).
+ // Path we're supposed to watch (passed to callback).
FilePath target_;
// Handle for FindFirstChangeNotification.
@@ -89,11 +88,11 @@ class FilePathWatcherImpl : public FilePathWatcher::PlatformDelegate,
bool FilePathWatcherImpl::Watch(const FilePath& path,
bool recursive,
- FilePathWatcher::Delegate* delegate) {
+ const FilePathWatcher::Callback& callback) {
DCHECK(target_.value().empty()); // Can only watch one path.
set_message_loop(base::MessageLoopProxy::current());
- delegate_ = delegate;
+ callback_ = callback;
target_ = path;
recursive_watch_ = recursive;
MessageLoop::current()->AddDestructionObserver(this);
@@ -107,7 +106,7 @@ bool FilePathWatcherImpl::Watch(const FilePath& path,
}
void FilePathWatcherImpl::Cancel() {
- if (!delegate_) {
+ if (callback_.is_null()) {
// Watch was never called, or the |message_loop_| has already quit.
set_cancelled();
return;
@@ -129,9 +128,9 @@ void FilePathWatcherImpl::CancelOnMessageLoopThread() {
if (handle_ != INVALID_HANDLE_VALUE)
DestroyWatch();
- if (delegate_) {
+ if (!callback_.is_null()) {
MessageLoop::current()->RemoveDestructionObserver(this);
- delegate_ = NULL;
+ callback_.Reset();
}
}
@@ -145,18 +144,18 @@ void FilePathWatcherImpl::OnObjectSignaled(HANDLE object) {
scoped_refptr<FilePathWatcherImpl> keep_alive(this);
if (!UpdateWatch()) {
- delegate_->OnFilePathError(target_);
+ callback_.Run(target_, true /* error */);
return;
}
- // Check whether the event applies to |target_| and notify the delegate.
+ // Check whether the event applies to |target_| and notify the callback.
base::PlatformFileInfo file_info;
bool file_exists = file_util::GetFileInfo(target_, &file_info);
if (file_exists && (last_modified_.is_null() ||
last_modified_ != file_info.last_modified)) {
last_modified_ = file_info.last_modified;
first_notification_ = base::Time::Now();
- delegate_->OnFilePathChanged(target_);
+ callback_.Run(target_, false);
} else if (file_exists && !first_notification_.is_null()) {
// The target's last modification time is equal to what's on record. This
// means that either an unrelated event occurred, or the target changed
@@ -177,10 +176,10 @@ void FilePathWatcherImpl::OnObjectSignaled(HANDLE object) {
// Stop further notifications for this |last_modification_| time stamp.
first_notification_ = base::Time();
}
- delegate_->OnFilePathChanged(target_);
+ callback_.Run(target_, false);
} else if (!file_exists && !last_modified_.is_null()) {
last_modified_ = base::Time();
- delegate_->OnFilePathChanged(target_);
+ callback_.Run(target_, false);
}
// The watch may have been cancelled by the callback.
« no previous file with comments | « base/files/file_path_watcher_stub.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698