15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Cross platform methods for FilePathWatcher. See the various platform 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// specific implementation files, too. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/files/file_path_watcher.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 11ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/message_loop/message_loop.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(OS_MACOSX) && !defined(OS_IOS) 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/mac/mac_util.h" 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FilePathWatcher::~FilePathWatcher() { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) impl_->Cancel(); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FilePathWatcher::CancelWatch( 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const scoped_refptr<PlatformDelegate>& delegate) { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate->CancelOnMessageLoopThread(); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// static 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)bool FilePathWatcher::RecursiveWatchAvailable() { 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(OS_MACOSX) && !defined(OS_IOS) 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // FSEvents isn't available on iOS and is broken on OSX 10.6 and earlier. 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // See http://crbug.com/54822#c31 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return mac::IsOSLionOrLater(); 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#elif defined(OS_WIN) || defined(OS_LINUX) 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return true; 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#else 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return false; 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FilePathWatcher::PlatformDelegate::PlatformDelegate(): cancelled_(false) { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FilePathWatcher::PlatformDelegate::~PlatformDelegate() { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(is_cancelled()); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool FilePathWatcher::Watch(const FilePath& path, 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool recursive, 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Callback& callback) { 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(path.IsAbsolute()); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return impl_->Watch(path, recursive, callback); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace base 57