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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
|
/* See license.txt for terms of usage */
// ********************************************************************************************* //
// Constants
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
// List of firebug modules that must be loaded at startup and unloaded on shutdown.
// !important every new module loaded with Cu.import must be added here
var FIREBUG_MODULES = [
"resource://firebug/fbtrace.js",
"resource://firebug/firebug-http-observer.js",
"resource://firebug/firebug-trace-service.js",
"resource://firebug/gcli.js",
"resource://firebug/loader.js",
"resource://firebug/locale.js",
"resource://firebug/mini-require.js",
"resource://firebug/observer-service.js",
"resource://firebug/prefLoader.js",
"resource://firebug/require-debug.js",
"resource://firebug/require.js",
"resource://firebug/storageService.js"
];
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
// ********************************************************************************************* //
// Bootstrap API
function install(params, reason)
{
}
function uninstall(params, reason)
{
}
function startup(params, reason)
{
// Register the resource:// mappings
var res = Services.io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler);
var uiURI = Services.io.newURI(__SCRIPT_URI_SPEC__ + "/../content/firebug/firebugui/", null, null);
var resourceURI = Services.io.newURI(__SCRIPT_URI_SPEC__ + "/../modules/", null, null);
res.setSubstitution("firebug", resourceURI);
res.setSubstitution("firebugui", uiURI);
res.setSubstitution("moduleloader", resourceURI);
Cu.import("resource://firebug/prefLoader.js");
// Register default preferences
PrefLoader.loadDefaultPrefs(params.installPath, "firebug.js");
PrefLoader.loadDefaultPrefs(params.installPath, "cookies.js");
PrefLoader.loadDefaultPrefs(params.installPath, "tracingConsole.js");
// Load the overlay manager
Cu.import("resource://firebug/loader.js");
//register extensions
FirebugLoader.startup();
// Load server side in case we are in the server mode.
if (loadServer())
return;
// Load Firebug into all existing browser windows.
var enumerator = Services.wm.getEnumerator("navigator:browser");
while (enumerator.hasMoreElements())
FirebugLoader.loadIntoWindow(enumerator.getNext(), reason);
// Listen for new windows, Firebug must be loaded into them too.
Services.obs.addObserver(windowWatcher, "chrome-document-global-created", false);
// GCLI commands
Cu.import("resource://firebug/gcli.js");
FirebugGCLICommands.startup();
}
function shutdown(params, reason)
{
// Don't need to clean anything up if the application is shutting down
if (reason == APP_SHUTDOWN)
return;
// Shutdown the server (in case we are in server mode).
unloadServer();
// Remove "new window" listener.
Services.obs.removeObserver(windowWatcher, "chrome-document-global-created");
// remove from all windows
try
{
FirebugLoader.shutdown();
}
catch(e)
{
Cu.reportError(e);
}
// Unregister all GCLI commands
FirebugGCLICommands.shutdown();
// remove default preferences
PrefLoader.clearDefaultPrefs();
// Unload all Firebug modules added with Cu.import
FIREBUG_MODULES.forEach(Cu.unload, Cu);
// Clear our resource registration
var res = Services.io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler);
res.setSubstitution("firebug", null);
res.setSubstitution("firebugui", null);
res.setSubstitution("moduleloader", null);
}
// ********************************************************************************************* //
// Window Listener
var windowWatcher =
{
QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver]),
observe: function windowWatcher(win, topic, data)
{
// https://bugzil.la/795961 ?
win.addEventListener("load", function onLoad(evt)
{
// load listener not necessary once https://bugzil.la/800677 is fixed
var win = evt.currentTarget;
win.removeEventListener("load", onLoad, false);
if (win.document.documentElement.getAttribute("windowtype") == "navigator:browser")
FirebugLoader.loadIntoWindow(win);
}, false);
}
};
// ********************************************************************************************* //
// Server
var serverScope = {};
function loadServer()
{
// If Firebug is running in server mode, load the server module
// and skip the UI overlays.
var prefDomain = "extensions.firebug";
var serverMode = PrefLoader.getPref(prefDomain, "serverMode");
try
{
if (serverMode)
{
var event =
{
notify: function(timer)
{
Services.scriptloader.loadSubScript(
"chrome://firebug/content/server/main.js",
serverScope);
}
}
// xxxHonza: hack, must be removed.
var timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
timer.initWithCallback(event, 2000, Ci.nsITimer.TYPE_ONE_SHOT);
}
}
catch (e)
{
Cu.reportError(e);
}
return serverMode;
}
function unloadServer()
{
if (serverScope.FirebugServer)
serverScope.FirebugServer.shutdown();
}
// ********************************************************************************************* //
|