123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- /* 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 { WindowLoader } = require('sdk/windows/loader'),
- { Trait } = require('sdk/deprecated/traits');
- const Loader = Trait.compose(
- WindowLoader,
- {
- constructor: function Loader(options) {
- this._onLoad = options.onLoad;
- this._onUnload = options.onUnload;
- if ('window' in options)
- this._window = options.window;
- this._load();
- this.window = this._window;
- },
- window: null,
- _onLoad: null,
- _onUnload: null,
- _tabOptions: []
- }
- );
- exports['test compositions with missing required properties'] = function(assert) {
- assert.throws(
- function() WindowLoader.compose({})(),
- /Missing required property: _onLoad/,
- 'should throw missing required property exception'
- );
- assert.throws(
- function() WindowLoader.compose({ _onLoad: null, _tabOptions: null })(),
- /Missing required property: _onUnload/,
- 'should throw missing required property `_onUnload`'
- );
- assert.throws(
- function() WindowLoader.compose({ _onUnload: null, _tabOptions: null })(),
- /Missing required property: _onLoad/,
- 'should throw missing required property `_onLoad`'
- );
- assert.throws(
- function() WindowLoader.compose({ _onUnload: null, _onLoad: null })(),
- /Missing required property: _tabOptions/,
- 'should throw missing required property `_tabOptions`'
- );
- };
- exports['test `load` events'] = function(assert, done) {
- let onLoadCalled = false;
- Loader({
- onLoad: function(window) {
- onLoadCalled = true;
- assert.equal(window, this._window, 'windows should match');
- assert.equal(
- window.document.readyState, 'complete', 'window must be fully loaded'
- );
- window.close();
- },
- onUnload: function(window) {
- assert.equal(window, this._window, 'windows should match');
- assert.equal(
- window.document.readyState, 'complete', 'window must be fully loaded'
- );
- assert.ok(onLoadCalled, 'load callback is supposed to be called');
- done();
- }
- });
- };
- exports['test removeing listeners'] = function(assert, done) {
- Loader({
- onLoad: function(window) {
- assert.equal(window, this._window, 'windows should match');
- window.close();
- },
- onUnload: done
- });
- };
- exports['test create loader from opened window'] = function(assert, done) {
- let onUnloadCalled = false;
- Loader({
- onLoad: function(window) {
- assert.equal(window, this._window, 'windows should match');
- assert.equal(window.document.readyState, 'complete', 'window must be fully loaded');
- Loader({
- window: window,
- onLoad: function(win) {
- assert.equal(win, window, 'windows should match');
- window.close();
- },
- onUnload: function(window) {
- assert.ok(onUnloadCalled, 'first handler should be called already');
- done();
- }
- });
- },
- onUnload: function(window) {
- onUnloadCalled = true;
- }
- });
- };
- require('sdk/test').run(exports);
|