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

Unified Diff: chromeos/dbus/fake_cros_disks_client.cc

Issue 676423004: Merge CrosDisksClientStubImpl into FakeCrosDisksClient (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove static Created 6 years, 2 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
« no previous file with comments | « chromeos/dbus/fake_cros_disks_client.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chromeos/dbus/fake_cros_disks_client.cc
diff --git a/chromeos/dbus/fake_cros_disks_client.cc b/chromeos/dbus/fake_cros_disks_client.cc
index e298013665872cbf7a89406dbb3c98313125e8e7..ab0dce00d67bf925cdb8f79dbaa1d29e19eca289 100644
--- a/chromeos/dbus/fake_cros_disks_client.cc
+++ b/chromeos/dbus/fake_cros_disks_client.cc
@@ -5,11 +5,63 @@
#include "chromeos/dbus/fake_cros_disks_client.h"
#include "base/bind.h"
+#include "base/files/file_util.h"
#include "base/logging.h"
#include "base/message_loop/message_loop.h"
+#include "base/task_runner_util.h"
+#include "base/threading/worker_pool.h"
namespace chromeos {
+namespace {
+
+// Performs fake mounting by creating a directory with a dummy file.
+MountError PerformFakeMount(const std::string& source_path,
+ const base::FilePath& mounted_path) {
+ // Just create an empty directory and shows it as the mounted directory.
+ if (!base::CreateDirectory(mounted_path)) {
+ DLOG(ERROR) << "Failed to create directory at " << mounted_path.value();
+ return MOUNT_ERROR_DIRECTORY_CREATION_FAILED;
+ }
+
+ // Put a dummy file.
+ const base::FilePath dummy_file_path =
+ mounted_path.Append("SUCCESSFULLY_PERFORMED_FAKE_MOUNT.txt");
+ const std::string dummy_file_content = "This is a dummy file.";
+ const int write_result = base::WriteFile(
+ dummy_file_path, dummy_file_content.data(), dummy_file_content.size());
+ if (write_result != static_cast<int>(dummy_file_content.size())) {
+ DLOG(ERROR) << "Failed to put a dummy file at "
+ << dummy_file_path.value();
+ return MOUNT_ERROR_MOUNT_PROGRAM_FAILED;
+ }
+
+ return MOUNT_ERROR_NONE;
+}
+
+// Continuation of Mount().
+void DidMount(const CrosDisksClient::MountCompletedHandler&
+ mount_completed_handler,
+ const std::string& source_path,
+ MountType type,
+ const base::Closure& callback,
+ const base::FilePath& mounted_path,
+ MountError mount_error) {
+ // Tell the caller of Mount() that the mount request was accepted.
+ base::MessageLoopProxy::current()->PostTask(FROM_HERE, callback);
+
+ // Tell the caller of Mount() that the mount completed.
+ if (!mount_completed_handler.is_null()) {
+ base::MessageLoopProxy::current()->PostTask(
+ FROM_HERE,
+ base::Bind(mount_completed_handler,
+ MountEntry(mount_error, source_path, type,
+ mounted_path.AsUTF8Unsafe())));
+ }
+}
+
+} // namespace
+
FakeCrosDisksClient::FakeCrosDisksClient()
: unmount_call_count_(0),
unmount_success_(true),
@@ -28,6 +80,23 @@ void FakeCrosDisksClient::Mount(const std::string& source_path,
const std::string& mount_label,
const base::Closure& callback,
const base::Closure& error_callback) {
+ // This fake implementation only accepts archive mount requests.
+ const MountType type = MOUNT_TYPE_ARCHIVE;
+
+ const base::FilePath mounted_path = GetArchiveMountPoint().Append(
+ base::FilePath::FromUTF8Unsafe(mount_label));
+ mounted_paths_.insert(mounted_path);
+
+ base::PostTaskAndReplyWithResult(
+ base::WorkerPool::GetTaskRunner(true /* task_is_slow */).get(),
+ FROM_HERE,
+ base::Bind(&PerformFakeMount, source_path, mounted_path),
+ base::Bind(&DidMount,
+ mount_completed_handler_,
+ source_path,
+ type,
+ callback,
+ mounted_path));
}
void FakeCrosDisksClient::Unmount(const std::string& device_path,
@@ -37,6 +106,18 @@ void FakeCrosDisksClient::Unmount(const std::string& device_path,
DCHECK(!callback.is_null());
DCHECK(!error_callback.is_null());
+ // Remove the dummy mounted directory if it exists.
+ if (mounted_paths_.count(base::FilePath::FromUTF8Unsafe(device_path)) > 0) {
+ mounted_paths_.erase(base::FilePath::FromUTF8Unsafe(device_path));
+ base::WorkerPool::PostTaskAndReply(
+ FROM_HERE,
+ base::Bind(base::IgnoreResult(&base::DeleteFile),
+ base::FilePath::FromUTF8Unsafe(device_path),
+ true /* recursive */),
+ callback,
+ true /* task_is_slow */);
+ }
+
unmount_call_count_++;
last_unmount_device_path_ = device_path;
last_unmount_options_ = options;
« no previous file with comments | « chromeos/dbus/fake_cros_disks_client.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698