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 <stddef.h> |
| 8 #include <stdint.h> |
| 9 |
7 #include <map> | 10 #include <map> |
8 | 11 |
9 #include "base/bind.h" | 12 #include "base/bind.h" |
10 #include "base/files/file_path.h" | 13 #include "base/files/file_path.h" |
11 #include "base/files/file_util.h" | 14 #include "base/files/file_util.h" |
12 #include "base/location.h" | 15 #include "base/location.h" |
| 16 #include "base/macros.h" |
13 #include "base/stl_util.h" | 17 #include "base/stl_util.h" |
14 #include "base/strings/stringprintf.h" | 18 #include "base/strings/stringprintf.h" |
15 #include "base/sys_info.h" | 19 #include "base/sys_info.h" |
16 #include "base/task_runner_util.h" | 20 #include "base/task_runner_util.h" |
17 #include "base/threading/worker_pool.h" | 21 #include "base/threading/worker_pool.h" |
18 #include "base/values.h" | 22 #include "base/values.h" |
19 #include "chromeos/dbus/fake_cros_disks_client.h" | 23 #include "chromeos/dbus/fake_cros_disks_client.h" |
20 #include "dbus/bus.h" | 24 #include "dbus/bus.h" |
21 #include "dbus/message.h" | 25 #include "dbus/message.h" |
22 #include "dbus/object_path.h" | 26 #include "dbus/object_path.h" |
(...skipping 14 matching lines...) Expand all Loading... |
37 | 41 |
38 const char* kDefaultUnmountOptions[] = { | 42 const char* kDefaultUnmountOptions[] = { |
39 "force", | 43 "force", |
40 }; | 44 }; |
41 | 45 |
42 const char kLazyUnmountOption[] = "lazy"; | 46 const char kLazyUnmountOption[] = "lazy"; |
43 | 47 |
44 const char kMountLabelOption[] = "mountlabel"; | 48 const char kMountLabelOption[] = "mountlabel"; |
45 | 49 |
46 // Checks if retrieved media type is in boundaries of DeviceMediaType. | 50 // Checks if retrieved media type is in boundaries of DeviceMediaType. |
47 bool IsValidMediaType(uint32 type) { | 51 bool IsValidMediaType(uint32_t type) { |
48 return type < static_cast<uint32>(cros_disks::DEVICE_MEDIA_NUM_VALUES); | 52 return type < static_cast<uint32_t>(cros_disks::DEVICE_MEDIA_NUM_VALUES); |
49 } | 53 } |
50 | 54 |
51 // Translates enum used in cros-disks to enum used in Chrome. | 55 // Translates enum used in cros-disks to enum used in Chrome. |
52 // Note that we could just do static_cast, but this is less sensitive to | 56 // Note that we could just do static_cast, but this is less sensitive to |
53 // changes in cros-disks. | 57 // changes in cros-disks. |
54 DeviceType DeviceMediaTypeToDeviceType(uint32 media_type_uint32) { | 58 DeviceType DeviceMediaTypeToDeviceType(uint32_t media_type_uint32) { |
55 if (!IsValidMediaType(media_type_uint32)) | 59 if (!IsValidMediaType(media_type_uint32)) |
56 return DEVICE_TYPE_UNKNOWN; | 60 return DEVICE_TYPE_UNKNOWN; |
57 | 61 |
58 cros_disks::DeviceMediaType media_type = | 62 cros_disks::DeviceMediaType media_type = |
59 cros_disks::DeviceMediaType(media_type_uint32); | 63 cros_disks::DeviceMediaType(media_type_uint32); |
60 | 64 |
61 switch (media_type) { | 65 switch (media_type) { |
62 case(cros_disks::DEVICE_MEDIA_UNKNOWN): | 66 case(cros_disks::DEVICE_MEDIA_UNKNOWN): |
63 return DEVICE_TYPE_UNKNOWN; | 67 return DEVICE_TYPE_UNKNOWN; |
64 case(cros_disks::DEVICE_MEDIA_USB): | 68 case(cros_disks::DEVICE_MEDIA_USB): |
65 return DEVICE_TYPE_USB; | 69 return DEVICE_TYPE_USB; |
66 case(cros_disks::DEVICE_MEDIA_SD): | 70 case(cros_disks::DEVICE_MEDIA_SD): |
67 return DEVICE_TYPE_SD; | 71 return DEVICE_TYPE_SD; |
68 case(cros_disks::DEVICE_MEDIA_OPTICAL_DISC): | 72 case(cros_disks::DEVICE_MEDIA_OPTICAL_DISC): |
69 return DEVICE_TYPE_OPTICAL_DISC; | 73 return DEVICE_TYPE_OPTICAL_DISC; |
70 case(cros_disks::DEVICE_MEDIA_MOBILE): | 74 case(cros_disks::DEVICE_MEDIA_MOBILE): |
71 return DEVICE_TYPE_MOBILE; | 75 return DEVICE_TYPE_MOBILE; |
72 case(cros_disks::DEVICE_MEDIA_DVD): | 76 case(cros_disks::DEVICE_MEDIA_DVD): |
73 return DEVICE_TYPE_DVD; | 77 return DEVICE_TYPE_DVD; |
74 default: | 78 default: |
75 return DEVICE_TYPE_UNKNOWN; | 79 return DEVICE_TYPE_UNKNOWN; |
76 } | 80 } |
77 } | 81 } |
78 | 82 |
79 bool ReadMountEntryFromDbus(dbus::MessageReader* reader, MountEntry* entry) { | 83 bool ReadMountEntryFromDbus(dbus::MessageReader* reader, MountEntry* entry) { |
80 uint32 error_code = 0; | 84 uint32_t error_code = 0; |
81 std::string source_path; | 85 std::string source_path; |
82 uint32 mount_type = 0; | 86 uint32_t mount_type = 0; |
83 std::string mount_path; | 87 std::string mount_path; |
84 if (!reader->PopUint32(&error_code) || | 88 if (!reader->PopUint32(&error_code) || |
85 !reader->PopString(&source_path) || | 89 !reader->PopString(&source_path) || |
86 !reader->PopUint32(&mount_type) || | 90 !reader->PopUint32(&mount_type) || |
87 !reader->PopString(&mount_path)) { | 91 !reader->PopString(&mount_path)) { |
88 return false; | 92 return false; |
89 } | 93 } |
90 *entry = MountEntry(static_cast<MountError>(error_code), source_path, | 94 *entry = MountEntry(static_cast<MountError>(error_code), source_path, |
91 static_cast<MountType>(mount_type), mount_path); | 95 static_cast<MountType>(mount_type), mount_path); |
92 return true; | 96 return true; |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
303 | 307 |
304 // Temporarly allow Unmount method to report failure both by setting dbus | 308 // Temporarly allow Unmount method to report failure both by setting dbus |
305 // error (in which case response is not set) and by returning mount error | 309 // error (in which case response is not set) and by returning mount error |
306 // different from MOUNT_ERROR_NONE. This is done so we can change Unmount | 310 // different from MOUNT_ERROR_NONE. This is done so we can change Unmount |
307 // method to return mount error (http://crbug.com/288974) without breaking | 311 // method to return mount error (http://crbug.com/288974) without breaking |
308 // Chrome. | 312 // Chrome. |
309 // TODO(tbarzic): When Unmount implementation is changed on cros disks side, | 313 // TODO(tbarzic): When Unmount implementation is changed on cros disks side, |
310 // make this fail if reader is not able to read the error code value from | 314 // make this fail if reader is not able to read the error code value from |
311 // the response. | 315 // the response. |
312 dbus::MessageReader reader(response); | 316 dbus::MessageReader reader(response); |
313 uint32 error_code = 0; | 317 uint32_t error_code = 0; |
314 if (reader.PopUint32(&error_code) && | 318 if (reader.PopUint32(&error_code) && |
315 static_cast<MountError>(error_code) != MOUNT_ERROR_NONE) { | 319 static_cast<MountError>(error_code) != MOUNT_ERROR_NONE) { |
316 error_callback.Run(); | 320 error_callback.Run(); |
317 return; | 321 return; |
318 } | 322 } |
319 | 323 |
320 callback.Run(); | 324 callback.Run(); |
321 } | 325 } |
322 | 326 |
323 // Handles the result of EnumerateAutoMountableDevices and calls |callback| or | 327 // Handles the result of EnumerateAutoMountableDevices and calls |callback| or |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
419 if (!ReadMountEntryFromDbus(&reader, &entry)) { | 423 if (!ReadMountEntryFromDbus(&reader, &entry)) { |
420 LOG(ERROR) << "Invalid signal: " << signal->ToString(); | 424 LOG(ERROR) << "Invalid signal: " << signal->ToString(); |
421 return; | 425 return; |
422 } | 426 } |
423 handler.Run(entry); | 427 handler.Run(entry); |
424 } | 428 } |
425 | 429 |
426 // Handles FormatCompleted signal and calls |handler|. | 430 // Handles FormatCompleted signal and calls |handler|. |
427 void OnFormatCompleted(FormatCompletedHandler handler, dbus::Signal* signal) { | 431 void OnFormatCompleted(FormatCompletedHandler handler, dbus::Signal* signal) { |
428 dbus::MessageReader reader(signal); | 432 dbus::MessageReader reader(signal); |
429 uint32 error_code = 0; | 433 uint32_t error_code = 0; |
430 std::string device_path; | 434 std::string device_path; |
431 if (!reader.PopUint32(&error_code) || !reader.PopString(&device_path)) { | 435 if (!reader.PopUint32(&error_code) || !reader.PopString(&device_path)) { |
432 LOG(ERROR) << "Invalid signal: " << signal->ToString(); | 436 LOG(ERROR) << "Invalid signal: " << signal->ToString(); |
433 return; | 437 return; |
434 } | 438 } |
435 handler.Run(static_cast<FormatError>(error_code), device_path); | 439 handler.Run(static_cast<FormatError>(error_code), device_path); |
436 } | 440 } |
437 | 441 |
438 // Handles the result of signal connection setup. | 442 // Handles the result of signal connection setup. |
439 void OnSignalConnected(const std::string& interface, | 443 void OnSignalConnected(const std::string& interface, |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
512 // dict entry { | 516 // dict entry { |
513 // string "DeviceIsReadOnly" | 517 // string "DeviceIsReadOnly" |
514 // variant bool false | 518 // variant bool false |
515 // } | 519 // } |
516 // dict entry { | 520 // dict entry { |
517 // string "DeviceIsVirtual" | 521 // string "DeviceIsVirtual" |
518 // variant bool false | 522 // variant bool false |
519 // } | 523 // } |
520 // dict entry { | 524 // dict entry { |
521 // string "DeviceMediaType" | 525 // string "DeviceMediaType" |
522 // variant uint32 1 | 526 // variant uint32_t 1 |
523 // } | 527 // } |
524 // dict entry { | 528 // dict entry { |
525 // string "DeviceMountPaths" | 529 // string "DeviceMountPaths" |
526 // variant array [ | 530 // variant array [ |
527 // ] | 531 // ] |
528 // } | 532 // } |
529 // dict entry { | 533 // dict entry { |
530 // string "DevicePresentationHide" | 534 // string "DevicePresentationHide" |
531 // variant bool true | 535 // variant bool true |
532 // } | 536 // } |
533 // dict entry { | 537 // dict entry { |
534 // string "DeviceSize" | 538 // string "DeviceSize" |
535 // variant uint64 7998537728 | 539 // variant uint64_t 7998537728 |
536 // } | 540 // } |
537 // dict entry { | 541 // dict entry { |
538 // string "DriveIsRotational" | 542 // string "DriveIsRotational" |
539 // variant bool false | 543 // variant bool false |
540 // } | 544 // } |
541 // dict entry { | 545 // dict entry { |
542 // string "VendorId" | 546 // string "VendorId" |
543 // variant string "18d1" | 547 // variant string "18d1" |
544 // } | 548 // } |
545 // dict entry { | 549 // dict entry { |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
599 cros_disks::kVendorName, &vendor_name_); | 603 cros_disks::kVendorName, &vendor_name_); |
600 properties->GetStringWithoutPathExpansion( | 604 properties->GetStringWithoutPathExpansion( |
601 cros_disks::kProductId, &product_id_); | 605 cros_disks::kProductId, &product_id_); |
602 properties->GetStringWithoutPathExpansion( | 606 properties->GetStringWithoutPathExpansion( |
603 cros_disks::kProductName, &product_name_); | 607 cros_disks::kProductName, &product_name_); |
604 properties->GetStringWithoutPathExpansion( | 608 properties->GetStringWithoutPathExpansion( |
605 cros_disks::kDriveModel, &drive_model_); | 609 cros_disks::kDriveModel, &drive_model_); |
606 properties->GetStringWithoutPathExpansion(cros_disks::kIdLabel, &label_); | 610 properties->GetStringWithoutPathExpansion(cros_disks::kIdLabel, &label_); |
607 properties->GetStringWithoutPathExpansion(cros_disks::kIdUuid, &uuid_); | 611 properties->GetStringWithoutPathExpansion(cros_disks::kIdUuid, &uuid_); |
608 | 612 |
609 // dbus::PopDataAsValue() pops uint64 as double. | 613 // dbus::PopDataAsValue() pops uint64_t as double. |
610 // The top 11 bits of uint64 are dropped by the use of double. But, this works | 614 // The top 11 bits of uint64_t are dropped by the use of double. But, this |
| 615 // works |
611 // unless the size exceeds 8 PB. | 616 // unless the size exceeds 8 PB. |
612 double device_size_double = 0; | 617 double device_size_double = 0; |
613 if (properties->GetDoubleWithoutPathExpansion(cros_disks::kDeviceSize, | 618 if (properties->GetDoubleWithoutPathExpansion(cros_disks::kDeviceSize, |
614 &device_size_double)) | 619 &device_size_double)) |
615 total_size_in_bytes_ = device_size_double; | 620 total_size_in_bytes_ = device_size_double; |
616 | 621 |
617 // dbus::PopDataAsValue() pops uint32 as double. | 622 // dbus::PopDataAsValue() pops uint32_t as double. |
618 double media_type_double = 0; | 623 double media_type_double = 0; |
619 if (properties->GetDoubleWithoutPathExpansion(cros_disks::kDeviceMediaType, | 624 if (properties->GetDoubleWithoutPathExpansion(cros_disks::kDeviceMediaType, |
620 &media_type_double)) | 625 &media_type_double)) |
621 device_type_ = DeviceMediaTypeToDeviceType(media_type_double); | 626 device_type_ = DeviceMediaTypeToDeviceType(media_type_double); |
622 | 627 |
623 base::ListValue* mount_paths = NULL; | 628 base::ListValue* mount_paths = NULL; |
624 if (properties->GetListWithoutPathExpansion(cros_disks::kDeviceMountPaths, | 629 if (properties->GetListWithoutPathExpansion(cros_disks::kDeviceMountPaths, |
625 &mount_paths)) | 630 &mount_paths)) |
626 mount_paths->GetString(0, &mount_path_); | 631 mount_paths->GetString(0, &mount_path_); |
627 } | 632 } |
(...skipping 21 matching lines...) Expand all Loading... |
649 } | 654 } |
650 | 655 |
651 // static | 656 // static |
652 base::FilePath CrosDisksClient::GetRemovableDiskMountPoint() { | 657 base::FilePath CrosDisksClient::GetRemovableDiskMountPoint() { |
653 return base::FilePath(base::SysInfo::IsRunningOnChromeOS() ? | 658 return base::FilePath(base::SysInfo::IsRunningOnChromeOS() ? |
654 FILE_PATH_LITERAL("/media/removable") : | 659 FILE_PATH_LITERAL("/media/removable") : |
655 FILE_PATH_LITERAL("/tmp/chromeos/media/removable")); | 660 FILE_PATH_LITERAL("/tmp/chromeos/media/removable")); |
656 } | 661 } |
657 | 662 |
658 } // namespace chromeos | 663 } // namespace chromeos |
OLD | NEW |