| 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 "chrome/browser/storage_monitor/image_capture_device_manager.h" | 5 #include "chrome/browser/storage_monitor/image_capture_device_manager.h" |
| 6 | 6 |
| 7 #import <ImageCaptureCore/ImageCaptureCore.h> | 7 #import <ImageCaptureCore/ImageCaptureCore.h> |
| 8 | 8 |
| 9 #import "chrome/browser/storage_monitor/image_capture_device.h" | 9 #import "chrome/browser/storage_monitor/image_capture_device.h" |
| 10 #include "chrome/browser/storage_monitor/storage_info.h" | 10 #include "chrome/browser/storage_monitor/storage_info.h" |
| 11 #include "content/public/browser/browser_thread.h" | 11 #include "content/public/browser/browser_thread.h" |
| 12 | 12 |
| 13 namespace { | 13 namespace { |
| 14 | 14 |
| 15 chrome::ImageCaptureDeviceManager* g_image_capture_device_manager = NULL; | 15 ImageCaptureDeviceManager* g_image_capture_device_manager = NULL; |
| 16 | 16 |
| 17 } // namespace | 17 } // namespace |
| 18 | 18 |
| 19 // This class is the surface for the Mac ICDeviceBrowser ImageCaptureCore API. | 19 // This class is the surface for the Mac ICDeviceBrowser ImageCaptureCore API. |
| 20 // Owned by the ChromeBrowserParts and has browser process lifetime. Upon | 20 // Owned by the ChromeBrowserParts and has browser process lifetime. Upon |
| 21 // creation, it gets a list of attached media volumes (asynchronously) which | 21 // creation, it gets a list of attached media volumes (asynchronously) which |
| 22 // it will eventually forward to StorageMonitor. It will also | 22 // it will eventually forward to StorageMonitor. It will also |
| 23 // set up an ImageCaptureCore listener to be told when new devices/volumes | 23 // set up an ImageCaptureCore listener to be told when new devices/volumes |
| 24 // are discovered and existing ones are removed. | 24 // are discovered and existing ones are removed. |
| 25 @interface ImageCaptureDeviceManagerImpl | 25 @interface ImageCaptureDeviceManagerImpl |
| 26 : NSObject<ICDeviceBrowserDelegate> { | 26 : NSObject<ICDeviceBrowserDelegate> { |
| 27 @private | 27 @private |
| 28 base::scoped_nsobject<ICDeviceBrowser> deviceBrowser_; | 28 base::scoped_nsobject<ICDeviceBrowser> deviceBrowser_; |
| 29 base::scoped_nsobject<NSMutableArray> cameras_; | 29 base::scoped_nsobject<NSMutableArray> cameras_; |
| 30 | 30 |
| 31 // Guaranteed to outlive this class. | 31 // Guaranteed to outlive this class. |
| 32 // TODO(gbillock): Update when ownership chains go up through | 32 // TODO(gbillock): Update when ownership chains go up through |
| 33 // a StorageMonitor subclass. | 33 // a StorageMonitor subclass. |
| 34 chrome::StorageMonitor::Receiver* notifications_; | 34 StorageMonitor::Receiver* notifications_; |
| 35 } | 35 } |
| 36 | 36 |
| 37 - (void)setNotifications:(chrome::StorageMonitor::Receiver*)notifications; | 37 - (void)setNotifications:(StorageMonitor::Receiver*)notifications; |
| 38 - (void)close; | 38 - (void)close; |
| 39 | 39 |
| 40 // The UUIDs passed here are available in the device attach notifications. | 40 // The UUIDs passed here are available in the device attach notifications. |
| 41 // They're gotten by cracking the device ID and taking the unique ID output. | 41 // They're gotten by cracking the device ID and taking the unique ID output. |
| 42 - (ImageCaptureDevice*)deviceForUUID:(const std::string&)uuid; | 42 - (ImageCaptureDevice*)deviceForUUID:(const std::string&)uuid; |
| 43 | 43 |
| 44 @end | 44 @end |
| 45 | 45 |
| 46 @implementation ImageCaptureDeviceManagerImpl | 46 @implementation ImageCaptureDeviceManagerImpl |
| 47 | 47 |
| 48 - (id)init { | 48 - (id)init { |
| 49 if ((self = [super init])) { | 49 if ((self = [super init])) { |
| 50 cameras_.reset([[NSMutableArray alloc] init]); | 50 cameras_.reset([[NSMutableArray alloc] init]); |
| 51 notifications_ = NULL; | 51 notifications_ = NULL; |
| 52 | 52 |
| 53 deviceBrowser_.reset([[ICDeviceBrowser alloc] init]); | 53 deviceBrowser_.reset([[ICDeviceBrowser alloc] init]); |
| 54 [deviceBrowser_ setDelegate:self]; | 54 [deviceBrowser_ setDelegate:self]; |
| 55 [deviceBrowser_ setBrowsedDeviceTypeMask: | 55 [deviceBrowser_ setBrowsedDeviceTypeMask: |
| 56 ICDeviceTypeMaskCamera | ICDeviceLocationTypeMaskLocal]; | 56 ICDeviceTypeMaskCamera | ICDeviceLocationTypeMaskLocal]; |
| 57 [deviceBrowser_ start]; | 57 [deviceBrowser_ start]; |
| 58 } | 58 } |
| 59 return self; | 59 return self; |
| 60 } | 60 } |
| 61 | 61 |
| 62 - (void)setNotifications:(chrome::StorageMonitor::Receiver*)notifications { | 62 - (void)setNotifications:(StorageMonitor::Receiver*)notifications { |
| 63 notifications_ = notifications; | 63 notifications_ = notifications; |
| 64 } | 64 } |
| 65 | 65 |
| 66 - (void)close { | 66 - (void)close { |
| 67 [deviceBrowser_ setDelegate:nil]; | 67 [deviceBrowser_ setDelegate:nil]; |
| 68 [deviceBrowser_ stop]; | 68 [deviceBrowser_ stop]; |
| 69 deviceBrowser_.reset(); | 69 deviceBrowser_.reset(); |
| 70 cameras_.reset(); | 70 cameras_.reset(); |
| 71 } | 71 } |
| 72 | 72 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 91 // by Mac's removable storage watcher. | 91 // by Mac's removable storage watcher. |
| 92 if ([addedDevice.transportType isEqualToString:ICTransportTypeMassStorage]) | 92 if ([addedDevice.transportType isEqualToString:ICTransportTypeMassStorage]) |
| 93 return; | 93 return; |
| 94 | 94 |
| 95 ICCameraDevice* cameraDevice = | 95 ICCameraDevice* cameraDevice = |
| 96 base::mac::ObjCCastStrict<ICCameraDevice>(addedDevice); | 96 base::mac::ObjCCastStrict<ICCameraDevice>(addedDevice); |
| 97 | 97 |
| 98 [cameras_ addObject:addedDevice]; | 98 [cameras_ addObject:addedDevice]; |
| 99 | 99 |
| 100 // TODO(gbillock): use [cameraDevice mountPoint] here when possible. | 100 // TODO(gbillock): use [cameraDevice mountPoint] here when possible. |
| 101 chrome::StorageInfo info( | 101 StorageInfo info( |
| 102 chrome::StorageInfo::MakeDeviceId( | 102 StorageInfo::MakeDeviceId( |
| 103 chrome::StorageInfo::MAC_IMAGE_CAPTURE, | 103 StorageInfo::MAC_IMAGE_CAPTURE, |
| 104 base::SysNSStringToUTF8([cameraDevice UUIDString])), | 104 base::SysNSStringToUTF8([cameraDevice UUIDString])), |
| 105 base::SysNSStringToUTF16([cameraDevice name]), | 105 base::SysNSStringToUTF16([cameraDevice name]), |
| 106 "", | 106 "", |
| 107 string16(), | 107 string16(), |
| 108 string16(), | 108 string16(), |
| 109 string16(), | 109 string16(), |
| 110 0); | 110 0); |
| 111 notifications_->ProcessAttach(info); | 111 notifications_->ProcessAttach(info); |
| 112 } | 112 } |
| 113 | 113 |
| 114 - (void)deviceBrowser:(ICDeviceBrowser*)browser | 114 - (void)deviceBrowser:(ICDeviceBrowser*)browser |
| 115 didRemoveDevice:(ICDevice*)device | 115 didRemoveDevice:(ICDevice*)device |
| 116 moreGoing:(BOOL)moreGoing { | 116 moreGoing:(BOOL)moreGoing { |
| 117 if (!(device.type & ICDeviceTypeCamera)) | 117 if (!(device.type & ICDeviceTypeCamera)) |
| 118 return; | 118 return; |
| 119 | 119 |
| 120 std::string uuid = base::SysNSStringToUTF8([device UUIDString]); | 120 std::string uuid = base::SysNSStringToUTF8([device UUIDString]); |
| 121 | 121 |
| 122 // May delete |device|. | 122 // May delete |device|. |
| 123 [cameras_ removeObject:device]; | 123 [cameras_ removeObject:device]; |
| 124 | 124 |
| 125 notifications_->ProcessDetach( | 125 notifications_->ProcessDetach( |
| 126 chrome::StorageInfo::MakeDeviceId( | 126 StorageInfo::MakeDeviceId(StorageInfo::MAC_IMAGE_CAPTURE, uuid)); |
| 127 chrome::StorageInfo::MAC_IMAGE_CAPTURE, uuid)); | |
| 128 } | 127 } |
| 129 | 128 |
| 130 @end // ImageCaptureDeviceManagerImpl | 129 @end // ImageCaptureDeviceManagerImpl |
| 131 | 130 |
| 132 namespace chrome { | |
| 133 | |
| 134 ImageCaptureDeviceManager::ImageCaptureDeviceManager() { | 131 ImageCaptureDeviceManager::ImageCaptureDeviceManager() { |
| 135 device_browser_.reset([[ImageCaptureDeviceManagerImpl alloc] init]); | 132 device_browser_.reset([[ImageCaptureDeviceManagerImpl alloc] init]); |
| 136 g_image_capture_device_manager = this; | 133 g_image_capture_device_manager = this; |
| 137 } | 134 } |
| 138 | 135 |
| 139 ImageCaptureDeviceManager::~ImageCaptureDeviceManager() { | 136 ImageCaptureDeviceManager::~ImageCaptureDeviceManager() { |
| 140 g_image_capture_device_manager = NULL; | 137 g_image_capture_device_manager = NULL; |
| 141 [device_browser_ close]; | 138 [device_browser_ close]; |
| 142 } | 139 } |
| 143 | 140 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 160 ImageCaptureDevice* ImageCaptureDeviceManager::deviceForUUID( | 157 ImageCaptureDevice* ImageCaptureDeviceManager::deviceForUUID( |
| 161 const std::string& uuid) { | 158 const std::string& uuid) { |
| 162 ImageCaptureDeviceManagerImpl* manager = | 159 ImageCaptureDeviceManagerImpl* manager = |
| 163 g_image_capture_device_manager->device_browser_; | 160 g_image_capture_device_manager->device_browser_; |
| 164 return [manager deviceForUUID:uuid]; | 161 return [manager deviceForUUID:uuid]; |
| 165 } | 162 } |
| 166 | 163 |
| 167 id<ICDeviceBrowserDelegate> ImageCaptureDeviceManager::device_browser() { | 164 id<ICDeviceBrowserDelegate> ImageCaptureDeviceManager::device_browser() { |
| 168 return device_browser_.get(); | 165 return device_browser_.get(); |
| 169 } | 166 } |
| 170 | |
| 171 } // namespace chrome | |
| OLD | NEW |