xref: /aosp_15_r20/external/cronet/base/files/file_path_watcher.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2011 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker // Cross platform methods for FilePathWatcher. See the various platform
6*6777b538SAndroid Build Coastguard Worker // specific implementation files, too.
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include "base/files/file_path_watcher.h"
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker #include <memory>
11*6777b538SAndroid Build Coastguard Worker #include <utility>
12*6777b538SAndroid Build Coastguard Worker 
13*6777b538SAndroid Build Coastguard Worker #include "base/check.h"
14*6777b538SAndroid Build Coastguard Worker #include "base/files/file_path.h"
15*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h"
16*6777b538SAndroid Build Coastguard Worker 
17*6777b538SAndroid Build Coastguard Worker namespace base {
18*6777b538SAndroid Build Coastguard Worker 
~FilePathWatcher()19*6777b538SAndroid Build Coastguard Worker FilePathWatcher::~FilePathWatcher() {
20*6777b538SAndroid Build Coastguard Worker   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
21*6777b538SAndroid Build Coastguard Worker   impl_->Cancel();
22*6777b538SAndroid Build Coastguard Worker }
23*6777b538SAndroid Build Coastguard Worker 
24*6777b538SAndroid Build Coastguard Worker // static
RecursiveWatchAvailable()25*6777b538SAndroid Build Coastguard Worker bool FilePathWatcher::RecursiveWatchAvailable() {
26*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) ||        \
27*6777b538SAndroid Build Coastguard Worker     BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_AIX) || \
28*6777b538SAndroid Build Coastguard Worker     BUILDFLAG(IS_FUCHSIA)
29*6777b538SAndroid Build Coastguard Worker   return true;
30*6777b538SAndroid Build Coastguard Worker #else
31*6777b538SAndroid Build Coastguard Worker   // FSEvents isn't available on iOS.
32*6777b538SAndroid Build Coastguard Worker   return false;
33*6777b538SAndroid Build Coastguard Worker #endif
34*6777b538SAndroid Build Coastguard Worker }
35*6777b538SAndroid Build Coastguard Worker 
36*6777b538SAndroid Build Coastguard Worker FilePathWatcher::PlatformDelegate::PlatformDelegate() = default;
37*6777b538SAndroid Build Coastguard Worker 
~PlatformDelegate()38*6777b538SAndroid Build Coastguard Worker FilePathWatcher::PlatformDelegate::~PlatformDelegate() {
39*6777b538SAndroid Build Coastguard Worker   DCHECK(is_cancelled());
40*6777b538SAndroid Build Coastguard Worker }
41*6777b538SAndroid Build Coastguard Worker 
Watch(const FilePath & path,Type type,const Callback & callback)42*6777b538SAndroid Build Coastguard Worker bool FilePathWatcher::Watch(const FilePath& path,
43*6777b538SAndroid Build Coastguard Worker                             Type type,
44*6777b538SAndroid Build Coastguard Worker                             const Callback& callback) {
45*6777b538SAndroid Build Coastguard Worker   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
46*6777b538SAndroid Build Coastguard Worker   DCHECK(path.IsAbsolute());
47*6777b538SAndroid Build Coastguard Worker   return impl_->Watch(path, type, callback);
48*6777b538SAndroid Build Coastguard Worker }
49*6777b538SAndroid Build Coastguard Worker 
WatchWithOptions(const FilePath & path,const WatchOptions & options,const Callback & callback)50*6777b538SAndroid Build Coastguard Worker bool FilePathWatcher::WatchWithOptions(const FilePath& path,
51*6777b538SAndroid Build Coastguard Worker                                        const WatchOptions& options,
52*6777b538SAndroid Build Coastguard Worker                                        const Callback& callback) {
53*6777b538SAndroid Build Coastguard Worker   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
54*6777b538SAndroid Build Coastguard Worker   DCHECK(path.IsAbsolute());
55*6777b538SAndroid Build Coastguard Worker   return impl_->WatchWithOptions(path, options, callback);
56*6777b538SAndroid Build Coastguard Worker }
57*6777b538SAndroid Build Coastguard Worker 
WatchWithChangeInfo(const FilePath & path,const WatchOptions & options,const CallbackWithChangeInfo & callback)58*6777b538SAndroid Build Coastguard Worker bool FilePathWatcher::WatchWithChangeInfo(
59*6777b538SAndroid Build Coastguard Worker     const FilePath& path,
60*6777b538SAndroid Build Coastguard Worker     const WatchOptions& options,
61*6777b538SAndroid Build Coastguard Worker     const CallbackWithChangeInfo& callback) {
62*6777b538SAndroid Build Coastguard Worker   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
63*6777b538SAndroid Build Coastguard Worker   DCHECK(path.IsAbsolute());
64*6777b538SAndroid Build Coastguard Worker   return impl_->WatchWithChangeInfo(path, options, callback);
65*6777b538SAndroid Build Coastguard Worker }
66*6777b538SAndroid Build Coastguard Worker 
WatchWithOptions(const FilePath & path,const WatchOptions & options,const Callback & callback)67*6777b538SAndroid Build Coastguard Worker bool FilePathWatcher::PlatformDelegate::WatchWithOptions(
68*6777b538SAndroid Build Coastguard Worker     const FilePath& path,
69*6777b538SAndroid Build Coastguard Worker     const WatchOptions& options,
70*6777b538SAndroid Build Coastguard Worker     const Callback& callback) {
71*6777b538SAndroid Build Coastguard Worker   return Watch(path, options.type, callback);
72*6777b538SAndroid Build Coastguard Worker }
73*6777b538SAndroid Build Coastguard Worker 
WatchWithChangeInfo(const FilePath & path,const WatchOptions & options,const CallbackWithChangeInfo & callback)74*6777b538SAndroid Build Coastguard Worker bool FilePathWatcher::PlatformDelegate::WatchWithChangeInfo(
75*6777b538SAndroid Build Coastguard Worker     const FilePath& path,
76*6777b538SAndroid Build Coastguard Worker     const WatchOptions& options,
77*6777b538SAndroid Build Coastguard Worker     const CallbackWithChangeInfo& callback) {
78*6777b538SAndroid Build Coastguard Worker   return Watch(path, options.type, base::BindRepeating(callback, ChangeInfo()));
79*6777b538SAndroid Build Coastguard Worker }
80*6777b538SAndroid Build Coastguard Worker 
FilePathWatcher(std::unique_ptr<PlatformDelegate> delegate)81*6777b538SAndroid Build Coastguard Worker FilePathWatcher::FilePathWatcher(std::unique_ptr<PlatformDelegate> delegate) {
82*6777b538SAndroid Build Coastguard Worker   DETACH_FROM_SEQUENCE(sequence_checker_);
83*6777b538SAndroid Build Coastguard Worker   impl_ = std::move(delegate);
84*6777b538SAndroid Build Coastguard Worker }
85*6777b538SAndroid Build Coastguard Worker 
86*6777b538SAndroid Build Coastguard Worker }  // namespace base
87