Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(329)

Side by Side Diff: chrome/browser/system_monitor/removable_device_notifications_chromeos.cc

Issue 11366144: [Media Gallery][ChromeOS] Improve device media gallery names. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed review comments + Added util functions Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 // chromeos::RemovableDeviceNotificationsCros implementation. 5 // chromeos::RemovableDeviceNotificationsCros implementation.
6 6
7 #include "chrome/browser/system_monitor/removable_device_notifications_chromeos. h" 7 #include "chrome/browser/system_monitor/removable_device_notifications_chromeos. h"
8 8
9 #include "base/file_path.h" 9 #include "base/file_path.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/stl_util.h" 11 #include "base/stl_util.h"
12 #include "base/string_number_conversions.h" 12 #include "base/string_number_conversions.h"
13 #include "base/string_util.h"
13 #include "base/utf_string_conversions.h" 14 #include "base/utf_string_conversions.h"
14 #include "chrome/browser/system_monitor/media_device_notifications_utils.h" 15 #include "chrome/browser/system_monitor/media_device_notifications_utils.h"
15 #include "chrome/browser/system_monitor/media_storage_util.h" 16 #include "chrome/browser/system_monitor/media_storage_util.h"
16 #include "chrome/browser/system_monitor/removable_device_constants.h" 17 #include "chrome/browser/system_monitor/removable_device_constants.h"
17 #include "content/public/browser/browser_thread.h" 18 #include "content/public/browser/browser_thread.h"
19 #include "ui/base/text/bytes_formatting.h"
18 20
19 namespace chromeos { 21 namespace chromeos {
20 22
21 using base::SystemMonitor; 23 using base::SystemMonitor;
22 24
23 namespace { 25 namespace {
24 26
25 // Construct a device name using label or manufacturer (vendor and product) name 27 // Constructs a device name using label or manufacturer (vendor and product)
26 // details. 28 // name details.
27 string16 GetDeviceName(const disks::DiskMountManager::Disk& disk) { 29 string16 GetDeviceName(const disks::DiskMountManager::Disk& disk) {
28 std::string device_name = disk.device_label(); 30 if (disk.device_type() == DEVICE_TYPE_SD) {
29 if (device_name.empty()) { 31 // Mount path of an SD card will be one of the following:
30 device_name = disk.vendor_name(); 32 // (1) /media/removable/<volume_label>
31 const std::string& product_name = disk.product_name(); 33 // (2) /media/removable/SD Card
32 if (!product_name.empty()) { 34 // If the volume label is available, mount path will be (1) else (2).
33 if (!device_name.empty()) 35 FilePath mount_point(disk.mount_path());
34 device_name += " "; 36 if (!mount_point.BaseName().LossyDisplayName().empty())
35 device_name += product_name; 37 return mount_point.BaseName().LossyDisplayName();
36 }
37 } 38 }
38 return UTF8ToUTF16(device_name); 39
40 const std::string& device_label = disk.device_label();
41 if (!device_label.empty() && IsStringUTF8(device_label))
42 return UTF8ToUTF16(device_label);
43
44 const std::string manufacturer_name = chrome::GetDeviceManufacturerName(
45 disk.vendor_name(), disk.product_name());
46 return (!manufacturer_name.empty() && IsStringUTF8(manufacturer_name)) ?
47 UTF8ToUTF16(manufacturer_name) : string16();
39 } 48 }
40 49
41 // Construct a device id using uuid or manufacturer (vendor and product) id 50 // Constructs a device id using uuid or manufacturer (vendor and product) id
42 // details. 51 // details.
43 std::string MakeDeviceUniqueId(const disks::DiskMountManager::Disk& disk) { 52 std::string MakeDeviceUniqueId(const disks::DiskMountManager::Disk& disk) {
44 std::string uuid = disk.fs_uuid(); 53 std::string uuid = disk.fs_uuid();
45 if (!uuid.empty()) 54 if (!uuid.empty())
46 return chrome::kFSUniqueIdPrefix + uuid; 55 return chrome::kFSUniqueIdPrefix + uuid;
47 56
48 // If one of the vendor or product information is missing, its value in the 57 // If one of the vendor or product information is missing, its value in the
49 // string is empty. 58 // string is empty.
50 // Format: VendorModelSerial:VendorInfo:ModelInfo:SerialInfo 59 // Format: VendorModelSerial:VendorInfo:ModelInfo:SerialInfo
51 // TODO(kmadhusu) Extract serial information for the disks and append it to 60 // TODO(kmadhusu) Extract serial information for the disks and append it to
52 // the device unique id. 61 // the device unique id.
53 const std::string& vendor = disk.vendor_id(); 62 const std::string& vendor = disk.vendor_id();
54 const std::string& product = disk.product_id(); 63 const std::string& product = disk.product_id();
55 if (vendor.empty() && product.empty()) 64 if (vendor.empty() && product.empty())
56 return std::string(); 65 return std::string();
57 return chrome::kVendorModelSerialPrefix + vendor + ":" + product + ":"; 66 return chrome::kVendorModelSerialPrefix + vendor + ":" + product + ":";
58 } 67 }
59 68
60 static RemovableDeviceNotificationsCros* 69 static RemovableDeviceNotificationsCros*
61 g_removable_device_notifications_chromeos = NULL; 70 g_removable_device_notifications_chromeos = NULL;
62 71
63 // Returns true if the requested device is valid, else false. On success, fills 72 // Returns true if the requested device is valid, else false. On success, fills
64 // in |unique_id| and |device_label| 73 // in |unique_id|, |device_label| and |device_size|.
65 bool GetDeviceInfo(const std::string& source_path, std::string* unique_id, 74 bool GetDeviceInfo(const std::string& source_path,
66 string16* device_label) { 75 std::string* unique_id,
67 // Get the media device uuid and label if exists. 76 string16* device_label,
77 string16* device_size) {
78 DCHECK(device_size);
68 const disks::DiskMountManager::Disk* disk = 79 const disks::DiskMountManager::Disk* disk =
69 disks::DiskMountManager::GetInstance()->FindDiskBySourcePath(source_path); 80 disks::DiskMountManager::GetInstance()->FindDiskBySourcePath(source_path);
70 if (!disk || disk->device_type() == DEVICE_TYPE_UNKNOWN) 81 if (!disk || disk->device_type() == DEVICE_TYPE_UNKNOWN)
71 return false; 82 return false;
72 83
73 if (unique_id) 84 if (unique_id)
74 *unique_id = MakeDeviceUniqueId(*disk); 85 *unique_id = MakeDeviceUniqueId(*disk);
75 86
76 if (device_label) 87 if (device_label)
77 *device_label = GetDeviceName(*disk); 88 *device_label = GetDeviceName(*disk);
89 *device_size = ui::FormatBytes(disk->total_size_in_bytes());
78 return true; 90 return true;
79 } 91 }
80 92
81 } // namespace 93 } // namespace
82 94
83 using chrome::MediaStorageUtil;
84 using content::BrowserThread; 95 using content::BrowserThread;
85 96
86 RemovableDeviceNotificationsCros::RemovableDeviceNotificationsCros() { 97 RemovableDeviceNotificationsCros::RemovableDeviceNotificationsCros() {
87 DCHECK(disks::DiskMountManager::GetInstance()); 98 DCHECK(disks::DiskMountManager::GetInstance());
88 DCHECK(!g_removable_device_notifications_chromeos); 99 DCHECK(!g_removable_device_notifications_chromeos);
89 g_removable_device_notifications_chromeos = this; 100 g_removable_device_notifications_chromeos = this;
90 disks::DiskMountManager::GetInstance()->AddObserver(this); 101 disks::DiskMountManager::GetInstance()->AddObserver(this);
91 CheckExistingMountPointsOnUIThread(); 102 CheckExistingMountPointsOnUIThread();
92 } 103 }
93 104
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 base::Bind( 168 base::Bind(
158 &RemovableDeviceNotificationsCros::CheckMountedPathOnFileThread, 169 &RemovableDeviceNotificationsCros::CheckMountedPathOnFileThread,
159 this, mount_info)); 170 this, mount_info));
160 break; 171 break;
161 } 172 }
162 case disks::DiskMountManager::UNMOUNTING: { 173 case disks::DiskMountManager::UNMOUNTING: {
163 MountMap::iterator it = mount_map_.find(mount_info.mount_path); 174 MountMap::iterator it = mount_map_.find(mount_info.mount_path);
164 if (it == mount_map_.end()) 175 if (it == mount_map_.end())
165 return; 176 return;
166 SystemMonitor::Get()->ProcessRemovableStorageDetached( 177 SystemMonitor::Get()->ProcessRemovableStorageDetached(
167 it->second.device_id); 178 it->second.storage_info.device_id);
168 mount_map_.erase(it); 179 mount_map_.erase(it);
169 break; 180 break;
170 } 181 }
171 } 182 }
172 } 183 }
173 184
174 bool RemovableDeviceNotificationsCros::GetDeviceInfoForPath( 185 bool RemovableDeviceNotificationsCros::GetDeviceInfoForPath(
175 const FilePath& path, 186 const FilePath& path,
176 SystemMonitor::RemovableStorageInfo* device_info) const { 187 SystemMonitor::RemovableStorageInfo* device_info) const {
177 if (!path.IsAbsolute()) 188 if (!path.IsAbsolute())
178 return false; 189 return false;
179 190
180 FilePath current = path; 191 FilePath current = path;
181 while (!ContainsKey(mount_map_, current.value()) && 192 while (!ContainsKey(mount_map_, current.value()) &&
182 current != current.DirName()) { 193 current != current.DirName()) {
183 current = current.DirName(); 194 current = current.DirName();
184 } 195 }
185 196
186 MountMap::const_iterator info_it = mount_map_.find(current.value()); 197 MountMap::const_iterator info_it = mount_map_.find(current.value());
187 if (info_it == mount_map_.end()) 198 if (info_it == mount_map_.end())
188 return false; 199 return false;
189 200
190 if (device_info) 201 if (device_info)
191 *device_info = info_it->second; 202 *device_info = info_it->second.storage_info;
192 return true; 203 return true;
193 } 204 }
194 205
206 string16 RemovableDeviceNotificationsCros::GetStorageSize(
207 const std::string& device_location) {
208 MountMap::const_iterator info_it = mount_map_.find(device_location);
209 return (info_it != mount_map_.end()) ?
210 info_it->second.storage_size : string16();
211 }
212
195 void RemovableDeviceNotificationsCros::CheckMountedPathOnFileThread( 213 void RemovableDeviceNotificationsCros::CheckMountedPathOnFileThread(
196 const disks::DiskMountManager::MountPointInfo& mount_info) { 214 const disks::DiskMountManager::MountPointInfo& mount_info) {
197 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 215 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
198 216
199 bool has_dcim = chrome::IsMediaDevice(mount_info.mount_path); 217 bool has_dcim = chrome::IsMediaDevice(mount_info.mount_path);
200 218
201 BrowserThread::PostTask( 219 BrowserThread::PostTask(
202 BrowserThread::UI, FROM_HERE, 220 BrowserThread::UI, FROM_HERE,
203 base::Bind(&RemovableDeviceNotificationsCros::AddMountedPathOnUIThread, 221 base::Bind(&RemovableDeviceNotificationsCros::AddMountedPathOnUIThread,
204 this, mount_info, has_dcim)); 222 this, mount_info, has_dcim));
205 } 223 }
206 224
207 void RemovableDeviceNotificationsCros::AddMountedPathOnUIThread( 225 void RemovableDeviceNotificationsCros::AddMountedPathOnUIThread(
208 const disks::DiskMountManager::MountPointInfo& mount_info, bool has_dcim) { 226 const disks::DiskMountManager::MountPointInfo& mount_info, bool has_dcim) {
209 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 227 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
210 228
211 if (ContainsKey(mount_map_, mount_info.mount_path)) { 229 if (ContainsKey(mount_map_, mount_info.mount_path)) {
212 // CheckExistingMountPointsOnUIThread() added the mount point information 230 // CheckExistingMountPointsOnUIThread() added the mount point information
213 // in the map before the device attached handler is called. Therefore, an 231 // in the map before the device attached handler is called. Therefore, an
214 // entry for the device already exists in the map. 232 // entry for the device already exists in the map.
215 return; 233 return;
216 } 234 }
217 235
218 // Get the media device uuid and label if exists. 236 // Get the media device uuid and label if exists.
219 std::string unique_id; 237 std::string unique_id;
220 string16 device_label; 238 string16 device_label;
221 if (!GetDeviceInfo(mount_info.source_path, &unique_id, &device_label)) 239 string16 device_size;
240 if (!GetDeviceInfo(mount_info.source_path, &unique_id, &device_label,
241 &device_size))
222 return; 242 return;
223 243
224 // Keep track of device uuid and label, to see how often we receive empty 244 // Keep track of device uuid and label, to see how often we receive empty
225 // values. 245 // values.
226 MediaStorageUtil::RecordDeviceInfoHistogram(true, unique_id, device_label); 246 chrome::MediaStorageUtil::RecordDeviceInfoHistogram(true, unique_id,
Lei Zhang 2012/11/12 07:46:56 You are already in the chrome namespace.
kmadhusu 2012/11/12 19:56:56 This code is in chromeos namespace. Fixed the comm
247 device_label);
227 if (unique_id.empty() || device_label.empty()) 248 if (unique_id.empty() || device_label.empty())
228 return; 249 return;
229 250
230 MediaStorageUtil::Type type = has_dcim ? 251 chrome::MediaStorageUtil::Type type = has_dcim ?
231 MediaStorageUtil::REMOVABLE_MASS_STORAGE_WITH_DCIM : 252 chrome::MediaStorageUtil::REMOVABLE_MASS_STORAGE_WITH_DCIM :
232 MediaStorageUtil::REMOVABLE_MASS_STORAGE_NO_DCIM; 253 chrome::MediaStorageUtil::REMOVABLE_MASS_STORAGE_NO_DCIM;
233 254
234 std::string device_id = chrome::MediaStorageUtil::MakeDeviceId(type, 255 std::string device_id = chrome::MediaStorageUtil::MakeDeviceId(type,
235 unique_id); 256 unique_id);
236 SystemMonitor::RemovableStorageInfo info(device_id, device_label, 257 StorageObjectInfo object_info = {
237 mount_info.mount_path); 258 base::SystemMonitor::RemovableStorageInfo(device_id, device_label,
238 mount_map_.insert(std::make_pair(mount_info.mount_path, info)); 259 mount_info.mount_path),
260 device_size
261 };
262 mount_map_.insert(std::make_pair(mount_info.mount_path, object_info));
239 SystemMonitor::Get()->ProcessRemovableStorageAttached( 263 SystemMonitor::Get()->ProcessRemovableStorageAttached(
240 device_id, 264 device_id,
241 device_label, 265 device_size + ASCIIToUTF16(" ") + device_label,
Lei Zhang 2012/11/12 07:46:56 Use GetDisplayNameForDevice() here?
kmadhusu 2012/11/12 19:56:56 oops. Fixed. Missed while merging CL's.
242 mount_info.mount_path); 266 mount_info.mount_path);
243 } 267 }
244 268
245 } // namespace chrome 269 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698