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

This commit is contained in:
Benjamin Smedberg 2013-06-19 13:29:05 -04:00
parent ea547b000f
commit db222ba461
5 changed files with 52 additions and 5 deletions

View File

@ -132,7 +132,10 @@ function part11() {
} catch (e) {}
}
function part12() {
function part12(type) {
if (type != "shown") {
return;
}
let notification = PopupNotifications.getNotification("click-to-play-plugins", gNewWindow.gBrowser.selectedBrowser);
notification.options.eventCallback = null;
let centerAction = null;

View File

@ -718,6 +718,9 @@ function test18f() {
var objLoadingContent = plugin.QueryInterface(Ci.nsIObjectLoadingContent);
ok(!objLoadingContent.activated, "Test 18f, Plugin should not be activated");
// XXXBAD: this code doesn't do what you think it does! it is actually
// observing the "removed" event of the old notification, since we create
// a *new* one when the plugin is clicked.
notification.options.eventCallback = function() { executeSoon(test18g); };
EventUtils.synthesizeMouseAtCenter(plugin, {}, gTestBrowser.contentWindow);
}
@ -879,7 +882,10 @@ function test21a() {
notification.reshow();
}
function test21b() {
function test21b(type) {
if (type != "shown") {
return;
}
var notification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser);
notification.options.eventCallback = null;
var centerAction = null;
@ -938,7 +944,10 @@ function test21c() {
notification.reshow();
}
function test21d() {
function test21d(type) {
if (type != "shown") {
return;
}
var notification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser);
notification.options.eventCallback = null;

View File

@ -111,7 +111,10 @@ function testActivateAddSameTypePart2() {
popupNotification.reshow();
}
function testActivateAddSameTypePart3() {
function testActivateAddSameTypePart3(type) {
if (type != "shown") {
return;
}
let popupNotification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser);
popupNotification.options.eventCallback = null;
let centerAction = null;
@ -189,7 +192,10 @@ function testActivateAddDifferentTypePart2() {
popupNotification.reshow();
}
function testActivateAddDifferentTypePart3() {
function testActivateAddDifferentTypePart3(type) {
if (type != "shown") {
return;
}
let popupNotification = PopupNotifications.getNotification("click-to-play-plugins", gTestBrowser);
popupNotification.options.eventCallback = null;
let centerAction = null;

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)