add: jsd.enumerateContexts( {enumerateContext: function(jscontext) { var global = jscontext.globalObject.getWrappedValue(); ddd("jsIContext tag:"+jscontext.tag+(jscontext.isValid?" - isValid\n":" - NOT valid\n"));  if (global) { var document = global.document; if (document) { ddd("global document.location: "+document.location+"\n"); } else ddd("global without document\n"); ddd("global type: "+typeof(global)+"\n"); } else ddd("no global object\n");  ddd("\n"); try { if (jscontext.privateData) { dumpProperties("jscontext.privateData", jscontext.privateData); dumpInterfaces("jscontext.privateData", jscontext.privateData); }  } catch(e) { ddd("jscontext dump FAILED "+e+"\n"); } /* * jsdIContext has jsdIEphemeral, nsISupports, jsdIContext * jsdIContext.wrappedContext has nsISupports and nsITimerCallback, nothing interesting * jsdIContext.JSContext is undefined */ /* var nsITimerCallback = Components.interfaces["nsITimerCallback"]; if (context instanceof nsITimerCallback) { var asTimer = context.QueryInterface(nsITimerCallback); dumpProperties(nsITimerCallback, asTimer ); } ddd("\n\n");*/ }}); 
context:     dumpScriptInfo: function()    {        for (url in this.scriptInfoArrayByURL)        {            if (isFilteredURL(url)) continue;            var scriptInfos = this.scriptInfoArrayByURL[url];            for (var i = 0; i < scriptInfos.length; i++)            {                ddd(i+"/"+scriptInfos.length+": "+formatScriptInfo(scriptInfos[i])+"\n");            }        }    },
meta: 7450	/local1/tlutelli/issta_data/temp/all_js/javascript/2007_temp/2007/7450/343c75165a613983188af73b9576a947e664ad23/firebug-service.js/clean/extension/components/firebug-service.js