<!DOCTYPE html> <!-- Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ --> <html> <head> <meta charset="utf8"> <title></title> <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"> <script type="application/javascript;version=1.8"> const { classes: Cc, interfaces: Ci, utils: Cu } = Components; let { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); const contentGlobals = require("devtools/server/content-globals"); const Services = require("Services"); const tabs = require('sdk/tabs'); const { getMostRecentBrowserWindow, getInnerId } = require('sdk/window/utils'); const { PageMod } = require('sdk/page-mod'); var _tests = []; function addTest(test) { _tests.push(test); } function runNextTest() { if (_tests.length == 0) { SimpleTest.finish() return; } _tests.shift()(); } window.onload = function() { SimpleTest.waitForExplicitFinish(); runNextTest(); } addTest(function () { let TEST_URL = 'data:text/html;charset=utf-8,test'; let mod = PageMod({ include: TEST_URL, contentScriptWhen: 'ready', contentScript: 'null;' }); tabs.open({ url: TEST_URL, onLoad: function(tab) { let id = getInnerId(getMostRecentBrowserWindow().gBrowser.selectedBrowser.contentWindow); // getting is(contentGlobals.getContentGlobals({ 'inner-window-id': id }).length, 1, 'found a global for inner-id = ' + id); Services.obs.addObserver(function observer(subject, topic, data) { if (id == subject.QueryInterface(Components.interfaces.nsISupportsPRUint64).data) { Services.obs.removeObserver(observer, 'inner-window-destroyed'); setTimeout(function() { // closing the tab window should have removed the global is(contentGlobals.getContentGlobals({ 'inner-window-id': id }).length, 0, 'did not find a global for inner-id = ' + id); mod.destroy(); runNextTest(); }) } }, 'inner-window-destroyed', false); tab.close(); } }); }) addTest(function testAddRemoveGlobal() { let global = {}; let globalDetails = { global: global, 'inner-window-id': 5 }; // adding contentGlobals.addContentGlobal(globalDetails); // getting is(contentGlobals.getContentGlobals({ 'inner-window-id': 5 }).length, 1, 'found a global for inner-id = 5'); is(contentGlobals.getContentGlobals({ 'inner-window-id': 4 }).length, 0, 'did not find a global for inner-id = 4'); // remove contentGlobals.removeContentGlobal(globalDetails); // getting again is(contentGlobals.getContentGlobals({ 'inner-window-id': 5 }).length, 0, 'did not find a global for inner-id = 5'); runNextTest(); }); </script> </head> <body></body> </html>