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 "dbus/bus.h" | 9 #include "dbus/bus.h" |
10 #include "dbus/message.h" | 10 #include "dbus/message.h" |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 explicit CrosDisksClientImpl(dbus::Bus* bus) | 107 explicit CrosDisksClientImpl(dbus::Bus* bus) |
108 : proxy_(bus->GetObjectProxy( | 108 : proxy_(bus->GetObjectProxy( |
109 cros_disks::kCrosDisksServiceName, | 109 cros_disks::kCrosDisksServiceName, |
110 dbus::ObjectPath(cros_disks::kCrosDisksServicePath))), | 110 dbus::ObjectPath(cros_disks::kCrosDisksServicePath))), |
111 weak_ptr_factory_(this) { | 111 weak_ptr_factory_(this) { |
112 } | 112 } |
113 | 113 |
114 // CrosDisksClient override. | 114 // CrosDisksClient override. |
115 virtual void Mount(const std::string& source_path, | 115 virtual void Mount(const std::string& source_path, |
116 MountType type, | 116 MountType type, |
117 MountCallback callback, | 117 const MountCallback& callback, |
118 ErrorCallback error_callback) OVERRIDE { | 118 const ErrorCallback& error_callback) OVERRIDE { |
119 dbus::MethodCall method_call(cros_disks::kCrosDisksInterface, | 119 dbus::MethodCall method_call(cros_disks::kCrosDisksInterface, |
120 cros_disks::kMount); | 120 cros_disks::kMount); |
121 dbus::MessageWriter writer(&method_call); | 121 dbus::MessageWriter writer(&method_call); |
122 writer.AppendString(source_path); | 122 writer.AppendString(source_path); |
123 writer.AppendString(""); // auto detect filesystem. | 123 writer.AppendString(""); // auto detect filesystem. |
124 std::vector<std::string> mount_options(kDefaultMountOptions, | 124 std::vector<std::string> mount_options(kDefaultMountOptions, |
125 kDefaultMountOptions + | 125 kDefaultMountOptions + |
126 arraysize(kDefaultMountOptions)); | 126 arraysize(kDefaultMountOptions)); |
127 writer.AppendArrayOfStrings(mount_options); | 127 writer.AppendArrayOfStrings(mount_options); |
128 proxy_->CallMethod(&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, | 128 proxy_->CallMethod(&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
129 base::Bind(&CrosDisksClientImpl::OnMount, | 129 base::Bind(&CrosDisksClientImpl::OnMount, |
130 weak_ptr_factory_.GetWeakPtr(), | 130 weak_ptr_factory_.GetWeakPtr(), |
131 callback, | 131 callback, |
132 error_callback)); | 132 error_callback)); |
133 } | 133 } |
134 | 134 |
135 // CrosDisksClient override. | 135 // CrosDisksClient override. |
136 virtual void Unmount(const std::string& device_path, | 136 virtual void Unmount(const std::string& device_path, |
137 UnmountCallback callback, | 137 const UnmountCallback& callback, |
138 ErrorCallback error_callback) OVERRIDE { | 138 const ErrorCallback& error_callback) OVERRIDE { |
139 dbus::MethodCall method_call(cros_disks::kCrosDisksInterface, | 139 dbus::MethodCall method_call(cros_disks::kCrosDisksInterface, |
140 cros_disks::kUnmount); | 140 cros_disks::kUnmount); |
141 dbus::MessageWriter writer(&method_call); | 141 dbus::MessageWriter writer(&method_call); |
142 writer.AppendString(device_path); | 142 writer.AppendString(device_path); |
143 std::vector<std::string> unmount_options(kDefaultUnmountOptions, | 143 std::vector<std::string> unmount_options(kDefaultUnmountOptions, |
144 kDefaultUnmountOptions + | 144 kDefaultUnmountOptions + |
145 arraysize(kDefaultUnmountOptions)); | 145 arraysize(kDefaultUnmountOptions)); |
146 writer.AppendArrayOfStrings(unmount_options); | 146 writer.AppendArrayOfStrings(unmount_options); |
147 proxy_->CallMethod(&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, | 147 proxy_->CallMethod(&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
148 base::Bind(&CrosDisksClientImpl::OnUnmount, | 148 base::Bind(&CrosDisksClientImpl::OnUnmount, |
149 weak_ptr_factory_.GetWeakPtr(), | 149 weak_ptr_factory_.GetWeakPtr(), |
150 device_path, | 150 device_path, |
151 callback, | 151 callback, |
152 error_callback)); | 152 error_callback)); |
153 } | 153 } |
154 | 154 |
155 // CrosDisksClient override. | 155 // CrosDisksClient override. |
156 virtual void EnumerateAutoMountableDevices( | 156 virtual void EnumerateAutoMountableDevices( |
157 EnumerateAutoMountableDevicesCallback callback, | 157 const EnumerateAutoMountableDevicesCallback& callback, |
158 ErrorCallback error_callback) OVERRIDE { | 158 const ErrorCallback& error_callback) OVERRIDE { |
159 dbus::MethodCall method_call(cros_disks::kCrosDisksInterface, | 159 dbus::MethodCall method_call(cros_disks::kCrosDisksInterface, |
160 cros_disks::kEnumerateAutoMountableDevices); | 160 cros_disks::kEnumerateAutoMountableDevices); |
161 proxy_->CallMethod( | 161 proxy_->CallMethod( |
162 &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, | 162 &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
163 base::Bind(&CrosDisksClientImpl::OnEnumerateAutoMountableDevices, | 163 base::Bind(&CrosDisksClientImpl::OnEnumerateAutoMountableDevices, |
164 weak_ptr_factory_.GetWeakPtr(), | 164 weak_ptr_factory_.GetWeakPtr(), |
165 callback, | 165 callback, |
166 error_callback)); | 166 error_callback)); |
167 } | 167 } |
168 | 168 |
169 // CrosDisksClient override. | 169 // CrosDisksClient override. |
170 virtual void FormatDevice(const std::string& device_path, | 170 virtual void FormatDevice(const std::string& device_path, |
171 const std::string& filesystem, | 171 const std::string& filesystem, |
172 FormatDeviceCallback callback, | 172 const FormatDeviceCallback& callback, |
173 ErrorCallback error_callback) OVERRIDE { | 173 const ErrorCallback& error_callback) OVERRIDE { |
174 dbus::MethodCall method_call(cros_disks::kCrosDisksInterface, | 174 dbus::MethodCall method_call(cros_disks::kCrosDisksInterface, |
175 cros_disks::kFormatDevice); | 175 cros_disks::kFormatDevice); |
176 dbus::MessageWriter writer(&method_call); | 176 dbus::MessageWriter writer(&method_call); |
177 writer.AppendString(device_path); | 177 writer.AppendString(device_path); |
178 writer.AppendString(filesystem); | 178 writer.AppendString(filesystem); |
179 proxy_->CallMethod(&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, | 179 proxy_->CallMethod(&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
180 base::Bind(&CrosDisksClientImpl::OnFormatDevice, | 180 base::Bind(&CrosDisksClientImpl::OnFormatDevice, |
181 weak_ptr_factory_.GetWeakPtr(), | 181 weak_ptr_factory_.GetWeakPtr(), |
182 device_path, | 182 device_path, |
183 callback, | 183 callback, |
184 error_callback)); | 184 error_callback)); |
185 } | 185 } |
186 | 186 |
187 // CrosDisksClient override. | 187 // CrosDisksClient override. |
188 virtual void GetDeviceProperties(const std::string& device_path, | 188 virtual void GetDeviceProperties( |
189 GetDevicePropertiesCallback callback, | 189 const std::string& device_path, |
190 ErrorCallback error_callback) OVERRIDE { | 190 const GetDevicePropertiesCallback& callback, |
| 191 const ErrorCallback& error_callback) OVERRIDE { |
191 dbus::MethodCall method_call(cros_disks::kCrosDisksInterface, | 192 dbus::MethodCall method_call(cros_disks::kCrosDisksInterface, |
192 cros_disks::kGetDeviceProperties); | 193 cros_disks::kGetDeviceProperties); |
193 dbus::MessageWriter writer(&method_call); | 194 dbus::MessageWriter writer(&method_call); |
194 writer.AppendString(device_path); | 195 writer.AppendString(device_path); |
195 proxy_->CallMethod(&method_call, | 196 proxy_->CallMethod(&method_call, |
196 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, | 197 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
197 base::Bind(&CrosDisksClientImpl::OnGetDeviceProperties, | 198 base::Bind(&CrosDisksClientImpl::OnGetDeviceProperties, |
198 weak_ptr_factory_.GetWeakPtr(), | 199 weak_ptr_factory_.GetWeakPtr(), |
199 device_path, | 200 device_path, |
200 callback, | 201 callback, |
201 error_callback)); | 202 error_callback)); |
202 } | 203 } |
203 | 204 |
204 // CrosDisksClient override. | 205 // CrosDisksClient override. |
205 virtual void SetUpConnections( | 206 virtual void SetUpConnections( |
206 MountEventHandler mount_event_handler, | 207 const MountEventHandler& mount_event_handler, |
207 MountCompletedHandler mount_completed_handler) OVERRIDE { | 208 const MountCompletedHandler& mount_completed_handler) OVERRIDE { |
208 static const SignalEventTuple kSignalEventTuples[] = { | 209 static const SignalEventTuple kSignalEventTuples[] = { |
209 { cros_disks::kDeviceAdded, DEVICE_ADDED }, | 210 { cros_disks::kDeviceAdded, DEVICE_ADDED }, |
210 { cros_disks::kDeviceScanned, DEVICE_SCANNED }, | 211 { cros_disks::kDeviceScanned, DEVICE_SCANNED }, |
211 { cros_disks::kDeviceRemoved, DEVICE_REMOVED }, | 212 { cros_disks::kDeviceRemoved, DEVICE_REMOVED }, |
212 { cros_disks::kDiskAdded, DISK_ADDED }, | 213 { cros_disks::kDiskAdded, DISK_ADDED }, |
213 { cros_disks::kDiskChanged, DISK_CHANGED }, | 214 { cros_disks::kDiskChanged, DISK_CHANGED }, |
214 { cros_disks::kDiskRemoved, DISK_REMOVED }, | 215 { cros_disks::kDiskRemoved, DISK_REMOVED }, |
215 { cros_disks::kFormattingFinished, FORMATTING_FINISHED }, | 216 { cros_disks::kFormattingFinished, FORMATTING_FINISHED }, |
216 }; | 217 }; |
217 const size_t kNumSignalEventTuples = arraysize(kSignalEventTuples); | 218 const size_t kNumSignalEventTuples = arraysize(kSignalEventTuples); |
(...skipping 21 matching lines...) Expand all Loading... |
239 | 240 |
240 private: | 241 private: |
241 // A struct to contain a pair of signal name and mount event type. | 242 // A struct to contain a pair of signal name and mount event type. |
242 // Used by SetUpConnections. | 243 // Used by SetUpConnections. |
243 struct SignalEventTuple { | 244 struct SignalEventTuple { |
244 const char *signal_name; | 245 const char *signal_name; |
245 MountEventType event_type; | 246 MountEventType event_type; |
246 }; | 247 }; |
247 | 248 |
248 // Handles the result of Mount and calls |callback| or |error_callback|. | 249 // Handles the result of Mount and calls |callback| or |error_callback|. |
249 void OnMount(MountCallback callback, | 250 void OnMount(const MountCallback& callback, |
250 ErrorCallback error_callback, | 251 const ErrorCallback& error_callback, |
251 dbus::Response* response) { | 252 dbus::Response* response) { |
252 if (!response) { | 253 if (!response) { |
253 error_callback.Run(); | 254 error_callback.Run(); |
254 return; | 255 return; |
255 } | 256 } |
256 callback.Run(); | 257 callback.Run(); |
257 } | 258 } |
258 | 259 |
259 // Handles the result of Unount and calls |callback| or |error_callback|. | 260 // Handles the result of Unount and calls |callback| or |error_callback|. |
260 void OnUnmount(const std::string& device_path, | 261 void OnUnmount(const std::string& device_path, |
261 UnmountCallback callback, | 262 const UnmountCallback& callback, |
262 ErrorCallback error_callback, | 263 const ErrorCallback& error_callback, |
263 dbus::Response* response) { | 264 dbus::Response* response) { |
264 if (!response) { | 265 if (!response) { |
265 error_callback.Run(); | 266 error_callback.Run(); |
266 return; | 267 return; |
267 } | 268 } |
268 callback.Run(device_path); | 269 callback.Run(device_path); |
269 } | 270 } |
270 | 271 |
271 // Handles the result of EnumerateAutoMountableDevices and calls |callback| or | 272 // Handles the result of EnumerateAutoMountableDevices and calls |callback| or |
272 // |error_callback|. | 273 // |error_callback|. |
273 void OnEnumerateAutoMountableDevices( | 274 void OnEnumerateAutoMountableDevices( |
274 EnumerateAutoMountableDevicesCallback callback, | 275 const EnumerateAutoMountableDevicesCallback& callback, |
275 ErrorCallback error_callback, | 276 const ErrorCallback& error_callback, |
276 dbus::Response* response) { | 277 dbus::Response* response) { |
277 if (!response) { | 278 if (!response) { |
278 error_callback.Run(); | 279 error_callback.Run(); |
279 return; | 280 return; |
280 } | 281 } |
281 dbus::MessageReader reader(response); | 282 dbus::MessageReader reader(response); |
282 std::vector<std::string> device_paths; | 283 std::vector<std::string> device_paths; |
283 if (!reader.PopArrayOfStrings(&device_paths)) { | 284 if (!reader.PopArrayOfStrings(&device_paths)) { |
284 LOG(ERROR) << "Invalid response: " << response->ToString(); | 285 LOG(ERROR) << "Invalid response: " << response->ToString(); |
285 error_callback.Run(); | 286 error_callback.Run(); |
286 return; | 287 return; |
287 } | 288 } |
288 callback.Run(device_paths); | 289 callback.Run(device_paths); |
289 } | 290 } |
290 | 291 |
291 // Handles the result of FormatDevice and calls |callback| or | 292 // Handles the result of FormatDevice and calls |callback| or |
292 // |error_callback|. | 293 // |error_callback|. |
293 void OnFormatDevice(const std::string& device_path, | 294 void OnFormatDevice(const std::string& device_path, |
294 FormatDeviceCallback callback, | 295 const FormatDeviceCallback& callback, |
295 ErrorCallback error_callback, | 296 const ErrorCallback& error_callback, |
296 dbus::Response* response) { | 297 dbus::Response* response) { |
297 if (!response) { | 298 if (!response) { |
298 error_callback.Run(); | 299 error_callback.Run(); |
299 return; | 300 return; |
300 } | 301 } |
301 dbus::MessageReader reader(response); | 302 dbus::MessageReader reader(response); |
302 bool success = false; | 303 bool success = false; |
303 if (!reader.PopBool(&success)) { | 304 if (!reader.PopBool(&success)) { |
304 LOG(ERROR) << "Invalid response: " << response->ToString(); | 305 LOG(ERROR) << "Invalid response: " << response->ToString(); |
305 error_callback.Run(); | 306 error_callback.Run(); |
306 return; | 307 return; |
307 } | 308 } |
308 callback.Run(device_path, success); | 309 callback.Run(device_path, success); |
309 } | 310 } |
310 | 311 |
311 // Handles the result of GetDeviceProperties and calls |callback| or | 312 // Handles the result of GetDeviceProperties and calls |callback| or |
312 // |error_callback|. | 313 // |error_callback|. |
313 void OnGetDeviceProperties(const std::string& device_path, | 314 void OnGetDeviceProperties(const std::string& device_path, |
314 GetDevicePropertiesCallback callback, | 315 const GetDevicePropertiesCallback& callback, |
315 ErrorCallback error_callback, | 316 const ErrorCallback& error_callback, |
316 dbus::Response* response) { | 317 dbus::Response* response) { |
317 if (!response) { | 318 if (!response) { |
318 error_callback.Run(); | 319 error_callback.Run(); |
319 return; | 320 return; |
320 } | 321 } |
321 DiskInfo disk(device_path, response); | 322 DiskInfo disk(device_path, response); |
322 callback.Run(disk); | 323 callback.Run(disk); |
323 } | 324 } |
324 | 325 |
325 // Handles mount event signals and calls |handler|. | 326 // Handles mount event signals and calls |handler|. |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
368 }; | 369 }; |
369 | 370 |
370 // A stub implementaion of CrosDisksClient. | 371 // A stub implementaion of CrosDisksClient. |
371 class CrosDisksClientStubImpl : public CrosDisksClient { | 372 class CrosDisksClientStubImpl : public CrosDisksClient { |
372 public: | 373 public: |
373 CrosDisksClientStubImpl() {} | 374 CrosDisksClientStubImpl() {} |
374 virtual ~CrosDisksClientStubImpl() {} | 375 virtual ~CrosDisksClientStubImpl() {} |
375 | 376 |
376 virtual void Mount(const std::string& source_path, | 377 virtual void Mount(const std::string& source_path, |
377 MountType type, | 378 MountType type, |
378 MountCallback callback, | 379 const MountCallback& callback, |
379 ErrorCallback error_callback) OVERRIDE {} | 380 const ErrorCallback& error_callback) OVERRIDE {} |
380 virtual void Unmount(const std::string& device_path, | 381 virtual void Unmount(const std::string& device_path, |
381 UnmountCallback callback, | 382 const UnmountCallback& callback, |
382 ErrorCallback error_callback) OVERRIDE {} | 383 const ErrorCallback& error_callback) OVERRIDE {} |
383 virtual void EnumerateAutoMountableDevices( | 384 virtual void EnumerateAutoMountableDevices( |
384 EnumerateAutoMountableDevicesCallback callback, | 385 const EnumerateAutoMountableDevicesCallback& callback, |
385 ErrorCallback error_callback) OVERRIDE {} | 386 const ErrorCallback& error_callback) OVERRIDE {} |
386 virtual void FormatDevice(const std::string& device_path, | 387 virtual void FormatDevice(const std::string& device_path, |
387 const std::string& filesystem, | 388 const std::string& filesystem, |
388 FormatDeviceCallback callback, | 389 const FormatDeviceCallback& callback, |
389 ErrorCallback error_callback) OVERRIDE {} | 390 const ErrorCallback& error_callback) OVERRIDE {} |
390 virtual void GetDeviceProperties(const std::string& device_path, | 391 virtual void GetDeviceProperties( |
391 GetDevicePropertiesCallback callback, | 392 const std::string& device_path, |
392 ErrorCallback error_callback) OVERRIDE {} | 393 const GetDevicePropertiesCallback& callback, |
| 394 const ErrorCallback& error_callback) OVERRIDE {} |
393 virtual void SetUpConnections( | 395 virtual void SetUpConnections( |
394 MountEventHandler mount_event_handler, | 396 const MountEventHandler& mount_event_handler, |
395 MountCompletedHandler mount_completed_handler) OVERRIDE {} | 397 const MountCompletedHandler& mount_completed_handler) OVERRIDE {} |
396 | 398 |
397 private: | 399 private: |
398 DISALLOW_COPY_AND_ASSIGN(CrosDisksClientStubImpl); | 400 DISALLOW_COPY_AND_ASSIGN(CrosDisksClientStubImpl); |
399 }; | 401 }; |
400 | 402 |
401 } // namespace | 403 } // namespace |
402 | 404 |
403 //////////////////////////////////////////////////////////////////////////////// | 405 //////////////////////////////////////////////////////////////////////////////// |
404 // DiskInfo | 406 // DiskInfo |
405 | 407 |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
557 // static | 559 // static |
558 CrosDisksClient* CrosDisksClient::Create(DBusClientImplementationType type, | 560 CrosDisksClient* CrosDisksClient::Create(DBusClientImplementationType type, |
559 dbus::Bus* bus) { | 561 dbus::Bus* bus) { |
560 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) | 562 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) |
561 return new CrosDisksClientImpl(bus); | 563 return new CrosDisksClientImpl(bus); |
562 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); | 564 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); |
563 return new CrosDisksClientStubImpl(); | 565 return new CrosDisksClientStubImpl(); |
564 } | 566 } |
565 | 567 |
566 } // namespace chromeos | 568 } // namespace chromeos |
OLD | NEW |