| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/storage_monitor/storage_info.h" |
| |
| #include "base/logging.h" |
| |
| namespace { |
| |
| // Prefix constants for different device id spaces. |
| const char kRemovableMassStorageWithDCIMPrefix[] = "dcim:"; |
| const char kRemovableMassStorageNoDCIMPrefix[] = "nodcim:"; |
| const char kFixedMassStoragePrefix[] = "path:"; |
| const char kMtpPtpPrefix[] = "mtp:"; |
| const char kMacImageCapturePrefix[] = "ic:"; |
| const char kITunesPrefix[] = "itunes:"; |
| const char kPicasaPrefix[] = "picasa:"; |
| const char kIPhotoPrefix[] = "iphoto:"; |
| |
| } // namespace |
| |
| StorageInfo::StorageInfo() : total_size_in_bytes_(0) { |
| } |
| |
| StorageInfo::StorageInfo(const std::string& device_id_in, |
| const base::string16& device_name, |
| const base::FilePath::StringType& device_location, |
| const base::string16& label, |
| const base::string16& vendor, |
| const base::string16& model, |
| uint64 size_in_bytes) |
| : device_id_(device_id_in), |
| name_(device_name), |
| location_(device_location), |
| storage_label_(label), |
| vendor_name_(vendor), |
| model_name_(model), |
| total_size_in_bytes_(size_in_bytes) { |
| } |
| |
| StorageInfo::~StorageInfo() { |
| } |
| |
| // static |
| std::string StorageInfo::MakeDeviceId(Type type, const std::string& unique_id) { |
| DCHECK(!unique_id.empty()); |
| switch (type) { |
| case REMOVABLE_MASS_STORAGE_WITH_DCIM: |
| return std::string(kRemovableMassStorageWithDCIMPrefix) + unique_id; |
| case REMOVABLE_MASS_STORAGE_NO_DCIM: |
| return std::string(kRemovableMassStorageNoDCIMPrefix) + unique_id; |
| case FIXED_MASS_STORAGE: |
| return std::string(kFixedMassStoragePrefix) + unique_id; |
| case MTP_OR_PTP: |
| return std::string(kMtpPtpPrefix) + unique_id; |
| case MAC_IMAGE_CAPTURE: |
| return std::string(kMacImageCapturePrefix) + unique_id; |
| case ITUNES: |
| return std::string(kITunesPrefix) + unique_id; |
| case PICASA: |
| return std::string(kPicasaPrefix) + unique_id; |
| case IPHOTO: |
| return std::string(kIPhotoPrefix) + unique_id; |
| } |
| NOTREACHED(); |
| return std::string(); |
| } |
| |
| // static |
| bool StorageInfo::CrackDeviceId(const std::string& device_id, |
| Type* type, std::string* unique_id) { |
| size_t prefix_length = device_id.find_first_of(':'); |
| std::string prefix = prefix_length != std::string::npos |
| ? device_id.substr(0, prefix_length + 1) |
| : std::string(); |
| |
| Type found_type; |
| if (prefix == kRemovableMassStorageWithDCIMPrefix) { |
| found_type = REMOVABLE_MASS_STORAGE_WITH_DCIM; |
| } else if (prefix == kRemovableMassStorageNoDCIMPrefix) { |
| found_type = REMOVABLE_MASS_STORAGE_NO_DCIM; |
| } else if (prefix == kFixedMassStoragePrefix) { |
| found_type = FIXED_MASS_STORAGE; |
| } else if (prefix == kMtpPtpPrefix) { |
| found_type = MTP_OR_PTP; |
| } else if (prefix == kMacImageCapturePrefix) { |
| found_type = MAC_IMAGE_CAPTURE; |
| } else if (prefix == kITunesPrefix) { |
| found_type = ITUNES; |
| } else if (prefix == kPicasaPrefix) { |
| found_type = PICASA; |
| } else if (prefix == kIPhotoPrefix) { |
| found_type = IPHOTO; |
| } else { |
| NOTREACHED(); |
| return false; |
| } |
| if (type) |
| *type = found_type; |
| |
| if (unique_id) |
| *unique_id = device_id.substr(prefix_length + 1); |
| return true; |
| } |
| |
| // static |
| bool StorageInfo::IsMediaDevice(const std::string& device_id) { |
| Type type; |
| return CrackDeviceId(device_id, &type, NULL) && |
| (type == REMOVABLE_MASS_STORAGE_WITH_DCIM || type == MTP_OR_PTP || |
| type == MAC_IMAGE_CAPTURE); |
| } |
| |
| // static |
| bool StorageInfo::IsRemovableDevice(const std::string& device_id) { |
| Type type; |
| return CrackDeviceId(device_id, &type, NULL) && |
| (type == REMOVABLE_MASS_STORAGE_WITH_DCIM || |
| type == REMOVABLE_MASS_STORAGE_NO_DCIM || |
| type == MTP_OR_PTP || |
| type == MAC_IMAGE_CAPTURE); |
| } |
| |
| // static |
| bool StorageInfo::IsMassStorageDevice(const std::string& device_id) { |
| Type type; |
| return CrackDeviceId(device_id, &type, NULL) && |
| (type == REMOVABLE_MASS_STORAGE_WITH_DCIM || |
| type == REMOVABLE_MASS_STORAGE_NO_DCIM || |
| type == FIXED_MASS_STORAGE || |
| type == ITUNES || |
| type == IPHOTO || |
| type == PICASA); |
| } |
| |
| // static |
| bool StorageInfo::IsITunesDevice(const std::string& device_id) { |
| Type type; |
| return CrackDeviceId(device_id, &type, NULL) && type == ITUNES; |
| } |
| |
| // static |
| bool StorageInfo::IsIPhotoDevice(const std::string& device_id) { |
| Type type; |
| return CrackDeviceId(device_id, &type, NULL) && type == IPHOTO; |
| } |
| |
| // static |
| bool StorageInfo::IsPicasaDevice(const std::string& device_id) { |
| Type type; |
| return CrackDeviceId(device_id, &type, NULL) && type == PICASA; |
| } |