| 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 |