Chromium Code Reviews| Index: base/files/file_path_watcher_mac.cc |
| diff --git a/base/files/file_path_watcher_mac.cc b/base/files/file_path_watcher_mac.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..38b7320287b3b386d2dbad792921352eb93e8039 |
| --- /dev/null |
| +++ b/base/files/file_path_watcher_mac.cc |
| @@ -0,0 +1,59 @@ |
| +// Copyright (c) 2014 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. |
| + |
| +#include "base/files/file_path_watcher.h" |
| +#include "base/files/file_path_watcher_kqueue.h" |
| + |
| +#if !defined(OS_IOS) |
| +#include "base/files/file_path_watcher_fsevents.h" |
| +#include "base/mac/mac_util.h" |
| +#endif |
| + |
| +namespace base { |
| + |
| +namespace { |
| + |
| +class FilePathWatcherImpl : public FilePathWatcher::PlatformDelegate { |
| + public: |
| + virtual bool Watch(const FilePath& path, |
| + bool recursive, |
| + const FilePathWatcher::Callback& callback) OVERRIDE { |
| + // Use kqueue for non-recursive watches and FSEvents for recursive ones. |
| + DCHECK(!impl_.get()); |
| +#if !defined(OS_IOS) |
| + if (recursive) { |
| + // FSEvents is broken on 10.6 and earlier. See http://crbug.com/54822#c31 |
| + if (mac::IsOSSnowLeopard()) |
| + return false; |
| + |
| + impl_ = new FilePathWatcherFSEvents(); |
| + } else |
| +#endif // OS_IOS |
|
Mattias Nissler (ping if slow)
2014/05/28 08:08:32
Uh, I'm not so fond of intermixing preprocessor an
vandebo (ex-Chrome)
2014/05/28 18:54:52
Thanks, made it even a bit cleaner.
|
| + impl_ = new FilePathWatcherKQueue(); |
| + return impl_->Watch(path, recursive, callback); |
| + } |
| + |
| + virtual void Cancel() OVERRIDE { |
| + if (impl_) |
| + impl_->Cancel(); |
| + } |
| + |
| + virtual void CancelOnMessageLoopThread() OVERRIDE { |
| + if (impl_) |
| + impl_->Cancel(); |
| + } |
| + |
| + protected: |
| + virtual ~FilePathWatcherImpl() {} |
| + |
| + scoped_refptr<PlatformDelegate> impl_; |
| +}; |
| + |
| +} // namespace |
| + |
| +FilePathWatcher::FilePathWatcher() { |
| + impl_ = new FilePathWatcherImpl(); |
| +} |
| + |
| +} // namespace base |