Backed out 3 changesets (bug 1197045) for failures in browser_Troubleshoot.js a=backout CLOSED TREE
authorWes Kocher <wkocher@mozilla.com>
Tue, 18 Jul 2017 22:54:15 -0700
changeset 369549 fdce816e6cc663aa94b7b90b5495c8b4b6696947
parent 369548 51aaede1a000fbf0e2914f3e2f572089a758e36a
child 369550 5dd1a5ff2c0d41bfdb651cb66de48c93b8ea5c8b
push id32198
push userryanvm@gmail.com
push dateWed, 19 Jul 2017 13:22:22 +0000
treeherdermozilla-central@a1ea69a3a0a7 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersbackout
bugs1197045
milestone56.0a1
backs out78b66a4c6b7c322003d2db1e2d93f5bc091026b0
feea60a002a7d996f232ecaa95943370be435217
57842092a282bcbe93b100551e921290ad138a3b
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Backed out 3 changesets (bug 1197045) for failures in browser_Troubleshoot.js a=backout CLOSED TREE Backed out changeset 78b66a4c6b7c (bug 1197045) Backed out changeset feea60a002a7 (bug 1197045) Backed out changeset 57842092a282 (bug 1197045) MozReview-Commit-ID: J0KZDSSw4XQ
dom/base/nsDOMWindowUtils.cpp
dom/interfaces/base/nsIDOMWindowUtils.idl
dom/media/AudioDeviceInfo.cpp
dom/media/AudioDeviceInfo.h
dom/media/CubebUtils.cpp
dom/media/CubebUtils.h
dom/media/moz.build
dom/media/nsIAudioDeviceInfo.idl
toolkit/content/aboutSupport.js
toolkit/content/aboutSupport.xhtml
toolkit/locales/en-US/chrome/global/aboutSupport.dtd
toolkit/locales/en-US/chrome/global/aboutSupport.properties
toolkit/modules/Troubleshoot.jsm
--- a/dom/base/nsDOMWindowUtils.cpp
+++ b/dom/base/nsDOMWindowUtils.cpp
@@ -70,17 +70,16 @@
 #if defined(MOZ_X11) && defined(MOZ_WIDGET_GTK)
 #include <gdk/gdk.h>
 #include <gdk/gdkx.h>
 #endif
 
 #include "Layers.h"
 #include "gfxPrefs.h"
 
-#include "mozilla/dom/AudioDeviceInfo.h"
 #include "mozilla/dom/Element.h"
 #include "mozilla/dom/TabChild.h"
 #include "mozilla/dom/IDBFactoryBinding.h"
 #include "mozilla/dom/IDBMutableFileBinding.h"
 #include "mozilla/dom/IDBMutableFile.h"
 #include "mozilla/dom/IndexedDatabaseManager.h"
 #include "mozilla/dom/PermissionMessageUtils.h"
 #include "mozilla/dom/quota/PersistenceType.h"
@@ -2447,63 +2446,16 @@ nsDOMWindowUtils::GetSupportsHardwareH26
 NS_IMETHODIMP
 nsDOMWindowUtils::GetCurrentAudioBackend(nsAString& aBackend)
 {
   CubebUtils::GetCurrentBackend(aBackend);
   return NS_OK;
 }
 
 NS_IMETHODIMP
