From 85b23a0761fffc0d9ec2398e489e40732986218a Mon Sep 17 00:00:00 2001 From: "rginda%netscape.com" Date: Mon, 21 Apr 2003 23:55:12 +0000 Subject: [PATCH] nly - landing venkman 0.9.60 add x-jsd:debugger url handler to launch venkman. Useful to start venkman from feonix. convert some of the 81 column files to 80 column. Show disabled scripts (and files that contian them) in red italics in the Loaded Scripts view. Fix some issues with step over. Requres the latest js engine fixes from bug 202177 to be completely effective. add default window flags value for the /open-dialog command. fix xml charset detection. Use Math.floor instead of parseInt. remove the "paint-hack" hack. remove ":" from the list of illegal url characters. unmark the stop line before setting a new one, to avoid the case where you see two yellow indicators in a single file. add complete, selectable url below the source window in the source2 view. e clean up after bug 127589. --- extensions/venkman/js/venkman-service.js | 105 +++++- .../venkman/resources/content/tests/tree.js | 4 +- .../venkman/resources/content/tree-utils.js | 7 +- .../resources/content/venkman-commands.js | 322 ++++++++++-------- .../resources/content/venkman-debugger.js | 67 +++- .../resources/content/venkman-menus.xul | 2 + .../resources/content/venkman-records.js | 54 ++- .../resources/content/venkman-static.js | 21 +- .../resources/content/venkman-utils.js | 12 +- .../resources/content/venkman-views.js | 120 +++---- .../resources/content/venkman-views.xul | 9 +- .../resources/locale/en-US/venkman.properties | 12 +- extensions/venkman/resources/skin/venkman.css | 12 + 13 files changed, 496 insertions(+), 251 deletions(-) diff --git a/extensions/venkman/js/venkman-service.js b/extensions/venkman/js/venkman-service.js index 784256da6dc0..5d7381d40885 100644 --- a/extensions/venkman/js/venkman-service.js +++ b/extensions/venkman/js/venkman-service.js @@ -42,17 +42,25 @@ const JSDPROT_HANDLER_CTRID = "@mozilla.org/network/protocol;1?name=x-jsd"; const JSDPROT_HANDLER_CID = Components.ID("{12ec790d-304e-4525-89a9-3e723d489d14}"); +const JSDCNT_HANDLER_CTRID = + "@mozilla.org/uriloader/content-handler;1?type=x-application-jsd"; +const JSDCNT_HANDLER_CID = + Components.ID("{306670f0-47bb-466b-b53b-613235623bbd}"); /* components used by this file */ const CATMAN_CTRID = "@mozilla.org/categorymanager;1"; const STRING_STREAM_CTRID = "@mozilla.org/io/string-input-stream;1"; const MEDIATOR_CTRID = "@mozilla.org/appshell/window-mediator;1"; +const ASS_CONTRACTID = + "@mozilla.org/appshell/appShellService;1"; const SIMPLEURI_CTRID = "@mozilla.org/network/simple-uri;1"; const nsIWindowMediator = Components.interfaces.nsIWindowMediator; +const nsIAppShellService = Components.interfaces.nsIAppShellService; const nsICmdLineHandler = Components.interfaces.nsICmdLineHandler; const nsICategoryManager = Components.interfaces.nsICategoryManager; +const nsIContentHandler = Components.interfaces.nsIContentHandler; const nsIProtocolHandler = Components.interfaces.nsIProtocolHandler; const nsIURI = Components.interfaces.nsIURI; const nsIURL = Components.interfaces.nsIURL; @@ -284,13 +292,22 @@ function jsdch_aopen (streamListener, context) { this.streamListener = streamListener; this.context = context; - if (this.loadGroup) - this.loadGroup.addRequest (this, null); - + + if (!window && this.URI.spec == "x-jsd:debugger") + { + this.contentType = "x-application-jsd"; + this.contentLength = 0; + streamListener.onStartRequest(this, context); + return; + } + var window = findDebuggerWindow(); var ary = this.URI.spec.match (/x-jsd:([^:]+)/); var exception; - + + if (this.loadGroup) + this.loadGroup.addRequest (this, null); + if (window && "console" in window && ary) { try @@ -303,7 +320,7 @@ function jsdch_aopen (streamListener, context) exception = ex; } } - + var str = "ErrorCould not load <" + safeHTML(this.URI.spec) + ">
"; @@ -384,6 +401,73 @@ function jsdch_notimpl () /*****************************************************************************/ +/* x-application-jsd content handler */ +function JSDContentHandler () +{} + +JSDContentHandler.prototype.QueryInterface = +function jsdh_qi(iid) +{ + if (!iid.equals(nsIContentHandler) && !iid.equals(nsISupports)) + throw Components.results.NS_ERROR_NO_INTERFACE; + + return this; +} + +JSDContentHandler.prototype.handleContent = +function jsdh_handle(contentType, command, windowTarget, request) +{ + var e; + var channel = request.QueryInterface(nsIChannel); + + // prevent someone from invoking the debugger remotely by serving + // up any old file with the x-application-jsd content type. + if (channel.URI.spec != "x-jsd:debugger") + { + debug ("Not handling content from unknown location ``" + + channel.URI.spec + "''"); + return; + } + + var window = findDebuggerWindow() + + if (window) + { + window.focus(); + } + else + { + var ass = + Components.classes[ASS_CONTRACTID].getService(nsIAppShellService); + window = ass.hiddenDOMWindow; + + var args = new Object(); + args.url = channel.URI.spec; + + window.openDialog("chrome://venkman/content/venkman.xul", "_blank", + "chrome,menubar,toolbar,resizable,dialog=no", args); + } +} + +/*****************************************************************************/ + +/* content handler factory object (IRCContentHandler) */ +var JSDContentHandlerFactory = new Object(); + +JSDContentHandlerFactory.createInstance = +function jsdhf_create(outer, iid) +{ + if (outer != null) + throw Components.results.NS_ERROR_NO_AGGREGATION; + + if (!iid.equals(nsIContentHandler) && !iid.equals(nsISupports)) + throw Components.results.NS_ERROR_INVALID_ARG; + + return new JSDContentHandler(); +} + +/*****************************************************************************/ + var Module = new Object(); Module.registerSelf = @@ -413,6 +497,14 @@ function (compMgr, fileSpec, location, type) fileSpec, location, type); + + debug("*** Registering x-application-jsd content handler.\n"); + compMgr.registerFactoryLocation(JSDCNT_HANDLER_CID, + "x-application-jsd content handler", + JSDCNT_HANDLER_CTRID, + fileSpec, + location, + type); try { const JSD_CTRID = "@mozilla.org/js/jsd/debugger-service;1"; @@ -445,6 +537,9 @@ function (compMgr, cid, iid) { if (cid.equals(JSDPROT_HANDLER_CID)) return JSDProtocolHandlerFactory; + + if (cid.equals(JSDCNT_HANDLER_CID)) + return JSDContentHandlerFactory; if (!iid.equals(Components.interfaces.nsIFactory)) throw Components.results.NS_ERROR_NOT_IMPLEMENTED; diff --git a/extensions/venkman/resources/content/tests/tree.js b/extensions/venkman/resources/content/tests/tree.js index 1d1f7ba648ec..fb3c00f89fdb 100644 --- a/extensions/venkman/resources/content/tests/tree.js +++ b/extensions/venkman/resources/content/tests/tree.js @@ -185,10 +185,12 @@ var guessThis = function () { var x = 1; + switchTest(); + observer.onFoo(); } var observer = { - onFoo: function (){} + onFoo: function (){ returnSomething(); } } function switchTest () diff --git a/extensions/venkman/resources/content/tree-utils.js b/extensions/venkman/resources/content/tree-utils.js index 1a9b81750f30..1dd0cbecfbce 100644 --- a/extensions/venkman/resources/content/tree-utils.js +++ b/extensions/venkman/resources/content/tree-utils.js @@ -1342,8 +1342,13 @@ function xtv_isseparator (index) XULTreeView.prototype.getParentIndex = function xtv_getpi (index) { + if (index < 0) + return -1; + var row = this.childData.locateChildByVisualRow (index); - //ASSERT(row, "bogus row " + index); + //if (!ASSERT(row, "bogus row " + index)) + // return -1; + var rv = row.parentRecord.calculateVisualRow(); //dd ("getParentIndex: row " + index + " returning " + rv); return (rv != null) ? rv : -1; diff --git a/extensions/venkman/resources/content/venkman-commands.js b/extensions/venkman/resources/content/venkman-commands.js index 06857328ed3a..b358303bd7e1 100644 --- a/extensions/venkman/resources/content/venkman-commands.js +++ b/extensions/venkman/resources/content/venkman-commands.js @@ -44,134 +44,134 @@ function initCommands() var cmdary = [/* "real" commands */ - ["about-mozilla", cmdAboutMozilla, 0], - ["break", cmdBreak, CMD_CONSOLE], - ["break-props", cmdBreakProps, CMD_CONSOLE], - ["change-value", cmdChangeValue, 0], - ["chrome-filter", cmdChromeFilter, CMD_CONSOLE], - ["clear", cmdClear, CMD_CONSOLE], - ["clear-all", cmdClearAll, CMD_CONSOLE], - ["clear-break", cmdClearBreak, 0], - ["clear-fbreak", cmdClearFBreak, 0], - ["clear-profile", cmdClearProfile, CMD_CONSOLE], - ["clear-script", cmdClearScript, 0], - ["clear-instance", cmdClearInstance, 0], - ["close", cmdClose, CMD_CONSOLE], - ["commands", cmdCommands, CMD_CONSOLE], - ["cont", cmdCont, CMD_CONSOLE | CMD_NEED_STACK], - ["debug-script", cmdSetScriptFlag, 0], - ["debug-instance-on", cmdToggleSomething, 0], - ["debug-instance-off", cmdToggleSomething, 0], - ["debug-instance", cmdSetScriptFlag, 0], - ["debug-transient", cmdSetTransientFlag, 0], - ["emode", cmdEMode, CMD_CONSOLE], - ["eval", cmdEval, CMD_CONSOLE], - ["evald", cmdEvald, CMD_CONSOLE], - ["fbreak", cmdFBreak, CMD_CONSOLE], - ["set-eval-obj", cmdSetEvalObj, 0], - ["set-fbreak", cmdFBreak, 0], - ["fclear", cmdFClear, CMD_CONSOLE], - ["fclear-all", cmdFClearAll, CMD_CONSOLE], - ["find-bp", cmdFindBp, 0], - ["find-creator", cmdFindCreatorOrCtor, 0], - ["find-ctor", cmdFindCreatorOrCtor, 0], - ["find-file", cmdFindFile, CMD_CONSOLE], - ["find-frame", cmdFindFrame, CMD_NEED_STACK], - ["find-sourcetext", cmdFindSourceText, 0], - ["find-sourcetext-soft", cmdFindSourceText, 0], - ["find-script", cmdFindScript, 0], - ["find-scriptinstance", cmdFindScriptInstance, 0], - ["find-url", cmdFindURL, CMD_CONSOLE], - ["find-url-soft", cmdFindURL, 0], - ["finish", cmdFinish, CMD_CONSOLE | CMD_NEED_STACK], - ["focus-input", cmdHook, 0], - ["frame", cmdFrame, CMD_CONSOLE | CMD_NEED_STACK], - ["gc", cmdGC, CMD_CONSOLE], - ["help", cmdHelp, CMD_CONSOLE], - ["loadd", cmdLoadd, CMD_CONSOLE], - ["move-view", cmdMoveView, CMD_CONSOLE], + ["about-mozilla", cmdAboutMozilla, 0], + ["break", cmdBreak, CMD_CONSOLE], + ["break-props", cmdBreakProps, CMD_CONSOLE], + ["change-value", cmdChangeValue, 0], + ["chrome-filter", cmdChromeFilter, CMD_CONSOLE], + ["clear", cmdClear, CMD_CONSOLE], + ["clear-all", cmdClearAll, CMD_CONSOLE], + ["clear-break", cmdClearBreak, 0], + ["clear-fbreak", cmdClearFBreak, 0], + ["clear-profile", cmdClearProfile, CMD_CONSOLE], + ["clear-script", cmdClearScript, 0], + ["clear-instance", cmdClearInstance, 0], + ["close", cmdClose, CMD_CONSOLE], + ["commands", cmdCommands, CMD_CONSOLE], + ["cont", cmdCont, CMD_CONSOLE | CMD_NEED_STACK], + ["debug-script", cmdSetScriptFlag, 0], + ["debug-instance-on", cmdToggleSomething, 0], + ["debug-instance-off", cmdToggleSomething, 0], + ["debug-instance", cmdSetScriptFlag, 0], + ["debug-transient", cmdSetTransientFlag, 0], + ["emode", cmdEMode, CMD_CONSOLE], + ["eval", cmdEval, CMD_CONSOLE], + ["evald", cmdEvald, CMD_CONSOLE], + ["fbreak", cmdFBreak, CMD_CONSOLE], + ["set-eval-obj", cmdSetEvalObj, 0], + ["set-fbreak", cmdFBreak, 0], + ["fclear", cmdFClear, CMD_CONSOLE], + ["fclear-all", cmdFClearAll, CMD_CONSOLE], + ["find-bp", cmdFindBp, 0], + ["find-creator", cmdFindCreatorOrCtor, 0], + ["find-ctor", cmdFindCreatorOrCtor, 0], + ["find-file", cmdFindFile, CMD_CONSOLE], + ["find-frame", cmdFindFrame, CMD_NEED_STACK], + ["find-sourcetext", cmdFindSourceText, 0], + ["find-sourcetext-soft", cmdFindSourceText, 0], + ["find-script", cmdFindScript, 0], + ["find-scriptinstance", cmdFindScriptInstance, 0], + ["find-url", cmdFindURL, CMD_CONSOLE], + ["find-url-soft", cmdFindURL, 0], + ["finish", cmdFinish, CMD_CONSOLE | CMD_NEED_STACK], + ["focus-input", cmdHook, 0], + ["frame", cmdFrame, CMD_CONSOLE | CMD_NEED_STACK], + ["gc", cmdGC, CMD_CONSOLE], + ["help", cmdHelp, CMD_CONSOLE], + ["loadd", cmdLoadd, CMD_CONSOLE], + ["move-view", cmdMoveView, CMD_CONSOLE], ["mozilla-help", cmdMozillaHelp, 0], - ["next", cmdNext, CMD_CONSOLE | CMD_NEED_STACK], - ["open-dialog", cmdOpenDialog, CMD_CONSOLE], - ["open-url", cmdOpenURL, 0], - ["pprint", cmdPPrint, CMD_CONSOLE], - ["pref", cmdPref, CMD_CONSOLE], - ["profile", cmdProfile, CMD_CONSOLE], - ["profile-script", cmdSetScriptFlag, 0], - ["profile-instance", cmdSetScriptFlag, 0], - ["profile-instance-on", cmdSetScriptFlag, 0], - ["profile-instance-off", cmdSetScriptFlag, 0], - ["props", cmdProps, CMD_CONSOLE], - ["propsd", cmdProps, CMD_CONSOLE], - ["quit", cmdQuit, CMD_CONSOLE], - ["restore-layout", cmdRestoreLayout, CMD_CONSOLE], - ["restore-settings", cmdRestoreSettings, CMD_CONSOLE], - ["release-notes", cmdReleaseNotes, 0], - ["run-to", cmdRunTo, CMD_NEED_STACK], - ["save-breakpoints", cmdSaveBreakpoints, CMD_CONSOLE], - ["save-layout", cmdSaveLayout, CMD_CONSOLE], - ["save-profile", cmdSaveProfile, CMD_CONSOLE], - ["save-settings", cmdSaveSettings, CMD_CONSOLE], - ["scan-source", cmdScanSource, 0], - ["scope", cmdScope, CMD_CONSOLE | CMD_NEED_STACK], - ["this-expr", cmdThisExpr, CMD_CONSOLE], - ["toggle-float", cmdToggleFloat, CMD_CONSOLE], - ["toggle-view", cmdToggleView, CMD_CONSOLE], - ["toggle-pref", cmdTogglePref, CMD_CONSOLE], - ["startup-init", cmdStartupInit, CMD_CONSOLE], - ["step", cmdStep, CMD_CONSOLE | CMD_NEED_STACK], - ["stop", cmdStop, CMD_CONSOLE | CMD_NO_STACK], - ["tmode", cmdTMode, CMD_CONSOLE], - ["version", cmdVersion, CMD_CONSOLE], - ["where", cmdWhere, CMD_CONSOLE | CMD_NEED_STACK], + ["next", cmdNext, CMD_CONSOLE | CMD_NEED_STACK], + ["open-dialog", cmdOpenDialog, CMD_CONSOLE], + ["open-url", cmdOpenURL, 0], + ["pprint", cmdPPrint, CMD_CONSOLE], + ["pref", cmdPref, CMD_CONSOLE], + ["profile", cmdProfile, CMD_CONSOLE], + ["profile-script", cmdSetScriptFlag, 0], + ["profile-instance", cmdSetScriptFlag, 0], + ["profile-instance-on", cmdSetScriptFlag, 0], + ["profile-instance-off", cmdSetScriptFlag, 0], + ["props", cmdProps, CMD_CONSOLE], + ["propsd", cmdProps, CMD_CONSOLE], + ["quit", cmdQuit, CMD_CONSOLE], + ["restore-layout", cmdRestoreLayout, CMD_CONSOLE], + ["restore-settings", cmdRestoreSettings, CMD_CONSOLE], + ["release-notes", cmdReleaseNotes, 0], + ["run-to", cmdRunTo, CMD_NEED_STACK], + ["save-breakpoints", cmdSaveBreakpoints, CMD_CONSOLE], + ["save-layout", cmdSaveLayout, CMD_CONSOLE], + ["save-profile", cmdSaveProfile, CMD_CONSOLE], + ["save-settings", cmdSaveSettings, CMD_CONSOLE], + ["scan-source", cmdScanSource, 0], + ["scope", cmdScope, CMD_CONSOLE | CMD_NEED_STACK], + ["this-expr", cmdThisExpr, CMD_CONSOLE], + ["toggle-float", cmdToggleFloat, CMD_CONSOLE], + ["toggle-view", cmdToggleView, CMD_CONSOLE], + ["toggle-pref", cmdTogglePref, CMD_CONSOLE], + ["startup-init", cmdStartupInit, CMD_CONSOLE], + ["step", cmdStep, CMD_CONSOLE | CMD_NEED_STACK], + ["stop", cmdStop, CMD_CONSOLE | CMD_NO_STACK], + ["tmode", cmdTMode, CMD_CONSOLE], + ["version", cmdVersion, CMD_CONSOLE], + ["where", cmdWhere, CMD_CONSOLE | CMD_NEED_STACK], /* aliases */ - ["exit", "quit", 0], - ["save-default-layout", "save-layout default", 0], - ["profile-tb", "profile toggle", 0], - ["this", "props this", CMD_CONSOLE], - ["toggle-chrome", "chrome-filter toggle", 0], - ["toggle-ias", "startup-init toggle", 0], - ["toggle-pprint", "pprint toggle", 0], - ["toggle-profile", "profile toggle", 0], - ["toggle-save-layout", "toggle-pref saveLayoutOnExit", 0], - ["toggle-save-settings", "toggle-pref saveSettingsOnExit", 0], - ["em-cycle", "emode cycle", 0], - ["em-ignore", "emode ignore", 0], - ["em-trace", "emode trace", 0], - ["em-break", "emode break", 0], - ["tm-cycle", "tmode cycle", 0], - ["tm-ignore", "tmode ignore", 0], - ["tm-trace", "tmode trace", 0], - ["tm-break", "tmode break", 0], + ["exit", "quit", 0], + ["save-default-layout", "save-layout default", 0], + ["profile-tb", "profile toggle", 0], + ["this", "props this", CMD_CONSOLE], + ["toggle-chrome", "chrome-filter toggle", 0], + ["toggle-ias", "startup-init toggle", 0], + ["toggle-pprint", "pprint toggle", 0], + ["toggle-profile", "profile toggle", 0], + ["toggle-save-layout", "toggle-pref saveLayoutOnExit", 0], + ["toggle-save-settings", "toggle-pref saveSettingsOnExit", 0], + ["em-cycle", "emode cycle", 0], + ["em-ignore", "emode ignore", 0], + ["em-trace", "emode trace", 0], + ["em-break", "emode break", 0], + ["tm-cycle", "tmode cycle", 0], + ["tm-ignore", "tmode ignore", 0], + ["tm-trace", "tmode trace", 0], + ["tm-break", "tmode break", 0], /* hooks */ - ["hook-break-set", cmdHook, 0], - ["hook-break-clear", cmdHook, 0], - ["hook-debug-stop", cmdHook, 0], - ["hook-debug-continue", cmdHook, 0], - ["hook-display-sourcetext", cmdHook, 0], - ["hook-display-sourcetext-soft", cmdHook, 0], - ["hook-eval-done", cmdHook, 0], - ["hook-fbreak-clear", cmdHook, 0], - ["hook-fbreak-set", cmdHook, 0], - ["hook-guess-complete", cmdHook, 0], - ["hook-transient-script", cmdHook, 0], - ["hook-script-manager-created", cmdHook, 0], - ["hook-script-manager-destroyed", cmdHook, 0], - ["hook-script-instance-created", cmdHook, 0], - ["hook-script-instance-sealed", cmdHook, 0], - ["hook-script-instance-destroyed", cmdHook, 0], - ["hook-session-display", cmdHook, 0], - ["hook-source-load-complete", cmdHook, 0], - ["hook-window-closed", cmdHook, 0], - ["hook-window-loaded", cmdHook, 0], - ["hook-window-opened", cmdHook, 0], - ["hook-window-resized", cmdHook, 0], - ["hook-window-unloaded", cmdHook, 0], - ["hook-venkman-exit", cmdHook, 0], - ["hook-venkman-query-exit", cmdHook, 0], - ["hook-venkman-started", cmdHook, 0] + ["hook-break-set", cmdHook, 0], + ["hook-break-clear", cmdHook, 0], + ["hook-debug-stop", cmdHook, 0], + ["hook-debug-continue", cmdHook, 0], + ["hook-display-sourcetext", cmdHook, 0], + ["hook-display-sourcetext-soft", cmdHook, 0], + ["hook-eval-done", cmdHook, 0], + ["hook-fbreak-clear", cmdHook, 0], + ["hook-fbreak-set", cmdHook, 0], + ["hook-guess-complete", cmdHook, 0], + ["hook-transient-script", cmdHook, 0], + ["hook-script-manager-created", cmdHook, 0], + ["hook-script-manager-destroyed", cmdHook, 0], + ["hook-script-instance-created", cmdHook, 0], + ["hook-script-instance-sealed", cmdHook, 0], + ["hook-script-instance-destroyed", cmdHook, 0], + ["hook-session-display", cmdHook, 0], + ["hook-source-load-complete", cmdHook, 0], + ["hook-window-closed", cmdHook, 0], + ["hook-window-loaded", cmdHook, 0], + ["hook-window-opened", cmdHook, 0], + ["hook-window-resized", cmdHook, 0], + ["hook-window-unloaded", cmdHook, 0], + ["hook-venkman-exit", cmdHook, 0], + ["hook-venkman-query-exit", cmdHook, 0], + ["hook-venkman-started", cmdHook, 0] ]; cmdary.stringBundle = console.defaultBundle; @@ -179,7 +179,8 @@ function initCommands() console.commandManager.argTypes.__aliasTypes__ (["index", "breakpointIndex", "lineNumber"], "int"); - console.commandManager.argTypes.__aliasTypes__ (["windowFlags", "expression", + console.commandManager.argTypes.__aliasTypes__ (["windowFlags", + "expression", "prefValue"], "rest"); @@ -212,9 +213,9 @@ function getToggle (toggle, currentState) return toggle; } -/******************************************************************************** +/******************************************************************************* * Command implementations from here on down... - *******************************************************************************/ + ******************************************************************************/ function cmdAboutMozilla () { @@ -272,7 +273,8 @@ function cmdBreak (e) lineNumber: e.lineNumber, props: props}); fbreak = getFutureBreakpoint(url, e.lineNumber); - props = null; // hard breakpoint properties will be inherited + // hard breakpoint properties will be inherited + props = null; } console.scriptManagers[url].setBreakpoint (e.lineNumber, fbreak, @@ -365,6 +367,8 @@ function cmdChromeFilter (e) if (!scriptWrapper.jsdScript.isValid) return; + var lastDebugState = scriptWrapper.jsdScript.flags & SCRIPT_NODEBUG; + if (e.toggle) { scriptWrapper.lastFlags = scriptWrapper.jsdScript.flags; @@ -386,6 +390,20 @@ function cmdChromeFilter (e) scriptWrapper.jsdScript.flags &= ~(FLAGS); } } + + if (lastDebugState != scriptWrapper.jsdScript.flags & SCRIPT_NODEBUG) + { + if (lastDebugState) + { + // went from on to off + --scriptWrapper.scriptInstance.disabledScripts; + } + else + { + // went from off to on + ++scriptWrapper.scriptInstance.disabledScripts; + } + } }; var currentState = console.prefs["enableChromeFilter"]; @@ -813,7 +831,7 @@ function cmdFinish (e) if (console.frames.length == 1) return cmdCont(); - console._stepOverLevel = 1; + console._stepOverDepth = console.frames.length - 1; setStopState(false); console.jsds.functionHook = console.callHook; disableDebugCommands() @@ -1075,7 +1093,8 @@ function cmdFrame (e) { if (e.frameIndex < 0 || e.frameIndex >= console.frames.length) { - display (getMsg(MSN_ERR_INVALID_PARAM, ["frameIndex", e.frameIndex]), + display (getMsg(MSN_ERR_INVALID_PARAM, + ["frameIndex", e.frameIndex]), MT_ERROR); return false; } @@ -1188,12 +1207,14 @@ function cmdMoveView (e) function cmdMozillaHelp () { - toOpenWindowByType('mozilla:help', 'chrome://help/content/help.xul'); + openHelp(); } function cmdNext () { - console._stepOverLevel = 0; + // we don't setStopState(false) here because if the line we're at + // doesn't call out to a function, /next is the same as /step. + console._stepOverDepth = console.frames.length; dispatch ("step"); console.jsds.functionHook = console.callHook; return; @@ -1201,6 +1222,9 @@ function cmdNext () function cmdOpenDialog (e) { + if (!e.windowFlags) + e.windowFlags = "chrome,menubar,toolbar,resizable,dialog=no"; + return openDialog (e.url, e.windowName, e.windowFlags); } @@ -1732,35 +1756,45 @@ function cmdSetEvalObj (e) function cmdSetScriptFlag (e) { - function setFlag (jsdScript) + function setFlag (scriptWrapper) { + var jsdScript = scriptWrapper.jsdScript; + if (!jsdScript.isValid) return; if (e.toggle == "toggle") { - if (jsdScript.flags & flag) - jsdScript.flags &= ~flag; - else - jsdScript.flags |= flag; + jsdScript.flags ^= flag; + if (flag == SCRIPT_NODEBUG) + { + if (jsdScript.flags & flag) + ++scriptWrapper.scriptInstance.disabledScripts; + else + --scriptWrapper.scriptInstance.disabledScripts; + } } else if (e.toggle) { jsdScript.flags |= flag; + if (flag == SCRIPT_NODEBUG) + ++scriptWrapper.scriptInstance.disabledScripts; } else { jsdScript.flags &= ~flag; - } + if (flag == SCRIPT_NODEBUG) + --scriptWrapper.scriptInstance.disabledScripts; + } }; function setFlagInstance (scriptInstance) { if (scriptInstance.topLevel) - setFlag (scriptInstance.topLevel.jsdScript); + setFlag (scriptInstance.topLevel); for (var f in scriptInstance.functions) - setFlag (scriptInstance.functions[f].jsdScript); + setFlag (scriptInstance.functions[f]); }; var flag; @@ -1776,11 +1810,11 @@ function cmdSetScriptFlag (e) if ("scriptWrapperList" in e) { for (i = 0; i < e.scriptWrapperList.length; ++i) - setFlag(e.scriptWrapperList[i].jsdScript); + setFlag(e.scriptWrapperList[i]); } else { - setFlag(e.scriptWrapper.jsdScript); + setFlag(e.scriptWrapper); } } else @@ -1841,7 +1875,8 @@ function cmdStep() { setStopState(true); var topFrame = console.frames[0]; - console._stepPast = topFrame.script.fileName; + console._stepPast = console.frames.length + topFrame.script.fileName; + if (console.prefs["prettyprint"]) { console._stepPast += @@ -1927,7 +1962,8 @@ function cmdTMode (e) function cmdToggleFloat (e) { - if (!e.viewId in console.views || typeof console.views[e.viewId] != "object") + if (!e.viewId in console.views || + typeof console.views[e.viewId] != "object") { display (getMsg(MSN_ERR_NO_SUCH_VIEW, e.viewId), MT_ERROR); return; diff --git a/extensions/venkman/resources/content/venkman-debugger.js b/extensions/venkman/resources/content/venkman-debugger.js index 5d871ee61635..b03b9e90968a 100644 --- a/extensions/venkman/resources/content/venkman-debugger.js +++ b/extensions/venkman/resources/content/venkman-debugger.js @@ -221,13 +221,16 @@ function jsdScriptDestroyed (jsdScript) function jsdExecutionHook (frame, type, rv) { + //dd ("execution hook: " + formatFrame(frame)); + var hookReturn = jsdIExecutionHook.RETURN_CONTINUE; if (!console.initialized) return hookReturn; - if (!ASSERT(!("frames" in console), "Execution hook called while stopped") || + if (!ASSERT(!("frames" in console), + "Execution hook called while stopped") || frame.isNative || !ASSERT(frame.script, "Execution hook called with no script") || frame.script.fileName == MSG_VAL_CONSOLE || @@ -240,6 +243,16 @@ function jsdExecutionHook (frame, type, rv) return hookReturn; } + var frames = new Array(); + var prevFrame = frame; + var hasDisabledFrame = false; + + while (prevFrame) + { + frames.push(prevFrame); + prevFrame = prevFrame.callingFrame; + } + var targetWindow = null; var wasModal = false; var cx; @@ -276,7 +289,7 @@ function jsdExecutionHook (frame, type, rv) try { //dd ("debug trap " + formatFrame(frame)); - hookReturn = debugTrap(frame, type, rv); + hookReturn = debugTrap(frames, type, rv); //dd ("debug trap returned " + hookReturn); } catch (ex) @@ -310,18 +323,34 @@ function jsdCallHook (frame, type) if (type == jsdICallHook.TYPE_FUNCTION_CALL) { setStopState(false); - ++console._stepOverLevel; + //dd ("Calling: " + frame.functionName); } else if (type == jsdICallHook.TYPE_FUNCTION_RETURN) { - if (--console._stepOverLevel <= 0) + // we're called *before* the returning frame is popped from the + // stack, so we want our depth calculation to be off by one. + var depth = -1; + var prevFrame = frame; + + while (prevFrame) { + depth++; + prevFrame = prevFrame.callingFrame; + } + + + //dd ("Returning: " + frame.functionName + + // ", target depth: " + console._stepOverDepth + + // ", current depth: " + depth); + + if (depth <= console._stepOverDepth) + { + //dd ("step over at target depth of " + depth); setStopState(true); console.jsds.functionHook = null; + delete console._stepOverDepth; } } - //dd ("Call Hook: " + frame.functionName + ", type " + - // type + " callCount: " + console._stepOverLevel); } function jsdErrorHook (message, fileName, line, pos, flags, exception) @@ -565,6 +594,7 @@ function ScriptInstance (manager) this.isSealed = false; this.scriptCount = 0; this.breakpointCount = 0; + this.disabledScripts = 0; this._lineMap = new Array(); this._lineMapInited = false; } @@ -626,6 +656,7 @@ function si_seal () if (isURLFiltered(this.url)) { + this.disabledScripts = 1; var nada = SCRIPT_NODEBUG | SCRIPT_NOPROFILE; if (this.topLevel && this.topLevel.isValid) this.topLevel.jsdScript.flags |= nada; @@ -634,6 +665,7 @@ function si_seal () { if (this.functions[f].jsdScript.isValid) this.functions[f].jsdScript.flags |= nada; + ++this.disabledScripts; } } @@ -1454,11 +1486,15 @@ const TMODE_IGNORE = 0; const TMODE_TRACE = 1; const TMODE_BREAK = 2; -function debugTrap (frame, type, rv) +function debugTrap (frames, type, rv) { var tn = ""; var retcode = jsdIExecutionHook.RETURN_CONTINUE; + //dd ("debugTrap"); + + var frame = frames[0]; + $ = new Array(); switch (type) @@ -1493,21 +1529,27 @@ function debugTrap (frame, type, rv) tn = MSG_VAL_THROW; break; case jsdIExecutionHook.TYPE_INTERRUPTED: + if (!frame.script.functionName && isURLFiltered(frame.script.fileName)) { - dd ("filtered url: " + frame.script.fileName); + //dd ("filtered url: " + frame.script.fileName); frame.script.flags |= SCRIPT_NOPROFILE | SCRIPT_NODEBUG; return retcode; } - + var line; if (console.prefs["prettyprint"]) line = frame.script.pcToLine (frame.pc, PCMAP_PRETTYPRINT); else line = frame.line; - if (console._stepPast == frame.script.fileName + line) + if (console._stepPast == + frames.length + frame.script.fileName + line) + { + //dd("stepPast: " + console._stepPast); return retcode; + } + delete console._stepPast; setStopState(false); break; @@ -1524,10 +1566,7 @@ function debugTrap (frame, type, rv) display (getMsg(MSN_STOP, tn), MT_STOP); /* build an array of frames */ - console.frames = new Array(frame); - - while ((frame = frame.callingFrame)) - console.frames.push(frame); + console.frames = frames; console.trapType = type; diff --git a/extensions/venkman/resources/content/venkman-menus.xul b/extensions/venkman/resources/content/venkman-menus.xul index 3f28726cebb6..d3b86fdb7bb3 100644 --- a/extensions/venkman/resources/content/venkman-menus.xul +++ b/extensions/venkman/resources/content/venkman-menus.xul @@ -135,8 +135,10 @@ + diff --git a/extensions/venkman/resources/content/venkman-records.js b/extensions/venkman/resources/content/venkman-records.js index 4946befa5066..6050c237b233 100644 --- a/extensions/venkman/resources/content/venkman-records.js +++ b/extensions/venkman/resources/content/venkman-records.js @@ -37,12 +37,12 @@ function initRecords() { var cmdary = [/* "real" commands */ - ["show-functions", cmdShowFunctions, CMD_CONSOLE], - ["show-ecmas", cmdShowECMAs, CMD_CONSOLE], + ["show-functions", cmdShowFunctions, CMD_CONSOLE], + ["show-ecmas", cmdShowECMAs, CMD_CONSOLE], /* aliases */ - ["toggle-functions", "show-functions toggle", 0], - ["toggle-ecmas", "show-ecma toggle", 0] + ["toggle-functions", "show-functions toggle", 0], + ["toggle-ecmas", "show-ecma toggle", 0] ]; console.commandManager.defineCommands (cmdary); @@ -58,6 +58,18 @@ function initRecords() FrameRecord.prototype.property = atomsvc.getAtom("item-frame"); FrameRecord.prototype.atomCurrent = atomsvc.getAtom("current-frame-flag"); + ScriptInstanceRecord.prototype.atomUnknown = atomsvc.getAtom("item-unk"); + ScriptInstanceRecord.prototype.atomHTML = atomsvc.getAtom("item-html"); + ScriptInstanceRecord.prototype.atomJS = atomsvc.getAtom("item-js"); + ScriptInstanceRecord.prototype.atomXUL = atomsvc.getAtom("item-xul"); + ScriptInstanceRecord.prototype.atomXML = atomsvc.getAtom("item-xml"); + ScriptInstanceRecord.prototype.atomDisabled = + atomsvc.getAtom("script-disabled"); + + ScriptRecord.prototype.atomFunction = atomsvc.getAtom("file-function"); + ScriptRecord.prototype.atomBreakpoint = atomsvc.getAtom("item-has-bp"); + ScriptRecord.prototype.atomDisabled = atomsvc.getAtom("script-disabled"); + var prefs = [ ["valueRecord.showFunctions", false], @@ -310,7 +322,7 @@ function ScriptInstanceRecord(scriptInstance) this.reserveChildren(true); this.url = scriptInstance.url; var sv = console.views.scripts; - this.fileType = sv.atomUnknown; + this.fileType = this.atomUnknown; this.shortName = this.url; this.group = 4; this.scriptInstance = scriptInstance; @@ -324,23 +336,23 @@ function ScriptInstanceRecord(scriptInstance) switch (ary[1].toLowerCase()) { case "js": - this.fileType = sv.atomJS; + this.fileType = this.atomJS; this.group = 0; break; case "html": this.group = 1; - this.fileType = sv.atomHTML; + this.fileType = this.atomHTML; break; case "xul": this.group = 2; - this.fileType = sv.atomXUL; + this.fileType = this.atomXUL; break; case "xml": this.group = 3; - this.fileType = sv.atomXML; + this.fileType = this.atomXML; break; } } @@ -366,6 +378,15 @@ function scr_dragstart (e, transferData, dragAction) return true; } +ScriptInstanceRecord.prototype.getProperties = +function scr_getprops (properties) +{ + properties.AppendElement(this.fileType); + + if (this.scriptInstance.disabledScripts > 0) + properties.AppendElement (this.atomDisabled); +} + ScriptInstanceRecord.prototype.super_resort = XTRootRecord.prototype.resort; ScriptInstanceRecord.prototype.resort = @@ -477,6 +498,21 @@ function sr_dragstart (e, transferData, dragAction) return true; } +ScriptRecord.prototype.getProperties = +function sr_getprops (properties) +{ + properties.AppendElement (this.atomFunction); + + if (this.scriptWrapper.breakpointCount) + properties.AppendElement (this.atomBreakpoint); + + if (this.scriptWrapper.jsdScript.isValid && + this.scriptWrapper.jsdScript.flags & SCRIPT_NODEBUG) + { + properties.AppendElement (this.atomDisabled); + } +} + /******************************************************************************* * Value Record. * Use this to show a jsdIValue in any tree. diff --git a/extensions/venkman/resources/content/venkman-static.js b/extensions/venkman/resources/content/venkman-static.js index 4d92a174c0b5..2d26d88b17b0 100644 --- a/extensions/venkman/resources/content/venkman-static.js +++ b/extensions/venkman/resources/content/venkman-static.js @@ -33,7 +33,7 @@ * */ -const __vnk_version = "0.9.57"; +const __vnk_version = "0.9.60"; const __vnk_requiredLocale = "0.9.51+"; var __vnk_versionSuffix = ""; @@ -724,7 +724,7 @@ function hookDebugStop (e) enableDebugCommands(); //XXX - paintHack(); + //paintHack(); } console.hooks["hook-venkman-query-exit"] = @@ -1058,8 +1058,22 @@ function st_oncomplete (data, url, status) if (!ASSERT(data, "loadSource succeeded but got no data")) data = ""; + + var matchResult; + + // Check before split because xml declarlation may contain newline. + if (data.substring(0, 5) == "")); + matchResult = s.match(/encoding\s*=\s*([\"\'])([^\"\'\s]+)\1/i); + if (matchResult) + this.charset = matchResult[2]; + } var ary = data.split(/\r\n|\n|\r/m); + var charsetRE = + /meta\s+http-equiv\s+content-type\s+charset=([^\;\"\'\s]+)/i; + for (var i = 0; i < ary.length; ++i) { /* @@ -1070,8 +1084,7 @@ function st_oncomplete (data, url, status) ary[i] = ary[i].replace(/[\x00-\x08]|[\x0A-\x1F]/g, "?"); if (!("charset" in this)) { - var matchResult = - ary[i].match(/meta.*http-equiv.*content-type.*charset=([^\;\"]+)/i); + matchResult = ary[i].match(charsetRE); if (matchResult) this.charset = matchResult[1]; } diff --git a/extensions/venkman/resources/content/venkman-utils.js b/extensions/venkman/resources/content/venkman-utils.js index 1d4a0835f5d7..9a4d615eeb46 100644 --- a/extensions/venkman/resources/content/venkman-utils.js +++ b/extensions/venkman/resources/content/venkman-utils.js @@ -766,12 +766,12 @@ function stringTrim (s) function formatDateOffset (seconds, format) { - seconds = parseInt(seconds); - var minutes = parseInt(seconds / 60); + seconds = Math.floor(seconds); + var minutes = Math.floor(seconds / 60); seconds = seconds % 60; - var hours = parseInt(minutes / 60); + var hours = Math.floor(minutes / 60); minutes = minutes % 60; - var days = parseInt(hours / 24); + var days = Math.floor(hours / 24); hours = hours % 24; if (!format) @@ -889,7 +889,7 @@ function arrayRemoveAt (ary, i) function getRandomElement (ary) { - var i = parseInt (Math.random() * ary.length) + var i = Math.floor (Math.random() * ary.length) if (i == ary.length) i = 0; return ary[i]; @@ -930,7 +930,7 @@ function randomRange (min, max) if (typeof max == "undefined") max = 1; - var rv = (parseInt(Math.round((Math.random() * (max - min)) + min ))); + var rv = (Math.floor(Math.round((Math.random() * (max - min)) + min ))); return rv; diff --git a/extensions/venkman/resources/content/venkman-views.js b/extensions/venkman/resources/content/venkman-views.js index fc8b66131ab9..a6718e51b1dd 100644 --- a/extensions/venkman/resources/content/venkman-views.js +++ b/extensions/venkman/resources/content/venkman-views.js @@ -574,7 +574,8 @@ function lv_renit (jsdFrame) if (jsdFrame.thisValue) { - this.thisRecord = new ValueRecord (jsdFrame.thisValue, MSG_VAL_THIS, ""); + this.thisRecord = new ValueRecord (jsdFrame.thisValue, MSG_VAL_THIS, + ""); this.thisRecord.onPreRefresh = null; this.childData.appendChild(this.thisRecord); if (!state && jsdFrame.thisValue.propertyCount < @@ -820,11 +821,11 @@ function scv_init () this.cmdary = [ - ["show-most-recent", cmdShowMostRecent, CMD_CONSOLE], - ["search-scripts", cmdSearchScripts, CMD_CONSOLE], - ["toggle-scripts-search-box", cmdToggleScriptsSearchBox, CMD_CONSOLE], + ["show-most-recent", cmdShowMostRecent, CMD_CONSOLE], + ["search-scripts", cmdSearchScripts, CMD_CONSOLE], + ["toggle-scripts-search-box", cmdToggleScriptsSearchBox, CMD_CONSOLE], - ["toggle-show-most-recent", "show-most-recent toggle", 0] + ["toggle-show-most-recent", "show-most-recent toggle", 0] ]; console.menuSpecs["context:scripts"] = { @@ -882,16 +883,6 @@ function scv_init () this.childData.setSortColumn("baseLineNumber"); this.groupFiles = console.prefs["scriptsView.groupFiles"]; - - var atomsvc = console.atomService; - this.atomUnknown = atomsvc.getAtom("item-unk"); - this.atomHTML = atomsvc.getAtom("item-html"); - this.atomJS = atomsvc.getAtom("item-js"); - this.atomXUL = atomsvc.getAtom("item-xul"); - this.atomXML = atomsvc.getAtom("item-xml"); - this.atomGuessed = atomsvc.getAtom("item-guessed"); - this.atomBreakpoint = atomsvc.getAtom("item-has-bp"); - this.atomFunction = atomsvc.getAtom("file-function"); } function cmdSearchScripts (e) @@ -924,14 +915,16 @@ function cmdSearchScripts (e) if (scriptsView.currentContent) { - var textbox = getChildById(scriptsView.currentContent, "scripts-search"); + var textbox = getChildById(scriptsView.currentContent, + "scripts-search"); textbox.value = e.pattern; } } function cmdShowMostRecent (e) { - e.toggle = getToggle (e.toggle, console.prefs["scriptsView.showMostRecent"]); + e.toggle = getToggle (e.toggle, + console.prefs["scriptsView.showMostRecent"]); console.prefs["scriptsView.showMostRecent"] = e.toggle; @@ -978,7 +971,8 @@ function cmdToggleScriptsSearchBox(e) if (scriptsView.currentContent) { - var box = getChildById(scriptsView.currentContent, "scripts-search-box"); + var box = getChildById(scriptsView.currentContent, + "scripts-search-box"); if (box.hasAttribute("hidden")) box.removeAttribute("hidden"); else @@ -1136,16 +1130,12 @@ function scv_hookScriptInstanceDestroyed (e) } } -console.views.scripts.hooks["hook-window-opened"] = -function scv_hookWindowOpen (e) +console.views.scripts.hooks["debug-script"] = +console.views.scripts.hooks["debug-instance"] = +function scv_hookDebugFlagChanged (e) { - //console.views.scripts.freeze(); -} - -console.views.scripts.hooks["hook-window-loaded"] = -function scv_hookWindowOpen (e) -{ - //console.views.scripts.thaw(); + if (console.views.scripts.tree) + console.views.scripts.tree.invalidate(); } console.views.scripts.onSearchInput = @@ -1259,29 +1249,22 @@ function scv_setmode (flag) } console.views.scripts.getCellProperties = -function scv_getcprops (index, colID, properties) +function scv_cellprops (index, colID, properties) { - var row = this.childData.locateChildByVisualRow (index) + if (colID != "scripts:col-0") + return null; + + var row = this.childData.locateChildByVisualRow(index); if (row) { - if (colID == "scripts:col-0") - { - if (row instanceof ScriptInstanceRecord) - { - properties.AppendElement (row.fileType); + if ("getProperties" in row) + return row.getProperties (properties); - if (row.scriptInstance.breakpointCount) - properties.AppendElement (this.atomBreakpoint); - } - else if (row instanceof ScriptRecord) - { - properties.AppendElement (this.atomFunction); - - if (row.scriptWrapper.breakpointCount) - properties.AppendElement (this.atomBreakpoint); - } - } + if (row.property) + return properties.AppendElement (row.property); } + + return null; } console.views.scripts.getContext = @@ -1441,7 +1424,7 @@ function ss_init () this.munger.enabled = true; this.munger.addRule ("quote", /(``|'')/, insertQuote); this.munger.addRule - ("link", /((\w+):\/\/[^<>()\'\"\s:]+|www(\.[^.<>()\'\"\s:]+){2,}|x-jsd:help[\w&\?%]*)/, + ("link", /((\w+):\/\/[^<>()\'\"\s]+|www(\.[^.<>()\'\"\s]+){2,}|x-jsd:help[\w&\?%]*)/, insertLink); this.munger.addRule ("word-hyphenator", new RegExp ("(\\S{" + MAX_WORD_LEN + ",})"), @@ -2199,6 +2182,7 @@ function ss_init () this.deck = null; this.tabs = null; + this.heading = null; this.sourceTabList = new Array(); this.highlightTab = null; this.highlightNodes = new Array(); @@ -2222,8 +2206,6 @@ function cmdCloseTab (e) source2View.removeSourceTabAtIndex (e.index); } -var gFindInstData; - function cmdFindString (e) { var source2View = console.views.source2; @@ -2235,16 +2217,28 @@ function cmdFindString (e) return; var browser = source2View.sourceTabList[index].iframe; - if (!gFindInstData) - gFindInstData = new nsFindInstData(); - gFindInstData.browser = browser; - gFindInstData.rootSearchWindow = browser.contentWindow; - gFindInstData.currentSearchWindow = browser.contentWindow; - findInPage(gFindInstData); + + if (typeof nsFindData != "undefined") + { + if (!("findData" in console)) + console.findData = new nsFindInstData(); + + console.findData.browser = browser; + console.findData.rootSearchWindow = browser.contentWindow; + console.findData.currentSearchWindow = browser.contentWindow; + findInPage(console.findData); + } + else + { + findInPage(browser, browser.contentWindow, browser.contentWindow); + } } function cmdReloadTab (e) { + if (console.views.source2.sourceTabList.length == 0) + return + var source2View = console.views.source2; function cb(status) @@ -2584,6 +2578,9 @@ function s2v_initmargin (sourceTab) console.views.source2.markStopLine = function s2v_marktab (sourceTab, currentFrame) { + if ("stopNode" in sourceTab) + this.unmarkStopLine(sourceTab); + if (!currentFrame) return; @@ -2600,15 +2597,19 @@ function s2v_marktab (sourceTab, currentFrame) var sourceText = sourceTab.sourceText; var line = -1; - if ("scriptInstance" in sourceText && - sourceText.scriptInstance.containsScriptTag (tag)) + if ("scriptInstance" in sourceText) { - line = currentFrame.line; + if (sourceText.scriptInstance.containsScriptTag (tag) || + tag in sourceText.scriptInstance.scriptManager.transients) + { + line = currentFrame.line; + } } else if ("scriptWrapper" in sourceText && sourceText.scriptWrapper.tag == tag) { - line = currentFrame.script.pcToLine (currentFrame.pc, PCMAP_PRETTYPRINT); + line = currentFrame.script.pcToLine (currentFrame.pc, + PCMAP_PRETTYPRINT); } if (line > 0) @@ -3154,6 +3155,7 @@ function s2v_showtab (index) return; } this.deck.selectedIndex = index; + this.heading.value = this.sourceTabList[index].sourceText.url; } else this.lastSelectedTab = index; @@ -3355,6 +3357,7 @@ function s2v_show () { this.tabs = getChildById (this.currentContent, "source2-tabs"); this.deck = getChildById (this.currentContent, "source2-deck"); + this.heading = getChildById(this.currentContent, "source2-heading"); //this.bloke = getChildById (this.currentContent, "source2-bloke"); //version = getChildById (this.currentContent, "source2-version-label"); //help = getChildById (this.currentContent, "source2-help-label"); @@ -3385,6 +3388,7 @@ function s2v_hide () this.clearOutputDeck(); this.deck = null; this.tabs = null; + this.heading = null; } /******************************************************************************* diff --git a/extensions/venkman/resources/content/venkman-views.xul b/extensions/venkman/resources/content/venkman-views.xul index 55d3dc5b4204..0fee748b19ad 100644 --- a/extensions/venkman/resources/content/venkman-views.xul +++ b/extensions/venkman/resources/content/venkman-views.xul @@ -76,8 +76,8 @@ context="context:locals"> - +