12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- /* 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 {Cc,Ci} = require("chrome");
- const timer = require("sdk/timers");
- const xulApp = require("sdk/system/xul-app");
- const { Loader } = require("sdk/test/loader");
- const { openTab, getBrowserForTab, closeTab } = require("sdk/tabs/utils");
- /**
- * A helper function that creates a PageMod, then opens the specified URL
- * and checks the effect of the page mod on 'onload' event via testCallback.
- */
- exports.testPageMod = function testPageMod(assert, done, testURL, pageModOptions,
- testCallback, timeout) {
- if (!xulApp.versionInRange(xulApp.platformVersion, "1.9.3a3", "*") &&
- !xulApp.versionInRange(xulApp.platformVersion, "1.9.2.7", "1.9.2.*")) {
- assert.pass("Note: not testing PageMod, as it doesn't work on this platform version");
- return null;
- }
- var wm = Cc['@mozilla.org/appshell/window-mediator;1']
- .getService(Ci.nsIWindowMediator);
- var browserWindow = wm.getMostRecentWindow("navigator:browser");
- if (!browserWindow) {
- assert.pass("page-mod tests: could not find the browser window, so " +
- "will not run. Use -a firefox to run the pagemod tests.")
- return null;
- }
- let loader = Loader(module);
- let pageMod = loader.require("sdk/page-mod");
- var pageMods = [new pageMod.PageMod(opts) for each(opts in pageModOptions)];
- let newTab = openTab(browserWindow, testURL, {
- inBackground: false
- });
- var b = getBrowserForTab(newTab);
- function onPageLoad() {
- b.removeEventListener("load", onPageLoad, true);
- // Delay callback execute as page-mod content scripts may be executed on
- // load event. So page-mod actions may not be already done.
- // If we delay even more contentScriptWhen:'end', we may want to modify
- // this code again.
- timer.setTimeout(testCallback, 0,
- b.contentWindow.wrappedJSObject,
- function () {
- pageMods.forEach(function(mod) mod.destroy());
- // XXX leaks reported if we don't close the tab?
- closeTab(newTab);
- loader.unload();
- done();
- }
- );
- }
- b.addEventListener("load", onPageLoad, true);
- return pageMods;
- }
|