Merge b2g to m-c
authorWes Kocher <wkocher@mozilla.com>
Thu, 08 May 2014 19:06:08 -0700
changeset 202568 cf89b5d018f8c2728c078e438315d9fcdb871ab8
parent 202557 3be3140b2b61311842d06f394af3d5b57a815562 (current diff)
parent 202567 dce9bf32da45fda2f78e337de554d0d50368b7fe (diff)
child 202591 c69b5ce078fe461777fde4b10e670f6fb70b0ccd
child 202616 4c31d73a163fc95d013bb5559375759505a3d88f
child 202628 25ea18ce57417a2dc142a06c5bbfd22fcb6222ae
push id494
push userraliiev@mozilla.com
push dateMon, 25 Aug 2014 18:42:16 +0000
treeherdermozilla-release@a3cc3e46b571 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone32.0a1
first release with
nightly linux32
cf89b5d018f8 / 32.0a1 / 20140509030227 / files
nightly linux64
cf89b5d018f8 / 32.0a1 / 20140509030227 / files
nightly mac
cf89b5d018f8 / 32.0a1 / 20140509030227 / files
nightly win32
cf89b5d018f8 / 32.0a1 / 20140509030227 / files
nightly win64
cf89b5d018f8 / 32.0a1 / 20140509030227 / files
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
releases
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge b2g to m-c
dom/src/notification/ChromeNotifications.js
dom/src/notification/ChromeNotifications.manifest
dom/tests/mochitest/notification/test_notification_resend.html
dom/webidl/ChromeNotifications.webidl
--- 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/config/emulator-ics/sources.xml
+++ b/b2g/config/emulator-ics/sources.xml
@@ -14,17 +14,17 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="refs/tags/android-4.0.4_r2.1" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="2a165bebfa19b11b697837409f9550dd2917c46c">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="f4eb209f9c425692cda9230a9fd669f8f76a1c68"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="ca283b9db2b151d465cfd2e19346cf58fe89e413"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="d5800c36b2d5822fc3fe1899b9280401de466e1e"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="3691614d0045f7968addce45d4140fb360c3ceaf"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
--- a/b2g/config/emulator-jb/sources.xml
+++ b/b2g/config/emulator-jb/sources.xml
@@ -12,17 +12,17 @@
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="e6383e6e785cc3ea237e902beb1092f9aa88e29d">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="f4eb209f9c425692cda9230a9fd669f8f76a1c68"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="3691614d0045f7968addce45d4140fb360c3ceaf"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="5c45f43419d5582949284eee9cef0c43d866e03b"/>
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="3748b4168e7bd8d46457d4b6786003bc6a5223ce"/>
--- a/b2g/config/emulator-kk/sources.xml
+++ b/b2g/config/emulator-kk/sources.xml
@@ -10,17 +10,17 @@
   <!--original fetch url was git://codeaurora.org/-->
   <remote fetch="https://git.mozilla.org/external/caf" name="caf"/>
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="65fba428f8d76336b33ddd9e15900357953600ba">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="f4eb209f9c425692cda9230a9fd669f8f76a1c68"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="3691614d0045f7968addce45d4140fb360c3ceaf"/>
   <!-- Stock Android things -->
--- a/b2g/config/emulator/sources.xml
+++ b/b2g/config/emulator/sources.xml
@@ -14,17 +14,17 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="refs/tags/android-4.0.4_r2.1" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="2a165bebfa19b11b697837409f9550dd2917c46c">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="f4eb209f9c425692cda9230a9fd669f8f76a1c68"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="ca283b9db2b151d465cfd2e19346cf58fe89e413"/>
   <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="d5800c36b2d5822fc3fe1899b9280401de466e1e"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="3691614d0045f7968addce45d4140fb360c3ceaf"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
--- a/b2g/config/flame/sources.xml
+++ b/b2g/config/flame/sources.xml
@@ -13,17 +13,17 @@
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="e6383e6e785cc3ea237e902beb1092f9aa88e29d">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="f4eb209f9c425692cda9230a9fd669f8f76a1c68"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="3691614d0045f7968addce45d4140fb360c3ceaf"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="e95b4ce22c825da44d14299e1190ea39a5260bde"/>
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="471afab478649078ad7c75ec6b252481a59e19b8"/>
--- a/b2g/config/gaia.json
+++ b/b2g/config/gaia.json
@@ -1,9 +1,9 @@
 {
     "git": {
         "git_revision": "", 
         "remote": "", 
         "branch": ""
     }, 
-    "revision": "fbf868517b3026b39be4afac45883ddf76f6bc9d", 
+    "revision": "5476e49adf00cafde6cb68e876f0514dac4b993d", 
     "repo_path": "/integration/gaia-central"
 }
