summaryrefslogtreecommitdiffstats
path: root/addon-sdk/source/test/leak/test-leak-window-events.js
diff options
context:
space:
mode:
Diffstat (limited to 'addon-sdk/source/test/leak/test-leak-window-events.js')
-rw-r--r--addon-sdk/source/test/leak/test-leak-window-events.js65
1 files changed, 65 insertions, 0 deletions
diff --git a/addon-sdk/source/test/leak/test-leak-window-events.js b/addon-sdk/source/test/leak/test-leak-window-events.js
new file mode 100644
index 000000000..ceb20f475
--- /dev/null
+++ b/addon-sdk/source/test/leak/test-leak-window-events.js
@@ -0,0 +1,65 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * 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/. */
+"use strict";
+
+// Opening new windows in Fennec causes issues
+module.metadata = {
+ engines: {
+ 'Firefox': '*'
+ }
+};
+
+const { asyncWindowLeakTest } = require("./leak-utils.js");
+const { Loader } = require("sdk/test/loader");
+const { open } = require("sdk/window/utils");
+
+exports["test window/events for leaks"] = function*(assert) {
+ yield asyncWindowLeakTest(assert, _ => {
+ return new Promise((resolve, reject) => {
+ let loader = Loader(module);
+ let { events } = loader.require("sdk/window/events");
+ let { on, off } = loader.require("sdk/event/core");
+
+ on(events, "data", function handler(e) {
+ try {
+ if (e.type === "load") {
+ e.target.close();
+ }
+ else if (e.type === "close") {
+ off(events, "data", handler);
+
+ // Let asyncWindowLeakTest call loader.unload() after the
+ // leak check.
+ resolve(loader);
+ }
+ } catch (e) {
+ reject(e);
+ }
+ });
+
+ // Open a window. This will trigger our data events.
+ open();
+ });
+ });
+};
+
+exports["test window/events for leaks with existing window"] = function*(assert) {
+ yield asyncWindowLeakTest(assert, _ => {
+ return new Promise((resolve, reject) => {
+ let loader = Loader(module);
+ let w = open();
+ w.addEventListener("load", function windowLoaded(evt) {
+ w.removeEventListener("load", windowLoaded);
+ let { events } = loader.require("sdk/window/events");
+ w.addEventListener("DOMWindowClose", function windowClosed(evt) {
+ w.removeEventListener("DOMWindowClose", windowClosed);
+ resolve(loader);
+ });
+ w.close();
+ });
+ });
+ });
+};
+
+require("sdk/test").run(exports);