15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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) 52385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_EVENT_ROUTER_H_ 62385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_EVENT_ROUTER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/basictypes.h" 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/compiler_specific.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/files/file_path_watcher.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/drive/drive_integration_service.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/drive/file_system_observer.h" 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/chromeos/drive/job_list.h" 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/drive/sync_client.h" 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/chromeos/file_manager/file_watcher.h" 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/chromeos/file_manager/fileapi_util.h" 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/chromeos/file_manager/volume_manager.h" 2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/chromeos/file_manager/volume_manager_observer.h" 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/drive/drive_service_interface.h" 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/common/extensions/api/file_manager_private.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/disks/disk_mount_manager.h" 26ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chromeos/network/network_state_handler_observer.h" 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/keyed_service/core/keyed_service.h" 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/fileapi/file_system_operation.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrefChangeRegistrar; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Profile; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using file_manager::util::EntryDefinition; 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace base { 3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class ListValue; 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 39ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochnamespace chromeos { 40ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass NetworkState; 41ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 42ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace drive { 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass FileChange; 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 47a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)namespace file_manager { 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass DeviceEventRouter; 49a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Monitors changes in disk mounts, network connection state and preferences 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// affecting File Manager. Dispatches appropriate File Browser events. 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass EventRouter : public KeyedService, 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public chromeos::NetworkStateHandlerObserver, 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public drive::FileSystemObserver, 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public drive::JobListObserver, 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public drive::DriveServiceObserver, 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public VolumeManagerObserver, 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public content::NotificationObserver { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 602385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch explicit EventRouter(Profile* profile); 612385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch virtual ~EventRouter(); 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // KeyedService overrides. 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void Shutdown() OVERRIDE; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef base::Callback<void(bool success)> BoolCallback; 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Adds a file watch at |local_path|, associated with |virtual_path|, for 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // an extension with |extension_id|. 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |callback| will be called with true on success, or false on failure. 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |callback| must not be null. 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void AddFileWatch(const base::FilePath& local_path, 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& virtual_path, 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& extension_id, 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const BoolCallback& callback); 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Removes a file watch at |local_path| for an extension with |extension_id|. 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void RemoveFileWatch(const base::FilePath& local_path, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Called when a copy task is completed. 8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void OnCopyCompleted( 8468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int copy_id, const GURL& source_url, const GURL& destination_url, 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::File::Error error); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 87d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Called when a copy task progress is updated. 88d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) void OnCopyProgress(int copy_id, 8903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::FileSystemOperation::CopyProgressType type, 9068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const GURL& source_url, 9168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const GURL& destination_url, 92d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) int64 size); 93d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 94ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // chromeos::NetworkStateHandlerObserver overrides. 95ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch virtual void DefaultNetworkChanged( 96ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const chromeos::NetworkState* network) OVERRIDE; 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // drive::JobListObserver overrides. 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void OnJobAdded(const drive::JobInfo& job_info) OVERRIDE; 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void OnJobUpdated(const drive::JobInfo& job_info) OVERRIDE; 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void OnJobDone(const drive::JobInfo& job_info, 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) drive::FileError error) OVERRIDE; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // drive::DriveServiceObserver overrides. 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnRefreshTokenInvalid() OVERRIDE; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // drive::FileSystemObserver overrides. 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnDirectoryChanged(const base::FilePath& drive_path) OVERRIDE; 109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void OnFileChanged(const drive::FileChange& changed_files) OVERRIDE; 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnDriveSyncError(drive::file_system::DriveSyncErrorType type, 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::FilePath& drive_path) OVERRIDE; 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 11358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // VolumeManagerObserver overrides. 11458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void OnDiskAdded( 11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const chromeos::disks::DiskMountManager::Disk& disk, 11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool mounting) OVERRIDE; 11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void OnDiskRemoved( 11858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const chromeos::disks::DiskMountManager::Disk& disk) OVERRIDE; 11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void OnDeviceAdded(const std::string& device_path) OVERRIDE; 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void OnDeviceRemoved(const std::string& device_path) OVERRIDE; 12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void OnVolumeMounted(chromeos::MountError error_code, 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const VolumeInfo& volume_info) OVERRIDE; 12358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void OnVolumeUnmounted(chromeos::MountError error_code, 12458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const VolumeInfo& volume_info) OVERRIDE; 12558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void OnFormatStarted( 12658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const std::string& device_path, bool success) OVERRIDE; 12758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void OnFormatCompleted( 12858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const std::string& device_path, bool success) OVERRIDE; 12958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // content::NotificationObserver overrides. 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void Observe(int type, 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const content::NotificationSource& source, 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const content::NotificationDetails& details) OVERRIDE; 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1362385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch typedef std::map<base::FilePath, FileWatcher*> WatcherMap; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Starts observing file system change events. 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void ObserveEvents(); 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Called when prefs related to file manager change. 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnFileManagerPrefsChanged(); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Process file watch notifications. 145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void HandleFileWatchNotification(const drive::FileChange* list, 146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::FilePath& path, 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool got_error); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sends directory change event. 1507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void DispatchDirectoryChangeEvent( 1517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::FilePath& path, 152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const drive::FileChange* list, 153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool got_error, 154bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch const std::vector<std::string>& extension_ids); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 156a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Sends directory change event, after converting the file definition to entry 157a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // definition. 158a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void DispatchDirectoryChangeEventWithEntryDefinition( 159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const linked_ptr<drive::FileChange> list, 160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string* extension_id, 161a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool watcher_error, 162a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const EntryDefinition& entry_definition); 163a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Dispatches the mount completed event. 165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void DispatchMountCompletedEvent( 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extensions::api::file_manager_private::MountCompletedEventType event_type, 167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chromeos::MountError error, 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const VolumeInfo& volume_info); 169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If needed, opens a file manager window for the removable device mounted at 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |mount_path|. Disk.mount_path() is empty, since it is being filled out 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // after calling notifying observers by DiskMountManager. 1735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void ShowRemovableDeviceInFileManager(VolumeType type, 1745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::FilePath& mount_path); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Manages the list of currently active Drive file transfer jobs. 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) struct DriveJobInfoWithStatus { 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DriveJobInfoWithStatus(); 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DriveJobInfoWithStatus(const drive::JobInfo& info, 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& status); 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) drive::JobInfo job_info; 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string status; 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Sends onFileTransferUpdate event right now if |immediate| is set. Otherwise 1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // it refrains from sending for a short while, and after that it sends the 1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // most recently scheduled event once. 1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The delay is for waiting subsequent 'added' events to come after the first 1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // one when multiple tasks are added. This way, we can avoid frequent UI 1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // update caused by differences between singular and plural cases. 1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void ScheduleDriveFileTransferEvent(const drive::JobInfo& job_info, 1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& status, 1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool immediate); 1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Sends the most recently scheduled onFileTransferUpdated event to 1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // extensions. 1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // This is used for implementing ScheduledDriveFileTransferEvent(). 1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SendDriveFileTransferEvent(); 1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::map<drive::JobID, DriveJobInfoWithStatus> drive_jobs_; 2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<DriveJobInfoWithStatus> drive_job_info_for_scheduled_event_; 202c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::Time last_copy_progress_event_; 2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Time next_send_file_transfer_event_; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WatcherMap file_watchers_; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<PrefChangeRegistrar> pref_change_registrar_; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile_; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::NotificationRegistrar notification_registrar_; 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<DeviceEventRouter> device_event_router_; 2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Note: This should remain the last member so it'll be destroyed and 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // invalidate the weak pointers before any other members are destroyed. 2152385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch base::WeakPtrFactory<EventRouter> weak_factory_; 2162385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch DISALLOW_COPY_AND_ASSIGN(EventRouter); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 219a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} // namespace file_manager 220a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 2212385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#endif // CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_EVENT_ROUTER_H_ 222