123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- /* 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 { Symbiont } = require('sdk/deprecated/symbiont');
- const self = require('sdk/self');
- const fixtures = require("./fixtures");
- const { close } = require('sdk/window/helpers');
- const app = require("sdk/system/xul-app");
- function makeWindow() {
- let content =
- '<?xml version="1.0"?>' +
- '<window ' +
- 'xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">' +
- '<iframe id="content" type="content"/>' +
- '</window>';
- var url = "data:application/vnd.mozilla.xul+xml;charset=utf-8," +
- encodeURIComponent(content);
- var features = ["chrome", "width=10", "height=10"];
- return Cc["@mozilla.org/embedcomp/window-watcher;1"].
- getService(Ci.nsIWindowWatcher).
- openWindow(null, url, null, features.join(","), null);
- }
- exports['test:constructing symbiont && validating API'] = function(assert) {
- let contentScript = ["1;", "2;"];
- let contentScriptFile = fixtures.url("test-content-symbiont.js");
- // We can avoid passing a `frame` argument. Symbiont will create one
- // by using HiddenFrame module
- let contentSymbiont = Symbiont({
- contentScriptFile: contentScriptFile,
- contentScript: contentScript,
- contentScriptWhen: "start"
- });
- assert.equal(
- contentScriptFile,
- contentSymbiont.contentScriptFile,
- "There is one contentScriptFile, as specified in options."
- );
- assert.equal(
- contentScript.length,
- contentSymbiont.contentScript.length,
- "There are two contentScripts, as specified in options."
- );
- assert.equal(
- contentScript[0],
- contentSymbiont.contentScript[0],
- "There are two contentScripts, as specified in options."
- );
- assert.equal(
- contentScript[1],
- contentSymbiont.contentScript[1],
- "There are two contentScripts, as specified in options."
- )
- assert.equal(
- contentSymbiont.contentScriptWhen,
- "start",
- "contentScriptWhen is as specified in options."
- );
- contentSymbiont.destroy();
- };
- exports["test:communication with worker global scope"] = function(assert, done) {
- if (app.is('Fennec')) {
- assert.pass('Test skipped on Fennec');
- done();
- }
- let window = makeWindow();
- let contentSymbiont;
- console.log(window)
- function onMessage1(message) {
- assert.equal(message, 1, "Program gets message via onMessage.");
- contentSymbiont.removeListener('message', onMessage1);
- contentSymbiont.on('message', onMessage2);
- contentSymbiont.postMessage(2);
- };
- function onMessage2(message) {
- if (5 == message) {
- close(window).then(done);
- }
- else {
- assert.equal(message, 3, "Program gets message via onMessage2.");
- contentSymbiont.postMessage(4)
- }
- }
- window.addEventListener("load", function onLoad() {
- window.removeEventListener("load", onLoad, false);
- let frame = window.document.getElementById("content");
- contentSymbiont = Symbiont({
- frame: frame,
- contentScript: 'new ' + function() {
- self.postMessage(1);
- self.on("message", function onMessage(message) {
- if (message === 2)
- self.postMessage(3);
- if (message === 4)
- self.postMessage(5);
- });
- } + '()',
- contentScriptWhen: 'ready',
- onMessage: onMessage1
- });
- frame.setAttribute("src", "data:text/html;charset=utf-8,<html><body></body></html>");
- }, false);
- };
- exports['test:pageWorker'] = function(assert, done) {
- let worker = Symbiont({
- contentURL: 'about:buildconfig',
- contentScript: 'new ' + function WorkerScope() {
- self.on('message', function(data) {
- if (data.valid)
- self.postMessage('bye!');
- })
- self.postMessage(window.location.toString());
- },
- onMessage: function(msg) {
- if (msg == 'bye!') {
- done()
- } else {
- assert.equal(
- worker.contentURL + '',
- msg
- );
- worker.postMessage({ valid: true });
- }
- }
- });
- };
- exports["test:document element present on 'start'"] = function(assert, done) {
- let xulApp = require("sdk/system/xul-app");
- let worker = Symbiont({
- contentURL: "about:buildconfig",
- contentScript: "self.postMessage(!!document.documentElement)",
- contentScriptWhen: "start",
- onMessage: function(message) {
- if (xulApp.versionInRange(xulApp.platformVersion, "2.0b6", "*"))
- assert.ok(message, "document element present on 'start'");
- else
- assert.pass("document element not necessarily present on 'start'");
- done();
- }
- });
- };
- require("test").run(exports);
|