-nsDOMWindowUtils::GetCurrentMaxAudioChannels(uint32_t* aChannels)
-{
-  *aChannels = CubebUtils::MaxNumberOfChannels();
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-nsDOMWindowUtils::GetCurrentPreferredChannelLayout(nsAString& aLayout)
-{
-  CubebUtils::GetPreferredChannelLayout(aLayout);
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-nsDOMWindowUtils::GetCurrentPreferredSampleRate(uint32_t* aRate)
-{
-  *aRate = CubebUtils::PreferredSampleRate();
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-nsDOMWindowUtils::AudioDevices(uint16_t aSide, nsIArray** aDevices)
-{
-  NS_ENSURE_ARG_POINTER(aDevices);
-  NS_ENSURE_ARG((aSide == AUDIO_INPUT) || (aSide == AUDIO_OUTPUT));
-  *aDevices = nullptr;
-
-  nsresult rv = NS_OK;
-  nsCOMPtr<nsIMutableArray> devices =
-    do_CreateInstance(NS_ARRAY_CONTRACTID, &rv);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  nsTArray<RefPtr<AudioDeviceInfo>> collection;
-  CubebUtils::GetDeviceCollection(collection,
-                                  aSide == AUDIO_INPUT
-                                    ? CubebUtils::Side::Input
-                                    : CubebUtils::Side::Output);
-  for (auto device: collection) {
-    devices->AppendElement(device, false);
-  }
-
-  devices.forget(aDevices);
-
-  return NS_OK;
-}
-
-NS_IMETHODIMP
 nsDOMWindowUtils::StartFrameTimeRecording(uint32_t *startIndex)
 {
   NS_ENSURE_ARG_POINTER(startIndex);
 
   nsCOMPtr<nsIWidget> widget = GetWidget();
   if (!widget)
     return NS_ERROR_FAILURE;
 
--- a/dom/interfaces/base/nsIDOMWindowUtils.idl
+++ b/dom/interfaces/base/nsIDOMWindowUtils.idl
@@ -24,17 +24,16 @@ class gfxContext;
 struct nsRect;
 %}
 
 [ref] native nsConstRect(const nsRect);
 native nscolor(nscolor);
 [ptr] native gfxContext(gfxContext);
 typedef unsigned long long nsViewID;
 
-interface nsIArray;
 interface nsICycleCollectorListener;
 interface nsIDOMNode;
 interface nsIDOMNodeList;
 interface nsIDOMElement;
 interface nsIDOMHTMLCanvasElement;
 interface nsIDOMEvent;
 interface nsIPreloadedStyleSheet;
 interface nsITransferable;
@@ -1423,38 +1422,16 @@ interface nsIDOMWindowUtils : nsISupport
   readonly attribute jsval supportsHardwareH264Decoding;
 
   /**
    * Returns the current audio backend as a free-form string.
    */
   readonly attribute AString currentAudioBackend;
 
   /**
-   * Returns the max channel counts of the current audio device.
-   */
-  readonly attribute unsigned long currentMaxAudioChannels;
-
-  /**
-   * Returns the preferred channel layout of the current audio device.
-   */
-  readonly attribute AString currentPreferredChannelLayout;
-
-  /**
-   * Returns the preferred sample rate of the current audio device.
-   */
-  readonly attribute unsigned long currentPreferredSampleRate;
-
-  /**
-   * Returns all the audio input/output devices.
-   */
-  const unsigned short AUDIO_INPUT   = 0;
-  const unsigned short AUDIO_OUTPUT  = 1;
-  nsIArray audioDevices(in unsigned short aSide);
-
-  /**
    * Record (and return) frame-intervals for frames which were presented
    *   between calling StartFrameTimeRecording and StopFrameTimeRecording.
    *
    * - Uses a cyclic buffer and serves concurrent consumers, so if Stop is called too late
    *     (elements were overwritten since Start), result is considered invalid and hence empty.
    * - Buffer is capable of holding 10 seconds @ 60fps (or more if frames were less frequent).
    *     Can be changed (up to 1 hour) via pref: toolkit.framesRecording.bufferSize.
    * - Note: the first frame-interval may be longer than expected because last frame
deleted file mode 100644
--- a/dom/media/AudioDeviceInfo.cpp
+++ /dev/null
@@ -1,167 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "AudioDeviceInfo.h"
-
-NS_IMPL_ISUPPORTS(AudioDeviceInfo, nsIAudioDeviceInfo)
-
-AudioDeviceInfo::AudioDeviceInfo(const nsAString& aName,
-                                 const nsAString& aGroupId,
-                                 const nsAString& aVendor,
-                                 uint16_t aType,
-                                 uint16_t aState,
-                                 uint16_t aPreferred,
-                                 uint16_t aSupportedFormat,
-                                 uint16_t aDefaultFormat,
-                                 uint32_t aMaxChannels,
-                                 uint32_t aDefaultRate,
-                                 uint32_t aMaxRate,
-                                 uint32_t aMinRate,
-                                 uint32_t aMaxLatency,
-				 uint32_t aMinLatency)
-  : mName(aName)
-  , mGroupId(aGroupId)
-  , mVendor(aVendor)
-  , mType(aType)
-  , mState(aState)
-  , mPreferred(aPreferred)
-  , mSupportedFormat(aSupportedFormat)
-  , mDefaultFormat(aDefaultFormat)
-  , mMaxChannels(aMaxChannels)
-  , mDefaultRate(aDefaultRate)
-  , mMaxRate(aMaxRate)
-  , mMinRate(aMinRate)
-  , mMaxLatency(aMaxLatency)
-  , mMinLatency(aMinLatency)
-{
-  MOZ_ASSERT(mType == TYPE_UNKNOWN ||
-             mType == TYPE_INPUT ||
-             mType == TYPE_OUTPUT, "Wrong type");
-  MOZ_ASSERT(mState == STATE_DISABLED ||
-             mState == STATE_UNPLUGGED ||
-             mState == STATE_ENABLED, "Wrong state");
-  MOZ_ASSERT(mPreferred == PREF_NONE ||
-             mPreferred == PREF_ALL ||
-             mPreferred & (PREF_MULTIMEDIA | PREF_VOICE | PREF_NOTIFICATION),
-             "Wrong preferred value");
-  MOZ_ASSERT(mSupportedFormat & (FMT_S16LE | FMT_S16BE | FMT_F32LE | FMT_F32BE),
-             "Wrong supported format");
-  MOZ_ASSERT(mDefaultFormat == FMT_S16LE ||
-             mDefaultFormat == FMT_S16BE ||
-             mDefaultFormat == FMT_F32LE ||
-             mDefaultFormat == FMT_F32BE, "Wrong default format");
-}
-
-/* readonly attribute DOMString name; */
-NS_IMETHODIMP
-AudioDeviceInfo::GetName(nsAString& aName)
-{
-  aName = mName;
-  return NS_OK;
-}
-
-/* readonly attribute DOMString groupId; */
-NS_IMETHODIMP
-AudioDeviceInfo::GetGroupId(nsAString& aGroupId)
-{
-  aGroupId = mGroupId;
-  return NS_OK;
-}
-
-/* readonly attribute DOMString vendor; */
-NS_IMETHODIMP
-AudioDeviceInfo::GetVendor(nsAString& aVendor)
-{
-  aVendor = mVendor;
-  return NS_OK;
-}
-
-/* readonly attribute unsigned short type; */
-NS_IMETHODIMP
-AudioDeviceInfo::GetType(uint16_t* aType)
-{
-  *aType = mType;
-  return NS_OK;
-}
-
-/* readonly attribute unsigned short state; */
-NS_IMETHODIMP
-AudioDeviceInfo::GetState(uint16_t* aState)
-{
-  *aState = mState;
-  return NS_OK;
-}
-
-/* readonly attribute unsigned short preferred; */
-NS_IMETHODIMP
-AudioDeviceInfo::GetPreferred(uint16_t* aPreferred)
-{
-  *aPreferred = mPreferred;
-  return NS_OK;
-}
-
-/* readonly attribute unsigned short supportedFormat; */
-NS_IMETHODIMP
-AudioDeviceInfo::GetSupportedFormat(uint16_t* aSupportedFormat)
-{
-  *aSupportedFormat = mSupportedFormat;
-  return NS_OK;
-}
-
-/* readonly attribute unsigned short defaultFormat; */
-NS_IMETHODIMP
-AudioDeviceInfo::GetDefaultFormat(uint16_t* aDefaultFormat)
-{
-  *aDefaultFormat = mDefaultFormat;
-  return NS_OK;
-}
-
-/* readonly attribute unsigned long maxChannels; */
-NS_IMETHODIMP
-AudioDeviceInfo::GetMaxChannels(uint32_t* aMaxChannels)
-{
-  *aMaxChannels = mMaxChannels;
-  return NS_OK;
-}
-
-/* readonly attribute unsigned long defaultRate; */
-NS_IMETHODIMP
-AudioDeviceInfo::GetDefaultRate(uint32_t* aDefaultRate)
-{
-  *aDefaultRate = mDefaultRate;
-  return NS_OK;
-}
-
-/* readonly attribute unsigned long maxRate; */
-NS_IMETHODIMP
-AudioDeviceInfo::GetMaxRate(uint32_t* aMaxRate)
-{
-  *aMaxRate = mMaxRate;
-  return NS_OK;
-}
-
-/* readonly attribute unsigned long minRate; */
-NS_IMETHODIMP
-AudioDeviceInfo::GetMinRate(uint32_t* aMinRate)
-{
-  *aMinRate = mMinRate;
-  return NS_OK;
-}
-
-/* readonly attribute unsigned long maxLatency; */
-NS_IMETHODIMP
-AudioDeviceInfo::GetMaxLatency(uint32_t* aMaxLatency)
-{
-  *aMaxLatency = mMaxLatency;
-  return NS_OK;
-}
-
-/* readonly attribute unsigned long minLatency; */
-NS_IMETHODIMP
-AudioDeviceInfo::GetMinLatency(uint32_t* aMinLatency)
-{
-  *aMinLatency = mMinLatency;
-  return NS_OK;
-}
deleted file mode 100644
--- a/dom/media/AudioDeviceInfo.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef MOZILLA_AudioDeviceInfo_H
-#define MOZILLA_AudioDeviceInfo_H
-
-#include "nsIAudioDeviceInfo.h"
-#include "nsString.h"
-
-// This is mapped to the cubeb_device_info.
-class AudioDeviceInfo final : public nsIAudioDeviceInfo
-{
-public:
-  NS_DECL_ISUPPORTS
-  NS_DECL_NSIAUDIODEVICEINFO
-
-  explicit AudioDeviceInfo(const nsAString& aName,
-                           const nsAString& aGroupId,
-                           const nsAString& aVendor,
-                           uint16_t aType,
-                           uint16_t aState,
-                           uint16_t aPreferred,
-                           uint16_t aSupportedFormat,
-                           uint16_t aDefaultFormat,
-                           uint32_t aMaxChannels,
-                           uint32_t aDefaultRate,
-                           uint32_t aMaxRate,
-                           uint32_t aMinRate,
-                           uint32_t aMaxLatency,
-                           uint32_t aMinLatency);
-
-private:
-  virtual ~AudioDeviceInfo() = default;
-
-  nsString mName;
-  nsString mGroupId;
-  nsString mVendor;
-  uint16_t mType;
-  uint16_t mState;
-  uint16_t mPreferred;
-  uint16_t mSupportedFormat;
-  uint16_t mDefaultFormat;
-  uint32_t mMaxChannels;
-  uint32_t mDefaultRate;
-  uint32_t mMaxRate;
-  uint32_t mMinRate;
-  uint32_t mMaxLatency;
-  uint32_t mMinLatency;
-};
-
-#endif // MOZILLA_AudioDeviceInfo_H
--- a/dom/media/CubebUtils.cpp
+++ b/dom/media/CubebUtils.cpp
@@ -99,43 +99,16 @@ const char* AUDIOSTREAM_BACKEND_ID_STR[]
 /* Index for failures to create an audio stream the first time. */
 const int CUBEB_BACKEND_INIT_FAILURE_FIRST =
   ArrayLength(AUDIOSTREAM_BACKEND_ID_STR);
 /* Index for failures to create an audio stream after the first time */
 const int CUBEB_BACKEND_INIT_FAILURE_OTHER = CUBEB_BACKEND_INIT_FAILURE_FIRST + 1;
 /* Index for an unknown backend. */
 const int CUBEB_BACKEND_UNKNOWN = CUBEB_BACKEND_INIT_FAILURE_FIRST + 2;
 
-typedef struct {
-  const char* name;
-  const unsigned int channels;
-  const uint32_t mask;
-} layoutInfo;
-
-const layoutInfo kLayoutInfos[CUBEB_LAYOUT_MAX] = {
-  { "undefined",      0, 0 },               // CUBEB_LAYOUT_UNDEFINED
-  { "dual mono",      2, MASK_STEREO },     // CUBEB_LAYOUT_DUAL_MONO
-  { "dual mono lfe",  3, MASK_STEREO_LFE }, // CUBEB_LAYOUT_DUAL_MONO_LFE
-  { "mono",           1, MASK_MONO },       // CUBEB_LAYOUT_MONO
-  { "mono lfe",       2, MASK_MONO_LFE },   // CUBEB_LAYOUT_MONO_LFE
-  { "stereo",         2, MASK_STEREO },     // CUBEB_LAYOUT_STEREO
-  { "stereo lfe",     3, MASK_STEREO_LFE }, // CUBEB_LAYOUT_STEREO_LFE
-  { "3f",             3, MASK_3F },         // CUBEB_LAYOUT_3F
-  { "3f lfe",         4, MASK_3F_LFE },     // CUBEB_LAYOUT_3F_LFE
-  { "2f1",            3, MASK_2F1 },        // CUBEB_LAYOUT_2F1
-  { "2f1 lfe",        4, MASK_2F1_LFE },    // CUBEB_LAYOUT_2F1_LFE
-  { "3f1",            4, MASK_3F1 },        // CUBEB_LAYOUT_3F1
-  { "3f1 lfe",        5, MASK_3F1_LFE },    // CUBEB_LAYOUT_3F1_LFE
-  { "2f2",            4, MASK_2F2_LFE },    // CUBEB_LAYOUT_2F2
-  { "2f2 lfe",        5, MASK_2F2_LFE },    // CUBEB_LAYOUT_2F2_LFE
-  { "3f2",            5, MASK_3F2 },        // CUBEB_LAYOUT_3F2
-  { "3f2 lfe",        6, MASK_3F2_LFE },    // CUBEB_LAYOUT_3F2_LFE
-  { "3f3r lfe",       7, MASK_3F3R_LFE },   // CUBEB_LAYOUT_3F3R_LFE
-  { "3f4 lfe",        8, MASK_3F4_LFE }     // CUBEB_LAYOUT_3F4_LFE
-};
 
 // Prefered samplerate, in Hz (characteristic of the hardware, mixer, platform,
 // and API used).
 //
 // sMutex protects *initialization* of this, which must be performed from each
 // thread before fetching, after which it is safe to fetch without holding the
 // mutex because it is only written once per process execution (by the first
 // initialization to complete).  Since the init must have been called on a
@@ -286,25 +259,52 @@ bool InitPreferredChannelLayout()
 
   StaticMutexAutoLock lock(sMutex);
   sPreferredChannelLayout = layout;
   return true;
 }
 
 uint32_t PreferredChannelMap(uint32_t aChannels)
 {
+  // The first element of the following mapping table is channel counts,
+  // and the second one is its bit mask. It will be used in many times,
+  // so we shoule avoid to allocate it in stack, or it will be created
+  // and removed repeatedly. Use static to allocate this local variable
+  // in data space instead of stack.
+  static uint32_t layoutInfo[CUBEB_LAYOUT_MAX][2] = {
+    { 0, 0 },               // CUBEB_LAYOUT_UNDEFINED
+    { 2, MASK_STEREO },     // CUBEB_LAYOUT_DUAL_MONO
+    { 3, MASK_STEREO_LFE }, // CUBEB_LAYOUT_DUAL_MONO_LFE
+    { 1, MASK_MONO },       // CUBEB_LAYOUT_MONO
+    { 2, MASK_MONO_LFE },   // CUBEB_LAYOUT_MONO_LFE
+    { 2, MASK_STEREO },     // CUBEB_LAYOUT_STEREO
+    { 3, MASK_STEREO_LFE }, // CUBEB_LAYOUT_STEREO_LFE
+    { 3, MASK_3F },         // CUBEB_LAYOUT_3F
+    { 4, MASK_3F_LFE },     // CUBEB_LAYOUT_3F_LFE
+    { 3, MASK_2F1 },        // CUBEB_LAYOUT_2F1
+    { 4, MASK_2F1_LFE },    // CUBEB_LAYOUT_2F1_LFE
+    { 4, MASK_3F1 },        // CUBEB_LAYOUT_3F1
+    { 5, MASK_3F1_LFE },    // CUBEB_LAYOUT_3F1_LFE
+    { 4, MASK_2F2 },        // CUBEB_LAYOUT_2F2
+    { 5, MASK_2F2_LFE },    // CUBEB_LAYOUT_2F2_LFE
+    { 5, MASK_3F2 },        // CUBEB_LAYOUT_3F2
+    { 6, MASK_3F2_LFE },    // CUBEB_LAYOUT_3F2_LFE
+    { 7, MASK_3F3R_LFE },   // CUBEB_LAYOUT_3F3R_LFE
+    { 8, MASK_3F4_LFE },    // CUBEB_LAYOUT_3F4_LFE
+  };
+
   // Use SMPTE default channel map if we can't get preferred layout
   // or the channel counts of preferred layout is different from input's one
   if (!InitPreferredChannelLayout()
-      || kLayoutInfos[sPreferredChannelLayout].channels != aChannels) {
+      || layoutInfo[sPreferredChannelLayout][0] != aChannels) {
     AudioConfig::ChannelLayout smpteLayout(aChannels);
     return smpteLayout.Map();
   }
 
-  return kLayoutInfos[sPreferredChannelLayout].mask;
+  return layoutInfo[sPreferredChannelLayout][1];
 }
 
 void InitBrandName()
 {
   if (sBrandName) {
     return;
   }
   nsXPIDLString brandName;
@@ -526,110 +526,10 @@ void GetCurrentBackend(nsAString& aBacke
     if (backend) {
       aBackend.AssignASCII(backend);
       return;
     }
   }
   aBackend.AssignLiteral("unknown");
 }
 
-void GetPreferredChannelLayout(nsAString& aLayout)
-{
-  const char* layout = InitPreferredChannelLayout() ?
-    kLayoutInfos[sPreferredChannelLayout].name : "unknown";
-  aLayout.AssignASCII(layout);
-}
-
-uint16_t ConvertCubebType(cubeb_device_type aType)
-{
-  uint16_t map[] = {
-    nsIAudioDeviceInfo::TYPE_UNKNOWN, // CUBEB_DEVICE_TYPE_UNKNOWN
-    nsIAudioDeviceInfo::TYPE_INPUT,   // CUBEB_DEVICE_TYPE_INPUT,
-    nsIAudioDeviceInfo::TYPE_OUTPUT   // CUBEB_DEVICE_TYPE_OUTPUT
-  };
-  return map[aType];
-}
-
-uint16_t ConvertCubebState(cubeb_device_state aState)
-{
-  uint16_t map[] = {
-    nsIAudioDeviceInfo::STATE_DISABLED,   // CUBEB_DEVICE_STATE_DISABLED
-    nsIAudioDeviceInfo::STATE_UNPLUGGED,  // CUBEB_DEVICE_STATE_UNPLUGGED
-    nsIAudioDeviceInfo::STATE_ENABLED     // CUBEB_DEVICE_STATE_ENABLED
-  };
-  return map[aState];
-}
-
-uint16_t ConvertCubebPreferred(cubeb_device_pref aPreferred)
-{
-  if (aPreferred == CUBEB_DEVICE_PREF_NONE) {
-    return nsIAudioDeviceInfo::PREF_NONE;
-  } else if (aPreferred == CUBEB_DEVICE_PREF_ALL) {
-    return nsIAudioDeviceInfo::PREF_ALL;
-  }
-
-  uint16_t preferred = 0;
-  if (aPreferred & CUBEB_DEVICE_PREF_MULTIMEDIA) {
-    preferred |= nsIAudioDeviceInfo::PREF_MULTIMEDIA;
-  }
-  if (aPreferred & CUBEB_DEVICE_PREF_VOICE) {
-    preferred |= nsIAudioDeviceInfo::PREF_VOICE;
-  }
-  if (aPreferred & CUBEB_DEVICE_PREF_NOTIFICATION) {
-    preferred |= nsIAudioDeviceInfo::PREF_NOTIFICATION;
-  }
-  return preferred;
-}
-
-uint16_t ConvertCubebFormat(cubeb_device_fmt aFormat)
-{
-  uint16_t format = 0;
-  if (aFormat & CUBEB_DEVICE_FMT_S16LE) {
-    format |= nsIAudioDeviceInfo::FMT_S16LE;
-  }
-  if (aFormat & CUBEB_DEVICE_FMT_S16BE) {
-    format |= nsIAudioDeviceInfo::FMT_S16BE;
-  }
-  if (aFormat & CUBEB_DEVICE_FMT_F32LE) {
-    format |= nsIAudioDeviceInfo::FMT_F32LE;
-  }
-  if (aFormat & CUBEB_DEVICE_FMT_F32BE) {
-    format |= nsIAudioDeviceInfo::FMT_F32BE;
-  }
-  return format;
-}
-
-void GetDeviceCollection(nsTArray<RefPtr<AudioDeviceInfo>>& aDeviceInfos,
-                         Side aSide)
-{
-  cubeb* context = GetCubebContext();
-  if (context) {
-    cubeb_device_collection collection = { nullptr, 0 };
-    if (cubeb_enumerate_devices(context,
-                                aSide == Input ? CUBEB_DEVICE_TYPE_INPUT :
-                                                 CUBEB_DEVICE_TYPE_OUTPUT,
-                                &collection) == CUBEB_OK) {
-      for (unsigned int i = 0; i < collection.count; ++i) {
-        auto device = collection.device[i];
-        RefPtr<AudioDeviceInfo> info =
-          new AudioDeviceInfo(NS_ConvertASCIItoUTF16(device.friendly_name),
-                              NS_ConvertASCIItoUTF16(device.group_id),
-                              NS_ConvertASCIItoUTF16(device.vendor_name),
-                              ConvertCubebType(device.type),
-                              ConvertCubebState(device.state),
-                              ConvertCubebPreferred(device.preferred),
-                              ConvertCubebFormat(device.format),
-                              ConvertCubebFormat(device.default_format),
-                              device.max_channels,
-                              device.default_rate,
-                              device.max_rate,
-                              device.min_rate,
-                              device.latency_hi,
-                              device.latency_lo);
-        aDeviceInfos.AppendElement(info);
-      }
-    }
-    cubeb_device_collection_destroy(context, &collection);
-  }
-}
-
 } // namespace CubebUtils
 } // namespace mozilla
