mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1259148 - Test that dismissing the notification permission doorhanger resolves the promise with default
. r=wchen a=ritu
MozReview-Commit-ID: ASFqCCrKCQ9
This commit is contained in:
parent
52c3a56b9b
commit
67435eb0cf
@ -36,4 +36,5 @@ LOCAL_INCLUDES += [
|
||||
'/dom/workers',
|
||||
]
|
||||
|
||||
BROWSER_CHROME_MANIFESTS += ['test/browser/browser.ini']
|
||||
XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini']
|
||||
|
2
dom/notification/test/browser/browser.ini
Normal file
2
dom/notification/test/browser/browser.ini
Normal file
@ -0,0 +1,2 @@
|
||||
[browser_permission_dismiss.js]
|
||||
support-files = notification.html
|
113
dom/notification/test/browser/browser_permission_dismiss.js
Normal file
113
dom/notification/test/browser/browser_permission_dismiss.js
Normal file
@ -0,0 +1,113 @@
|
||||
"use strict";
|
||||
|
||||
const ORIGIN_URI = Services.io.newURI("http://mochi.test:8888", null, null);
|
||||
const PERMISSION_NAME = "desktop-notification";
|
||||
const PROMPT_ALLOW_BUTTON = -1;
|
||||
const PROMPT_BLOCK_BUTTON = 0;
|
||||
const TEST_URL = "http://mochi.test:8888/browser/dom/notification/test/browser/notification.html";
|
||||
|
||||
/**
|
||||
* Clicks the specified web-notifications prompt button.
|
||||
*
|
||||
* @param {Number} aButtonIndex Number indicating which button to click.
|
||||
* See the constants in this file.
|
||||
* @note modified from toolkit/components/passwordmgr/test/browser/head.js
|
||||
*/
|
||||
function clickDoorhangerButton(aButtonIndex) {
|
||||
ok(true, "Looking for action at index " + aButtonIndex);
|
||||
|
||||
let popup = PopupNotifications.getNotification("web-notifications");
|
||||
let notifications = popup.owner.panel.childNodes;
|
||||
ok(notifications.length > 0, "at least one notification displayed");
|
||||
ok(true, notifications.length + " notification(s)");
|
||||
let notification = notifications[0];
|
||||
|
||||
if (aButtonIndex == -1) {
|
||||
ok(true, "Triggering main action");
|
||||
notification.button.doCommand();
|
||||
} else if (aButtonIndex <= popup.secondaryActions.length) {
|
||||
ok(true, "Triggering secondary action " + aButtonIndex);
|
||||
notification.childNodes[aButtonIndex].doCommand();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens a tab which calls `Notification.requestPermission()` with a callback
|
||||
* argument, calls the `task` function while the permission prompt is open,
|
||||
* and verifies that the expected permission is set.
|
||||
*
|
||||
* @param {Function} task Task function to run to interact with the prompt.
|
||||
* @param {String} permission Expected permission value.
|
||||
* @return {Promise} resolving when the task function is done and the tab
|
||||
* closes.
|
||||
*/
|
||||
function tabWithRequest(task, permission) {
|
||||
Services.perms.remove(ORIGIN_URI, PERMISSION_NAME);
|
||||
|
||||
return BrowserTestUtils.withNewTab({
|
||||
gBrowser,
|
||||
url: TEST_URL,
|
||||
}, function*(browser) {
|
||||
let requestPromise = ContentTask.spawn(browser, {
|
||||
permission
|
||||
}, function*({permission}) {
|
||||
function requestCallback(perm) {
|
||||
is(perm, permission,
|
||||
"Should call the legacy callback with the permission state");
|
||||
}
|
||||
let perm = yield content.window.Notification
|
||||
.requestPermission(requestCallback);
|
||||
is(perm, permission,
|
||||
"Should resolve the promise with the permission state");
|
||||
});
|
||||
|
||||
yield BrowserTestUtils.waitForEvent(PopupNotifications.panel, "popupshown");
|
||||
yield task();
|
||||
yield requestPromise;
|
||||
});
|
||||
}
|
||||
|
||||
add_task(function* setup() {
|
||||
SimpleTest.registerCleanupFunction(() => {
|
||||
Services.perms.remove(ORIGIN_URI, PERMISSION_NAME);
|
||||
});
|
||||
});
|
||||
|
||||
add_task(function* test_requestPermission_granted() {
|
||||
yield tabWithRequest(function() {
|
||||
clickDoorhangerButton(PROMPT_ALLOW_BUTTON);
|
||||
}, "granted");
|
||||
|
||||
ok(!PopupNotifications.getNotification("web-notifications"),
|
||||
"Should remove the doorhanger notification icon if granted");
|
||||
|
||||
is(Services.perms.testPermission(ORIGIN_URI, PERMISSION_NAME),
|
||||
Services.perms.ALLOW_ACTION,
|
||||
"Check permission in perm. manager");
|
||||
});
|
||||
|
||||
add_task(function* test_requestPermission_denied() {
|
||||
yield tabWithRequest(function() {
|
||||
clickDoorhangerButton(PROMPT_BLOCK_BUTTON);
|
||||
}, "denied");
|
||||
|
||||
ok(!PopupNotifications.getNotification("web-notifications"),
|
||||
"Should remove the doorhanger notification icon if denied");
|
||||
|
||||
is(Services.perms.testPermission(ORIGIN_URI, PERMISSION_NAME),
|
||||
Services.perms.DENY_ACTION,
|
||||
"Check permission in perm. manager");
|
||||
});
|
||||
|
||||
add_task(function* test_requestPermission_dismissed() {
|
||||
yield tabWithRequest(function() {
|
||||
PopupNotifications.panel.hidePopup();
|
||||
}, "default");
|
||||
|
||||
ok(!PopupNotifications.getNotification("web-notifications"),
|
||||
"Should remove the doorhanger notification icon if dismissed");
|
||||
|
||||
is(Services.perms.testPermission(ORIGIN_URI, PERMISSION_NAME),
|
||||
Services.perms.UNKNOWN_ACTION,
|
||||
"Check permission in perm. manager");
|
||||
});
|
11
dom/notification/test/browser/notification.html
Normal file
11
dom/notification/test/browser/notification.html
Normal file
@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Notifications test</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user