Bug 1309723 - Remove DOM/voicemail and related code. r=Ehsan draft
authorMichelangelo De Simone <mdesimone@mozilla.com>
Thu, 13 Oct 2016 15:11:41 -0700
changeset 425556 43008cd2eaf97d77d32a6faa9fb4854e3d1f29a8
parent 425549 de5d73a0568d1c3d50da32169026cc68ee09b1ae
child 533944 80197ab7b493ac0e2a150e9d8c510a45dc632b9d
push id32451
push usermdesimone@mozilla.com
push dateSat, 15 Oct 2016 00:02:56 +0000
reviewersEhsan
bugs1309723
milestone52.0a1
Bug 1309723 - Remove DOM/voicemail and related code. r=Ehsan MozReview-Commit-ID: JDSqQnYD6xL
b2g/chrome/content/settings.js
b2g/installer/package-manifest.in
browser/installer/package-manifest.in
dom/apps/PermissionsTable.jsm
dom/base/Navigator.cpp
dom/base/Navigator.h
dom/bindings/Bindings.conf
dom/events/test/test_all_synthetic_events.html
dom/ipc/ContentChild.cpp
dom/ipc/ContentChild.h
dom/ipc/ContentParent.cpp
dom/ipc/ContentParent.h
dom/ipc/PContent.ipdl
dom/moz.build
dom/permission/tests/mochitest-ril.ini
dom/permission/tests/test_voicemail.html
dom/voicemail/Voicemail.cpp
dom/voicemail/Voicemail.h
dom/voicemail/VoicemailStatus.cpp
dom/voicemail/VoicemailStatus.h
dom/voicemail/gonk/VoicemailService.js
dom/voicemail/gonk/VoicemailService.manifest
dom/voicemail/gonk/nsIGonkVoicemailService.idl
dom/voicemail/ipc/PVoicemail.ipdl
dom/voicemail/ipc/VoicemailIPCService.cpp
dom/voicemail/ipc/VoicemailIPCService.h
dom/voicemail/ipc/VoicemailParent.cpp
dom/voicemail/ipc/VoicemailParent.h
dom/voicemail/moz.build
dom/voicemail/nsIVoicemailService.idl
dom/voicemail/test/marionette/head.js
dom/voicemail/test/marionette/manifest.ini
dom/voicemail/test/marionette/test_voicemail_dsds_default_service_id.js
dom/voicemail/test/marionette/test_voicemail_number.js
dom/voicemail/test/marionette/test_voicemail_statuschanged.js
dom/webidl/MozVoicemail.webidl
dom/webidl/MozVoicemailEvent.webidl
dom/webidl/MozVoicemailStatus.webidl
dom/webidl/Navigator.webidl
dom/webidl/moz.build
layout/build/nsLayoutModule.cpp
modules/libpref/init/all.js
testing/marionette/harness/marionette/tests/webapi-tests.ini
testing/mochitest/manifest.webapp
--- a/b2g/chrome/content/settings.js
+++ b/b2g/chrome/content/settings.js
@@ -125,17 +125,17 @@ SettingsListener.observe('language.curre
   if (shell.hasStarted() == false) {
     shell.bootstrap();
   }
 });
 
 // =================== RIL ====================
 (function RILSettingsToPrefs() {
   // DSDS default service IDs
-  ['mms', 'sms', 'telephony', 'voicemail'].forEach(function(key) {
+  ['mms', 'sms', 'telephony'].forEach(function(key) {
     SettingsListener.observe('ril.' + key + '.defaultServiceId', 0,
                              function(value) {
       if (value != null) {
         Services.prefs.setIntPref('dom.' + key + '.defaultServiceId', value);
       }
     });
   });
 })();
--- a/b2g/installer/package-manifest.in
+++ b/b2g/installer/package-manifest.in
@@ -201,17 +201,16 @@
 @RESPATH@/components/dom_storage.xpt
 @RESPATH@/components/dom_stylesheets.xpt
 @RESPATH@/components/dom_telephony.xpt
 @RESPATH@/components/dom_threads.xpt
 @RESPATH@/components/dom_traversal.xpt
 @RESPATH@/components/dom_tv.xpt
 @RESPATH@/components/dom_inputport.xpt
 @RESPATH@/components/dom_views.xpt
-@RESPATH@/components/dom_voicemail.xpt
 #ifdef MOZ_WEBSPEECH
 @RESPATH@/components/dom_webspeechrecognition.xpt
 #endif
 @RESPATH@/components/dom_xbl.xpt
 @RESPATH@/components/dom_xhr.xpt
 @RESPATH@/components/dom_xpath.xpt
 @RESPATH@/components/dom_xul.xpt
 @RESPATH@/components/dom_time.xpt
@@ -494,18 +493,16 @@
 @RESPATH@/components/RILSystemMessengerHelper.manifest
 @RESPATH@/components/TelephonyAudioService.js
 @RESPATH@/components/TelephonyAudioService.manifest
 @RESPATH@/components/USSDReceivedWrapper.js
 @RESPATH@/components/USSDReceivedWrapper.manifest
 #ifndef DISABLE_MOZ_RIL_GEOLOC
 @RESPATH@/components/TelephonyService.js
 @RESPATH@/components/TelephonyService.manifest
-@RESPATH@/components/VoicemailService.js
-@RESPATH@/components/VoicemailService.manifest
 #endif
 #endif // MOZ_WIDGET_GONK && MOZ_B2G_RIL
 
 #ifndef MOZ_WIDGET_GONK
 @RESPATH@/components/addonManager.js
 @RESPATH@/components/amContentHandler.js
 @RESPATH@/components/amInstallTrigger.js
 @RESPATH@/components/amWebInstallListener.js
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -208,17 +208,16 @@
 @RESPATH@/components/dom_settings.xpt
 @RESPATH@/components/dom_permissionsettings.xpt
 @RESPATH@/components/dom_sidebar.xpt
 @RESPATH@/components/dom_mobilemessage.xpt
 @RESPATH@/components/dom_storage.xpt
 @RESPATH@/components/dom_stylesheets.xpt
 @RESPATH@/components/dom_telephony.xpt
 @RESPATH@/components/dom_traversal.xpt
-@RESPATH@/components/dom_voicemail.xpt
 #ifdef MOZ_WEBSPEECH
 @RESPATH@/components/dom_webspeechrecognition.xpt
 #endif
 @RESPATH@/components/dom_workers.xpt
 @RESPATH@/components/dom_xbl.xpt
 @RESPATH@/components/dom_xhr.xpt
 @RESPATH@/components/dom_xpath.xpt
 @RESPATH@/components/dom_xul.xpt
--- a/dom/apps/PermissionsTable.jsm
+++ b/dom/apps/PermissionsTable.jsm
@@ -248,21 +248,16 @@ this.PermissionsTable =  { geolocation: 
                              privileged: DENY_ACTION,
                              certified: ALLOW_ACTION
                            },
                            "systemXHR": {
                              app: DENY_ACTION,
                              privileged: ALLOW_ACTION,
                              certified: ALLOW_ACTION
                            },
-                           "voicemail": {
-                             app: DENY_ACTION,
-                             privileged: DENY_ACTION,
-                             certified: ALLOW_ACTION
-                           },
                            "idle": {
                              app: DENY_ACTION,
                              privileged: DENY_ACTION,
                              certified: ALLOW_ACTION
                            },
                            "time": {
                              app: DENY_ACTION,
                              privileged: DENY_ACTION,
--- a/dom/base/Navigator.cpp
+++ b/dom/base/Navigator.cpp
@@ -44,17 +44,16 @@
 #include "mozilla/dom/InputPortManager.h"
 #include "mozilla/dom/MobileMessageManager.h"
 #include "mozilla/dom/Permissions.h"
 #include "mozilla/dom/Presentation.h"
 #include "mozilla/dom/ServiceWorkerContainer.h"
 #include "mozilla/dom/StorageManager.h"
 #include "mozilla/dom/TCPSocket.h"
 #include "mozilla/dom/Telephony.h"
-#include "mozilla/dom/Voicemail.h"
 #include "mozilla/dom/VRDisplay.h"
 #include "mozilla/dom/workers/RuntimeService.h"
 #include "mozilla/Hal.h"
 #include "nsISiteSpecificUserAgent.h"
 #include "mozilla/ClearOnShutdown.h"
 #include "mozilla/StaticPtr.h"
 #include "Connection.h"
 #include "mozilla/dom/Event.h" // for nsIDOMEvent::InternalDOMEvent()
@@ -215,17 +214,16 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mGeolocation)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mNotification)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mBatteryManager)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mBatteryPromise)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mPowerManager)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mIccManager)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mMobileMessageManager)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mTelephony)
-  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mVoicemail)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mInputPortManager)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mConnection)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mStorageManager)
 #ifdef MOZ_B2G_RIL
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mMobileConnections)
 #endif
 #ifdef MOZ_B2G_BT
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mBluetooth)
@@ -300,21 +298,16 @@ Navigator::Invalidate()
     mMobileMessageManager->Shutdown();
     mMobileMessageManager = nullptr;
   }
 
   if (mTelephony) {
     mTelephony = nullptr;
   }
 
-  if (mVoicemail) {
-    mVoicemail->Shutdown();
-    mVoicemail = nullptr;
-  }
-
   if (mInputPortManager) {
     mInputPortManager = nullptr;
   }
 
   if (mConnection) {
     mConnection->Shutdown();
     mConnection = nullptr;
   }
@@ -1705,31 +1698,16 @@ Navigator::GetMozMobileConnections(Error
     mMobileConnections = new MobileConnectionArray(mWindow);
   }
 
   return mMobileConnections;
 }
 
 #endif // MOZ_B2G_RIL
 
