remove debug dumps in variious getContext functions
warning cleanup in outliner-utils.js
add chrome-filter command to set the state of console.enableChromeFilter
if on, chrome files will not be displayed in the scripts view, and they will be filtered by the debugger service.  If off, chrome files will be treated the same as others.  chrome files are identified by a leading "chrome:" in the url.
add "Display Browser Files" checkitem to View menu.
add |feedback| function, which calls |display| only if the event began at the console.
fix async loading issue in SourceText.loadSource
fix boolean pref getter in venkman-prefs.js
This commit is contained in:
rginda%netscape.com 2002-01-30 03:05:49 +00:00
Родитель 8605704b12
Коммит 7544d3415d
12 изменённых файлов: 226 добавлений и 114 удалений

Просмотреть файл

@ -331,13 +331,18 @@ TreeOViewRecord.prototype.isContainerOpen = false;
TreeOViewRecord.prototype.findContainerTree =
function tovr_gettree ()
{
var parent = this.parentRecord
if (!("parentRecord" in this))
return null;
var parent = this.parentRecord;
while (parent)
{
if ("_treeView" in parent)
return parent._treeView;
parent = parent.parentRecord
if ("parentRecord" in parent)
parent = parent.parentRecord;
else
parent = null;
}
return null;
@ -553,8 +558,13 @@ function tovr_appchild (child)
{
if (this.calculateVisualRow() >= 0)
{
this.resort(true); /* resort, don't invalidate. we're going to do
* that in the onVisualFootprintChanged call. */
var tree = this.findContainerTree();
if (tree && tree.frozen)
this.needsResort = true;
else
this.resort(true); /* resort, don't invalidate. we're going
* to do that in the
* onVisualFootprintChanged call. */
}
this.onVisualFootprintChanged(child.calculateVisualRow(),
child.visualFootprint);
@ -627,7 +637,8 @@ function tovr_hide ()
this.isHidden = true;
/* go right to the parent so we don't muck with our own visualFoorptint
* record, we'll need it to be correct if we're ever unHidden. */
this.parentRecord.onVisualFootprintChanged (row, -this.visualFootprint);
if ("parentRecord" in this)
this.parentRecord.onVisualFootprintChanged (row, -this.visualFootprint);
}
/*
@ -999,7 +1010,10 @@ function torr_vfpchange (start, amount)
}
else
{
this._treeView.changeAmount += amount;
if ("changeAmount" in this._treeView)
this._treeView.changeAmount += amount;
else
this._treeView.changeAmount = amount;
if ("changeStart" in this._treeView)
this._treeView.changeStart =
Math.min (start, this._treeView.changeStart);
@ -1052,7 +1066,7 @@ function tov_thaw ()
return;
}
if (--this.frozen == 0)
if (--this.frozen == 0 && "changeStart" in this)
{
this.childData.onVisualFootprintChanged(this.changeStart,
this.changeAmount);

Просмотреть файл

@ -331,13 +331,18 @@ TreeOViewRecord.prototype.isContainerOpen = false;
TreeOViewRecord.prototype.findContainerTree =
function tovr_gettree ()
{
var parent = this.parentRecord
if (!("parentRecord" in this))
return null;
var parent = this.parentRecord;
while (parent)
{
if ("_treeView" in parent)
return parent._treeView;
parent = parent.parentRecord
if ("parentRecord" in parent)
parent = parent.parentRecord;
else
parent = null;
}
return null;
@ -553,8 +558,13 @@ function tovr_appchild (child)
{
if (this.calculateVisualRow() >= 0)
{
this.resort(true); /* resort, don't invalidate. we're going to do
* that in the onVisualFootprintChanged call. */
var tree = this.findContainerTree();
if (tree && tree.frozen)
this.needsResort = true;
else
this.resort(true); /* resort, don't invalidate. we're going
* to do that in the
* onVisualFootprintChanged call. */
}
this.onVisualFootprintChanged(child.calculateVisualRow(),
child.visualFootprint);
@ -627,7 +637,8 @@ function tovr_hide ()
this.isHidden = true;
/* go right to the parent so we don't muck with our own visualFoorptint
* record, we'll need it to be correct if we're ever unHidden. */
this.parentRecord.onVisualFootprintChanged (row, -this.visualFootprint);
if ("parentRecord" in this)
this.parentRecord.onVisualFootprintChanged (row, -this.visualFootprint);
}
/*
@ -999,7 +1010,10 @@ function torr_vfpchange (start, amount)
}
else
{
this._treeView.changeAmount += amount;
if ("changeAmount" in this._treeView)
this._treeView.changeAmount += amount;
else
this._treeView.changeAmount = amount;
if ("changeStart" in this._treeView)
this._treeView.changeStart =
Math.min (start, this._treeView.changeStart);
@ -1052,7 +1066,7 @@ function tov_thaw ()
return;
}
if (--this.frozen == 0)
if (--this.frozen == 0 && "changeStart" in this)
{
this.childData.onVisualFootprintChanged(this.changeStart,
this.changeAmount);

Просмотреть файл

@ -48,6 +48,7 @@ function initCommands(commandObject)
[/* "real" commands */
["break", cmdBreak, CMD_CONSOLE],
["bp-props", cmdBPProps, 0],
["chrome-filter", cmdChromeFilter, CMD_CONSOLE],
["clear", cmdClear, CMD_CONSOLE],
["clear-all", cmdClearAll, CMD_CONSOLE],
["clear-script", cmdClearScript, 0],
@ -86,6 +87,7 @@ function initCommands(commandObject)
/* aliases */
["this", "props this", CMD_CONSOLE],
["toggle-chrome", "chrome-filter toggle", 0],
["toggle-ias", "startup-init toggle", 0],
["em-cycle", "emode cycle", 0],
["em-ignore", "emode ignore", 0],
@ -174,6 +176,7 @@ function getCommandContext (id, cx)
case "mainmenu:debug-popup":
case "mainmenu:view-popup":
case "popup:console":
cx = {
commandManager: console.commandManager,
contextSource: "default"
@ -216,6 +219,7 @@ function formatCommandFlags (f)
function cmdBreak (e)
{
var i;
var bpr;
if (!e.fileName)
{ /* if no input data, just list the breakpoints */
@ -230,9 +234,9 @@ function cmdBreak (e)
display (getMsg(MSN_BP_HEADER, bplist.length));
for (i = 0; i < bplist.length; ++i)
{
var bpr = bplist[i];
display (getMsg(MSN_BP_LINE, [i, bpr.fileName, bpr.line,
bpr.scriptMatches]));
bpr = bplist[i];
feedback (e, getMsg(MSN_BP_LINE, [i, bpr.fileName, bpr.line,
bpr.scriptMatches]));
}
return true;
}
@ -240,12 +244,17 @@ function cmdBreak (e)
var matchingFiles = matchFileName (e.fileName);
if (matchingFiles.length == 0)
{
display (getMsg(MSN_ERR_BP_NOSCRIPT, e.fileName), MT_ERROR);
feedback (e, getMsg(MSN_ERR_BP_NOSCRIPT, e.fileName), MT_ERROR);
return false;
}
for (i in matchingFiles)
setBreakpoint (matchingFiles[i], e.lineNumber);
{
bpr = setBreakpoint (matchingFiles[i], e.lineNumber);
if (bpr)
feedback (getMsg(MSN_BP_CREATED, [bpr.fileName, bpr.lineNumber,
bpr.scriptMatches]));
}
return true;
}
@ -255,9 +264,61 @@ function cmdBPProps (e)
dd ("command bp-props");
}
function cmdChromeFilter (e)
{
var currentState = console.prefs["enableChromeFilter"];
if (e.toggle != null)
{
if (e.toggle == "toggle")
e.toggle = !currentState;
if (e.toggle != currentState)
{
if (e.toggle)
console.jsds.insertFilter (console.chromeFilter, null);
else
console.jsds.removeFilter (console.chromeFilter);
}
console.scriptsView.freeze();
for (var container in console.scripts)
{
if (console.scripts[container].fileName.indexOf("chrome:") == 0)
{
var rec = console.scripts[container];
var scriptList = console.scriptsView.childData;
if (e.toggle)
{
/* filter is on, remove chrome file from scripts view */
if ("parentRecord" in rec)
scriptList.removeChildAtIndex(rec.childIndex);
}
else
{
/* filter is off, add chrome file to scripts view */
if (!("parentRecord" in rec))
scriptList.appendChild(rec);
}
}
}
console.scriptsView.thaw();
currentState =
console.enableChromeFilter =
console.prefs["enableChromeFilter"] = e.toggle;
}
feedback (e, getMsg(MSN_CHROME_FILTER,
currentState ? MSG_VAL_ON : MSG_VAL_OFF));
}
function cmdClear (e)
{
return clearBreakpointByNumber (e.breakpointIndex);
var bpr = clearBreakpointByNumber (e.breakpointIndex);
if (bpr)
feedback (getMsg(MSN_BP_CLEARED, [bpr.fileName, bpr.line,
bpr.scriptMatches]));
}
function cmdClearAll(e)

