Backed out changeset 21d743a319c6 (bug 967475) for apparently introducing two hazards to the build
authorWes Kocher <wkocher@mozilla.com>
Thu, 08 May 2014 16:06:40 -0700
changeset 182260 e2106a5d1230df860498cbdb12c84d767aa6b90f
parent 182259 34f9b78948b9c0b7fd6e99b844e7989490a9bcc2
child 182261 dce9bf32da45fda2f78e337de554d0d50368b7fe
push id26754
push userkwierso@gmail.com
push dateFri, 09 May 2014 02:06:18 +0000
treeherdermozilla-central@cf89b5d018f8 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs967475
milestone32.0a1
backs out21d743a319c659b9290b714846fd0752ec3f3e71
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Backed out changeset 21d743a319c6 (bug 967475) for apparently introducing two hazards to the build
b2g/components/AlertsHelper.jsm
b2g/components/AlertsService.js
b2g/installer/package-manifest.in
browser/installer/package-manifest.in
dom/bindings/BindingUtils.cpp
dom/interfaces/notification/nsINotificationStorage.idl
dom/src/notification/ChromeNotifications.js
dom/src/notification/ChromeNotifications.manifest
dom/src/notification/Notification.cpp
dom/src/notification/Notification.h
dom/src/notification/NotificationDB.jsm
dom/src/notification/NotificationStorage.js
dom/src/notification/moz.build
dom/src/notification/test/unit/test_notificationdb.js
dom/tests/mochitest/notification/MockServices.js
dom/tests/mochitest/notification/mochitest.ini
dom/tests/mochitest/notification/test_bug931307.html
dom/tests/mochitest/notification/test_notification_basics.html
dom/tests/mochitest/notification/test_notification_resend.html
dom/tests/mochitest/notification/test_notification_storage.html
dom/webidl/ChromeNotifications.webidl
dom/webidl/moz.build
mobile/android/installer/package-manifest.in
--- a/b2g/components/AlertsHelper.jsm
+++ b/b2g/components/AlertsHelper.jsm
@@ -139,18 +139,17 @@ let AlertsHelper = {
         gSystemMessenger.sendMessage(kNotificationSystemMessageName, {
             clicked: (detail.type === kDesktopNotificationClick),
             title: listener.title,
             body: listener.text,
             imageURL: listener.imageURL,
             lang: listener.lang,
             dir: listener.dir,
             id: listener.id,
-            tag: listener.tag,
-            timestamp: listener.timestamp
+            tag: listener.tag
           },
           Services.io.newURI(listener.target, null, null),
           Services.io.newURI(listener.manifestURL, null, null)
         );
       }
     }
 
     // we"re done with this notification
@@ -190,30 +189,29 @@ let AlertsHelper = {
 
       listener.target = getNotificationURLFor(manifest.messages);
 
       // Bug 816944 - Support notification messages for entry_points.
     });
   },
 
   showNotification: function(imageURL, title, text, textClickable, cookie,
-                             uid, bidi, lang, manifestURL, timestamp) {
+                             uid, bidi, lang, manifestURL) {
     function send(appName, appIcon) {
       SystemAppProxy._sendCustomEvent(kMozChromeNotificationEvent, {
         type: kDesktopNotification,
         id: uid,
         icon: imageURL,
         title: title,
         text: text,
         bidi: bidi,
         lang: lang,
         appName: appName,
         appIcon: appIcon,
-        manifestURL: manifestURL,
-        timestamp: timestamp
+        manifestURL: manifestURL
       });
     }
 
     if (!manifestURL || !manifestURL.length) {
       send(null, null);
       return;
     }
 
@@ -245,23 +243,22 @@ let AlertsHelper = {
       mm: aMessage.target,
       title: data.title,
       text: data.text,
       manifestURL: details.manifestURL,
       imageURL: data.imageURL,
       lang: details.lang || undefined,
       id: details.id || undefined,
       dir: details.dir || undefined,
-      tag: details.tag || undefined,
-      timestamp: details.timestamp || undefined
+      tag: details.tag || undefined
     };
     this.registerAppListener(data.uid, listener);
     this.showNotification(data.imageURL, data.title, data.text,
                           details.textClickable, null, data.uid, details.dir,
-                          details.lang, details.manifestURL, details.timestamp);
+                          details.lang, details.manifestURL);
   },
 
   closeAlert: function(name) {
     SystemAppProxy._sendCustomEvent(kMozChromeNotificationEvent, {
       type: kDesktopNotificationClose,
       id: name
     });
   },
