OLD | NEW |
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 // This module provides a way to monitor a file or directory for changes. | 5 // This module provides a way to monitor a file or directory for changes. |
6 | 6 |
7 #ifndef BASE_FILES_FILE_PATH_WATCHER_H_ | 7 #ifndef BASE_FILES_FILE_PATH_WATCHER_H_ |
8 #define BASE_FILES_FILE_PATH_WATCHER_H_ | 8 #define BASE_FILES_FILE_PATH_WATCHER_H_ |
9 | 9 |
10 #include "base/base_export.h" | 10 #include "base/base_export.h" |
11 #include "base/basictypes.h" | 11 #include "base/basictypes.h" |
12 #include "base/callback.h" | 12 #include "base/callback.h" |
13 #include "base/files/file_path.h" | 13 #include "base/files/file_path.h" |
14 #include "base/memory/ref_counted.h" | 14 #include "base/memory/ref_counted.h" |
15 #include "base/single_thread_task_runner.h" | 15 #include "base/message_loop/message_loop_proxy.h" |
16 | 16 |
17 namespace base { | 17 namespace base { |
18 | 18 |
19 // This class lets you register interest in changes on a FilePath. | 19 // This class lets you register interest in changes on a FilePath. |
20 // The callback will get called whenever the file or directory referenced by the | 20 // The callback will get called whenever the file or directory referenced by the |
21 // FilePath is changed, including created or deleted. Due to limitations in the | 21 // FilePath is changed, including created or deleted. Due to limitations in the |
22 // underlying OS APIs, FilePathWatcher has slightly different semantics on OS X | 22 // underlying OS APIs, FilePathWatcher has slightly different semantics on OS X |
23 // than on Windows or Linux. FilePathWatcher on Linux and Windows will detect | 23 // than on Windows or Linux. FilePathWatcher on Linux and Windows will detect |
24 // modifications to files in a watched directory. FilePathWatcher on Mac will | 24 // modifications to files in a watched directory. FilePathWatcher on Mac will |
25 // detect the creation and deletion of files in a watched directory, but will | 25 // detect the creation and deletion of files in a watched directory, but will |
(...skipping 25 matching lines...) Expand all Loading... |
51 friend class base::RefCountedThreadSafe<PlatformDelegate>; | 51 friend class base::RefCountedThreadSafe<PlatformDelegate>; |
52 friend class FilePathWatcher; | 52 friend class FilePathWatcher; |
53 | 53 |
54 virtual ~PlatformDelegate(); | 54 virtual ~PlatformDelegate(); |
55 | 55 |
56 // Stop watching. This is only called on the thread of the appropriate | 56 // Stop watching. This is only called on the thread of the appropriate |
57 // message loop. Since it can also be called more than once, it should | 57 // message loop. Since it can also be called more than once, it should |
58 // check |is_cancelled()| to avoid duplicate work. | 58 // check |is_cancelled()| to avoid duplicate work. |
59 virtual void CancelOnMessageLoopThread() = 0; | 59 virtual void CancelOnMessageLoopThread() = 0; |
60 | 60 |
61 scoped_refptr<base::SingleThreadTaskRunner> task_runner() const { | 61 scoped_refptr<base::MessageLoopProxy> message_loop() const { |
62 return task_runner_; | 62 return message_loop_; |
63 } | 63 } |
64 | 64 |
65 void set_task_runner( | 65 void set_message_loop(const scoped_refptr<base::MessageLoopProxy>& loop) { |
66 scoped_refptr<base::SingleThreadTaskRunner> task_runner) { | 66 message_loop_ = loop; |
67 task_runner_ = task_runner.Pass(); | |
68 } | 67 } |
69 | 68 |
70 // Must be called before the PlatformDelegate is deleted. | 69 // Must be called before the PlatformDelegate is deleted. |
71 void set_cancelled() { | 70 void set_cancelled() { |
72 cancelled_ = true; | 71 cancelled_ = true; |
73 } | 72 } |
74 | 73 |
75 bool is_cancelled() const { | 74 bool is_cancelled() const { |
76 return cancelled_; | 75 return cancelled_; |
77 } | 76 } |
78 | 77 |
79 private: | 78 private: |
80 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; | 79 scoped_refptr<base::MessageLoopProxy> message_loop_; |
81 bool cancelled_; | 80 bool cancelled_; |
82 }; | 81 }; |
83 | 82 |
84 FilePathWatcher(); | 83 FilePathWatcher(); |
85 virtual ~FilePathWatcher(); | 84 virtual ~FilePathWatcher(); |
86 | 85 |
87 // A callback that always cleans up the PlatformDelegate, either when executed | 86 // A callback that always cleans up the PlatformDelegate, either when executed |
88 // or when deleted without having been executed at all, as can happen during | 87 // or when deleted without having been executed at all, as can happen during |
89 // shutdown. | 88 // shutdown. |
90 static void CancelWatch(const scoped_refptr<PlatformDelegate>& delegate); | 89 static void CancelWatch(const scoped_refptr<PlatformDelegate>& delegate); |
(...skipping 12 matching lines...) Expand all Loading... |
103 | 102 |
104 private: | 103 private: |
105 scoped_refptr<PlatformDelegate> impl_; | 104 scoped_refptr<PlatformDelegate> impl_; |
106 | 105 |
107 DISALLOW_COPY_AND_ASSIGN(FilePathWatcher); | 106 DISALLOW_COPY_AND_ASSIGN(FilePathWatcher); |
108 }; | 107 }; |
109 | 108 |
110 } // namespace base | 109 } // namespace base |
111 | 110 |
112 #endif // BASE_FILES_FILE_PATH_WATCHER_H_ | 111 #endif // BASE_FILES_FILE_PATH_WATCHER_H_ |
OLD | NEW |