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)#ifndef CHROMEOS_DBUS_FAKE_CROS_DISKS_CLIENT_H_
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define CHROMEOS_DBUS_FAKE_CROS_DISKS_CLIENT_H_
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <string>
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/callback.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/dbus/cros_disks_client.h"
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace chromeos {
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// A fake implementation of CrosDiskeClient. This class provides a fake behavior
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// and the user of this class can raise a fake mouse events.
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class FakeCrosDisksClient : public CrosDisksClient {
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FakeCrosDisksClient();
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual ~FakeCrosDisksClient();
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
22424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // CrosDisksClient overrides
23424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual void Init(dbus::Bus* bus) OVERRIDE;
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void Mount(const std::string& source_path,
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                     const std::string& source_format,
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                     const std::string& mount_label,
277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                     const base::Closure& callback,
287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                     const base::Closure& error_callback) OVERRIDE;
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void Unmount(const std::string& device_path,
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       UnmountOptions options,
31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                       const base::Closure& callback,
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                       const base::Closure& error_callback) OVERRIDE;
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void EnumerateAutoMountableDevices(
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const EnumerateAutoMountableDevicesCallback& callback,
357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      const base::Closure& error_callback) OVERRIDE;
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void EnumerateMountEntries(
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      const EnumerateMountEntriesCallback& callback,
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      const base::Closure& error_callback) OVERRIDE;
39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void Format(const std::string& device_path,
40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                      const std::string& filesystem,
41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                      const base::Closure& callback,
42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                      const base::Closure& error_callback) OVERRIDE;
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void GetDeviceProperties(
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const std::string& device_path,
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const GetDevicePropertiesCallback& callback,
467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      const base::Closure& error_callback) OVERRIDE;
47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void SetMountEventHandler(
48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const MountEventHandler& mount_event_handler) OVERRIDE;
49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void SetMountCompletedHandler(
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const MountCompletedHandler& mount_completed_handler) OVERRIDE;
51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void SetFormatCompletedHandler(
52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const FormatCompletedHandler& format_completed_handler) OVERRIDE;
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Used in tests to simulate signals sent by cros disks layer.
55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Invokes handlers set in |SetMountEventHandler|, |SetMountCompletedHandler|,
56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // and |SetFormatCompletedHandler|.
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool SendMountEvent(MountEventType event, const std::string& path);
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool SendMountCompletedEvent(MountError error_code,
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                               const std::string& source_path,
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                               MountType mount_type,
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                               const std::string& mount_path);
62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  bool SendFormatCompletedEvent(FormatError error_code,
63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                const std::string& device_path);
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
65a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  // Returns how many times Unmount() was called.
66a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  int unmount_call_count() const {
67a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    return unmount_call_count_;
68a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  }
69a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
70a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  // Returns the |device_path| parameter from the last invocation of Unmount().
71a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  const std::string& last_unmount_device_path() const {
72a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    return last_unmount_device_path_;
73a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  }
74a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
75a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  // Returns the |options| parameter from the last invocation of Unmount().
76a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  UnmountOptions last_unmount_options() const {
77a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    return last_unmount_options_;
78a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  }
79a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
80a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  // Makes the subsequent Unmount() calls fail. Unmount() succeeds by default.
81a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  void MakeUnmountFail() {
82a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    unmount_success_ = false;
83a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  }
84a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
85a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  // Sets a listener callbackif the following Unmount() call is success or not.
86a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  // Unmount() calls the corresponding callback given as a parameter.
87a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  void set_unmount_listener(base::Closure listener) {
88a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    unmount_listener_ = listener;
89a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  }
90a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
91010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Returns how many times Format() was called.
92010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  int format_call_count() const {
93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return format_call_count_;
94a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  }
95a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
96010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Returns the |device_path| parameter from the last invocation of Format().
97010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  const std::string& last_format_device_path() const {
98010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return last_format_device_path_;
99a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  }
100a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
101010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Returns the |filesystem| parameter from the last invocation of Format().
102010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  const std::string& last_format_filesystem() const {
103010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return last_format_filesystem_;
104a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  }
105a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
106010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Makes the subsequent Format() calls fail. Format() succeeds by default.
107010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  void MakeFormatFail() {
108010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    format_success_ = false;
109a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  }
110a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  MountEventHandler mount_event_handler_;
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  MountCompletedHandler mount_completed_handler_;
114010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  FormatCompletedHandler format_completed_handler_;
115a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
116a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  int unmount_call_count_;
117a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  std::string last_unmount_device_path_;
118a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  UnmountOptions last_unmount_options_;
119a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  bool unmount_success_;
120a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  base::Closure unmount_listener_;
121010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  int format_call_count_;
122010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  std::string last_format_device_path_;
123010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  std::string last_format_filesystem_;
124010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  bool format_success_;
125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace chromeos
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif  // CHROMEOS_DBUS_FAKE_CROS_DISKS_CLIENT_H_
130