OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chromeos/dbus/cros_disks_client.h" | 5 #include "chromeos/dbus/cros_disks_client.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
| 9 #include "base/stringprintf.h" |
9 #include "dbus/bus.h" | 10 #include "dbus/bus.h" |
10 #include "dbus/message.h" | 11 #include "dbus/message.h" |
11 #include "dbus/object_path.h" | 12 #include "dbus/object_path.h" |
12 #include "dbus/object_proxy.h" | 13 #include "dbus/object_proxy.h" |
13 #include "third_party/cros_system_api/dbus/service_constants.h" | 14 #include "third_party/cros_system_api/dbus/service_constants.h" |
14 | 15 |
15 namespace chromeos { | 16 namespace chromeos { |
16 | 17 |
17 namespace { | 18 namespace { |
18 | 19 |
19 const char* kDefaultMountOptions[] = { | 20 const char* kDefaultMountOptions[] = { |
20 "rw", | 21 "rw", |
21 "nodev", | 22 "nodev", |
22 "noexec", | 23 "noexec", |
23 "nosuid", | 24 "nosuid", |
24 }; | 25 }; |
25 | 26 |
26 const char* kDefaultUnmountOptions[] = { | 27 const char* kDefaultUnmountOptions[] = { |
27 "force", | 28 "force", |
28 }; | 29 }; |
29 | 30 |
| 31 const char kMountLabelOption[] = "mountlabel"; |
| 32 |
30 // Checks if retrieved media type is in boundaries of DeviceMediaType. | 33 // Checks if retrieved media type is in boundaries of DeviceMediaType. |
31 bool IsValidMediaType(uint32 type) { | 34 bool IsValidMediaType(uint32 type) { |
32 return type < static_cast<uint32>(cros_disks::DEVICE_MEDIA_NUM_VALUES); | 35 return type < static_cast<uint32>(cros_disks::DEVICE_MEDIA_NUM_VALUES); |
33 } | 36 } |
34 | 37 |
35 | 38 |
36 // Translates enum used in cros-disks to enum used in Chrome. | 39 // Translates enum used in cros-disks to enum used in Chrome. |
37 // Note that we could just do static_cast, but this is less sensitive to | 40 // Note that we could just do static_cast, but this is less sensitive to |
38 // changes in cros-disks. | 41 // changes in cros-disks. |
39 DeviceType DeviceMediaTypeToDeviceType(uint32 media_type_uint32) { | 42 DeviceType DeviceMediaTypeToDeviceType(uint32 media_type_uint32) { |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 explicit CrosDisksClientImpl(dbus::Bus* bus) | 110 explicit CrosDisksClientImpl(dbus::Bus* bus) |
108 : proxy_(bus->GetObjectProxy( | 111 : proxy_(bus->GetObjectProxy( |
109 cros_disks::kCrosDisksServiceName, | 112 cros_disks::kCrosDisksServiceName, |
110 dbus::ObjectPath(cros_disks::kCrosDisksServicePath))), | 113 dbus::ObjectPath(cros_disks::kCrosDisksServicePath))), |
111 weak_ptr_factory_(this) { | 114 weak_ptr_factory_(this) { |
112 } | 115 } |
113 | 116 |
114 // CrosDisksClient override. | 117 // CrosDisksClient override. |
115 virtual void Mount(const std::string& source_path, | 118 virtual void Mount(const std::string& source_path, |
116 const std::string& source_format, | 119 const std::string& source_format, |
| 120 const std::string& mount_label, |
117 MountType type, | 121 MountType type, |
118 const MountCallback& callback, | 122 const MountCallback& callback, |
119 const ErrorCallback& error_callback) OVERRIDE { | 123 const ErrorCallback& error_callback) OVERRIDE { |
120 dbus::MethodCall method_call(cros_disks::kCrosDisksInterface, | 124 dbus::MethodCall method_call(cros_disks::kCrosDisksInterface, |
121 cros_disks::kMount); | 125 cros_disks::kMount); |
122 dbus::MessageWriter writer(&method_call); | 126 dbus::MessageWriter writer(&method_call); |
123 writer.AppendString(source_path); | 127 writer.AppendString(source_path); |
124 writer.AppendString(source_format); | 128 writer.AppendString(source_format); |
125 std::vector<std::string> mount_options(kDefaultMountOptions, | 129 std::vector<std::string> mount_options(kDefaultMountOptions, |
126 kDefaultMountOptions + | 130 kDefaultMountOptions + |
127 arraysize(kDefaultMountOptions)); | 131 arraysize(kDefaultMountOptions)); |
| 132 if (!mount_label.empty()) { |
| 133 std::string mount_label_option = base::StringPrintf("%s=%s", |
| 134 kMountLabelOption, |
| 135 mount_label.c_str()); |
| 136 mount_options.push_back(mount_label_option); |
| 137 } |
128 writer.AppendArrayOfStrings(mount_options); | 138 writer.AppendArrayOfStrings(mount_options); |
129 proxy_->CallMethod(&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, | 139 proxy_->CallMethod(&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
130 base::Bind(&CrosDisksClientImpl::OnMount, | 140 base::Bind(&CrosDisksClientImpl::OnMount, |
131 weak_ptr_factory_.GetWeakPtr(), | 141 weak_ptr_factory_.GetWeakPtr(), |
132 callback, | 142 callback, |
133 error_callback)); | 143 error_callback)); |
134 } | 144 } |
135 | 145 |
136 // CrosDisksClient override. | 146 // CrosDisksClient override. |
137 virtual void Unmount(const std::string& device_path, | 147 virtual void Unmount(const std::string& device_path, |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
370 }; | 380 }; |
371 | 381 |
372 // A stub implementaion of CrosDisksClient. | 382 // A stub implementaion of CrosDisksClient. |
373 class CrosDisksClientStubImpl : public CrosDisksClient { | 383 class CrosDisksClientStubImpl : public CrosDisksClient { |
374 public: | 384 public: |
375 CrosDisksClientStubImpl() {} | 385 CrosDisksClientStubImpl() {} |
376 virtual ~CrosDisksClientStubImpl() {} | 386 virtual ~CrosDisksClientStubImpl() {} |
377 | 387 |
378 virtual void Mount(const std::string& source_path, | 388 virtual void Mount(const std::string& source_path, |
379 const std::string& source_format, | 389 const std::string& source_format, |
| 390 const std::string& mount_label, |
380 MountType type, | 391 MountType type, |
381 const MountCallback& callback, | 392 const MountCallback& callback, |
382 const ErrorCallback& error_callback) OVERRIDE {} | 393 const ErrorCallback& error_callback) OVERRIDE {} |
383 virtual void Unmount(const std::string& device_path, | 394 virtual void Unmount(const std::string& device_path, |
384 const UnmountCallback& callback, | 395 const UnmountCallback& callback, |
385 const ErrorCallback& error_callback) OVERRIDE {} | 396 const ErrorCallback& error_callback) OVERRIDE {} |
386 virtual void EnumerateAutoMountableDevices( | 397 virtual void EnumerateAutoMountableDevices( |
387 const EnumerateAutoMountableDevicesCallback& callback, | 398 const EnumerateAutoMountableDevicesCallback& callback, |
388 const ErrorCallback& error_callback) OVERRIDE {} | 399 const ErrorCallback& error_callback) OVERRIDE {} |
389 virtual void FormatDevice(const std::string& device_path, | 400 virtual void FormatDevice(const std::string& device_path, |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
561 // static | 572 // static |
562 CrosDisksClient* CrosDisksClient::Create(DBusClientImplementationType type, | 573 CrosDisksClient* CrosDisksClient::Create(DBusClientImplementationType type, |
563 dbus::Bus* bus) { | 574 dbus::Bus* bus) { |
564 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) | 575 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) |
565 return new CrosDisksClientImpl(bus); | 576 return new CrosDisksClientImpl(bus); |
566 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); | 577 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); |
567 return new CrosDisksClientStubImpl(); | 578 return new CrosDisksClientStubImpl(); |
568 } | 579 } |
569 | 580 |
570 } // namespace chromeos | 581 } // namespace chromeos |
OLD | NEW |