Просмотреть файл

@ -42,6 +42,7 @@ const jsdIValue = Components.interfaces.jsdIValue;
const jsdIProperty = Components.interfaces.jsdIProperty;
const jsdIScript = Components.interfaces.jsdIScript;
const jsdIStackFrame = Components.interfaces.jsdIStackFrame;
const jsdIFilter = Components.interfaces.jsdIFilter;
const PCMAP_SOURCETEXT = jsdIScript.PCMAP_SOURCETEXT;
const PCMAP_PRETTYPRINT = jsdIScript.PCMAP_PRETTYPRINT;
@ -50,7 +51,9 @@ const FTYPE_STD = 0;
const FTYPE_SUMMARY = 1;
const FTYPE_ARRAY = 2;
const FILTER_SYSTEM = 0x100; /* system filter, do not show in UI */
const FILTER_ENABLED = jsdIFilter.FLAG_ENABLED;
const FILTER_DISABLED = ~jsdIFilter.FLAG_ENABLED;
const FILTER_SYSTEM = 0x100; /* system filter, do not show in UI */
var $ = new Array(); /* array to store results from evals in debug frames */
@ -176,24 +179,39 @@ function initDebugger()
console.jsds.errorHook = console._errorHook;
console.jsds.scriptHook = console._scriptHook;
console.chromeFilter = {
glob: null,
flags: FILTER_SYSTEM | FILTER_ENABLED,
urlPattern: "chrome:*",
startLine: 0,
endLine: 0
};
if (console.prefs["enableChromeFilter"])
{
console.enableChromeFilter = true;
console.jsds.appendFilter(console.chromeFilter);
}
else
console.enableChromeFilter = false;
var venkmanFilter1 = { /* glob based filter goes first, because it's the */
glob: this, /* easiest to match. */
flags: FILTER_SYSTEM | jsdIFilter.FLAG_ENABLED,
flags: FILTER_SYSTEM | FILTER_ENABLED,
urlPattern: null,
startLine: 0,
endLine: 0
};
var venkmanFilter2 = { /* url based filter for XPCOM callbacks that may */
glob: null, /* not happen under our glob. */
flags: FILTER_SYSTEM | jsdIFilter.FLAG_ENABLED,
flags: FILTER_SYSTEM | FILTER_ENABLED,
urlPattern: "chrome://venkman/*",
startLine: 0,
endLine: 0
};
console.jsds.appendFilter (venkmanFilter1);
console.jsds.appendFilter (venkmanFilter2);
console.throwMode = TMODE_IGNORE;
console.errorMode = EMODE_IGNORE;
@ -230,15 +248,17 @@ function detachDebugger()
function realizeScript(script)
{
var container
var container;
if (script.fileName in console.scripts)
{
container = console.scripts[script.fileName];
if (!("parentRecord" in container))
{
/* source record exists but is not inserted in the source tree,
/* container record exists but is not inserted in the scripts view,
* either we are reloading it, or the user added it manually */
console.scriptsView.childData.appendChild(container);
if (!console.enableChromeFilter ||
script.fileName.indexOf ("chrome:") != 0)
console.scriptsView.childData.appendChild(container);
}
}
else
@ -246,12 +266,13 @@ function realizeScript(script)
container = console.scripts[script.fileName] =
new ScriptContainerRecord (script.fileName);
container.reserveChildren();
console.scriptsView.childData.appendChild(container);
if (!console.enableChromeFilter ||
script.fileName.indexOf ("chrome:") != 0)
console.scriptsView.childData.appendChild(container);
}
var scriptRec = new ScriptRecord (script);
container.appendScriptRecord (scriptRec);
/* check to see if this script contains a breakpoint */
for (var i = 0; i < console.breakpoints.childData.length; ++i)
{
@ -271,7 +292,7 @@ function realizeScript(script)
setBreakpoint (scriptRec.script.fileName, bpr.line);
}
}
}
}
}
function unrealizeScript(script)
@ -761,14 +782,11 @@ function clearBreakpointByNumber (number)
if (!bpr)
{
display (getMsg(MSN_ERR_BP_NOINDEX, number, MT_ERROR));
return 0;
return null;
}
bpr.enabled = false;
display (getMsg(MSN_BP_CLEARED, [bpr.fileName, bpr.line,
bpr.scriptMatches]));
var fileName = bpr.fileName;
var line = bpr.line;
var sourceRecord = console.scripts[fileName];
@ -782,7 +800,7 @@ function clearBreakpointByNumber (number)
}
console.breakpoints.removeChildAtIndex(number);
return bpr.scriptMatches;
return bpr;
}
function setBreakpoint (fileName, line)
@ -817,7 +835,7 @@ function setBreakpoint (fileName, line)
}
}
var matches = bpr.scriptMatches
var matches = bpr.scriptMatches;
if (!matches)
{
display (getMsg(MSN_ERR_BP_NOLINE, [fileName, line]), MT_ERROR);
@ -833,8 +851,6 @@ function setBreakpoint (fileName, line)
}
console.breakpoints.appendChild (bpr);
display (getMsg(MSN_BP_CREATED, [fileName, line, matches]));
return bpr;
}

