mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
61 lines
1.4 KiB
C++
61 lines
1.4 KiB
C++
// Copyright 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"
|
|
#endif
|
|
|
|
namespace base {
|
|
|
|
namespace {
|
|
|
|
class FilePathWatcherImpl : public FilePathWatcher::PlatformDelegate {
|
|
public:
|
|
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 (recursive) {
|
|
if (!FilePathWatcher::RecursiveWatchAvailable())
|
|
return false;
|
|
#if !defined(OS_IOS)
|
|
impl_ = new FilePathWatcherFSEvents();
|
|
#endif // OS_IOS
|
|
} else {
|
|
impl_ = new FilePathWatcherKQueue();
|
|
}
|
|
DCHECK(impl_.get());
|
|
return impl_->Watch(path, recursive, callback);
|
|
}
|
|
|
|
void Cancel() override {
|
|
if (impl_.get())
|
|
impl_->Cancel();
|
|
set_cancelled();
|
|
}
|
|
|
|
void CancelOnMessageLoopThread() override {
|
|
if (impl_.get())
|
|
impl_->Cancel();
|
|
set_cancelled();
|
|
}
|
|
|
|
protected:
|
|
~FilePathWatcherImpl() override {}
|
|
|
|
scoped_refptr<PlatformDelegate> impl_;
|
|
};
|
|
|
|
} // namespace
|
|
|
|
FilePathWatcher::FilePathWatcher() {
|
|
impl_ = new FilePathWatcherImpl();
|
|
}
|
|
|
|
} // namespace base
|