// 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. #ifndef CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_WATCHER_H_ #define CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_WATCHER_H_ #include #include #include #include "base/callback.h" #include "base/files/file_path.h" #include "storage/browser/fileapi/watcher_manager.h" #include "url/gurl.h" namespace chromeos { namespace file_system_provider { struct Watcher; struct Subscriber; // Key for storing a watcher in the map. There may be two watchers per path, // as long as one is recursive, and the other one not. struct WatcherKey { WatcherKey(const base::FilePath& entry_path, bool recursive); ~WatcherKey(); struct Comparator { bool operator()(const WatcherKey& a, const WatcherKey& b) const; }; base::FilePath entry_path; bool recursive; }; // List of watchers. typedef std::map Watchers; // Map of subscribers for notifications about a watcher. typedef std::map Subscribers; // Represents a subscriber for notification about a watcher. There may be up to // one subscriber per origin for the same watcher. struct Subscriber { Subscriber(); ~Subscriber(); // Origin of the subscriber. GURL origin; // Whether the subscriber should be restored after shutdown or not. bool persistent; // Callback to be called for each watcher notification. It's optional, but // not allowed for persistent watchers. In case of persistent subscribers, // the notification should be handled using observers, as the callback can't // be restored after shutdown. storage::WatcherManager::NotificationCallback notification_callback; }; // Represents a watcher on a file system. struct Watcher { Watcher(); ~Watcher(); // Map of subscribers for notifications of the watcher. Subscribers subscribers; // Path of the watcher. base::FilePath entry_path; // Whether watching is recursive or not. bool recursive; // Tag of the last notification for this watcher. May be empty if not // supported. std::string last_tag; }; } // namespace file_system_provider } // namespace chromeos #endif // CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_WATCHER_H_