summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/xpcshell/test_ext_runtime_sendMessage_errors.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/test/xpcshell/test_ext_runtime_sendMessage_errors.js')
-rw-r--r--toolkit/components/extensions/test/xpcshell/test_ext_runtime_sendMessage_errors.js66
1 files changed, 66 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_runtime_sendMessage_errors.js b/toolkit/components/extensions/test/xpcshell/test_ext_runtime_sendMessage_errors.js
new file mode 100644
index 0000000000..d78197f9e4
--- /dev/null
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_runtime_sendMessage_errors.js
@@ -0,0 +1,66 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+"use strict";
+
+add_task(async function test_sendMessage_error() {
+ async function background() {
+ let circ = {};
+ circ.circ = circ;
+ let testCases = [
+ // [arguments, expected error string],
+ [[], "runtime.sendMessage's message argument is missing"],
+ [
+ [null, null, null, 42],
+ "runtime.sendMessage's last argument is not a function",
+ ],
+ [[null, null, 1], "runtime.sendMessage's options argument is invalid"],
+ [
+ [1, null, null],
+ "runtime.sendMessage's extensionId argument is invalid",
+ ],
+ [
+ [null, null, null, null, null],
+ "runtime.sendMessage received too many arguments",
+ ],
+
+ // Even when the parameters are accepted, we still expect an error
+ // because there is no onMessage listener.
+ [
+ [null, null, null],
+ "Could not establish connection. Receiving end does not exist.",
+ ],
+
+ // Structured cloning doesn't work with DOM objects
+ [[null, location, null], "Location object could not be cloned."],
+ [[null, [circ, location], null], "Location object could not be cloned."],
+ ];
+
+ // Repeat all tests with the undefined value instead of null.
+ for (let [args, expectedError] of testCases.slice()) {
+ args = args.map(arg => (arg === null ? undefined : arg));
+ testCases.push([args, expectedError]);
+ }
+
+ for (let [args, expectedError] of testCases) {
+ let description = `runtime.sendMessage(${args.map(String).join(", ")})`;
+
+ await browser.test.assertRejects(
+ browser.runtime.sendMessage(...args),
+ expectedError,
+ `expected error message for ${description}`
+ );
+ }
+
+ browser.test.notifyPass("sendMessage parameter validation");
+ }
+ let extensionData = {
+ background,
+ };
+
+ let extension = ExtensionTestUtils.loadExtension(extensionData);
+ await extension.startup();
+
+ await extension.awaitFinish("sendMessage parameter validation");
+
+ await extension.unload();
+});