-Voicemail*
-Navigator::GetMozVoicemail(ErrorResult& aRv)
-{
-  if (!mVoicemail) {
-    if (!mWindow) {
-      aRv.Throw(NS_ERROR_UNEXPECTED);
-      return nullptr;
-    }
-
-    mVoicemail = Voicemail::Create(mWindow, aRv);
-  }
-
-  return mVoicemail;
-}
-
 IccManager*
 Navigator::GetMozIccManager(ErrorResult& aRv)
 {
   if (!mIccManager) {
     if (!mWindow) {
       aRv.Throw(NS_ERROR_UNEXPECTED);
       return nullptr;
     }
--- a/dom/base/Navigator.h
+++ b/dom/base/Navigator.h
@@ -82,17 +82,16 @@ class BluetoothManager;
 
 #ifdef MOZ_B2G_RIL
 class MobileConnectionArray;
 #endif
 
 class PowerManager;
 class IccManager;
 class Telephony;
-class Voicemail;
 class InputPortManager;
 class DeviceStorageAreaListener;
 class Presentation;
 class LegacyMozTCPSocket;
 class VRDisplay;
 class StorageManager;
 
 namespace time {
@@ -221,17 +220,16 @@ public:
   already_AddRefed<nsDOMDeviceStorage>
   GetDeviceStorageByNameAndType(const nsAString& aName, const nsAString& aType,
                                 ErrorResult& aRv);
 
   DesktopNotificationCenter* GetMozNotification(ErrorResult& aRv);
   IccManager* GetMozIccManager(ErrorResult& aRv);
   MobileMessageManager* GetMozMobileMessage();
   Telephony* GetMozTelephony(ErrorResult& aRv);
-  Voicemail* GetMozVoicemail(ErrorResult& aRv);
   InputPortManager* GetInputPortManager(ErrorResult& aRv);
   already_AddRefed<LegacyMozTCPSocket> MozTCPSocket();
   network::Connection* GetConnection(ErrorResult& aRv);
   nsDOMCameraManager* GetMozCameras(ErrorResult& aRv);
   MediaDevices* GetMediaDevices(ErrorResult& aRv);
 
 #ifdef MOZ_B2G_RIL
   MobileConnectionArray* GetMozMobileConnections(ErrorResult& aRv);
@@ -330,17 +328,16 @@ private:
   RefPtr<Geolocation> mGeolocation;
   RefPtr<DesktopNotificationCenter> mNotification;
   RefPtr<battery::BatteryManager> mBatteryManager;
   RefPtr<Promise> mBatteryPromise;
   RefPtr<PowerManager> mPowerManager;
   RefPtr<IccManager> mIccManager;
   RefPtr<MobileMessageManager> mMobileMessageManager;
   RefPtr<Telephony> mTelephony;
-  RefPtr<Voicemail> mVoicemail;
   RefPtr<InputPortManager> mInputPortManager;
   RefPtr<network::Connection> mConnection;
 #ifdef MOZ_B2G_RIL
   RefPtr<MobileConnectionArray> mMobileConnections;
 #endif
 #ifdef MOZ_B2G_BT
   RefPtr<bluetooth::BluetoothManager> mBluetooth;
 #endif
--- a/dom/bindings/Bindings.conf
+++ b/dom/bindings/Bindings.conf
@@ -745,24 +745,16 @@ DOMInterfaces = {
 'MozWakeLock': {
     'nativeType': 'mozilla::dom::WakeLock',
 },
 
 'MozTimeManager': {
     'nativeType': 'mozilla::dom::time::TimeManager',
 },
 
-'MozVoicemail': {
-    'nativeType': 'mozilla::dom::Voicemail',
-},
-
-'MozVoicemailStatus': {
-    'nativeType': 'mozilla::dom::VoicemailStatus',
-},
-
 'MutationObserver': {
     'nativeType': 'nsDOMMutationObserver',
 },
 
 'MutationRecord': {
     'nativeType': 'nsDOMMutationRecord',
     'headerFile': 'nsDOMMutationObserver.h',
 },
--- a/dom/events/test/test_all_synthetic_events.html
+++ b/dom/events/test/test_all_synthetic_events.html
@@ -375,20 +375,16 @@ const kEventConstructors = {
   MozSmsEvent:                               { create: function (aName, aProps) {
                                                          return new MozSmsEvent(aName, aProps);
                                                        },
                                              },
   MozStkCommandEvent:                        { create: function (aName, aProps) {
                                                           return new MozStkCommandEvent(aName, aProps);
                                                        },
                                              },
-  MozVoicemailEvent:                         { create: function (aName, aProps) {
-                                                          return new MozVoicemailEvent(aName, aProps);
-                                                       },
-                                             },
   MozWifiConnectionInfoEvent:                { create: function (aName, aProps) {
                                                          return new MozWifiConnectionInfoEvent(aName, aProps);
                                                        },
                                              },
   MozWifiStatusChangeEvent:                  { create: function (aName, aProps) {
                                                           return new MozWifiStatusChangeEvent(aName, aProps);
                                                        },
                                              },
--- a/dom/ipc/ContentChild.cpp
+++ b/dom/ipc/ContentChild.cpp
@@ -187,17 +187,16 @@
 #include "URIUtils.h"
 #include "nsContentUtils.h"
 #include "nsIPrincipal.h"
 #include "nsDeviceStorage.h"
 #include "DomainPolicy.h"
 #include "mozilla/dom/ipc/StructuredCloneData.h"
 #include "mozilla/dom/telephony/PTelephonyChild.h"
 #include "mozilla/dom/time/DateCacheCleaner.h"
-#include "mozilla/dom/voicemail/VoicemailIPCService.h"
 #include "mozilla/net/NeckoMessageUtils.h"
 #include "mozilla/widget/PuppetBidiKeyboard.h"
 #include "mozilla/RemoteSpellCheckEngineChild.h"
 #include "GMPServiceChild.h"
 #include "GMPDecoderModule.h"
 #include "gfxPlatform.h"
 #include "nscore.h" // for NS_FREE_PERMANENT_DATA
 #include "VRManagerChild.h"
@@ -206,17 +205,16 @@ using namespace mozilla;
 using namespace mozilla::docshell;
 using namespace mozilla::dom::bluetooth;
 using namespace mozilla::dom::devicestorage;
 using namespace mozilla::dom::icc;
 using namespace mozilla::dom::ipc;
 using namespace mozilla::dom::mobileconnection;
 using namespace mozilla::dom::mobilemessage;
 using namespace mozilla::dom::telephony;
-using namespace mozilla::dom::voicemail;
 using namespace mozilla::dom::workers;
 using namespace mozilla::media;
 using namespace mozilla::embedding;
 using namespace mozilla::gmp;
 using namespace mozilla::hal_sandbox;
 using namespace mozilla::ipc;
 using namespace mozilla::layers;
 using namespace mozilla::layout;
@@ -2000,40 +1998,16 @@ ContentChild::AllocPTelephonyChild()
 
 bool
 ContentChild::DeallocPTelephonyChild(PTelephonyChild* aActor)
 {
   delete aActor;
   return true;
 }
 
-PVoicemailChild*
-ContentChild::AllocPVoicemailChild()
-{
-  MOZ_CRASH("No one should be allocating PVoicemailChild actors");
-}
-
-PVoicemailChild*
-ContentChild::SendPVoicemailConstructor(PVoicemailChild* aActor)
-{
-  aActor = PContentChild::SendPVoicemailConstructor(aActor);
-  if (aActor) {
-    static_cast<VoicemailIPCService*>(aActor)->AddRef();
-  }
-
-  return aActor;
-}
-
-bool
-ContentChild::DeallocPVoicemailChild(PVoicemailChild* aActor)
-{
-  static_cast<VoicemailIPCService*>(aActor)->Release();
-  return true;
-}
-
 media::PMediaChild*
 ContentChild::AllocPMediaChild()
 {
   return media::AllocPMediaChild();
 }
 
 bool
 ContentChild::DeallocPMediaChild(media::PMediaChild *aActor)
--- a/dom/ipc/ContentChild.h
+++ b/dom/ipc/ContentChild.h
@@ -338,22 +338,16 @@ public:
   virtual PSmsChild* AllocPSmsChild() override;
 
   virtual bool DeallocPSmsChild(PSmsChild*) override;
 
   virtual PTelephonyChild* AllocPTelephonyChild() override;
 
   virtual bool DeallocPTelephonyChild(PTelephonyChild*) override;
 
-  virtual PVoicemailChild* AllocPVoicemailChild() override;
-
-  PVoicemailChild* SendPVoicemailConstructor(PVoicemailChild* aActor);
-
-  virtual bool DeallocPVoicemailChild(PVoicemailChild*) override;
-
   virtual PMediaChild* AllocPMediaChild() override;
 
   virtual bool DeallocPMediaChild(PMediaChild* aActor) override;
 
   virtual PStorageChild* AllocPStorageChild() override;
 
   virtual bool DeallocPStorageChild(PStorageChild* aActor) override;
 
--- a/dom/ipc/ContentParent.cpp
+++ b/dom/ipc/ContentParent.cpp
@@ -65,17 +65,16 @@
 #include "mozilla/dom/Permissions.h"
 #include "mozilla/dom/PresentationParent.h"
 #include "mozilla/dom/PPresentationParent.h"
 #include "mozilla/dom/PushNotifier.h"
 #include "mozilla/dom/FlyWebPublishedServerIPC.h"
 #include "mozilla/dom/quota/QuotaManagerService.h"
 #include "mozilla/dom/telephony/TelephonyParent.h"
 #include "mozilla/dom/time/DateCacheCleaner.h"
-#include "mozilla/dom/voicemail/VoicemailParent.h"
 #include "mozilla/embedding/printingui/PrintingParent.h"
 #include "mozilla/gfx/gfxVars.h"
 #include "mozilla/gfx/GPUProcessManager.h"
 #include "mozilla/hal_sandbox/PHalParent.h"
 #include "mozilla/ipc/BackgroundChild.h"
 #include "mozilla/ipc/BackgroundParent.h"
 #include "mozilla/ipc/FileDescriptorUtils.h"
 #include "mozilla/ipc/PSendStreamParent.h"
@@ -289,17 +288,16 @@ using namespace CrashReporter;
 #endif
 using namespace mozilla::dom::bluetooth;
 using namespace mozilla::dom::devicestorage;
 using namespace mozilla::dom::icc;
 using namespace mozilla::dom::power;
 using namespace mozilla::dom::mobileconnection;
 using namespace mozilla::dom::mobilemessage;
 using namespace mozilla::dom::telephony;
-using namespace mozilla::dom::voicemail;
 using namespace mozilla::media;
 using namespace mozilla::embedding;
 using namespace mozilla::gfx;
 using namespace mozilla::gmp;
 using namespace mozilla::hal;
 using namespace mozilla::ipc;
 using namespace mozilla::layers;
 using namespace mozilla::layout;
@@ -3470,41 +3468,16 @@ ContentParent::AllocPTelephonyParent()
 
 bool
 ContentParent::DeallocPTelephonyParent(PTelephonyParent* aActor)
 {
   static_cast<TelephonyParent*>(aActor)->Release();
   return true;
 }
 
-PVoicemailParent*
-ContentParent::AllocPVoicemailParent()
-{
-  if (!AssertAppProcessPermission(this, "voicemail")) {
-    return nullptr;
-  }
-
-  VoicemailParent* actor = new VoicemailParent();
-  actor->AddRef();
-  return actor;
-}
-
-bool
-ContentParent::RecvPVoicemailConstructor(PVoicemailParent* aActor)
-{
-  return static_cast<VoicemailParent*>(aActor)->Init();
-}
-
-bool
-ContentParent::DeallocPVoicemailParent(PVoicemailParent* aActor)
-{
-  static_cast<VoicemailParent*>(aActor)->Release();
-  return true;
-}
-
 media::PMediaParent*
 ContentParent::AllocPMediaParent()
 {
   return media::AllocPMediaParent();
 }
 
 bool
 ContentParent::DeallocPMediaParent(media::PMediaParent *aActor)
--- a/dom/ipc/ContentParent.h
+++ b/dom/ipc/ContentParent.h
@@ -846,22 +846,16 @@ private:
   virtual PSmsParent* AllocPSmsParent() override;
 
   virtual bool DeallocPSmsParent(PSmsParent*) override;
 
   virtual PTelephonyParent* AllocPTelephonyParent() override;
 
   virtual bool DeallocPTelephonyParent(PTelephonyParent*) override;
 
-  virtual PVoicemailParent* AllocPVoicemailParent() override;
-
-  virtual bool RecvPVoicemailConstructor(PVoicemailParent* aActor) override;
-
-  virtual bool DeallocPVoicemailParent(PVoicemailParent* aActor) override;
-
   virtual PMediaParent* AllocPMediaParent() override;
 
   virtual bool DeallocPMediaParent(PMediaParent* aActor) override;
 
   virtual bool DeallocPStorageParent(PStorageParent* aActor) override;
 
   virtual PBluetoothParent* AllocPBluetoothParent() override;
 
--- a/dom/ipc/PContent.ipdl
+++ b/dom/ipc/PContent.ipdl
@@ -42,17 +42,16 @@ include protocol POfflineCacheUpdate;
 include protocol PRenderFrame;
 include protocol PScreenManager;
 include protocol PSharedBufferManager;
 include protocol PSms;
 include protocol PSpeechSynthesis;
 include protocol PStorage;
 include protocol PTelephony;
 include protocol PTestShell;
-include protocol PVoicemail;
 include protocol PJavaScript;
 include protocol PRemoteSpellcheckEngine;
 include protocol PWebBrowserPersistDocument;
 include protocol PWebrtcGlobal;
 include protocol PPresentation;
 include protocol PVRManager;
 include protocol PVideoDecoderManager;
 include protocol PFlyWebPublishedServer;
@@ -372,17 +371,16 @@ nested(upto inside_cpow) sync protocol P
     manages PPrinting;
     manages PSendStream;
     manages PScreenManager;
     manages PSms;
     manages PSpeechSynthesis;
     manages PStorage;
     manages PTelephony;
     manages PTestShell;
-    manages PVoicemail;
     manages PJavaScript;
     manages PRemoteSpellcheckEngine;
     manages PWebBrowserPersistDocument;
     manages PWebrtcGlobal;
     manages PPresentation;
     manages PFlyWebPublishedServer;
 
 both:
@@ -822,18 +820,16 @@ parent:
     async PSms();
 
     async PSpeechSynthesis();
 
     nested(inside_cpow) async PStorage();
 
     async PTelephony();
 
-    async PVoicemail();
-
     async PMedia();
 
     async PBluetooth();
 
     async PWebrtcGlobal();
 
     async PPresentation();
 
--- a/dom/moz.build
+++ b/dom/moz.build
@@ -92,17 +92,16 @@ DIRS += [
     'camera',
     'audiochannel',
     'broadcastchannel',
     'messagechannel',
     'promise',
     'smil',
     'telephony',
     'url',
-    'voicemail',
     'inputmethod',
     'webidl',
     'xbl',
     'xml',
     'xslt',
     'xul',
     'resourcestats',
     'manifest',
--- a/dom/permission/tests/mochitest-ril.ini
+++ b/dom/permission/tests/mochitest-ril.ini
@@ -1,5 +1,4 @@
 [test_cellbroadcast.html]
 [test_mobileconnection.html]
 [test_networkstats-manage.html]
 [test_telephony.html]
-[test_voicemail.html]
deleted file mode 100644
--- a/dom/permission/tests/test_voicemail.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=815105
--->
-<head>
-  <meta charset="utf-8">
-  <title>Test for Bug 815105 </title>
-  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
-  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=815105">Mozilla Bug 815105 </a>
-<p id="display"></p>
-<div id="content" style="display: none"></div>
-<pre id="test">
-<script type="application/javascript;version=1.8" src="file_framework.js"></script>
-<script type="application/javascript;version=1.8">
-var gData = [
-  {
-    perm: ["voicemail"],
-    obj: "mozVoicemail",
-    webidl: "MozVoicemail",
-    settings: [["dom.voicemail.enabled", true],
-               ["dom.ignore_webidl_scope_checks", true]],
-  },
-]
-</script>
-</pre>
-</body>
-</html>
-
deleted file mode 100644
--- a/dom/voicemail/Voicemail.cpp
+++ /dev/null
@@ -1,260 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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 "mozilla/dom/Voicemail.h"
-
-#include "mozilla/dom/MozVoicemailBinding.h"
-#include "mozilla/dom/MozVoicemailEvent.h"
-#include "mozilla/dom/MozVoicemailStatusBinding.h"
-
-#include "mozilla/Preferences.h"
-#include "mozilla/Services.h"
-#include "nsContentUtils.h"
-#include "nsServiceManagerUtils.h"
-
-// Service instantiation
-#include "ipc/VoicemailIPCService.h"
-#if defined(MOZ_WIDGET_GONK) && defined(MOZ_B2G_RIL)
-#include "nsIGonkVoicemailService.h"
-#endif
-#include "nsXULAppAPI.h" // For XRE_GetProcessType()
-
-using namespace mozilla::dom;
-using mozilla::ErrorResult;
-
-class Voicemail::Listener final : public nsIVoicemailListener
-{
-  Voicemail* mVoicemail;
-
-public:
-  NS_DECL_ISUPPORTS
-  NS_FORWARD_SAFE_NSIVOICEMAILLISTENER(mVoicemail)
-
-  explicit Listener(Voicemail* aVoicemail)
-    : mVoicemail(aVoicemail)
-  {
-    MOZ_ASSERT(mVoicemail);
-  }
-
-  void Disconnect()
-  {
-    MOZ_ASSERT(mVoicemail);
-    mVoicemail = nullptr;
-  }
-
-private:
-  ~Listener()
-  {
-    MOZ_ASSERT(!mVoicemail);
-  }
-};
-
-NS_IMPL_ISUPPORTS(Voicemail::Listener, nsIVoicemailListener)
-
-NS_IMPL_CYCLE_COLLECTION_INHERITED(Voicemail, DOMEventTargetHelper,
-                                   mStatuses)
-
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(Voicemail)
-NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper)
-
-NS_IMPL_ADDREF_INHERITED(Voicemail, DOMEventTargetHelper)
-NS_IMPL_RELEASE_INHERITED(Voicemail, DOMEventTargetHelper)
-
-/* static */ already_AddRefed<Voicemail>
-Voicemail::Create(nsPIDOMWindowInner* aWindow,
-                  ErrorResult& aRv)
-{
-  nsCOMPtr<nsIVoicemailService> service =
-    do_GetService(NS_VOICEMAIL_SERVICE_CONTRACTID);
-  if (!service) {
-    aRv.Throw(NS_ERROR_UNEXPECTED);
-    return nullptr;
-  }
-
-  RefPtr<Voicemail> voicemail = new Voicemail(aWindow, service);
-  return voicemail.forget();
-}
-
-Voicemail::Voicemail(nsPIDOMWindowInner* aWindow,
-                     nsIVoicemailService* aService)
-  : DOMEventTargetHelper(aWindow)
-  , mService(aService)
-{
-  MOZ_ASSERT(mService);
-
-  mListener = new Listener(this);
-  DebugOnly<nsresult> rv = mService->RegisterListener(mListener);
-  NS_WARNING_ASSERTION(NS_SUCCEEDED(rv),
-                       "Failed registering voicemail messages with service");
-
-  uint32_t length = 0;
-  if (NS_SUCCEEDED(mService->GetNumItems(&length)) && length != 0) {
-    mStatuses.SetLength(length);
-  }
-}
-
-Voicemail::~Voicemail()
-{
-  MOZ_ASSERT(!mService && !mListener);
-}
-
-void
-Voicemail::Shutdown()
-{
-  mListener->Disconnect();
-  mService->UnregisterListener(mListener);
-
-  mListener = nullptr;
-  mService = nullptr;
-  mStatuses.Clear();
-}
-
-JSObject*
-Voicemail::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
-{
-  return MozVoicemailBinding::Wrap(aCx, this, aGivenProto);
-}
-
-already_AddRefed<nsIVoicemailProvider>
-Voicemail::GetItemByServiceId(const Optional<uint32_t>& aOptionalServiceId,
-                              uint32_t& aActualServiceId) const
-{
-  if (!mService) {
-    return nullptr;
-  }
-
-  nsCOMPtr<nsIVoicemailProvider> provider;
-  if (aOptionalServiceId.WasPassed()) {
-    aActualServiceId = aOptionalServiceId.Value();
-    mService->GetItemByServiceId(aActualServiceId,
-                                 getter_AddRefs(provider));
-  } else {
-    mService->GetDefaultItem(getter_AddRefs(provider));
-    if (provider) {
-      NS_ENSURE_SUCCESS(provider->GetServiceId(&aActualServiceId), nullptr);
-    }
-  }
-
-  // For all retrieved providers, they should have service id
-  // < mStatuses.Length().
-  MOZ_ASSERT(!provider || aActualServiceId < mStatuses.Length());
-  return provider.forget();
-}
-
-already_AddRefed<VoicemailStatus>
-Voicemail::GetOrCreateStatus(uint32_t aServiceId,
-                             nsIVoicemailProvider* aProvider)
-{
-  MOZ_ASSERT(aServiceId < mStatuses.Length());
-  MOZ_ASSERT(aProvider);
-
-  RefPtr<VoicemailStatus> res = mStatuses[aServiceId];
-  if (!res) {
-    mStatuses[aServiceId] = res = new VoicemailStatus(GetOwner(), aProvider);
-  }
-
-  return res.forget();
-}
-
-// MozVoicemail WebIDL
-
-already_AddRefed<VoicemailStatus>
-Voicemail::GetStatus(const Optional<uint32_t>& aServiceId,
-                     ErrorResult& aRv)
-{
-  uint32_t actualServiceId = 0;
-  nsCOMPtr<nsIVoicemailProvider> provider =
-    GetItemByServiceId(aServiceId, actualServiceId);
-  if (!provider) {
-    aRv.Throw(NS_ERROR_UNEXPECTED);
-    return nullptr;
-  }
-
-  return GetOrCreateStatus(actualServiceId, provider);
-}
-
-void
-Voicemail::GetNumber(const Optional<uint32_t>& aServiceId,
-                     nsString& aNumber,
-                     ErrorResult& aRv) const
-{
-  aNumber.SetIsVoid(true);
-
-  uint32_t unused = 0;
-  nsCOMPtr<nsIVoicemailProvider> provider =
-    GetItemByServiceId(aServiceId, unused);
-  if (!provider) {
-    aRv.Throw(NS_ERROR_UNEXPECTED);
-    return;
-  }
-
-  aRv = provider->GetNumber(aNumber);
-}
-
-void
-Voicemail::GetDisplayName(const Optional<uint32_t>& aServiceId,
-                          nsString& aDisplayName,
-                          ErrorResult& aRv) const
-{
-  aDisplayName.SetIsVoid(true);
-
-  uint32_t unused = 0;
-  nsCOMPtr<nsIVoicemailProvider> provider =
-    GetItemByServiceId(aServiceId, unused);
-  if (!provider) {
-    aRv.Throw(NS_ERROR_UNEXPECTED);
-    return;
-  }
-
-  aRv = provider->GetDisplayName(aDisplayName);
-}
-
-// nsIVoicemailListener
-
-NS_IMETHODIMP
-Voicemail::NotifyInfoChanged(nsIVoicemailProvider* aProvider)
-{
-  // Ignored.
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-Voicemail::NotifyStatusChanged(nsIVoicemailProvider* aProvider)
-{
-  NS_ENSURE_ARG_POINTER(aProvider);
-
-  uint32_t serviceId = 0;
-  if (NS_FAILED(aProvider->GetServiceId(&serviceId))) {
-    return NS_ERROR_UNEXPECTED;
-  }
-
-  MozVoicemailEventInit init;
-  init.mBubbles = false;
-  init.mCancelable = false;
-  init.mStatus = GetOrCreateStatus(serviceId, aProvider);
-
-  RefPtr<MozVoicemailEvent> event =
-    MozVoicemailEvent::Constructor(this, NS_LITERAL_STRING("statuschanged"), init);
-  return DispatchTrustedEvent(event);
-}
-
-already_AddRefed<nsIVoicemailService>
-NS_CreateVoicemailService()
-{
-  nsCOMPtr<nsIVoicemailService> service;
-
-  if (XRE_IsContentProcess()) {
-    service = new mozilla::dom::voicemail::VoicemailIPCService();
-  } else {
-#if defined(MOZ_B2G_RIL)
-#if defined(MOZ_WIDGET_GONK)
-    service = do_GetService(GONK_VOICEMAIL_SERVICE_CONTRACTID);
-#endif // MOZ_WIDGET_GONK
-#endif // MOZ_B2G_RIL
-  }
-
-  return service.forget();
-}
deleted file mode 100644
--- a/dom/voicemail/Voicemail.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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_dom_voicemail_voicemail_h__
-#define mozilla_dom_voicemail_voicemail_h__
-
-#include "mozilla/Attributes.h"
-#include "mozilla/DOMEventTargetHelper.h"
-#include "mozilla/ErrorResult.h"
-#include "nsIVoicemailService.h"
-
-class JSObject;
-struct JSContext;
-
-class nsPIDOMWindowInner;
-
-namespace mozilla {
-namespace dom {
-
-class VoicemailStatus;
-
-class Voicemail final : public DOMEventTargetHelper,
-                        private nsIVoicemailListener
-{
-  /**
-   * Class Voicemail doesn't actually expose nsIVoicemailListener. Instead, it
-   * owns an nsIVoicemailListener derived instance mListener and passes it to
-   * nsIVoicemailService. The onreceived events are first delivered to
-   * mListener and then forwarded to its owner, Voicemail. See also bug 775997
-   * comment #51.
-   */
-  class Listener;
-
-public:
-  NS_DECL_ISUPPORTS_INHERITED
-  NS_DECL_NSIVOICEMAILLISTENER
-
-  NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(Voicemail,
-                                           DOMEventTargetHelper)
-
-  static already_AddRefed<Voicemail>
-  Create(nsPIDOMWindowInner* aOwner,
-         ErrorResult& aRv);
-
-  void
-  Shutdown();
-
-  nsPIDOMWindowInner*
-  GetParentObject() const
-  {
-    return GetOwner();
-  }
-
-  virtual JSObject*
-  WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
-
-  already_AddRefed<VoicemailStatus>
-  GetStatus(const Optional<uint32_t>& aServiceId,
-            ErrorResult& aRv);
-
-  void
-  GetNumber(const Optional<uint32_t>& aServiceId,
-            nsString& aNumber,
-            ErrorResult& aRv) const;
-
-  void
-  GetDisplayName(const Optional<uint32_t>& aServiceId,
-                 nsString& aDisplayName,
-                 ErrorResult& aRv) const;
-
-  IMPL_EVENT_HANDLER(statuschanged)
-
-private:
-  Voicemail(nsPIDOMWindowInner* aWindow,
-            nsIVoicemailService* aService);
-
-  // final suppresses -Werror,-Wdelete-non-virtual-dtor
-  ~Voicemail();
-
-private:
-  nsCOMPtr<nsIVoicemailService> mService;
-  RefPtr<Listener> mListener;
-
-  // |mStatuses| keeps all instantiated VoicemailStatus objects as well as the
-  // empty slots for not interested ones. The length of |mStatuses| is decided
-  // in the constructor and is never changed ever since.
-  AutoTArray<RefPtr<VoicemailStatus>, 1> mStatuses;
-
-  // Return a nsIVoicemailProvider instance based on the requests from external
-  // components. Return nullptr if aOptionalServiceId contains an invalid
-  // service id or the default one is just not available.
-  already_AddRefed<nsIVoicemailProvider>
-  GetItemByServiceId(const Optional<uint32_t>& aOptionalServiceId,
-                     uint32_t& aActualServiceId) const;
-
-  // Request for a valid VoicemailStatus object based on given service id and
-  // provider. It's the callee's responsibility to ensure the validity of the
-  // two parameters.
-  already_AddRefed<VoicemailStatus>
-  GetOrCreateStatus(uint32_t aServiceId,
-                    nsIVoicemailProvider* aProvider);
-};
-
-} // namespace dom
-} // namespace mozilla
-
-#endif // mozilla_dom_voicemail_voicemail_h__
deleted file mode 100644
--- a/dom/voicemail/VoicemailStatus.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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 "mozilla/dom/VoicemailStatus.h"
-
-#include "mozilla/dom/MozVoicemailStatusBinding.h"
-#include "nsIVoicemailService.h"
-#include "nsPIDOMWindow.h"
-
-namespace mozilla {
-namespace dom {
-
-// mProvider is owned by internal service.
-NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(VoicemailStatus, mParent)
-
-NS_IMPL_CYCLE_COLLECTING_ADDREF(VoicemailStatus)
-NS_IMPL_CYCLE_COLLECTING_RELEASE(VoicemailStatus)
-
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(VoicemailStatus)
-  NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
-  NS_INTERFACE_MAP_ENTRY(nsISupports)
-NS_INTERFACE_MAP_END
-
-VoicemailStatus::VoicemailStatus(nsISupports* aParent,
-                                 nsIVoicemailProvider* aProvider)
-  : mParent(aParent)
-  , mProvider(aProvider)
-{
-  MOZ_ASSERT(mParent);
-  MOZ_ASSERT(mProvider);
-}
-
-JSObject*
-VoicemailStatus::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
-{
-  return MozVoicemailStatusBinding::Wrap(aCx, this, aGivenProto);
-}
-
-uint32_t
-VoicemailStatus::ServiceId() const
-{
-  uint32_t result = 0;
-  mProvider->GetServiceId(&result);
-  return result;
-}
-
-bool
-VoicemailStatus::HasMessages() const
-{
-  bool result = false;
-  mProvider->GetHasMessages(&result);
-  return result;
-}
-
-int32_t
-VoicemailStatus::MessageCount() const
-{
-  int32_t result = 0;
-  mProvider->GetMessageCount(&result);
-  return result;
-}
-
-void
-VoicemailStatus::GetReturnNumber(nsString& aReturnNumber) const
-{
-  aReturnNumber.SetIsVoid(true);
-  mProvider->GetReturnNumber(aReturnNumber);
-}
-
-void
-VoicemailStatus::GetReturnMessage(nsString& aReturnMessage) const
-{
-  aReturnMessage.SetIsVoid(true);
-  mProvider->GetReturnMessage(aReturnMessage);
-}
-
-} // namespace dom
-} // namespace mozilla
deleted file mode 100644
--- a/dom/voicemail/VoicemailStatus.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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_dom_voicemail_VoicemailStatus_h__
-#define mozilla_dom_voicemail_VoicemailStatus_h__
-
-#include "mozilla/Attributes.h"
-#include "nsCOMPtr.h"
-#include "nsIVoicemailService.h" // For nsIVoicemailProvider.
-#include "nsString.h"
-#include "nsWrapperCache.h"
-
-namespace mozilla {
-namespace dom {
-
-class VoicemailStatus final : public nsISupports
-                            , public nsWrapperCache
-{
-public:
-  NS_DECL_CYCLE_COLLECTING_ISUPPORTS
-  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(VoicemailStatus)
-
-  VoicemailStatus(nsISupports* aParent,
-                  nsIVoicemailProvider* aProvider);
-
-  nsISupports*
-  GetParentObject() const { return mParent; }
-
-  virtual JSObject*
-  WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
-
-  // WebIDL interface
-
-  uint32_t
-  ServiceId() const;
-
-  bool
-  HasMessages() const;
-
-  int32_t
-  MessageCount() const;
-
-  void
-  GetReturnNumber(nsString& aReturnNumber) const;
-
-  void
-  GetReturnMessage(nsString& aReturnMessage) const;
-
-private:
-  // final suppresses -Werror,-Wdelete-non-virtual-dtor
-  ~VoicemailStatus() {}
-
-private:
-  nsCOMPtr<nsISupports> mParent;
-  nsCOMPtr<nsIVoicemailProvider> mProvider;
-};
-
-} // namespace dom
-} // namespace mozilla
-
-#endif // mozilla_dom_voicemail_VoicemailStatus_h__
deleted file mode 100644
--- a/dom/voicemail/gonk/VoicemailService.js
+++ /dev/null
@@ -1,260 +0,0 @@
-/* -*- indent-tabs-mode: nil; js-indent-level: 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/. */
-
-"use strict";
-
-const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource://gre/modules/Services.jsm");
-
-XPCOMUtils.defineLazyGetter(this, "RIL", function () {
-  let obj = {};
-  Cu.import("resource://gre/modules/ril_consts.js", obj);
-  return obj;
-});
-
-const GONK_VOICEMAIL_SERVICE_CONTRACTID =
-  "@mozilla.org/voicemail/gonkvoicemailservice;1";
-const GONK_VOICEMAIL_SERVICE_CID =
-  Components.ID("{c332f318-1cce-4f02-b676-bb5031d10736}");
-
-const NS_MOBILE_CONNECTION_SERVICE_CONTRACTID =
-  "@mozilla.org/mobileconnection/mobileconnectionservice;1";
-
-const NS_XPCOM_SHUTDOWN_OBSERVER_ID = "xpcom-shutdown";
-
-const NS_PREFBRANCH_PREFCHANGE_TOPIC_ID = "nsPref:changed";
-
-const kPrefRilDebuggingEnabled = "ril.debugging.enabled";
-const kPrefDefaultServiceId = "dom.voicemail.defaultServiceId";
-
-var DEBUG;
-function debug(s) {
-  dump("VoicemailService: " + s);
-}
-
-function VoicemailProvider(aServiceId) {
-  this.serviceId = aServiceId;
-}
-VoicemailProvider.prototype = {
-  QueryInterface: XPCOMUtils.generateQI([Ci.nsIVoicemailProvider]),
-
-  // nsIVoicemail interface
-
-  serviceId: 0,
-
-  number: null,
-  displayName: null,
-
-  hasMessages: false,
-  messageCount: 0,
-  returnNumber: null,
-  returnMessage: null,
-};
-
-function VoicemailService() {
-  // Initialize |this._providers|.
-  let mcService = Cc[NS_MOBILE_CONNECTION_SERVICE_CONTRACTID]
-                  .getService(Ci.nsIMobileConnectionService);
-  let numItems = mcService.numItems;
-  this._providers = [];
-  for (let i = 0; i < numItems; i++) {
-    this._providers.push(new VoicemailProvider(i));
-  }
-
-  this._listeners = [];
-
-  // Must be initialized after |this._providers|.
-  this._defaultServiceId = this._getDefaultServiceId();
-  this._updateDebugFlag();
-
-  Services.prefs.addObserver(kPrefRilDebuggingEnabled, this, false);
-  Services.prefs.addObserver(kPrefDefaultServiceId, this, false);
-
-  Services.obs.addObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID, false);
-}
-
-VoicemailService.prototype = {
-  classID: GONK_VOICEMAIL_SERVICE_CID,
-
-  classInfo: XPCOMUtils.generateCI({
-    classID: GONK_VOICEMAIL_SERVICE_CID,
-    contractID: GONK_VOICEMAIL_SERVICE_CONTRACTID,
-    classDescription: "VoicemailService",
-    interfaces: [
-      Ci.nsIVoicemailService,
-      Ci.nsIGonkVoicemailService
-    ],
-    flags: Ci.nsIClassInfo.SINGLETON
-  }),
-
-  QueryInterface: XPCOMUtils.generateQI([
-    Ci.nsIVoicemailService,
-    Ci.nsIGonkVoicemailService,
-    Ci.nsIObserver
-  ]),
-
-  _defaultServiceId: null,
-  _providers: null,
-
-  _updateDebugFlag: function() {
-    try {
-      DEBUG = RIL.DEBUG_RIL ||
-              Services.prefs.getBoolPref(kPrefRilDebuggingEnabled);
-    } catch (e) {}
-  },
-
-  _getDefaultServiceId: function() {
-    let id = Services.prefs.getIntPref(kPrefDefaultServiceId);
-    if (id >= this.numItems || id < 0) {
-      id = 0;
-    }
-
-    return id;
-  },
-
-  _listeners: null,
-
-  _notifyListeners: function(aMethodName, aItem) {
-    let listeners = this._listeners.slice();
-    for (let listener of listeners) {
-      try {
-        listener[aMethodName].call(listener, aItem);
-      } catch (e) {
-        if (DEBUG) {
-          debug("listener for " + aMethodName + " threw an exception: " + e);
-        }
-      }
-    }
-  },
-
-  /**
-   * nsIVoicemailService interface
-   */
-
-  get numItems() {
-    return this._providers.length;
-  },
-
-  getItemByServiceId: function(aServiceId) {
-    let provider = this._providers[aServiceId];
-    if (!provider) {
-      throw Cr.NS_ERROR_INVALID_ARG;
-    }
-    return provider;
-  },
-
-  getDefaultItem: function() {
-    return this.getItemByServiceId(this._defaultServiceId);
-  },
-
-  registerListener: function(aListener) {
-    if (this._listeners.indexOf(aListener) >= 0) {
-      throw Cr.NS_ERROR_UNEXPECTED;
-    }
-
-    this._listeners.push(aListener);
-  },
-
-  unregisterListener: function(aListener) {
-    let index = this._listeners.indexOf(aListener);
-    if (index < 0) {
-      return Cr.NS_ERROR_FAILURE;
-    }
-
-    this._listeners.splice(index, 1);
-  },
-
-  /**
-   * nsIGonkVoicemailService interface
-   */
-
-  notifyStatusChanged: function(aServiceId, aHasMessages, aMessageCount,
-                                aReturnNumber, aReturnMessage) {
-    if (DEBUG) {
-      debug("notifyStatusChanged: " +
-            JSON.stringify(Array.prototype.slice.call(arguments)));
-    }
-
-    let provider = this.getItemByServiceId(aServiceId);
-
-    let changed = false;
-    if (provider.hasMessages != aHasMessages) {
-      provider.hasMessages = aHasMessages;
-      changed = true;
-    }
-    if (provider.messageCount != aMessageCount) {
-      provider.messageCount = aMessageCount;
-      changed = true;
-    } else if (aMessageCount == -1) {
-      // For MWI using DCS the message count is not available
-      changed = true;
-    }
-    if (provider.returnNumber != aReturnNumber) {
-      provider.returnNumber = aReturnNumber;
-      changed = true;
-    }
-    if (provider.returnMessage != aReturnMessage) {
-      provider.returnMessage = aReturnMessage;
-      changed = true;
-    }
-
-    if (changed) {
-      this._notifyListeners("notifyStatusChanged", provider);
-    }
-  },
-
-  notifyInfoChanged: function(aServiceId, aNumber, aDisplayName) {
-    if (DEBUG) {
-      debug("notifyInfoChanged: " +
-            JSON.stringify(Array.prototype.slice.call(arguments)));
-    }
-
-    let provider = this.getItemByServiceId(aServiceId);
-
-    let changed = false;
-    if (provider.number != aNumber) {
-      provider.number = aNumber;
-      changed = true;
-    }
-    if (provider.displayName != aDisplayName) {
-      provider.displayName = aDisplayName;
-      changed = true;
-    }
-
-    if (changed) {
-      this._notifyListeners("notifyInfoChanged", provider);
-    }
-  },
-
-  /**
-   * nsIObserver interface.
-   */
-
-  observe: function(aSubject, aTopic, aData) {
-    switch (aTopic) {
-      case NS_PREFBRANCH_PREFCHANGE_TOPIC_ID:
-        if (aData === kPrefRilDebuggingEnabled) {
-          this._updateDebugFlag();
-        } else if (aData === kPrefDefaultServiceId) {
-          this._defaultServiceId = this._getDefaultServiceId();
-        }
-        break;
-
-      case NS_XPCOM_SHUTDOWN_OBSERVER_ID:
-        Services.prefs.removeObserver(kPrefRilDebuggingEnabled, this);
-        Services.prefs.removeObserver(kPrefDefaultServiceId, this);
-
-        Services.obs.removeObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID);
-
-        // Remove all listeners.
-        this._listeners = [];
-        break;
-    }
-  }
-};
-
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory([VoicemailService]);
deleted file mode 100644
--- a/dom/voicemail/gonk/VoicemailService.manifest
+++ /dev/null
@@ -1,7 +0,0 @@
-# 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/.
-
-component {c332f318-1cce-4f02-b676-bb5031d10736} VoicemailService.js
-contract @mozilla.org/voicemail/gonkvoicemailservice;1 {c332f318-1cce-4f02-b676-bb5031d10736}
-
deleted file mode 100644
--- a/dom/voicemail/gonk/nsIGonkVoicemailService.idl
+++ /dev/null
@@ -1,30 +0,0 @@
-/* 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 "nsIVoicemailService.idl"
-
-%{C++
-#define GONK_VOICEMAIL_SERVICE_CONTRACTID \
-  "@mozilla.org/voicemail/gonkvoicemailservice;1"
-%}
-
-[scriptable, uuid(d21dbc55-f540-417d-aa3e-9e890764e957)]
-interface nsIGonkVoicemailService : nsIVoicemailService
-{
-  /**
-   * Called when a voicemail notification has been received by the network.
-   */
-  void notifyStatusChanged(in unsigned long serviceId,
-                           in bool hasMessages,
-                           in long messageCount,
-                           in DOMString returnNumber,
-                           in DOMString returnMessage);
-
-  /**
-   * Called when other voicemail attributes changed.
-   */
-  void notifyInfoChanged(in unsigned long serviceId,
-                         in DOMString number,
-                         in DOMString displayName);
-};
deleted file mode 100644
--- a/dom/voicemail/ipc/PVoicemail.ipdl
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set sw=2 ts=8 et ft=cpp : */
-/* 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 protocol PContent;
-
-namespace mozilla {
-namespace dom {
-namespace voicemail {
-
-sync protocol PVoicemail
-{
-  manager PContent;
-
-child:
-  async NotifyInfoChanged(uint32_t aServiceId,
-                          nsString aNumber,
-                          nsString aDisplayName);
-
-  async NotifyStatusChanged(uint32_t aServiceId,
-                            bool aHasMessages,
-                            int32_t aMessageCount,
-                            nsString aNumber,
-                            nsString aDisplayName);
-
-parent:
-  /**
-   * Send when child no longer needs to use PVoicemail.
-   */
-  async __delete__();
-
-  sync GetAttributes(uint32_t aServiceId)
-    returns (nsString aNumber,
-             nsString aDisplayName,
-             bool aHasMessages,
-             int32_t aMessageCount,
-             nsString aReturnNumber,
-             nsString aReturnMessage);
-};
-
-} // namespace voicemail
-} // namespace dom
-} // namespace mozilla
deleted file mode 100644
--- a/dom/voicemail/ipc/VoicemailIPCService.cpp
+++ /dev/null
@@ -1,261 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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 "mozilla/dom/voicemail/VoicemailIPCService.h"
-
-#include "mozilla/dom/ContentChild.h"
-#include "mozilla/Preferences.h"
-#include "nsIMobileConnectionService.h"
-#include "nsServiceManagerUtils.h"
-
-namespace mozilla {
-namespace dom {
-namespace voicemail {
-
-class VoicemailIPCProvider final : public nsIVoicemailProvider
-{
-  friend class VoicemailIPCService;
-
-public:
-  NS_DECL_ISUPPORTS
-  NS_DECL_NSIVOICEMAILPROVIDER
-
-  explicit VoicemailIPCProvider(uint32_t aServiceId);
-
-private:
-  // final suppresses -Werror,-Wdelete-non-virtual-dtor
-  ~VoicemailIPCProvider() {}
-
-private:
-  uint32_t mServiceId;
-  nsString mNumber;
-  nsString mDisplayName;
-  bool mHasMessages;
-  int32_t mMessageCount;
-  nsString mReturnNumber;
-  nsString mReturnMessage;
-};
-
-NS_IMPL_ISUPPORTS(VoicemailIPCProvider, nsIVoicemailProvider)
-
-VoicemailIPCProvider::VoicemailIPCProvider(uint32_t aServiceId)
-  : mServiceId(aServiceId)
-  , mHasMessages(false)
-  , mMessageCount(0)
-{
-}
-
-// nsIVoicemailProvider
-
-NS_IMETHODIMP
-VoicemailIPCProvider::GetServiceId(uint32_t* aServiceId)
-{
-  NS_ENSURE_ARG_POINTER(aServiceId);
-
-  *aServiceId = mServiceId;
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-VoicemailIPCProvider::GetNumber(nsAString& aNumber)
-{
-  aNumber = mNumber;
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-VoicemailIPCProvider::GetDisplayName(nsAString& aDisplayName)
-{
-  aDisplayName = mDisplayName;
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-VoicemailIPCProvider::GetHasMessages(bool* aHasMessages)
-{
-  NS_ENSURE_ARG_POINTER(aHasMessages);
-
-  *aHasMessages = mHasMessages;
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-VoicemailIPCProvider::GetMessageCount(int32_t* aMessageCount)
-{
-  NS_ENSURE_ARG_POINTER(aMessageCount);
-
-  *aMessageCount = mMessageCount;
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-VoicemailIPCProvider::GetReturnNumber(nsAString& aReturnNumber)
-{
-  aReturnNumber = mReturnNumber;
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-VoicemailIPCProvider::GetReturnMessage(nsAString& aReturnMessage)
-{
-  aReturnMessage = mReturnMessage;
-  return NS_OK;
-}
-
-NS_IMPL_ISUPPORTS(VoicemailIPCService, nsIVoicemailService)
-
-VoicemailIPCService::VoicemailIPCService()
-  : mActorDestroyed(false)
-{
-  ContentChild::GetSingleton()->SendPVoicemailConstructor(this);
-
-  nsCOMPtr<nsIMobileConnectionService> mcService =
-    do_GetService(NS_MOBILE_CONNECTION_SERVICE_CONTRACTID);
-  if (mcService) {
-    uint32_t length = 0;
-    if (NS_SUCCEEDED(mcService->GetNumItems(&length))) {
-      mProviders.SetLength(length);
-    }
-  }
-}
-
-VoicemailIPCService::~VoicemailIPCService()
-{
-  if (!mActorDestroyed) {
-    Send__delete__(this);
-  }
-}
-
-// PVoicemailChild
-
-bool
-VoicemailIPCService::RecvNotifyInfoChanged(const uint32_t& aServiceId,
-                                           const nsString& aNumber,
-                                           const nsString& aDisplayName)
-{
-  nsCOMPtr<nsIVoicemailProvider> provider;
-  NS_ENSURE_SUCCESS(GetItemByServiceId(aServiceId, getter_AddRefs(provider)), false);
-
-  VoicemailIPCProvider* pProvider =
-    static_cast<VoicemailIPCProvider*>(provider.get());
-  pProvider->mNumber = aNumber;
-  pProvider->mDisplayName = aDisplayName;
-
-  // Listeners may unregister itself upon a info changed event, so we make a
-  // copy first.
-  nsTArray<nsCOMPtr<nsIVoicemailListener>> copy(mListeners);
-  for (uint32_t i = 0; i < copy.Length(); i++) {
-    copy[i]->NotifyInfoChanged(provider);
-  }
-
-  return true;
-}
-
-bool
-VoicemailIPCService::RecvNotifyStatusChanged(const uint32_t& aServiceId,
-                                             const bool& aHasMessages,
-                                             const int32_t& aMessageCount,
-                                             const nsString& aReturnNumber,
-                                             const nsString& aReturnMessage)
-{
-  nsCOMPtr<nsIVoicemailProvider> provider;
-  NS_ENSURE_SUCCESS(GetItemByServiceId(aServiceId, getter_AddRefs(provider)), false);
-
-  VoicemailIPCProvider* pProvider =
-    static_cast<VoicemailIPCProvider*>(provider.get());
-  pProvider->mHasMessages = aHasMessages;
-  pProvider->mMessageCount = aMessageCount;
-  pProvider->mReturnNumber = aReturnNumber;
-  pProvider->mReturnMessage = aReturnMessage;
-
-  // Listeners may unregister itself upon a info changed event, so we make a
-  // copy first.
-  nsTArray<nsCOMPtr<nsIVoicemailListener>> copy(mListeners);
-  for (uint32_t i = 0; i < copy.Length(); i++) {
-    copy[i]->NotifyStatusChanged(provider);
-  }
-
-  return true;
-}
-
-void
-VoicemailIPCService::ActorDestroy(ActorDestroyReason aWhy)
-{
-  mActorDestroyed = true;
-}
-
-// nsIVoicemailService
-
-NS_IMETHODIMP
-VoicemailIPCService::GetNumItems(uint32_t* aNumItems)
-{
-  NS_ENSURE_ARG_POINTER(aNumItems);
-
-  *aNumItems = mProviders.Length();
-
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-VoicemailIPCService::GetItemByServiceId(uint32_t aServiceId,
-                                        nsIVoicemailProvider** aProvider)
-{
-  NS_ENSURE_ARG(aServiceId < mProviders.Length());
-  NS_ENSURE_ARG_POINTER(aProvider);
-
-  if (!mProviders[aServiceId]) {
-    RefPtr<VoicemailIPCProvider> provider =
-      new VoicemailIPCProvider(aServiceId);
-    if (!SendGetAttributes(aServiceId,
-                           &(provider->mNumber),
-                           &(provider->mDisplayName),
-                           &(provider->mHasMessages),
-                           &(provider->mMessageCount),
-                           &(provider->mReturnNumber),
-                           &(provider->mReturnMessage))) {
-      return NS_ERROR_FAILURE;
-    }
-
-    mProviders[aServiceId] = provider;
-  }
-
-  RefPtr<nsIVoicemailProvider> provider(mProviders[aServiceId]);
-  provider.forget(aProvider);
-
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-VoicemailIPCService::GetDefaultItem(nsIVoicemailProvider** aProvider)
-{
-  NS_ENSURE_ARG_POINTER(aProvider);
-
-  int defaultServiceId =
-    Preferences::GetInt("dom.voicemail.defaultServiceId", 0);
-  return GetItemByServiceId(defaultServiceId, aProvider);
-}
-
-NS_IMETHODIMP
-VoicemailIPCService::RegisterListener(nsIVoicemailListener* aListener)
-{
-  NS_ENSURE_TRUE(!mActorDestroyed, NS_ERROR_UNEXPECTED);
-  NS_ENSURE_TRUE(!mListeners.Contains(aListener), NS_ERROR_UNEXPECTED);
-
-  mListeners.AppendElement(aListener);
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-VoicemailIPCService::UnregisterListener(nsIVoicemailListener* aListener)
-{
-  NS_ENSURE_TRUE(!mActorDestroyed, NS_ERROR_UNEXPECTED);
-
-  return mListeners.RemoveElement(aListener) ? NS_OK : NS_ERROR_UNEXPECTED;
-}
-
-} // namespace voicemail
-} // namespace dom
-} // namespace mozilla
deleted file mode 100644
--- a/dom/voicemail/ipc/VoicemailIPCService.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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_dom_voicemail_VoicemailIPCService_h
-#define mozilla_dom_voicemail_VoicemailIPCService_h
-
-#include "mozilla/Attributes.h"
-#include "mozilla/dom/voicemail/PVoicemailChild.h"
-#include "nsIVoicemailService.h"
-
-namespace mozilla {
-namespace dom {
-namespace voicemail {
-
-class VoicemailIPCService final : public PVoicemailChild
-                                , public nsIVoicemailService
-{
-public:
-  NS_DECL_ISUPPORTS
-  NS_DECL_NSIVOICEMAILSERVICE
-
-  VoicemailIPCService();
-
-  bool
-  RecvNotifyInfoChanged(const uint32_t& aServiceId,
-                        const nsString& aNumber,
-                        const nsString& aDisplayName) override;
-
-  bool
-  RecvNotifyStatusChanged(const uint32_t& aServiceId,
-                          const bool& aHasMessages,
-                          const int32_t& aMessageCount,
-                          const nsString& aNumber,
-                          const nsString& aDisplayName) override;
-
-  void
-  ActorDestroy(ActorDestroyReason aWhy) override;
-
-private:
-  // final suppresses -Werror,-Wdelete-non-virtual-dtor
-  ~VoicemailIPCService();
-
-private:
-  bool mActorDestroyed;
-  nsTArray<nsCOMPtr<nsIVoicemailListener>> mListeners;
-  nsTArray<nsCOMPtr<nsIVoicemailProvider>> mProviders;
-};
-
-} // namespace voicemail
-} // namespace dom
-} // namespace mozilla
-
-#endif // mozilla_dom_voicemail_VoicemailIPCService_h
deleted file mode 100644
--- a/dom/voicemail/ipc/VoicemailParent.cpp
+++ /dev/null
@@ -1,92 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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 "mozilla/dom/voicemail/VoicemailParent.h"
-
-#include "nsServiceManagerUtils.h"
-
-namespace mozilla {
-namespace dom {
-namespace voicemail {
-
-NS_IMPL_ISUPPORTS(VoicemailParent,
-                  nsIVoicemailListener)
-
-bool
-VoicemailParent::Init()
-{
-  mService = do_GetService(NS_VOICEMAIL_SERVICE_CONTRACTID);
-  return mService && NS_SUCCEEDED(mService->RegisterListener(this));
-}
-
-bool
-VoicemailParent::RecvGetAttributes(const uint32_t& aServiceId,
-                                   nsString* aNumber,
-                                   nsString* aDisplayName,
-                                   bool* aHasMessages,
-                                   int32_t* aMessageCount,
-                                   nsString* aReturnNumber,
-                                   nsString* aReturnMessage)
-{
-  nsCOMPtr<nsIVoicemailProvider> provider;
-  NS_ENSURE_SUCCESS(mService->GetItemByServiceId(aServiceId,
-                                                 getter_AddRefs(provider)), false);
-
-  provider->GetNumber(*aNumber);
-  provider->GetDisplayName(*aDisplayName);
-  provider->GetHasMessages(aHasMessages);
-  provider->GetMessageCount(aMessageCount);
-  provider->GetReturnNumber(*aReturnNumber);
-  provider->GetReturnMessage(*aReturnMessage);
-
-  return true;
-}
-
-void
-VoicemailParent::ActorDestroy(ActorDestroyReason aWhy)
-{
-  mService->UnregisterListener(this);
-  mService = nullptr;
-}
-
-// nsIVoicemailListener
-
-NS_IMETHODIMP
-VoicemailParent::NotifyInfoChanged(nsIVoicemailProvider* aProvider)
-{
-  uint32_t serviceId = 0;
-  nsString number, displayName;
-
-  aProvider->GetServiceId(&serviceId);
-  aProvider->GetNumber(number);
-  aProvider->GetDisplayName(displayName);
-
-  return SendNotifyInfoChanged(serviceId, number, displayName)
-    ? NS_OK : NS_ERROR_FAILURE;
-}
-
-NS_IMETHODIMP
-VoicemailParent::NotifyStatusChanged(nsIVoicemailProvider* aProvider)
-{
-  uint32_t serviceId = 0;
-  bool hasMessages = false;
-  int32_t messageCount = 0;
-  nsString returnNumber, returnMessage;
-
-  aProvider->GetServiceId(&serviceId);
-  aProvider->GetHasMessages(&hasMessages);
-  aProvider->GetMessageCount(&messageCount);
-  aProvider->GetReturnNumber(returnNumber);
-  aProvider->GetReturnMessage(returnMessage);
-
-  return SendNotifyStatusChanged(serviceId, hasMessages, messageCount,
-                                 returnNumber, returnMessage)
-    ? NS_OK : NS_ERROR_FAILURE;
-}
-
-} // namespace voicemail
-} // namespace dom
-} // namespace mozilla
deleted file mode 100644
--- a/dom/voicemail/ipc/VoicemailParent.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* 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_dom_voicemail_VoicemailParent_h
-#define mozilla_dom_voicemail_VoicemailParent_h
-
-#include "mozilla/Attributes.h"
-#include "mozilla/dom/voicemail/PVoicemailParent.h"
-#include "mozilla/dom/voicemail/VoicemailParent.h"
-#include "nsIVoicemailService.h"
-#include "nsString.h"
-
-namespace mozilla {
-namespace dom {
-namespace voicemail {
-
-class VoicemailParent final : public PVoicemailParent
-                            , public nsIVoicemailListener
-{
-public:
-  NS_DECL_ISUPPORTS
-  NS_DECL_NSIVOICEMAILLISTENER
-
-  VoicemailParent() { MOZ_COUNT_CTOR(VoicemailParent); }
-
-  bool
-  Init();
-
-  bool
-  RecvGetAttributes(const uint32_t& aServiceId,
-                    nsString* aNumber,
-                    nsString* aDisplayName,
-                    bool* aHasMessages,
-                    int32_t* aMessageCount,
-                    nsString* aReturnNumber,
-                    nsString* aReturnMessage) override;
-
-  void
-  ActorDestroy(ActorDestroyReason aWhy) override;
-
-private:
-  // final suppresses -Werror,-Wdelete-non-virtual-dtor
-  ~VoicemailParent() { MOZ_COUNT_DTOR(VoicemailParent); }
-
-private:
-  nsCOMPtr<nsIVoicemailService> mService;
-};
-
-} // namespace voicemail
-} // namespace dom
-} // namespace mozilla
-
-#endif // mozilla_dom_voicemail_VoicemailParent_h
deleted file mode 100644
--- a/dom/voicemail/moz.build
+++ /dev/null
@@ -1,53 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# 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/.
-
-XPIDL_SOURCES += [
-    'nsIVoicemailService.idl',
-]
-
-XPIDL_MODULE = 'dom_voicemail'
-
-EXPORTS.mozilla.dom += [
-    'Voicemail.h',
-    'VoicemailStatus.h',
-]
-
-EXPORTS.mozilla.dom.voicemail += [
-    'ipc/VoicemailIPCService.h',
-    'ipc/VoicemailParent.h',
-]
-
-IPDL_SOURCES += [
-    'ipc/PVoicemail.ipdl',
-]
-
-SOURCES += [
-    'ipc/VoicemailIPCService.cpp',
-    'ipc/VoicemailParent.cpp',
-    'Voicemail.cpp',
-]
-
-UNIFIED_SOURCES += [
-    'VoicemailStatus.cpp',
-]
-
-if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk' and CONFIG['MOZ_B2G_RIL']:
-    XPIDL_SOURCES += [
-        'gonk/nsIGonkVoicemailService.idl',
-    ]
-    if not CONFIG['DISABLE_MOZ_RIL_GEOLOC']:
-        EXTRA_COMPONENTS += [
-            'gonk/VoicemailService.js',
-            'gonk/VoicemailService.manifest',
-        ]
-
-LOCAL_INCLUDES += [
-    '../base',
-]
-
-include('/ipc/chromium/chromium-config.mozbuild')
-
-FINAL_LIBRARY = 'xul'
deleted file mode 100644
--- a/dom/voicemail/nsIVoicemailService.idl
+++ /dev/null
@@ -1,137 +0,0 @@
-/* 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"
-
-interface nsIVoicemailProvider;
-
-[scriptable, uuid(6a8b0133-960d-409d-88cd-583239e45f9f)]
-interface nsIVoicemailListener : nsISupports
-{
-  /**
-   * Called when a voicemail status (hasMessages, messageCount, returnNumber,
-   * returnMessage) changed.
-   */
-  void notifyStatusChanged(in nsIVoicemailProvider provider);
-
-  /**
-   * Called when a voicemail info (number, displayName) changed.
-   */
-  void notifyInfoChanged(in nsIVoicemailProvider provider);
-};
-
-%{C++
-#define NS_VOICEMAIL_SERVICE_CID \
-  { 0xcdd8fd72, 0x7d55, 0x496b, \
-    { 0xab, 0x1d, 0x74, 0x9f, 0xbc, 0x44, 0x56, 0x32 } }
-#define NS_VOICEMAIL_SERVICE_CONTRACTID \
-  "@mozilla.org/voicemail/voicemailservice;1"
-%}
-
-/**
- * XPCOM component (in the content process) that provides the voicemail
- * information.
- */
-[scriptable, uuid(8ffd16c7-a614-4c4a-81f0-2a95e807152d)]
-interface nsIVoicemailService : nsISupports
-{
-  readonly attribute unsigned long numItems;
-
-  nsIVoicemailProvider getItemByServiceId(in unsigned long serviceId);
-
-  nsIVoicemailProvider getDefaultItem();
-
-  /**
-   * Called when any one who is interested in receiving unsolicited messages.
-   */
-  void registerListener(in nsIVoicemailListener listener);
-  void unregisterListener(in nsIVoicemailListener listener);
-};
-
-%{C++
-template<typename T> struct already_AddRefed;
-
-already_AddRefed<nsIVoicemailService>
-NS_CreateVoicemailService();
-%}
-
-[scriptable, uuid(a0bc19a2-3216-4f3f-89d3-8976a48cb829)]
-interface nsIVoicemailProvider : nsISupports
-{
-  readonly attribute unsigned long serviceId;
-
-  /**
-   * Voicemail center number. When changed, |notifyInfoChanged| of registered
-   * nsIVoicemailListener instances are called.
-   *
-   * Default: null
-   *
-   * @see 3GPP TS 31.102 subclause 4.2.63 "EFmwis (Message Waiting Indication Status)"
-   * @see 3GPP TS 51.011 subclause 10.3.45 "EFmwis (Message Waiting Indication Status)"
-   */
-  readonly attribute DOMString number;
-
-  /**
-   * Voicemail center display name. When changed, |notifyInfoChanged| of
-   * registered nsIVoicemailListener instances are called.
-   *
-   * Default: null
-   *
-   * @see 3GPP TS 31.102 subclause 4.2.63 "EFmwis (Message Waiting Indication Status)"
-   * @see 3GPP TS 51.011 subclause 10.3.45 "EFmwis (Message Waiting Indication Status)"
-   */
-  readonly attribute DOMString displayName;
-
-  /**
-   * Whether or not there are messages waiting in the voicemail box. When
-   * changed, |notifyStatusChanged| of registered nsIVoicemailListener instances
-   * are called.
-   *
-   * Default: false
-   *
-   * @see 3GPP TS 23.038 chapter 4 "SMS Data Coding Scheme"
-   * @see 3GPP TS 23.040 subclause 9.2.3.24.2 "Special SMS Message Indication"
-   */
-  readonly attribute boolean hasMessages;
-
-  /**
-   * When #hasMessages is true, #messageCount should be a positive number for
-   * the messages waiting, or -1 if the exact number is not available. When
-   * changed, |notifyStatusChanged| of registered nsIVoicemailListener instances
-   * are called.
-   *
-   * Default: 0
-   *
-   * @see 3GPP TS 23.040 subclause 9.2.3.24.2 "Special SMS Message Indication"
-   */
-  readonly attribute long messageCount;
-
-  /**
-   * A Return Call Message indicates to the MS to inform the user that a call
-   * (e.g. a telephone call) can be established to the address specified within
-   * the #returnNumber. The #returnMessage (if present) gives displayable
-   * information (e.g. the number of waiting voice messages).
-   *
-   * When #hasMessages is true this may contain a non-null string as the phone
-   * number of a Return Call Message. When changed, |notifyStatusChanged| of
-   * registered nsIVoicemailListener instances are called.
-   *
-   * Default: null
-   *
-   * @see 3GPP TS 23.040 subclause 9.2.3.9 "TPProtocolIdentifier (TPPID)"
-   */
-  readonly attribute DOMString returnNumber;
-
-  /**
-   * When #hasMessages is true this may contain a non-null string as the
-   * notification message of a Return Call Message. When changed,
-   * |notifyStatusChanged| of registered nsIVoicemailListener instances are
-   * called.
-   *
-   * Default: null
-   *
-   * @see 3GPP TS 23.040 subclause 9.2.3.9 "TPProtocolIdentifier (TPPID)"
-   */
-  readonly attribute DOMString returnMessage;
-};
deleted file mode 100644
--- a/dom/voicemail/test/marionette/head.js
+++ /dev/null
@@ -1,425 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-const {Cc: Cc, Ci: Ci, Cr: Cr, Cu: Cu} = SpecialPowers;
-
-var RIL = SpecialPowers.wrap(SpecialPowers.createBlankObject());
-SpecialPowers.Cu.import("resource://gre/modules/ril_consts.js", RIL);
-
-// Emulate Promise.jsm semantics.
-Promise.defer = function() { return new Deferred(); }
-function Deferred()  {
-  this.promise = new Promise(function(resolve, reject) {
-    this.resolve = resolve;
-    this.reject = reject;
-  }.bind(this));
-  Object.freeze(this);
-}
-
-const MWI_PDU_PREFIX = "0000";
-const MWI_PDU_UDH_PREFIX = "0040";
-const MWI_PID_DEFAULT = "00";
-const MWI_DCS_DISCARD_INACTIVE = "C0";
-const MWI_DCS_DISCARD_ACTIVE = "C8";
-const MWI_TIMESTAMP = "00000000000000";
-
-// Only bring in what we need from ril_worker/RadioInterfaceLayer here. Reusing
-// that code turns out to be a nightmare, so there is some code duplication.
-var PDUBuilder = {
-  toHexString: function(n, length) {
-    let str = n.toString(16);
-    if (str.length < length) {
-      for (let i = 0; i < length - str.length; i++) {
-        str = "0" + str;
-      }
-    }
-    return str.toUpperCase();
-  },
-
-  writeUint16: function(value) {
-    this.buf += (value & 0xff).toString(16).toUpperCase();
-    this.buf += ((value >> 8) & 0xff).toString(16).toUpperCase();
-  },
-
-  writeHexOctet: function(octet) {
-    this.buf += this.toHexString(octet, 2);
-  },
-
-  writeSwappedNibbleBCD: function(data) {
-    data = data.toString();
-    let zeroCharCode = '0'.charCodeAt(0);
-
-    for (let i = 0; i < data.length; i += 2) {
-      let low = data.charCodeAt(i) - zeroCharCode;
-      let high;
-      if (i + 1 < data.length) {
-        high = data.charCodeAt(i + 1) - zeroCharCode;
-      } else {
-        high = 0xF;
-      }
-
-      this.writeHexOctet((high << 4) | low);
-    }
-  },
-
-  writeStringAsSeptets: function(message, paddingBits, langIndex,
-                                 langShiftIndex) {
-    const langTable = RIL.PDU_NL_LOCKING_SHIFT_TABLES[langIndex];
-    const langShiftTable = RIL.PDU_NL_SINGLE_SHIFT_TABLES[langShiftIndex];
-
-    let dataBits = paddingBits;
-    let data = 0;
-    for (let i = 0; i < message.length; i++) {
-      let septet = langTable.indexOf(message[i]);
-      if (septet == RIL.PDU_NL_EXTENDED_ESCAPE) {
-        continue;
-      }
-
-      if (septet >= 0) {
-        data |= septet << dataBits;
-        dataBits += 7;
-      } else {
-        septet = langShiftTable.indexOf(message[i]);
-        if (septet == -1) {
-          throw new Error(message[i] + " not in 7 bit alphabet "
-                          + langIndex + ":" + langShiftIndex + "!");
-        }
-
-        if (septet == RIL.PDU_NL_RESERVED_CONTROL) {
-          continue;
-        }
-
-        data |= RIL.PDU_NL_EXTENDED_ESCAPE << dataBits;
-        dataBits += 7;
-        data |= septet << dataBits;
-        dataBits += 7;
-      }
-
-      for (; dataBits >= 8; dataBits -= 8) {
-        this.writeHexOctet(data & 0xFF);
-        data >>>= 8;
-      }
-    }
-
-    if (dataBits != 0) {
-      this.writeHexOctet(data & 0xFF);
-    }
-  },
-
-  buildAddress: function(address) {
-    let addressFormat = RIL.PDU_TOA_ISDN; // 81
-    if (address[0] == '+') {
-      addressFormat = RIL.PDU_TOA_INTERNATIONAL | RIL.PDU_TOA_ISDN; // 91
-      address = address.substring(1);
-    }
-
-    this.buf = "";
-    this.writeHexOctet(address.length);
-    this.writeHexOctet(addressFormat);
-    this.writeSwappedNibbleBCD(address);
-
-    return this.buf;
-  },
-
-  // assumes 7 bit encoding
-  buildUserData: function(options) {
-    let headerLength = 0;
-    this.buf = "";
-    if (options.headers) {
-      for (let header of options.headers) {
-        headerLength += 2; // id + length octets
-        if (header.octets) {
-          headerLength += header.octets.length;
-        }
-      };
-    }
-
-    let encodedBodyLength = (options.body) ? options.body.length : 0;
-    let headerOctets = (headerLength ? headerLength + 1 : 0);
-
-    let paddingBits;
-    let userDataLengthInSeptets;
-    let headerSeptets = Math.ceil(headerOctets * 8 / 7);
-    userDataLengthInSeptets = headerSeptets + encodedBodyLength;
-    paddingBits = headerSeptets * 7 - headerOctets * 8;
-
-    this.writeHexOctet(userDataLengthInSeptets);
-    if (options.headers) {
-      this.writeHexOctet(headerLength);
-
-      for (let header of options.headers) {
-        this.writeHexOctet(header.id);
-        this.writeHexOctet(header.length);
-
-        if (header.octets) {
-          for (let octet of header.octets) {
-            this.writeHexOctet(octet);
-          }
-        }
-      }
-    }
-
-    if (encodedBodyLength > 0) {
-      this.writeStringAsSeptets(options.body, paddingBits,
-                                RIL.PDU_NL_IDENTIFIER_DEFAULT,
-                                RIL.PDU_NL_IDENTIFIER_DEFAULT);
-    }
-    return this.buf;
-  },
-
-  buildLevel2DiscardMwi: function(aActive, aSender, aBody) {
-    return MWI_PDU_PREFIX +
-           this.buildAddress(aSender) +
-           MWI_PID_DEFAULT +
-           (aActive ? MWI_DCS_DISCARD_ACTIVE : MWI_DCS_DISCARD_INACTIVE) +
-           MWI_TIMESTAMP +
-           this.buildUserData({ body: aBody });
-  },
-
-  buildLevel3DiscardMwi: function(aMessageCount, aSender, aBody) {
-    let options = {
-      headers: [{
-        id: RIL.PDU_IEI_SPECIAL_SMS_MESSAGE_INDICATION,
-        length: 2,
-          octets: [
-          RIL.PDU_MWI_STORE_TYPE_DISCARD,
-          aMessageCount || 0
-        ]
-      }],
-      body: aBody
-    };
-
-    return MWI_PDU_UDH_PREFIX +
-           this.buildAddress(aSender) +
-           MWI_PID_DEFAULT +
-           MWI_DCS_DISCARD_ACTIVE +
-           MWI_TIMESTAMP +
-           this.buildUserData(options);
-  }
-};
-
-var pendingEmulatorCmdCount = 0;
-
-/**
- * Send emulator command with safe guard.
- *
- * We should only call |finish()| after all emulator command transactions
- * end, so here comes with the pending counter.  Resolve when the emulator
- * gives positive response, and reject otherwise.
- *
- * Fulfill params:
- *   result -- an array of emulator response lines.
- *
- * Reject params:
- *   result -- an array of emulator response lines.
- *
- * @return A deferred promise.
- */
-function runEmulatorCmdSafe(aCommand) {
-  let deferred = Promise.defer();
-
-  ++pendingEmulatorCmdCount;
-  runEmulatorCmd(aCommand, function(aResult) {
-    --pendingEmulatorCmdCount;
-
-    ok(true, "Emulator response: " + JSON.stringify(aResult));
-    if (Array.isArray(aResult) && aResult[0] === "OK") {
-      deferred.resolve(aResult);
-    } else {
-      deferred.reject(aResult);
-    }
-  });
-
-  return deferred.promise;
-}
-
-/**
- * Promise wrapper for |SpecialPowers.pushPermissions|.
- *
- * Fulfill params: a MozVoicemail object.
- * Reject params: (none)
- *
- * @param aPermissions
- *        A permission operation description array. See
- *        |SpecialPowers.pushPermissions| for more details.
- *
- * @return A deferred promise.
- */
-function pushPermissions(aPermissions) {
-  let deferred = Promise.defer();
-
-  SpecialPowers.pushPermissions(aPermissions, function() {
-    ok(true, "permissions pushed: " + JSON.stringify(aPermissions));
-    deferred.resolve();
-  });
-
-  return deferred.promise;
-}
-
-var voicemail;
-
-/**
- * Add required permissions and test if |navigator.mozVoicemail| exists.
- *
- * Fulfill params: a MozVoicemail object.
- * Reject params: (none)
- *
- * @return A deferred promise.
- */
-function ensureVoicemail() {
-  let permissions = [{
-    "type": "voicemail",
-    "allow": 1,
-    "context": document,
-  }];
-
-  return pushPermissions(permissions)
-    .then(function() {
-      voicemail = window.navigator.mozVoicemail;
-      if (voicemail == null) {
-        throw "navigator.mozVoicemail is undefined.";
-      }
-
-      if (!(voicemail instanceof MozVoicemail)) {
-        throw "navigator.mozVoicemail is instance of " + voicemail.constructor;
-      }
-
-      return voicemail;
-    });
-}
-
-/**
- * Wait for one named voicemail event.
- *
- * Resolve if that named event occurs.  Never reject.
- *
- * Fulfill params: the DOMEvent passed.
- *
- * @param aEventName
- *        A string event name.
- * @param aMatchFunc [optional]
- *        An additional callback function to match the interested event
- *        before removing the listener and going to resolve the promise.
- *
- * @return A deferred promise.
- */
-function waitForManagerEvent(aEventName, aMatchFunc) {
-  let deferred = Promise.defer();
-
-  voicemail.addEventListener(aEventName, function onevent(aEvent) {
-    if (aMatchFunc && !aMatchFunc(aEvent)) {
-      ok(true, "MozVoicemail event '" + aEventName + "' got" +
-               " but is not interested.");
-      return;
-    }
-
-    ok(true, "MozVoicemail event '" + aEventName + "' got.");
-    voicemail.removeEventListener(aEventName, onevent);
-    deferred.resolve(aEvent);
-  });
-
-  return deferred.promise;
-}
-
-/**
- * Send raw voicemail indicator PDU. Resolve if the indicator PDU was sent with
- * success.
- *
- * Fulfill params: (none)
- * Reject params: (none)
- *
- * @return A deferred promise.
- */
-function sendIndicatorPDU(aPDU) {
-  return runEmulatorCmdSafe("sms pdu " + aPDU);
-}
-
-/**
- * Send raw voicemail indicator PDU and wait for "statuschanged" event. Resolve
- * if the indicator was sent and a "statuschanged" event was dispatched to
- * |navigator.mozVoicemail|.
- *
- * Fulfill params: (none)
- * Reject params: (none)
- *
- * @return A deferred promise.
- */
-function sendIndicatorPDUAndWait(aPDU) {
-  let promises = [];
-
-  promises.push(waitForManagerEvent("statuschanged"));
-  promises.push(sendIndicatorPDU(aPDU));
-
-  return Promise.all(promises);
-}
-
-/**
- * Check equalities of all attributes of two VoicemailStatus instances.
- */
-function compareVoicemailStatus(aStatus1, aStatus2) {
-  is(aStatus1.serviceId, aStatus2.serviceId, "VoicemailStatus::serviceId");
-  is(aStatus1.hasMessages, aStatus2.hasMessages, "VoicemailStatus::hasMessages");
-  is(aStatus1.messageCount, aStatus2.messageCount, "VoicemailStatus::messageCount");
-  is(aStatus1.returnNumber, aStatus2.returnNumber, "VoicemailStatus::returnNumber");
-  is(aStatus1.returnMessage, aStatus2.returnMessage, "VoicemailStatus::returnMessage");
-}
-
-/**
- * Check if attributs of a VoicemailStatus match our expectations.
- */
-function checkVoicemailStatus(aStatus, aServiceId, aHasMessages, aMessageCount,
-                              aReturnNumber, aReturnMessage) {
-  compareVoicemailStatus(aStatus, {
-    serviceId: aServiceId,
-    hasMessages: aHasMessages,
-    messageCount: aMessageCount,
-    returnNumber: aReturnNumber,
-    returnMessage: aReturnMessage
-  });
-}
-
-/**
- * Wait for pending emulator transactions and call |finish()|.
- */
-function cleanUp() {
-  ok(true, ":: CLEANING UP ::");
-
-  waitFor(finish, function() {
-    return pendingEmulatorCmdCount === 0;
-  });
-}
-
-/**
- * Basic test routine helper for voicemail tests.
- *
- * This helper does nothing but clean-ups.
- *
- * @param aTestCaseMain
- *        A function that takes no parameter.
- */
-function startTestBase(aTestCaseMain) {
-  Promise.resolve()
-         .then(aTestCaseMain)
-         .then(cleanUp, function() {
-           ok(false, 'promise rejects during test.');
-           cleanUp();
-         });
-}
-
-/**
- * Common test routine helper for voicemail tests.
- *
- * This function ensures global |voicemail| variable is available during the
- * process and performs clean-ups as well.
- *
- * @param aTestCaseMain
- *        A function that takes no parameter.
- */
-function startTestCommon(aTestCaseMain) {
-  startTestBase(function() {
-    return ensureVoicemail()
-      .then(aTestCaseMain);
-  });
-}
deleted file mode 100644
--- a/dom/voicemail/test/marionette/manifest.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[DEFAULT]
-run-if = buildapp == 'b2g'
-
-[test_voicemail_dsds_default_service_id.js]
-[test_voicemail_number.js]
-[test_voicemail_statuschanged.js]
deleted file mode 100644
--- a/dom/voicemail/test/marionette/test_voicemail_dsds_default_service_id.js
+++ /dev/null
@@ -1,127 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-MARIONETTE_TIMEOUT = 60000;
-MARIONETTE_CONTEXT = "chrome";
-
-Cu.import("resource://gre/modules/Promise.jsm");
-
-const VOICEMAIL_SERVICE_CONTRACTID =
-  "@mozilla.org/voicemail/gonkvoicemailservice;1";
-
-const PREF_RIL_NUM_RADIO_INTERFACES = "ril.numRadioInterfaces";
-const PREF_DEFAULT_SERVICE_ID = "dom.voicemail.defaultServiceId";
-
-function setPrefAndVerify(prefKey, setVal, service, expectedVal, deferred) {
-  log("  Set '" + prefKey + "' to " + setVal);
-  Services.prefs.setIntPref(prefKey, setVal);
-  let prefVal = Services.prefs.getIntPref(prefKey);
-  is(prefVal, setVal, "'" + prefKey + "' set to " + setVal);
-
-  window.setTimeout(function() {
-    let defaultVal = service.getDefaultItem().serviceId;
-    is(defaultVal, expectedVal, "serviceId");
-
-    deferred.resolve(service);
-  }, 0);
-}
-
-function getNumRadioInterfaces() {
-  let deferred = Promise.defer();
-
-  window.setTimeout(function() {
-    let numRil = Services.prefs.getIntPref(PREF_RIL_NUM_RADIO_INTERFACES);
-    log("numRil = " + numRil);
-
-    deferred.resolve(numRil);
-  }, 0);
-
-  return deferred.promise;
-}
-
-function getService(contractId, ifaceName) {
-  let deferred = Promise.defer();
-
-  window.setTimeout(function() {
-    log("Getting service for " + ifaceName);
-    let service = Cc[contractId].getService(Ci[ifaceName]);
-    ok(service, "service.constructor is " + service.constructor);
-
-    deferred.resolve(service);
-  }, 0);
-
-  return deferred.promise;
-}
-
-function checkInitialEquality(prefKey, service) {
-  let deferred = Promise.defer();
-
-  log("  Checking initial value for '" + prefKey + "'");
-  let origPrefVal = Services.prefs.getIntPref(prefKey);
-  ok(isFinite(origPrefVal), "default '" + prefKey + "' value");
-
-  window.setTimeout(function() {
-    let defaultVal = service.getDefaultItem().serviceId;
-    is(defaultVal, origPrefVal, "serviceId");
-
-    deferred.resolve(service);
-  }, 0);
-
-  return deferred.promise;
-}
-
-function checkSetToNegtiveValue(prefKey, service) {
-  let deferred = Promise.defer();
-
-  // Set to -1 and verify defaultVal == 0.
-  setPrefAndVerify(prefKey, -1, service, 0, deferred);
-
-  return deferred.promise;
-}
-
-function checkSetToOverflowedValue(prefKey, numRil, service) {
-  let deferred = Promise.defer();
-
-  // Set to larger-equal than numRil and verify defaultVal == 0.
-  setPrefAndVerify(prefKey, numRil, service, 0, deferred);
-
-  return deferred.promise;
-}
-
-function checkValueChange(prefKey, numRil, service) {
-  let deferred = Promise.defer();
-
-  if (numRil > 1) {
-    // Set to (numRil - 1) and verify defaultVal equals.
-    setPrefAndVerify(prefKey, numRil - 1, service, numRil - 1, deferred);
-  } else {
-    window.setTimeout(function() {
-      deferred.resolve(service);
-    }, 0);
-  }
-
-  return deferred.promise;
-}
-
-function verify(contractId, ifaceName, prefKey, numRil) {
-  let deferred = Promise.defer();
-
-  getService(contractId, ifaceName)
-    .then(checkInitialEquality.bind(null, prefKey))
-    .then(checkSetToNegtiveValue.bind(null, prefKey))
-    .then(checkSetToOverflowedValue.bind(null, prefKey, numRil))
-    .then(checkValueChange.bind(null, prefKey, numRil))
-    .then(function() {
-      // Reset.
-      Services.prefs.clearUserPref(prefKey);
-
-      deferred.resolve(numRil);
-    });
-
-  return deferred.promise;
-}
-
-getNumRadioInterfaces()
-  .then(verify.bind(null, VOICEMAIL_SERVICE_CONTRACTID, "nsIVoicemailService",
-                    PREF_DEFAULT_SERVICE_ID))
-  .then(finish);
deleted file mode 100644
--- a/dom/voicemail/test/marionette/test_voicemail_number.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-const MARIONETTE_TIMEOUT = 60000;
-const MARIONETTE_HEAD_JS = 'head.js';
-
-startTestCommon(function() {
-  let serviceId = 0;
-
-  // These are the emulator's hard coded voicemail number and alphaId
-  is(voicemail.getNumber(serviceId), "+15552175049");
-  is(voicemail.getDisplayName(serviceId), "Voicemail");
-
-  is(voicemail.getNumber(), "+15552175049");
-  is(voicemail.getDisplayName(), "Voicemail");
-});
deleted file mode 100644
--- a/dom/voicemail/test/marionette/test_voicemail_statuschanged.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-const MARIONETTE_TIMEOUT = 60000;
-const MARIONETTE_HEAD_JS = 'head.js';
-
-// TODO: Add tests for store/discard once they are implemented
-// See RadioInterfaceLayer.js / Bug #768441
-
-function checkEventStatus(aEvent, aServiceId, aHasMessages, aMessageCount,
-                          aReturnNumber, aReturnMessage) {
-  let status = aEvent.status;
-  ok(true, "status = " + JSON.stringify(status));
-  ok(status instanceof MozVoicemailStatus);
-
-  checkVoicemailStatus(status, 0, aHasMessages, aMessageCount, aReturnNumber,
-                       aReturnMessage);
-
-  compareVoicemailStatus(voicemail.getStatus(0), status);
-  compareVoicemailStatus(voicemail.getStatus(), status);
-}
-
-function testLevel2Discard(aActive) {
-  log("    Active: " + aActive);
-
-  let sender = "+15125551235";
-  let body = "1 new voicemail";
-  let pdu = PDUBuilder.buildLevel2DiscardMwi(aActive, sender, body);
-  return sendIndicatorPDUAndWait(pdu)
-    .then((aResults) => checkEventStatus(aResults[0], 0, aActive,
-                                         (aActive ? -1 : 0), sender, body));
-}
-
-// Tests for Level 3 MWI with a message count in the User Data Header
-function testLevel3Discard(aMessageCount, aBody) {
-  log("    Message Count: " + aMessageCount + ", Body: " + aBody);
-
-  let sender = "+15125551236";
-  let pdu = PDUBuilder.buildLevel3DiscardMwi(aMessageCount, sender, aBody);
-  return sendIndicatorPDUAndWait(pdu)
-    .then((aResults) => checkEventStatus(aResults[0], 0, !!aMessageCount,
-                                         aMessageCount, sender, aBody));
-}
-
-startTestCommon(function() {
-  return Promise.resolve()
-
-    .then(() => log("Testing Message Waiting Indication Group"))
-    // Level 2 discarded active/inactive MWI.
-    .then(() => log("  Discard Message"))
-    .then(() => testLevel2Discard(true))
-    .then(() => testLevel2Discard(false))
-
-    .then(() => log("Testing Special SMS Message Indication"))
-    .then(() => log("  Discard Message"))
-    // Level 3 discarded active/inactive MWI.
-    .then(() => testLevel3Discard(3, "3 voicemails"))
-    .then(() => testLevel3Discard(0, "0 voicemail"))
-    .then(() => testLevel3Discard(3, null))
-    .then(() => testLevel3Discard(0, null));
-});
deleted file mode 100644
--- a/dom/webidl/MozVoicemail.webidl
+++ /dev/null
@@ -1,36 +0,0 @@
-/* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
-/* vim: set ts=2 et sw=2 tw=40: */
-/* 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/. */
-
-[Pref="dom.voicemail.enabled",
- ChromeOnly]
-interface MozVoicemail : EventTarget
-{
-  /**
-   * The current voicemail status of a specified service, or null when the
-   * status is unknown.
-   */
-  [Throws]
-  MozVoicemailStatus getStatus(optional unsigned long serviceId);
-
-  /**
-   * The voicemail box dialing number of a specified service, or null if one
-   * wasn't found.
-   */
-  [Throws]
-  DOMString getNumber(optional unsigned long serviceId);
-
-  /**
-   * The display name of the voicemail box dialing number of a specified service,
-   * or null if one wasn't found.
-   */
-  [Throws]
-  DOMString getDisplayName(optional unsigned long serviceId);
-
-  /**
-   * The current voicemail status has changed.
-   */
-  attribute EventHandler onstatuschanged;
-};
deleted file mode 100644
--- a/dom/webidl/MozVoicemailEvent.webidl
+++ /dev/null
@@ -1,18 +0,0 @@
-/* -*- Mode: IDL; 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/.
- */
-
-[Constructor(DOMString type, optional MozVoicemailEventInit eventInitDict),
- Pref="dom.voicemail.enabled",
- ChromeOnly]
-interface MozVoicemailEvent : Event
-{
-  readonly attribute MozVoicemailStatus? status;
-};
-
-dictionary MozVoicemailEventInit : EventInit
-{
-  MozVoicemailStatus? status = null;
-};
deleted file mode 100644
--- a/dom/webidl/MozVoicemailStatus.webidl
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
-/* vim: set ts=2 et sw=2 tw=40: */
-/* 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/. */
-
-[Pref="dom.voicemail.enabled",
- ChromeOnly]
-interface MozVoicemailStatus
-{
-  readonly attribute unsigned long serviceId;
-
-  /**
-   * Whether or not there are messages waiting in the voicemail box
-   */
-  readonly attribute boolean hasMessages;
-
-  /**
-   * The total message count. Some voicemail indicators will only specify that
-   * messages are waiting, but not the actual number. In that case, the value
-   * of messageCount will be -1, indicating the unknown message count.
-   *
-   * Logic for a voicemail notification might look something like:
-   * if (status.hasMessages) {
-   *   // show new voicemail notification
-   *   if (status.messageCount > 0) {
-   *     // add a label for the message count
-   *   }
-   * } else {
-   *   // hide the voicemail notification
-   * }
-   */
-  readonly attribute long messageCount;
-
-  /**
-   * Return call number received for this voicemail status, or null if one
-   * wasn't provided.
-   */
-  readonly attribute DOMString? returnNumber;
-
-  /**
-   * Displayable return call message received for this voicemail status, or null
-   * if one wasn't provided.
-   */
-  readonly attribute DOMString? returnMessage;
-};
--- a/dom/webidl/Navigator.webidl
+++ b/dom/webidl/Navigator.webidl
@@ -278,22 +278,16 @@ partial interface Navigator {
 
 #ifdef MOZ_B2G_RIL
 partial interface Navigator {
   [Throws, Pref="dom.mobileconnection.enabled", ChromeOnly, UnsafeInPrerendering]
   readonly attribute MozMobileConnectionArray mozMobileConnections;
 };
 
 partial interface Navigator {
-  [Throws, Pref="dom.voicemail.enabled", ChromeOnly,
-   UnsafeInPrerendering]
-  readonly attribute MozVoicemail mozVoicemail;
-};
-
-partial interface Navigator {
   [Throws, Pref="dom.icc.enabled", ChromeOnly,
    UnsafeInPrerendering]
   readonly attribute MozIccManager? mozIccManager;
 };
 
 partial interface Navigator {
   [Throws, Pref="dom.telephony.enabled", ChromeOnly, UnsafeInPrerendering]
   readonly attribute Telephony? mozTelephony;
--- a/dom/webidl/moz.build
+++ b/dom/webidl/moz.build
@@ -342,18 +342,16 @@ WEBIDL_FILES = [
     'MozMobileConnectionArray.webidl',
     'MozMobileConnectionInfo.webidl',
     'MozMobileMessageManager.webidl',
     'MozMobileNetworkInfo.webidl',
     'MozPowerManager.webidl',
     'MozSelfSupport.webidl',
     'MozTetheringManager.webidl',
     'MozTimeManager.webidl',
-    'MozVoicemail.webidl',
-    'MozVoicemailStatus.webidl',
     'MozWakeLock.webidl',
     'MutationEvent.webidl',
     'MutationObserver.webidl',
     'NamedNodeMap.webidl',
     'NativeOSFileInternals.webidl',
     'NetDashboard.webidl',
     'NetworkInformation.webidl',
     'NetworkOptions.webidl',
@@ -798,17 +796,16 @@ GENERATED_EVENTS_WEBIDL_FILES = [
     'MozEmergencyCbModeEvent.webidl',
     'MozMessageDeletedEvent.webidl',
     'MozMmsEvent.webidl',
     'MozOtaStatusEvent.webidl',
     'MozSettingsEvent.webidl',
     'MozSettingsTransactionEvent.webidl',
     'MozSmsEvent.webidl',
     'MozStkCommandEvent.webidl',
-    'MozVoicemailEvent.webidl',
     'PageTransitionEvent.webidl',
     'PerformanceEntryEvent.webidl',
     'PluginCrashedEvent.webidl',
     'PopStateEvent.webidl',
     'PopupBlockedEvent.webidl',
     'PresentationConnectionAvailableEvent.webidl',
     'PresentationConnectionClosedEvent.webidl',
     'ProgressEvent.webidl',
--- a/layout/build/nsLayoutModule.cpp
+++ b/layout/build/nsLayoutModule.cpp
@@ -213,17 +213,16 @@ static void Shutdown();
 #include "mozilla/dom/FlyWebService.h"
 
 #include "mozilla/dom/power/PowerManagerService.h"
 #include "mozilla/dom/time/TimeService.h"
 #include "StreamingProtocolService.h"
 
 #include "nsIPresentationService.h"
 #include "nsITelephonyService.h"
-#include "nsIVoicemailService.h"
 
 #include "FakeInputPortService.h"
 #include "InputPortData.h"
 #include "InputPortServiceFactory.h"
 #include "nsIInputPortService.h"
 
 #ifdef MOZ_WIDGET_GONK
 #include "GonkGPSGeolocationProvider.h"
@@ -367,18 +366,16 @@ NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR
                                          nsVolumeService::GetSingleton)
 #endif
 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIMediaManagerService,
                                          MediaManager::GetInstance)
 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIMobileConnectionService,
                                          NS_CreateMobileConnectionService)
 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsITelephonyService,
                                          NS_CreateTelephonyService)
-NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIVoicemailService,
-                                         NS_CreateVoicemailService)
 NS_GENERIC_FACTORY_CONSTRUCTOR(PresentationDeviceManager)
 NS_GENERIC_FACTORY_CONSTRUCTOR(TextInputProcessor)
 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(FakeInputPortService,
                                          InputPortServiceFactory::CreateFakeInputPortService)
 NS_GENERIC_FACTORY_CONSTRUCTOR(InputPortData)
 NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIPresentationService,
                                          NS_CreatePresentationService)
 NS_GENERIC_FACTORY_CONSTRUCTOR(PresentationTCPSessionTransport)
@@ -803,17 +800,16 @@ NS_DEFINE_NAMED_CID(NS_HAPTICFEEDBACK_CI
 #endif
 #endif
 #ifndef DISABLE_MOZ_RIL_GEOLOC
 #ifdef MOZ_WIDGET_GONK
 NS_DEFINE_NAMED_CID(GONK_GPS_GEOLOCATION_PROVIDER_CID);
 #endif
 #endif
 NS_DEFINE_NAMED_CID(TELEPHONY_SERVICE_CID);
-NS_DEFINE_NAMED_CID(NS_VOICEMAIL_SERVICE_CID);
 NS_DEFINE_NAMED_CID(NS_MOBILE_CONNECTION_SERVICE_CID);
 NS_DEFINE_NAMED_CID(SMS_SERVICE_CID);
 NS_DEFINE_NAMED_CID(ICC_SERVICE_CID);
 NS_DEFINE_NAMED_CID(MMS_SERVICE_CID);
 NS_DEFINE_NAMED_CID(MOBILE_MESSAGE_SERVICE_CID);
 NS_DEFINE_NAMED_CID(MOBILE_MESSAGE_DATABASE_SERVICE_CID);
 NS_DEFINE_NAMED_CID(NS_POWERMANAGERSERVICE_CID);
 NS_DEFINE_NAMED_CID(OSFILECONSTANTSSERVICE_CID);
@@ -1122,17 +1118,16 @@ static const mozilla::Module::CIDEntry k
   { &kGONK_GPS_GEOLOCATION_PROVIDER_CID, false, nullptr, nsIGeolocationProviderConstructor },
 #endif
   { &kNS_MEDIAMANAGERSERVICE_CID, false, nullptr, nsIMediaManagerServiceConstructor },
 #ifdef ACCESSIBILITY
   { &kNS_ACCESSIBILITY_SERVICE_CID, false, nullptr, CreateA11yService },
 #endif
   { &kTELEPHONY_SERVICE_CID, false, nullptr, nsITelephonyServiceConstructor },
   { &kNS_MOBILE_CONNECTION_SERVICE_CID, false, NULL, nsIMobileConnectionServiceConstructor },
-  { &kNS_VOICEMAIL_SERVICE_CID, false, nullptr, nsIVoicemailServiceConstructor },
   { &kPRESENTATION_SERVICE_CID, false, nullptr, nsIPresentationServiceConstructor },
   { &kPRESENTATION_DEVICE_MANAGER_CID, false, nullptr, PresentationDeviceManagerConstructor },
   { &kPRESENTATION_TCP_SESSION_TRANSPORT_CID, false, nullptr, PresentationTCPSessionTransportConstructor },
   { &kTEXT_INPUT_PROCESSOR_CID, false, nullptr, TextInputProcessorConstructor },
   { &kFAKE_INPUTPORT_SERVICE_CID, false, nullptr, FakeInputPortServiceConstructor },
   { &kINPUTPORT_DATA_CID, false, nullptr, InputPortDataConstructor },
 #ifdef MOZ_B2G
   { &kNS_HARDWARE_KEY_HANDLER_CID, false, nullptr, nsIHardwareKeyHandlerConstructor },
@@ -1282,17 +1277,16 @@ static const mozilla::Module::ContractID
   { MEDIAMANAGERSERVICE_CONTRACTID, &kNS_MEDIAMANAGERSERVICE_CID },
 #ifdef ACCESSIBILITY
   { "@mozilla.org/accessibilityService;1", &kNS_ACCESSIBILITY_SERVICE_CID },
   { "@mozilla.org/accessibleRetrieval;1", &kNS_ACCESSIBILITY_SERVICE_CID },
 #endif
   { TELEPHONY_SERVICE_CONTRACTID, &kTELEPHONY_SERVICE_CID },
   { "@mozilla.org/gecko-media-plugin-service;1",  &kGECKO_MEDIA_PLUGIN_SERVICE_CID },
   { NS_MOBILE_CONNECTION_SERVICE_CONTRACTID, &kNS_MOBILE_CONNECTION_SERVICE_CID },
-  { NS_VOICEMAIL_SERVICE_CONTRACTID, &kNS_VOICEMAIL_SERVICE_CID },
   { PRESENTATION_SERVICE_CONTRACTID, &kPRESENTATION_SERVICE_CID },
   { PRESENTATION_DEVICE_MANAGER_CONTRACTID, &kPRESENTATION_DEVICE_MANAGER_CID },
   { PRESENTATION_TCP_SESSION_TRANSPORT_CONTRACTID, &kPRESENTATION_TCP_SESSION_TRANSPORT_CID },
   { "@mozilla.org/text-input-processor;1", &kTEXT_INPUT_PROCESSOR_CID },
   { FAKE_INPUTPORT_SERVICE_CONTRACTID, &kFAKE_INPUTPORT_SERVICE_CID },
   { INPUTPORT_DATA_CONTRACTID, &kINPUTPORT_DATA_CID },
 #ifdef MOZ_B2G
   { NS_HARDWARE_KEY_HANDLER_CONTRACTID, &kNS_HARDWARE_KEY_HANDLER_CID },
--- a/modules/libpref/init/all.js
+++ b/modules/libpref/init/all.js
@@ -5048,26 +5048,16 @@ pref("dom.icc.enabled", false);
 
 // Mobile Connection API
 #ifdef MOZ_B2G_RIL
 pref("dom.mobileconnection.enabled", true);
 #else
 pref("dom.mobileconnection.enabled", false);
 #endif
 
-// Voice Mail API
-#ifdef MOZ_B2G_RIL
-pref("dom.voicemail.enabled", true);
-#else
-pref("dom.voicemail.enabled", false);
-#endif
-// Numeric default service id for Voice Mail API calls with |serviceId|
-// parameter omitted.
-pref("dom.voicemail.defaultServiceId", 0);
-
 // Enable mapped array buffer by default.
 pref("dom.mapped_arraybuffer.enabled", true);
 
 // The tables used for Safebrowsing phishing and malware checks.
 pref("urlclassifier.malwareTable", "goog-malware-shavar,goog-unwanted-shavar,test-malware-simple,test-unwanted-simple");
 
 #ifdef MOZILLA_OFFICIAL
 // In the official build, we are allowed to use google's private
--- a/testing/marionette/harness/marionette/tests/webapi-tests.ini
+++ b/testing/marionette/harness/marionette/tests/webapi-tests.ini
@@ -1,11 +1,10 @@
 [include:../../../../../dom/bluetooth/tests/marionette/manifest.ini]
 [include:../../../../../dom/telephony/test/marionette/manifest.ini]
-[include:../../../../../dom/voicemail/test/marionette/manifest.ini]
 [include:../../../../../dom/battery/test/marionette/manifest.ini]
 [include:../../../../../dom/mobilemessage/tests/marionette/manifest.ini]
 [include:../../../../../dom/mobileconnection/tests/marionette/manifest.ini]
 [include:../../../../../dom/system/gonk/tests/marionette/manifest.ini]
 [include:../../../../../dom/icc/tests/marionette/manifest.ini]
 [include:../../../../../dom/system/tests/marionette/manifest.ini]
 [include:../../../../../dom/nfc/tests/marionette/manifest.ini]
 skip-if = android_version > '15' # Bug 1203072
--- a/testing/mochitest/manifest.webapp
+++ b/testing/mochitest/manifest.webapp
@@ -9,17 +9,16 @@
   "permissions": {
     "alarms": {},
     "browser":{},
     "power":{},
     "webapps-manage":{},
     "mobileconnection":{},
     "bluetooth":{},
     "telephony":{},
-    "voicemail":{},
     "device-storage:pictures":{ "access": "readwrite" },
     "device-storage:sdcard":{ "access": "readwrite" },
     "settings":{ "access": "readwrite" },
     "storage":{},
     "camera":{},
     "geolocation":{},
     "wifi-manage":{},
     "desktop-notification":{},