--- a/dom/media/CubebUtils.h
+++ b/dom/media/CubebUtils.h
@@ -3,17 +3,16 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #if !defined(CubebUtils_h_)
 #define CubebUtils_h_
 
 #include "cubeb/cubeb.h"
-#include "mozilla/dom/AudioDeviceInfo.h"
 #include "mozilla/dom/AudioChannelBinding.h"
 #include "mozilla/Maybe.h"
 
 namespace mozilla {
 namespace CubebUtils {
 
 typedef cubeb_devid AudioDeviceID;
 
@@ -29,35 +28,28 @@ void ShutdownLibrary();
 uint32_t MaxNumberOfChannels();
 
 // Get the sample rate the hardware/mixer runs at. Thread safe.
 uint32_t PreferredSampleRate();
 
 // Get the bit mask of the connected audio device's preferred layout.
 uint32_t PreferredChannelMap(uint32_t aChannels);
 
-enum Side {
-  Input,
-  Output
-};
-
 void PrefChanged(const char* aPref, void* aClosure);
 double GetVolumeScale();
 bool GetFirstStream();
 cubeb* GetCubebContext();
 cubeb* GetCubebContextUnlocked();
 void ReportCubebStreamInitFailure(bool aIsFirstStream);
 void ReportCubebBackendUsed();
 uint32_t GetCubebPlaybackLatencyInMilliseconds();
 Maybe<uint32_t> GetCubebMSGLatencyInFrames();
 bool CubebLatencyPrefSet();
 cubeb_channel_layout ConvertChannelMapToCubebLayout(uint32_t aChannelMap);
 #if defined(__ANDROID__) && defined(MOZ_B2G)
 cubeb_stream_type ConvertChannelToCubebType(dom::AudioChannel aChannel);
 #endif
 void GetCurrentBackend(nsAString& aBackend);
-void GetPreferredChannelLayout(nsAString& aLayout);
-void GetDeviceCollection(nsTArray<RefPtr<AudioDeviceInfo>>& aDeviceInfos,
-                         Side aSide);
+
 } // namespace CubebUtils
 } // namespace mozilla
 
 #endif // CubebUtils_h_
