diff options
Diffstat (limited to 'toolkit/components/alerts')
-rw-r--r-- | toolkit/components/alerts/jar.mn | 2 | ||||
-rw-r--r-- | toolkit/components/alerts/moz.build | 9 | ||||
-rw-r--r-- | toolkit/components/alerts/nsAlertsService.cpp | 8 | ||||
-rw-r--r-- | toolkit/components/alerts/nsXULAlerts.cpp | 3 | ||||
-rw-r--r-- | toolkit/components/alerts/resources/content/alert.js | 12 | ||||
-rw-r--r-- | toolkit/components/alerts/test/.eslintrc.js | 7 | ||||
-rw-r--r-- | toolkit/components/alerts/test/image.gif | bin | 60901 -> 0 bytes | |||
-rw-r--r-- | toolkit/components/alerts/test/image.png | bin | 2531 -> 0 bytes | |||
-rw-r--r-- | toolkit/components/alerts/test/image_server.sjs | 82 | ||||
-rw-r--r-- | toolkit/components/alerts/test/mochitest.ini | 16 | ||||
-rw-r--r-- | toolkit/components/alerts/test/test_alerts.html | 89 | ||||
-rw-r--r-- | toolkit/components/alerts/test/test_alerts_noobserve.html | 96 | ||||
-rw-r--r-- | toolkit/components/alerts/test/test_alerts_requireinteraction.html | 168 | ||||
-rw-r--r-- | toolkit/components/alerts/test/test_image.html | 118 | ||||
-rw-r--r-- | toolkit/components/alerts/test/test_multiple_alerts.html | 103 | ||||
-rw-r--r-- | toolkit/components/alerts/test/test_principal.html | 122 |
16 files changed, 10 insertions, 825 deletions
diff --git a/toolkit/components/alerts/jar.mn b/toolkit/components/alerts/jar.mn index c45939078..c9bd127dd 100644 --- a/toolkit/components/alerts/jar.mn +++ b/toolkit/components/alerts/jar.mn @@ -5,4 +5,4 @@ toolkit.jar: content/global/alerts/alert.css (resources/content/alert.css) content/global/alerts/alert.xul (resources/content/alert.xul) - content/global/alerts/alert.js (resources/content/alert.js) +* content/global/alerts/alert.js (resources/content/alert.js) diff --git a/toolkit/components/alerts/moz.build b/toolkit/components/alerts/moz.build index cdbf92511..8d42a8ce7 100644 --- a/toolkit/components/alerts/moz.build +++ b/toolkit/components/alerts/moz.build @@ -4,17 +4,13 @@ # 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/. -MOCHITEST_MANIFESTS += ['test/mochitest.ini'] - XPIDL_SOURCES += [ 'nsIAlertsService.idl', ] XPIDL_MODULE = 'alerts' -EXPORTS += [ - 'nsAlertsUtils.h', -] +EXPORTS += ['nsAlertsUtils.h'] EXPORTS.mozilla += [ 'AlertNotification.h', @@ -33,6 +29,3 @@ include('/ipc/chromium/chromium-config.mozbuild') FINAL_LIBRARY = 'xul' JAR_MANIFESTS += ['jar.mn'] - -with Files('**'): - BUG_COMPONENT = ('Toolkit', 'Notifications and Alerts') diff --git a/toolkit/components/alerts/nsAlertsService.cpp b/toolkit/components/alerts/nsAlertsService.cpp index 73dbb265c..4f248c861 100644 --- a/toolkit/components/alerts/nsAlertsService.cpp +++ b/toolkit/components/alerts/nsAlertsService.cpp @@ -273,26 +273,18 @@ NS_IMETHODIMP nsAlertsService::CloseAlert(const nsAString& aAlertName, // nsIAlertsDoNotDisturb NS_IMETHODIMP nsAlertsService::GetManualDoNotDisturb(bool* aRetVal) { -#ifdef MOZ_WIDGET_ANDROID - return NS_ERROR_NOT_IMPLEMENTED; -#else nsCOMPtr<nsIAlertsDoNotDisturb> alertsDND(GetDNDBackend()); NS_ENSURE_TRUE(alertsDND, NS_ERROR_NOT_IMPLEMENTED); return alertsDND->GetManualDoNotDisturb(aRetVal); -#endif } NS_IMETHODIMP nsAlertsService::SetManualDoNotDisturb(bool aDoNotDisturb) { -#ifdef MOZ_WIDGET_ANDROID - return NS_ERROR_NOT_IMPLEMENTED; -#else nsCOMPtr<nsIAlertsDoNotDisturb> alertsDND(GetDNDBackend()); NS_ENSURE_TRUE(alertsDND, NS_ERROR_NOT_IMPLEMENTED); nsresult rv = alertsDND->SetManualDoNotDisturb(aDoNotDisturb); return rv; -#endif } already_AddRefed<nsIAlertsDoNotDisturb> diff --git a/toolkit/components/alerts/nsXULAlerts.cpp b/toolkit/components/alerts/nsXULAlerts.cpp index d353d8714..47e72a27f 100644 --- a/toolkit/components/alerts/nsXULAlerts.cpp +++ b/toolkit/components/alerts/nsXULAlerts.cpp @@ -66,13 +66,10 @@ NS_IMPL_ISUPPORTS(nsXULAlerts, nsIAlertsService, nsIAlertsDoNotDisturb, nsIAlert /* static */ already_AddRefed<nsXULAlerts> nsXULAlerts::GetInstance() { - // Gecko on Android does not fully support XUL windows. -#ifndef MOZ_WIDGET_ANDROID if (!gXULAlerts) { gXULAlerts = new nsXULAlerts(); ClearOnShutdown(&gXULAlerts); } -#endif // MOZ_WIDGET_ANDROID RefPtr<nsXULAlerts> instance = gXULAlerts.get(); return instance.forget(); } diff --git a/toolkit/components/alerts/resources/content/alert.js b/toolkit/components/alerts/resources/content/alert.js index 12068b548..e9725bedb 100644 --- a/toolkit/components/alerts/resources/content/alert.js +++ b/toolkit/components/alerts/resources/content/alert.js @@ -4,7 +4,6 @@ var {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components; -Cu.import("resource://gre/modules/AppConstants.jsm"); Cu.import("resource://gre/modules/Services.jsm"); /* @@ -26,10 +25,15 @@ const NS_ALERT_HORIZONTAL = 1; const NS_ALERT_LEFT = 2; const NS_ALERT_TOP = 4; -const WINDOW_MARGIN = AppConstants.platform == "win" ? 0 : 10; -const BODY_TEXT_LIMIT = 200; -const WINDOW_SHADOW_SPREAD = AppConstants.platform == "win" ? 10 : 0; +#ifdef XP_WIN +const WINDOW_MARGIN = 0; +const WINDOW_SHADOW_SPREAD = 10; +#else +const WINDOW_MARGIN = 10; +const WINDOW_SHADOW_SPREAD = 0; +#endif +const BODY_TEXT_LIMIT = 200; var gOrigin = 0; // Default value: alert from bottom right. var gReplacedWindow = null; diff --git a/toolkit/components/alerts/test/.eslintrc.js b/toolkit/components/alerts/test/.eslintrc.js deleted file mode 100644 index 3c788d6d6..000000000 --- a/toolkit/components/alerts/test/.eslintrc.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; - -module.exports = { - "extends": [ - "../../../../testing/mochitest/mochitest.eslintrc.js" - ] -}; diff --git a/toolkit/components/alerts/test/image.gif b/toolkit/components/alerts/test/image.gif Binary files differdeleted file mode 100644 index 053b4d926..000000000 --- a/toolkit/components/alerts/test/image.gif +++ /dev/null diff --git a/toolkit/components/alerts/test/image.png b/toolkit/components/alerts/test/image.png Binary files differdeleted file mode 100644 index 430c3c5e6..000000000 --- a/toolkit/components/alerts/test/image.png +++ /dev/null diff --git a/toolkit/components/alerts/test/image_server.sjs b/toolkit/components/alerts/test/image_server.sjs deleted file mode 100644 index 622052943..000000000 --- a/toolkit/components/alerts/test/image_server.sjs +++ /dev/null @@ -1,82 +0,0 @@ -const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr, Constructor: CC } = Components; - -Cu.import("resource://gre/modules/Timer.jsm"); - -const LocalFile = CC("@mozilla.org/file/local;1", "nsILocalFile", - "initWithPath"); - -const FileInputStream = CC("@mozilla.org/network/file-input-stream;1", - "nsIFileInputStream", "init"); - -const BinaryInputStream = CC("@mozilla.org/binaryinputstream;1", - "nsIBinaryInputStream", "setInputStream"); - -function handleRequest(request, response) { - let params = parseQueryString(request.queryString); - - response.setStatusLine(request.httpVersion, 200, "OK"); - - // Compare and increment a cookie for this request. This is used to test - // private browsing mode; the cookie should not be set if the image is - // loaded anonymously. - if (params.has("c")) { - let expectedValue = parseInt(params.get("c"), 10); - let actualValue = !request.hasHeader("Cookie") ? 0 : - parseInt(request.getHeader("Cookie") - .replace(/^counter=(\d+)/, "$1"), 10); - if (actualValue != expectedValue) { - response.setStatusLine(request.httpVersion, 400, "Wrong counter value"); - return; - } - response.setHeader("Set-Cookie", `counter=${expectedValue + 1}`, false); - } - - // Wait to send the image if a timeout is given. - let timeout = parseInt(params.get("t"), 10); - if (timeout > 0) { - response.processAsync(); - setTimeout(() => { - respond(params, request, response); - response.finish(); - }, timeout * 1000); - return; - } - - respond(params, request, response); -} - -function parseQueryString(queryString) { - return queryString.split("&").reduce((params, param) => { - let [key, value] = param.split("=", 2); - params.set(key, value); - return params; - }, new Map()); -} - -function respond(params, request, response) { - if (params.has("s")) { - let statusCode = parseInt(params.get("s"), 10); - response.setStatusLine(request.httpVersion, statusCode, "Custom status"); - return; - } - var filename = params.get("f"); - writeFile(filename, response); -} - -function writeFile(name, response) { - var file = new LocalFile(getState("__LOCATION__")).parent; - file.append(name); - - let mimeType = Cc["@mozilla.org/uriloader/external-helper-app-service;1"] - .getService(Ci.nsIMIMEService) - .getTypeFromFile(file); - - let fileStream = new FileInputStream(file, 1, 0, false); - let binaryStream = new BinaryInputStream(fileStream); - - response.setHeader("Content-Type", mimeType, false); - response.bodyOutputStream.writeFrom(binaryStream, binaryStream.available()); - - binaryStream.close(); - fileStream.close(); -} diff --git a/toolkit/components/alerts/test/mochitest.ini b/toolkit/components/alerts/test/mochitest.ini deleted file mode 100644 index 12e2a8704..000000000 --- a/toolkit/components/alerts/test/mochitest.ini +++ /dev/null @@ -1,16 +0,0 @@ -[DEFAULT] -support-files = - image.gif - image.png - image_server.sjs - -# Synchronous tests like test_alerts.html must come before -# asynchronous tests like test_alerts_noobserve.html! -[test_alerts.html] -skip-if = toolkit == 'android' -[test_alerts_noobserve.html] -[test_alerts_requireinteraction.html] -[test_image.html] -[test_multiple_alerts.html] -[test_principal.html] -skip-if = toolkit == 'android' diff --git a/toolkit/components/alerts/test/test_alerts.html b/toolkit/components/alerts/test/test_alerts.html deleted file mode 100644 index cb087e48a..000000000 --- a/toolkit/components/alerts/test/test_alerts.html +++ /dev/null @@ -1,89 +0,0 @@ -<!DOCTYPE HTML> -<!-- Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ --> -<html> -<head> - <title>Test for Alerts Service</title> - <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> - <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> -</head> - -<body> -<p id="display"></p> - -<br>Alerts service, with observer "synchronous" case. -<br> -<br>Did a notification appear anywhere? -<br>If so, the test will finish once the notification disappears. - -<pre id="test"> -<script class="testbody" type="text/javascript"> - -var observer = { - alertShow: false, - observe: function (aSubject, aTopic, aData) { - is(aData, "foobarcookie", "Checking whether the alert cookie was passed correctly"); - if (aTopic == "alertclickcallback") { - todo(false, "Did someone click the notification while running mochitests? (Please don't.)"); - } else if (aTopic == "alertshow") { - ok(!this.alertShow, "Alert should not be shown more than once"); - this.alertShow = true; - } else { - is(aTopic, "alertfinished", "Checking the topic for a finished notification"); - SimpleTest.finish(); - } - } -}; - -function runTest() { - const Cc = SpecialPowers.Cc; - const Ci = SpecialPowers.Ci; - - if (!("@mozilla.org/alerts-service;1" in Cc)) { - todo(false, "Alerts service does not exist in this application"); - return; - } - - ok(true, "Alerts service exists in this application"); - - var notifier; - try { - notifier = Cc["@mozilla.org/alerts-service;1"]. - getService(Ci.nsIAlertsService); - ok(true, "Alerts service is available"); - } catch (ex) { - todo(false, - "Alerts service is not available.", ex); - return; - } - - try { - var alertName = "fiorello"; - SimpleTest.waitForExplicitFinish(); - notifier.showAlertNotification(null, "Notification test", - "Surprise! I'm here to test notifications!", - false, "foobarcookie", observer, alertName); - ok(true, "showAlertNotification() succeeded. Waiting for notification..."); - - if ("@mozilla.org/system-alerts-service;1" in Cc) { - // Notifications are native on OS X 10.8 and later, as well as GNOME - // Shell with libnotify (bug 1236036). These notifications persist in the - // Notification Center, and only fire the `alertfinished` event when - // closed. For platforms where native notifications may be used, we need - // to close explicitly to avoid a hang. This also works for XUL - // notifications when running this test on OS X < 10.8, or a window - // manager like Ubuntu Unity with incomplete libnotify support. - notifier.closeAlert(alertName); - } - } catch (ex) { - todo(false, "showAlertNotification() failed.", ex); - SimpleTest.finish(); - } -} - -runTest(); - -</script> -</pre> -</body> -</html> diff --git a/toolkit/components/alerts/test/test_alerts_noobserve.html b/toolkit/components/alerts/test/test_alerts_noobserve.html deleted file mode 100644 index 0cc452b8a..000000000 --- a/toolkit/components/alerts/test/test_alerts_noobserve.html +++ /dev/null @@ -1,96 +0,0 @@ -<!DOCTYPE HTML> -<!-- Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ --> -<html> -<head> - <title>Test for Alerts Service</title> - <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> - <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> -</head> - -<body> -<p id="display"></p> - -<br>Alerts service, without observer "asynchronous" case. -<br> -<br>A notification should soon appear somewhere. -<br>If there has been no crash when the notification (later) disappears, assume all is good. - -<pre id="test"> -<script class="testbody" type="text/javascript"> - -const Cc = SpecialPowers.Cc; -const Ci = SpecialPowers.Ci; - -const chromeScript = SpecialPowers.loadChromeScript(_ => { - const { utils: Cu } = Components; - - Cu.import("resource://gre/modules/Services.jsm"); - Cu.import("resource://gre/modules/Timer.jsm"); - - function anyXULAlertsVisible() { - var windows = Services.wm.getEnumerator("alert:alert"); - return windows.hasMoreElements(); - } - - addMessageListener("anyXULAlertsVisible", anyXULAlertsVisible); - - addMessageListener("waitForAlerts", function waitForAlerts() { - if (anyXULAlertsVisible()) { - setTimeout(waitForAlerts, 1000); - } else { - sendAsyncMessage("waitedForAlerts"); - } - }); -}); - -function waitForAlertsThenFinish() { - chromeScript.addMessageListener("waitedForAlerts", function waitedForAlerts() { - chromeScript.removeMessageListener("waitedForAlerts", waitedForAlerts); - ok(true, "Alert disappeared."); - SimpleTest.finish(); - }); - chromeScript.sendAsyncMessage("waitForAlerts"); -} - -function runTest() { - if (!("@mozilla.org/alerts-service;1" in Cc)) { - todo(false, "Alerts service does not exist in this application"); - } else { - ok(true, "Alerts service exists in this application"); - - var notifier; - try { - notifier = Cc["@mozilla.org/alerts-service;1"]. - getService(Ci.nsIAlertsService); - ok(true, "Alerts service is available"); - } catch (ex) { - todo(false, "Alerts service is not available.", ex); - } - - if (notifier) { - try { - notifier.showAlertNotification(null, "Notification test", - "This notification has no observer"); - ok(true, "showAlertNotification() succeeded"); - } catch (ex) { - todo(false, "showAlertNotification() failed.", ex); - } - } - } -} - -SimpleTest.waitForExplicitFinish(); -SimpleTest.requestFlakyTimeout("untriaged"); - -// sendSyncMessage returns an array of arrays: the outer array is from the -// message manager, and the inner array is from the chrome script's listeners. -// See the comment in test_SpecialPowersLoadChromeScript.html. -var [[alertsVisible]] = chromeScript.sendSyncMessage("anyXULAlertsVisible"); -ok(!alertsVisible, "Alerts should not be present at the start of the test."); -runTest(); -setTimeout(waitForAlertsThenFinish, 1000); -</script> -</pre> -</body> -</html> diff --git a/toolkit/components/alerts/test/test_alerts_requireinteraction.html b/toolkit/components/alerts/test/test_alerts_requireinteraction.html deleted file mode 100644 index 26fe87104..000000000 --- a/toolkit/components/alerts/test/test_alerts_requireinteraction.html +++ /dev/null @@ -1,168 +0,0 @@ -<!DOCTYPE HTML> -<html> -<head> - <title>Test for alerts with requireInteraction</title> - <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> - <script type="text/javascript" src="/tests/SimpleTest/SpawnTask.js"></script> - <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> -</head> -<body> -<pre id="test"> -<script class="testbody" type="text/javascript"> - -const Cc = SpecialPowers.Cc; -const Ci = SpecialPowers.Ci; - -const chromeScript = SpecialPowers.loadChromeScript(_ => { - const { utils: Cu } = Components; - - Cu.import("resource://gre/modules/Services.jsm"); - Cu.import("resource://gre/modules/Timer.jsm"); - - addMessageListener("waitForXULAlert", function() { - var timer = setTimeout(function() { - Services.ww.unregisterNotification(windowObserver); - sendAsyncMessage("waitForXULAlert", false); - }, 2000); - - var windowObserver = function(aSubject, aTopic, aData) { - if (aTopic != "domwindowopened") { - return; - } - - var win = aSubject.QueryInterface(Components.interfaces.nsIDOMWindow); - win.addEventListener("load", function onLoad() { - win.removeEventListener("load", onLoad); - let windowType = win.document.documentElement.getAttribute("windowtype"); - if (windowType == "alert:alert") { - clearTimeout(timer); - Services.ww.unregisterNotification(windowObserver); - - sendAsyncMessage("waitForXULAlert", true); - } - }); - }; - - Services.ww.registerNotification(windowObserver); - }); -}); - -var cookie = 0; -function promiseCreateXULAlert(alertService, listener, name) { - return new Promise(resolve => { - chromeScript.addMessageListener("waitForXULAlert", function waitedForAlert(result) { - chromeScript.removeMessageListener("waitForXULAlert", waitedForAlert); - resolve(result); - }); - - chromeScript.sendAsyncMessage("waitForXULAlert"); - alertService.showAlertNotification(null, "title", "body", - true, cookie++, listener, name, null, null, null, - null, false, true); - }); -} - -add_task(function* test_require_interaction() { - if (!("@mozilla.org/alerts-service;1" in Cc)) { - todo(false, "Alerts service does not exist in this application."); - return; - } - - ok(true, "Alerts service exists in this application."); - - var alertService; - try { - alertService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService); - ok(true, "Alerts service is available."); - } catch (ex) { - todo(false, "Alerts service is not available."); - return; - } - - yield SpecialPowers.pushPrefEnv({"set": [ - [ "dom.webnotifications.requireinteraction.enabled", true ], - [ "dom.webnotifications.requireinteraction.count", 2 ] - ]}); - - var expectedSequence = [ - "first show", - "second show", - "second finished", - "second replacement show", - "third finished", - "first finished", - "third replacement show", - "second replacement finished", - "third replacement finished" - ]; - - var actualSequence = []; - - function createAlertListener(name, showCallback, finishCallback) { - return (subject, topic, data) => { - if (topic == "alertshow") { - actualSequence.push(name + " show"); - if (showCallback) { - showCallback(); - } - } else if (topic == "alertfinished") { - actualSequence.push(name + " finished"); - if (finishCallback) { - finishCallback(); - } - } - } - } - - var xulAlertCreated = yield promiseCreateXULAlert(alertService, - createAlertListener("first"), "first"); - if (!xulAlertCreated) { - ok(true, "Platform does not use XUL alerts."); - alertService.closeAlert("first"); - return; - } - - xulAlertCreated = yield promiseCreateXULAlert(alertService, - createAlertListener("second"), "second"); - ok(xulAlertCreated, "Create XUL alert"); - - // Replace second alert - xulAlertCreated = yield promiseCreateXULAlert(alertService, - createAlertListener("second replacement"), "second"); - ok(xulAlertCreated, "Create XUL alert"); - - var testFinishResolve; - var testFinishPromise = new Promise((resolve) => { testFinishResolve = resolve; }); - - xulAlertCreated = yield promiseCreateXULAlert(alertService, - createAlertListener("third"), "third"), - ok(!xulAlertCreated, "XUL alert should not be visible"); - - // Replace the not-yet-visible third alert. - xulAlertCreated = yield promiseCreateXULAlert(alertService, - createAlertListener("third replacement", - function showCallback() { - alertService.closeAlert("second"); - alertService.closeAlert("third"); - }, - function finishCallback() { - // Check actual sequence of alert events compared to expected sequence. - for (var i = 0; i < actualSequence.length; i++) { - is(actualSequence[i], expectedSequence[i], - "Alert callback at index " + i + " should be in expected order."); - } - - testFinishResolve(); - }), "third"); - - ok(!xulAlertCreated, "XUL alert should not be visible"); - - alertService.closeAlert("first"); - - yield testFinishPromise; -}); - -</script> -</pre> -</body> -</html> diff --git a/toolkit/components/alerts/test/test_image.html b/toolkit/components/alerts/test/test_image.html deleted file mode 100644 index 7bf89fab2..000000000 --- a/toolkit/components/alerts/test/test_image.html +++ /dev/null @@ -1,118 +0,0 @@ -<!DOCTYPE HTML> -<html> -<head> - <title>Test for Bug 1233086</title> - <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> - <script type="text/javascript" src="/tests/SimpleTest/SpawnTask.js"></script> - <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> -</head> - -<body> -<p id="display"></p> - -<pre id="test"> -<script class="testbody" type="text/javascript"> - -const Cc = SpecialPowers.Cc; -const Ci = SpecialPowers.Ci; -const Services = SpecialPowers.Services; - -const imageServerURL = "http://mochi.test:8888/tests/toolkit/components/alerts/test/image_server.sjs"; - -function makeAlert(...params) { - var alert = Cc["@mozilla.org/alert-notification;1"] - .createInstance(Ci.nsIAlertNotification); - alert.init(...params); - return alert; -} - -function promiseImage(alert, timeout = 0, userData = null) { - return new Promise(resolve => { - var isDone = false; - function done(value) { - ok(!isDone, "Should call the image listener once"); - isDone = true; - resolve(value); - } - alert.loadImage(timeout, SpecialPowers.wrapCallbackObject({ - onImageReady(aUserData, aRequest) { - done([true, aRequest, aUserData]); - }, - onImageMissing(aUserData) { - done([false, aUserData]); - }, - }), SpecialPowers.wrap(userData)); - }); -} - -add_task(function* testContext() { - var inUserData = Cc["@mozilla.org/supports-PRInt64;1"] - .createInstance(Ci.nsISupportsPRInt64); - inUserData.data = 123; - - var alert = makeAlert(null, imageServerURL + "?f=image.png"); - var [ready, , userData] = yield promiseImage(alert, 0, inUserData); - ok(ready, "Should load requested image"); - is(userData.QueryInterface(Ci.nsISupportsPRInt64).data, 123, - "Should pass user data for loaded image"); - - alert = makeAlert(null, imageServerURL + "?s=404"); - [ready, userData] = yield promiseImage(alert, 0, inUserData); - ok(!ready, "Should not load missing image"); - is(userData.QueryInterface(Ci.nsISupportsPRInt64).data, 123, - "Should pass user data for missing image"); -}); - -add_task(function* testTimeout() { - var alert = makeAlert(null, imageServerURL + "?f=image.png&t=3"); - var [ready] = yield promiseImage(alert, 1000); - ok(!ready, "Should cancel request if timeout fires"); - - [ready, request] = yield promiseImage(alert, 45000); - ok(ready, "Should load image if request finishes before timeout"); -}); - -add_task(function* testAnimatedGIF() { - var alert = makeAlert(null, imageServerURL + "?f=image.gif"); - var [ready, request] = yield promiseImage(alert); - ok(ready, "Should load first animated GIF frame"); - is(request.mimeType, "image/gif", "Should report correct GIF MIME type"); - is(request.image.width, 256, "GIF width should be 256px"); - is(request.image.height, 256, "GIF height should be 256px"); -}); - -add_task(function* testCancel() { - var alert = makeAlert(null, imageServerURL + "?f=image.gif&t=180"); - yield new Promise((resolve, reject) => { - var request = alert.loadImage(0, SpecialPowers.wrapCallbackObject({ - onImageReady() { - reject(new Error("Should not load cancelled request")); - }, - onImageMissing() { - resolve(); - }, - }), null); - request.cancel(SpecialPowers.Cr.NS_BINDING_ABORTED); - }); -}); - -add_task(function* testMixedContent() { - // Loading principal is HTTPS; image URL is HTTP. - var origin = "https://mochi.test:8888"; - var principal = Services.scriptSecurityManager - .createCodebasePrincipalFromOrigin(origin); - - var alert = makeAlert(null, imageServerURL + "?f=image.png", - null, null, false, null, null, null, - null, principal); - var [ready, request] = yield promiseImage(alert); - ok(ready, "Should load cross-protocol image"); - is(request.mimeType, "image/png", "Should report correct MIME type"); - is(request.image.width, 32, "Width should be 32px"); - is(request.image.height, 32, "Height should be 32px"); -}); - -</script> -</pre> -</body> -</html> diff --git a/toolkit/components/alerts/test/test_multiple_alerts.html b/toolkit/components/alerts/test/test_multiple_alerts.html deleted file mode 100644 index 9d939b63a..000000000 --- a/toolkit/components/alerts/test/test_multiple_alerts.html +++ /dev/null @@ -1,103 +0,0 @@ -<!DOCTYPE HTML> -<html> -<head> - <title>Test for multiple alerts</title> - <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> - <script type="text/javascript" src="/tests/SimpleTest/SpawnTask.js"></script> - <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> -</head> -<body> -<pre id="test"> -<script class="testbody" type="text/javascript"> - -const Cc = SpecialPowers.Cc; -const Ci = SpecialPowers.Ci; - -const chromeScript = SpecialPowers.loadChromeScript(_ => { - Components.utils.import("resource://gre/modules/Services.jsm"); - Components.utils.import("resource://gre/modules/Timer.jsm"); - - const alertService = Components.classes["@mozilla.org/alerts-service;1"] - .getService(Components.interfaces.nsIAlertsService); - - addMessageListener("waitForPosition", function() { - var timer = setTimeout(function() { - Services.ww.unregisterNotification(windowObserver); - sendAsyncMessage("waitedForPosition", null); - }, 2000); - - var windowObserver = function(aSubject, aTopic, aData) { - if (aTopic != "domwindowopened") { - return; - } - - // Alerts are implemented using XUL. - clearTimeout(timer); - - Services.ww.unregisterNotification(windowObserver); - - var win = aSubject.QueryInterface(Components.interfaces.nsIDOMWindow); - win.addEventListener("pageshow", function onPageShow() { - win.removeEventListener("pageshow", onPageShow, false); - - var x = win.screenX; - var y = win.screenY; - - win.addEventListener("pagehide", function onPageHide() { - win.removeEventListener("pagehide", onPageHide, false); - sendAsyncMessage("waitedForPosition", { x, y }); - }, false); - - alertService.closeAlert(); - }, false); - }; - - Services.ww.registerNotification(windowObserver); - }); -}); - -function promiseAlertPosition(alertService) { - return new Promise(resolve => { - chromeScript.addMessageListener("waitedForPosition", function waitedForPosition(result) { - chromeScript.removeMessageListener("waitedForPosition", waitedForPosition); - resolve(result); - }); - chromeScript.sendAsyncMessage("waitForPosition"); - - alertService.showAlertNotification(null, "title", "body"); - ok(true, "Alert shown."); - }); -} - -add_task(function* test_multiple_alerts() { - if (!("@mozilla.org/alerts-service;1" in Cc)) { - todo(false, "Alerts service does not exist in this application."); - return; - } - - ok(true, "Alerts service exists in this application."); - - var alertService; - try { - alertService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService); - ok(true, "Alerts service is available."); - } catch (ex) { - todo(false, "Alerts service is not available."); - return; - } - - var firstAlertPosition = yield promiseAlertPosition(alertService); - if (!firstAlertPosition) { - ok(true, "Platform does not use XUL alerts."); - return; - } - - var secondAlertPosition = yield promiseAlertPosition(alertService); - is(secondAlertPosition.x, firstAlertPosition.x, "Second alert should be opened in the same position."); - is(secondAlertPosition.y, firstAlertPosition.y, "Second alert should be opened in the same position."); -}); - -</script> -</pre> -</body> -</html> diff --git a/toolkit/components/alerts/test/test_principal.html b/toolkit/components/alerts/test/test_principal.html deleted file mode 100644 index 74a20dbd7..000000000 --- a/toolkit/components/alerts/test/test_principal.html +++ /dev/null @@ -1,122 +0,0 @@ -<!DOCTYPE HTML> -<html> -<head> - <title>Test for Bug 1202933</title> - <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> - <script type="text/javascript" src="/tests/SimpleTest/SpawnTask.js"></script> - <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> -</head> - -<body> -<p id="display"></p> - -<pre id="test"> -<script class="testbody" type="text/javascript"> - -const Cc = SpecialPowers.Cc; -const Ci = SpecialPowers.Ci; -const Services = SpecialPowers.Services; - -const notifier = Cc["@mozilla.org/alerts-service;1"] - .getService(Ci.nsIAlertsService); - -const chromeScript = SpecialPowers.loadChromeScript(_ => { - Components.utils.import("resource://gre/modules/Services.jsm"); - - addMessageListener("anyXULAlertsVisible", function() { - var windows = Services.wm.getEnumerator("alert:alert"); - return windows.hasMoreElements(); - }); - - addMessageListener("getAlertSource", function() { - var alertWindows = Services.wm.getEnumerator("alert:alert"); - if (!alertWindows) { - return null; - } - var alertWindow = alertWindows.getNext(); - return alertWindow.document.getElementById("alertSourceLabel").getAttribute("value"); - }); -}); - -function notify(alertName, principal) { - return new Promise((resolve, reject) => { - var source; - function observe(subject, topic, data) { - if (topic == "alertclickcallback") { - reject(new Error("Alerts should not be clicked during test")); - } else if (topic == "alertshow") { - source = chromeScript.sendSyncMessage("getAlertSource")[0][0]; - notifier.closeAlert(alertName); - } else { - is(topic, "alertfinished", "Should hide alert"); - resolve(source); - } - } - notifier.showAlertNotification(null, "Notification test", - "Surprise! I'm here to test notifications!", - false, alertName, observe, alertName, - null, null, null, principal); - if (SpecialPowers.Services.appinfo.OS == "Darwin") { - notifier.closeAlert(alertName); - } - }); -} - -function* testNoPrincipal() { - var source = yield notify("noPrincipal", null); - ok(!source, "Should omit source without principal"); -} - -function* testSystemPrincipal() { - var principal = Services.scriptSecurityManager.getSystemPrincipal(); - var source = yield notify("systemPrincipal", principal); - ok(!source, "Should omit source for system principal"); -} - -function* testNullPrincipal() { - var principal = Services.scriptSecurityManager.createNullPrincipal({}); - var source = yield notify("nullPrincipal", principal); - ok(!source, "Should omit source for null principal"); -} - -function* testNodePrincipal() { - var principal = SpecialPowers.wrap(document).nodePrincipal; - var source = yield notify("nodePrincipal", principal); - - var stringBundle = Services.strings.createBundle( - "chrome://alerts/locale/alert.properties" - ); - var localizedSource = stringBundle.formatStringFromName( - "source.label", [principal.URI.hostPort], 1); - is(source, localizedSource, "Should include source for node principal"); -} - -function runTest() { - if (!("@mozilla.org/alerts-service;1" in Cc)) { - todo(false, "Alerts service does not exist in this application"); - return; - } - - if ("@mozilla.org/system-alerts-service;1" in Cc) { - todo(false, "Native alerts service exists in this application"); - return; - } - - ok(true, "Alerts service exists in this application"); - - // sendSyncMessage returns an array of arrays. See the comments in - // test_alerts_noobserve.html and test_SpecialPowersLoadChromeScript.html. - var [[alertsVisible]] = chromeScript.sendSyncMessage("anyXULAlertsVisible"); - ok(!alertsVisible, "Alerts should not be present at the start of the test."); - - add_task(testNoPrincipal); - add_task(testSystemPrincipal); - add_task(testNullPrincipal); - add_task(testNodePrincipal); -} - -runTest(); -</script> -</pre> -</body> -</html> |