mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-21 14:47:31 +09:00
import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo
This commit is contained in:
commit
dcd9973243
150858 changed files with 23884658 additions and 0 deletions
92
addon-sdk/source/test/test-content-events.js
Normal file
92
addon-sdk/source/test/test-content-events.js
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
/* 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";
|
||||
|
||||
const { Loader } = require("sdk/test/loader");
|
||||
const { getMostRecentBrowserWindow, getInnerId } = require("sdk/window/utils");
|
||||
const { openTab, closeTab, getBrowserForTab } = require("sdk/tabs/utils");
|
||||
const { defer } = require("sdk/core/promise");
|
||||
const { curry, identity, partial } = require("sdk/lang/functional");
|
||||
|
||||
const { nuke } = require("sdk/loader/sandbox");
|
||||
|
||||
const { open: openWindow, close: closeWindow } = require('sdk/window/helpers');
|
||||
|
||||
const openBrowserWindow = partial(openWindow, null, {features: {toolbar: true}});
|
||||
|
||||
var when = curry(function(options, tab) {
|
||||
let type = options.type || options;
|
||||
let capture = options.capture || false;
|
||||
let target = getBrowserForTab(tab);
|
||||
let { promise, resolve } = defer();
|
||||
|
||||
target.addEventListener(type, function handler(event) {
|
||||
if (!event.target.defaultView.frameElement) {
|
||||
target.removeEventListener(type, handler, capture);
|
||||
resolve(tab);
|
||||
}
|
||||
}, capture);
|
||||
|
||||
return promise;
|
||||
});
|
||||
|
||||
var use = use = value => () => value;
|
||||
|
||||
|
||||
var open = curry((url, window) => openTab(window, url));
|
||||
var close = function(tab) {
|
||||
let promise = when("pagehide", tab);
|
||||
closeTab(tab);
|
||||
return promise;
|
||||
}
|
||||
|
||||
exports["test dead object errors"] = function(assert, done) {
|
||||
let system = require("sdk/system/events");
|
||||
let loader = Loader(module);
|
||||
let { events } = loader.require("sdk/content/events");
|
||||
|
||||
// The dead object error is properly reported on console but
|
||||
// doesn't raise any test's exception
|
||||
function onMessage({ subject }) {
|
||||
let message = subject.wrappedJSObject;
|
||||
let { level } = message;
|
||||
let text = String(message.arguments[0]);
|
||||
|
||||
if (level === "error" && text.includes("can't access dead object"))
|
||||
fail(text);
|
||||
}
|
||||
|
||||
let cleanup = () => system.off("console-api-log-event", onMessage);
|
||||
let fail = (reason) => {
|
||||
cleanup();
|
||||
assert.fail(reason);
|
||||
}
|
||||
|
||||
loader.unload();
|
||||
|
||||
nuke(loader.sharedGlobalSandbox);
|
||||
|
||||
system.on("console-api-log-event", onMessage, true);
|
||||
|
||||
openBrowserWindow().
|
||||
then(closeWindow).
|
||||
then(() => assert.pass("checking dead object errors")).
|
||||
then(cleanup).
|
||||
then(done, fail);
|
||||
};
|
||||
|
||||
// ignore *-document-global-created events that are not very consistent.
|
||||
// only allow data uris that we create to ignore unwanted events, e.g.,
|
||||
// about:blank, http:// requests from Fennec's `about:`home page that displays
|
||||
// add-ons a user could install, local `searchplugins`, other chrome uris
|
||||
// Calls callback if passes filter
|
||||
function eventFilter (type, target, callback) {
|
||||
if (target.URL.startsWith("data:text/html,") &&
|
||||
type !== "chrome-document-global-created" &&
|
||||
type !== "content-document-global-created")
|
||||
|
||||
callback();
|
||||
}
|
||||
require("test").run(exports);
|
||||
Loading…
Add table
Add a link
Reference in a new issue