--- a/dom/media/moz.build
+++ b/dom/media/moz.build
@@ -72,17 +72,16 @@ MOCHITEST_MANIFESTS += [
 ]
 
 if CONFIG['MOZ_WEBRTC']:
     MOCHITEST_MANIFESTS += ['tests/mochitest/mochitest.ini']
     WEBRTC_SIGNALLING_TEST_MANIFESTS += ['tests/mochitest/steeplechase.ini']
     WEBRTC_SIGNALLING_TEST_MANIFESTS += ['tests/mochitest/steeplechase_long/steeplechase_long.ini']
 
 XPIDL_SOURCES += [
-    'nsIAudioDeviceInfo.idl',
     'nsIDOMNavigatorUserMedia.idl',
     'nsIMediaManager.idl',
 ]
 
 XPIDL_MODULE = 'dom_media'
 
 EXPORTS += [
     'AbstractMediaDecoder.h',
@@ -171,17 +170,16 @@ if not CONFIG['MOZ_WEBRTC']:
       '../../media/mtransport/runnable_utils.h',
   ]
 
 IPDL_SOURCES += [
     'webrtc/PWebrtcGlobal.ipdl'
 ]
 
 EXPORTS.mozilla.dom += [
-    'AudioDeviceInfo.h',
     'AudioStreamTrack.h',
     'AudioTrack.h',
     'AudioTrackList.h',
     'CanvasCaptureMediaStream.h',
     'GetUserMediaRequest.h',
     'MediaDeviceInfo.h',
     'MediaDevices.h',
     'MediaStreamError.h',
@@ -199,17 +197,16 @@ EXPORTS.mozilla.dom += [
 
 UNIFIED_SOURCES += [
     'ADTSDecoder.cpp',
     'ADTSDemuxer.cpp',
     'AudioCaptureStream.cpp',
     'AudioChannelFormat.cpp',
     'AudioCompactor.cpp',
     'AudioConverter.cpp',
-    'AudioDeviceInfo.cpp',
     'AudioSegment.cpp',
     'AudioStream.cpp',
     'AudioStreamTrack.cpp',
     'AudioTrack.cpp',
     'AudioTrackList.cpp',
     'Benchmark.cpp',
     'CanvasCaptureMediaStream.cpp',
     'ChannelMediaDecoder.cpp',
deleted file mode 100644
--- a/dom/media/nsIAudioDeviceInfo.idl
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsISupports.idl"
-
-[scriptable, uuid(feb979a8-f8cc-4522-9dff-6c055ca50762)]
-interface nsIAudioDeviceInfo : nsISupports
-{
-  readonly attribute DOMString name;
-
-  readonly attribute DOMString groupId;
-
-  readonly attribute DOMString vendor;
-
-  // type: Unknown/Input/Output
-  const unsigned short TYPE_UNKNOWN = 0;
-  const unsigned short TYPE_INPUT   = 1;
-  const unsigned short TYPE_OUTPUT  = 2;
-  readonly attribute unsigned short type;
-
-  // state: Disabled/Unplugged/Enabled
-  const unsigned short STATE_DISABLED   = 0;
-  const unsigned short STATE_UNPLUGGED  = 1;
-  const unsigned short STATE_ENABLED    = 2;
-  readonly attribute unsigned short state;
-
-  // preferred: None/Multimedia/Voice/Notification/All
-  const unsigned short PREF_NONE          = 0x00;
-  const unsigned short PREF_MULTIMEDIA    = 0x01;
-  const unsigned short PREF_VOICE         = 0x02;
-  const unsigned short PREF_NOTIFICATION  = 0x04;
-  const unsigned short PREF_ALL           = 0x0F;
-  readonly attribute unsigned short preferred;
-
-  // supported format, default format: S16LE/S16BE/F32LE/F32BE
-  const unsigned short FMT_S16LE = 0x0010;
-  const unsigned short FMT_S16BE = 0x0020;
-  const unsigned short FMT_F32LE = 0x1000;
-  const unsigned short FMT_F32BE = 0x2000;
-  readonly attribute unsigned short supportedFormat;
-  readonly attribute unsigned short defaultFormat;
-
-  // Max number of channels: [1, 255]
-  readonly attribute unsigned long maxChannels;
-
-  readonly attribute unsigned long defaultRate;
-  readonly attribute unsigned long maxRate;
-  readonly attribute unsigned long minRate;
-
-  readonly attribute unsigned long maxLatency;
-  readonly attribute unsigned long minLatency;
-};
--- a/toolkit/content/aboutSupport.js
+++ b/toolkit/content/aboutSupport.js
@@ -444,16 +444,17 @@ var snapshotFormatters = {
     addRowFromKey("features", "webgl1DriverExtensions");
     addRowFromKey("features", "webgl1Extensions");
     addRowFromKey("features", "webgl2WSIInfo");
     addRowFromKey("features", "webgl2Renderer");
     addRowFromKey("features", "webgl2Version");
     addRowFromKey("features", "webgl2DriverExtensions");
     addRowFromKey("features", "webgl2Extensions");
     addRowFromKey("features", "supportsHardwareH264", "hardwareH264");
+    addRowFromKey("features", "currentAudioBackend", "audioBackend");
     addRowFromKey("features", "direct2DEnabled", "#Direct2D");
 
     if ("directWriteEnabled" in data) {
       let message = data.directWriteEnabled;
       if ("directWriteVersion" in data)
         message += " (" + data.directWriteVersion + ")";
       addRow("features", "#DirectWrite", message);
       delete data.directWriteEnabled;
@@ -592,121 +593,16 @@ var snapshotFormatters = {
       let value = data[key];
       if (Array.isArray(value)) {
         value = localizedMsg(value);
       }
       addRow("diagnostics", key, value);
     }
   },
 
-  media: function media(data) {
-    let strings = stringBundle();
-
-    function insertBasicInfo(key, value) {
-      function createRow(key, value) {
-        let th = $.new("th", strings.GetStringFromName(key), "column");
-        let td = $.new("td", value);
-        td.style["white-space"] = "pre-wrap";
-        return $.new("tr", [th, td,]);
-      }
-      $.append($("media-info-tbody"), [createRow(key, value)]);
-    }
-
-    function createDeviceInfoRow(device) {
-      let deviceInfo = Ci.nsIAudioDeviceInfo;
-
-      let states = {};
-      states[deviceInfo.STATE_DISABLED] = "Disabled";
-      states[deviceInfo.STATE_UNPLUGGED] = "Unplugged";
-      states[deviceInfo.STATE_ENABLED] = "Enabled";
-
-      let preferreds = {};
-      preferreds[deviceInfo.PREF_NONE] = "None";
-      preferreds[deviceInfo.PREF_MULTIMEDIA] = "Multimedia";
-      preferreds[deviceInfo.PREF_VOICE] = "Voice";
-      preferreds[deviceInfo.PREF_NOTIFICATION] = "Notification";
-      preferreds[deviceInfo.PREF_ALL] = "All";
-
-      let formats = {};
-      formats[deviceInfo.FMT_S16LE] = "S16LE";
-      formats[deviceInfo.FMT_S16BE] = "S16BE";
-      formats[deviceInfo.FMT_F32LE] = "F32LE";
-      formats[deviceInfo.FMT_F32BE] = "F32BE";
-
-      function toPreferredString(preferred) {
-        if (preferred == deviceInfo.PREF_NONE) {
-          return preferreds[deviceInfo.PREF_NONE];
-        } else if (preferred & deviceInfo.PREF_ALL) {
-          return preferreds[deviceInfo.PREF_ALL];
-        }
-        let str = "";
-        for (let pref of [deviceInfo.PREF_MULTIMEDIA,
-                          deviceInfo.PREF_VOICE,
-                          deviceInfo.PREF_NOTIFICATION]) {
-          if (preferred & pref) {
-            str += " " + preferreds[pref];
-          }
-        }
-        return str;
-      }
-
-      function toFromatString(dev) {
-        let str = "default: " + formats[dev.defaultFormat] + ", support:";
-        for (let fmt of [deviceInfo.FMT_S16LE,
-                         deviceInfo.FMT_S16BE,
-                         deviceInfo.FMT_F32LE,
-                         deviceInfo.FMT_F32BE]) {
-          if (dev.supportedFormat & fmt) {
-            str += " " + formats[fmt];
-          }
-        }
-        return str;
-      }
-
-      function toRateString(dev) {
-        return "default: " + dev.defaultRate +
-               ", support: " + dev.minRate + " - " + dev.maxRate;
-      }
-
-      function toLatencyString(dev) {
-        return dev.minLatency + " - " + dev.maxLatency;
-      }
-
-      return $.new("tr", [$.new("td", device.name),
-                          $.new("td", device.groupId),
-                          $.new("td", device.vendor),
-                          $.new("td", states[device.state]),
-                          $.new("td", toPreferredString(device.preferred)),
-                          $.new("td", toFromatString(device)),
-                          $.new("td", device.maxChannels),
-                          $.new("td", toRateString(device)),
-                          $.new("td", toLatencyString(device)),]);
-    }
-
-    function insertDeviceInfo(side, devices) {
-      let rows = [];
-      for (let dev of devices) {
-        rows.push(createDeviceInfoRow(dev));
-      }
-      $.append($("media-" + side + "-devices-tbody"), rows);
-    }
-
-    // Basic information
-    insertBasicInfo("audioBackend", data.currentAudioBackend);
-    insertBasicInfo("maxAudioChannels", data.currentMaxAudioChannels);
-    insertBasicInfo("channelLayout", data.currentPreferredChannelLayout);
-    insertBasicInfo("sampleRate", data.currentPreferredSampleRate);
-
-    // Output devices information
-    insertDeviceInfo("output", data.audioOutputDevices);
-
-    // Input devices information
-    insertDeviceInfo("input", data.audioInputDevices);
-  },
-
   javaScript: function javaScript(data) {
     $("javascript-incremental-gc").textContent = data.incrementalGCEnabled;
   },
 
   accessibility: function accessibility(data) {
     $("a11y-activated").textContent = data.isActive;
     $("a11y-force-disabled").textContent = data.forceDisabled || 0;
     let a11yHandlerUsed = $("a11y-handler-used");
--- a/toolkit/content/aboutSupport.xhtml
+++ b/toolkit/content/aboutSupport.xhtml
@@ -439,101 +439,16 @@
             </th>
           </tr>
         </tbody>
       </table>
 
       <!-- - - - - - - - - - - - - - - - - - - - - -->
 
       <h2 class="major-section">
-        &aboutSupport.mediaTitle;
-      </h2>
-      <table>
-        <tbody id="media-info-tbody">
-        </tbody>
-
-        <tbody id="media-output-devices-tbody">
-          <tr>
-            <th colspan="10" class="title-column">
-              &aboutSupport.mediaOutputDevicesTitle;
-            </th>
-          </tr>
-          <tr>
-            <th>
-              &aboutSupport.mediaDeviceName;
-            </th>
-            <th>
-              &aboutSupport.mediaDeviceGroup;
-            </th>
-            <th>
-              &aboutSupport.mediaDeviceVendor;
-            </th>
-            <th>
-              &aboutSupport.mediaDeviceState;
-            </th>
-            <th>
-              &aboutSupport.mediaDevicePreferred;
-            </th>
-            <th>
-              &aboutSupport.mediaDeviceFormat;
-            </th>
-            <th>
-              &aboutSupport.mediaDeviceChannels;
-            </th>
-            <th>
-              &aboutSupport.mediaDeviceRate;
-            </th>
-            <th>
-              &aboutSupport.mediaDeviceLatency;
-            </th>
-          </tr>
-        </tbody>
-
-        <tbody id="media-input-devices-tbody">
-          <tr>
-            <th colspan="10" class="title-column">
-              &aboutSupport.mediaInputDevicesTitle;
-            </th>
-          </tr>
-          <tr>
-            <th>
-              &aboutSupport.mediaDeviceName;
-            </th>
-            <th>
-              &aboutSupport.mediaDeviceGroup;
-            </th>
-            <th>
-              &aboutSupport.mediaDeviceVendor;
-            </th>
-            <th>
-              &aboutSupport.mediaDeviceState;
-            </th>
-            <th>
-              &aboutSupport.mediaDevicePreferred;
-            </th>
-            <th>
-              &aboutSupport.mediaDeviceFormat;
-            </th>
-            <th>
-              &aboutSupport.mediaDeviceChannels;
-            </th>
-            <th>
-              &aboutSupport.mediaDeviceRate;
-            </th>
-            <th>
-              &aboutSupport.mediaDeviceLatency;
-            </th>
-          </tr>
-        </tbody>
-
-      </table>
-
-      <!-- - - - - - - - - - - - - - - - - - - - - -->
-
-      <h2 class="major-section">
         &aboutSupport.modifiedKeyPrefsTitle;
       </h2>
 
       <table class="prefs-table">
         <thead class="no-copy">
           <th class="name">
             &aboutSupport.modifiedPrefsName;
           </th>
--- a/toolkit/locales/en-US/chrome/global/aboutSupport.dtd
+++ b/toolkit/locales/en-US/chrome/global/aboutSupport.dtd
@@ -136,21 +136,8 @@ variant of aboutSupport.showDir.label. -
 <!ENTITY aboutSupport.graphicsFeaturesTitle "Features">
 <!ENTITY aboutSupport.graphicsDiagnosticsTitle "Diagnostics">
 <!ENTITY aboutSupport.graphicsFailureLogTitle "Failure Log">
 <!ENTITY aboutSupport.graphicsGPU1Title "GPU #1">
 <!ENTITY aboutSupport.graphicsGPU2Title "GPU #2">
 <!ENTITY aboutSupport.graphicsDecisionLogTitle "Decision Log">
 <!ENTITY aboutSupport.graphicsCrashGuardsTitle "Crash Guard Disabled Features">
 <!ENTITY aboutSupport.graphicsWorkaroundsTitle "Workarounds">
-
-<!ENTITY aboutSupport.mediaTitle "Media">
-<!ENTITY aboutSupport.mediaOutputDevicesTitle "Output Devices">
-<!ENTITY aboutSupport.mediaInputDevicesTitle "Input Devices">
-<!ENTITY aboutSupport.mediaDeviceName "Name">
-<!ENTITY aboutSupport.mediaDeviceGroup "Group">
-<!ENTITY aboutSupport.mediaDeviceVendor "Vendor">
-<!ENTITY aboutSupport.mediaDeviceState "State">
-<!ENTITY aboutSupport.mediaDevicePreferred "Preferred">
-<!ENTITY aboutSupport.mediaDeviceFormat "Format">
-<!ENTITY aboutSupport.mediaDeviceChannels "Channels">
-<!ENTITY aboutSupport.mediaDeviceRate "Rate">
-<!ENTITY aboutSupport.mediaDeviceLatency "Latency">
--- a/toolkit/locales/en-US/chrome/global/aboutSupport.properties
+++ b/toolkit/locales/en-US/chrome/global/aboutSupport.properties
@@ -52,16 +52,17 @@ blockedMismatchedVersion = Blocked for y
 
 # LOCALIZATION NOTE In the following strings, "Direct2D", "DirectWrite" and "ClearType"
 # are proper nouns and should not be translated. Feel free to leave english strings if
 # there are no good translations, these are only used in about:support
 clearTypeParameters = ClearType Parameters
 
 compositing = Compositing
 hardwareH264 = Hardware H264 Decoding
+audioBackend = Audio Backend
 mainThreadNoOMTC = main thread, no OMTC
 yes = Yes
 no = No
 # LOCALIZATION NOTE The following strings indicate if an API key has been found.
 # In some development versions, it's expected for some API keys that they are
 # not found.
 found = Found
 missing = Missing
@@ -96,21 +97,16 @@ unknownFailure = Blocklisted; failure co
 d3d11layersCrashGuard = D3D11 Compositor
 d3d11videoCrashGuard = D3D11 Video Decoder
 d3d9videoCrashGuard = D3D9 Video Decoder
 glcontextCrashGuard = OpenGL
 resetOnNextRestart = Reset on Next Restart
 gpuProcessKillButton = Terminate GPU Process
 gpuDeviceResetButton = Trigger Device Reset
 
-audioBackend = Audio Backend
-maxAudioChannels = Max Channels
-channelLayout = Preferred Channel Layout
-sampleRate = Preferred Sample Rate
-
 minLibVersions = Expected minimum version
 loadedLibVersions = Version in use
 
 hasSeccompBPF = Seccomp-BPF (System Call Filtering)
 hasSeccompTSync = Seccomp Thread Synchronization
 hasUserNamespaces = User Namespaces
 hasPrivilegedUserNamespaces = User Namespaces for privileged processes
 canSandboxContent = Content Process Sandboxing
@@ -148,9 +144,9 @@ keyboardEnabled = keyboard enabled
 wheelWarning = async wheel input disabled due to unsupported pref: %S
 touchWarning = async touch input disabled due to unsupported pref: %S
 
 # LOCALIZATION NOTE Strings explaining why a feature is or is not available.
 disabledByBuild = disabled by build
 enabledByDefault = enabled by default
 disabledByDefault = disabled by default
 enabledByUser = enabled by user
-disabledByUser = disabled by user
+disabledByUser = disabled by user
\ No newline at end of file
--- a/toolkit/modules/Troubleshoot.jsm
+++ b/toolkit/modules/Troubleshoot.jsm
@@ -396,16 +396,18 @@ var dataProviders = {
       data.windowLayerManagerType = "Basic";
       data.windowLayerManagerRemote = false;
     }
 
     let winUtils = Services.wm.getMostRecentWindow("").
                    QueryInterface(Ci.nsIInterfaceRequestor).
                    getInterface(Ci.nsIDOMWindowUtils)
 
+    data.currentAudioBackend = winUtils.currentAudioBackend;
+
     if (!data.numAcceleratedWindows && gfxInfo) {
       let win = AppConstants.platform == "win";
       let feature = win ? gfxInfo.FEATURE_DIRECT3D_9_LAYERS :
                           gfxInfo.FEATURE_OPENGL_LAYERS;
       data.numAcceleratedWindowsMessage = statusMsgForFeature(feature);
     }
 
     if (!gfxInfo) {
@@ -540,59 +542,16 @@ var dataProviders = {
     }
 
     data.featureLog = gfxInfo.getFeatureLog();
     data.crashGuards = gfxInfo.getActiveCrashGuards();
 
     completed();
   },
 
-  media: function media(done) {
-    function convertDevices(devices) {
-      if (!devices) {
-        return undefined;
-      }
-      let infos = [];
-      for (let i = 0; i < devices.length; ++i) {
-        let device = devices.queryElementAt(i, Ci.nsIAudioDeviceInfo);
-        infos.push({
-          name: device.name,
-          groupId: device.groupId,
-          vendor: device.vendor,
-          type: device.type,
-          state: device.state,
-          preferred: device.preferred,
-          supportedFormat: device.supportedFormat,
-          defaultFormat: device.defaultFormat,
-          maxChannels: device.maxChannels,
-          defaultRate: device.defaultRate,
-          maxRate: device.maxRate,
-          minRate: device.minRate,
-          maxLatency: device.maxLatency,
-          minLatency: device.minLatency
-        });
-      }
-      return infos;
-    }
-
-    let data = {};
-    let winUtils = Services.wm.getMostRecentWindow("").
-                   QueryInterface(Ci.nsIInterfaceRequestor).
-                   getInterface(Ci.nsIDOMWindowUtils);
-    data.currentAudioBackend = winUtils.currentAudioBackend;
-    data.currentMaxAudioChannels = winUtils.currentMaxAudioChannels;
-    data.currentPreferredChannelLayout = winUtils.currentPreferredChannelLayout;
-    data.currentPreferredSampleRate = winUtils.currentPreferredSampleRate;
-    data.audioOutputDevices = convertDevices(winUtils.audioDevices(Ci.nsIDOMWindowUtils.AUDIO_OUTPUT).
-                                             QueryInterface(Ci.nsIArray));
-    data.audioInputDevices = convertDevices(winUtils.audioDevices(Ci.nsIDOMWindowUtils.AUDIO_INPUT).
-                                            QueryInterface(Ci.nsIArray));
-    done(data);
-  },
-
   javaScript: function javaScript(done) {
     let data = {};
     let winEnumer = Services.ww.getWindowEnumerator();
     if (winEnumer.hasMoreElements())
       data.incrementalGCEnabled = winEnumer.getNext().
                                   QueryInterface(Ci.nsIInterfaceRequestor).
                                   getInterface(Ci.nsIDOMWindowUtils).
                                   isIncrementalGCEnabled();