--- a/b2g/components/AlertsService.js
+++ b/b2g/components/AlertsService.js
@@ -38,17 +38,16 @@ function debug(str) {
 const kNotificationSystemMessageName = "notification";
 
 const kMessageAppNotificationSend    = "app-notification-send";
 const kMessageAppNotificationReturn  = "app-notification-return";
 const kMessageAlertNotificationSend  = "alert-notification-send";
 const kMessageAlertNotificationClose = "alert-notification-close";
 
 const kTopicAlertFinished      = "alertfinished";
-const kTopicAlertClickCallback = "alertclickcallback";
 
 function AlertsService() {
   Services.obs.addObserver(this, "xpcom-shutdown", false);
   cpmm.addMessageListener(kMessageAppNotificationReturn, this);
 }
 
 AlertsService.prototype = {
   classID: Components.ID("{fe33c107-82a4-41d6-8c64-5353267e04c9}"),
@@ -99,18 +98,17 @@ AlertsService.prototype = {
       title: aTitle,
       text: aText,
       manifestURL: aDetails.manifestURL,
       imageURL: aImageURL,
       lang: aDetails.lang || undefined,
       id: aDetails.id || undefined,
       dbId: aDetails.dbId || undefined,
       dir: aDetails.dir || undefined,
-      tag: aDetails.tag || undefined,
-      timestamp: aDetails.timestamp || undefined
+      tag: aDetails.tag || undefined
     };
 
     cpmm.sendAsyncMessage(kMessageAppNotificationSend, {
       imageURL: aImageURL,
       title: aTitle,
       text: aText,
       uid: uid,
       details: aDetails
@@ -132,26 +130,24 @@ AlertsService.prototype = {
     try {
       listener.observer.observe(null, topic, null);
     } catch (e) {
       // It seems like there is no callbacks anymore, forward the click on
       // notification via a system message containing the title/text/icon of
       // the notification so the app get a change to react.
       if (data.target) {
         gSystemMessenger.sendMessage(kNotificationSystemMessageName, {
-            clicked: (topic === kTopicAlertClickCallback),
             title: listener.title,
             body: listener.text,
             imageURL: listener.imageURL,
             lang: listener.lang,
             dir: listener.dir,
             id: listener.id,
             tag: listener.tag,
-            dbId: listener.dbId,
-            timestamp: listener.timestamp
+            dbId: listener.dbId
           },
           Services.io.newURI(data.target, null, null),
           Services.io.newURI(listener.manifestURL, null, null)
         );
       }
     }
 
     // we're done with this notification
--- a/b2g/installer/package-manifest.in
+++ b/b2g/installer/package-manifest.in
@@ -331,18 +331,16 @@
 @BINPATH@/components/xpconnect.xpt
 @BINPATH@/components/xulapp.xpt
 @BINPATH@/components/xul.xpt
 @BINPATH@/components/xuldoc.xpt
 @BINPATH@/components/xultmpl.xpt
 @BINPATH@/components/zipwriter.xpt
 
 ; JavaScript components
-@BINPATH@/components/ChromeNotifications.js
-@BINPATH@/components/ChromeNotifications.manifest
 @BINPATH@/components/ConsoleAPI.manifest
 @BINPATH@/components/ConsoleAPIStorage.js
 @BINPATH@/components/BrowserElementParent.manifest
 @BINPATH@/components/BrowserElementParent.js
 @BINPATH@/components/ContactManager.js
 @BINPATH@/components/ContactManager.manifest
 @BINPATH@/components/PhoneNumberService.js
 @BINPATH@/components/PhoneNumberService.manifest
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -339,18 +339,16 @@
 @BINPATH@/components/xulapp.xpt
 @BINPATH@/components/xul.xpt
 @BINPATH@/components/xuldoc.xpt
 @BINPATH@/components/xultmpl.xpt
 @BINPATH@/components/zipwriter.xpt
 @BINPATH@/components/telemetry.xpt
 
 ; JavaScript components
-@BINPATH@/components/ChromeNotifications.js
-@BINPATH@/components/ChromeNotifications.manifest
 @BINPATH@/components/ConsoleAPI.manifest
 @BINPATH@/components/ConsoleAPIStorage.js
 @BINPATH@/components/BrowserElementParent.manifest
 @BINPATH@/components/BrowserElementParent.js
 @BINPATH@/components/FeedProcessor.manifest
 @BINPATH@/components/FeedProcessor.js
 @BINPATH@/browser/components/BrowserFeeds.manifest
 @BINPATH@/browser/components/FeedConverter.js
--- a/dom/bindings/BindingUtils.cpp
+++ b/dom/bindings/BindingUtils.cpp
@@ -9,17 +9,16 @@
 #include <algorithm>
 #include <stdarg.h>
 
 #include "JavaScriptParent.h"
 
 #include "mozilla/DebugOnly.h"
 #include "mozilla/FloatingPoint.h"
 #include "mozilla/Assertions.h"
-#include "mozilla/Preferences.h"
 
 #include "AccessCheck.h"
 #include "jsfriendapi.h"
 #include "js/OldDebugAPI.h"
 #include "nsContentUtils.h"
 #include "nsIDOMGlobalPropertyInitializer.h"
 #include "nsIPrincipal.h"
 #include "nsIXPConnect.h"
@@ -2151,38 +2150,30 @@ ConvertJSValueToByteString(JSContext* cx
   result.SetLength(length);
 
   return true;
 }
 
 bool
 IsInPrivilegedApp(JSContext* aCx, JSObject* aObj)
 {
-  if (Preferences::GetBool("dom.ignore_webidl_scope_checks", false)) {
-    return true;
-  }
-
   using mozilla::dom::workers::GetWorkerPrivateFromContext;
   if (!NS_IsMainThread()) {
     return GetWorkerPrivateFromContext(aCx)->IsInPrivilegedApp();
   }
 
   nsIPrincipal* principal = nsContentUtils::GetObjectPrincipal(aObj);
   uint16_t appStatus = principal->GetAppStatus();
   return (appStatus == nsIPrincipal::APP_STATUS_CERTIFIED ||
           appStatus == nsIPrincipal::APP_STATUS_PRIVILEGED);
 }
 
 bool
 IsInCertifiedApp(JSContext* aCx, JSObject* aObj)
 {
-  if (Preferences::GetBool("dom.ignore_webidl_scope_checks", false)) {
-    return true;
-  }
-
   using mozilla::dom::workers::GetWorkerPrivateFromContext;
   if (!NS_IsMainThread()) {
     return GetWorkerPrivateFromContext(aCx)->IsInCertifiedApp();
   }
 
   nsIPrincipal* principal = nsContentUtils::GetObjectPrincipal(aObj);
   return principal->GetAppStatus() == nsIPrincipal::APP_STATUS_CERTIFIED;
 }
--- a/dom/interfaces/notification/nsINotificationStorage.idl
+++ b/dom/interfaces/notification/nsINotificationStorage.idl
@@ -34,46 +34,41 @@ interface nsINotificationStorageCallback
    */
   [implicit_jscontext]
   void done();
 };
 
 /**
  * Interface for notification persistence layer.
  */
-[scriptable, uuid(cc4656d7-2a2a-47f1-8016-55891e833d64)]
+[scriptable, uuid(b177b080-2a23-11e3-8224-0800200c9a66)]
 interface nsINotificationStorage : nsISupports
 {
 
   /**
    * Add/replace a notification to the persistence layer.
    *
    * @param origin: the origin/app of this notification
    * @param id: a uuid for this notification
    * @param title: the notification title
    * @param dir: the notification direction,
    *             possible values are "ltr", "rtl", "auto"
    * @param lang: the notification language
    * @param body: the notification body
    * @param tag: notification tag, will replace any existing
    *             notifications with same origin/tag pair
-   * @param alertName: the alert identifier as used by system app.
-   *                   Stored in the database to avoid re-computing
-   *                   it. Built from origin and tag or id depending
-   *                   whether there is a tag defined.
    */
   void put(in DOMString origin,
            in DOMString id,
            in DOMString title,
            in DOMString dir,
            in DOMString lang,
            in DOMString body,
            in DOMString tag,
-           in DOMString icon,
-           in DOMString alertName);
+           in DOMString icon);
 
   /**
    * Retrieve a list of notifications.
    *
    * @param origin: the origin/app for which to fetch notifications from
    * @param tag: used to fetch only a specific tag
    * @param callback: nsINotificationStorageCallback, used for
    *                  returning notifications objects
deleted file mode 100644
--- a/dom/src/notification/ChromeNotifications.js
+++ /dev/null
@@ -1,113 +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 DEBUG = false;
-
-function debug(s) {
-  dump("-*- ChromeNotifications.js: " + s + "\n");
-}
-
-const Ci = Components.interfaces;
-const Cu = Components.utils;
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-
-XPCOMUtils.defineLazyModuleGetter(this, "Services",
-                                  "resource://gre/modules/Services.jsm");
-
-XPCOMUtils.defineLazyServiceGetter(this, "cpmm",
-                                   "@mozilla.org/childprocessmessagemanager;1",
-                                   "nsIMessageSender");
-
-XPCOMUtils.defineLazyServiceGetter(this, "appNotifier",
-                                   "@mozilla.org/system-alerts-service;1",
-                                   "nsIAppNotificationService");
-
-const CHROMENOTIFICATIONS_CID = "{74f94093-8b37-497e-824f-c3b250a911da}";
-const CHROMENOTIFICATIONS_CONTRACTID = "@mozilla.org/mozChromeNotifications;1";
-
-function ChromeNotifications() {
-  this.innerWindowID = null;
-  this.resendCallback = null;
-}
-
-ChromeNotifications.prototype = {
-
-  init: function(aWindow) {
-    let util = aWindow.QueryInterface(Ci.nsIInterfaceRequestor)
-                      .getInterface(Ci.nsIDOMWindowUtils);
-    this.innerWindowID = util.currentInnerWindowID;
-    Services.obs.addObserver(this, "inner-window-destroyed", false);
-    cpmm.addMessageListener("Notification:GetAllCrossOrigin:Return:OK", this);
-  },
-
-  performResend: function(notifications) {
-    let resentNotifications = 0;
-
-    notifications.forEach(function(notification) {
-      appNotifier.showAppNotification(
-        notification.icon,
-        notification.title,
-        notification.body,
-        null,
-        {
-          manifestURL: notification.origin,
-          id: notification.alertName,
-          dir: notification.dir,
-          lang: notification.lang,
-          tag: notification.tag,
-          dbId: notification.id,
-          timestamp: notification.timestamp
-        }
-      );
-      resentNotifications++;
-    });
-
-    try {
-      this.resendCallback && this.resendCallback(resentNotifications);
-    } catch (ex) {
-      if (DEBUG) debug("Content sent exception: " + ex);
-    }
-  },
-
-  mozResendAllNotifications: function(resendCallback) {
-    this.resendCallback = resendCallback;
-    cpmm.sendAsyncMessage("Notification:GetAllCrossOrigin", {});
-  },
-
-  receiveMessage: function(message) {
-    switch (message.name) {
-      case "Notification:GetAllCrossOrigin:Return:OK":
-        this.performResend(message.data.notifications);
-        break;
-
-      default:
-        if (DEBUG) { debug("Unrecognized message: " + message.name); }
-        break;
-    }
-  },
-
-  observe: function(aSubject, aTopic, aData) {
-    if (DEBUG) debug("Topic: " + aTopic);
-    if (aTopic == "inner-window-destroyed") {
-      let wId = aSubject.QueryInterface(Ci.nsISupportsPRUint64).data;
-      if (wId != this.innerWindowID) {
-        return;
-      }
-      Services.obs.removeObserver(this, "inner-window-destroyed");
-      cpmm.removeMessageListener("Notification:GetAllCrossOrigin:Return:OK", this);
-    }
-  },
-
-  classID : Components.ID(CHROMENOTIFICATIONS_CID),
-  contractID : CHROMENOTIFICATIONS_CONTRACTID,
-  QueryInterface: XPCOMUtils.generateQI([Ci.nsIChromeNotifications,
-                                         Ci.nsIDOMGlobalPropertyInitializer,
-                                         Ci.nsIObserver,
-                                         Ci.nsIMessageListener]),
-};
-
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory([ChromeNotifications]);
deleted file mode 100644
--- a/dom/src/notification/ChromeNotifications.manifest
+++ /dev/null
@@ -1,3 +0,0 @@
-# ChromeNotifications.js
-component {74f94093-8b37-497e-824f-c3b250a911da} ChromeNotifications.js
-contract @mozilla.org/mozChromeNotifications;1 {74f94093-8b37-497e-824f-c3b250a911da}
--- a/dom/src/notification/Notification.cpp
+++ b/dom/src/notification/Notification.cpp
@@ -418,32 +418,16 @@ NotificationObserver::Observe(nsISupport
 Notification::Notification(const nsAString& aID, const nsAString& aTitle, const nsAString& aBody,
                            NotificationDirection aDir, const nsAString& aLang,
                            const nsAString& aTag, const nsAString& aIconUrl,
 			   nsPIDOMWindow* aWindow)
   : DOMEventTargetHelper(aWindow),
     mID(aID), mTitle(aTitle), mBody(aBody), mDir(aDir), mLang(aLang),
     mTag(aTag), mIconUrl(aIconUrl), mIsClosed(false)
 {
-  nsAutoString alertName;
-  DebugOnly<nsresult> rv = GetOrigin(GetOwner(), alertName);
-  MOZ_ASSERT(NS_SUCCEEDED(rv), "GetOrigin should not have failed");
-
-  // Get the notification name that is unique per origin + tag/ID.
-  // The name of the alert is of the form origin#tag/ID.
-  alertName.AppendLiteral("#");
-  if (!mTag.IsEmpty()) {
-    alertName.Append(NS_LITERAL_STRING("tag:"));
-    alertName.Append(mTag);
-  } else {
-    alertName.Append(NS_LITERAL_STRING("notag:"));
-    alertName.Append(mID);
-  }
-
-  mAlertName = alertName;
 }
 
 // static
 already_AddRefed<Notification>
 Notification::Constructor(const GlobalObject& aGlobal,
                           const nsAString& aTitle,
                           const NotificationOptions& aOptions,
                           ErrorResult& aRv)
@@ -473,29 +457,24 @@ Notification::Constructor(const GlobalOb
   nsString origin;
   aRv = GetOrigin(window, origin);
   if (aRv.Failed()) {
     return nullptr;
   }
 
   nsString id;
   notification->GetID(id);
-
-  nsString alertName;
-  notification->GetAlertName(alertName);
-
   aRv = notificationStorage->Put(origin,
                                  id,
                                  aTitle,
                                  DirectionToString(aOptions.mDir),
                                  aOptions.mLang,
                                  aOptions.mBody,
                                  aOptions.mTag,
-                                 aOptions.mIcon,
-                                 alertName);
+                                 aOptions.mIcon);
   if (aRv.Failed()) {
     return nullptr;
   }
 
   return notification.forget();
 }
 
 already_AddRefed<Notification>
@@ -573,16 +552,20 @@ Notification::ShowInternal()
         }
       }
 
     }
   }
 
   nsCOMPtr<nsIObserver> observer = new NotificationObserver(this);
 
+  nsString alertName;
+  rv = GetAlertName(alertName);
+  NS_ENSURE_SUCCESS_VOID(rv);
+
 #ifdef MOZ_B2G
   nsCOMPtr<nsIAppNotificationService> appNotifier =
     do_GetService("@mozilla.org/system-alerts-service;1");
   if (appNotifier) {
     nsCOMPtr<nsPIDOMWindow> window = GetOwner();
     uint32_t appId = (window.get())->GetDoc()->NodePrincipal()->GetAppId();
 
     if (appId != nsIScriptSecurityManager::UNKNOWN_APP_ID) {
@@ -590,17 +573,17 @@ Notification::ShowInternal()
       nsString manifestUrl = EmptyString();
       rv = appsService->GetManifestURLByLocalId(appId, manifestUrl);
       if (NS_SUCCEEDED(rv)) {
         mozilla::AutoSafeJSContext cx;
         JS::Rooted<JS::Value> val(cx);
         AppNotificationServiceOptions ops;
         ops.mTextClickable = true;
         ops.mManifestURL = manifestUrl;
-        ops.mId = mAlertName;
+        ops.mId = alertName;
         ops.mDbId = mID;
         ops.mDir = DirectionToString(mDir);
         ops.mLang = mLang;
         ops.mTag = mTag;
 
         if (!ops.ToObject(cx, &val)) {
           NS_WARNING("Converting dict to object failed!");
           return;
@@ -614,17 +597,17 @@ Notification::ShowInternal()
   }
 #endif
 
   // In the case of IPC, the parent process uses the cookie to map to
   // nsIObserver. Thus the cookie must be unique to differentiate observers.
   nsString uniqueCookie = NS_LITERAL_STRING("notification:");
   uniqueCookie.AppendInt(sCount++);
   alertService->ShowAlertNotification(absoluteUrl, mTitle, mBody, true,
-                                      uniqueCookie, observer, mAlertName,
+                                      uniqueCookie, observer, alertName,
                                       DirectionToString(mDir), mLang,
                                              GetPrincipal());
 }
 
 void
 Notification::RequestPermission(const GlobalObject& aGlobal,
                                 const Optional<OwningNonNull<NotificationPermissionCallback> >& aCallback,
                                 ErrorResult& aRv)
@@ -783,18 +766,20 @@ Notification::CloseInternal()
       if (NS_SUCCEEDED(rv)) {
         notificationStorage->Delete(origin, mID);
       }
     }
 
     nsCOMPtr<nsIAlertsService> alertService =
       do_GetService(NS_ALERTSERVICE_CONTRACTID);
     if (alertService) {
+      nsString alertName;
+      rv = GetAlertName(alertName);
       if (NS_SUCCEEDED(rv)) {
-        alertService->CloseAlert(mAlertName, GetPrincipal());
+        alertService->CloseAlert(alertName, GetPrincipal());
       }
     }
   }
 }
 
 nsresult
 Notification::GetOrigin(nsPIDOMWindow* aWindow, nsString& aOrigin)
 {
@@ -822,11 +807,29 @@ Notification::GetOrigin(nsPIDOMWindow* a
       do_GetService("@mozilla.org/AppsService;1", &rv);
     NS_ENSURE_SUCCESS(rv, rv);
     appsService->GetManifestURLByLocalId(appId, aOrigin);
   }
 
   return NS_OK;
 }
 
+nsresult
+Notification::GetAlertName(nsString& aAlertName)
+{
+  // Get the notification name that is unique per origin + tag/ID.
+  // The name of the alert is of the form origin#tag/ID.
+  nsresult rv = GetOrigin(GetOwner(), aAlertName);
+  NS_ENSURE_SUCCESS(rv, rv);
+  aAlertName.AppendLiteral("#");
+  if (!mTag.IsEmpty()) {
+    aAlertName.Append(NS_LITERAL_STRING("tag:"));
+    aAlertName.Append(mTag);
+  } else {
+    aAlertName.Append(NS_LITERAL_STRING("notag:"));
+    aAlertName.Append(mID);
+  }
+  return NS_OK;
+}
+
 } // namespace dom
 } // namespace mozilla
 
--- a/dom/src/notification/Notification.h
+++ b/dom/src/notification/Notification.h
@@ -128,31 +128,26 @@ protected:
     if (aDirection.EqualsLiteral("rtl")) {
       return NotificationDirection::Rtl;
     }
     return NotificationDirection::Auto;
   }
 
   static nsresult GetOrigin(nsPIDOMWindow* aWindow, nsString& aOrigin);
 
-  void GetAlertName(nsAString& aRetval)
-  {
-    aRetval = mAlertName;
-  }
+  nsresult GetAlertName(nsString& aAlertName);
 
   nsString mID;
   nsString mTitle;
   nsString mBody;
   NotificationDirection mDir;
   nsString mLang;
   nsString mTag;
   nsString mIconUrl;
 
-  nsString mAlertName;
-
   bool mIsClosed;
 
   static uint32_t sCount;
 
 private:
   nsIPrincipal* GetPrincipal();
 };
 
--- a/dom/src/notification/NotificationDB.jsm
+++ b/dom/src/notification/NotificationDB.jsm
@@ -11,19 +11,16 @@ function debug(s) { dump("-*- Notificati
 
 const Cu = Components.utils;
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/osfile.jsm");
 
-XPCOMUtils.defineLazyModuleGetter(this, "Services",
-                                  "resource://gre/modules/Services.jsm");
-
 XPCOMUtils.defineLazyServiceGetter(this, "ppmm",
                                    "@mozilla.org/parentprocessmessagemanager;1",
                                    "nsIMessageListenerManager");
 
 XPCOMUtils.defineLazyGetter(this, "gEncoder", function() {
   return new TextEncoder();
 });
 
@@ -31,63 +28,28 @@ XPCOMUtils.defineLazyGetter(this, "gDeco
   return new TextDecoder();
 });
 
 
 const NOTIFICATION_STORE_DIR = OS.Constants.Path.profileDir;
 const NOTIFICATION_STORE_PATH =
         OS.Path.join(NOTIFICATION_STORE_DIR, "notificationstore.json");
 
-const kMessages = [
-  "Notification:Save",
-  "Notification:Delete",
-  "Notification:GetAll",
-  "Notification:GetAllCrossOrigin"
-];
-
 let NotificationDB = {
-
-  // Ensure we won't call init() while xpcom-shutdown is performed
-  _shutdownInProgress: false,
-
   init: function() {
-    if (this._shutdownInProgress) {
-      return;
-    }
-
     this.notifications = {};
     this.byTag = {};
     this.loaded = false;
 
     this.tasks = []; // read/write operation queue
     this.runningTask = false;
 
-    Services.obs.addObserver(this, "xpcom-shutdown", false);
-    this.registerListeners();
-  },
-
-  registerListeners: function() {
-    for (let message of kMessages) {
-      ppmm.addMessageListener(message, this);
-    }
-  },
-
-  unregisterListeners: function() {
-    for (let message of kMessages) {
-      ppmm.removeMessageListener(message, this);
-    }
-  },
-
-  observe: function(aSubject, aTopic, aData) {
-    if (DEBUG) debug("Topic: " + aTopic);
-    if (aTopic == "xpcom-shutdown") {
-      this._shutdownInProgress = true;
-      Services.obs.removeObserver(this, "xpcom-shutdown");
-      this.unregisterListeners();
-    }
+    ppmm.addMessageListener("Notification:Save", this);
+    ppmm.addMessageListener("Notification:Delete", this);
+    ppmm.addMessageListener("Notification:GetAll", this);
   },
 
   // Attempt to read notification file, if it's not there we will create it.
   load: function(callback) {
     var promise = OS.File.read(NOTIFICATION_STORE_PATH);
     promise.then(
       function onSuccess(data) {
         try {
@@ -193,25 +155,16 @@ let NotificationDB = {
         this.queueTask("getall", message.data, function(notifications) {
           returnMessage("Notification:GetAll:Return:OK", {
             requestID: message.data.requestID,
             notifications: notifications
           });
         });
         break;
 
-      case "Notification:GetAllCrossOrigin":
-        this.queueTask("getallaccrossorigin", message.data,
-          function(notifications) {
-            returnMessage("Notification:GetAllCrossOrigin:Return:OK", {
-              notifications: notifications
-            });
-          });
-        break;
-
       case "Notification:Save":
         this.queueTask("save", message.data, function() {
           returnMessage("Notification:Save:Return:OK", {
             requestID: message.data.requestID
           });
         });
         break;
 
@@ -235,24 +188,24 @@ let NotificationDB = {
     this.tasks.push({
       operation: operation,
       data: data,
       callback: callback
     });
 
     // Only run immediately if we aren't currently running another task.
     if (!this.runningTask) {
-      if (DEBUG) { debug("Task queue was not running, starting now..."); }
+      if (DEBUG) { dump("Task queue was not running, starting now..."); }
       this.runNextTask();
     }
   },
 
   runNextTask: function() {
     if (this.tasks.length === 0) {
-      if (DEBUG) { debug("No more tasks to run, queue depleted"); }
+      if (DEBUG) { dump("No more tasks to run, queue depleted"); }
       this.runningTask = false;
       return;
     }
     this.runningTask = true;
 
     // Always make sure we are loaded before performing any read/write tasks.
     this.ensureLoaded(function() {
       var task = this.tasks.shift();
@@ -265,20 +218,16 @@ let NotificationDB = {
         this.runNextTask();
       }.bind(this);
 
       switch (task.operation) {
         case "getall":
           this.taskGetAll(task.data, wrappedCallback);
           break;
 
-        case "getallaccrossorigin":
-          this.taskGetAllCrossOrigin(wrappedCallback);
-          break;
-
         case "save":
           this.taskSave(task.data, wrappedCallback);
           break;
 
         case "delete":
           this.taskDelete(task.data, wrappedCallback);
           break;
       }
@@ -291,37 +240,16 @@ let NotificationDB = {
     var notifications = [];
     // Grab only the notifications for specified origin.
     for (var i in this.notifications[origin]) {
       notifications.push(this.notifications[origin][i]);
     }
     callback(notifications);
   },
 
-  taskGetAllCrossOrigin: function(callback) {
-    if (DEBUG) { debug("Task, getting all whatever origin"); }
-    var notifications = [];
-    for (var origin in this.notifications) {
-      for (var i in this.notifications[origin]) {
-        var notification = this.notifications[origin][i];
-
-        // Notifications without the alertName field cannot be resent by
-        // mozResendAllNotifications, so we just skip them. They will
-        // still be available to applications via Notification.get()
-        if (!('alertName' in notification)) {
-          continue;
-        }
-
-        notification.origin = origin;
-        notifications.push(notification);
-      }
-    }
-    callback(notifications);
-  },
-
   taskSave: function(data, callback) {
     if (DEBUG) { debug("Task, saving"); }
     var origin = data.origin;
     var notification = data.notification;
     if (!this.notifications[origin]) {
       this.notifications[origin] = {};
       this.byTag[origin] = {};
     }
--- a/dom/src/notification/NotificationStorage.js
+++ b/dom/src/notification/NotificationStorage.js
@@ -31,28 +31,26 @@ function NotificationStorage() {
   this._requestCount = 0;
 
   // Register for message listeners.
   cpmm.addMessageListener("Notification:GetAll:Return:OK", this);
 }
 
 NotificationStorage.prototype = {
 
-  put: function(origin, id, title, dir, lang, body, tag, icon, alertName) {
+  put: function(origin, id, title, dir, lang, body, tag, icon) {
     if (DEBUG) { debug("PUT: " + id + ": " + title); }
     var notification = {
       id: id,
       title: title,
       dir: dir,
       lang: lang,
       body: body,
       tag: tag,
-      icon: icon,
-      alertName: alertName,
-      timestamp: new Date().getTime()
+      icon: icon
     };
 
     this._notifications[id] = notification;
     if (tag) {
       // We might have existing notification with this tag,
       // if so we need to remove it from our cache.
       if (this._byTag[tag]) {
         var oldNotification = this._byTag[tag];
--- a/dom/src/notification/moz.build
+++ b/dom/src/notification/moz.build
@@ -1,17 +1,15 @@
 # -*- Mode: python; c-basic-offset: 4; 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/.
 
 EXTRA_COMPONENTS += [
-    'ChromeNotifications.js',
-    'ChromeNotifications.manifest',
     'NotificationStorage.js',
     'NotificationStorage.manifest',
 ]
 
 EXTRA_JS_MODULES += [
     'NotificationDB.jsm'
 ]
 
--- a/dom/src/notification/test/unit/test_notificationdb.js
+++ b/dom/src/notification/test/unit/test_notificationdb.js
@@ -331,121 +331,8 @@ add_test(function test_send_two_get_two(
   });
 
   cpmm.sendAsyncMessage("Notification:Save", {
     origin: calendarNotification2.origin,
     notification: calendarNotification2,
     requestID: (requestID + 1) // 21
   });
 });
-
-// Cleanup previous notification
-add_test(function test_delete_previous() {
-  let requestID = 25;
-  let msgReply = "Notification:Delete:Return:OK";
-  let msgHandler = function(message) {
-    do_check_eq(requestID, message.data.requestID);
-  };
-
-  addAndSend("Notification:Delete", msgReply, msgHandler, {
-    origin: systemNotification.origin,
-    id: "{8ef9a628-f0f4-44b4-820d-c117573c33e3}",
-    requestID: requestID
-  });
-});
-
-// Store two notifications, one without alertName and one with
-add_test(function test_send_two_alertName() {
-  let requestID = 30;
-  let notifications = [
-    {
-      origin: "app://system.gaiamobile.org/manifest.webapp",
-      id: "{27ead857-4f43-457f-a770-93b82fbfc223}",
-      title: "Notification title",
-      dir: "auto",
-      lang: "",
-      body: "Notification body",
-      tag: "",
-      icon: "icon.png",
-      timestamp: new Date().getTime()
-    }, {
-      origin: "app://system.gaiamobile.org/manifest.webapp",
-      id: "{40275e04-58d0-47be-8cc7-540578f793a4}",
-      title: "Notification title",
-      dir: "auto",
-      lang: "",
-      body: "Notification body",
-      tag: "",
-      icon: "icon.png",
-      alertName: "alertName",
-      timestamp: new Date().getTime()
-    }
-  ];
-  let origin = notifications[0].origin;
-
-  let msgGetCrossOriginReply = "Notification:GetAllCrossOrigin:Return:OK";
-  let msgGetCrossOriginHandler = {
-    receiveMessage: function(message) {
-      if (message.name === msgGetCrossOriginReply) {
-        cpmm.removeMessageListener(
-          msgGetCrossOriginReply, msgGetCrossOriginHandler);
-
-        let gotNotifications = message.data.notifications;
-
-        // we expect to have one notification
-        do_check_eq(1, gotNotifications.length);
-
-        // compare the only notification we should have got back
-        compareNotification(gotNotifications[0], notifications[1]);
-
-        run_next_test();
-      }
-    }
-  };
-  cpmm.addMessageListener(msgGetCrossOriginReply, msgGetCrossOriginHandler);
-
-  let msgGetReply = "Notification:GetAll:Return:OK";
-  let msgGetHandler = {
-    receiveMessage: function(message) {
-      if (message.name === msgGetReply) {
-        cpmm.removeMessageListener(msgGetReply, msgGetHandler);
-
-        let gotNotifications = message.data.notifications;
-
-        // we expect to have two notifications
-        do_check_eq(2, gotNotifications.length);
-
-        // compare each notification
-        for (let i = 0; i < gotNotifications.length; i++) {
-          compareNotification(gotNotifications[i], notifications[i]);
-        }
-
-        run_next_test();
-      }
-    }
-  };
-  cpmm.addMessageListener(msgGetReply, msgGetHandler);
-
-  let msgSaveReply = "Notification:Save:Return:OK";
-  let msgSaveCalls = 0;
-  let msgSaveHandler = {
-    receiveMessage: function(message) {
-      if (message.name === msgSaveReply) {
-        msgSaveCalls++;
-        if (msgSaveCalls === 2) {
-          cpmm.removeMessageListener(msgSaveReply, msgSaveHandler);
-          // Trigger getall
-          cpmm.sendAsyncMessage("Notification:GetAll", {
-            origin: origin
-          });
-        }
-      }
-    }
-  };
-  cpmm.addMessageListener(msgSaveReply, msgSaveHandler);
-
-  notifications.forEach(function(n) {
-    cpmm.sendAsyncMessage("Notification:Save", {
-      origin: origin,
-      notification: n
-    });
-  });
-});
--- a/dom/tests/mochitest/notification/MockServices.js
+++ b/dom/tests/mochitest/notification/MockServices.js
@@ -7,76 +7,51 @@ var MockServices = (function () {
 
   const MOCK_SYSTEM_ALERTS_CID = SpecialPowers.wrap(SpecialPowers.Components)
                                  .ID("{e86d888c-e41b-4b78-9104-2f2742a532de}");
   const SYSTEM_ALERTS_SERVICE_CONTRACT_ID = "@mozilla.org/system-alerts-service;1";
 
   var registrar = SpecialPowers.wrap(SpecialPowers.Components).manager
                   .QueryInterface(SpecialPowers.Ci.nsIComponentRegistrar);
 
-  var activeAlertNotifications = Object.create(null);
-
-  var activeAppNotifications = Object.create(null);
+  var activeNotifications = Object.create(null);
 
   var mockAlertsService = {
     showAlertNotification: function(imageUrl, title, text, textClickable,
                                     cookie, alertListener, name) {
       var listener = SpecialPowers.wrap(alertListener);
-      activeAlertNotifications[name] = {
+      activeNotifications[name] = {
         listener: listener,
         cookie: cookie
       };
 
       // fake async alert show event
-      if (listener) {
-        setTimeout(function () {
-          listener.observe(null, "alertshow", cookie);
-        }, 100);
-      }
+      setTimeout(function () {
+        listener.observe(null, "alertshow", cookie);
+      }, 100);
 
       // ?? SpecialPowers.wrap(alertListener).observe(null, "alertclickcallback", cookie);
     },
 
-    showAppNotification: function(aImageUrl, aTitle, aText, aAlertListener, aDetails) {
-      var listener = aAlertListener || (activeAlertNotifications[aDetails.id] ? activeAlertNotifications[aDetails.id].listener : undefined);
-      activeAppNotifications[aDetails.id] = {
-        observer: listener,
-        title: aTitle,
-        text: aText,
-        manifestURL: aDetails.manifestURL,
-        imageURL: aImageUrl,
-        lang: aDetails.lang || undefined,
-        id: aDetails.id || undefined,
-        dbId: aDetails.dbId || undefined,
-        dir: aDetails.dir || undefined,
-        tag: aDetails.tag || undefined,
-        timestamp: aDetails.timestamp || undefined
-      };
-      this.showAlertNotification(aImageUrl, aTitle, aText, true, "", listener, aDetails.id);
+    showAppNotification: function(imageUrl, title, text, textClickable,
+                                  manifestURL, alertListener, name) {
+      this.showAlertNotification(imageUrl, title, text, textClickable, "", alertListener, name);
     },
 
     closeAlert: function(name) {
-      var alertNotification = activeAlertNotifications[name];
-      if (alertNotification) {
-        if (alertNotification.listener) {
-          alertNotification.listener.observe(null, "alertfinished", alertNotification.cookie);
-        }
-        delete activeAlertNotifications[name];
-      }
-
-      var appNotification = activeAppNotifications[name];
-      if (appNotification) {
-        delete activeAppNotifications[name];
+      var notification = activeNotifications[name];
+      if (notification) {
+        notification.listener.observe(null, "alertfinished", notification.cookie);
+        delete activeNotifications[name];
       }
     },
 
     QueryInterface: function(aIID) {
       if (SpecialPowers.wrap(aIID).equals(SpecialPowers.Ci.nsISupports) ||
-          SpecialPowers.wrap(aIID).equals(SpecialPowers.Ci.nsIAlertsService) ||
-          SpecialPowers.wrap(aIID).equals(SpecialPowers.Ci.nsIAppNotificationService)) {
+          SpecialPowers.wrap(aIID).equals(SpecialPowers.Ci.nsIAlertsService)) {
         return this;
       }
       throw SpecialPowers.Components.results.NS_ERROR_NO_INTERFACE;
     },
 
     createInstance: function(aOuter, aIID) {
       if (aOuter != null) {
         throw SpecialPowers.Components.results.NS_ERROR_NO_AGGREGATION;
@@ -97,13 +72,10 @@ var MockServices = (function () {
           SYSTEM_ALERTS_SERVICE_CONTRACT_ID,
           mockAlertsService);
     },
 
     unregister: function () {
       registrar.unregisterFactory(MOCK_ALERTS_CID, mockAlertsService);
       registrar.unregisterFactory(MOCK_SYSTEM_ALERTS_CID, mockAlertsService);
     },
-
-    activeAlertNotifications: activeAlertNotifications,
-    activeAppNotifications: activeAppNotifications,
   };
 })();
--- a/dom/tests/mochitest/notification/mochitest.ini
+++ b/dom/tests/mochitest/notification/mochitest.ini
@@ -4,9 +4,8 @@ support-files =
   MockServices.js
   NotificationTest.js
 
 [test_notification_basics.html]
 [test_notification_storage.html]
 skip-if = (toolkit == 'gonk' && debug) #debug-only timeout
 [test_bug931307.html]
 skip-if = (toolkit == 'gonk' && debug) #debug-only timeout
-[test_notification_resend.html]
--- a/dom/tests/mochitest/notification/test_bug931307.html
+++ b/dom/tests/mochitest/notification/test_bug931307.html
@@ -8,26 +8,24 @@
   <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
 </head>
 <body>
 <pre id="test">
 <script type="application/javascript"><!--
 
 SimpleTest.waitForExplicitFinish();
-var notification = new Notification("");
+new Notification("");
 var promise = Notification.get();
 promise.then(
   function onSuccess() {
     ok(true, "No crash!");
-    notification.close();
     SimpleTest.finish();
   },
   function onFailure() {
     ok(false, "Should not get an error in promise callback");
-    notification.close();
   }
 );
 
 </script>
 </pre>
 </body>
 </html>
--- a/dom/tests/mochitest/notification/test_notification_basics.html
+++ b/dom/tests/mochitest/notification/test_notification_basics.html
@@ -98,17 +98,17 @@
       var notification = this.notification;
 
       notification.onclose = function () {
         ok(true, "onclose handler should be called");
         done();
       };
 
       notification.close();
-    }
+    },
   ];
 
   MockServices.register();
   NotificationTest.run(steps, function () {
     MockServices.unregister();
   });
 </script>
 </body>
deleted file mode 100644
--- a/dom/tests/mochitest/notification/test_notification_resend.html
+++ /dev/null
@@ -1,170 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>
-  <title>Testing mozResendAllNotifications() resend behavior</title>
-  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
-  <script type="text/javascript" src="MockServices.js"></script>
-  <script type="text/javascript" src="NotificationTest.js"></script>
-  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=967475">Bug 967475</a>
-<p id="display"></p>
-<div id="content" style="display: none"></div>
-<pre id="test"></pre>
-<script type="text/javascript">
-  var info = NotificationTest.info;
-  var now = new Date().getTime();
-  var notifications = [];
-  var manifestURL;
-
-  var steps = [
-    function (done) {
-      if (window.Notification) {
-        SpecialPowers.pushPrefEnv({"set": [
-          ["dom.ignore_webidl_scope_checks", true],
-          ]}, done);
-      } else {
-        ok(true, "Notifications are not enabled on the platform.");
-        done();
-      }
-    },
-
-    function (done) {
-      info("Set manifestURL");
-      var request = window.navigator.mozApps.getSelf();
-      request.onsuccess = function() {
-        if (request.result) {
-          manifestURL = request.result.manifestURL;
-        } else {
-          manifestURL = window.location.origin;
-        }
-        info("Value of manifestURL is: " + manifestURL);
-        done();
-      };
-    },
-
-    function (done) {
-      info("Test that we have mozChromeNotifications API");
-      ok(('mozChromeNotifications' in navigator), "should have mozChromeNotifications API");
-      ok(('mozResendAllNotifications' in navigator.mozChromeNotifications), "should have mozResendAllNotifications()");
-      done();
-    },
-
-    function (done) {
-      info("Making sure we have no previous notification pending");
-      var promise = Notification.get();
-      promise.then(function (notifications) {
-        is(notifications.length, 0, "notifications are all cleaned");
-        done();
-      });
-    },
-
-    function (done) {
-      info("Sending one notification");
-      var notif = new Notification("title");
-      ok(notif, "Notification object is valid");
-      notifications.push(notif);
-
-      var promise = Notification.get();
-      promise.then(function (notifications) {
-        is(notifications.length, 1, "one notification has been sent");
-        done();
-      });
-    },
-
-    function (done) {
-      info("Trying to resend the notification");
-      var notif = notifications.pop();
-      notif.onclose = function() {
-        done();
-      };
-
-      navigator.mozChromeNotifications.mozResendAllNotifications(function(number) {
-        is(number, 1, "One notification resent");
-        notif.close();
-      });
-    },
-
-    function (done) {
-      info("Sending two notifications, closing one");
-      var notif1 = new Notification("title1");
-      ok(notif1, "Notification object is valid");
-      notif1.onclose = function() {
-        done();
-      };
-
-      var payload = {
-        body: "Body",
-        tag: "fakeTag",
-        icon: "icon.jpg",
-        lang: "en-US",
-        dir: "ltr"
-      };
-      var notif2 = new Notification("Title2", payload);
-      ok(notif2, "Notification object is valid");
-      notifications.push(notif2);
-
-      var promise = Notification.get();
-      promise.then(function (notifications) {
-        is(notifications.length, 2, "two notifications have been sent");
-        notif1.close();
-      });
-    },
-
-    function (done) {
-      info("Checking if only notif2 is resent");
-      navigator.mozChromeNotifications.mozResendAllNotifications(function(number) {
-        is(number, 1, "One notification resent");
-        var promise = Notification.get();
-        promise.then(function (notifications) {
-          is(notifications.length, 1, "one notification still available");
-          is(notifications[0].title, "Title2", "notification title is 'Title2'");
-          done();
-        });
-      });
-    },
-
-    function (done) {
-      info("Checking ShowAppNotification behavior");
-
-      var notif2 = notifications.pop();
-      notif2.onclose = function() {
-        done();
-      };
-
-      navigator.mozChromeNotifications.mozResendAllNotifications(function(number) {
-        is(number, 1, "One notification resent");
-        var appNotifs = MockServices.activeAppNotifications;
-        var alertNotifs = MockServices.activeAlertNotifications;
-        var nbAppNotifs = Object.keys(appNotifs).length;
-        var nbAlertNotifs = Object.keys(alertNotifs).length;
-        is(nbAppNotifs, 1, "AlertsServices has one app notification");
-        is(nbAlertNotifs, 1, "AlertsServices has one alert notification");
-
-        var uuidRegEx = /[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}/;
-        var notif = appNotifs[Object.keys(appNotifs)[0]];
-        ok(notif, "Notification object is valid");
-        ok((typeof notif.observer === "object"), "Notification observer is valid");
-        is(notif.title, "Title2", "Notification title is valid: " + notif.title);
-        is(notif.text, "Body", "Notification body is valid: " + notif.text);
-        is(notif.manifestURL, manifestURL, "Notification manifest URL is valid: " + notif.manifestURL);
-        is(notif.imageURL, "icon.jpg", "Notification icon URL is valid: " + notif.imageURL);
-        is(notif.lang, "en-US", "Notification lang is valid: " + notif.lang);
-        is(notif.id, notif.manifestURL + "#tag:" + notif.tag, "Notification id is valid: " + notif.id);
-        ok(notif.dbId.match(uuidRegEx), "Notification dbId is valid: " + notif.dbId);
-        is(notif.dir, "ltr", "Notification dir is valid: " + notif.dir);
-        is(notif.tag, "fakeTag", "Notification tag is valid: " + notif.tag);
-        ok((notif.timestamp > now), "Notification timestamp is valid: " + notif.timestamp);
-        notif2.close();
-      });
-    }
-  ];
-
-  MockServices.register();
-  NotificationTest.run(steps, function () {
-    MockServices.unregister();
-  });
-</script>
-</body>
-</html>
--- a/dom/tests/mochitest/notification/test_notification_storage.html
+++ b/dom/tests/mochitest/notification/test_notification_storage.html
@@ -112,22 +112,20 @@
 
     function (done) {
       info("Testing fetching multiple notifications");
       var n1 = new Notification("title1");
       var n2 = new Notification("title2");
       var n3 = new Notification("title3");
       var promise = Notification.get();
       promise.then(function (notifications) {
-        is(notifications.length, 3, "should return 3 notifications");
+        is(notifications.length, 3, "should return 2 notifications");
         done();
       });
-    },
-
-    deleteAllNotifications
+    }
   ];
 
   MockServices.register();
   NotificationTest.run(steps, function () {
     MockServices.unregister();
   });
 </script>
 </body>
deleted file mode 100644
--- a/dom/webidl/ChromeNotifications.webidl
+++ /dev/null
@@ -1,14 +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/.
- */
-
-[JSImplementation="@mozilla.org/mozChromeNotifications;1",
- NavigatorProperty="mozChromeNotifications",
- AvailableIn="CertifiedApps"]
-interface ChromeNotifications {
-  void mozResendAllNotifications(ResendCallback resendCallback);
-};
-
-callback ResendCallback = void (long count);
--- a/dom/webidl/moz.build
+++ b/dom/webidl/moz.build
@@ -47,17 +47,16 @@ WEBIDL_FILES = [
     'CameraManager.webidl',
     'CanvasRenderingContext2D.webidl',
     'CaretPosition.webidl',
     'CDATASection.webidl',
     'ChannelMergerNode.webidl',
     'ChannelSplitterNode.webidl',
     'CharacterData.webidl',
     'ChildNode.webidl',
-    'ChromeNotifications.webidl',
     'ClipboardEvent.webidl',
     'CommandEvent.webidl',
     'Comment.webidl',
     'CompositionEvent.webidl',
     'Console.webidl',
     'Constraints.webidl',
     'Contacts.webidl',
     'ConvolverNode.webidl',
--- a/mobile/android/installer/package-manifest.in
+++ b/mobile/android/installer/package-manifest.in
@@ -277,18 +277,16 @@
 @BINPATH@/components/xpconnect.xpt
 @BINPATH@/components/xulapp.xpt
 @BINPATH@/components/xul.xpt
 @BINPATH@/components/xuldoc.xpt
 @BINPATH@/components/xultmpl.xpt
 @BINPATH@/components/zipwriter.xpt
 
 ; JavaScript components
-@BINPATH@/components/ChromeNotifications.js
-@BINPATH@/components/ChromeNotifications.manifest
 @BINPATH@/components/ConsoleAPI.manifest
 @BINPATH@/components/ConsoleAPIStorage.js
 @BINPATH@/components/ContactManager.js
 @BINPATH@/components/ContactManager.manifest
 @BINPATH@/components/PhoneNumberService.js
 @BINPATH@/components/PhoneNumberService.manifest
 @BINPATH@/components/NotificationStorage.js
 @BINPATH@/components/NotificationStorage.manifest