| OLD | NEW |
| 1 // Copyright (c) 2011 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 "chrome/browser/chromeos/dbus/cros_disks_client.h" | 5 #include "chrome/browser/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 "chrome/browser/chromeos/system/runtime_environment.h" | 9 #include "chrome/browser/chromeos/system/runtime_environment.h" |
| 10 #include "dbus/bus.h" | 10 #include "dbus/bus.h" |
| 11 #include "dbus/message.h" | 11 #include "dbus/message.h" |
| 12 #include "dbus/object_proxy.h" | 12 #include "dbus/object_proxy.h" |
| 13 #include "third_party/cros_system_api/dbus/service_constants.h" | 13 #include "third_party/cros_system_api/dbus/service_constants.h" |
| 14 | 14 |
| 15 namespace chromeos { | 15 namespace chromeos { |
| 16 | 16 |
| 17 namespace { | 17 namespace { |
| 18 | 18 |
| 19 const char* kDefaultMountOptions[] = { | 19 const char* kDefaultMountOptions[] = { |
| 20 "rw", | 20 "rw", |
| 21 "nodev", | 21 "nodev", |
| 22 "noexec", | 22 "noexec", |
| 23 "nosuid", | 23 "nosuid", |
| 24 }; | 24 }; |
| 25 | 25 |
| 26 const char* kDefaultUnmountOptions[] = { | 26 const char* kDefaultUnmountOptions[] = { |
| 27 "force", | 27 "force", |
| 28 }; | 28 }; |
| 29 | 29 |
| 30 // Returns the device type from the given arguments. | 30 // Checks if retrieved media type is in boundaries of DeviceMediaType. |
| 31 DeviceType GetDeviceType(bool is_optical, bool is_rotational) { | 31 bool IsValidMediaType(uint32 type) { |
| 32 if (is_optical) | 32 return type < static_cast<uint32>(cros_disks::DEVICE_MEDIA_NUM_VALUES); |
| 33 return OPTICAL; | 33 } |
| 34 if (is_rotational) | 34 |
| 35 return HDD; | 35 |
| 36 return FLASH; | 36 // 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 |
| 38 // changes in cros-disks. |
| 39 DeviceType DeviceMediaTypeToDeviceType(uint32 media_type_uint32) { |
| 40 if (!IsValidMediaType(media_type_uint32)) |
| 41 return DEVICE_TYPE_UNKNOWN; |
| 42 |
| 43 cros_disks::DeviceMediaType media_type = |
| 44 cros_disks::DeviceMediaType(media_type_uint32); |
| 45 |
| 46 switch (media_type) { |
| 47 case(cros_disks::DEVICE_MEDIA_UNKNOWN): |
| 48 return DEVICE_TYPE_UNKNOWN; |
| 49 case(cros_disks::DEVICE_MEDIA_USB): |
| 50 return DEVICE_TYPE_USB; |
| 51 case(cros_disks::DEVICE_MEDIA_SD): |
| 52 return DEVICE_TYPE_SD; |
| 53 case(cros_disks::DEVICE_MEDIA_OPTICAL_DISC): |
| 54 return DEVICE_TYPE_OPTICAL_DISC; |
| 55 case(cros_disks::DEVICE_MEDIA_MOBILE): |
| 56 return DEVICE_TYPE_MOBILE; |
| 57 default: |
| 58 return DEVICE_TYPE_UNKNOWN; |
| 59 } |
| 37 } | 60 } |
| 38 | 61 |
| 39 // Pops a bool value when |reader| is not NULL. | 62 // Pops a bool value when |reader| is not NULL. |
| 40 // Returns true when a value is popped, false otherwise. | 63 // Returns true when a value is popped, false otherwise. |
| 41 bool MaybePopBool(dbus::MessageReader* reader, bool* value) { | 64 bool MaybePopBool(dbus::MessageReader* reader, bool* value) { |
| 42 if (!reader) | 65 if (!reader) |
| 43 return false; | 66 return false; |
| 44 return reader->PopBool(value); | 67 return reader->PopBool(value); |
| 45 } | 68 } |
| 46 | 69 |
| 47 // Pops a string value when |reader| is not NULL. | 70 // Pops a string value when |reader| is not NULL. |
| 48 // Returns true when a value is popped, false otherwise. | 71 // Returns true when a value is popped, false otherwise. |
| 49 bool MaybePopString(dbus::MessageReader* reader, std::string* value) { | 72 bool MaybePopString(dbus::MessageReader* reader, std::string* value) { |
| 50 if (!reader) | 73 if (!reader) |
| 51 return false; | 74 return false; |
| 52 return reader->PopString(value); | 75 return reader->PopString(value); |
| 53 } | 76 } |
| 54 | 77 |
| 78 // Pops a uint32 value when |reader| is not NULL. |
| 79 // Returns true when a value is popped, false otherwise. |
| 80 bool MaybePopUint32(dbus::MessageReader* reader, uint32* value) { |
| 81 if (!reader) |
| 82 return false; |
| 83 |
| 84 return reader->PopUint32(value); |
| 85 } |
| 86 |
| 55 // Pops a uint64 value when |reader| is not NULL. | 87 // Pops a uint64 value when |reader| is not NULL. |
| 56 // Returns true when a value is popped, false otherwise. | 88 // Returns true when a value is popped, false otherwise. |
| 57 bool MaybePopUint64(dbus::MessageReader* reader, uint64* value) { | 89 bool MaybePopUint64(dbus::MessageReader* reader, uint64* value) { |
| 58 if (!reader) | 90 if (!reader) |
| 59 return false; | 91 return false; |
| 60 return reader->PopUint64(value); | 92 return reader->PopUint64(value); |
| 61 } | 93 } |
| 62 | 94 |
| 63 // Pops an array of strings when |reader| is not NULL. | 95 // Pops an array of strings when |reader| is not NULL. |
| 64 // Returns true when an array is popped, false otherwise. | 96 // Returns true when an array is popped, false otherwise. |
| (...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 368 } // namespace | 400 } // namespace |
| 369 | 401 |
| 370 //////////////////////////////////////////////////////////////////////////////// | 402 //////////////////////////////////////////////////////////////////////////////// |
| 371 // DiskInfo | 403 // DiskInfo |
| 372 | 404 |
| 373 DiskInfo::DiskInfo(const std::string& device_path, dbus::Response* response) | 405 DiskInfo::DiskInfo(const std::string& device_path, dbus::Response* response) |
| 374 : device_path_(device_path), | 406 : device_path_(device_path), |
| 375 is_drive_(false), | 407 is_drive_(false), |
| 376 has_media_(false), | 408 has_media_(false), |
| 377 on_boot_device_(false), | 409 on_boot_device_(false), |
| 378 device_type_(UNDEFINED), | 410 device_type_(DEVICE_TYPE_UNKNOWN), |
| 379 total_size_in_bytes_(0), | 411 total_size_in_bytes_(0), |
| 380 is_read_only_(false), | 412 is_read_only_(false), |
| 381 is_hidden_(true) { | 413 is_hidden_(true) { |
| 382 InitializeFromResponse(response); | 414 InitializeFromResponse(response); |
| 383 } | 415 } |
| 384 | 416 |
| 385 DiskInfo::~DiskInfo() { | 417 DiskInfo::~DiskInfo() { |
| 386 } | 418 } |
| 387 | 419 |
| 388 // Initialize |this| from |response| given by the cros-disks service. | 420 // Initialize |this| from |response| given by the cros-disks service. |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 495 MaybePopBool(properties[cros_disks::kDevicePresentationHide], &is_hidden_); | 527 MaybePopBool(properties[cros_disks::kDevicePresentationHide], &is_hidden_); |
| 496 MaybePopBool(properties[cros_disks::kDeviceIsMediaAvailable], &has_media_); | 528 MaybePopBool(properties[cros_disks::kDeviceIsMediaAvailable], &has_media_); |
| 497 MaybePopBool(properties[cros_disks::kDeviceIsOnBootDevice], | 529 MaybePopBool(properties[cros_disks::kDeviceIsOnBootDevice], |
| 498 &on_boot_device_); | 530 &on_boot_device_); |
| 499 MaybePopString(properties[cros_disks::kNativePath], &system_path_); | 531 MaybePopString(properties[cros_disks::kNativePath], &system_path_); |
| 500 MaybePopString(properties[cros_disks::kDeviceFile], &file_path_); | 532 MaybePopString(properties[cros_disks::kDeviceFile], &file_path_); |
| 501 MaybePopString(properties[cros_disks::kDriveModel], &drive_model_); | 533 MaybePopString(properties[cros_disks::kDriveModel], &drive_model_); |
| 502 MaybePopString(properties[cros_disks::kIdLabel], &label_); | 534 MaybePopString(properties[cros_disks::kIdLabel], &label_); |
| 503 MaybePopUint64(properties[cros_disks::kDeviceSize], &total_size_in_bytes_); | 535 MaybePopUint64(properties[cros_disks::kDeviceSize], &total_size_in_bytes_); |
| 504 | 536 |
| 537 uint32 media_type_uint32 = 0; |
| 538 if (MaybePopUint32(properties[cros_disks::kDeviceMediaType], |
| 539 &media_type_uint32)) { |
| 540 device_type_ = DeviceMediaTypeToDeviceType(media_type_uint32); |
| 541 } |
| 542 |
| 505 std::vector<std::string> mount_paths; | 543 std::vector<std::string> mount_paths; |
| 506 if (MaybePopArrayOfStrings(properties[cros_disks::kDeviceMountPaths], | 544 if (MaybePopArrayOfStrings(properties[cros_disks::kDeviceMountPaths], |
| 507 &mount_paths) && !mount_paths.empty()) | 545 &mount_paths) && !mount_paths.empty()) |
| 508 mount_path_ = mount_paths[0]; | 546 mount_path_ = mount_paths[0]; |
| 509 | |
| 510 bool is_rotational = false; | |
| 511 bool is_optical = false; | |
| 512 if (MaybePopBool(properties[cros_disks::kDriveIsRotational], | |
| 513 &is_rotational) && | |
| 514 MaybePopBool(properties[cros_disks::kDeviceIsOpticalDisc], | |
| 515 &is_optical)) | |
| 516 device_type_ = GetDeviceType(is_optical, is_rotational); | |
| 517 } | 547 } |
| 518 | 548 |
| 519 //////////////////////////////////////////////////////////////////////////////// | 549 //////////////////////////////////////////////////////////////////////////////// |
| 520 // CrosDisksClient | 550 // CrosDisksClient |
| 521 | 551 |
| 522 CrosDisksClient::CrosDisksClient() {} | 552 CrosDisksClient::CrosDisksClient() {} |
| 523 | 553 |
| 524 CrosDisksClient::~CrosDisksClient() {} | 554 CrosDisksClient::~CrosDisksClient() {} |
| 525 | 555 |
| 526 // static | 556 // static |
| 527 CrosDisksClient* CrosDisksClient::Create(dbus::Bus* bus) { | 557 CrosDisksClient* CrosDisksClient::Create(dbus::Bus* bus) { |
| 528 if (system::runtime_environment::IsRunningOnChromeOS()) | 558 if (system::runtime_environment::IsRunningOnChromeOS()) |
| 529 return new CrosDisksClientImpl(bus); | 559 return new CrosDisksClientImpl(bus); |
| 530 else | 560 else |
| 531 return new CrosDisksClientStubImpl(); | 561 return new CrosDisksClientStubImpl(); |
| 532 } | 562 } |
| 533 | 563 |
| 534 } // namespace chromeos | 564 } // namespace chromeos |
| OLD | NEW |