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

Side by Side Diff: base/files/file_path_watcher_linux.cc

Issue 11415066: FilePathWatcher::Watch() - Listen for sub directory changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added more test cases Created 8 years 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/files/file_path_watcher_kqueue.cc ('k') | base/files/file_path_watcher_stub.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/files/file_path_watcher.h" 5 #include "base/files/file_path_watcher.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 #include <string.h> 8 #include <string.h>
9 #include <sys/inotify.h> 9 #include <sys/inotify.h>
10 #include <sys/ioctl.h> 10 #include <sys/ioctl.h>
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 // watch that fired, |child| indicates what has changed, and is relative to 93 // watch that fired, |child| indicates what has changed, and is relative to
94 // the currently watched path for |fired_watch|. The flag |created| is true if 94 // the currently watched path for |fired_watch|. The flag |created| is true if
95 // the object appears. 95 // the object appears.
96 void OnFilePathChanged(InotifyReader::Watch fired_watch, 96 void OnFilePathChanged(InotifyReader::Watch fired_watch,
97 const FilePath::StringType& child, 97 const FilePath::StringType& child,
98 bool created); 98 bool created);
99 99
100 // Start watching |path| for changes and notify |delegate| on each change. 100 // Start watching |path| for changes and notify |delegate| on each change.
101 // Returns true if watch for |path| has been added successfully. 101 // Returns true if watch for |path| has been added successfully.
102 virtual bool Watch(const FilePath& path, 102 virtual bool Watch(const FilePath& path,
103 bool recursive,
103 FilePathWatcher::Delegate* delegate) OVERRIDE; 104 FilePathWatcher::Delegate* delegate) OVERRIDE;
104 105
105 // Cancel the watch. This unregisters the instance with InotifyReader. 106 // Cancel the watch. This unregisters the instance with InotifyReader.
106 virtual void Cancel() OVERRIDE; 107 virtual void Cancel() OVERRIDE;
107 108
108 // Deletion of the FilePathWatcher will call Cancel() to dispose of this 109 // Deletion of the FilePathWatcher will call Cancel() to dispose of this
109 // object in the right thread. This also observes destruction of the required 110 // object in the right thread. This also observes destruction of the required
110 // cleanup thread, in case it quits before Cancel() is called. 111 // cleanup thread, in case it quits before Cancel() is called.
111 virtual void WillDestroyCurrentMessageLoop() OVERRIDE; 112 virtual void WillDestroyCurrentMessageLoop() OVERRIDE;
112 113
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 (change_on_target_path && !created) || 355 (change_on_target_path && !created) ||
355 (change_on_target_path && file_util::PathExists(target_))) { 356 (change_on_target_path && file_util::PathExists(target_))) {
356 delegate_->OnFilePathChanged(target_); 357 delegate_->OnFilePathChanged(target_);
357 return; 358 return;
358 } 359 }
359 } 360 }
360 } 361 }
361 } 362 }
362 363
363 bool FilePathWatcherImpl::Watch(const FilePath& path, 364 bool FilePathWatcherImpl::Watch(const FilePath& path,
365 bool recursive,
364 FilePathWatcher::Delegate* delegate) { 366 FilePathWatcher::Delegate* delegate) {
365 DCHECK(target_.empty()); 367 DCHECK(target_.empty());
366 DCHECK(MessageLoopForIO::current()); 368 DCHECK(MessageLoopForIO::current());
369 if (recursive) {
370 // Recursive watch is not supported on this platform.
371 NOTIMPLEMENTED();
372 return false;
373 }
367 374
368 set_message_loop(base::MessageLoopProxy::current()); 375 set_message_loop(base::MessageLoopProxy::current());
369 delegate_ = delegate; 376 delegate_ = delegate;
370 target_ = path; 377 target_ = path;
371 MessageLoop::current()->AddDestructionObserver(this); 378 MessageLoop::current()->AddDestructionObserver(this);
372 379
373 std::vector<FilePath::StringType> comps; 380 std::vector<FilePath::StringType> comps;
374 target_.GetComponents(&comps); 381 target_.GetComponents(&comps);
375 DCHECK(!comps.empty()); 382 DCHECK(!comps.empty());
376 std::vector<FilePath::StringType>::const_iterator comp = comps.begin(); 383 std::vector<FilePath::StringType>::const_iterator comp = comps.begin();
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 } 481 }
475 482
476 } // namespace 483 } // namespace
477 484
478 FilePathWatcher::FilePathWatcher() { 485 FilePathWatcher::FilePathWatcher() {
479 impl_ = new FilePathWatcherImpl(); 486 impl_ = new FilePathWatcherImpl();
480 } 487 }
481 488
482 } // namespace files 489 } // namespace files
483 } // namespace base 490 } // namespace base
OLDNEW
« no previous file with comments | « base/files/file_path_watcher_kqueue.cc ('k') | base/files/file_path_watcher_stub.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698