--- a/b2g/config/hamachi/sources.xml
+++ b/b2g/config/hamachi/sources.xml
@@ -12,17 +12,17 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="b2g/ics_strawberry" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="2a165bebfa19b11b697837409f9550dd2917c46c">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="f4eb209f9c425692cda9230a9fd669f8f76a1c68"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="3691614d0045f7968addce45d4140fb360c3ceaf"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
   <project name="platform/bionic" path="bionic" revision="d2eb6c7b6e1bc7643c17df2d9d9bcb1704d0b9ab"/>
--- a/b2g/config/helix/sources.xml
+++ b/b2g/config/helix/sources.xml
@@ -10,17 +10,17 @@
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <default remote="caf" revision="b2g/ics_strawberry" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="2a165bebfa19b11b697837409f9550dd2917c46c">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="f4eb209f9c425692cda9230a9fd669f8f76a1c68"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
   <project name="gonk-patches" path="patches" remote="b2g" revision="223a2421006e8f5da33f516f6891c87cae86b0f6"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
   <project name="platform/bionic" path="bionic" revision="d2eb6c7b6e1bc7643c17df2d9d9bcb1704d0b9ab"/>
--- a/b2g/config/inari/sources.xml
+++ b/b2g/config/inari/sources.xml
@@ -14,17 +14,17 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="ics_chocolate_rb4.2" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="2a165bebfa19b11b697837409f9550dd2917c46c">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="f4eb209f9c425692cda9230a9fd669f8f76a1c68"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="3691614d0045f7968addce45d4140fb360c3ceaf"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
   <project name="platform/bionic" path="bionic" revision="cd5dfce80bc3f0139a56b58aca633202ccaee7f8"/>
--- a/b2g/config/leo/sources.xml
+++ b/b2g/config/leo/sources.xml
@@ -12,17 +12,17 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="b2g/ics_strawberry" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="2a165bebfa19b11b697837409f9550dd2917c46c">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="f4eb209f9c425692cda9230a9fd669f8f76a1c68"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="3691614d0045f7968addce45d4140fb360c3ceaf"/>
   <project name="gonk-patches" path="patches" remote="b2g" revision="223a2421006e8f5da33f516f6891c87cae86b0f6"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
--- a/b2g/config/mako/sources.xml
+++ b/b2g/config/mako/sources.xml
@@ -12,17 +12,17 @@
   <!--original fetch url was https://git.mozilla.org/releases-->
   <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
   <!-- B2G specific things. -->
   <project name="platform_build" path="build" remote="b2g" revision="e6383e6e785cc3ea237e902beb1092f9aa88e29d">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
-  <project name="gaia" path="gaia" remote="mozillaorg" revision="f4eb209f9c425692cda9230a9fd669f8f76a1c68"/>
+  <project name="gaia" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="3691614d0045f7968addce45d4140fb360c3ceaf"/>
   <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
   <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
   <!-- Stock Android things -->
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="5c45f43419d5582949284eee9cef0c43d866e03b"/>
   <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="3748b4168e7bd8d46457d4b6786003bc6a5223ce"/>
--- a/b2g/config/wasabi/sources.xml
+++ b/b2g/config/wasabi/sources.xml
@@ -12,17 +12,17 @@
   <!--original fetch url was git://github.com/apitrace/-->
   <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
   <default remote="caf" revision="ics_chocolate_rb4.2" sync-j="4"/>
   <!-- Gonk specific things and forks -->
   <project name="platform_build" path="build" remote="b2g" revision="2a165bebfa19b11b697837409f9550dd2917c46c">
     <copyfile dest="Makefile" src="core/root.mk"/>
   </project>
   <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
-  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="f4eb209f9c425692cda9230a9fd669f8f76a1c68"/>
+  <project name="gaia.git" path="gaia" remote="mozillaorg" revision="15ac34804eb8b3c9b2582d7cf754c57e23182df6"/>
   <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="f313e6d3aaaefe8c82eaed15912a09b120fb7260"/>
   <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
   <project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
   <project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
   <project name="apitrace" path="external/apitrace" remote="apitrace" revision="3691614d0045f7968addce45d4140fb360c3ceaf"/>
   <project name="gonk-patches" path="patches" remote="b2g" revision="223a2421006e8f5da33f516f6891c87cae86b0f6"/>
   <!-- Stock Android things -->
   <project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
