summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-17 07:49:55 +0000
committerhashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-17 07:49:55 +0000
commitb307bceb5f8f104022a5f306a35c2d2bd161641f (patch)
tree9e109f0235bf0565fe022ed1f3dbf4011bc4bd07
parent8004a4cb0bf6959d5df10c0e4aac90e00e7d4dd7 (diff)
downloadchromium_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
-rw-r--r--chrome/browser/chromeos/chrome_browser_main_chromeos.cc6
-rw-r--r--chrome/browser/chromeos/cros/burn_library.cc8
-rw-r--r--chrome/browser/chromeos/cros/burn_library.h1
-rw-r--r--chrome/browser/chromeos/dbus/cros_disks_client.cc9
-rw-r--r--chrome/browser/chromeos/disks/disk_mount_manager.cc32
-rw-r--r--chrome/browser/chromeos/disks/disk_mount_manager.h6
-rw-r--r--chrome/browser/chromeos/extensions/file_browser_event_router.cc100
-rw-r--r--chrome/browser/chromeos/extensions/file_browser_event_router.h37
-rw-r--r--chrome/browser/extensions/extension_file_browser_private_api.cc224
-rw-r--r--chrome/browser/extensions/extension_file_browser_private_api.h103
-rw-r--r--chrome/browser/extensions/extension_file_browser_private_apitest.cc154
-rw-r--r--chrome/browser/ui/browser_init.cc1
-rw-r--r--chrome/browser/ui/webui/chromeos/imageburner/imageburner_ui.cc42
-rw-r--r--chrome/browser/ui/webui/chromeos/imageburner/webui_handler.h24
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_
-