1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Cross platform methods for FilePathWatcher. See the various platform 6 // specific implementation files, too. 7 8 #include "base/files/file_path_watcher.h" 9 10 #include "base/logging.h" 11 #include "base/message_loop/message_loop.h" 12 #include "build/build_config.h" 13 14 #if defined(OS_MACOSX) && !defined(OS_IOS) 15 #include "base/mac/mac_util.h" 16 #endif 17 18 namespace base { 19 20 FilePathWatcher::~FilePathWatcher() { 21 impl_->Cancel(); 22 } 23 24 // static 25 void FilePathWatcher::CancelWatch( 26 const scoped_refptr<PlatformDelegate>& delegate) { 27 delegate->CancelOnMessageLoopThread(); 28 } 29 30 // static 31 bool FilePathWatcher::RecursiveWatchAvailable() { 32 #if defined(OS_MACOSX) && !defined(OS_IOS) 33 // FSEvents isn't available on iOS and is broken on OSX 10.6 and earlier. 34 // See http://crbug.com/54822#c31 35 return mac::IsOSLionOrLater(); 36 #elif defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID) 37 return true; 38 #else 39 return false; 40 #endif 41 } 42 43 FilePathWatcher::PlatformDelegate::PlatformDelegate(): cancelled_(false) { 44 } 45 46 FilePathWatcher::PlatformDelegate::~PlatformDelegate() { 47 DCHECK(is_cancelled()); 48 } 49 50 bool FilePathWatcher::Watch(const FilePath& path, 51 bool recursive, 52 const Callback& callback) { 53 DCHECK(path.IsAbsolute()); 54 return impl_->Watch(path, recursive, callback); 55 } 56 57 } // namespace base 58