Просмотреть файл

@ -127,7 +127,8 @@ function con_icline (e)
console.lastHistoryReferenced = -1;
console.incompleteLine = "";
dispatch (e.line, null, CMD_CONSOLE);
var ev = {isInteractive: true, initialEvent: e};
dispatch (e.line, ev, CMD_CONSOLE);
}
console.onSingleLineKeypress =

Просмотреть файл

@ -68,9 +68,12 @@ function initMenus()
/* View menu */
M("mainmenu", "view");
m("pprint", {type: "checkbox",
checkedif: "console.sourceView.prettyPrint"});
m("reload");
m("pprint", {type: "checkbox",
checkedif: "console.sourceView.prettyPrint"});
m("-");
m("toggle-chrome", {type: "checkbox",
checkedif: "console.enableChromeFilter"});
/* Debug menu */
M("mainmenu", "debug");

Просмотреть файл

@ -175,6 +175,7 @@ const MSG_DOC_DESCRIPTION = getMsg("msg.doc.description");
const MSG_HELP_TITLE = getMsg("msg.help.title");
/* message names for parameterized messages */
const MSN_CHROME_FILTER = "msg.chrome.filter";
const MSN_ERR_NO_SCRIPT = "msg.err.noscript";
const MSN_IASMODE = "msg.iasmode";
const MSN_EXTRA_PARAMS = "msg.extra.params";

