| Index: media/capture/device_monitor_mac.mm
 | 
| diff --git a/media/capture/device_monitor_mac.mm b/media/capture/device_monitor_mac.mm
 | 
| index aab9884dc3fb9fabfdef33ae3bf26b387886fdc7..2ff63e0adcca95bf05e0c00ee319ffe45605c8d5 100644
 | 
| --- a/media/capture/device_monitor_mac.mm
 | 
| +++ b/media/capture/device_monitor_mac.mm
 | 
| @@ -4,8 +4,6 @@
 | 
|  
 | 
|  #include "media/capture/device_monitor_mac.h"
 | 
|  
 | 
| -#import <QTKit/QTKit.h>
 | 
| -
 | 
|  #include <set>
 | 
|  
 | 
|  #include "base/bind_helpers.h"
 | 
| @@ -44,8 +42,7 @@ class DeviceInfo {
 | 
|    // Allow generated copy constructor and assignment.
 | 
|  };
 | 
|  
 | 
| -// Base abstract class used by DeviceMonitorMac to interact with either a QTKit
 | 
| -// or an AVFoundation implementation of events and notifications.
 | 
| +// Base abstract class used by DeviceMonitorMac.
 | 
|  class DeviceMonitorMacImpl {
 | 
|   public:
 | 
|    explicit DeviceMonitorMacImpl(media::DeviceMonitorMac* monitor)
 | 
| @@ -127,87 +124,6 @@ void DeviceMonitorMacImpl::ConsolidateDevicesListAndNotify(
 | 
|      monitor_->NotifyDeviceChanged(base::SystemMonitor::DEVTYPE_AUDIO_CAPTURE);
 | 
|  }
 | 
|  
 | 
| -class QTKitMonitorImpl : public DeviceMonitorMacImpl {
 | 
| - public:
 | 
| -  explicit QTKitMonitorImpl(media::DeviceMonitorMac* monitor);
 | 
| -  ~QTKitMonitorImpl() override;
 | 
| -
 | 
| -  void OnDeviceChanged() override;
 | 
| -
 | 
| - private:
 | 
| -  void CountDevices();
 | 
| -  void OnAttributeChanged(NSNotification* notification);
 | 
| -
 | 
| -  id device_change_;
 | 
| -};
 | 
| -
 | 
| -QTKitMonitorImpl::QTKitMonitorImpl(media::DeviceMonitorMac* monitor)
 | 
| -    : DeviceMonitorMacImpl(monitor) {
 | 
| -  NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
 | 
| -  device_arrival_ =
 | 
| -      [nc addObserverForName:QTCaptureDeviceWasConnectedNotification
 | 
| -                      object:nil
 | 
| -                       queue:nil
 | 
| -                  usingBlock:^(NSNotification* notification) {
 | 
| -                    OnDeviceChanged();
 | 
| -                  }];
 | 
| -  device_removal_ =
 | 
| -      [nc addObserverForName:QTCaptureDeviceWasDisconnectedNotification
 | 
| -                      object:nil
 | 
| -                       queue:nil
 | 
| -                  usingBlock:^(NSNotification* notification) {
 | 
| -                    OnDeviceChanged();
 | 
| -                  }];
 | 
| -  device_change_ =
 | 
| -      [nc addObserverForName:QTCaptureDeviceAttributeDidChangeNotification
 | 
| -                      object:nil
 | 
| -                       queue:nil
 | 
| -                  usingBlock:^(NSNotification* notification) {
 | 
| -                    OnAttributeChanged(notification);
 | 
| -                  }];
 | 
| -}
 | 
| -
 | 
| -QTKitMonitorImpl::~QTKitMonitorImpl() {
 | 
| -  NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
 | 
| -  [nc removeObserver:device_arrival_];
 | 
| -  [nc removeObserver:device_removal_];
 | 
| -  [nc removeObserver:device_change_];
 | 
| -}
 | 
| -
 | 
| -void QTKitMonitorImpl::OnAttributeChanged(NSNotification* notification) {
 | 
| -  if ([[[notification userInfo] objectForKey:QTCaptureDeviceChangedAttributeKey]
 | 
| -          isEqualToString:QTCaptureDeviceSuspendedAttribute]) {
 | 
| -    OnDeviceChanged();
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -void QTKitMonitorImpl::OnDeviceChanged() {
 | 
| -  std::vector<DeviceInfo> snapshot_devices;
 | 
| -
 | 
| -  NSArray* devices = [QTCaptureDevice inputDevices];
 | 
| -  for (QTCaptureDevice* device in devices) {
 | 
| -    DeviceInfo::DeviceType device_type = DeviceInfo::kUnknown;
 | 
| -    // Act as if suspended video capture devices are not attached.  For
 | 
| -    // example, a laptop's internal webcam is suspended when the lid is closed.
 | 
| -    if ([device hasMediaType:QTMediaTypeVideo] &&
 | 
| -        ![[device attributeForKey:QTCaptureDeviceSuspendedAttribute]
 | 
| -            boolValue]) {
 | 
| -      device_type = DeviceInfo::kVideo;
 | 
| -    } else if ([device hasMediaType:QTMediaTypeMuxed] &&
 | 
| -               ![[device attributeForKey:QTCaptureDeviceSuspendedAttribute]
 | 
| -                   boolValue]) {
 | 
| -      device_type = DeviceInfo::kMuxed;
 | 
| -    } else if ([device hasMediaType:QTMediaTypeSound] &&
 | 
| -               ![[device attributeForKey:QTCaptureDeviceSuspendedAttribute]
 | 
| -                   boolValue]) {
 | 
| -      device_type = DeviceInfo::kAudio;
 | 
| -    }
 | 
| -    snapshot_devices.push_back(
 | 
| -        DeviceInfo([[device uniqueID] UTF8String], device_type));
 | 
| -  }
 | 
| -  ConsolidateDevicesListAndNotify(snapshot_devices);
 | 
| -}
 | 
| -
 | 
|  // Forward declaration for use by CrAVFoundationDeviceObserver.
 | 
|  class SuspendObserverDelegate;
 | 
|  
 | 
| @@ -524,7 +440,7 @@ void AVFoundationMonitorImpl::OnDeviceChanged() {
 | 
|  namespace media {
 | 
|  
 | 
|  DeviceMonitorMac::DeviceMonitorMac() {
 | 
| -  // Both QTKit and AVFoundation do not need to be fired up until the user
 | 
| +  // AVFoundation do not need to be fired up until the user
 | 
|    // exercises a GetUserMedia. Bringing up either library and enumerating the
 | 
|    // devices in the system is an operation taking in the range of hundred of ms,
 | 
|    // so it is triggered explicitly from MediaStreamManager::StartMonitoring().
 | 
| @@ -536,12 +452,9 @@ void DeviceMonitorMac::StartMonitoring(
 | 
|      const scoped_refptr<base::SingleThreadTaskRunner>& device_task_runner) {
 | 
|    DCHECK(thread_checker_.CalledOnValidThread());
 | 
|  
 | 
| -  // We're on the UI thread so let's try to initialize AVFoundation and then
 | 
| -  // see if it's supported.  IsAVFoundationSupported can't implicitly initialize
 | 
| -  // the library since it can be called on different threads.
 | 
| +  // We're on the UI thread so let's try to initialize AVFoundation.
 | 
|    AVFoundationGlue::InitializeAVFoundation();
 | 
|  
 | 
| -  if (AVFoundationGlue::IsAVFoundationSupported()) {
 | 
|      // TODO(erikchen): Remove ScopedTracker below once http://crbug.com/458404
 | 
|      // is fixed.
 | 
|      tracked_objects::ScopedTracker tracking_profile(
 | 
| @@ -550,15 +463,6 @@ void DeviceMonitorMac::StartMonitoring(
 | 
|      DVLOG(1) << "Monitoring via AVFoundation";
 | 
|      device_monitor_impl_.reset(
 | 
|          new AVFoundationMonitorImpl(this, device_task_runner));
 | 
| -  } else {
 | 
| -    // TODO(erikchen): Remove ScopedTracker below once http://crbug.com/458404
 | 
| -    // is fixed.
 | 
| -    tracked_objects::ScopedTracker tracking_profile(
 | 
| -        FROM_HERE_WITH_EXPLICIT_FUNCTION(
 | 
| -            "458404 DeviceMonitorMac::StartMonitoring::QTKit"));
 | 
| -    DVLOG(1) << "Monitoring via QTKit";
 | 
| -    device_monitor_impl_.reset(new QTKitMonitorImpl(this));
 | 
| -  }
 | 
|  }
 | 
|  
 | 
|  void DeviceMonitorMac::NotifyDeviceChanged(
 | 
| 
 |