diff options
author | hashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-17 07:49:55 +0000 |
---|---|---|
committer | hashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-17 07:49:55 +0000 |
commit | b307bceb5f8f104022a5f306a35c2d2bd161641f (patch) | |
tree | 9e109f0235bf0565fe022ed1f3dbf4011bc4bd07 | |
parent | 8004a4cb0bf6959d5df10c0e4aac90e00e7d4dd7 (diff) | |
download | chromium_src-b307bceb5f8f104022a5f306a35c2d2bd161641f.zip chromium_src-b307bceb5f8f104022a5f306a35c2d2bd161641f.tar.gz chromium_src-b307bceb5f8f104022a5f306a35c2d2bd161641f.tar.bz2 |
Switch from MountLibrary to DiskMountManager and CrosDisksLibrary
This patch is 2nd part of 3 splitted patches made from http://codereview.chromium.org/8386031
BUG=chromium-os:16556
TEST=Confirm that removable disk is correctly mounted
Review URL: http://codereview.chromium.org/8497007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@110469 0039d316-1c4b-4281-b951-d872f2087c98
14 files changed, 373 insertions, 374 deletions
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc index 856660f..b09aa5d 100644 --- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc +++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc @@ -16,6 +16,7 @@ #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" #include "chrome/browser/chromeos/dbus/power_manager_client.h" #include "chrome/browser/chromeos/dbus/session_manager_client.h" +#include "chrome/browser/chromeos/disks/disk_mount_manager.h" #include "chrome/browser/chromeos/input_method/input_method_manager.h" #include "chrome/browser/chromeos/input_method/xkeyboard.h" #include "chrome/browser/chromeos/login/session_manager_observer.h" @@ -93,6 +94,8 @@ ChromeBrowserMainPartsChromeos::~ChromeBrowserMainPartsChromeos() { if (chromeos::CrosNetworkChangeNotifierFactory::GetInstance()) chromeos::CrosNetworkChangeNotifierFactory::GetInstance()->Shutdown(); + chromeos::disks::DiskMountManager::Shutdown(); + chromeos::BluetoothManager::Shutdown(); // We should remove observers attached to D-Bus clients before @@ -181,6 +184,9 @@ void ChromeBrowserMainPartsChromeos::PostMainMessageLoopStart() { chromeos::DBusThreadManager::Get()->GetSessionManagerClient()-> AddObserver(session_manager_observer_.get()); + // Initialize the disk mount manager. + chromeos::disks::DiskMountManager::Initialize(); + // Initialize the network change notifier for Chrome OS. The network // change notifier starts to monitor changes from the power manager and // the network manager. diff --git a/chrome/browser/chromeos/cros/burn_library.cc b/chrome/browser/chromeos/cros/burn_library.cc index 007005c..c5e8332 100644 --- a/chrome/browser/chromeos/cros/burn_library.cc +++ b/chrome/browser/chromeos/cros/burn_library.cc @@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/memory/linked_ptr.h" #include "chrome/browser/chromeos/cros/cros_library.h" +#include "chrome/browser/chromeos/disks/disk_mount_manager.h" #include "chrome/common/zip.h" #include "content/public/browser/browser_thread.h" @@ -185,9 +186,10 @@ void BurnLibraryImpl::OnImageUnzipped() { burning_ = true; - chromeos::CrosLibrary::Get()->GetMountLibrary()->UnmountDeviceRecursive( - target_device_path_.c_str(), &BurnLibraryImpl::DevicesUnmountedCallback, - this); + chromeos::disks::DiskMountManager::GetInstance()-> + UnmountDeviceRecursive(target_device_path_, + &BurnLibraryImpl::DevicesUnmountedCallback, + this); } void BurnLibraryImpl::DevicesUnmountedCallback(void* object, bool success) { diff --git a/chrome/browser/chromeos/cros/burn_library.h b/chrome/browser/chromeos/cros/burn_library.h index 838a63f..5f0ed58 100644 --- a/chrome/browser/chromeos/cros/burn_library.h +++ b/chrome/browser/chromeos/cros/burn_library.h @@ -13,7 +13,6 @@ #include "base/file_util.h" #include "base/memory/weak_ptr.h" #include "base/observer_list.h" -#include "chrome/browser/chromeos/cros/mount_library.h" #include "third_party/cros/chromeos_imageburn.h" struct ImageBurnStatus { diff --git a/chrome/browser/chromeos/dbus/cros_disks_client.cc b/chrome/browser/chromeos/dbus/cros_disks_client.cc index b5c92b0..e6b01c4 100644 --- a/chrome/browser/chromeos/dbus/cros_disks_client.cc +++ b/chrome/browser/chromeos/dbus/cros_disks_client.cc @@ -5,7 +5,7 @@ #include "chrome/browser/chromeos/dbus/cros_disks_client.h" #include "base/bind.h" -#include "base/memory/scoped_vector.h" +#include "base/stl_util.h" #include "chrome/browser/chromeos/system/runtime_environment.h" #include "dbus/bus.h" #include "dbus/message.h" @@ -476,12 +476,11 @@ void DiskInfo::InitializeFromResponse(dbus::Response* response) { return; } // TODO(satorux): Rework this code using Protocol Buffers. crosbug.com/22626 - ScopedVector<dbus::MessageReader> value_readers_owner; - std::map<std::string, dbus::MessageReader*> properties; + typedef std::map<std::string, dbus::MessageReader*> PropertiesMap; + PropertiesMap properties; + STLValueDeleter<PropertiesMap> properties_value_deleter(&properties); while (array_reader.HasMoreData()) { - // |value_readers_owner| is responsible to delete |value_reader|. dbus::MessageReader* value_reader = new dbus::MessageReader(response); - value_readers_owner.push_back(value_reader); dbus::MessageReader dict_entry_reader(response); std::string key; if (!array_reader.PopDictEntry(&dict_entry_reader) || diff --git a/chrome/browser/chromeos/disks/disk_mount_manager.cc b/chrome/browser/chromeos/disks/disk_mount_manager.cc index 0e2a26b..5e10c58 100644 --- a/chrome/browser/chromeos/disks/disk_mount_manager.cc +++ b/chrome/browser/chromeos/disks/disk_mount_manager.cc @@ -328,7 +328,8 @@ class DiskMountManagerImpl : public DiskMountManager { // Check if there is a formatting scheduled. PathMap::iterator it = formatting_pending_.find(disk->device_path()); if (it != formatting_pending_.end()) { - const std::string& file_path = it->second; + // Copy the string before it gets erased. + const std::string file_path = it->second; formatting_pending_.erase(it); FormatUnmountedDevice(file_path); } @@ -632,19 +633,34 @@ MountType DiskMountManager::MountTypeFromString(const std::string& type_str) { // static void DiskMountManager::Initialize() { - VLOG(1) << "DiskMountManager::Initialize"; - DCHECK(!g_disk_mount_manager); + if (g_disk_mount_manager) { + LOG(WARNING) << "DiskMountManager was already initialized"; + return; + } g_disk_mount_manager = new DiskMountManagerImpl(); - DCHECK(g_disk_mount_manager); + VLOG(1) << "DiskMountManager initialized"; } // static -void DiskMountManager::Shutdown() { - VLOG(1) << "DiskMountManager::Shutdown"; +void DiskMountManager::InitializeForTesting( + DiskMountManager* disk_mount_manager) { if (g_disk_mount_manager) { - delete g_disk_mount_manager; - g_disk_mount_manager = NULL; + LOG(WARNING) << "DiskMountManager was already initialized"; + return; + } + g_disk_mount_manager = disk_mount_manager; + VLOG(1) << "DiskMountManager initialized"; +} + +// static +void DiskMountManager::Shutdown() { + if (!g_disk_mount_manager) { + LOG(WARNING) << "DiskMountManager::Shutdown() called with NULL manager"; + return; } + delete g_disk_mount_manager; + g_disk_mount_manager = NULL; + VLOG(1) << "DiskMountManager Shutdown completed"; } // static diff --git a/chrome/browser/chromeos/disks/disk_mount_manager.h b/chrome/browser/chromeos/disks/disk_mount_manager.h index 4dbb3eb..c5c9da9 100644 --- a/chrome/browser/chromeos/disks/disk_mount_manager.h +++ b/chrome/browser/chromeos/disks/disk_mount_manager.h @@ -236,6 +236,12 @@ class DiskMountManager { // Creates the global DiskMountManager instance. static void Initialize(); + // Similar to Initialize(), but can inject an alternative + // DiskMountManager such as MockDiskMountManager for testing. + // The injected object will be owned by the internal pointer and deleted + // by Shutdown(). + static void InitializeForTesting(DiskMountManager* disk_mount_manager); + // Destroys the global DiskMountManager instance if it exists. static void Shutdown(); diff --git a/chrome/browser/chromeos/extensions/file_browser_event_router.cc b/chrome/browser/chromeos/extensions/file_browser_event_router.cc index 3e164a9..997e847 100644 --- a/chrome/browser/chromeos/extensions/file_browser_event_router.cc +++ b/chrome/browser/chromeos/extensions/file_browser_event_router.cc @@ -9,7 +9,6 @@ #include "base/message_loop.h" #include "base/stl_util.h" #include "base/values.h" -#include "chrome/browser/chromeos/cros/cros_library.h" #include "chrome/browser/chromeos/extensions/file_browser_notifications.h" #include "chrome/browser/chromeos/login/user_manager.h" #include "chrome/browser/extensions/extension_event_names.h" @@ -45,13 +44,13 @@ namespace { } DictionaryValue* DiskToDictionaryValue( - const chromeos::MountLibrary::Disk* disk) { + const chromeos::disks::DiskMountManager::Disk* disk) { DictionaryValue* result = new DictionaryValue(); result->SetString("mountPath", disk->mount_path()); result->SetString("devicePath", disk->device_path()); result->SetString("label", disk->device_label()); result->SetString("deviceType", DeviceTypeToString(disk->device_type())); - result->SetInteger("totalSizeKB", disk->total_size() / 1024); + result->SetInteger("totalSizeKB", disk->total_size_in_bytes() / 1024); result->SetBoolean("readOnly", disk->is_read_only()); return result; } @@ -95,11 +94,7 @@ ExtensionFileBrowserEventRouter::~ExtensionFileBrowserEventRouter() { return; } profile_ = NULL; - if (!chromeos::CrosLibrary::Get()->EnsureLoaded()) - return; - chromeos::MountLibrary* lib = - chromeos::CrosLibrary::Get()->GetMountLibrary(); - lib->RemoveObserver(this); + chromeos::disks::DiskMountManager::GetInstance()->RemoveObserver(this); } void ExtensionFileBrowserEventRouter::ObserveFileSystemEvents() { @@ -107,14 +102,12 @@ void ExtensionFileBrowserEventRouter::ObserveFileSystemEvents() { NOTREACHED(); return; } - if (!chromeos::CrosLibrary::Get()->EnsureLoaded()) - return; if (chromeos::UserManager::Get()->user_is_logged_in()) { - chromeos::MountLibrary* lib = - chromeos::CrosLibrary::Get()->GetMountLibrary(); - lib->RemoveObserver(this); - lib->AddObserver(this); - lib->RequestMountInfoRefresh(); + chromeos::disks::DiskMountManager* disk_mount_manager = + chromeos::disks::DiskMountManager::GetInstance(); + disk_mount_manager->RemoveObserver(this); + disk_mount_manager->AddObserver(this); + disk_mount_manager->RequestMountInfoRefresh(); } } @@ -155,35 +148,35 @@ void ExtensionFileBrowserEventRouter::RemoveFileWatch( } void ExtensionFileBrowserEventRouter::DiskChanged( - chromeos::MountLibraryEventType event, - const chromeos::MountLibrary::Disk* disk) { + chromeos::disks::DiskMountManagerEventType event, + const chromeos::disks::DiskMountManager::Disk* disk) { // Disregard hidden devices. if (disk->is_hidden()) return; - if (event == chromeos::MOUNT_DISK_ADDED) { + if (event == chromeos::disks::MOUNT_DISK_ADDED) { OnDiskAdded(disk); - } else if (event == chromeos::MOUNT_DISK_REMOVED) { + } else if (event == chromeos::disks::MOUNT_DISK_REMOVED) { OnDiskRemoved(disk); } } void ExtensionFileBrowserEventRouter::DeviceChanged( - chromeos::MountLibraryEventType event, + chromeos::disks::DiskMountManagerEventType event, const std::string& device_path) { - if (event == chromeos::MOUNT_DEVICE_ADDED) { + if (event == chromeos::disks::MOUNT_DEVICE_ADDED) { OnDeviceAdded(device_path); - } else if (event == chromeos::MOUNT_DEVICE_REMOVED) { + } else if (event == chromeos::disks::MOUNT_DEVICE_REMOVED) { OnDeviceRemoved(device_path); - } else if (event == chromeos::MOUNT_DEVICE_SCANNED) { + } else if (event == chromeos::disks::MOUNT_DEVICE_SCANNED) { OnDeviceScanned(device_path); - } else if (event == chromeos::MOUNT_FORMATTING_STARTED) { + } else if (event == chromeos::disks::MOUNT_FORMATTING_STARTED) { // TODO(tbarzic): get rid of '!'. if (device_path[0] == '!') { OnFormattingStarted(device_path.substr(1), false); } else { OnFormattingStarted(device_path, true); } - } else if (event == chromeos::MOUNT_FORMATTING_FINISHED) { + } else if (event == chromeos::disks::MOUNT_FORMATTING_FINISHED) { if (device_path[0] == '!') { OnFormattingFinished(device_path.substr(1), false); } else { @@ -193,21 +186,21 @@ void ExtensionFileBrowserEventRouter::DeviceChanged( } void ExtensionFileBrowserEventRouter::MountCompleted( - chromeos::MountLibrary::MountEvent event_type, + chromeos::disks::DiskMountManager::MountEvent event_type, chromeos::MountError error_code, - const chromeos::MountLibrary::MountPointInfo& mount_info) { + const chromeos::disks::DiskMountManager::MountPointInfo& mount_info) { DispatchMountCompletedEvent(event_type, error_code, mount_info); if (mount_info.mount_type == chromeos::MOUNT_TYPE_DEVICE && - event_type == chromeos::MountLibrary::MOUNTING) { - chromeos::MountLibrary* mount_lib = - chromeos::CrosLibrary::Get()->GetMountLibrary(); - chromeos::MountLibrary::DiskMap::const_iterator disk_it = - mount_lib->disks().find(mount_info.source_path); - if (disk_it == mount_lib->disks().end()) { + event_type == chromeos::disks::DiskMountManager::MOUNTING) { + chromeos::disks::DiskMountManager* disk_mount_manager = + chromeos::disks::DiskMountManager::GetInstance(); + chromeos::disks::DiskMountManager::DiskMap::const_iterator disk_it = + disk_mount_manager->disks().find(mount_info.source_path); + if (disk_it == disk_mount_manager->disks().end()) { return; } - chromeos::MountLibrary::Disk* disk = disk_it->second; + chromeos::disks::DiskMountManager::Disk* disk = disk_it->second; notifications_->ManageNotificationsOnMountCompleted( disk->system_path_prefix(), disk->drive_label(), disk->is_parent(), @@ -260,7 +253,7 @@ void ExtensionFileBrowserEventRouter::DispatchFolderChangeEvent( } void ExtensionFileBrowserEventRouter::DispatchDiskEvent( - const chromeos::MountLibrary::Disk* disk, bool added) { + const chromeos::disks::DiskMountManager::Disk* disk, bool added) { if (!profile_) { NOTREACHED(); return; @@ -282,9 +275,9 @@ void ExtensionFileBrowserEventRouter::DispatchDiskEvent( } void ExtensionFileBrowserEventRouter::DispatchMountCompletedEvent( - chromeos::MountLibrary::MountEvent event, + chromeos::disks::DiskMountManager::MountEvent event, chromeos::MountError error_code, - const chromeos::MountLibrary::MountPointInfo& mount_info) { + const chromeos::disks::DiskMountManager::MountPointInfo& mount_info) { if (!profile_ || mount_info.mount_type == chromeos::MOUNT_TYPE_INVALID) { NOTREACHED(); return; @@ -293,14 +286,16 @@ void ExtensionFileBrowserEventRouter::DispatchMountCompletedEvent( ListValue args; DictionaryValue* mount_info_value = new DictionaryValue(); args.Append(mount_info_value); - if (event == chromeos::MountLibrary::MOUNTING) { + if (event == chromeos::disks::DiskMountManager::MOUNTING) { mount_info_value->SetString("eventType", "mount"); } else { mount_info_value->SetString("eventType", "unmount"); } mount_info_value->SetString("status", MountErrorToString(error_code)); - mount_info_value->SetString("mountType", - chromeos::MountLibrary::MountTypeToString(mount_info.mount_type)); + mount_info_value->SetString( + "mountType", + chromeos::disks::DiskMountManager::MountTypeToString( + mount_info.mount_type)); if (mount_info.mount_type == chromeos::MOUNT_TYPE_ARCHIVE) { GURL source_url; @@ -341,13 +336,13 @@ void ExtensionFileBrowserEventRouter::DispatchMountCompletedEvent( if (relative_mount_path_set && mount_info.mount_type == chromeos::MOUNT_TYPE_DEVICE && !mount_info.mount_condition && - event == chromeos::MountLibrary::MOUNTING) { + event == chromeos::disks::DiskMountManager::MOUNTING) { FileManagerUtil::ViewFolder(FilePath(mount_info.mount_path)); } } void ExtensionFileBrowserEventRouter::OnDiskAdded( - const chromeos::MountLibrary::Disk* disk) { + const chromeos::disks::DiskMountManager::Disk* disk) { VLOG(1) << "Disk added: " << disk->device_path(); if (disk->device_path().empty()) { VLOG(1) << "Empty system path for " << disk->device_path(); @@ -357,23 +352,19 @@ void ExtensionFileBrowserEventRouter::OnDiskAdded( // If disk is not mounted yet, give it a try. if (disk->mount_path().empty()) { // Initiate disk mount operation. - chromeos::MountLibrary* lib = - chromeos::CrosLibrary::Get()->GetMountLibrary(); - lib->MountPath(disk->device_path().c_str(), - chromeos::MOUNT_TYPE_DEVICE, - chromeos::MountPathOptions()); // Unused. + chromeos::disks::DiskMountManager::GetInstance()->MountPath( + disk->device_path(), chromeos::MOUNT_TYPE_DEVICE); } DispatchDiskEvent(disk, true); } void ExtensionFileBrowserEventRouter::OnDiskRemoved( - const chromeos::MountLibrary::Disk* disk) { + const chromeos::disks::DiskMountManager::Disk* disk) { VLOG(1) << "Disk removed: " << disk->device_path(); if (!disk->mount_path().empty()) { - chromeos::MountLibrary* lib = - chromeos::CrosLibrary::Get()->GetMountLibrary(); - lib->UnmountPath(disk->mount_path().c_str()); + chromeos::disks::DiskMountManager::GetInstance()->UnmountPath( + disk->mount_path()); } DispatchDiskEvent(disk, false); } @@ -425,11 +416,8 @@ void ExtensionFileBrowserEventRouter::OnFormattingFinished( notifications_->HideNotificationDelayed( FileBrowserNotifications::FORMAT_SUCCESS, device_path, 4000); - chromeos::MountLibrary* lib = - chromeos::CrosLibrary::Get()->GetMountLibrary(); - lib->MountPath(device_path.c_str(), - chromeos::MOUNT_TYPE_DEVICE, - chromeos::MountPathOptions()); // Unused. + chromeos::disks::DiskMountManager::GetInstance()->MountPath( + device_path, chromeos::MOUNT_TYPE_DEVICE); } else { notifications_->HideNotification(FileBrowserNotifications::FORMAT_START, device_path); diff --git a/chrome/browser/chromeos/extensions/file_browser_event_router.h b/chrome/browser/chromeos/extensions/file_browser_event_router.h index b9d2b23..e546455 100644 --- a/chrome/browser/chromeos/extensions/file_browser_event_router.h +++ b/chrome/browser/chromeos/extensions/file_browser_event_router.h @@ -15,7 +15,7 @@ #include "base/memory/scoped_ptr.h" #include "base/string16.h" #include "base/synchronization/lock.h" -#include "chrome/browser/chromeos/cros/mount_library.h" +#include "chrome/browser/chromeos/disks/disk_mount_manager.h" class FileBrowserNotifications; class Profile; @@ -23,12 +23,12 @@ class Profile; // Used to monitor disk mount changes and signal when new mounted usb device is // found. class ExtensionFileBrowserEventRouter - : public chromeos::MountLibrary::Observer { + : public chromeos::disks::DiskMountManager::Observer { public: explicit ExtensionFileBrowserEventRouter(Profile* profile); virtual ~ExtensionFileBrowserEventRouter(); // Starts observing file system change events. Currently only - // MountLibrary events are being observed. + // CrosDisksClient events are being observed. void ObserveFileSystemEvents(); // File watch setup routines. @@ -38,14 +38,17 @@ class ExtensionFileBrowserEventRouter void RemoveFileWatch(const FilePath& file_path, const std::string& extension_id); - // MountLibrary::Observer overrides. - virtual void DiskChanged(chromeos::MountLibraryEventType event, - const chromeos::MountLibrary::Disk* disk) OVERRIDE; - virtual void DeviceChanged(chromeos::MountLibraryEventType event, + // CrosDisksClient::Observer overrides. + virtual void DiskChanged(chromeos::disks::DiskMountManagerEventType event, + const chromeos::disks::DiskMountManager::Disk* disk) + OVERRIDE; + virtual void DeviceChanged(chromeos::disks::DiskMountManagerEventType event, const std::string& device_path) OVERRIDE; - virtual void MountCompleted(chromeos::MountLibrary::MountEvent event_type, + virtual void MountCompleted( + chromeos::disks::DiskMountManager::MountEvent event_type, chromeos::MountError error_code, - const chromeos::MountLibrary::MountPointInfo& mount_info) OVERRIDE; + const chromeos::disks::DiskMountManager::MountPointInfo& mount_info) + OVERRIDE; private: // Helper class for passing through file watch notification events. @@ -95,10 +98,10 @@ class ExtensionFileBrowserEventRouter typedef std::map<FilePath, FileWatcherExtensions*> WatcherMap; // USB mount event handlers. - void OnDiskAdded(const chromeos::MountLibrary::Disk* disk); - void OnDiskRemoved(const chromeos::MountLibrary::Disk* disk); - void OnDiskMounted(const chromeos::MountLibrary::Disk* disk); - void OnDiskUnmounted(const chromeos::MountLibrary::Disk* disk); + void OnDiskAdded(const chromeos::disks::DiskMountManager::Disk* disk); + void OnDiskRemoved(const chromeos::disks::DiskMountManager::Disk* disk); + void OnDiskMounted(const chromeos::disks::DiskMountManager::Disk* disk); + void OnDiskUnmounted(const chromeos::disks::DiskMountManager::Disk* disk); void OnDeviceAdded(const std::string& device_path); void OnDeviceRemoved(const std::string& device_path); void OnDeviceScanned(const std::string& device_path); @@ -114,11 +117,13 @@ class ExtensionFileBrowserEventRouter const ExtensionUsageRegistry& extensions); // Sends filesystem changed extension message to all renderers. - void DispatchDiskEvent(const chromeos::MountLibrary::Disk* disk, bool added); + void DispatchDiskEvent(const chromeos::disks::DiskMountManager::Disk* disk, + bool added); - void DispatchMountCompletedEvent(chromeos::MountLibrary::MountEvent event, + void DispatchMountCompletedEvent( + chromeos::disks::DiskMountManager::MountEvent event, chromeos::MountError error_code, - const chromeos::MountLibrary::MountPointInfo& mount_info); + const chromeos::disks::DiskMountManager::MountPointInfo& mount_info); void RemoveBrowserFromVector(const std::string& path); diff --git a/chrome/browser/extensions/extension_file_browser_private_api.cc b/chrome/browser/extensions/extension_file_browser_private_api.cc index e2a71aa..93c0b56 100644 --- a/chrome/browser/extensions/extension_file_browser_private_api.cc +++ b/chrome/browser/extensions/extension_file_browser_private_api.cc @@ -50,12 +50,10 @@ #include "webkit/fileapi/file_system_types.h" #include "webkit/fileapi/file_system_util.h" -#ifdef OS_CHROMEOS -#include "chrome/browser/chromeos/cros/cros_library.h" -#endif - using content::BrowserThread; +namespace { + // Error messages. const char kFileError[] = "File error %d"; const char kInvalidFileUrl[] = "Invalid file URL"; @@ -267,12 +265,13 @@ void UpdateFileHandlerUsageStats(Profile* profile, const std::string& task_id) { #ifdef OS_CHROMEOS base::DictionaryValue* MountPointToValue(Profile* profile, - const chromeos::MountLibrary::MountPointInfo& mount_point_info) { + const chromeos::disks::DiskMountManager::MountPointInfo& mount_point_info) { base::DictionaryValue *mount_info = new base::DictionaryValue(); mount_info->SetString("mountType", - chromeos::MountLibrary::MountTypeToString(mount_point_info.mount_type)); + chromeos::disks::DiskMountManager::MountTypeToString( + mount_point_info.mount_type)); if (mount_point_info.mount_type == chromeos::MOUNT_TYPE_ARCHIVE) { GURL source_url; @@ -296,15 +295,16 @@ base::DictionaryValue* MountPointToValue(Profile* profile, } mount_info->SetString("mountCondition", - chromeos::MountLibrary::MountConditionToString( + chromeos::disks::DiskMountManager::MountConditionToString( mount_point_info.mount_condition)); return mount_info; } #endif +} // namespace -class LocalFileSystemCallbackDispatcher +class RequestLocalFileSystemFunction::LocalFileSystemCallbackDispatcher : public fileapi::FileSystemCallbackDispatcher { public: explicit LocalFileSystemCallbackDispatcher( @@ -622,7 +622,7 @@ bool GetFileTasksFileBrowserFunction::RunImpl() { return true; } -class ExecuteTasksFileSystemCallbackDispatcher +class ExecuteTasksFileBrowserFunction::ExecuteTasksFileSystemCallbackDispatcher : public fileapi::FileSystemCallbackDispatcher { public: explicit ExecuteTasksFileSystemCallbackDispatcher( @@ -992,12 +992,24 @@ int32 FileBrowserFunction::GetTabId() const { return ExtensionTabUtil::GetTabId(tab_contents); } +void FileBrowserFunction::GetLocalPathsOnFileThreadAndRunCallbackOnUIThread( + const UrlList& file_urls, + GetLocalPathsCallback callback) { + BrowserThread::PostTask( + BrowserThread::FILE, FROM_HERE, + base::Bind( + &FileBrowserFunction::GetLocalPathsOnFileThread, + this, + file_urls, callback)); +} + // GetFileSystemRootPathOnFileThread can only be called from the file thread, // so here we are. This function takes a vector of virtual paths, converts -// them to local paths and calls GetLocalPathsResponseOnUIThread with the -// result vector, on the UI thread. -void FileBrowserFunction::GetLocalPathsOnFileThread(const UrlList& file_urls, - void* context) { +// them to local paths and calls |callback| with the result vector, on the UI +// thread. +void FileBrowserFunction::GetLocalPathsOnFileThread( + const UrlList& file_urls, + GetLocalPathsCallback callback) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); FilePathList selected_files; @@ -1036,12 +1048,8 @@ void FileBrowserFunction::GetLocalPathsOnFileThread(const UrlList& file_urls, } #endif - BrowserThread::PostTask( - BrowserThread::UI, FROM_HERE, - base::Bind( - &FileBrowserFunction::GetLocalPathsResponseOnUIThread, - this, - selected_files, context)); + BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, + base::Bind(callback, selected_files)); } bool SelectFileFunction::RunImpl() { @@ -1053,20 +1061,15 @@ bool SelectFileFunction::RunImpl() { UrlList file_paths; file_paths.push_back(GURL(file_url)); - BrowserThread::PostTask( - BrowserThread::FILE, FROM_HERE, - base::Bind( - &SelectFileFunction::GetLocalPathsOnFileThread, - this, - file_paths, reinterpret_cast<void*>(NULL))); - + GetLocalPathsOnFileThreadAndRunCallbackOnUIThread( + file_paths, + base::Bind(&SelectFileFunction::GetLocalPathsResponseOnUIThread, this)); return true; } void SelectFileFunction::GetLocalPathsResponseOnUIThread( - const FilePathList& files, void* context) { + const FilePathList& files) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - DCHECK(!context); if (files.size() != 1) { SendResponse(false); return; @@ -1106,30 +1109,25 @@ bool ViewFilesFunction::RunImpl() { file_urls.push_back(GURL(virtual_path)); } - BrowserThread::PostTask( - BrowserThread::FILE, FROM_HERE, - base::Bind( - &ViewFilesFunction::GetLocalPathsOnFileThread, - this, - file_urls, - reinterpret_cast<void*>(new std::string(internal_task_id)))); - + GetLocalPathsOnFileThreadAndRunCallbackOnUIThread( + file_urls, + base::Bind(&ViewFilesFunction::GetLocalPathsResponseOnUIThread, + this, + internal_task_id)); return true; } void ViewFilesFunction::GetLocalPathsResponseOnUIThread( - const FilePathList& files, void* context) { + const std::string& internal_task_id, + const FilePathList& files) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - DCHECK(context); - scoped_ptr<std::string> internal_task_id( - reinterpret_cast<std::string*>(context)); for (FilePathList::const_iterator iter = files.begin(); iter != files.end(); ++iter) { FileManagerUtil::ViewItem(*iter, - *(internal_task_id.get()) == kEnqueueTaskId || - // Start the first one, enqueue others. - iter != files.begin()); + internal_task_id == kEnqueueTaskId || + // Start the first one, enqueue others. + iter != files.begin()); } SendResponse(true); } @@ -1158,20 +1156,15 @@ bool SelectFilesFunction::RunImpl() { file_urls.push_back(GURL(virtual_path)); } - BrowserThread::PostTask( - BrowserThread::FILE, FROM_HERE, - base::Bind( - &SelectFilesFunction::GetLocalPathsOnFileThread, - this, - file_urls, reinterpret_cast<void*>(NULL))); - + GetLocalPathsOnFileThreadAndRunCallbackOnUIThread( + file_urls, + base::Bind(&SelectFilesFunction::GetLocalPathsResponseOnUIThread, this)); return true; } void SelectFilesFunction::GetLocalPathsResponseOnUIThread( - const FilePathList& files, void* context) { + const FilePathList& files) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - DCHECK(!context); int32 tab_id = GetTabId(); SelectFileDialogExtension::OnMultiFilesSelected(tab_id, files); SendResponse(true); @@ -1191,6 +1184,7 @@ AddMountFunction::~AddMountFunction() { } bool AddMountFunction::RunImpl() { + // The third argument is simply ignored. if (args_->GetSize() != 2 && args_->GetSize() != 3) { error_ = "Invalid argument count"; return false; @@ -1210,42 +1204,20 @@ bool AddMountFunction::RunImpl() { file_paths.push_back(GURL(file_url)); #if defined(OS_CHROMEOS) - chromeos::MountPathOptions options; - if (args_->GetSize() == 3) { - DictionaryValue *dict; - if (!args_->GetDictionary(2, &dict)) { - NOTREACHED(); - } - - for (base::DictionaryValue::key_iterator it = dict->begin_keys(); - it != dict->end_keys(); - ++it) { - std::string value; - if (!dict->GetString(*it, &value)) { - NOTREACHED(); - } - - options.push_back(chromeos::MountPathOptions::value_type((*it).c_str(), - value.c_str())); - } - } - - MountParamaters* params = new MountParamaters(mount_type_str, options); - BrowserThread::PostTask( - BrowserThread::FILE, FROM_HERE, - base::Bind( - &AddMountFunction::GetLocalPathsOnFileThread, - this, - file_paths, reinterpret_cast<void*>(params))); + GetLocalPathsOnFileThreadAndRunCallbackOnUIThread( + file_paths, + base::Bind(&AddMountFunction::GetLocalPathsResponseOnUIThread, + this, + mount_type_str)); #endif // OS_CHROMEOS return true; } void AddMountFunction::GetLocalPathsResponseOnUIThread( - const FilePathList& files, void* context) { + const std::string& mount_type_str, + const FilePathList& files) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - DCHECK(context); if (!files.size()) { SendResponse(false); @@ -1253,24 +1225,20 @@ void AddMountFunction::GetLocalPathsResponseOnUIThread( } #ifdef OS_CHROMEOS - scoped_ptr<MountParamaters> params( - reinterpret_cast<MountParamaters*>(context)); - const std::string& mount_type_str = params->mount_type; - const chromeos::MountPathOptions& options = params->mount_options; FilePath::StringType source_file = files[0].value(); - chromeos::MountLibrary *mount_lib = - chromeos::CrosLibrary::Get()->GetMountLibrary(); + chromeos::disks::DiskMountManager* disk_mount_manager = + chromeos::disks::DiskMountManager::GetInstance(); chromeos::MountType mount_type = - mount_lib->MountTypeFromString(mount_type_str); + disk_mount_manager->MountTypeFromString(mount_type_str); if (mount_type == chromeos::MOUNT_TYPE_INVALID) { error_ = "Invalid mount type"; SendResponse(false); return; } - mount_lib->MountPath(source_file.data(), mount_type, options); + disk_mount_manager->MountPath(source_file.data(), mount_type); #endif SendResponse(true); @@ -1294,27 +1262,23 @@ bool RemoveMountFunction::RunImpl() { UrlList file_paths; file_paths.push_back(GURL(mount_path)); - BrowserThread::PostTask( - BrowserThread::FILE, FROM_HERE, - base::Bind( - &RemoveMountFunction::GetLocalPathsOnFileThread, - this, - file_paths, reinterpret_cast<void*>(NULL))); + GetLocalPathsOnFileThreadAndRunCallbackOnUIThread( + file_paths, + base::Bind(&RemoveMountFunction::GetLocalPathsResponseOnUIThread, this)); return true; } void RemoveMountFunction::GetLocalPathsResponseOnUIThread( - const FilePathList& files, void* context) { + const FilePathList& files) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - DCHECK(!context); if (files.size() != 1) { SendResponse(false); return; } #ifdef OS_CHROMEOS - chromeos::CrosLibrary::Get()->GetMountLibrary()->UnmountPath( - files[0].value().c_str()); + chromeos::disks::DiskMountManager::GetInstance()->UnmountPath( + files[0].value()); #endif SendResponse(true); @@ -1334,12 +1298,12 @@ bool GetMountPointsFunction::RunImpl() { result_.reset(mounts); #ifdef OS_CHROMEOS - chromeos::MountLibrary *mount_lib = - chromeos::CrosLibrary::Get()->GetMountLibrary(); - chromeos::MountLibrary::MountPointMap mount_points = - mount_lib->mount_points(); + chromeos::disks::DiskMountManager* disk_mount_manager = + chromeos::disks::DiskMountManager::GetInstance(); + chromeos::disks::DiskMountManager::MountPointMap mount_points = + disk_mount_manager->mount_points(); - for (chromeos::MountLibrary::MountPointMap::const_iterator it = + for (chromeos::disks::DiskMountManager::MountPointMap::const_iterator it = mount_points.begin(); it != mount_points.end(); ++it) { @@ -1369,17 +1333,14 @@ bool GetSizeStatsFunction::RunImpl() { UrlList mount_paths; mount_paths.push_back(GURL(mount_url)); - BrowserThread::PostTask( - BrowserThread::FILE, FROM_HERE, - base::Bind( - &GetSizeStatsFunction::GetLocalPathsOnFileThread, - this, - mount_paths, reinterpret_cast<void*>(NULL))); + GetLocalPathsOnFileThreadAndRunCallbackOnUIThread( + mount_paths, + base::Bind(&GetSizeStatsFunction::GetLocalPathsResponseOnUIThread, this)); return true; } void GetSizeStatsFunction::GetLocalPathsResponseOnUIThread( - const FilePathList& files, void* context) { + const FilePathList& files) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); if (files.size() != 1) { @@ -1392,18 +1353,18 @@ void GetSizeStatsFunction::GetLocalPathsResponseOnUIThread( base::Bind( &GetSizeStatsFunction::CallGetSizeStatsOnFileThread, this, - files[0].value().c_str())); + files[0].value())); } void GetSizeStatsFunction::CallGetSizeStatsOnFileThread( - const char* mount_path) { + const std::string& mount_path) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); size_t total_size_kb = 0; size_t remaining_size_kb = 0; #ifdef OS_CHROMEOS - chromeos::CrosLibrary::Get()->GetMountLibrary()->GetSizeStatsOnFileThread( - mount_path, &total_size_kb, &remaining_size_kb); + chromeos::disks::DiskMountManager::GetInstance()-> + GetSizeStatsOnFileThread(mount_path, &total_size_kb, &remaining_size_kb); #endif BrowserThread::PostTask( @@ -1415,7 +1376,9 @@ void GetSizeStatsFunction::CallGetSizeStatsOnFileThread( } void GetSizeStatsFunction::GetSizeStatsCallbackOnUIThread( - const char* mount_path, size_t total_size_kb, size_t remaining_size_kb) { + const std::string& mount_path, + size_t total_size_kb, + size_t remaining_size_kb) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); base::DictionaryValue* sizes = new base::DictionaryValue(); @@ -1447,17 +1410,14 @@ bool FormatDeviceFunction::RunImpl() { UrlList file_paths; file_paths.push_back(GURL(volume_file_url)); - BrowserThread::PostTask( - BrowserThread::FILE, FROM_HERE, - base::Bind( - &FormatDeviceFunction::GetLocalPathsOnFileThread, - this, - file_paths, reinterpret_cast<void*>(NULL))); + GetLocalPathsOnFileThreadAndRunCallbackOnUIThread( + file_paths, + base::Bind(&FormatDeviceFunction::GetLocalPathsResponseOnUIThread, this)); return true; } void FormatDeviceFunction::GetLocalPathsResponseOnUIThread( - const FilePathList& files, void* context) { + const FilePathList& files) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); if (files.size() != 1) { @@ -1466,8 +1426,8 @@ void FormatDeviceFunction::GetLocalPathsResponseOnUIThread( } #ifdef OS_CHROMEOS - chromeos::CrosLibrary::Get()->GetMountLibrary()->FormatMountedDevice( - files[0].value().c_str()); + chromeos::disks::DiskMountManager::GetInstance()->FormatMountedDevice( + files[0].value()); #endif SendResponse(true); @@ -1491,14 +1451,14 @@ bool GetVolumeMetadataFunction::RunImpl() { } #ifdef OS_CHROMEOS - chromeos::MountLibrary* mount_lib = - chromeos::CrosLibrary::Get()->GetMountLibrary(); - chromeos::MountLibrary::DiskMap::const_iterator volume_it = - mount_lib->disks().find(volume_device_path); + chromeos::disks::DiskMountManager* disk_mount_manager = + chromeos::disks::DiskMountManager::GetInstance(); + chromeos::disks::DiskMountManager::DiskMap::const_iterator volume_it = + disk_mount_manager->disks().find(volume_device_path); - if (volume_it != mount_lib->disks().end() && + if (volume_it != disk_mount_manager->disks().end() && !volume_it->second->is_hidden()) { - chromeos::MountLibrary::Disk* volume = volume_it->second; + chromeos::disks::DiskMountManager::Disk* volume = volume_it->second; DictionaryValue* volume_info = new DictionaryValue(); result_.reset(volume_info); // Localising mount path. @@ -1517,7 +1477,7 @@ bool GetVolumeMetadataFunction::RunImpl() { volume_info->SetString("driveLabel", volume->drive_label()); volume_info->SetString("deviceType", DeviceTypeToString(volume->device_type())); - volume_info->SetInteger("totalSize", volume->total_size()); + volume_info->SetInteger("totalSize", volume->total_size_in_bytes()); volume_info->SetBoolean("isParent", volume->is_parent()); volume_info->SetBoolean("isReadOnly", volume->is_read_only()); volume_info->SetBoolean("hasMedia", volume->has_media()); diff --git a/chrome/browser/extensions/extension_file_browser_private_api.h b/chrome/browser/extensions/extension_file_browser_private_api.h index 39c3dea..fff7bd0 100644 --- a/chrome/browser/extensions/extension_file_browser_private_api.h +++ b/chrome/browser/extensions/extension_file_browser_private_api.h @@ -16,7 +16,7 @@ #include "webkit/fileapi/file_system_callback_dispatcher.h" #ifdef OS_CHROMEOS -#include "chrome/browser/chromeos/cros/mount_library.h" +#include "chrome/browser/chromeos/disks/disk_mount_manager.h" #endif class GURL; @@ -24,9 +24,12 @@ class GURL; // Implements the chrome.fileBrowserPrivate.requestLocalFileSystem method. class RequestLocalFileSystemFunction : public AsyncExtensionFunction { protected: - friend class LocalFileSystemCallbackDispatcher; // AsyncExtensionFunction overrides. virtual bool RunImpl() OVERRIDE; + + private: + class LocalFileSystemCallbackDispatcher; + void RespondSuccessOnUIThread(const std::string& name, const GURL& root_path); void RespondFailedOnUIThread(base::PlatformFileError error_code); @@ -99,7 +102,7 @@ class ExecuteTasksFileBrowserFunction : public AsyncExtensionFunction { bool is_directory; }; typedef std::vector<FileDefinition> FileDefinitionList; - friend class ExecuteTasksFileSystemCallbackDispatcher; + class ExecuteTasksFileSystemCallbackDispatcher; // Initates execution of context menu tasks identified with |task_id| for // each element of |files_list|. bool InitiateFileTaskExecution(const std::string& task_id, @@ -125,19 +128,25 @@ class FileBrowserFunction protected: typedef std::vector<GURL> UrlList; typedef std::vector<FilePath> FilePathList; + typedef base::Callback<void(const FilePathList&)> GetLocalPathsCallback; virtual ~FileBrowserFunction(); - // Convert virtual paths to local paths on the file thread. - void GetLocalPathsOnFileThread(const UrlList& file_urls, - void* context); - - // Callback with converted local paths. - virtual void GetLocalPathsResponseOnUIThread(const FilePathList& files, - void* context) {} + // Converts virtual paths to local paths by calling GetLocalPathsOnFileThread + // on the file thread and call |callback| on the UI thread with the result. + void GetLocalPathsOnFileThreadAndRunCallbackOnUIThread( + const UrlList& file_urls, + GetLocalPathsCallback callback); // Figure out the tab_id of the hosting tab. int32 GetTabId() const; + + private: + // Converts virtual paths to local paths and call |callback| (on the UI + // thread) with the results. + // This method must be called from the file thread. + void GetLocalPathsOnFileThread(const UrlList& file_urls, + GetLocalPathsCallback callback); }; // Select a single file. Closes the dialog window. @@ -152,11 +161,11 @@ class SelectFileFunction // AsyncExtensionFunction overrides. virtual bool RunImpl() OVERRIDE; - // FileBrowserFunction overrides. - virtual void GetLocalPathsResponseOnUIThread(const FilePathList& files, - void* context) OVERRIDE; - private: + // A callback method to handle the result of + // GetLocalPathsOnFileThreadAndRunCallbackOnUIThread. + void GetLocalPathsResponseOnUIThread(const FilePathList& files); + DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.selectFile"); }; @@ -172,11 +181,12 @@ class ViewFilesFunction // AsyncExtensionFunction overrides. virtual bool RunImpl() OVERRIDE; - // FileBrowserFunction overrides. - virtual void GetLocalPathsResponseOnUIThread(const FilePathList& files, - void* context) OVERRIDE; - private: + // A callback method to handle the result of + // GetLocalPathsOnFileThreadAndRunCallbackOnUIThread. + void GetLocalPathsResponseOnUIThread(const std::string& internal_task_id, + const FilePathList& files); + DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.viewFiles"); }; @@ -192,11 +202,11 @@ class SelectFilesFunction // AsyncExtensionFunction overrides. virtual bool RunImpl() OVERRIDE; - // FileBrowserFunction overrides. - virtual void GetLocalPathsResponseOnUIThread(const FilePathList& files, - void* context) OVERRIDE; - private: + // A callback method to handle the result of + // GetLocalPathsOnFileThreadAndRunCallbackOnUIThread. + void GetLocalPathsResponseOnUIThread(const FilePathList& files); + DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.selectFiles"); }; @@ -225,23 +235,14 @@ class AddMountFunction protected: virtual ~AddMountFunction(); + // AsyncExtensionFunction overrides. virtual bool RunImpl() OVERRIDE; - // FileBrowserFunction overrides. - virtual void GetLocalPathsResponseOnUIThread(const FilePathList& files, - void* context) OVERRIDE; - private: -#if defined(OS_CHROMEOS) - struct MountParamaters { - MountParamaters(const std::string& type, - const chromeos::MountPathOptions& options) - : mount_type(type), mount_options(options) {} - ~MountParamaters() {} - std::string mount_type; - chromeos::MountPathOptions mount_options; - }; -#endif + // A callback method to handle the result of + // GetLocalPathsOnFileThreadAndRunCallbackOnUIThread. + void GetLocalPathsResponseOnUIThread(const std::string& mount_type_str, + const FilePathList& files); DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.addMount"); }; @@ -255,12 +256,14 @@ class RemoveMountFunction protected: virtual ~RemoveMountFunction(); - // FileBrowserFunction overrides. + // AsyncExtensionFunction overrides. virtual bool RunImpl() OVERRIDE; - virtual void GetLocalPathsResponseOnUIThread(const FilePathList& files, - void* context) OVERRIDE; private: + // A callback method to handle the result of + // GetLocalPathsOnFileThreadAndRunCallbackOnUIThread. + void GetLocalPathsResponseOnUIThread(const FilePathList& files); + DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.removeMount"); }; @@ -272,6 +275,7 @@ class GetMountPointsFunction protected: virtual ~GetMountPointsFunction(); + // AsyncExtensionFunction overrides. virtual bool RunImpl() OVERRIDE; private: @@ -287,13 +291,14 @@ class FormatDeviceFunction protected: virtual ~FormatDeviceFunction(); + // AsyncExtensionFunction overrides. virtual bool RunImpl() OVERRIDE; -// FileBrowserFunction overrides. - virtual void GetLocalPathsResponseOnUIThread(const FilePathList& files, - void* context) OVERRIDE; - private: + // A callback method to handle the result of + // GetLocalPathsOnFileThreadAndRunCallbackOnUIThread. + void GetLocalPathsResponseOnUIThread(const FilePathList& files); + DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.formatDevice"); }; @@ -305,16 +310,18 @@ class GetSizeStatsFunction protected: virtual ~GetSizeStatsFunction(); - // FileBrowserFunction overrides. + // AsyncExtensionFunction overrides. virtual bool RunImpl() OVERRIDE; - virtual void GetLocalPathsResponseOnUIThread(const FilePathList& files, - void* context) OVERRIDE; private: - void GetSizeStatsCallbackOnUIThread(const char* mount_path, + // A callback method to handle the result of + // GetLocalPathsOnFileThreadAndRunCallbackOnUIThread. + void GetLocalPathsResponseOnUIThread(const FilePathList& files); + + void GetSizeStatsCallbackOnUIThread(const std::string& mount_path, size_t total_size_kb, size_t remaining_size_kb); - void CallGetSizeStatsOnFileThread(const char* mount_path); + void CallGetSizeStatsOnFileThread(const std::string& mount_path); DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.getSizeStats"); }; diff --git a/chrome/browser/extensions/extension_file_browser_private_apitest.cc b/chrome/browser/extensions/extension_file_browser_private_apitest.cc index b5568c6..51be874 100644 --- a/chrome/browser/extensions/extension_file_browser_private_apitest.cc +++ b/chrome/browser/extensions/extension_file_browser_private_apitest.cc @@ -4,8 +4,8 @@ #include <stdio.h> -#include "chrome/browser/chromeos/cros/cros_library.h" -#include "chrome/browser/chromeos/cros/mock_mount_library.h" +#include "base/stl_util.h" +#include "chrome/browser/chromeos/disks/mock_disk_mount_manager.h" #include "chrome/browser/extensions/extension_apitest.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" @@ -19,19 +19,33 @@ using ::testing::StrEq; class ExtensionFileBrowserPrivateApiTest : public ExtensionApiTest { public: - ExtensionFileBrowserPrivateApiTest() : test_mount_point_("/tmp") { - mount_library_mock_.SetupDefaultReplies(); - - chromeos::CrosLibrary::Get()->GetTestApi()->SetMountLibrary( - &mount_library_mock_, - false); // We own the mock library object. - + ExtensionFileBrowserPrivateApiTest() + : disk_mount_manager_mock_(NULL), + test_mount_point_("/tmp") { CreateVolumeMap(); } virtual ~ExtensionFileBrowserPrivateApiTest() { - DeleteVolumeMap(); - chromeos::CrosLibrary::Get()->GetTestApi()->SetMountLibrary(NULL, true); + DCHECK(!disk_mount_manager_mock_); + STLDeleteValues(&volumes_); + } + + // ExtensionApiTest override + virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { + ExtensionApiTest::SetUpInProcessBrowserTestFixture(); + + disk_mount_manager_mock_ = new chromeos::disks::MockDiskMountManager; + chromeos::disks::DiskMountManager::InitializeForTesting( + disk_mount_manager_mock_); + disk_mount_manager_mock_->SetupDefaultReplies(); + } + + // ExtensionApiTest override + virtual void TearDownInProcessBrowserTestFixture() OVERRIDE { + chromeos::disks::DiskMountManager::Shutdown(); + disk_mount_manager_mock_ = NULL; + + ExtensionApiTest::TearDownInProcessBrowserTestFixture(); } void AddTmpMountPoint() { @@ -46,73 +60,64 @@ class ExtensionFileBrowserPrivateApiTest : public ExtensionApiTest { void CreateVolumeMap() { // These have to be sync'd with values in filebrowser_mount extension. volumes_.insert( - std::pair<std::string, chromeos::MountLibrary::Disk*>( + std::pair<std::string, chromeos::disks::DiskMountManager::Disk*>( "device_path1", - new chromeos::MountLibrary::Disk("device_path1", - "/media/removable/mount_path1", - "system_path1", - "file_path1", - "device_label1", - "drive_label1", - "parent_path1", - "system_path_prefix1", - chromeos::FLASH, - 1073741824, - false, - false, - false, - false, - false))); + new chromeos::disks::DiskMountManager::Disk( + "device_path1", + "/media/removable/mount_path1", + "system_path1", + "file_path1", + "device_label1", + "drive_label1", + "system_path_prefix1", + chromeos::FLASH, + 1073741824, + false, + false, + false, + false, + false))); volumes_.insert( - std::pair<std::string, chromeos::MountLibrary::Disk*>( + std::pair<std::string, chromeos::disks::DiskMountManager::Disk*>( "device_path2", - new chromeos::MountLibrary::Disk("device_path2", - "/media/removable/mount_path2", - "system_path2", - "file_path2", - "device_label2", - "drive_label2", - "parent_path2", - "system_path_prefix2", - chromeos::HDD, - 47723, - true, - true, - true, - true, - false))); + new chromeos::disks::DiskMountManager::Disk( + "device_path2", + "/media/removable/mount_path2", + "system_path2", + "file_path2", + "device_label2", + "drive_label2", + "system_path_prefix2", + chromeos::HDD, + 47723, + true, + true, + true, + true, + false))); volumes_.insert( - std::pair<std::string, chromeos::MountLibrary::Disk*>( + std::pair<std::string, chromeos::disks::DiskMountManager::Disk*>( "device_path3", - new chromeos::MountLibrary::Disk("device_path3", - "/media/removable/mount_path3", - "system_path3", - "file_path3", - "device_label3", - "drive_label3", - "parent_path3", - "system_path_prefix3", - chromeos::OPTICAL, - 0, - true, - false, - false, - true, - false))); - } - - void DeleteVolumeMap() { - for (chromeos::MountLibrary::DiskMap::iterator it = volumes_.begin(); - it != volumes_.end(); - ++it) { - delete it->second; - } - volumes_.clear(); + new chromeos::disks::DiskMountManager::Disk( + "device_path3", + "/media/removable/mount_path3", + "system_path3", + "file_path3", + "device_label3", + "drive_label3", + "system_path_prefix3", + chromeos::OPTICAL, + 0, + true, + false, + false, + true, + false))); } protected: - chromeos::MockMountLibrary mount_library_mock_; - chromeos::MountLibrary::DiskMap volumes_; + chromeos::disks::MockDiskMountManager* disk_mount_manager_mock_; + chromeos::disks::DiskMountManager::DiskMap volumes_; private: FilePath test_mount_point_; @@ -122,14 +127,13 @@ IN_PROC_BROWSER_TEST_F(ExtensionFileBrowserPrivateApiTest, FileBrowserMount) { // We will call fileBrowserPrivate.unmountVolume once. To test that method, we // check that UnmountPath is really called with the same value. AddTmpMountPoint(); - EXPECT_CALL(mount_library_mock_, UnmountPath(_)) + EXPECT_CALL(*disk_mount_manager_mock_, UnmountPath(_)) .Times(0); - EXPECT_CALL(mount_library_mock_, UnmountPath(StrEq("/tmp/test_file.zip"))) - .Times(1); + EXPECT_CALL(*disk_mount_manager_mock_, + UnmountPath(StrEq("/tmp/test_file.zip"))).Times(1); - EXPECT_CALL(mount_library_mock_, disks()) + EXPECT_CALL(*disk_mount_manager_mock_, disks()) .WillRepeatedly(ReturnRef(volumes_)); ASSERT_TRUE(RunComponentExtensionTest("filebrowser_mount")) << message_; } - diff --git a/chrome/browser/ui/browser_init.cc b/chrome/browser/ui/browser_init.cc index a20c607..8f8833b 100644 --- a/chrome/browser/ui/browser_init.cc +++ b/chrome/browser/ui/browser_init.cc @@ -93,7 +93,6 @@ #if defined(OS_CHROMEOS) #include "chrome/browser/chromeos/cros/cros_library.h" -#include "chrome/browser/chromeos/cros/mount_library.h" #include "chrome/browser/chromeos/cros/network_library.h" #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" #include "chrome/browser/chromeos/customization_document.h" diff --git a/chrome/browser/ui/webui/chromeos/imageburner/imageburner_ui.cc b/chrome/browser/ui/webui/chromeos/imageburner/imageburner_ui.cc index ec3ec6b..3423828 100644 --- a/chrome/browser/ui/webui/chromeos/imageburner/imageburner_ui.cc +++ b/chrome/browser/ui/webui/chromeos/imageburner/imageburner_ui.cc @@ -126,7 +126,7 @@ WebUIHandler::WebUIHandler(TabContents* contents) state_machine_(NULL), observing_burn_lib_(false), working_(false) { - chromeos::CrosLibrary::Get()->GetMountLibrary()->AddObserver(this); + chromeos::disks::DiskMountManager::GetInstance()->AddObserver(this); chromeos::CrosLibrary::Get()->GetNetworkLibrary()-> AddNetworkManagerObserver(this); burn_manager_ = BurnManager::GetInstance(); @@ -135,7 +135,8 @@ WebUIHandler::WebUIHandler(TabContents* contents) } WebUIHandler::~WebUIHandler() { - chromeos::CrosLibrary::Get()->GetMountLibrary()->RemoveObserver(this); + chromeos::disks::DiskMountManager::GetInstance()-> + RemoveObserver(this); chromeos::CrosLibrary::Get()->GetBurnLibrary()->RemoveObserver(this); chromeos::CrosLibrary::Get()->GetNetworkLibrary()-> RemoveNetworkManagerObserver(this); @@ -160,15 +161,16 @@ void WebUIHandler::RegisterMessages() { base::Unretained(this))); } -void WebUIHandler::DiskChanged(chromeos::MountLibraryEventType event, - const chromeos::MountLibrary::Disk* disk) { +void WebUIHandler::DiskChanged( + chromeos::disks::DiskMountManagerEventType event, + const chromeos::disks::DiskMountManager::Disk* disk) { if (!disk->is_parent() || disk->on_boot_device()) return; - if (event == chromeos::MOUNT_DISK_ADDED) { + if (event == chromeos::disks::MOUNT_DISK_ADDED) { DictionaryValue disk_value; CreateDiskValue(*disk, &disk_value); web_ui_->CallJavascriptFunction("browserBridge.deviceAdded", disk_value); - } else if (event == chromeos::MOUNT_DISK_REMOVED) { + } else if (event == chromeos::disks::MOUNT_DISK_REMOVED) { StringValue device_path_value(disk->device_path()); web_ui_->CallJavascriptFunction("browserBridge.deviceRemoved", device_path_value); @@ -180,8 +182,8 @@ void WebUIHandler::DiskChanged(chromeos::MountLibraryEventType event, } void WebUIHandler::BurnProgressUpdated(chromeos::BurnLibrary* object, - chromeos::BurnEvent evt, - const ImageBurnStatus& status) { + chromeos::BurnEvent evt, + const ImageBurnStatus& status) { switch (evt) { case(chromeos::BURN_SUCCESS): FinalizeBurn(); @@ -278,7 +280,8 @@ void WebUIHandler::OnError(int error_message_id) { working_ = false; } -void WebUIHandler::CreateDiskValue(const chromeos::MountLibrary::Disk& disk, +void WebUIHandler::CreateDiskValue( + const chromeos::disks::DiskMountManager::Disk& disk, DictionaryValue* disk_value) { string16 label = ASCIIToUTF16(disk.drive_label()); base::i18n::AdjustStringForLocaleDirection(&label); @@ -288,14 +291,16 @@ void WebUIHandler::CreateDiskValue(const chromeos::MountLibrary::Disk& disk, } void WebUIHandler::HandleGetDevices(const ListValue* args) { - chromeos::MountLibrary* mount_lib = - chromeos::CrosLibrary::Get()->GetMountLibrary(); - const chromeos::MountLibrary::DiskMap& disks = mount_lib->disks(); + chromeos::disks::DiskMountManager* disk_mount_manager = + chromeos::disks::DiskMountManager::GetInstance(); + const chromeos::disks::DiskMountManager::DiskMap& disks = + disk_mount_manager->disks(); ListValue results_value; - for (chromeos::MountLibrary::DiskMap::const_iterator iter = disks.begin(); + for (chromeos::disks::DiskMountManager::DiskMap::const_iterator iter = + disks.begin(); iter != disks.end(); ++iter) { - chromeos::MountLibrary::Disk* disk = iter->second; + chromeos::disks::DiskMountManager::Disk* disk = iter->second; if (disk->is_parent() && !disk->on_boot_device()) { DictionaryValue* disk_value = new DictionaryValue(); CreateDiskValue(*disk, disk_value); @@ -613,10 +618,11 @@ void WebUIHandler::ExtractTargetedDevicePath( } int64 WebUIHandler::GetDeviceSize(const std::string& device_path) { - chromeos::MountLibrary* mount_lib = - chromeos::CrosLibrary::Get()->GetMountLibrary(); - const chromeos::MountLibrary::DiskMap& disks = mount_lib->disks(); - return disks.find(device_path)->second->total_size(); + chromeos::disks::DiskMountManager* disk_mount_manager = + chromeos::disks::DiskMountManager::GetInstance(); + const chromeos::disks::DiskMountManager::DiskMap& disks = + disk_mount_manager->disks(); + return disks.find(device_path)->second->total_size_in_bytes(); } bool WebUIHandler::CheckNetwork() { diff --git a/chrome/browser/ui/webui/chromeos/imageburner/webui_handler.h b/chrome/browser/ui/webui/chromeos/imageburner/webui_handler.h index 281cf98..92e4f4a 100644 --- a/chrome/browser/ui/webui/chromeos/imageburner/webui_handler.h +++ b/chrome/browser/ui/webui/chromeos/imageburner/webui_handler.h @@ -14,8 +14,8 @@ #include "base/values.h" #include "chrome/browser/chromeos/cros/burn_library.h" #include "chrome/browser/chromeos/cros/cros_library.h" -#include "chrome/browser/chromeos/cros/mount_library.h" #include "chrome/browser/chromeos/cros/network_library.h" +#include "chrome/browser/chromeos/disks/disk_mount_manager.h" #include "chrome/browser/ui/webui/chrome_url_data_manager.h" #include "chrome/browser/ui/webui/chromeos/imageburner/imageburner_utils.h" #include "content/browser/download/download_item.h" @@ -75,7 +75,7 @@ class WebUIHandlerTaskProxy class WebUIHandler : public WebUIMessageHandler, - public chromeos::MountLibrary::Observer, + public chromeos::disks::DiskMountManager::Observer, public chromeos::BurnLibrary::Observer, public chromeos::NetworkLibrary::NetworkManagerObserver, public DownloadItem::Observer, @@ -92,15 +92,18 @@ class WebUIHandler virtual WebUIMessageHandler* Attach(WebUI* web_ui) OVERRIDE; virtual void RegisterMessages() OVERRIDE; - // chromeos::MountLibrary::Observer interface. - virtual void DiskChanged(chromeos::MountLibraryEventType event, - const chromeos::MountLibrary::Disk* disk) OVERRIDE; - virtual void DeviceChanged(chromeos::MountLibraryEventType event, + // chromeos::disks::DiskMountManager::Observer interface. + virtual void DiskChanged(chromeos::disks::DiskMountManagerEventType event, + const chromeos::disks::DiskMountManager::Disk* disk) + OVERRIDE; + virtual void DeviceChanged(chromeos::disks::DiskMountManagerEventType event, const std::string& device_path) OVERRIDE { } - virtual void MountCompleted(chromeos::MountLibrary::MountEvent event_type, + virtual void MountCompleted( + chromeos::disks::DiskMountManager::MountEvent event_type, chromeos::MountError error_code, - const chromeos::MountLibrary::MountPointInfo& mount_info) OVERRIDE { + const chromeos::disks::DiskMountManager::MountPointInfo& mount_info) + OVERRIDE { } // chromeos::BurnLibrary::Observer interface. @@ -127,8 +130,8 @@ class WebUIHandler virtual void OnError(int error_message_id) OVERRIDE; private: - void CreateDiskValue(const chromeos::MountLibrary::Disk& disk, - DictionaryValue* disk_value); + void CreateDiskValue(const chromeos::disks::DiskMountManager::Disk& disk, + DictionaryValue* disk_value); // Callback for the "getRoots" message. void HandleGetDevices(const ListValue* args); @@ -212,4 +215,3 @@ class WebUIHandler } // namespace imageburner. #endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_IMAGEBURNER_WEBUI_HANDLER_H_ - |