--- 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/ipc/ipdl/test/cxx/TestActorPunning.h
+++ b/ipc/ipdl/test/cxx/TestActorPunning.h
@@ -42,24 +42,28 @@ protected:
 };
 
 class TestActorPunningPunnedParent :
     public PTestActorPunningPunnedParent
 {
 public:
     TestActorPunningPunnedParent() {}
     virtual ~TestActorPunningPunnedParent() {}
+protected:
+    virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE {}
 };
 
 class TestActorPunningSubParent :
     public PTestActorPunningSubParent
 {
 public:
     TestActorPunningSubParent() {}
     virtual ~TestActorPunningSubParent() {}
+protected:
+    virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE {}
 };
 
 
 class TestActorPunningChild :
     public PTestActorPunningChild
 {
 public:
     TestActorPunningChild() {}
--- a/ipc/ipdl/test/cxx/TestBadActor.h
+++ b/ipc/ipdl/test/cxx/TestBadActor.h
@@ -46,16 +46,17 @@ protected:
 class TestBadActorSubParent
   : public PTestBadActorSubParent
 {
 public:
   TestBadActorSubParent() { }
   virtual ~TestBadActorSubParent() { }
 
 protected:
+  virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE {}
   virtual bool RecvPing();
 };
 
 class TestBadActorChild
   : public PTestBadActorChild
 {
 public:
   TestBadActorChild() { }
--- a/ipc/ipdl/test/cxx/TestDesc.h
+++ b/ipc/ipdl/test/cxx/TestDesc.h
@@ -75,18 +75,18 @@ protected:
 class TestDescSubParent :
     public PTestDescSubParent
 {
 public:
     TestDescSubParent() { }
     virtual ~TestDescSubParent() { }
 
 protected:
+    virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE {}
     virtual PTestDescSubsubParent* AllocPTestDescSubsubParent() MOZ_OVERRIDE;
-
     virtual bool DeallocPTestDescSubsubParent(PTestDescSubsubParent* actor) MOZ_OVERRIDE;
 };
 
 
 class TestDescSubChild :
     public PTestDescSubChild
 {
 public:
@@ -103,16 +103,19 @@ protected:
 // Grand-descendent
 //
 class TestDescSubsubParent :
     public PTestDescSubsubParent
 {
 public:
     TestDescSubsubParent() { }
     virtual ~TestDescSubsubParent() { }
+
+protected:
+    virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE {}
 };
 
 class TestDescSubsubChild :
     public PTestDescSubsubChild
 {
 public:
     TestDescSubsubChild() { }
     virtual ~TestDescSubsubChild() { }
--- a/ipc/ipdl/test/cxx/TestJSON.h
+++ b/ipc/ipdl/test/cxx/TestJSON.h
@@ -13,16 +13,19 @@ namespace mozilla {
 namespace _ipdltest {
 
 class TestHandleParent :
     public PTestHandleParent
 {
 public:
     TestHandleParent() { }
     virtual ~TestHandleParent() { }
+
+protected:
+    virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE {}
 };
 
 class TestJSONParent :
     public PTestJSONParent
 {
 public:
     TestJSONParent() { }
     virtual ~TestJSONParent() { }
--- a/ipc/ipdl/test/cxx/TestManyChildAllocs.h
+++ b/ipc/ipdl/test/cxx/TestManyChildAllocs.h
@@ -67,16 +67,17 @@ protected:
 class TestManyChildAllocsSubParent :
     public PTestManyChildAllocsSubParent
 {
 public:
     TestManyChildAllocsSubParent() { }
     virtual ~TestManyChildAllocsSubParent() { }
 
 protected:
+    virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE {}
     virtual bool RecvHello() MOZ_OVERRIDE { return true; }
 };
 
 
 class TestManyChildAllocsSubChild :
     public PTestManyChildAllocsSubChild
 {
 public:
--- a/ipc/ipdl/test/cxx/TestMultiMgrs.h
+++ b/ipc/ipdl/test/cxx/TestMultiMgrs.h
@@ -20,31 +20,36 @@ namespace _ipdltest {
 //
 
 class TestMultiMgrsBottomParent :
     public PTestMultiMgrsBottomParent
 {
 public:
     TestMultiMgrsBottomParent() { }
     virtual ~TestMultiMgrsBottomParent() { }
+
+protected:
+    virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE {}
 };
 
 class TestMultiMgrsLeftParent :
     public PTestMultiMgrsLeftParent
 {
 public:
     TestMultiMgrsLeftParent() { }
     virtual ~TestMultiMgrsLeftParent() { }
 
     bool HasChild(TestMultiMgrsBottomParent* c)
     {
         return ManagedPTestMultiMgrsBottomParent().Contains(c);
     }
 
 protected:
+    virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE {}
+
     virtual PTestMultiMgrsBottomParent* AllocPTestMultiMgrsBottomParent() MOZ_OVERRIDE
     {
         return new TestMultiMgrsBottomParent();
     }
 
     virtual bool DeallocPTestMultiMgrsBottomParent(PTestMultiMgrsBottomParent* actor) MOZ_OVERRIDE
     {
         delete actor;
@@ -60,16 +65,18 @@ public:
     virtual ~TestMultiMgrsRightParent() { }
 
     bool HasChild(TestMultiMgrsBottomParent* c)
     {
         return ManagedPTestMultiMgrsBottomParent().Contains(c);
     }
 
 protected:
+    virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE {}
+
     virtual PTestMultiMgrsBottomParent* AllocPTestMultiMgrsBottomParent() MOZ_OVERRIDE
     {
         return new TestMultiMgrsBottomParent();
     }
 
     virtual bool DeallocPTestMultiMgrsBottomParent(PTestMultiMgrsBottomParent* actor) MOZ_OVERRIDE
     {
         delete actor;
--- 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