summaryrefslogtreecommitdiffstats
path: root/addon-sdk/source/test/addons/unsafe-content-script/main.js
blob: b06810117996f8773d31fb3d1cedd3781851f035 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/* 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 { create: makeFrame } = require("sdk/frame/utils");
const { window } = require("sdk/addon/window");
const { Loader } = require('sdk/test/loader');

exports.testMembranelessMode = function(assert, done) {
  const loader = Loader(module);
  const Worker = loader.require("sdk/content/worker").Worker;

  let url = "data:text/html;charset=utf-8," + encodeURIComponent(
    '<script>' +
    'function runTest() {' +
    '  assert(fuu.bar == 42, "Content-script objects should be accessible to content with' +
    '         the unsafe-content-script flag on.");' +
    '}' +
    '</script>'
  );

  let element = makeFrame(window.document, {
    nodeName: "iframe",
    type: "content",
    allowJavascript: true,
    allowPlugins: true,
    allowAuth: true,
    uri: url
  });

  element.addEventListener("DOMContentLoaded", onDOMReady, false);

  function onDOMReady() {
    let worker = Worker({
      window: element.contentWindow,
      contentScript:
        'new ' + function () {
          var assert = function assert(v, msg) {
            self.port.emit("assert", { assertion: v, msg: msg });
          }
          var done = function done() {
            self.port.emit("done");
          }
          window.wrappedJSObject.fuu = { bar: 42 };
          window.wrappedJSObject.assert = assert;
          window.wrappedJSObject.runTest();
          done();
        }
    });

    worker.port.on("done", () => {
      // cleanup
      element.parentNode.removeChild(element);
      worker.destroy();
      loader.unload();

      done();
    });

    worker.port.on("assert", function (data) {
      assert.ok(data.assertion, data.msg);
    });

  }
};

require("sdk/test/runner").runTestsFromModule(module);