1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/addon-sdk/source/test/addons/addon-page/main.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,202 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 +'use strict'; 1.8 + 1.9 +const { isTabOpen, activateTab, openTab, 1.10 + closeTab, getTabURL, getWindowHoldingTab } = require('sdk/tabs/utils'); 1.11 +const windows = require('sdk/deprecated/window-utils'); 1.12 +const { LoaderWithHookedConsole } = require('sdk/test/loader'); 1.13 +const { setTimeout } = require('sdk/timers'); 1.14 +const app = require("sdk/system/xul-app"); 1.15 +const tabs = require('sdk/tabs'); 1.16 +const isAustralis = "gCustomizeMode" in windows.activeBrowserWindow; 1.17 +const { set: setPref, get: getPref } = require("sdk/preferences/service"); 1.18 +const { PrefsTarget } = require("sdk/preferences/event-target"); 1.19 +const { defer } = require('sdk/core/promise'); 1.20 + 1.21 +const DEPRECATE_PREF = "devtools.errorconsole.deprecation_warnings"; 1.22 + 1.23 +let uri = require('sdk/self').data.url('index.html'); 1.24 + 1.25 +function closeTabPromise(tab) { 1.26 + let { promise, resolve } = defer(); 1.27 + let url = getTabURL(tab); 1.28 + 1.29 + tabs.on('close', function onCloseTab(t) { 1.30 + if (t.url == url) { 1.31 + tabs.removeListener('close', onCloseTab); 1.32 + setTimeout(_ => resolve(tab)) 1.33 + } 1.34 + }); 1.35 + closeTab(tab); 1.36 + 1.37 + return promise; 1.38 +} 1.39 + 1.40 +function isChromeVisible(window) { 1.41 + let x = window.document.documentElement.getAttribute('disablechrome') 1.42 + return x !== 'true'; 1.43 +} 1.44 + 1.45 +// Once Bug 903018 is resolved, just move the application testing to 1.46 +// module.metadata.engines 1.47 +if (app.is('Firefox')) { 1.48 + 1.49 +exports['test add-on page deprecation message'] = function(assert, done) { 1.50 + let { loader, messages } = LoaderWithHookedConsole(module); 1.51 + 1.52 + loader.require('sdk/preferences/event-target').PrefsTarget({ 1.53 + branchName: "devtools.errorconsole." 1.54 + }).on("deprecation_warnings", function() { 1.55 + if (!getPref(DEPRECATE_PREF, false)) { 1.56 + return undefined; 1.57 + } 1.58 + 1.59 + loader.require('sdk/addon-page'); 1.60 + 1.61 + assert.equal(messages.length, 1, "only one error is dispatched"); 1.62 + assert.equal(messages[0].type, "error", "the console message is an error"); 1.63 + 1.64 + let msg = messages[0].msg; 1.65 + assert.ok(msg.indexOf("DEPRECATED") === 0, 1.66 + "The message is deprecation message"); 1.67 + 1.68 + loader.unload(); 1.69 + done(); 1.70 + return undefined; 1.71 + }); 1.72 + setPref(DEPRECATE_PREF, false); 1.73 + setPref(DEPRECATE_PREF, true); 1.74 +}; 1.75 + 1.76 +exports['test that add-on page has no chrome'] = function(assert, done) { 1.77 + let { loader } = LoaderWithHookedConsole(module); 1.78 + loader.require('sdk/addon-page'); 1.79 + 1.80 + let window = windows.activeBrowserWindow; 1.81 + let tab = openTab(window, uri); 1.82 + 1.83 + assert.ok(isChromeVisible(window), 'chrome is visible for non addon page'); 1.84 + 1.85 + // need to do this in another turn to make sure event listener 1.86 + // that sets property has time to do that. 1.87 + setTimeout(function() { 1.88 + activateTab(tab); 1.89 + 1.90 + assert.equal(isChromeVisible(window), app.is('Fennec') || isAustralis, 1.91 + 'chrome is not visible for addon page'); 1.92 + 1.93 + closeTabPromise(tab).then(function() { 1.94 + assert.ok(isChromeVisible(window), 'chrome is visible again'); 1.95 + loader.unload(); 1.96 + assert.ok(!isTabOpen(tab), 'add-on page tab is closed on unload'); 1.97 + done(); 1.98 + }).then(null, assert.fail); 1.99 + }); 1.100 +}; 1.101 + 1.102 +exports['test that add-on page with hash has no chrome'] = function(assert, done) { 1.103 + let { loader } = LoaderWithHookedConsole(module); 1.104 + loader.require('sdk/addon-page'); 1.105 + 1.106 + let window = windows.activeBrowserWindow; 1.107 + let tab = openTab(window, uri + "#foo"); 1.108 + 1.109 + assert.ok(isChromeVisible(window), 'chrome is visible for non addon page'); 1.110 + 1.111 + // need to do this in another turn to make sure event listener 1.112 + // that sets property has time to do that. 1.113 + setTimeout(function() { 1.114 + activateTab(tab); 1.115 + 1.116 + assert.equal(isChromeVisible(window), app.is('Fennec') || isAustralis, 1.117 + 'chrome is not visible for addon page'); 1.118 + 1.119 + closeTabPromise(tab).then(function() { 1.120 + assert.ok(isChromeVisible(window), 'chrome is visible again'); 1.121 + loader.unload(); 1.122 + assert.ok(!isTabOpen(tab), 'add-on page tab is closed on unload'); 1.123 + done(); 1.124 + }).then(null, assert.fail); 1.125 + }); 1.126 +}; 1.127 + 1.128 +exports['test that add-on page with querystring has no chrome'] = function(assert, done) { 1.129 + let { loader } = LoaderWithHookedConsole(module); 1.130 + loader.require('sdk/addon-page'); 1.131 + 1.132 + let window = windows.activeBrowserWindow; 1.133 + let tab = openTab(window, uri + '?foo=bar'); 1.134 + 1.135 + assert.ok(isChromeVisible(window), 'chrome is visible for non addon page'); 1.136 + 1.137 + // need to do this in another turn to make sure event listener 1.138 + // that sets property has time to do that. 1.139 + setTimeout(function() { 1.140 + activateTab(tab); 1.141 + 1.142 + assert.equal(isChromeVisible(window), app.is('Fennec') || isAustralis, 1.143 + 'chrome is not visible for addon page'); 1.144 + 1.145 + closeTabPromise(tab).then(function() { 1.146 + assert.ok(isChromeVisible(window), 'chrome is visible again'); 1.147 + loader.unload(); 1.148 + assert.ok(!isTabOpen(tab), 'add-on page tab is closed on unload'); 1.149 + done(); 1.150 + }).then(null, assert.fail); 1.151 + }); 1.152 +}; 1.153 + 1.154 +exports['test that add-on page with hash and querystring has no chrome'] = function(assert, done) { 1.155 + let { loader } = LoaderWithHookedConsole(module); 1.156 + loader.require('sdk/addon-page'); 1.157 + 1.158 + let window = windows.activeBrowserWindow; 1.159 + let tab = openTab(window, uri + '#foo?foo=bar'); 1.160 + 1.161 + assert.ok(isChromeVisible(window), 'chrome is visible for non addon page'); 1.162 + 1.163 + // need to do this in another turn to make sure event listener 1.164 + // that sets property has time to do that. 1.165 + setTimeout(function() { 1.166 + activateTab(tab); 1.167 + 1.168 + assert.equal(isChromeVisible(window), app.is('Fennec') || isAustralis, 1.169 + 'chrome is not visible for addon page'); 1.170 + 1.171 + closeTabPromise(tab).then(function() { 1.172 + assert.ok(isChromeVisible(window), 'chrome is visible again'); 1.173 + loader.unload(); 1.174 + assert.ok(!isTabOpen(tab), 'add-on page tab is closed on unload'); 1.175 + done(); 1.176 + }).then(null, assert.fail); 1.177 + }); 1.178 +}; 1.179 + 1.180 +exports['test that malformed uri is not an addon-page'] = function(assert, done) { 1.181 + let { loader } = LoaderWithHookedConsole(module); 1.182 + loader.require('sdk/addon-page'); 1.183 + 1.184 + let window = windows.activeBrowserWindow; 1.185 + let tab = openTab(window, uri + 'anguage'); 1.186 + 1.187 + // need to do this in another turn to make sure event listener 1.188 + // that sets property has time to do that. 1.189 + setTimeout(function() { 1.190 + activateTab(tab); 1.191 + 1.192 + assert.ok(isChromeVisible(window), 'chrome is visible for malformed uri'); 1.193 + 1.194 + closeTabPromise(tab).then(function() { 1.195 + loader.unload(); 1.196 + done(); 1.197 + }).then(null, assert.fail); 1.198 + }); 1.199 +}; 1.200 + 1.201 +} else { 1.202 + exports['test unsupported'] = (assert) => assert.pass('This application is unsupported.'); 1.203 +} 1.204 + 1.205 +require('sdk/test/runner').runTestsFromModule(module);