OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 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 #ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_FILE_MANAGER_EVENT_ROUTE
R_H_ | |
6 #define CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_FILE_MANAGER_EVENT_ROUTE
R_H_ | |
7 | |
8 #include <map> | |
9 #include <string> | |
10 | |
11 #include "base/files/file_path_watcher.h" | |
12 #include "base/memory/scoped_ptr.h" | |
13 #include "chrome/browser/chromeos/drive/drive_integration_service.h" | |
14 #include "chrome/browser/chromeos/drive/file_system_observer.h" | |
15 #include "chrome/browser/chromeos/drive/job_list.h" | |
16 #include "chrome/browser/chromeos/extensions/file_manager/file_watcher_extension
s.h" | |
17 #include "chrome/browser/chromeos/net/connectivity_state_helper_observer.h" | |
18 #include "chrome/browser/drive/drive_service_interface.h" | |
19 #include "chromeos/disks/disk_mount_manager.h" | |
20 | |
21 class PrefChangeRegistrar; | |
22 class Profile; | |
23 | |
24 namespace file_manager { | |
25 | |
26 class DesktopNotifications; | |
27 class MountedDiskMonitor; | |
28 | |
29 // Monitors changes in disk mounts, network connection state and preferences | |
30 // affecting File Manager. Dispatches appropriate File Browser events. | |
31 class FileManagerEventRouter | |
32 : public chromeos::disks::DiskMountManager::Observer, | |
33 public chromeos::ConnectivityStateHelperObserver, | |
34 public drive::DriveIntegrationServiceObserver, | |
35 public drive::FileSystemObserver, | |
36 public drive::JobListObserver, | |
37 public drive::DriveServiceObserver { | |
38 public: | |
39 explicit FileManagerEventRouter(Profile* profile); | |
40 virtual ~FileManagerEventRouter(); | |
41 | |
42 void Shutdown(); | |
43 | |
44 // Starts observing file system change events. | |
45 void ObserveFileSystemEvents(); | |
46 | |
47 typedef base::Callback<void(bool success)> BoolCallback; | |
48 | |
49 // Adds a file watch at |local_path|, associated with |virtual_path|, for | |
50 // an extension with |extension_id|. | |
51 // | |
52 // |callback| will be called with true on success, or false on failure. | |
53 // |callback| must not be null. | |
54 void AddFileWatch(const base::FilePath& local_path, | |
55 const base::FilePath& virtual_path, | |
56 const std::string& extension_id, | |
57 const BoolCallback& callback); | |
58 | |
59 // Removes a file watch at |local_path| for an extension with |extension_id|. | |
60 void RemoveFileWatch(const base::FilePath& local_path, | |
61 const std::string& extension_id); | |
62 | |
63 // CrosDisksClient::Observer overrides. | |
64 virtual void OnDiskEvent( | |
65 chromeos::disks::DiskMountManager::DiskEvent event, | |
66 const chromeos::disks::DiskMountManager::Disk* disk) OVERRIDE; | |
67 virtual void OnDeviceEvent( | |
68 chromeos::disks::DiskMountManager::DeviceEvent event, | |
69 const std::string& device_path) OVERRIDE; | |
70 virtual void OnMountEvent( | |
71 chromeos::disks::DiskMountManager::MountEvent event, | |
72 chromeos::MountError error_code, | |
73 const chromeos::disks::DiskMountManager::MountPointInfo& mount_info) | |
74 OVERRIDE; | |
75 virtual void OnFormatEvent( | |
76 chromeos::disks::DiskMountManager::FormatEvent event, | |
77 chromeos::FormatError error_code, | |
78 const std::string& device_path) OVERRIDE; | |
79 | |
80 // chromeos::ConnectivityStateHelperObserver override. | |
81 virtual void NetworkManagerChanged() OVERRIDE; | |
82 virtual void DefaultNetworkChanged() OVERRIDE; | |
83 | |
84 // drive::JobListObserver overrides. | |
85 virtual void OnJobAdded(const drive::JobInfo& job_info) OVERRIDE; | |
86 virtual void OnJobUpdated(const drive::JobInfo& job_info) OVERRIDE; | |
87 virtual void OnJobDone(const drive::JobInfo& job_info, | |
88 drive::FileError error) OVERRIDE; | |
89 | |
90 // drive::DriveServiceObserver overrides. | |
91 virtual void OnRefreshTokenInvalid() OVERRIDE; | |
92 | |
93 // drive::FileSystemObserver overrides. | |
94 virtual void OnDirectoryChanged( | |
95 const base::FilePath& directory_path) OVERRIDE; | |
96 | |
97 // drive::DriveIntegrationServiceObserver overrides. | |
98 virtual void OnFileSystemMounted() OVERRIDE; | |
99 virtual void OnFileSystemBeingUnmounted() OVERRIDE; | |
100 | |
101 private: | |
102 typedef std::map<base::FilePath, FileWatcherExtensions*> WatcherMap; | |
103 | |
104 // USB mount event handlers. | |
105 void OnDiskAdded(const chromeos::disks::DiskMountManager::Disk* disk); | |
106 void OnDiskRemoved(const chromeos::disks::DiskMountManager::Disk* disk); | |
107 void OnDiskMounted(const chromeos::disks::DiskMountManager::Disk* disk); | |
108 void OnDiskUnmounted(const chromeos::disks::DiskMountManager::Disk* disk); | |
109 void OnDeviceAdded(const std::string& device_path); | |
110 void OnDeviceRemoved(const std::string& device_path); | |
111 void OnDeviceScanned(const std::string& device_path); | |
112 void OnFormatStarted(const std::string& device_path, bool success); | |
113 void OnFormatCompleted(const std::string& device_path, bool success); | |
114 | |
115 // Called on change to kExternalStorageDisabled pref. | |
116 void OnExternalStorageDisabledChanged(); | |
117 | |
118 // Called when prefs related to file manager change. | |
119 void OnFileManagerPrefsChanged(); | |
120 | |
121 // Process file watch notifications. | |
122 void HandleFileWatchNotification(const base::FilePath& path, | |
123 bool got_error); | |
124 | |
125 // Sends directory change event. | |
126 void DispatchDirectoryChangeEvent( | |
127 const base::FilePath& path, | |
128 bool error, | |
129 const FileWatcherExtensions::ExtensionUsageRegistry& extensions); | |
130 | |
131 void DispatchMountEvent( | |
132 chromeos::disks::DiskMountManager::MountEvent event, | |
133 chromeos::MountError error_code, | |
134 const chromeos::disks::DiskMountManager::MountPointInfo& mount_info); | |
135 | |
136 // If needed, opens a file manager window for the removable device mounted at | |
137 // |mount_path|. Disk.mount_path() is empty, since it is being filled out | |
138 // after calling notifying observers by DiskMountManager. | |
139 void ShowRemovableDeviceInFileManager( | |
140 const chromeos::disks::DiskMountManager::Disk& disk, | |
141 const base::FilePath& mount_path); | |
142 | |
143 // Sends onFileTranferUpdated to extensions if needed. If |always| is true, | |
144 // it sends the event always. Otherwise, it sends the event if enough time has | |
145 // passed from the previous event so as not to make extension busy. | |
146 void SendDriveFileTransferEvent(bool always); | |
147 | |
148 // Manages the list of currently active Drive file transfer jobs. | |
149 struct DriveJobInfoWithStatus { | |
150 DriveJobInfoWithStatus(); | |
151 DriveJobInfoWithStatus(const drive::JobInfo& info, | |
152 const std::string& status); | |
153 drive::JobInfo job_info; | |
154 std::string status; | |
155 }; | |
156 std::map<drive::JobID, DriveJobInfoWithStatus> drive_jobs_; | |
157 base::Time last_file_transfer_event_; | |
158 | |
159 base::FilePathWatcher::Callback file_watcher_callback_; | |
160 WatcherMap file_watchers_; | |
161 scoped_ptr<DesktopNotifications> notifications_; | |
162 scoped_ptr<PrefChangeRegistrar> pref_change_registrar_; | |
163 scoped_ptr<MountedDiskMonitor> mounted_disk_monitor_; | |
164 Profile* profile_; | |
165 | |
166 // Note: This should remain the last member so it'll be destroyed and | |
167 // invalidate the weak pointers before any other members are destroyed. | |
168 base::WeakPtrFactory<FileManagerEventRouter> weak_factory_; | |
169 DISALLOW_COPY_AND_ASSIGN(FileManagerEventRouter); | |
170 }; | |
171 | |
172 } // namespace file_manager | |
173 | |
174 #endif // CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_FILE_MANAGER_EVENT_RO
UTER_H_ | |
OLD | NEW |