summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extension_file_browser_private_api.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/extensions/extension_file_browser_private_api.cc')
-rw-r--r--chrome/browser/extensions/extension_file_browser_private_api.cc224
1 files changed, 92 insertions, 132 deletions
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());