Просмотреть файл

@ -291,8 +291,6 @@ function sv_lscroll (line)
console.sourceView.getContext =
function sv_getcx(cx)
{
dd ("get source context...");
if (!cx)
cx = new Object();
@ -323,8 +321,6 @@ function sv_getcx(cx)
cx.lineNumberList = new Array();
}
dd ("rangeCount is " + rangeCount);
for (var range = 0; range < rangeCount; ++range)
{
var min = new Object();
@ -333,7 +329,6 @@ function sv_getcx(cx)
min = min.value;
max = max.value;
dd ("range " + min + " ... " + max);
for (row = min; row <= max; ++row)
{
cx.lineNumberList.push (row + 1);
@ -656,6 +651,11 @@ function sr_guessname (sourceText)
{
var targetLine = this.script.baseLineNumber;
var sourceLines = sourceText.lines;
if (targetLine > sourceLines)
{
dd ("not enough source to guess function at line " + targetLine);
return;
}
if (this.functionName == MSG_VAL_TLSCRIPT)
{
@ -776,8 +776,6 @@ function scv_getcprops (index, colID, properties)
console.scriptsView.getContext =
function scv_getcx(cx)
{
dd ("get scripts context...");
if (!cx)
cx = new Object();
@ -817,7 +815,6 @@ function scv_getcx(cx)
cx.lineNumberList = new Array();
}
dd ("rangeCount is " + rangeCount);
if (rangeCount > 0)
{
cx.fileNameList = new Array();
@ -836,7 +833,6 @@ function scv_getcx(cx)
min = min.value;
max = max.value;
dd ("range " + min + " ... " + max);
for (row = min; row <= max; ++row)
{
rec = this.childData.locateChildByVisualRow(row);
@ -878,9 +874,7 @@ function FrameRecord (frame)
{
this.location = sourceRec.shortName + ":" + frame.line;
var scriptRec = sourceRec.locateChildByScript(frame.script);
if (!scriptRec)
dd ("no scriptrec");
else if (fn == "anonymous")
if (fn == "anonymous")
fn = scriptRec.functionName;
}
else
@ -946,7 +940,6 @@ function vr_refresh ()
{
/* if we're not an object but we have child data, then we must have just
* turned into something other than an object. */
dd ("we're not an object anymore!");
delete this.childData;
this.isContainerOpen = false;
sizeDelta = 1 - this.visualFootprint;
@ -1283,8 +1276,6 @@ function sv_save ()
console.stackView.getContext =
function sv_getcx(cx)
{
dd ("get stack context...");
if (!cx)
cx = new Object();
@ -1312,8 +1303,6 @@ function sv_getcx(cx)
if (!("frameIndex" in cx))
{
var parent = rec.parentRecord;
if (!parent)
dd ("no parent!");
while (parent && !(parent instanceof FrameRecord))
parent = parent.parentRecord;
@ -1421,8 +1410,6 @@ function pv_cellprops (index, colID, properties)
console.projectView.getContext =
function pv_getcx(cx)
{
dd ("get project context...");
if (!cx)
cx = new Object();

Просмотреть файл

@ -50,6 +50,7 @@ function initPrefs()
console.prefs.prefNames = new Array();
// console.addPref ("input.commandchar", "/");
console.addPref ("enableChromeFilter", false);
console.addPref ("sourcetext.tab.width", 4);
console.addPref ("input.history.max", 20);
console.addPref ("input.dtab.time", 500);
@ -70,44 +71,61 @@ function con_addpref (prefName, defaultValue)
function prefGetter ()
{
var type = this.prefBranch.getPrefType (prefName);
switch (type)
{
case nsIPrefBranch.PREF_STRING:
return this.prefBranch.getCharPref (prefName);
try
{
switch (type)
{
case nsIPrefBranch.PREF_STRING:
return this.prefBranch.getCharPref (prefName);
case nsIPrefBranch.PREF_INT:
return this.prefBranch.getIntPref (prefName);
case nsIPrefBranch.PREF_INT:
return this.prefBranch.getIntPref (prefName);
case nsIPrefBranch.PREF_BOOL:
return this.prefBranch.getBoolPref (prefName);
case nsIPrefBranch.PREF_BOOL:
return this.prefBranch.getCharPref (prefName);
default:
return defaultValue;
}
default:
return defaultValue;
}
return null;
return null;
}
catch (ex)
{
dd ("caught exception reading pref ``" + prefName + "'' " + type +
"\n" + ex);
return defaultValue;
}
}
function prefSetter (value)
{
switch (typeof value)
try
{
switch (typeof value)
{
case "int":
this.prefBranch.setIntPref (prefName, value);
break;
case "boolean":
this.prefBranch.setBoolPref (prefName, value);
break;
default:
this.prefBranch.setCharPref (prefName, value);
break;
}
this.prefService.savePrefFile(null);
}
catch (ex)
{
case "int":
this.prefBranch.setIntPref (prefName, value);
break;
case "boolean":
this.prefBranch.setBoolPref (prefName, value);
break;
default:
this.prefBranch.setCharPref (prefName, value);
break;
dd ("caught exception writing pref ``" + prefName + "''\n" + ex);
}
this.prefService.savePrefFile(null);
return value;
}
if (prefName in console.prefs)

Просмотреть файл

@ -67,8 +67,6 @@ console.version = "0.6.1";
/* |this|less functions */
const jsdIFilter = Components.interfaces.jsdIFilter;
function setStopState(state)
{
var tb = document.getElementById("maintoolbar-stop");
@ -231,6 +229,12 @@ function dispatchCommand (command, e, flags)
return null;
}
function feedback(e, message, msgtype)
{
if ("isInteractive" in e && e.isInteractive)
display (message, msgtype);
}
function display(message, msgtype)
{
if (typeof message == "undefined")
@ -748,7 +752,9 @@ function st_loadsrc (cb)
console.popStatus();
return;
}
if (!ASSERT(data, "loadSource succeeded but got no data"))
data = "";
sourceText.isLoaded = true;
var ary = data.split(/\r\n|\n|\r/m);
for (var i = 0; i < ary.length; ++i)
@ -780,6 +786,9 @@ function st_loadsrc (cb)
try
{
src = loadURLNow(url);
observer.onComplete (src, url, Components.results.NS_OK);
this.invalidate();
delete this.isLoading;
}
catch (ex)
{
@ -787,10 +796,6 @@ function st_loadsrc (cb)
loadURLAsync (url, observer);
}
observer.onComplete (src, url, Components.results.NS_OK);
this.invalidate();
delete this.isLoading;
}
function PPSourceText (scriptRecord)

Просмотреть файл

@ -291,8 +291,6 @@ function sv_lscroll (line)
console.sourceView.getContext =
function sv_getcx(cx)
{
dd ("get source context...");
if (!cx)
cx = new Object();
@ -323,8 +321,6 @@ function sv_getcx(cx)
cx.lineNumberList = new Array();
}
dd ("rangeCount is " + rangeCount);
for (var range = 0; range < rangeCount; ++range)
{
var min = new Object();
@ -333,7 +329,6 @@ function sv_getcx(cx)
min = min.value;
max = max.value;
dd ("range " + min + " ... " + max);
for (row = min; row <= max; ++row)
{
cx.lineNumberList.push (row + 1);
@ -656,6 +651,11 @@ function sr_guessname (sourceText)
{
var targetLine = this.script.baseLineNumber;
var sourceLines = sourceText.lines;
if (targetLine > sourceLines)
{
dd ("not enough source to guess function at line " + targetLine);
return;
}
if (this.functionName == MSG_VAL_TLSCRIPT)
{
@ -776,8 +776,6 @@ function scv_getcprops (index, colID, properties)
console.scriptsView.getContext =
function scv_getcx(cx)
{
dd ("get scripts context...");
if (!cx)
cx = new Object();
@ -817,7 +815,6 @@ function scv_getcx(cx)
cx.lineNumberList = new Array();
}
dd ("rangeCount is " + rangeCount);
if (rangeCount > 0)
{
cx.fileNameList = new Array();
@ -836,7 +833,6 @@ function scv_getcx(cx)
min = min.value;
max = max.value;
dd ("range " + min + " ... " + max);
for (row = min; row <= max; ++row)
{
rec = this.childData.locateChildByVisualRow(row);
@ -878,9 +874,7 @@ function FrameRecord (frame)
{
this.location = sourceRec.shortName + ":" + frame.line;
var scriptRec = sourceRec.locateChildByScript(frame.script);
if (!scriptRec)
dd ("no scriptrec");
else if (fn == "anonymous")
if (fn == "anonymous")
fn = scriptRec.functionName;
}
else
@ -946,7 +940,6 @@ function vr_refresh ()
{
/* if we're not an object but we have child data, then we must have just
* turned into something other than an object. */
dd ("we're not an object anymore!");
delete this.childData;
this.isContainerOpen = false;
sizeDelta = 1 - this.visualFootprint;
@ -1283,8 +1276,6 @@ function sv_save ()
console.stackView.getContext =
function sv_getcx(cx)
{
dd ("get stack context...");
if (!cx)
cx = new Object();
@ -1312,8 +1303,6 @@ function sv_getcx(cx)
if (!("frameIndex" in cx))
{
var parent = rec.parentRecord;
if (!parent)
dd ("no parent!");
while (parent && !(parent instanceof FrameRecord))
parent = parent.parentRecord;
@ -1421,8 +1410,6 @@ function pv_cellprops (index, colID, properties)
console.projectView.getContext =
function pv_getcx(cx)
{
dd ("get project context...");
if (!cx)
cx = new Object();

Просмотреть файл

@ -145,6 +145,7 @@ msg.tmode.ignore = Exceptions will now be ignored.
msg.tmode.trace = Exceptions will now be traced.
msg.tmode.break = Exceptions will now stop the debug target.
msg.iasmode = Initialize at Startup is now %1$S.
msg.chrome.filter = Chrome filtering is now %1$S.
# 1 value, 2 frame
msg.exception.trace = Exception %1$S thrown from %2$S.
# 1 message, 2 flags, 3 file, 4 line, 5 pos
@ -234,6 +235,10 @@ cmd.bp-props.label = Breakpoint &Properties
cmd.bp-props.params = <breakpoint-rec>
cmd.bp-props.help = Displays a properties dialog for the selected breakpoint <brekpoint-rec>.
cmd.chrome-filter.params = [<toggle>]
cmd.chrome-filter.help = Enables or disabled the filtering of chrome: urls. With chrome: filtering on, the JavaScript files which make up the browser will not be displayed in the Script View, and the debugger will not step through them while debugging.
cmd.toggle-chrome.label = &Hide Browser Files
cmd.clear.label = &Clear Breakpoint
cmd.clear.params = <breakpoint-index>
cmd.clear.help = Clears breakpoint at index <breakpoint-index>. See also: break.