Bug 1252570 - Remove mozPay. r=ehsan,mfinkle,fabrice
authorFernando Jimenez <ferjmoreno@gmail.com>
Fri, 19 Aug 2016 15:14:53 +0200
changeset 310560 4a2454585e72a98430f314a3ddc2b868aef23d4a
parent 310559 d404212c76d59912760c4183466c1dcb8cf1b91e
child 310561 b4a65bc5198f797ec02ec670bf4124bb4d82d1b3
push id20360
push userarchaeopteryx@coole-files.de
push dateMon, 22 Aug 2016 15:33:28 +0000
treeherderfx-team@3b7148db9a79 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersehsan, mfinkle, fabrice
bugs1252570
milestone51.0a1
Bug 1252570 - Remove mozPay. r=ehsan,mfinkle,fabrice MozReview-Commit-ID: C50fvuNJoGq
b2g/app/b2g.js
b2g/chrome/content/shell.js
b2g/components/B2GComponents.manifest
b2g/components/PaymentGlue.js
b2g/components/PaymentProviderStrategy.js
b2g/components/moz.build
b2g/confvars.sh
b2g/graphene/confvars.sh
b2g/installer/package-manifest.in
browser/confvars.sh
browser/installer/package-manifest.in
docshell/base/nsDocShell.cpp
docshell/base/nsDocShell.h
docshell/base/nsIDocShell.idl
dom/base/Navigator.cpp
dom/base/Navigator.h
dom/moz.build
dom/payment/Payment.js
dom/payment/Payment.jsm
dom/payment/Payment.manifest
dom/payment/PaymentFlowInfo.js
dom/payment/PaymentProvider.js
dom/payment/PaymentProviderUtils.cpp
dom/payment/PaymentProviderUtils.h
dom/payment/interfaces/moz.build
dom/payment/interfaces/nsIPaymentContentHelperService.idl
dom/payment/interfaces/nsIPaymentFlowInfo.idl
dom/payment/interfaces/nsIPaymentProviderStrategy.idl
dom/payment/interfaces/nsIPaymentUIGlue.idl
dom/payment/moz.build
dom/payment/tests/mochitest/MockPaymentsUIChromeScript.js
dom/payment/tests/mochitest/file_mozpayproviderchecker.html
dom/payment/tests/mochitest/file_payproviderfailure.html
dom/payment/tests/mochitest/file_payprovidersuccess.html
dom/payment/tests/mochitest/mochitest.ini
dom/payment/tests/mochitest/test_mozpay_callbacks.html
dom/payment/tests/mochitest/test_mozpaymentprovider.html
dom/payment/tests/unit/header_helper.js
dom/payment/tests/unit/test_paymanager_get_payment_request.js
dom/payment/tests/unit/xpcshell.ini
dom/webidl/MozPaymentProvider.webidl
dom/webidl/Navigator.webidl
dom/webidl/moz.build
mobile/android/tests/browser/robocop/robocop.ini
mobile/android/tests/browser/robocop/roboextender/base/paymentsUI.html
mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testMozPay.java
mobile/android/tests/browser/robocop/testMozPay.js
old-configure.in
--- a/b2g/app/b2g.js
+++ b/b2g/app/b2g.js
@@ -462,19 +462,16 @@ pref("dom.mozPermissionSettings.enabled"
 
 // controls if we want camera support
 pref("device.camera.enabled", true);
 pref("media.realtime_decoder.enabled", true);
 
 // TCPSocket
 pref("dom.mozTCPSocket.enabled", true);
 
-// WebPayment
-pref("dom.mozPay.enabled", true);
-
 // "Preview" landing of bug 710563, which is bogged down in analysis
 // of talos regression.  This is a needed change for higher-framerate
 // CSS animations, and incidentally works around an apparent bug in
 // our handling of requestAnimationFrame() listeners, which are
 // supposed to enable this REPEATING_PRECISE_CAN_SKIP behavior.  The
 // secondary bug isn't really worth investigating since it's obseleted
 // by bug 710563.
 pref("layout.frame_rate.precise", true);
--- a/b2g/chrome/content/shell.js
+++ b/b2g/chrome/content/shell.js
@@ -4,17 +4,16 @@
  * 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/. */
 
 window.performance.mark('gecko-shell-loadstart');
 
 Cu.import('resource://gre/modules/ContactService.jsm');
 Cu.import('resource://gre/modules/AlarmService.jsm');
 Cu.import('resource://gre/modules/NotificationDB.jsm');
-Cu.import('resource://gre/modules/Payment.jsm');
 Cu.import("resource://gre/modules/AppsUtils.jsm");
 Cu.import('resource://gre/modules/UserAgentOverrides.jsm');
 Cu.import('resource://gre/modules/Keyboard.jsm');
 Cu.import('resource://gre/modules/ErrorPage.jsm');
 Cu.import('resource://gre/modules/AlertsHelper.jsm');
 Cu.import('resource://gre/modules/SystemUpdateService.jsm');
 
 if (isGonk) {
--- a/b2g/components/B2GComponents.manifest
+++ b/b2g/components/B2GComponents.manifest
@@ -32,22 +32,16 @@ component {1a94c87a-5ece-4d11-91e1-d29c2
 contract @mozilla.org/b2g-process-global;1 {1a94c87a-5ece-4d11-91e1-d29c29f21b28}
 category app-startup ProcessGlobal service,@mozilla.org/b2g-process-global;1
 
 # OMAContentHandler.js
 component {a6b2ab13-9037-423a-9897-dde1081be323} OMAContentHandler.js
 contract @mozilla.org/uriloader/content-handler;1?type=application/vnd.oma.drm.message {a6b2ab13-9037-423a-9897-dde1081be323}
 contract @mozilla.org/uriloader/content-handler;1?type=application/vnd.oma.dd+xml {a6b2ab13-9037-423a-9897-dde1081be323}
 
-# Payments
-component {8b83eabc-7929-47f4-8b48-4dea8d887e4b} PaymentGlue.js
-contract @mozilla.org/payment/ui-glue;1 {8b83eabc-7929-47f4-8b48-4dea8d887e4b}
-component {4834b2e1-2c91-44ea-b020-e2581ed279a4} PaymentProviderStrategy.js
-contract @mozilla.org/payment/provider-strategy;1 {4834b2e1-2c91-44ea-b020-e2581ed279a4}
-
 # TelProtocolHandler.js
 component {782775dd-7351-45ea-aff1-0ffa872cfdd2} TelProtocolHandler.js
 contract @mozilla.org/network/protocol;1?name=tel {782775dd-7351-45ea-aff1-0ffa872cfdd2}
 
 # SmsProtocolHandler.js
 component {81ca20cb-0dad-4e32-8566-979c8998bd73} SmsProtocolHandler.js
 contract @mozilla.org/network/protocol;1?name=sms {81ca20cb-0dad-4e32-8566-979c8998bd73}
 
deleted file mode 100644
--- a/b2g/components/PaymentGlue.js
+++ /dev/null
@@ -1,202 +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/. */
-
-"use strict";
-
-const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/Promise.jsm");
-
-// Type of MozChromEvents to handle payment dialogs.
-const kOpenPaymentConfirmationEvent = "open-payment-confirmation-dialog";
-const kOpenPaymentFlowEvent = "open-payment-flow-dialog";
-const kClosePaymentFlowEvent = "close-payment-flow-dialog";
-
-// Observer notification topic for payment flow cancelation.
-const kPaymentFlowCancelled = "payment-flow-cancelled";
-
-const PREF_DEBUG = "dom.payment.debug";
-
-XPCOMUtils.defineLazyServiceGetter(this, "uuidgen",
-                                   "@mozilla.org/uuid-generator;1",
-                                   "nsIUUIDGenerator");
-
-XPCOMUtils.defineLazyModuleGetter(this, "SystemAppProxy",
-                                  "resource://gre/modules/SystemAppProxy.jsm");
-
-function PaymentUI() {
-  try {
-    this._debug =
-      Services.prefs.getPrefType(PREF_DEBUG) == Ci.nsIPrefBranch.PREF_BOOL
-      && Services.prefs.getBoolPref(PREF_DEBUG);
-  } catch(e) {
-    this._debug = false;
-  }
-}
-
-PaymentUI.prototype = {
-
-  confirmPaymentRequest: function confirmPaymentRequest(aRequestId,
-                                                        aRequests,
-                                                        aSuccessCb,
-                                                        aErrorCb) {
-    let _error = function _error(errorMsg) {
-      if (aErrorCb) {
-        aErrorCb.onresult(aRequestId, errorMsg);
-      }
-    };
-
-    // The UI should listen for mozChromeEvent 'open-payment-confirmation-dialog'
-    // type in order to create and show the payment request confirmation frame
-    // embeded within a trusted dialog.
-    let id = kOpenPaymentConfirmationEvent + "-" + this.getRandomId();
-    let detail = {
-      type: kOpenPaymentConfirmationEvent,
-      id: id,
-      requestId: aRequestId,
-      paymentRequests: aRequests
-    };
-
-    // Once the user confirm the payment request and makes his choice, we get
-    // back to the DOM part to get the appropriate payment flow information
-    // based on the selected payment provider.
-    this._handleSelection = (function _handleSelection(evt) {
-      let msg = evt.detail;
-      if (msg.id != id) {
-        return;
-      }
-
-      if (msg.userSelection && aSuccessCb) {
-        aSuccessCb.onresult(aRequestId, msg.userSelection);
-      } else if (msg.errorMsg) {
-        _error(msg.errorMsg);
-      }
-
-      SystemAppProxy.removeEventListener("mozContentEvent", this._handleSelection);
-      this._handleSelection = null;
-    }).bind(this);
-    SystemAppProxy.addEventListener("mozContentEvent", this._handleSelection);
-
-    SystemAppProxy.dispatchEvent(detail);
-  },
-
-  showPaymentFlow: function showPaymentFlow(aRequestId,
-                                            aPaymentFlowInfo,
-                                            aErrorCb) {
-    let _error = (errorMsg) => {
-      if (aErrorCb) {
-        aErrorCb.onresult(aRequestId, errorMsg);
-      }
-    };
-
-    // We ask the UI to browse to the selected payment flow.
-    let id = kOpenPaymentFlowEvent + "-" + this.getRandomId();
-    let detail = {
-      type: kOpenPaymentFlowEvent,
-      id: id,
-      requestId: aRequestId
-    };
-
-    this._setPaymentRequest = (event) => {
-      let message = event.detail;
-      if (message.id != id) {
-        return;
-      }
-
-      let frame = message.frame;
-      let docshell = frame.contentWindow
-                          .QueryInterface(Ci.nsIInterfaceRequestor)
-                          .getInterface(Ci.nsIWebNavigation)
-                          .QueryInterface(Ci.nsIDocShell);
-      docshell.paymentRequestId = aRequestId;
-      frame.src = aPaymentFlowInfo.uri + aPaymentFlowInfo.jwt;
-      SystemAppProxy.removeEventListener("mozContentEvent",
-                                         this._setPaymentRequest);
-    };
-    SystemAppProxy.addEventListener("mozContentEvent",
-                                    this._setPaymentRequest);
-
-    // We listen for UI notifications about a closed payment flow. The UI
-    // should provide the reason of the closure within the 'errorMsg' parameter
-    this._notifyPayFlowClosed = (evt) => {
-      let msg = evt.detail;
-      if (msg.id != id) {
-        return;
-      }
-
-      if (msg.type != 'cancel') {
-        return;
-      }
-
-      if (msg.errorMsg) {
-        _error(msg.errorMsg);
-      }
-
-      SystemAppProxy.removeEventListener("mozContentEvent",
-                                         this._notifyPayFlowClosed);
-      this._notifyPayFlowClosed = null;
-
-      Services.obs.notifyObservers(null, kPaymentFlowCancelled, null);
-    };
-    SystemAppProxy.addEventListener("mozContentEvent",
-                                    this._notifyPayFlowClosed);
-
-    SystemAppProxy.dispatchEvent(detail);
-  },
-
-  closePaymentFlow: function(aRequestId) {
-    return new Promise((aResolve) => {
-      // After receiving the payment provider confirmation about the
-      // successful or failed payment flow, we notify the UI to close the
-      // payment flow dialog and return to the caller application.
-      let id = kClosePaymentFlowEvent + "-" + uuidgen.generateUUID().toString();
-
-      let detail = {
-        type: kClosePaymentFlowEvent,
-        id: id,
-        requestId: aRequestId
-      };
-
-      // In order to avoid race conditions, we wait for the UI to notify that
-      // it has successfully closed the payment flow and has recovered the
-      // caller app, before notifying the parent process to fire the success
-      // or error event over the DOMRequest.
-      SystemAppProxy.addEventListener("mozContentEvent",
-                                      (function closePaymentFlowReturn() {
-        SystemAppProxy.removeEventListener("mozContentEvent",
-                                    closePaymentFlowReturn);
-        this.cleanup();
-        aResolve();
-      }).bind(this));
-
-      SystemAppProxy.dispatchEvent(detail);
-    });
-  },
-
-  cleanup: function cleanup() {
-    if (this._handleSelection) {
-      SystemAppProxy.removeEventListener("mozContentEvent",
-                                         this._handleSelection);
-      this._handleSelection = null;
-    }
-
-    if (this._notifyPayFlowClosed) {
-      SystemAppProxy.removeEventListener("mozContentEvent",
-                                         this._notifyPayFlowClosed);
-      this._notifyPayFlowClosed = null;
-    }
-  },
-
-  getRandomId: function getRandomId() {
-    return uuidgen.generateUUID().toString();
-  },
-
-  classID: Components.ID("{8b83eabc-7929-47f4-8b48-4dea8d887e4b}"),
-
-  QueryInterface: XPCOMUtils.generateQI([Ci.nsIPaymentUIGlue])
-}
-
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory([PaymentUI]);
deleted file mode 100644
--- a/b2g/components/PaymentProviderStrategy.js
+++ /dev/null
@@ -1,178 +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/. */
-
-"use strict";
-
-const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
-
-const PREF_DEBUG = "dom.payment.debug";
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource://gre/modules/Services.jsm");
-
-XPCOMUtils.defineLazyServiceGetter(this, "gIccService",
-                                   "@mozilla.org/icc/iccservice;1",
-                                   "nsIIccService");
-
-XPCOMUtils.defineLazyServiceGetter(this, "gRil",
-                                   "@mozilla.org/ril;1",
-                                   "nsIRadioInterfaceLayer");
-
-XPCOMUtils.defineLazyServiceGetter(this, "gSettingsService",
-                                   "@mozilla.org/settingsService;1",
-                                   "nsISettingsService");
-
-const kMozSettingsChangedObserverTopic = "mozsettings-changed";
-const kRilDefaultDataServiceId = "ril.data.defaultServiceId";
-const kRilDefaultPaymentServiceId = "ril.payment.defaultServiceId";
-
-var _debug;
-try {
-  _debug = Services.prefs.getPrefType(PREF_DEBUG) == Ci.nsIPrefBranch.PREF_BOOL
-           && Services.prefs.getBoolPref(PREF_DEBUG);
-} catch(e){
-  _debug = false;
-}
-
-function LOG(s) {
-  if (!_debug) {
-    return;
-  }
-  dump("== Payment Provider == " + s + "\n");
-}
-
-function LOGE(s) {
-  dump("== Payment Provider ERROR == " + s + "\n");
-}
-
-function PaymentSettings() {
-  Services.obs.addObserver(this, kMozSettingsChangedObserverTopic, false);
-
-  [kRilDefaultDataServiceId, kRilDefaultPaymentServiceId].forEach(setting => {
-    gSettingsService.createLock().get(setting, this);
-  });
-}
-
-PaymentSettings.prototype = {
-  QueryInterface: XPCOMUtils.generateQI([Ci.nsISettingsServiceCallback,
-                                         Ci.nsIObserver]),
-
-  dataServiceId: 0,
-  _paymentServiceId: 0,
-
-  get paymentServiceId() {
-    return this._paymentServiceId;
-  },
-
-  set paymentServiceId(serviceId) {
-    // We allow the payment provider to set the service ID that will be used
-    // for the payment process.
-    // This service ID will be the one used by the silent SMS flow.
-    // If the payment is done with an external SIM, the service ID must be set
-    // to null.
-    if (serviceId != null && serviceId >= gRil.numRadioInterfaces) {
-      LOGE("Invalid service ID " + serviceId);
-      return;
-    }
-
-    gSettingsService.createLock().set(kRilDefaultPaymentServiceId,
-                                      serviceId, 0);
-    this._paymentServiceId = serviceId;
-  },
-
-  setServiceId: function(aName, aValue) {
-    switch (aName) {
-      case kRilDefaultDataServiceId:
-        this.dataServiceId = aValue;
-        if (_debug) {
-          LOG("dataServiceId " + this.dataServiceId);
-        }
-        break;
-      case kRilDefaultPaymentServiceId:
-        this._paymentServiceId = aValue;
-        if (_debug) {
-          LOG("paymentServiceId " + this._paymentServiceId);
-        }
-        break;
-    }
-  },
-
-  handle: function(aName, aValue) {
-    if (aName != kRilDefaultDataServiceId) {
-      return;
-    }
-
-    this.setServiceId(aName, aValue);
-  },
-
-  observe: function(aSubject, aTopic, aData) {
-    if (aTopic != kMozSettingsChangedObserverTopic) {
-      return;
-    }
-
-    try {
-      if ("wrappedJSObject" in aSubject) {
-        aSubject = aSubject.wrappedJSObject;
-      }
-      if (!aSubject.key ||
-          (aSubject.key !== kRilDefaultDataServiceId &&
-           aSubject.key !== kRilDefaultPaymentServiceId)) {
-        return;
-      }
-      this.setServiceId(aSubject.key, aSubject.value);
-    } catch (e) {
-      LOGE(e);
-    }
-  },
-
-  cleanup: function() {
-    Services.obs.removeObserver(this, kMozSettingsChangedObserverTopic);
-  }
-};
-
-function PaymentProviderStrategy() {
-  this._settings = new PaymentSettings();
-}
-
-PaymentProviderStrategy.prototype = {
-  get paymentServiceId() {
-    return this._settings.paymentServiceId;
-  },
-
-  set paymentServiceId(aServiceId) {
-    this._settings.paymentServiceId = aServiceId;
-  },
-
-  get iccInfo() {
-    if (!this._iccInfo) {
-      this._iccInfo = [];
-      for (let i = 0; i < gRil.numRadioInterfaces; i++) {
-        let icc = gIccService.getIccByServiceId(i);
-        let info = icc && icc.iccInfo;
-        if (!info) {
-          LOGE("Tried to get the ICC info for an invalid service ID " + i);
-          continue;
-        }
-
-        this._iccInfo.push({
-          iccId: info.iccid,
-          mcc: info.mcc,
-          mnc: info.mnc,
-          dataPrimary: i == this._settings.dataServiceId
-        });
-      }
-    }
-    return this._iccInfo;
-  },
-
-  cleanup: function() {
-    this._settings.cleanup();
-  },
-
-  classID: Components.ID("{4834b2e1-2c91-44ea-b020-e2581ed279a4}"),
-
-  QueryInterface: XPCOMUtils.generateQI([Ci.nsIPaymentProviderStrategy])
-};
-
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory([PaymentProviderStrategy]);
--- a/b2g/components/moz.build
+++ b/b2g/components/moz.build
@@ -13,18 +13,16 @@ EXTRA_COMPONENTS += [
     'B2GPresentationDevicePrompt.js',
     'BootstrapCommandLine.js',
     'ContentPermissionPrompt.js',
     'FilePicker.js',
     'FxAccountsUIGlue.js',
     'HelperAppDialog.js',
     'MailtoProtocolHandler.js',
     'OMAContentHandler.js',
-    'PaymentGlue.js',
-    'PaymentProviderStrategy.js',
     'PresentationRequestUIGlue.js',
     'ProcessGlobal.js',
     'SmsProtocolHandler.js',
     'SystemMessageInternal.js',
     'TelProtocolHandler.js',
     'WebappsUpdateTimer.js',
 ]
 
--- a/b2g/confvars.sh
+++ b/b2g/confvars.sh
@@ -34,17 +34,16 @@ MOZ_USE_NATIVE_POPUP_WINDOWS=1
 
 MOZ_XULRUNNER=
 
 MOZ_APP_ID={3c2e2abc-06d4-11e1-ac3b-374f68613e61}
 
 MOZ_TIME_MANAGER=1
 
 MOZ_SIMPLEPUSH=1
-MOZ_PAY=1
 MOZ_TOOLKIT_SEARCH=
 MOZ_B2G=1
 
 MOZ_JSDOWNLOADS=1
 
 MOZ_BUNDLED_FONTS=1
 
 export JS_GC_SMALL_CHUNK_SIZE=1
--- a/b2g/graphene/confvars.sh
+++ b/b2g/graphene/confvars.sh
@@ -35,17 +35,16 @@ if test "$OS_TARGET" = "Android"; then
 MOZ_CAPTURE=1
 MOZ_RAW=1
 MOZ_AUDIO_CHANNEL_MANAGER=1
 fi
 
 MOZ_APP_ID={d1bfe7d9-c01e-4237-998b-7b5f960a4314}
 MOZ_TIME_MANAGER=1
 
-MOZ_PAY=1
 MOZ_TOOLKIT_SEARCH=
 MOZ_PLACES=
 MOZ_B2G=1
 
 MOZ_JSDOWNLOADS=1
 
 MOZ_BUNDLED_FONTS=1
 
--- a/b2g/installer/package-manifest.in
+++ b/b2g/installer/package-manifest.in
@@ -181,17 +181,16 @@
 @RESPATH@/components/dom_secureelement.xpt
 #endif
 #ifdef MOZ_NFC
 @RESPATH@/components/dom_nfc.xpt
 #endif
 @RESPATH@/components/dom_notification.xpt
 @RESPATH@/components/dom_html.xpt
 @RESPATH@/components/dom_offline.xpt
-@RESPATH@/components/dom_payment.xpt
 @RESPATH@/components/dom_json.xpt
 @RESPATH@/components/dom_messages.xpt
 @RESPATH@/components/dom_power.xpt
 @RESPATH@/components/dom_push.xpt
 @RESPATH@/components/dom_quota.xpt
 @RESPATH@/components/dom_range.xpt
 @RESPATH@/components/dom_security.xpt
 @RESPATH@/components/dom_settings.xpt
@@ -622,21 +621,16 @@
 @RESPATH@/components/HCIEventTransactionSystemMessage.manifest
 @RESPATH@/components/HCIEventTransactionSystemMessageConfigurator.js
 
 @RESPATH@/components/ActivityProxy.js
 @RESPATH@/components/ActivityRequestHandler.js
 @RESPATH@/components/ActivityWrapper.js
 @RESPATH@/components/ActivityMessageConfigurator.js
 
-@RESPATH@/components/Payment.js
-@RESPATH@/components/PaymentFlowInfo.js
-@RESPATH@/components/PaymentProvider.js
-@RESPATH@/components/Payment.manifest
-
 @RESPATH@/components/DownloadsAPI.js
 @RESPATH@/components/DownloadsAPI.manifest
 
 ; InputMethod API
 @RESPATH@/components/MozKeyboard.js
 @RESPATH@/components/InputMethod.manifest
 #ifdef MOZ_B2G
 @RESPATH@/components/inputmethod.xpt
@@ -868,18 +862,16 @@ bin/libfreebl_32int64_3.so
 @RESPATH@/components/ContentPermissionPrompt.js
 #ifdef MOZ_UPDATER
 @RESPATH@/components/UpdatePrompt.js
 #endif
 @RESPATH@/components/WebappsUpdateTimer.js
 @RESPATH@/components/DirectoryProvider.js
 @RESPATH@/components/ProcessGlobal.js
 @RESPATH@/components/OMAContentHandler.js
-@RESPATH@/components/PaymentGlue.js
-@RESPATH@/components/PaymentProviderStrategy.js
 @RESPATH@/components/RecoveryService.js
 @RESPATH@/components/MailtoProtocolHandler.js
 @RESPATH@/components/SmsProtocolHandler.js
 @RESPATH@/components/TelProtocolHandler.js
 @RESPATH@/components/B2GAboutRedirector.js
 @RESPATH@/components/FilePicker.js
 @RESPATH@/components/HelperAppDialog.js
 @RESPATH@/components/DownloadsUI.js
--- a/browser/confvars.sh
+++ b/browser/confvars.sh
@@ -49,18 +49,16 @@ MOZ_APP_ID={ec8030f7-c20a-464f-9b0e-13a3
 # If more than one ID is needed, then you should use a comma separated list
 # of values.
 ACCEPTED_MAR_CHANNEL_IDS=firefox-mozilla-central
 # The MAR_CHANNEL_ID must not contain the following 3 characters: ",\t "
 MAR_CHANNEL_ID=firefox-mozilla-central
 MOZ_PROFILE_MIGRATOR=1
 MOZ_APP_STATIC_INI=1
 MOZ_WEBGL_CONFORMANT=1
-# Enable navigator.mozPay
-MOZ_PAY=1
 MOZ_JSDOWNLOADS=1
 MOZ_RUST_MP4PARSE=1
 
 # Enable checking that add-ons are signed by the trusted root
 MOZ_ADDON_SIGNING=1
 
 # Include the DevTools client, not just the server (which is the default)
 MOZ_DEVTOOLS=all
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -221,17 +221,16 @@
 #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
-@RESPATH@/components/dom_payment.xpt
 @RESPATH@/components/dom_presentation.xpt
 @RESPATH@/components/downloads.xpt
 @RESPATH@/components/editor.xpt
 @RESPATH@/components/embed_base.xpt
 @RESPATH@/components/extensions.xpt
 @RESPATH@/components/exthandler.xpt
 @RESPATH@/components/exthelper.xpt
 @RESPATH@/components/fastfind.xpt
@@ -540,20 +539,16 @@
 @RESPATH@/components/RemoteWebNavigation.js
 
 @RESPATH@/components/SlowScriptDebug.manifest
 @RESPATH@/components/SlowScriptDebug.js
 
 @RESPATH@/components/TVSimulatorService.js
 @RESPATH@/components/TVSimulatorService.manifest
 
-@RESPATH@/components/Payment.js
-@RESPATH@/components/PaymentFlowInfo.js
-@RESPATH@/components/Payment.manifest
-
 #ifdef MOZ_WEBRTC
 @RESPATH@/components/PeerConnection.js
 @RESPATH@/components/PeerConnection.manifest
 #endif
 
 @RESPATH@/chrome/marionette@JAREXT@
 @RESPATH@/chrome/marionette.manifest
 @RESPATH@/components/MarionetteComponents.manifest
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -14553,47 +14553,16 @@ nsDocShell::ChannelIntercepted(nsIInterc
                           isReload, isSubresourceLoad, error);
   if (NS_WARN_IF(error.Failed())) {
     return error.StealNSResult();
   }
 
   return NS_OK;
 }
 
-NS_IMETHODIMP
-nsDocShell::SetPaymentRequestId(const nsAString& aPaymentRequestId)
-{
-  mPaymentRequestId = aPaymentRequestId;
-  return NS_OK;
-}
-
-nsString
-nsDocShell::GetInheritedPaymentRequestId()
-{
-  if (!mPaymentRequestId.IsEmpty()) {
-    return mPaymentRequestId;
-  }
-
-  nsCOMPtr<nsIDocShellTreeItem> parentAsItem;
-  GetSameTypeParent(getter_AddRefs(parentAsItem));
-
-  nsCOMPtr<nsIDocShell> parent = do_QueryInterface(parentAsItem);
-  if (!parent) {
-    return mPaymentRequestId;
-  }
-  return static_cast<nsDocShell*>(parent.get())->GetInheritedPaymentRequestId();
-}
-
-NS_IMETHODIMP
-nsDocShell::GetPaymentRequestId(nsAString& aPaymentRequestId)
-{
-  aPaymentRequestId = GetInheritedPaymentRequestId();
-  return NS_OK;
-}
-
 bool
 nsDocShell::InFrameSwap()
 {
   RefPtr<nsDocShell> shell = this;
   do {
     if (shell->mInFrameSwap) {
       return true;
     }
--- a/docshell/base/nsDocShell.h
+++ b/docshell/base/nsDocShell.h
@@ -1012,20 +1012,16 @@ protected:
 
   // This represents the state of private browsing in the docshell.
   // Currently treated as a binary value: 1 - in private mode, 0 - not private mode
   // On content docshells mPrivateBrowsingId == mOriginAttributes.mPrivateBrowsingId
   // On chrome docshells this value will be set, but not have the corresponding
   // origin attribute set.
   uint32_t mPrivateBrowsingId;
 
-  nsString mPaymentRequestId;
-
-  nsString GetInheritedPaymentRequestId();
-
   nsString mInterceptedDocumentId;
 
 private:
   nsCString mForcedCharset;
   nsCString mParentCharset;
   int32_t mParentCharsetSource;
   nsCOMPtr<nsIPrincipal> mParentCharsetPrincipal;
   nsTObserverArray<nsWeakPtr> mPrivacyObservers;
--- a/docshell/base/nsIDocShell.idl
+++ b/docshell/base/nsIDocShell.idl
@@ -1069,21 +1069,16 @@ interface nsIDocShell : nsIDocShellTreeI
 
   /**
    * This attribute determines whether a document which is not about:blank has
    * already be loaded by this docShell.
    */
   [infallible] readonly attribute boolean hasLoadedNonBlankURI;
 
   /**
-   * Holds the id of the payment request associated with this docshell if any.
-   */
-  attribute DOMString paymentRequestId;
-
-  /**
    * Allow usage of -moz-window-dragging:drag for content docshells.
    * True for top level chrome docshells. Throws if set to false with
    * top level chrome docshell.
    */
   attribute boolean windowDraggingAllowed;
 
   /**
    * Sets/gets the current scroll restoration mode.
--- a/dom/base/Navigator.cpp
+++ b/dom/base/Navigator.cpp
@@ -119,21 +119,16 @@
 #include "mozilla/EMEUtils.h"
 #include "mozilla/DetailedPromise.h"
 #endif
 
 #ifdef MOZ_WIDGET_GONK
 #include <cutils/properties.h>
 #endif
 
-#ifdef MOZ_PAY
-#include "nsIPaymentContentHelperService.h"
-#include "mozilla/dom/DOMRequest.h"
-#endif
-
 namespace mozilla {
 namespace dom {
 
 static bool sVibratorEnabled   = false;
 static uint32_t sMaxVibrateMS  = 0;
 static uint32_t sMaxVibrateListLen = 0;
 static const char* kVibrationPermissionType = "vibration";
 
@@ -2268,46 +2263,16 @@ Navigator::IsE10sEnabled(JSContext* aCx,
 
 bool
 Navigator::MozE10sEnabled()
 {
   // This will only be called if IsE10sEnabled() is true.
   return true;
 }
 
-#ifdef MOZ_PAY
-already_AddRefed<DOMRequest>
-Navigator::MozPay(JSContext* aCx,
-                  JS::Handle<JS::Value> aJwts,
-                  ErrorResult& aRv)
-{
-  if (!mWindow || !mWindow->GetDocShell()) {
-    aRv.Throw(NS_ERROR_UNEXPECTED);
-    return nullptr;
-  }
-
-  nsresult rv;
-  nsCOMPtr<nsIPaymentContentHelperService> service =
-    do_GetService("@mozilla.org/payment/content-helper-service;1", &rv);
-  if (!service) {
-    aRv.Throw(rv);
-    return nullptr;
-  }
-
-  RefPtr<nsIDOMDOMRequest> request;
-  rv = service->Pay(mWindow, aJwts, getter_AddRefs(request));
-  if (NS_FAILED(rv)) {
-    aRv.Throw(rv);
-    return nullptr;
-  }
-
-  return request.forget().downcast<DOMRequest>();
-}
-#endif // MOZ_PAY
-
 /* static */
 already_AddRefed<nsPIDOMWindowInner>
 Navigator::GetWindowFromGlobal(JSObject* aGlobal)
 {
   nsCOMPtr<nsPIDOMWindowInner> win =
     do_QueryInterface(nsJSUtils::GetStaticScriptGlobal(aGlobal));
   MOZ_ASSERT(!win || win->IsInnerWindow());
   return win.forget();
--- a/dom/base/Navigator.h
+++ b/dom/base/Navigator.h
@@ -289,22 +289,16 @@ public:
                               ErrorResult& aRv);
 
   already_AddRefed<ServiceWorkerContainer> ServiceWorker();
 
   void GetLanguages(nsTArray<nsString>& aLanguages);
 
   bool MozE10sEnabled();
 
-#ifdef MOZ_PAY
-  already_AddRefed<DOMRequest> MozPay(JSContext* aCx,
-                                      JS::Handle<JS::Value> aJwts,
-                                      ErrorResult& aRv);
-#endif // MOZ_PAY
-
   static void GetAcceptLanguages(nsTArray<nsString>& aLanguages);
 
   // WebIDL helper methods
   static bool HasWakeLockSupport(JSContext* /* unused*/, JSObject* /*unused */);
   static bool HasCameraSupport(JSContext* /* unused */,
                                JSObject* aGlobal);
   static bool HasWifiManagerSupport(JSContext* /* unused */,
                                   JSObject* aGlobal);
--- a/dom/moz.build
+++ b/dom/moz.build
@@ -127,19 +127,16 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk
         'wifi',
     ]
 
 if CONFIG['MOZ_B2G_RIL']:
     DIRS += [
         'wappush',
     ]
 
-if CONFIG['MOZ_PAY']:
-    DIRS += ['payment']
-
 if CONFIG['MOZ_NFC']:
     DIRS += ['nfc']
 
 if CONFIG['MOZ_SIMPLEPUSH']:
     DIRS += ['simplepush']
 else:
     DIRS += ['push']
 
deleted file mode 100644
--- a/dom/payment/Payment.js
+++ /dev/null
@@ -1,120 +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/. */
-
-"use strict";
-
-const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/DOMRequestHelper.jsm");
-
-const PAYMENT_IPC_MSG_NAMES = ["Payment:Success",
-                               "Payment:Failed"];
-
-const PREF_DEBUG = "dom.payment.debug";
-
-XPCOMUtils.defineLazyServiceGetter(this, "cpmm",
-                                   "@mozilla.org/childprocessmessagemanager;1",
-                                   "nsIMessageSender");
-
-var _debug;
-try {
-  _debug = Services.prefs.getPrefType(PREF_DEBUG) == Ci.nsIPrefBranch.PREF_BOOL
-           && Services.prefs.getBoolPref(PREF_DEBUG);
-} catch(e) {
-  _debug = false;
-}
-
-function LOG(s) {
-  if (!_debug) {
-    return;
-  }
-  dump("-*- PaymentContentHelper: " + s + "\n");
-}
-
-function PaymentContentHelper(aWindow) {
-  this.initDOMRequestHelper(aWindow, PAYMENT_IPC_MSG_NAMES);
-};
-
-PaymentContentHelper.prototype = {
-  __proto__: DOMRequestIpcHelper.prototype,
-
-  receiveMessage: function receiveMessage(aMessage) {
-    let name = aMessage.name;
-    let msg = aMessage.json;
-    if (_debug) {
-      LOG("Received message '" + name + "': " + JSON.stringify(msg));
-    }
-    let requestId = msg.requestId;
-    let request = this.takeRequest(requestId);
-    if (!request) {
-      return;
-    }
-    switch (name) {
-      case "Payment:Success":
-        Services.DOMRequest.fireSuccess(request, msg.result);
-        break;
-      case "Payment:Failed":
-        Services.DOMRequest.fireError(request, msg.errorMsg);
-        break;
-    }
-  },
-};
-
-function PaymentContentHelperService() {
-};
-
-PaymentContentHelperService.prototype = {
-  QueryInterface: XPCOMUtils.generateQI([Ci.nsIPaymentContentHelperService]),
-  classID: Components.ID("{80035846-6732-4fcc-961b-f336b65218f4}"),
-  contractID: "@mozilla.org/payment/content-helper-service;1",
-
-  _xpcom_factory: XPCOMUtils.generateSingletonFactory(PaymentContentHelperService),
-
-  // keys are windows and values are PaymentContentHelpers
-  helpers: new WeakMap(),
-
-  // nsINavigatorPayment
-  pay: function pay(aWindow, aJwts) {
-    let requestHelper = this.helpers.get(aWindow);
-    if (!requestHelper) {
-      requestHelper = new PaymentContentHelper(aWindow);
-      this.helpers.set(aWindow, requestHelper);
-    }
-    let request = requestHelper.createRequest();
-    let requestId = requestHelper.getRequestId(request);
-
-    let docShell = aWindow.QueryInterface(Ci.nsIInterfaceRequestor)
-                   .getInterface(Ci.nsIWebNavigation)
-                   .QueryInterface(Ci.nsIDocShell);
-    if (!docShell.isActive) {
-      if (_debug) {
-        LOG("The caller application is a background app. No request will be " +
-            "sent");
-      }
-
-      let runnable = {
-        run: function run() {
-          Services.DOMRequest.fireError(request, "BACKGROUND_APP");
-        }
-      }
-      Services.tm.currentThread.dispatch(runnable,
-                                         Ci.nsIThread.DISPATCH_NORMAL);
-      return request;
-    }
-
-    if (!Array.isArray(aJwts)) {
-      aJwts = [aJwts];
-    }
-
-    cpmm.sendAsyncMessage("Payment:Pay", {
-      jwts: aJwts,
-      requestId: requestId
-    });
-    return request;
-  },
-};
-
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory([PaymentContentHelperService]);
deleted file mode 100644
--- a/dom/payment/Payment.jsm
+++ /dev/null
@@ -1,422 +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/. */
-
-"use strict";
-
-const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource://gre/modules/Services.jsm");
-
-this.EXPORTED_SYMBOLS = [];
-
-const PAYMENT_IPC_MSG_NAMES = ["Payment:Pay",
-                               "Payment:Success",
-                               "Payment:Failed"];
-
-const PREF_PAYMENTPROVIDERS_BRANCH = "dom.payment.provider.";
-const PREF_PAYMENT_BRANCH = "dom.payment.";
-const PREF_DEBUG = "dom.payment.debug";
-
-XPCOMUtils.defineLazyServiceGetter(this, "ppmm",
-                                   "@mozilla.org/parentprocessmessagemanager;1",
-                                   "nsIMessageListenerManager");
-
-XPCOMUtils.defineLazyServiceGetter(this, "prefService",
-                                   "@mozilla.org/preferences-service;1",
-                                   "nsIPrefService");
-
-var PaymentManager =  {
-  init: function init() {
-    // Payment providers data are stored as a preference.
-    this.registeredProviders = null;
-
-    this.messageManagers = {};
-
-    // The dom.payment.skipHTTPSCheck pref is supposed to be used only during
-    // development process. This preference should not be active for a
-    // production build.
-    let paymentPrefs = prefService.getBranch(PREF_PAYMENT_BRANCH);
-    this.checkHttps = true;
-    try {
-      if (paymentPrefs.getPrefType("skipHTTPSCheck")) {
-        this.checkHttps = !paymentPrefs.getBoolPref("skipHTTPSCheck");
-      }
-    } catch(e) {}
-
-    for (let msgname of PAYMENT_IPC_MSG_NAMES) {
-      ppmm.addMessageListener(msgname, this);
-    }
-
-    Services.obs.addObserver(this, "xpcom-shutdown", false);
-
-    try {
-      this._debug =
-        Services.prefs.getPrefType(PREF_DEBUG) == Ci.nsIPrefBranch.PREF_BOOL
-        && Services.prefs.getBoolPref(PREF_DEBUG);
-    } catch(e) {
-      this._debug = false;
-    }
-  },
-
-  /**
-   * Process a message from the content process.
-   */
-  receiveMessage: function receiveMessage(aMessage) {
-    let name = aMessage.name;
-    let msg = aMessage.json;
-    if (this._debug) {
-      this.LOG("Received '" + name + "' message from content process");
-    }
-
-    switch (name) {
-      case "Payment:Pay": {
-        // First of all, we register the payment providers.
-        if (!this.registeredProviders) {
-          this.registeredProviders = {};
-          this.registerPaymentProviders();
-        }
-
-        // We save the message target message manager so we can later dispatch
-        // back messages without broadcasting to all child processes.
-        let requestId = msg.requestId;
-        this.messageManagers[requestId] = aMessage.target;
-
-        // We check the jwt type and look for a match within the
-        // registered payment providers to get the correct payment request
-        // information.
-        let paymentRequests = [];
-        let jwtTypes = [];
-        for (let i in msg.jwts) {
-          let pr = this.getPaymentRequestInfo(requestId, msg.jwts[i]);
-          if (!pr) {
-            continue;
-          }
-          // We consider jwt type repetition an error.
-          if (jwtTypes[pr.type]) {
-            this.paymentFailed(requestId,
-                               "PAY_REQUEST_ERROR_DUPLICATED_JWT_TYPE");
-            return;
-          }
-          jwtTypes[pr.type] = true;
-          paymentRequests.push(pr);
-        }
-
-        if (!paymentRequests.length) {
-          this.paymentFailed(requestId,
-                             "PAY_REQUEST_ERROR_NO_VALID_REQUEST_FOUND");
-          return;
-        }
-
-        // After getting the list of valid payment requests, we ask the user
-        // for confirmation before sending any request to any payment provider.
-        // If there is more than one choice, we also let the user select the one
-        // that he prefers.
-        let glue = Cc["@mozilla.org/payment/ui-glue;1"]
-                   .createInstance(Ci.nsIPaymentUIGlue);
-        if (!glue) {
-          if (this._debug) {
-            this.LOG("Could not create nsIPaymentUIGlue instance");
-          }
-          this.paymentFailed(requestId,
-                             "INTERNAL_ERROR_CREATE_PAYMENT_GLUE_FAILED");
-          return;
-        }
-
-        let confirmPaymentSuccessCb = function successCb(aRequestId,
-                                                         aResult) {
-          // Get the appropriate payment provider data based on user's choice.
-          let selectedProvider = this.registeredProviders[aResult];
-          if (!selectedProvider || !selectedProvider.uri) {
-            if (this._debug) {
-              this.LOG("Could not retrieve a valid provider based on user's " +
-                        "selection");
-            }
-            this.paymentFailed(aRequestId,
-                               "INTERNAL_ERROR_NO_VALID_SELECTED_PROVIDER");
-            return;
-          }
-
-          let jwt;
-          for (let i in paymentRequests) {
-            if (paymentRequests[i].type == aResult) {
-              jwt = paymentRequests[i].jwt;
-              break;
-            }
-          }
-          if (!jwt) {
-            if (this._debug) {
-              this.LOG("The selected request has no JWT information " +
-                        "associated");
-            }
-            this.paymentFailed(aRequestId,
-                               "INTERNAL_ERROR_NO_JWT_ASSOCIATED_TO_REQUEST");
-            return;
-          }
-
-          this.showPaymentFlow(aRequestId, selectedProvider, jwt);
-        };
-
-        let confirmPaymentErrorCb = this.paymentFailed;
-
-        glue.confirmPaymentRequest(requestId,
-                                   paymentRequests,
-                                   confirmPaymentSuccessCb.bind(this),
-                                   confirmPaymentErrorCb.bind(this));
-        break;
-      }
-      case "Payment:Success":
-      case "Payment:Failed": {
-        let mm = this.messageManagers[msg.requestId];
-        mm.sendAsyncMessage(name, {
-          requestId: msg.requestId,
-          result: msg.result,
-          errorMsg: msg.errorMsg
-        });
-        break;
-      }
-    }
-  },
-
-  /**
-   * Helper function to register payment providers stored as preferences.
-   */
-  registerPaymentProviders: function registerPaymentProviders() {
-    let paymentProviders = prefService
-                           .getBranch(PREF_PAYMENTPROVIDERS_BRANCH)
-                           .getChildList("");
-
-    // First get the numbers of the providers by getting all ###.uri prefs.
-    let nums = [];
-    for (let i in paymentProviders) {
-      let match = /^(\d+)\.uri$/.exec(paymentProviders[i]);
-      if (!match) {
-        continue;
-      } else {
-        nums.push(match[1]);
-      }
-    }
-
-#ifdef MOZ_B2G
-    let appsService = Cc["@mozilla.org/AppsService;1"]
-                        .getService(Ci.nsIAppsService);
-    let systemAppId = Ci.nsIScriptSecurityManager.NO_APP_ID;
-
-    try {
-      let manifestURL = Services.prefs.getCharPref("b2g.system_manifest_url");
-      systemAppId = appsService.getAppLocalIdByManifestURL(manifestURL);
-      this.LOG("System app id=" + systemAppId);
-    } catch(e) {}
-#endif
-
-    // Now register the payment providers.
-    for (let i in nums) {
-      let branch = prefService
-                   .getBranch(PREF_PAYMENTPROVIDERS_BRANCH + nums[i] + ".");
-      let vals = branch.getChildList("");
-      if (vals.length == 0) {
-        return;
-      }
-      try {
-        let type = branch.getCharPref("type");
-        if (type in this.registeredProviders) {
-          continue;
-        }
-        let provider = this.registeredProviders[type] = {
-          name: branch.getCharPref("name"),
-          uri: branch.getCharPref("uri"),
-          description: branch.getCharPref("description"),
-          requestMethod: branch.getCharPref("requestMethod")
-        };
-
-#ifdef MOZ_B2G
-        // Let this payment provider access the firefox-accounts API when
-        // it's loaded in the trusted UI.
-        if (systemAppId != Ci.nsIScriptSecurityManager.NO_APP_ID) {
-          this.LOG("Granting firefox-accounts permission to " + provider.uri);
-          let uri = Services.io.newURI(provider.uri, null, null);
-          let attrs = {appId: systemAppId, inIsolatedMozBrowser: true};
-          let principal =
-            Services.scriptSecurityManager.createCodebasePrincipal(uri, attrs);
-
-          Services.perms.addFromPrincipal(principal, "firefox-accounts",
-                                          Ci.nsIPermissionManager.ALLOW_ACTION,
-                                          Ci.nsIPermissionManager.EXPIRE_SESSION);
-        }
-#endif
-
-        if (this._debug) {
-          this.LOG("Registered Payment Providers: " +
-                    JSON.stringify(this.registeredProviders[type]));
-        }
-      } catch (ex) {
-        if (this._debug) {
-          this.LOG("An error ocurred registering a payment provider. " + ex);
-        }
-      }
-    }
-  },
-
-  /**
-   * Helper for sending a Payment:Failed message to the parent process.
-   */
-  paymentFailed: function paymentFailed(aRequestId, aErrorMsg) {
-    let mm = this.messageManagers[aRequestId];
-    mm.sendAsyncMessage("Payment:Failed", {
-      requestId: aRequestId,
-      errorMsg: aErrorMsg
-    });
-  },
-
-  /**
-   * Helper function to get the payment request info according to the jwt
-   * type. Payment provider's data is stored as a preference.
-   */
-  getPaymentRequestInfo: function getPaymentRequestInfo(aRequestId, aJwt) {
-    if (!aJwt) {
-      this.paymentFailed(aRequestId, "INTERNAL_ERROR_CALL_WITH_MISSING_JWT");
-      return true;
-    }
-
-    // First thing, we check that the jwt type is an allowed type and has a
-    // payment provider flow information associated.
-
-    // A jwt string consists in three parts separated by period ('.'): header,
-    // payload and signature.
-    let segments = aJwt.split('.');
-    if (segments.length !== 3) {
-      if (this._debug) {
-        this.LOG("Error getting payment provider's uri. " +
-                  "Not enough or too many segments");
-      }
-      this.paymentFailed(aRequestId,
-                         "PAY_REQUEST_ERROR_WRONG_SEGMENTS_COUNT");
-      return true;
-    }
-
-    let payloadObject;
-    try {
-      // We only care about the payload segment, which contains the jwt type
-      // that should match with any of the stored payment provider's data and
-      // the payment request information to be shown to the user.
-      // Before decoding the JWT string we need to normalize it to be compliant
-      // with RFC 4648.
-      segments[1] = segments[1].replace(/-/g, "+").replace(/_/g, "/");
-      let payload = atob(segments[1]);
-      if (this._debug) {
-        this.LOG("Payload " + payload);
-      }
-      if (!payload.length) {
-        this.paymentFailed(aRequestId, "PAY_REQUEST_ERROR_EMPTY_PAYLOAD");
-        return true;
-      }
-      payloadObject = JSON.parse(payload);
-      if (!payloadObject) {
-        this.paymentFailed(aRequestId,
-                           "PAY_REQUEST_ERROR_ERROR_PARSING_JWT_PAYLOAD");
-        return true;
-      }
-    } catch (e) {
-      this.paymentFailed(aRequestId,
-                         "PAY_REQUEST_ERROR_ERROR_DECODING_JWT");
-      return true;
-    }
-
-    if (!payloadObject.typ) {
-      this.paymentFailed(aRequestId,
-                         "PAY_REQUEST_ERROR_NO_TYP_PARAMETER");
-      return true;
-    }
-
-    if (!payloadObject.request) {
-      this.paymentFailed(aRequestId,
-                         "PAY_REQUEST_ERROR_NO_REQUEST_PARAMETER");
-      return true;
-    }
-
-    // Once we got the jwt 'typ' value we look for a match within the payment
-    // providers stored preferences. If the jwt 'typ' is not recognized as one
-    // of the allowed values for registered payment providers, we skip the jwt
-    // validation but we don't fire any error. This way developers might have
-    // a default set of well formed JWTs that might be used in different B2G
-    // devices with a different set of allowed payment providers.
-    let provider = this.registeredProviders[payloadObject.typ];
-    if (!provider) {
-      if (this._debug) {
-        this.LOG("Not registered payment provider for jwt type: " +
-                  payloadObject.typ);
-      }
-      return false;
-    }
-
-    if (!provider.uri || !provider.name) {
-      this.paymentFailed(aRequestId,
-                         "INTERNAL_ERROR_WRONG_REGISTERED_PAY_PROVIDER");
-      return true;
-    }
-
-    // We only allow https for payment providers uris.
-    if (this.checkHttps && !/^https/.exec(provider.uri.toLowerCase())) {
-      // We should never get this far.
-      if (this._debug) {
-        this.LOG("Payment provider uris must be https: " + provider.uri);
-      }
-      this.paymentFailed(aRequestId,
-                         "INTERNAL_ERROR_NON_HTTPS_PROVIDER_URI");
-      return true;
-    }
-
-    let pldRequest = payloadObject.request;
-    return { jwt: aJwt, type: payloadObject.typ, providerName: provider.name };
-  },
-
-  showPaymentFlow: function showPaymentFlow(aRequestId,
-                                            aPaymentProvider,
-                                            aJwt) {
-    let paymentFlowInfo = Cc["@mozilla.org/payment/flow-info;1"]
-                          .createInstance(Ci.nsIPaymentFlowInfo);
-    paymentFlowInfo.uri = aPaymentProvider.uri;
-    paymentFlowInfo.requestMethod = aPaymentProvider.requestMethod;
-    paymentFlowInfo.jwt = aJwt;
-    paymentFlowInfo.name = aPaymentProvider.name;
-    paymentFlowInfo.description = aPaymentProvider.description;
-
-    let glue = Cc["@mozilla.org/payment/ui-glue;1"]
-               .createInstance(Ci.nsIPaymentUIGlue);
-    if (!glue) {
-      if (this._debug) {
-        this.LOG("Could not create nsIPaymentUIGlue instance");
-      }
-      this.paymentFailed(aRequestId,
-                         "INTERNAL_ERROR_CREATE_PAYMENT_GLUE_FAILED");
-      return false;
-    }
-    glue.showPaymentFlow(aRequestId,
-                         paymentFlowInfo,
-                         this.paymentFailed.bind(this));
-  },
-
-  // nsIObserver
-
-  observe: function observe(subject, topic, data) {
-    if (topic == "xpcom-shutdown") {
-      for (let msgname of PAYMENT_IPC_MSG_NAMES) {
-        ppmm.removeMessageListener(msgname, this);
-      }
-      this.registeredProviders = null;
-      this.messageManagers = null;
-
-      Services.obs.removeObserver(this, "xpcom-shutdown");
-    }
-  },
-
-  LOG: function LOG(s) {
-    if (!this._debug) {
-      return;
-    }
-    dump("-*- PaymentManager: " + s + "\n");
-  }
-};
-
-PaymentManager.init();
deleted file mode 100644
--- a/dom/payment/Payment.manifest
+++ /dev/null
@@ -1,8 +0,0 @@
-component {80035846-6732-4fcc-961b-f336b65218f4} Payment.js
-contract @mozilla.org/payment/content-helper-service;1 {80035846-6732-4fcc-961b-f336b65218f4}
-
-component {b8bce4e7-fbf0-4719-a634-b1bf9018657c} PaymentFlowInfo.js
-contract @mozilla.org/payment/flow-info;1 {b8bce4e7-fbf0-4719-a634-b1bf9018657c}
-
-component {82144756-72ab-45b7-8621-f3dad431dd2f} PaymentProvider.js
-contract @mozilla.org/payment/provider;1 {82144756-72ab-45b7-8621-f3dad431dd2f}
deleted file mode 100644
--- a/dom/payment/PaymentFlowInfo.js
+++ /dev/null
@@ -1,24 +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/. */
-
-"use strict";
-
-const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-
-function PaymentFlowInfo() {
-};
-
-PaymentFlowInfo.prototype = {
-  QueryInterface: XPCOMUtils.generateQI([Ci.nsIPaymentFlowInfo]),
-  classID: Components.ID("{b8bce4e7-fbf0-4719-a634-b1bf9018657c}"),
-  uri: null,
-  jwt: null,
-  requestMethod: null,
-  name: null,
-  description: null
-};
-
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory([PaymentFlowInfo]);
deleted file mode 100644
--- a/dom/payment/PaymentProvider.js
+++ /dev/null
@@ -1,306 +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/. */
-
-"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.defineLazyServiceGetter(this, "cpmm",
-                                   "@mozilla.org/childprocessmessagemanager;1",
-                                   "nsIMessageSender");
-
-XPCOMUtils.defineLazyServiceGetter(this, "uuidgen",
-                                   "@mozilla.org/uuid-generator;1",
-                                   "nsIUUIDGenerator");
-
-
-const PREF_DEBUG = "dom.payment.debug";
-
-var _debug;
-try {
-  _debug = Services.prefs.getPrefType(PREF_DEBUG) == Ci.nsIPrefBranch.PREF_BOOL
-           && Services.prefs.getBoolPref(PREF_DEBUG);
-} catch(e) {
-  _debug = false;
-}
-
-function DEBUG(s) {
-  if (!_debug) {
-    return;
-  }
-  dump("== Payment Provider == " + s + "\n");
-}
-
-function DEBUG_E(s) {
-  dump("== Payment Provider ERROR == " + s + "\n");
-}
-
-const kPaymentFlowCancelled = "payment-flow-cancelled";
-
-function PaymentProvider() {
-}
-
-PaymentProvider.prototype = {
-  init: function(aWindow) {
-    let docshell = aWindow.QueryInterface(Ci.nsIInterfaceRequestor)
-                          .getInterface(Ci.nsIWebNavigation)
-                          .QueryInterface(Ci.nsIDocShell);
-    this._requestId = docshell.paymentRequestId;
-    this._oncancelObserver = this.oncancel.bind(this);
-    Services.obs.addObserver(this._oncancelObserver,
-                             kPaymentFlowCancelled,
-                             false);
-    this._strategy = Cc["@mozilla.org/payment/provider-strategy;1"]
-                       .createInstance(Ci.nsIPaymentProviderStrategy);
-    this._window = aWindow;
-  },
-
-  paymentSuccess: function(aResult) {
-    _debug && DEBUG("paymentSuccess " + aResult);
-    let glue = Cc["@mozilla.org/payment/ui-glue;1"]
-                 .createInstance(Ci.nsIPaymentUIGlue);
-    glue.closePaymentFlow(this._requestId).then(() => {
-      if (!this._requestId) {
-        return;
-      }
-      cpmm.sendAsyncMessage("Payment:Success", { result: aResult,
-                                                 requestId: this._requestId });
-    });
-  },
-
-  paymentFailed: function(aError) {
-    _debug && DEBUG("paymentFailed " + aError);
-    let glue = Cc["@mozilla.org/payment/ui-glue;1"]
-                 .createInstance(Ci.nsIPaymentUIGlue);
-    glue.closePaymentFlow(this._requestId).then(() => {
-      if (!this._requestId) {
-        return;
-      }
-      cpmm.sendAsyncMessage("Payment:Failed", { errorMsg: aError,
-                                                requestId: this._requestId });
-    });
-
-  },
-
-  get paymentServiceId() {
-    return this._strategy.paymentServiceId;
-  },
-
-  set paymentServiceId(aServiceId) {
-    this._strategy.paymentServiceId = aServiceId;
-  },
-
-  /**
-   * We expose to the payment provider the information of all the SIMs
-   * available in the device. iccInfo is an object of this form:
-   * {
-   *   "serviceId1": {
-   *      mcc: <string>,
-   *      mnc: <string>,
-   *      iccId: <string>,
-   *      dataPrimary: <boolean>
-   *    },
-   *   "serviceIdN": {...}
-   * }
-   */
-  get iccInfo() {
-    return this._strategy.iccInfo;
-  },
-
-  oncancel: function() {
-    _debug && DEBUG("Cleaning up!");
-
-    this._strategy.cleanup();
-    Services.obs.removeObserver(this._oncancelObserver, kPaymentFlowCancelled);
-    if (this._cleanup) {
-      this._cleanup();
-    }
-  },
-
-  classID: Components.ID("{82144756-72ab-45b7-8621-f3dad431dd2f}"),
-
-  contractID: "@mozilla.org/payment/provider;1",
-
-  QueryInterface: XPCOMUtils.generateQI([Ci.nsISupports,
-                                         Ci.nsIObserver,
-                                         Ci.nsIDOMGlobalPropertyInitializer])
-};
-
-#if defined(MOZ_B2G_RIL) || defined(MOZ_WIDGET_ANDROID)
-
-XPCOMUtils.defineLazyServiceGetter(this, "smsService",
-                                   "@mozilla.org/sms/smsservice;1",
-                                   "nsISmsService");
-
-const kSilentSmsReceivedTopic = "silent-sms-received";
-
-// In order to send messages through nsISmsService, we need to implement
-// nsIMobileMessageCallback, as the WebSMS API implementation is not usable
-// from JS.
-function SilentSmsRequest(aDOMRequest) {
-  this.request = aDOMRequest;
-}
-
-SilentSmsRequest.prototype = {
-
-  QueryInterface: XPCOMUtils.generateQI([Ci.nsIMobileMessageCallback]),
-
-  classID: Components.ID("{1d58889c-5660-4cca-a8fd-97ef63e5d3b2}"),
-
-  notifyMessageSent: function notifyMessageSent(aMessage) {
-    _debug && DEBUG("Silent message successfully sent");
-    Services.DOMRequest.fireSuccessAsync(this.request, aMessage);
-  },
-
-  notifySendMessageFailed: function notifySendMessageFailed(aError) {
-    DEBUG_E("Error sending silent message " + aError);
-    Services.DOMRequest.fireErrorAsync(this.request, aError);
-  }
-};
-
-PaymentProvider.prototype._silentNumbers = null;
-
-PaymentProvider.prototype._silentSmsObservers = null;
-
-PaymentProvider.prototype.sendSilentSms = function(aNumber, aMessage) {
-  _debug && DEBUG("Sending silent message " + aNumber + " - " + aMessage);
-
-  let request = Services.DOMRequest.createRequest(this._window);
-
-  if (this._strategy.paymentServiceId === null) {
-    DEBUG_E("No payment service ID set. Cannot send silent SMS");
-    Services.DOMRequest.fireErrorAsync(request,
-                                       "NO_PAYMENT_SERVICE_ID");
-    return request;
-  }
-
-  let smsRequest = new SilentSmsRequest(request);
-  smsService.send(this._strategy.paymentServiceId, aNumber, aMessage, true,
-                  smsRequest);
-  return request;
-};
-
-PaymentProvider.prototype.observeSilentSms = function(aNumber, aCallback) {
-  _debug && DEBUG("observeSilentSms " + aNumber);
-
-  if (!this._silentSmsObservers) {
-    this._silentSmsObservers = {};
-    this._silentNumbers = [];
-    this._onSilentSmsObserver = this._onSilentSms.bind(this);
-    Services.obs.addObserver(this._onSilentSmsObserver,
-                             kSilentSmsReceivedTopic,
-                             false);
-  }
-
-  if (!this._silentSmsObservers[aNumber]) {
-    this._silentSmsObservers[aNumber] = [];
-    this._silentNumbers.push(aNumber);
-    smsService.addSilentNumber(aNumber);
-  }
-
-  if (this._silentSmsObservers[aNumber].indexOf(aCallback) == -1) {
-    this._silentSmsObservers[aNumber].push(aCallback);
-  }
-  return;
-};
-
-PaymentProvider.prototype.removeSilentSmsObserver = function(aNumber, aCallback) {
-  _debug && DEBUG("removeSilentSmsObserver " + aNumber);
-
-  if (!this._silentSmsObservers || !this._silentSmsObservers[aNumber]) {
-    _debug && DEBUG("No observers for " + aNumber);
-    return;
-  }
-
-  let index = this._silentSmsObservers[aNumber].indexOf(aCallback);
-  if (index != -1) {
-    this._silentSmsObservers[aNumber].splice(index, 1);
-    if (this._silentSmsObservers[aNumber].length == 0) {
-      this._silentSmsObservers[aNumber] = null;
-      this._silentNumbers.splice(this._silentNumbers.indexOf(aNumber), 1);
-      smsService.removeSilentNumber(aNumber);
-    }
-  } else if (_debug) {
-    DEBUG("No callback found for " + aNumber);
-  }
-  return;
-};
-
-PaymentProvider.prototype._onSilentSms = function(aSubject, aTopic, aData) {
-  if (!aSubject || !(aSubject instanceof Ci.nsISmsMessage)) {
-    _debug && DEBUG("Invalid subject when receiving silent message!");
-    return;
-  }
-
-  let message = aSubject.QueryInterface(Ci.nsISmsMessage);
-
-  _debug && DEBUG("Got silent message! " + message.sender + " - " + message.body);
-
-  let number = message.sender;
-  if (!number || this._silentNumbers.indexOf(number) == -1) {
-    _debug && DEBUG("No observers for " + number);
-    return;
-  }
-
-  // If the service ID is null it means that the payment provider asked the
-  // user for her MSISDN, so we are in a MT only SMS auth flow. In this case
-  // we manually set the service ID to the one corresponding with the SIM
-  // that received the SMS.
-  if (this._strategy.paymentServiceId === null) {
-    let i = 0;
-    while(i < gRil.numRadioInterfaces) {
-      if (this.iccInfo[i].iccId === message.iccId) {
-        this._strategy.paymentServiceId = i;
-        break;
-      }
-      i++;
-    }
-  }
-
-  this._silentSmsObservers[number].forEach(function(callback) {
-    callback({
-      iccId: message.iccId,
-      sender: message.sender,
-      body: message.body,
-      timestamp: message.timestamp,
-      sentTimestamp: message.sentTimestamp
-    });
-  });
-};
-
-PaymentProvider.prototype._cleanup = function() {
-  if (!this._silentNumbers) {
-    return;
-  }
-
-  while (this._silentNumbers.length) {
-    let number = this._silentNumbers.pop();
-    smsService.removeSilentNumber(number);
-  }
-  this._silentNumbers = null;
-  this._silentSmsObservers = null;
-  Services.obs.removeObserver(this._onSilentSmsObserver,
-                              kSilentSmsReceivedTopic);
-};
-
-#else
-
-PaymentProvider.prototype.sendSilentSms = function(aNumber, aMessage) {
-  throw Cr.NS_ERROR_NOT_IMPLEMENTED;
-};
-
-PaymentProvider.prototype.observeSilentSms = function(aNumber, aCallback) {
-  throw Cr.NS_ERROR_NOT_IMPLEMENTED;
-};
-
-PaymentProvider.prototype.removeSilentSmsObserver = function(aNumber, aCallback) {
-  throw Cr.NS_ERROR_NOT_IMPLEMENTED;
-};
-
-#endif
-
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory([PaymentProvider]);
deleted file mode 100644
--- a/dom/payment/PaymentProviderUtils.cpp
+++ /dev/null
@@ -1,30 +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/NavigatorBinding.h"
-#include "PaymentProviderUtils.h"
-#include "nsGlobalWindow.h"
-#include "nsJSUtils.h"
-#include "nsIDocShell.h"
-
-using namespace mozilla::dom;
-
-/* static */ bool
-PaymentProviderUtils::EnabledForScope(JSContext* aCx,
-                                      JSObject* aGlobal)
-{
-  nsCOMPtr<nsPIDOMWindowInner> win =
-    do_QueryInterface(nsJSUtils::GetStaticScriptGlobal(aGlobal));
-  NS_ENSURE_TRUE(win, false);
-
-  nsIDocShell *docShell = win->GetDocShell();
-  NS_ENSURE_TRUE(docShell, false);
-
-  nsString paymentRequestId;
-  docShell->GetPaymentRequestId(paymentRequestId);
-
-  return !paymentRequestId.IsEmpty();
-}
deleted file mode 100644
--- a/dom/payment/PaymentProviderUtils.h
+++ /dev/null
@@ -1,27 +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_payment_PaymentProviderEnabler_h
-#define mozilla_dom_payment_PaymentProviderEnabler_h
-
-#include "jsapi.h"
-
-struct JSContext;
-class JSObject;
-
-namespace mozilla {
-namespace dom {
-  
-class PaymentProviderUtils
-{
-public:
-  static bool EnabledForScope(JSContext*, JSObject*);
-};
-
-} // namespace dom
-} // namespace mozilla
-
-#endif // mozilla_dom_payment_PaymentProviderEnabler_h
deleted file mode 100644
--- a/dom/payment/interfaces/moz.build
+++ /dev/null
@@ -1,15 +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 += [
-    'nsIPaymentContentHelperService.idl',
-    'nsIPaymentFlowInfo.idl',
-    'nsIPaymentProviderStrategy.idl',
-    'nsIPaymentUIGlue.idl',
-]
-
-XPIDL_MODULE = 'dom_payment'
-
deleted file mode 100644
--- a/dom/payment/interfaces/nsIPaymentContentHelperService.idl
+++ /dev/null
@@ -1,18 +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 "domstubs.idl"
-
-interface nsIDOMDOMRequest;
-interface mozIDOMWindow;
-
-[scriptable, uuid(80035846-6732-4fcc-961b-f336b65218f4)]
-interface nsIPaymentContentHelperService : nsISupports
-{
-  // The 'jwts' parameter can be either a single DOMString or an array of
-  // DOMStrings. In both cases, it represents the base64url encoded and
-  // digitally signed payment information. Each payment provider should
-  // define its supported JWT format.
-  nsIDOMDOMRequest pay(in mozIDOMWindow window, in jsval jwts);
-};
deleted file mode 100644
--- a/dom/payment/interfaces/nsIPaymentFlowInfo.idl
+++ /dev/null
@@ -1,25 +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"
-
-[scriptable, uuid(f3fe3b48-fe81-4ec9-90ab-648ac9403466)]
-interface nsIPaymentFlowInfo : nsISupports
-{
-  // Payment provider uri.
-  attribute DOMString uri;
-
-  // Base64 encoded and digitally signed payment request information.
-  attribute DOMString jwt;
-
-  // Payment providers expect the payment information as GET or POST
-  // parameters.
-  attribute DOMString requestMethod;
-
-  // Payment provider name.
-  attribute DOMString name;
-
-  // Payment provider description.
-  attribute DOMString description;
-};
deleted file mode 100644
--- a/dom/payment/interfaces/nsIPaymentProviderStrategy.idl
+++ /dev/null
@@ -1,14 +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"
-
-[scriptable, uuid(c3971bd9-0fbf-48d3-9498-0ac340d0d216)]
-interface nsIPaymentProviderStrategy : nsISupports
-{
-  attribute DOMString paymentServiceId;
-  readonly attribute jsval iccInfo;
-
-  void cleanup();
-};
deleted file mode 100644
--- a/dom/payment/interfaces/nsIPaymentUIGlue.idl
+++ /dev/null
@@ -1,32 +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 nsIPaymentFlowInfo;
-
-[scriptable, function, uuid(b9afa678-71a5-4975-bcdb-0c4098730eff)]
-interface nsIPaymentUIGlueCallback : nsISupports
-{
-    void onresult(in DOMString requestId, in DOMString result);
-};
-
-[scriptable, uuid(4dc09e33-d395-4e1d-acb4-e85415181270)]
-interface nsIPaymentUIGlue : nsISupports
-{
-    // The 'paymentRequestsInfo' contains the payment request information
-    // for each JWT provided via navigator.mozPay call.
-    void confirmPaymentRequest(in DOMString requestId,
-                               in jsval paymentRequestsInfo,
-                               in nsIPaymentUIGlueCallback successCb,
-                               in nsIPaymentUIGlueCallback errorCb);
-
-    void showPaymentFlow(in DOMString requestId,
-                         in nsIPaymentFlowInfo paymentFlowInfo,
-                         in nsIPaymentUIGlueCallback errorCb);
-
-    // The promise resolves with no value as soon as the payment window is
-    // closed.
-    jsval /*Promise*/ closePaymentFlow(in DOMString requestId);
-};
deleted file mode 100644
--- a/dom/payment/moz.build
+++ /dev/null
@@ -1,39 +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/.
-
-DIRS += ['interfaces']
-
-EXPORTS.mozilla.dom += [
-    'PaymentProviderUtils.h',
-]
-
-SOURCES += [
-    'PaymentProviderUtils.cpp',
-]
-
-EXTRA_PP_JS_MODULES += [
-    'Payment.jsm',
-]
-
-EXTRA_COMPONENTS += [
-    'Payment.js',
-    'Payment.manifest',
-    'PaymentFlowInfo.js'
-]
-
-EXTRA_PP_COMPONENTS += [
-    'PaymentProvider.js'
-]
-
-FINAL_LIBRARY = 'xul'
-
-LOCAL_INCLUDES += [
-    '/dom/base'
-]
-
-XPCSHELL_TESTS_MANIFESTS += ['tests/unit/xpcshell.ini']
-
-MOCHITEST_MANIFESTS += ['tests/mochitest/mochitest.ini']
deleted file mode 100644
--- a/dom/payment/tests/mochitest/MockPaymentsUIChromeScript.js
+++ /dev/null
@@ -1,91 +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/. */
-
-const Cc = Components.classes;
-const Ci = Components.interfaces;
-const Cm = Components.manager;
-const Cu = Components.utils;
-
-const CONTRACT_ID = "@mozilla.org/payment/ui-glue;1";
-
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-
-var registrar = Cm.QueryInterface(Ci.nsIComponentRegistrar);
-var oldClassID, oldFactory;
-var newClassID = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator).generateUUID();
-var newFactory = {
-  createInstance: function(aOuter, aIID) {
-    if (aOuter) {
-      throw Components.results.NS_ERROR_NO_AGGREGATION;
-    }
-    return new MockPaymentsUIGlueInstance().QueryInterface(aIID);
-  },
-  lockFactory: function(aLock) {
-    throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
-  },
-  QueryInterface: XPCOMUtils.generateQI([Ci.nsIFactory])
-};
-
-addMessageListener("MockPaymentsUIGlue.init", function (message) {
-  try {
-    oldClassID = registrar.contractIDToCID(CONTRACT_ID);
-    oldFactory = Cm.getClassObject(oldClassID, Ci.nsIFactory);
-  } catch (ex) {
-    oldClassID = "";
-    oldFactory = null;
-    dump("TEST-INFO | can't get payments ui glue registered component, " +
-         "assuming there is none\n");
-  }
-  if (oldFactory) {
-    registrar.unregisterFactory(oldClassID, oldFactory);
-  }
-  registrar.registerFactory(newClassID, "", CONTRACT_ID, newFactory);});
-
-addMessageListener("MockPaymentsUIGlue.cleanup", function (message) {
-  if (oldClassID) {
-    registrar.registerFactory(oldClassID, "", CONTRACT_ID, null);
-  }
-});
-
-var payments = new Map();
-
-function MockPaymentsUIGlueInstance() {
-};
-
-MockPaymentsUIGlueInstance.prototype = {
-  QueryInterface: XPCOMUtils.generateQI([Ci.nsIPaymentUIGlue]),
-
-  confirmPaymentRequest: function(aRequestId,
-                                  aRequests,
-                                  aSuccessCb,
-                                  aErrorCb) {
-    aSuccessCb.onresult(aRequestId, aRequests[0].type);
-  },
-
-  showPaymentFlow: function(aRequestId,
-                            aPaymentFlowInfo,
-                            aErrorCb) {
-    let win = Services.ww.openWindow(null,
-                                     null,
-                                     "_blank",
-                                     "chrome,dialog=no,resizable,scrollbars,centerscreen",
-                                     null);
-
-    payments.set(aRequestId, win);
-    let docshell = win.QueryInterface(Ci.nsIInterfaceRequestor)
-                      .getInterface(Ci.nsIWebNavigation)
-                      .QueryInterface(Ci.nsIDocShell);
-    docshell.paymentRequestId = aRequestId;
-
-    win.document.location = aPaymentFlowInfo.uri + aPaymentFlowInfo.jwt;
-  },
-
-  closePaymentFlow: function(aRequestId) {
-    payments.get(aRequestId).close();
-    payments.delete(aRequestId);
-
-    return Promise.resolve();
-  },
-};
deleted file mode 100644
--- a/dom/payment/tests/mochitest/file_mozpayproviderchecker.html
+++ /dev/null
@@ -1,28 +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/. */
- -->
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-  <title>Test app for bug 1097928 - Check if MozPaymentProvider API is exposed</title>
-</head>
-<body>
-<div id='test'>
-<script type="application/javascript;version=1.8">
-  function receiveMessage(event) {
-    let message = JSON.parse(event.data);
-    let exposed = (navigator.mozPaymentProvider != undefined);
-    window.parent.postMessage(JSON.stringify({
-      iframeType: message.iframeType,
-      exposed: exposed
-    }), "*");
-  }
-
-  window.addEventListener("message", receiveMessage, false, true);
-</script>
-</div>
-</body>
-</html>
deleted file mode 100644
--- a/dom/payment/tests/mochitest/file_payproviderfailure.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-  <head>
-    <meta charset="utf-8">
-  </head>
-  <body>
-    <script>
-    navigator.mozPaymentProvider.paymentFailed();
-    </script>
-  </body>
-</html>
-
deleted file mode 100644
--- a/dom/payment/tests/mochitest/file_payprovidersuccess.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-  <head>
-    <meta charset="utf-8">
-  </head>
-  <body>
-    <script>
-    navigator.mozPaymentProvider.paymentSuccess("aResult");
-    </script>
-  </body>
-</html>
-
deleted file mode 100644
--- a/dom/payment/tests/mochitest/mochitest.ini
+++ /dev/null
@@ -1,11 +0,0 @@
-[DEFAULT]
-skip-if=buildapp != 'b2g'
-
-support-files=
-  file_mozpayproviderchecker.html
-  file_payprovidersuccess.html
-  file_payproviderfailure.html
-  MockPaymentsUIChromeScript.js
-
-[test_mozpaymentprovider.html]
-[test_mozpay_callbacks.html]
deleted file mode 100644
--- a/dom/payment/tests/mochitest/test_mozpay_callbacks.html
+++ /dev/null
@@ -1,112 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-  https://bugzilla.mozilla.org/show_bug.cgi?id=1097928
--->
-<html>
-<head>
-  <title>Test for navigator.mozPay. Bug 1097928</title>
-  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
-  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<p id="display"></p>
-<div id="content" style="display: none">
-</div>
-<pre id="test">
-<script type="application/javascript;version=1.8">
-
-SimpleTest.waitForExplicitFinish();
-
-let tests = [() => {
-  /*
-  {
-   "iss": "323d34dc-b5cf-4822-8e47-6a4515dc74db",
-    "typ": "mozilla/payments/test/success",
-    "request": {
-        "name": "Virtual Kiwi",
-        "id": "af1f960a-3f90-4e2d-a20f-d5170aee49f2",
-        "postbackURL": "https://inapp-pay-test.paas.allizom.org/mozpay",
-        "productData": "localTransID=14546cd1-db9b-4759-986f-2a6a295fdcc1",
-        "chargebackURL": "https://inapp-pay-test.paas.allizom.org/mozpay",
-        "description": "The forbidden fruit"
-    }
-  }
-  */
-  let jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIzMjNkMzRkYy1iNWNmLTQ4MjItOGU0Ny02YTQ1MTVkYzc0ZGIiLCJyZXF1ZXN0Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGZvcmJpZGRlbiBmcnVpdCIsImlkIjoiYWYxZjk2MGEtM2Y5MC00ZTJkLWEyMGYtZDUxNzBhZWU0OWYyIiwicG9zdGJhY2tVUkwiOiJodHRwczovL2luYXBwLXBheS10ZXN0LnBhYXMuYWxsaXpvbS5vcmcvbW96cGF5L3Bvc3RiYWNrIiwicHJvZHVjdERhdGEiOiJsb2NhbFRyYW5zSUQ9MTQ1NDZjZDEtZGI5Yi00NzU5LTk4NmYtMmE2YTI5NWZkY2MxIiwiY2hhcmdlYmFja1VSTCI6Imh0dHBzOi8vaW5hcHAtcGF5LXRlc3QucGFhcy5hbGxpem9tLm9yZy9tb3pwYXkvY2hhcmdlYmFjayIsIm5hbWUiOiJWaXJ0dWFsIEtpd2kifSwidHlwIjoibW96aWxsYS9wYXltZW50cy90ZXN0L3N1Y2Nlc3MifQ.8zaeYFUCwKkZWk2TFf2wEJWrmiSYQGNbpKc2ADkvL9s";
-  let req = window.navigator.mozPay(jwt);
-  req.onsuccess = (result) => {
-    ok(true, "Expected mozPay success");
-    runTest();
-  };
-  req.onerror = (error) => {
-    ok(false, "Unexpected mozPay error " + error);
-    SimpleTest.finish();
-  };
-}, () => {
-  /*
-  {
-      "iss": "323d34dc-b5cf-4822-8e47-6a4515dc74db",
-      "typ": "mozilla/payments/test/failure",
-      "request": {
-          "name": "Virtual Kiwi",
-          "id": "af1f960a-3f90-4e2d-a20f-d5170aee49f2",
-          "postbackURL": "https://inapp-pay-test.paas.allizom.org/mozpay",
-          "productData": "localTransID=cc3c0994-33e8-4a21-aa2c-75ee44f5fe75",
-          "chargebackURL": "https://inapp-pay-test.paas.allizom.org/mozpay",
-          "description": "The forbidden fruit"
-      }
-  }
-   */
-  let jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIzMjNkMzRkYy1iNWNmLTQ4MjItOGU0Ny02YTQ1MTVkYzc0ZGIiLCJyZXF1ZXN0Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGZvcmJpZGRlbiBmcnVpdCIsImlkIjoiYWYxZjk2MGEtM2Y5MC00ZTJkLWEyMGYtZDUxNzBhZWU0OWYyIiwicG9zdGJhY2tVUkwiOiJodHRwczovL2luYXBwLXBheS10ZXN0LnBhYXMuYWxsaXpvbS5vcmcvbW96cGF5L3Bvc3RiYWNrIiwicHJvZHVjdERhdGEiOiJsb2NhbFRyYW5zSUQ9Y2MzYzA5OTQtMzNlOC00YTIxLWFhMmMtNzVlZTQ0ZjVmZTc1IiwiY2hhcmdlYmFja1VSTCI6Imh0dHBzOi8vaW5hcHAtcGF5LXRlc3QucGFhcy5hbGxpem9tLm9yZy9tb3pwYXkvY2hhcmdlYmFjayIsIm5hbWUiOiJWaXJ0dWFsIEtpd2kifSwidHlwIjoibW96aWxsYS9wYXltZW50cy90ZXN0L2ZhaWx1cmUifQ.1uV4-HkmwO0oDv50wi1Ma4tNpnxoFGaw5zaPj8xkcAc";
-  let req = window.navigator.mozPay(jwt);
-  req.onsuccess = (result) => {
-    ok(false, "Unexpected mozPay success " + result);
-    SimpleTest.finish();
-  };
-  req.onerror = (error) => {
-    ok(true, "Expected mozPay error");
-    runTest();
-  };
-}];
-
-function runTest() {
-  if (!tests.length) {
-    ok(true, "Done!");
-    SimpleTest.finish();
-    return;
-  }
-  tests.shift()();
-}
-
-const uiGlue = SpecialPowers.loadChromeScript(SimpleTest.getTestFileURL('MockPaymentsUIChromeScript.js'));
-SimpleTest.registerCleanupFunction(() => {
- uiGlue.sendAsyncMessage("MockPaymentsUIGlue.cleanup", {});
-});
-uiGlue.sendAsyncMessage("MockPaymentsUIGlue.init", {});
-
-SpecialPowers.pushPrefEnv({
-  "set": [
-    ["dom.payment.skipHTTPSCheck", "true"],
-    ["dom.payment.debug", "true"],
-    ["dom.payment.provider.1.name", "SuccessProvider"],
-    ["dom.payment.provider.1.description", ""],
-    ["dom.payment.provider.1.uri",
-     "https://example.com:443/tests/dom/payment/tests/mochitest/file_payprovidersuccess.html?req="],
-    ["dom.payment.provider.1.type", "mozilla/payments/test/success"],
-    ["dom.payment.provider.1.requestMethod", "GET"],
-    ["dom.payment.provider.2.name", "FailureProvider"],
-    ["dom.payment.provider.2.description", ""],
-    ["dom.payment.provider.2.uri",
-     "https://example.com:443/tests/dom/payment/tests/mochitest/file_payproviderfailure.html?req="],
-    ["dom.payment.provider.2.type", "mozilla/payments/test/failure"],
-    ["dom.payment.provider.2.requestMethod", "GET"],
-  ]
-  }, () => {
-    runTest();
-  });
-
-</script>
-</pre>
-</body>
-</html>
deleted file mode 100644
--- a/dom/payment/tests/mochitest/test_mozpaymentprovider.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-  https://bugzilla.mozilla.org/show_bug.cgi?id=1097928
--->
-<html>
-<head>
-  <title>Test for navigator.mozPaymentProvider exposure. Bug 1097928</title>
-  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
-  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<p id="display"></p>
-<div id="content" style="display: none">
-</div>
-<pre id="test">
-<script type="application/javascript;version=1.8">
-
-SimpleTest.waitForExplicitFinish();
-
-// We create two iframes. The first one is a regular iframe with no payment
-// information and so it should not have access to the MozPaymentProvider
-// API. For the second iframe we set a dummy payment request ID which should
-// expose the MozPaymentProvider API.
-let tests = [function() {
-  // Iframe with no payment information.
-  let iframe = document.createElement("iframe");
-  iframe.setAttribute("mozbrowser", "true");
-  iframe.src = "file_mozpayproviderchecker.html";
-
-  document.getElementById("content").appendChild(iframe);
-
-  iframe.addEventListener("load", function onLoad() {
-    iframe.removeEventListener("load", onLoad);
-    iframe.contentWindow.postMessage(JSON.stringify({
-      iframeType: "regular"
-    }), "*");
-  }, false);
-}, function() {
-  // Payment iframe.
-  let paymentIframe = document.createElement("iframe");
-  paymentIframe.setAttribute("mozbrowser", "true");
-  paymentIframe.src = "file_mozpayproviderchecker.html";
-
-  document.getElementById("content").appendChild(paymentIframe);
-
-  let Ci = SpecialPowers.Ci;
-  let docshell = SpecialPowers.wrap(paymentIframe.contentWindow)
-                              .QueryInterface(Ci.nsIInterfaceRequestor)
-                              .getInterface(Ci.nsIWebNavigation)
-                              .QueryInterface(Ci.nsIDocShell);
-  docshell.paymentRequestId = "dummyid";
-
-  paymentIframe.addEventListener("load", function onLoad() {
-    paymentIframe.removeEventListener("load", onLoad);
-    paymentIframe.contentWindow.postMessage(JSON.stringify({
-      iframeType: "payment"
-    }), "*");
-  }, false);
-}];
-
-function receiveMessage(event) {
-  let message = JSON.parse(event.data);
-  switch (message.iframeType) {
-    case "regular":
-      ok(!message.exposed, "MozPaymentProvider is not exposed in regular iframe");
-      break;
-    case "payment":
-      ok(message.exposed, "MozPaymentProvider is exposed in payment iframe");
-      break;
-    default:
-      ok(false, "Unexpected iframe type");
-      SimpleTest.finish();
-  }
-  runTest();
-}
-
-function runTest() {
-  if (!tests.length) {
-    ok(true, "Done!");
-    SimpleTest.finish();
-    return;
-  }
-  tests.shift()();
-}
-
-window.addEventListener("message", receiveMessage, false, true);
-runTest();
-
-</script>
-</pre>
-</body>
-</html>
deleted file mode 100644
--- a/dom/payment/tests/unit/header_helper.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-var {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
-
-var subscriptLoader = Cc["@mozilla.org/moz/jssubscript-loader;1"]
-                        .getService(Ci.mozIJSSubScriptLoader);
-
-/**
- * Start a new payment module.
- *
- * @param custom_ns
- *        Namespace with symbols to be injected into the new payment module
- *        namespace.
- *
- * @return an object that represents the payment module's namespace.
- */
-function newPaymentModule(custom_ns) {
-  let payment_ns = {
-    importScripts: function fakeImportScripts() {
-      Array.slice(arguments).forEach(function (script) {
-        subscriptLoader.loadSubScript("resource://gre/modules/" + script, this);
-      }, this);
-    },
-  };
-
-  // Copy the custom definitions over.
-  for (let key in custom_ns) {
-    payment_ns[key] = custom_ns[key];
-  }
-
-  // Load the payment module itself.
-  payment_ns.importScripts("Payment.jsm");
-
-  return payment_ns;
-}
deleted file mode 100644
--- a/dom/payment/tests/unit/test_paymanager_get_payment_request.js
+++ /dev/null
@@ -1,348 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-function getPaymentHelper() {
-  let error;
-  let paym = newPaymentModule();
-
-  paym.PaymentManager.paymentFailed = function paymentFailed(aRequestId,
-                                                             errorMsg) {
-    error = errorMsg;
-  };
-
-  return {
-    get paymentModule() {
-      return paym;
-    },
-    get error() {
-      return error;
-    }
-  };
-}
-
-function run_test() {
-  run_next_test();
-}
-
-function testGetPaymentRequest(paymentProviders, test) {
-  let helper = getPaymentHelper();
-  let paym = helper.paymentModule;
-
-  paym.PaymentManager.registeredProviders = paymentProviders;
-
-  let ret = paym.PaymentManager.getPaymentRequestInfo("", test.jwt);
-  if (!test.result) {
-    test.ret ? do_check_true(ret) : do_check_false(ret);
-  }
-  if (test.error !== null) {
-    do_check_eq(helper.error, test.error);
-  } else {
-    do_check_eq(typeof ret, "object");
-    do_check_eq(ret.jwt, test.jwt);
-    do_check_eq(ret.type, test.result.type);
-    do_check_eq(ret.providerName, test.result.providerName);
-  }
-}
-
-add_test(function test_successfull_request() {
-  let providers = {};
-  let type = "mock/payments/inapp/v1";
-  providers[type] = {
-    name: "mockprovider",
-    description: "Mock Payment Provider",
-    uri: "https://mockpayprovider.phpfogapp.com/?req=",
-    requestMethod: "GET"
-  };
-
-  // Payload
-  //  {
-  //    "aud": "mockpayprovider.phpfogapp.com",
-  //    "iss": "Enter you app key here!",
-  //    "request": {
-  //      "name": "Piece of Cake",
-  //      "price": "10.50",
-  //      "priceTier": 1,
-  //      "productdata": "transaction_id=86",
-  //      "currencyCode": "USD",
-  //      "description": "Virtual chocolate cake to fill your virtual tummy"
-  //    },
-  //    "exp": 1352232792,
-  //    "iat": 1352229192,
-  //    "typ": "mock/payments/inapp/v1"
-  //  }
-  let jwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJhdWQiOiAibW9j" +
-            "a3BheXByb3ZpZGVyLnBocGZvZ2FwcC5jb20iLCAiaXNzIjogIkVudGVyI" +
-            "HlvdSBhcHAga2V5IGhlcmUhIiwgInJlcXVlc3QiOiB7Im5hbWUiOiAiUG" +
-            "llY2Ugb2YgQ2FrZSIsICJwcmljZSI6ICIxMC41MCIsICJwcmljZVRpZXI" +
-            "iOiAxLCAicHJvZHVjdGRhdGEiOiAidHJhbnNhY3Rpb25faWQ9ODYiLCAi" +
-            "Y3VycmVuY3lDb2RlIjogIlVTRCIsICJkZXNjcmlwdGlvbiI6ICJWaXJ0d" +
-            "WFsIGNob2NvbGF0ZSBjYWtlIHRvIGZpbGwgeW91ciB2aXJ0dWFsIHR1bW" +
-            "15In0sICJleHAiOiAxMzUyMjMyNzkyLCAiaWF0IjogMTM1MjIyOTE5Miw" +
-            "gInR5cCI6ICJtb2NrL3BheW1lbnRzL2luYXBwL3YxIn0.QZxc62USCy4U" +
-            "IyKIC1TKelVhNklvk-Ou1l_daKntaFI";
-
-  testGetPaymentRequest(providers, {
-    jwt: jwt,
-    ret: true,
-    error: null,
-    result: {
-      type: type,
-      providerName: providers[type].name
-    }
-  });
-
-  run_next_test();
-});
-
-add_test(function test_successfull_request_html_description() {
-  let providers = {};
-  let type = "mozilla/payments/pay/v1";
-  providers[type] = {
-    name: "webpay",
-    description: "Mozilla Payment Provider",
-    uri: "https://marketplace.firefox.com/mozpay/?req=",
-    requestMethod: "GET"
-  };
-
-  // Payload
-  //  {
-  //    "aud": "marketplace.firefox.com",
-  //    "iss": "marketplace-dev.allizom.org",
-  //    "request": {
-  //      "name": "Krupa's paid app 1",
-  //      "chargebackURL": "http://localhost:8002/telefonica/services/webpay/"
-  //                       "chargeback",
-  //      "postbackURL": "http://localhost:8002/telefonica/services/webpay/"
-  //                     "postback",
-  //      "productData": "addon_id=85&seller_uuid=d4855df9-6ce0-45cd-81cb-"
-  //                     "cf8737e1e7aa&contrib_uuid=201868b7ac2cda410a99b3"
-  //                     "ed4c11a8ea",
-  //      "pricePoint": 1,
-  //      "id": "maude:85",
-  //      "description": "This app has been automatically generated by <a href="
-  //                     "\"http://outgoing.mozilla.org/v1/ba7f373ae16789eff3ab"
-  //                     "fd95ca8d3c15d18dc9009afa204dc43f85a55b1f6ef1/http%3A/"
-  //                     "/testmanifest.com\" rel=\"nofollow\">testmanifest.com"
-  //                     "</a>"
-  //    },
-  //    "exp": 1358379147,
-  //    "iat": 1358375547,
-  //    "typ": "mozilla/payments/pay/v1"
-  //  }
-  let jwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJhdWQiOiAibWFya2V0cGx" +
-            "hY2UuZmlyZWZveC5jb20iLCAiaXNzIjogIm1hcmtldHBsYWNlLWRldi5hbGxpem9" +
-            "tLm9yZyIsICJyZXF1ZXN0IjogeyJuYW1lIjogIktydXBhJ3MgcGFpZCBhcHAgMSI" +
-            "sICJjaGFyZ2ViYWNrVVJMIjogImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMi90ZWxlZm9" +
-            "uaWNhL3NlcnZpY2VzL3dlYnBheS9jaGFyZ2ViYWNrIiwgInBvc3RiYWNrVVJMIjo" +
-            "gImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMi90ZWxlZm9uaWNhL3NlcnZpY2VzL3dlYnB" +
-            "heS9wb3N0YmFjayIsICJwcm9kdWN0RGF0YSI6ICJhZGRvbl9pZD04NSZzZWxsZXJ" +
-            "fdXVpZD1kNDg1NWRmOS02Y2UwLTQ1Y2QtODFjYi1jZjg3MzdlMWU3YWEmY29udHJ" +
-            "pYl91dWlkPTIwMTg2OGI3YWMyY2RhNDEwYTk5YjNlZDRjMTFhOGVhIiwgInByaWN" +
-            "lUG9pbnQiOiAxLCAiaWQiOiAibWF1ZGU6ODUiLCAiZGVzY3JpcHRpb24iOiAiVGh" +
-            "pcyBhcHAgaGFzIGJlZW4gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgPGEgaHJ" +
-            "lZj1cImh0dHA6Ly9vdXRnb2luZy5tb3ppbGxhLm9yZy92MS9iYTdmMzczYWUxNjc" +
-            "4OWVmZjNhYmZkOTVjYThkM2MxNWQxOGRjOTAwOWFmYTIwNGRjNDNmODVhNTViMWY" +
-            "2ZWYxL2h0dHAlM0EvL3Rlc3RtYW5pZmVzdC5jb21cIiByZWw9XCJub2ZvbGxvd1w" +
-            "iPnRlc3RtYW5pZmVzdC5jb208L2E-In0sICJleHAiOiAxMzU4Mzc5MTQ3LCAiaWF" +
-            "0IjogMTM1ODM3NTU0NywgInR5cCI6ICJtb3ppbGxhL3BheW1lbnRzL3BheS92MSJ" +
-            "9.kgSt636OSRBezMGtm9QLeDxlEOevL4xcOoDj8VRJyD8";
-
-  testGetPaymentRequest(providers, {
-    jwt: jwt,
-    ret: true,
-    error: null,
-    result: {
-      type: type,
-      providerName: providers[type].name
-    }
-  });
-
-  run_next_test();
-});
-
-add_test(function test_empty_jwt() {
-  testGetPaymentRequest(null, {
-    jwt: "",
-    ret: true,
-    error: "INTERNAL_ERROR_CALL_WITH_MISSING_JWT"
-  });
-
-  run_next_test();
-});
-
-add_test(function test_wrong_segments_count() {
-  // 1 segment JWT
-  let OneSegJwt = "eyJhbGciOiJIUzI1NiJ9";
-  testGetPaymentRequest(null, {
-    jwt: OneSegJwt,
-    ret: true,
-    error: "PAY_REQUEST_ERROR_WRONG_SEGMENTS_COUNT"
-  });
-
-  // 2 segments JWT
-  let TwoSegJwt = "eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIwNTg2NDkwMTM2NTY2N" +
-                  "zU1ODY2MSIsImF1ZCI6Ikdvb2dsZSIsInR5cCI6Imdvb2dsZS9" +
-                  "wYXltZW50cy9pbmFwcC9pdGVtL3YxIiwiaWF0IjoxMzUyMjIwM" +
-                  "jEyLCJleHAiOjEzNTIzMDY2MTIsInJlcXVlc3QiOnsiY3VycmV" +
-                  "uY3lDb2RlIjoiVVNEIiwicHJpY2UiOiIzLjAwIiwibmFtZSI6I" +
-                  "kdvbGQgU3RhciIsInNlbGxlckRhdGEiOiJzb21lIG9wYXF1ZSB" +
-                  "kYXRhIiwiZGVzY3JpcHRpb24iOiJBIHNoaW5pbmcgYmFkZ2Ugb" +
-                  "2YgZGlzdGluY3Rpb24ifX0";
-
-  testGetPaymentRequest(null, {
-    jwt: TwoSegJwt,
-    ret: true,
-    error: "PAY_REQUEST_ERROR_WRONG_SEGMENTS_COUNT"
-  });
-
-  run_next_test();
-});
-
-add_test(function test_empty_payload() {
-  let EmptyPayloadJwt = "eyJhbGciOiJIUzI1NiJ9..eyJpc3MiOiIwNTg2NDkwMTM2NTY2N";
-
-  testGetPaymentRequest(null, {
-    jwt: EmptyPayloadJwt,
-    ret: true,
-    error: "PAY_REQUEST_ERROR_EMPTY_PAYLOAD"
-  });
-
-  run_next_test();
-});
-
-add_test(function test_missing_typ_parameter() {
-  // Payload
-  //  {
-  //    "iss": "640ae477-df33-45cd-83b8-6f1f910a6494",
-  //    "iat": 1361203745,
-  //    "request": {
-  //      "description": "detailed description",
-  //      "id": "799db970-7afa-4028-bdb7-8b045eb8babc",
-  //      "postbackURL": "http://inapp-pay-test.farmdev.com/postback",
-  //      "productData": "transaction_id=58",
-  //      "pricePoint": 1,
-  //      "chargebackURL": "http://inapp-pay-test.farmdev.com/chargeback",
-  //      "name": "The Product"
-  //    },
-  //    "aud": "marketplace-dev.allizom.org",
-  //    "exp": 1361207345
-  //  }
-  let missingTypJwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9." +
-                      "eyJpc3MiOiAiNjQwYWU0NzctZGYzMy00NWNkLTgzY" +
-                      "jgtNmYxZjkxMGE2NDk0IiwgImlhdCI6IDEzNjEyMD" +
-                      "M3NDUsICJyZXF1ZXN0IjogeyJkZXNjcmlwdGlvbiI" +
-                      "6ICJkZXRhaWxlZCBkZXNjcmlwdGlvbiIsICJpZCI6" +
-                      "ICI3OTlkYjk3MC03YWZhLTQwMjgtYmRiNy04YjA0N" +
-                      "WViOGJhYmMiLCAicG9zdGJhY2tVUkwiOiAiaHR0cD" +
-                      "ovL2luYXBwLXBheS10ZXN0LmZhcm1kZXYuY29tL3B" +
-                      "vc3RiYWNrIiwgInByb2R1Y3REYXRhIjogInRyYW5z" +
-                      "YWN0aW9uX2lkPTU4IiwgInByaWNlUG9pbnQiOiAxL" +
-                      "CAiY2hhcmdlYmFja1VSTCI6ICJodHRwOi8vaW5hcH" +
-                      "AtcGF5LXRlc3QuZmFybWRldi5jb20vY2hhcmdlYmF" +
-                      "jayIsICJuYW1lIjogIlRoZSBQcm9kdWN0In0sICJh" +
-                      "dWQiOiAibWFya2V0cGxhY2UtZGV2LmFsbGl6b20ub" +
-                      "3JnIiwgImV4cCI6IDEzNjEyMDczNDV9.KAHsJX1Hy" +
-                      "fmwNvAckdVUqlpPvdHggpx9yX276TWacRg";
-  testGetPaymentRequest(null, {
-    jwt: missingTypJwt,
-    ret: true,
-    error: "PAY_REQUEST_ERROR_NO_TYP_PARAMETER"
-  });
-
-  run_next_test();
-});
-
-add_test(function test_missing_request_parameter() {
-  // Payload
-  //  {
-  //    "iss": "Enter you app key here!",
-  //    "iat": 1352225299,
-  //    "typ": "mock/payments/inapp/v1",
-  //    "aud": "mockpayprovider.phpfogapp.com",
-  //    "exp": 1352228899
-  //  }
-  let missingRequestJwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9." +
-                          "eyJpc3MiOiAiRW50ZXIgeW91IGFwcCBrZXkgaGVyZ" +
-                          "SEiLCAiaWF0IjogMTM1MjIyNTI5OSwgInR5cCI6IC" +
-                          "Jtb2NrL3BheW1lbnRzL2luYXBwL3YxIiwgImF1ZCI" +
-                          "6ICJtb2NrcGF5cHJvdmlkZXIucGhwZm9nYXBwLmNv" +
-                          "bSIsICJleHAiOiAxMzUyMjI4ODk5fQ.yXGinvZiUs" +
-                          "v9JWvdfM6zPD0iOX9DgCPcIwIbCrL4tcs";
-
-  testGetPaymentRequest(null, {
-    jwt: missingRequestJwt,
-    ret: true,
-    error: "PAY_REQUEST_ERROR_NO_REQUEST_PARAMETER"
-  });
-
-  run_next_test();
-});
-
-add_test(function test_jwt_decoding_error() {
-  let wrongJwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.^eyJhdWQiOiAibW9" +
-                 "a3BheXByb3ZpZGVyLnBocGZvZ2FwcC5jb20iLCAiaXNzIjogIkVudGVyI" +
-                 "HlvdSBhcHAga2V5IGhlcmUhIiwgInJlcXVlc3QiOiB7Im5hbWUiOiAiUG" +
-                 "llY2Ugb2YgQ2FrZSIsICJwcmljZSI6ICIxMC41MCIsICJwcmljZVRpZXI" +
-                 "iOiAxLCAicHJvZHVjdGRhdGEiOiAidHJhbnNhY3Rpb25faWQ9ODYiLCAi" +
-                 "Y3VycmVuY3lDb2RlIjogIlVTRCIsICJkZXNjcmlwdGlvbiI6ICJWaXJ0d" +
-                 "WFsIGNob2NvbGF0ZSBjYWtlIHRvIGZpbGwgeW91ciB2aXJ0dWFsIHR1bW" +
-                 "15In0sICJleHAiOiAxMzUyMjMyNzkyLCAiaWF0IjogMTM1MjIyOTE5Miw" +
-                 "gInR5cCI6ICJtb2NrL3BheW1lbnRzL2luYXBwL3YxIn0.QZxc62USCy4U" +
-                 "IyKIC1TKelVhNklvk-Ou1l_daKntaFI";
-
-  testGetPaymentRequest(null, {
-    jwt: wrongJwt,
-    ret: true,
-    error: "PAY_REQUEST_ERROR_ERROR_DECODING_JWT"
-  });
-
-  run_next_test();
-});
-
-add_test(function test_non_https_provider() {
-  let providers = {};
-  let type = "mock/payments/inapp/v1";
-  providers[type] = {
-    name: "mockprovider",
-    description: "Mock Payment Provider",
-    uri: "http://mockpayprovider.phpfogapp.com/?req=",
-    requestMethod: "GET"
-  };
-
-  // Payload
-  //  {
-  //    "aud": "mockpayprovider.phpfogapp.com",
-  //    "iss": "Enter you app key here!",
-  //    "request": {
-  //      "name": "Piece of Cake",
-  //      "price": "10.50",
-  //      "priceTier": 1,
-  //      "productdata": "transaction_id=86",
-  //      "currencyCode": "USD",
-  //      "description": "Virtual chocolate cake to fill your virtual tummy"
-  //    },
-  //    "exp": 1352232792,
-  //    "iat": 1352229192,
-  //    "typ": "mock/payments/inapp/v1"
-  //  }
-  let jwt = "eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJhdWQiOiAibW9j" +
-            "a3BheXByb3ZpZGVyLnBocGZvZ2FwcC5jb20iLCAiaXNzIjogIkVudGVyI" +
-            "HlvdSBhcHAga2V5IGhlcmUhIiwgInJlcXVlc3QiOiB7Im5hbWUiOiAiUG" +
-            "llY2Ugb2YgQ2FrZSIsICJwcmljZSI6ICIxMC41MCIsICJwcmljZVRpZXI" +
-            "iOiAxLCAicHJvZHVjdGRhdGEiOiAidHJhbnNhY3Rpb25faWQ9ODYiLCAi" +
-            "Y3VycmVuY3lDb2RlIjogIlVTRCIsICJkZXNjcmlwdGlvbiI6ICJWaXJ0d" +
-            "WFsIGNob2NvbGF0ZSBjYWtlIHRvIGZpbGwgeW91ciB2aXJ0dWFsIHR1bW" +
-            "15In0sICJleHAiOiAxMzUyMjMyNzkyLCAiaWF0IjogMTM1MjIyOTE5Miw" +
-            "gInR5cCI6ICJtb2NrL3BheW1lbnRzL2luYXBwL3YxIn0.QZxc62USCy4U" +
-            "IyKIC1TKelVhNklvk-Ou1l_daKntaFI";
-
-  testGetPaymentRequest(providers, {
-    jwt: jwt,
-    ret: true,
-    error: "INTERNAL_ERROR_NON_HTTPS_PROVIDER_URI"
-  });
-
-  run_next_test();
-});
deleted file mode 100644
--- a/dom/payment/tests/unit/xpcshell.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[DEFAULT]
-head = header_helper.js
-tail =
-skip-if = toolkit == 'gonk'
-
-[test_paymanager_get_payment_request.js]
deleted file mode 100644
--- a/dom/webidl/MozPaymentProvider.webidl
+++ /dev/null
@@ -1,41 +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/.
- */
-
-dictionary PaymentIccInfo {
-  DOMString mcc;
-  DOMString mnc;
-  DOMString iccId;
-  boolean dataPrimary;
-};
-
-dictionary PaymentSmsMessage {
-  DOMString iccId;
-  DOMString sender;
-  DOMString body;
-  DOMTimeStamp timestamp;
-  DOMTimeStamp sentTimestamp;
-};
-
-callback SilentSmsCallback = void (optional PaymentSmsMessage message);
-
-[NavigatorProperty="mozPaymentProvider",
- NoInterfaceObject,
- HeaderFile="mozilla/dom/PaymentProviderUtils.h",
- Func="mozilla::dom::PaymentProviderUtils::EnabledForScope",
- JSImplementation="@mozilla.org/payment/provider;1"]
-interface PaymentProvider {
-  readonly attribute DOMString? paymentServiceId;
-  // We expose to the payment provider the information of all the SIMs
-  // available in the device.
-  [Cached, Pure] readonly attribute sequence<PaymentIccInfo>? iccInfo;
-
-  void paymentSuccess(optional DOMString result);
-  void paymentFailed(optional DOMString error);
-
-  DOMRequest sendSilentSms(DOMString number, DOMString message);
-  void observeSilentSms(DOMString number, SilentSmsCallback callback);
-  void removeSilentSmsObserver(DOMString number, SilentSmsCallback callback);
-};
--- a/dom/webidl/Navigator.webidl
+++ b/dom/webidl/Navigator.webidl
@@ -434,23 +434,12 @@ partial interface Navigator {
 
 #ifdef NIGHTLY_BUILD
 partial interface Navigator {
   [Func="Navigator::IsE10sEnabled"]
   readonly attribute boolean mozE10sEnabled;
 };
 #endif
 
-#ifdef MOZ_PAY
-partial interface Navigator {
-  [Throws, NewObject, Pref="dom.mozPay.enabled"]
-  // The 'jwts' parameter can be either a single DOMString or an array of
-  // DOMStrings. In both cases, it represents the base64url encoded and
-  // digitally signed payment information. Each payment provider should
-  // define its supported JWT format.
-  DOMRequest mozPay(any jwts);
-};
-#endif
-
 [NoInterfaceObject, Exposed=(Window,Worker)]
 interface NavigatorConcurrentHardware {
   readonly attribute unsigned long long hardwareConcurrency;
 };
--- a/dom/webidl/moz.build
+++ b/dom/webidl/moz.build
@@ -913,21 +913,16 @@ if CONFIG['MOZ_EME']:
         'MediaKeys.webidl',
         'MediaKeySession.webidl',
         'MediaKeysRequestStatus.webidl',
         'MediaKeyStatusMap.webidl',
         'MediaKeySystemAccess.webidl',
         'WidevineCDMManifest.webidl',
     ]
 
-if CONFIG['MOZ_PAY']:
-    WEBIDL_FILES += [
-        'MozPaymentProvider.webidl'
-    ]
-
 if CONFIG['MOZ_B2G']:
     WEBIDL_FILES += [
         'Apps.webidl',
         'Identity.webidl',
         'MozApplicationEvent.webidl'
     ]
     GENERATED_EVENTS_WEBIDL_FILES += [
         'MozApplicationEvent.webidl'
--- a/mobile/android/tests/browser/robocop/robocop.ini
+++ b/mobile/android/tests/browser/robocop/robocop.ini
@@ -71,17 +71,16 @@ skip-if = android_version == "18"
 # [src/org/mozilla/gecko/tests/testVkbOverlap.java] # see bug 907274
 
 # Using JavascriptTest
 # (If your test can be written entirely in Javascript, consider writing
 # it as a chrome test instead. See mobile/android/tests/browser/chrome.)
 [src/org/mozilla/gecko/tests/testBrowserDiscovery.java]
 [src/org/mozilla/gecko/tests/testFilePicker.java]
 [src/org/mozilla/gecko/tests/testHistoryService.java]
-# [src/org/mozilla/gecko/tests/testMozPay.java] # see bug 945675
 [src/org/mozilla/gecko/tests/testOSLocale.java]
 # disabled on 4.3: Bug 1124494
 skip-if = android_version == "18"
 [src/org/mozilla/gecko/tests/testReadingListCache.java]
 [src/org/mozilla/gecko/tests/testRestrictions.java]
 [src/org/mozilla/gecko/tests/testSnackbarAPI.java]
 [src/org/mozilla/gecko/tests/testTrackingProtection.java]
 [src/org/mozilla/gecko/tests/testUITelemetry.java]
deleted file mode 100644
--- a/mobile/android/tests/browser/robocop/roboextender/base/paymentsUI.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<html>
-  <head>
-    <script type="text/javascript">
-function start() {
-  if (!mozPaymentProvider)
-    window.close();
-
-  // We don't have a way to mock these values yet. This check just makes sure the world
-  // doesn't crash if we ask for them.
-  var mcc = mozPaymentProvider.mcc;
-  var mnc = mozPaymentProvider.mnc;
-
-  // We use the jwt passed in here to test calling paymentFailed/Success
-  if (window.location.hash == "#pass")
-    mozPaymentProvider.paymentSuccess("PAID CORRECTLY");
-  else if (window.location.hash == "#fail")
-    mozPaymentProvider.paymentFailed("FAILED CORRECTLY");
-  else
-    mozPaymentProvider.paymentFailed("invalid hash " + window.location.hash);
-}
-
-document.addEventListener("DOMContentLoaded", start);
-    </script>
-  </head>
-</html>
deleted file mode 100644
--- a/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testMozPay.java
+++ /dev/null
@@ -1,13 +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/. */
-
-package org.mozilla.gecko.tests;
-
-
-
-public class testMozPay extends JavascriptTest {
-    public testMozPay() {
-        super("testMozPay.js");
-    }
-}
deleted file mode 100644
--- a/mobile/android/tests/browser/robocop/testMozPay.js
+++ /dev/null
@@ -1,102 +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/. */
-
-var Cc = Components.classes;
-var Ci = Components.interfaces;
-var Cu = Components.utils;
-
-Components.utils.import("resource://gre/modules/SharedPreferences.jsm");
-Components.utils.import("resource://gre/modules/Promise.jsm");
-
-var ppmm = Cc["@mozilla.org/parentprocessmessagemanager;1"].getService(Ci.nsIMessageListenerManager);
-var deferred = 0;
-var shouldPass = true;
-var reqId = 0;
-function getRequestId(increment) {
-  reqId += increment;
-  return "Request" + reqId;
-}
-
-var paymentSuccess = {
-  receiveMessage: function(aMsg) {
-    let msg = aMsg.json;
-    if (shouldPass) {
-      do_check_eq(msg.requestId, getRequestId(0));
-    } else {
-      do_throw("Test should not have passed");
-    }
-    deferred.resolve();
-  }
-}
-
-var paymentFailed = {
-  receiveMessage: function(aMsg) {
-    let msg = aMsg.json;
-    if (shouldPass) {
-      do_throw("Test should not have failed: " + msg.errorMsg);
-    } else {
-      do_check_eq(msg.requestId, getRequestId(0));
-      do_check_eq(msg.errorMsg, "FAILED CORRECTLY");
-    }
-    deferred.resolve();
-  }
-}
-
-add_task(function test_get_set() {
-  let ui = Cc["@mozilla.org/payment/ui-glue;1"].getService(Ci.nsIPaymentUIGlue);
-  deferred = Promise.defer();
-  let id = getRequestId(1);
-  ui.confirmPaymentRequest(id,
-                           [{ wrappedJSObject: { type: "Fake Provider" } }],
-                           function(aRequestId, type) {
-                             do_check_eq(type, "Fake Provider");
-                             deferred.resolve();
-                           },
-                           function(id, msg) {
-                             do_throw("confirmPaymentRequest should not have failed");
-                             deferred.resolve();
-                           });
-  yield deferred.promise;
-});
-
-add_task(function test_default() {
-  ppmm.addMessageListener("Payment:Success", paymentSuccess);
-  ppmm.addMessageListener("Payment:Failed", paymentFailed);
-
-  let ui = Cc["@mozilla.org/payment/ui-glue;1"].getService(Ci.nsIPaymentUIGlue);
-  deferred = Promise.defer();
-  let id = getRequestId(1);
-  shouldPass = true;
-  ui.showPaymentFlow(id,
-                     {
-                       uri: "chrome://roboextender/content/paymentsUI.html",
-                       jwt: "#pass"
-                     },
-                     function(id, msg) {
-                       do_throw("confirmPaymentRequest should not have failed");
-                       deferred.resolve();
-                     });
-  yield deferred.promise;
-
-  deferred = Promise.defer();
-  id = getRequestId(1);
-  shouldPass = false;
-  ui.showPaymentFlow(id,
-                     {
-                       uri: "chrome://roboextender/content/paymentsUI.html",
-                       jwt: "#fail"
-                     },
-                     function(id, msg) {
-                       do_throw("confirmPaymentRequest should not have failed");
-                       deferred.resolve();
-                     });
-
-  yield deferred.promise;
-
-  ppmm.removeMessageListener("Payment:Success", paymentSuccess);
-  ppmm.removeMessageListener("Payment:Failed", paymentFailed);
-});
-
-run_next_test();
--- a/old-configure.in
+++ b/old-configure.in
@@ -2369,17 +2369,16 @@ NECKO_COOKIES=1
 NECKO_PROTOCOLS_DEFAULT="about data file ftp http res viewsource websocket wyciwyg device"
 BUILD_CTYPES=1
 MOZ_USE_NATIVE_POPUP_WINDOWS=
 MOZ_EXCLUDE_HYPHENATION_DICTIONARIES=
 MOZ_INSTALL_TRACKING=
 ACCESSIBILITY=1
 MOZ_TIME_MANAGER=
 MOZ_SIMPLEPUSH=
-MOZ_PAY=
 MOZ_AUDIO_CHANNEL_MANAGER=
 MOZ_CONTENT_SANDBOX=
 MOZ_GMP_SANDBOX=
 MOZ_SANDBOX=1
 MOZ_BINARY_EXTENSIONS=
 MOZ_DEVTOOLS=server
 
 case "$target_os" in
@@ -4933,24 +4932,16 @@ dnl = Enable Support for SimplePush (Gon
 dnl   This will disable the Push API.
 dnl ========================================================
 if test -n "$MOZ_SIMPLEPUSH"; then
     AC_DEFINE(MOZ_SIMPLEPUSH)
 fi
 AC_SUBST(MOZ_SIMPLEPUSH)
 
 dnl ========================================================
-dnl = Enable Support for Payment API
-dnl ========================================================
-if test -n "$MOZ_PAY"; then
-    AC_DEFINE(MOZ_PAY)
-fi
-AC_SUBST(MOZ_PAY)
-
-dnl ========================================================
 dnl = Enable Support for AudioChannelManager API
 dnl ========================================================
 if test -n "$MOZ_AUDIO_CHANNEL_MANAGER"; then
     AC_DEFINE(MOZ_AUDIO_CHANNEL_MANAGER)
 fi
 AC_SUBST(MOZ_AUDIO_CHANNEL_MANAGER)
 
 dnl ========================================================