Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1768)

Unified Diff: chrome/browser/chromeos/cros/mount_library.cc

Issue 7471024: Formatting feature initial commit for ChromeOS Tree (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Added dependency on cros change Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/cros/mount_library.cc
diff --git a/chrome/browser/chromeos/cros/mount_library.cc b/chrome/browser/chromeos/cros/mount_library.cc
index 2457a0912c7aacee0b38786882b95c27f57f581a..a77bba610ae6457b03c30866a4b06c5c29ff8337 100644
--- a/chrome/browser/chromeos/cros/mount_library.cc
+++ b/chrome/browser/chromeos/cros/mount_library.cc
@@ -5,6 +5,7 @@
#include "chrome/browser/chromeos/cros/mount_library.h"
#include <set>
+#include <vector>
#include "base/message_loop.h"
#include "base/string_util.h"
@@ -117,6 +118,50 @@ class MountLibraryImpl : public MountLibrary {
this);
}
+ virtual void FormatUnmountedDevice(const char* device_path) OVERRIDE {
tbarzic 2011/07/25 20:43:04 Argument name should match name in MountLibrary.h
sidor 2011/07/25 21:40:07 Done.
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ if (!CrosLibrary::Get()->EnsureLoaded()) {
+ OnFormatDevice(device_path,
+ false,
+ MOUNT_METHOD_ERROR_LOCAL,
+ kLibraryNotLoaded);
+ return;
+ }
tbarzic 2011/07/25 20:43:04 If you leave this exposed through MountLibrary, ch
sidor 2011/07/25 21:40:07 Done.
+ FormatDevice(device_path,
+ "vfat", // currently format in vfat by default
+ &MountLibraryImpl::FormatDeviceCallback,
+ this);
+ }
+
+ virtual void FormatMountedDevice(const char* device_mount_path) OVERRIDE {
+ DCHECK(device_mount_path);
tbarzic 2011/07/25 20:43:04 Would it be possible to pass device_path to this m
sidor 2011/07/25 21:40:07 Nope. UI, does not know the device path. At least
+ std::string device_path, file_path;
+ for (MountLibrary::DiskMap::iterator it = disks_.begin();
+ it != disks_.end(); ++it) {
+ if (it->second->mount_path().compare(device_mount_path) == 0) {
+ device_path = it->second->device_path();
+ file_path = it->second->file_path();
+ }
+ }
+ if (device_path.empty()) {
+ OnFormatDevice(device_path.c_str(),
+ false,
+ MOUNT_METHOD_ERROR_LOCAL,
+ "Device with this mount path not found.");
+ return;
+ }
+ if (to_be_formated_.find(device_path) != to_be_formated_.end()) {
tbarzic 2011/07/25 20:43:04 I agree with achuith that format_pending_ would be
sidor 2011/07/25 21:40:07 Done.
+ OnFormatDevice(device_path.c_str(),
+ false,
+ MOUNT_METHOD_ERROR_LOCAL,
+ "Formatting is already pending.");
+ return;
+ }
+ // Formatting process continues, after unmounting.
+ to_be_formated_[device_path] = file_path;
+ UnmountPath(device_path.c_str());
+ }
+
virtual void UnmountDeviceRecursive(const char* device_path,
UnmountDeviceRecursiveCallbackType callback, void* user_data)
OVERRIDE {
@@ -207,6 +252,17 @@ class MountLibraryImpl : public MountLibrary {
error_message);
}
+ // Callback for FormatRemovableDevice method.
+ static void FormatDeviceCallback(void* object,
+ const char* device_path,
+ bool success,
+ MountMethodErrorType error,
+ const char* error_message) {
+ DCHECK(object);
+ MountLibraryImpl* self = static_cast<MountLibraryImpl*>(object);
+ self->OnFormatDevice(device_path, success, error, error_message);
+ }
+
// Callback for UnmountDeviceRecursive.
static void UnmountDeviceRecursiveCallback(void* object,
const char* device_path,
@@ -225,7 +281,7 @@ class MountLibraryImpl : public MountLibrary {
cb_data->success = false;
} else if (error == MOUNT_METHOD_ERROR_NONE) {
LOG(WARNING) << device_path << " unmounted.";
- }
+ }
// This is safe as long as all callbacks are called on the same thread as
// UnmountDeviceRecursive.
@@ -314,6 +370,13 @@ class MountLibraryImpl : public MountLibrary {
DCHECK(disk);
disk->clear_mount_path();
FireDiskStatusUpdate(MOUNT_DISK_UNMOUNTED, disk);
+ // Check if there is a formatting scheduled
+ PathMap::iterator it = to_be_formated_.find(device_path);
+ if (it != to_be_formated_.end()) {
+ const std::string file_path = it->second;
+ to_be_formated_.erase(it);
+ FormatUnmountedDevice(file_path.c_str());
+ }
} else {
LOG(WARNING) << "Unmount request failed for device "
<< device_path << ", with error: "
@@ -321,6 +384,24 @@ class MountLibraryImpl : public MountLibrary {
}
}
+ void OnFormatDevice(const char* device_path,
+ bool success,
+ MountMethodErrorType error,
+ const char* error_message) {
+ DCHECK(device_path);
+
+ if (error == MOUNT_METHOD_ERROR_NONE && device_path && success) {
+ FireDeviceStatusUpdate(MOUNT_FORMATTING_STARTED, device_path);
+ } else {
+ FireDeviceStatusUpdate(MOUNT_FORMATTING_STARTED,
tbarzic 2011/07/25 20:43:04 Have you considered adding MOUNT_FORMATTING_FAILED
sidor 2011/07/25 21:40:07 Yes, I already talk about this with BenChan. There
+ std::string("!") + device_path);
+ LOG(WARNING) << "Format request failed for device "
+ << device_path << ", with error: "
+ << (error_message ? error_message : "Unknown");
+ }
+ }
+
+
void OnGetDiskProperties(const char* device_path,
const DiskInfo* disk1,
MountMethodErrorType error,
@@ -476,6 +557,10 @@ class MountLibraryImpl : public MountLibrary {
type = MOUNT_DEVICE_SCANNED;
break;
}
+ case FORMATTING_FINISHED: {
+ type = MOUNT_FORMATTING_FINISHED;
+ break;
+ }
}
FireDeviceStatusUpdate(type, std::string(device_path));
}
@@ -512,6 +597,10 @@ class MountLibraryImpl : public MountLibrary {
// The list of disks found.
MountLibrary::DiskMap disks_;
+ // Set of devices that are supposed to be formated, but are currently waiting
+ // to be unmounted.
+ PathMap to_be_formated_; //after unmounting
+
DISALLOW_COPY_AND_ASSIGN(MountLibraryImpl);
};
@@ -527,6 +616,8 @@ class MountLibraryStubImpl : public MountLibrary {
virtual void RequestMountInfoRefresh() OVERRIDE {}
virtual void MountPath(const char* device_path) OVERRIDE {}
virtual void UnmountPath(const char* device_path) OVERRIDE {}
+ virtual void FormatUnmountedDevice(const char* device_path) OVERRIDE {}
+ virtual void FormatMountedDevice(const char* device_mount_path) OVERRIDE {}
virtual void UnmountDeviceRecursive(const char* device_path,
UnmountDeviceRecursiveCallbackType callback, void* user_data)
OVERRIDE {}

Powered by Google App Engine
This is Rietveld 408576698