1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/dbus/fake_cros_disks_client.h"
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
7a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "base/bind.h"
8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/logging.h"
99ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h"
10a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace chromeos {
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
13a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)FakeCrosDisksClient::FakeCrosDisksClient()
14424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    : unmount_call_count_(0),
15424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      unmount_success_(true),
16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      format_call_count_(0),
17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      format_success_(true) {
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
20424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)FakeCrosDisksClient::~FakeCrosDisksClient() {
21424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
22424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
23424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void FakeCrosDisksClient::Init(dbus::Bus* bus) {
24424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeCrosDisksClient::Mount(const std::string& source_path,
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                const std::string& source_format,
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                const std::string& mount_label,
297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                const base::Closure& callback,
307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                const base::Closure& error_callback) {
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeCrosDisksClient::Unmount(const std::string& device_path,
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                  UnmountOptions options,
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                  const base::Closure& callback,
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                  const base::Closure& error_callback) {
37a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  DCHECK(!callback.is_null());
38a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  DCHECK(!error_callback.is_null());
39a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
40a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  unmount_call_count_++;
41a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  last_unmount_device_path_ = device_path;
42a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  last_unmount_options_ = options;
43a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  base::MessageLoopProxy::current()->PostTask(
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      FROM_HERE, unmount_success_ ? callback : error_callback);
45424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  if (!unmount_listener_.is_null())
46a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    unmount_listener_.Run();
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeCrosDisksClient::EnumerateAutoMountableDevices(
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const EnumerateAutoMountableDevicesCallback& callback,
517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    const base::Closure& error_callback) {
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void FakeCrosDisksClient::EnumerateMountEntries(
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const EnumerateMountEntriesCallback& callback,
56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const base::Closure& error_callback) {
57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeCrosDisksClient::Format(const std::string& device_path,
60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                 const std::string& filesystem,
61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                 const base::Closure& callback,
62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                 const base::Closure& error_callback) {
63a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  DCHECK(!callback.is_null());
64a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  DCHECK(!error_callback.is_null());
65a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  format_call_count_++;
67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  last_format_device_path_ = device_path;
68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  last_format_filesystem_ = filesystem;
69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  if (format_success_) {
70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    base::MessageLoopProxy::current()->PostTask(FROM_HERE, callback);
71a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  } else {
72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    base::MessageLoopProxy::current()->PostTask(FROM_HERE, error_callback);
73a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  }
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeCrosDisksClient::GetDeviceProperties(
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const std::string& device_path,
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const GetDevicePropertiesCallback& callback,
797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    const base::Closure& error_callback) {
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeCrosDisksClient::SetMountEventHandler(
83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const MountEventHandler& mount_event_handler) {
84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  mount_event_handler_ = mount_event_handler;
85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeCrosDisksClient::SetMountCompletedHandler(
88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const MountCompletedHandler& mount_completed_handler) {
89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  mount_completed_handler_ = mount_completed_handler;
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
92010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeCrosDisksClient::SetFormatCompletedHandler(
93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const FormatCompletedHandler& format_completed_handler) {
94010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  format_completed_handler_ = format_completed_handler;
95010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
96010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool FakeCrosDisksClient::SendMountEvent(MountEventType event,
98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                         const std::string& path) {
99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (mount_event_handler_.is_null())
100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return false;
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  mount_event_handler_.Run(event, path);
102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return true;
103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool FakeCrosDisksClient::SendMountCompletedEvent(
106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    MountError error_code,
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const std::string& source_path,
108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    MountType mount_type,
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const std::string& mount_path) {
110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (mount_completed_handler_.is_null())
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return false;
112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  mount_completed_handler_.Run(
113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      MountEntry(error_code, source_path, mount_type, mount_path));
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return true;
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
117010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)bool FakeCrosDisksClient::SendFormatCompletedEvent(
118010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    FormatError error_code,
119010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const std::string& device_path) {
120010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  if (format_completed_handler_.is_null())
121010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return false;
122010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  format_completed_handler_.Run(error_code, device_path);
123010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return true;
124010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
125010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace chromeos
127