Bug 882858 - Add a "showing" notification to PopupNotifications, r=jaws sr=gavin

This commit is contained in:
Benjamin Smedberg 2013-06-18 13:16:40 -04:00
parent 29141b1f48
commit 6bbae2d113
2 changed files with 29 additions and 0 deletions

View File

@ -137,6 +137,9 @@ function basicNotification() {
case "dismissed":
self.dismissalCallbackTriggered = true;
break;
case "showing":
self.showingCallbackTriggered = true;
break;
case "shown":
self.shownCallbackTriggered = true;
break;
@ -858,6 +861,27 @@ var tests = [
this.notification1.remove();
this.notification2.remove();
}
},
{ // Test #30 - Showing should be able to modify the popup data
run: function() {
this.notifyObj = new basicNotification();
var normalCallback = this.notifyObj.options.eventCallback;
this.notifyObj.options.eventCallback = function (eventName) {
if (eventName == "showing") {
this.mainAction.label = "Alternate Label";
}
normalCallback.call(this, eventName);
};
showNotification(this.notifyObj);
},
onShown: function(popup) {
// checkPopup checks for the matching label. Note that this assumes that
// this.notifyObj.mainAction is the same as notification.mainAction,
// which could be a problem if we ever decided to deep-copy.
checkPopup(popup, this.notifyObj);
triggerMainCommand(popup);
},
onHidden: function() { }
}
];
@ -874,6 +898,7 @@ function showNotification(notifyObj) {
function checkPopup(popup, notificationObj) {
info("[Test #" + gTestIndex + "] checking popup");
ok(notificationObj.showingCallbackTriggered, "showing callback was triggered");
ok(notificationObj.shownCallbackTriggered, "shown callback was triggered");
let notifications = popup.childNodes;

View File

@ -10,6 +10,7 @@ Components.utils.import("resource://gre/modules/Services.jsm");
const NOTIFICATION_EVENT_DISMISSED = "dismissed";
const NOTIFICATION_EVENT_REMOVED = "removed";
const NOTIFICATION_EVENT_SHOWING = "showing";
const NOTIFICATION_EVENT_SHOWN = "shown";
const ICON_SELECTOR = ".notification-anchor-icon";
@ -521,6 +522,9 @@ PopupNotifications.prototype = {
_showPanel: function PopupNotifications_showPanel(notificationsToShow, anchorElement) {
this.panel.hidden = false;
notificationsToShow.forEach(function (n) {
this._fireCallback(n, NOTIFICATION_EVENT_SHOWING);
}, this);
this._refreshPanel(notificationsToShow);
if (this.isPanelOpen && this._currentAnchorElement == anchorElement)