diff -r 000000000000 -r 6474c204b198 addon-sdk/source/test/test-content-events.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/addon-sdk/source/test/test-content-events.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,131 @@ +/* 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"); + +let 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; +}); + +let use = function(value) function() value; + + +let open = curry(function(url, window) openTab(window, url)); +let close = function(tab) { + let promise = when("pagehide", tab); + closeTab(tab); + return promise; +} + +exports["test multiple tabs"] = function(assert, done) { + let loader = Loader(module); + let { events } = loader.require("sdk/content/events"); + let { on, off } = loader.require("sdk/event/core"); + let actual = []; + + on(events, "data", handler); + function handler ({type, target, timeStamp}) { + eventFilter(type, target, () => { + actual.push(type + " -> " + target.URL) + }); + } + + let window = getMostRecentBrowserWindow(); + let firstTab = open("data:text/html,first-tab", window); + + when("pageshow", firstTab). + then(close). + then(use(window)). + then(open("data:text/html,second-tab")). + then(when("pageshow")). + then(close). + then(function() { + assert.deepEqual(actual, [ + "document-element-inserted -> data:text/html,first-tab", + "DOMContentLoaded -> data:text/html,first-tab", + "load -> data:text/html,first-tab", + "pageshow -> data:text/html,first-tab", + "document-element-inserted -> data:text/html,second-tab", + "DOMContentLoaded -> data:text/html,second-tab", + "load -> data:text/html,second-tab", + "pageshow -> data:text/html,second-tab" + ], "all events dispatche as expeced") + }, function(reason) { + assert.fail(Error(reason)); + }).then(function() { + loader.unload(); + off(events, "data", handler); + done(); + }); +}; + +exports["test nested frames"] = function(assert, done) { + let loader = Loader(module); + let { events } = loader.require("sdk/content/events"); + let { on, off } = loader.require("sdk/event/core"); + let actual = []; + on(events, "data", handler); + function handler ({type, target, timeStamp}) { + eventFilter(type, target, () => { + actual.push(type + " -> " + target.URL) + }); + } + + let window = getMostRecentBrowserWindow(); + let uri = encodeURI("data:text/html,