<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://getfirebug.com/wiki/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://getfirebug.com/wiki/index.php?title=Special:Contributions/Honza&amp;feed=atom&amp;limit=50&amp;target=Honza&amp;year=&amp;month=</id>
		<title>FirebugWiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://getfirebug.com/wiki/index.php?title=Special:Contributions/Honza&amp;feed=atom&amp;limit=50&amp;target=Honza&amp;year=&amp;month="/>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/Special:Contributions/Honza"/>
		<updated>2013-05-25T21:40:02Z</updated>
		<subtitle>From FirebugWiki</subtitle>
		<generator>MediaWiki 1.16.5</generator>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-05-16T06:47:15Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* [[Script Panel Refactoring]]&lt;br /&gt;
* [[Remoting Architecture]]&lt;br /&gt;
* [[Remote Selector]]&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Error breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Monitor breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;XHR breakpoints (local scenario only)&amp;lt;/strike&amp;gt;[https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** &amp;lt;strike&amp;gt;Mutation breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857], [https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** &amp;lt;strike&amp;gt;respect 'actualLocation' sent back from the server (corrected BP location)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;The breakpoint condition editor does not disappear when clicking outside of it.&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** The bp-condition-editor doesn't scroll&lt;br /&gt;
* Use CodeMirror instead of Orion? See [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Restore expanded state of the Watch window across stepping.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see [https://bugzilla.mozilla.org/show_bug.cgi?id=797876 bug 797876]&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Edit Breakpoint Condition&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** &amp;lt;strike&amp;gt;Break on… features&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* &amp;lt;strike&amp;gt;Script panel info tip (var value)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* &amp;lt;strike&amp;gt;Break notifications (explaining the reason why break happened)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;The Script panel &amp;amp; two tabs with Firebug opened.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Debugging two tabs at once (there is a warning).&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Source Maps: https://github.com/mozilla/source-map&lt;br /&gt;
* Script panel search&lt;br /&gt;
** Search multiple files&lt;br /&gt;
** Search for regular expression&lt;br /&gt;
** Goto line&lt;br /&gt;
* FirebugRep.supportsObject() could use third parameter for remote-object-types&lt;br /&gt;
** See also Simon's [https://github.com/firebug/firebug/commit/5c220f5ea1045e7921dd92d8c255e9e4b35b85d9#commitcomment-2536753 comment]&lt;br /&gt;
* The Watch panel&lt;br /&gt;
** Changing local variable or argument needs environment actor re-fetch from the server&lt;br /&gt;
* Script panel&lt;br /&gt;
** execution line disappears when switching to another tab and back&lt;br /&gt;
** When Firefox exists with the debugger active (context.stopped) the process hangs in the memory&lt;br /&gt;
** Mark executable lines&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing reports in Firebug issue list use label: &amp;lt;b&amp;gt;jsd2&amp;lt;/b&amp;gt; so, you can [http://code.google.com/p/fbug/issues/list?can=2&amp;amp;q=label%3Ajsd2 search] for them.&lt;br /&gt;
&lt;br /&gt;
=== Bugzilla ===&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=800200 Bug 800200] - rm JSD&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=837723 Bug 837723] - Introduce a new method in IJSDebugger allowing to get DO referent.&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-05-10T12:58:24Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* [[Script Panel Refactoring]]&lt;br /&gt;
* [[Remoting Architecture]]&lt;br /&gt;
* [[Remote Selector]]&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Error breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Monitor breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;XHR breakpoints (local scenario only)&amp;lt;/strike&amp;gt;[https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** &amp;lt;strike&amp;gt;Mutation breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857], [https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** &amp;lt;strike&amp;gt;respect 'actualLocation' sent back from the server (corrected BP location)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;The breakpoint condition editor does not disappear when clicking outside of it.&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** The bp-condition-editor doesn't scroll&lt;br /&gt;
* Use CodeMirror instead of Orion? See [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Restore expanded state of the Watch window across stepping.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see [https://bugzilla.mozilla.org/show_bug.cgi?id=797876 bug 797876]&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Edit Breakpoint Condition&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** &amp;lt;strike&amp;gt;Break on… features&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* &amp;lt;strike&amp;gt;Script panel info tip (var value)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* &amp;lt;strike&amp;gt;Break notifications (explaining the reason why break happened)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;The Script panel &amp;amp; two tabs with Firebug opened.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Debugging two tabs at once (there is a warning).&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Source Maps: https://github.com/mozilla/source-map&lt;br /&gt;
* Script panel search&lt;br /&gt;
** Search multiple files&lt;br /&gt;
** Search for regular expression&lt;br /&gt;
** Goto line&lt;br /&gt;
* FirebugRep.supportsObject() could use third parameter for remote-object-types&lt;br /&gt;
** See also Simon's [https://github.com/firebug/firebug/commit/5c220f5ea1045e7921dd92d8c255e9e4b35b85d9#commitcomment-2536753 comment]&lt;br /&gt;
* The Watch panel&lt;br /&gt;
** Changing local variable or argument needs environment actor re-fetch from the server&lt;br /&gt;
* Script panel&lt;br /&gt;
** execution line disappears when switching to another tab and back&lt;br /&gt;
** When Firefox exists with the debugger active (context.stopped) the process hangs in the memory&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing reports in Firebug issue list use label: &amp;lt;b&amp;gt;jsd2&amp;lt;/b&amp;gt; so, you can [http://code.google.com/p/fbug/issues/list?can=2&amp;amp;q=label%3Ajsd2 search] for them.&lt;br /&gt;
&lt;br /&gt;
=== Bugzilla ===&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=800200 Bug 800200] - rm JSD&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=837723 Bug 837723] - Introduce a new method in IJSDebugger allowing to get DO referent.&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/Script_Panel_Refactoring</id>
		<title>Script Panel Refactoring</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/Script_Panel_Refactoring"/>
				<updated>2013-05-09T12:58:51Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Breakpoint Condition Editor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page summarizes refactoring the Firebug debugger to use JSD2 and adding support for remote JavaScript debugging. [http://code.google.com/p/fbug/issues/detail?id=5421 Issue 5421] tracks the actual changes done.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
Firebug Wiki:&lt;br /&gt;
* [[HTTP Monitor]]&lt;br /&gt;
* [[Firebug 1.7: Mozilla Backend|Firebug 1.7 BTI]]&lt;br /&gt;
* [[Net Panel Architecture Review]]&lt;br /&gt;
* [[Remoting Prototype#Prototype|Remoting Prototype]]&lt;br /&gt;
* [[Remoting Architecture|Remoting Architecture]]&lt;br /&gt;
* [[JSD2 Adoption|JSD2 Adoption]]&lt;br /&gt;
&lt;br /&gt;
Mozilla Wiki:&lt;br /&gt;
* [https://wiki.mozilla.org/Debugger Debugger]&lt;br /&gt;
* [https://wiki.mozilla.org/Debugger_Client_API Debugger Client API]&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Guide JS Debugger API Guide]&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference JS Debugger API Reference]&lt;br /&gt;
* [https://wiki.mozilla.org/DevTools/Features/Debugger DevTools Debugger]&lt;br /&gt;
* [https://wiki.mozilla.org/Remote_Debugging_Protocol Remote Debugging Protocol]&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
* Adopt JSD2 (get rid of all JSD1 APIs)&lt;br /&gt;
* Support remote debugging&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
* [http://code.google.com/p/fbug/issues/detail?id=5421 Issue 5421]: Implement JSD2&lt;br /&gt;
* [http://code.google.com/p/fbug/issues/detail?id=5837 Issue 5837]: Implement remote debugging&lt;br /&gt;
&lt;br /&gt;
== JSD2 API Requirements ==&lt;br /&gt;
The following list summarizes the high-level features that Firebug needs to support. It should be verified that all the features can re-implemented on top of JSD2 before starting the refactoring.&lt;br /&gt;
&lt;br /&gt;
* List of scripts available on selected tab (including static, events and evaluated scripts) including iframes &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#findScripts%28%29 Debugger.findScripts()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stepping (into, over, out, resume, current line)&lt;br /&gt;
* Support for &amp;lt;code&amp;gt;debugger;&amp;lt;/code&amp;gt; keyword &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onDebuggerStatement%28%29 Debugger.onDebuggerStatement()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Support for breakpoints (add, remove, enable, disabled, conditional, list of existing breakpoints) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Script#Methods Debugger.Script methods]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Recognize executable lines&lt;br /&gt;
* Dynamic eval in a frame (used e.g. by the [[Watch Side Panel]] when the debugger is halted) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#eval%28%29 Debugger.Frame.eval()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#evalWithBindings%28%29 Debugger.Frame.evalWithBindings()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Get stack frames (including passed arguments) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#getNewestFrame%28%29 Debugger.getNewestFrame()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#Accessor_properties Debugger.Frame.older]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Scope chain variable exploring (with &amp;amp; closure scopes). It should be possible to see all values. &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#Accessor_properties Debugger.Frame.environment]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Break on next call&lt;br /&gt;
* Profiling (was part of JSD1)&lt;br /&gt;
* Tracking (break on) throw/catch/error &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onThrow%28%29 Debugger.onThrow()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onError%28%29 Debugger.onError()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tracking (monitoring) function calls&lt;br /&gt;
* Freezing page UI if debugger is halted (including timeouts, intervals and worker threads)&lt;br /&gt;
&lt;br /&gt;
=== Not Ready in JSD2 ===&lt;br /&gt;
* There is not source for evals.&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onNewScript%28%29 new Function scripts?]&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=676586 Meta bug]: Implement a script Debugger&lt;br /&gt;
** As soon as this one is fixed&lt;br /&gt;
** Profiling is unrelated to JSD2. What is the plan here?&lt;br /&gt;
** Tracking (break on) throw/catch/error; also what is the plan?&lt;br /&gt;
* Conditional breakpoints ([https://bugzilla.mozilla.org/show_bug.cgi?id=740825 bug 740825])&lt;br /&gt;
&lt;br /&gt;
== Current Debugger Architecture ==&lt;br /&gt;
This section describes the current debugger architecture.&lt;br /&gt;
&lt;br /&gt;
[[File:Current-debugger-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
There are several layers/objects so, let's describe them step by step starting from the bottom.&lt;br /&gt;
&lt;br /&gt;
* Backend: JSD1, FirebugService, Debugger&lt;br /&gt;
* Frontend: JavaScriptTool, ScriptPanel&lt;br /&gt;
&lt;br /&gt;
=== JSD1 ===&lt;br /&gt;
This layer represents JSD1 platform API. These API allows to implement script debuggers and represent direct competition to JSD2 API. Of course this layer should entirely disappear and should be replaced by JSD2.&lt;br /&gt;
&lt;br /&gt;
=== Firebug Service ===&lt;br /&gt;
Firebug service is implemented as [https://developer.mozilla.org/en-US/docs/JavaScript_code_modules/Using?redirectlocale=en-US&amp;amp;redirectslug=Using_JavaScript_code_modules js module] on top of JSD1 layer. The object is called ''FBS'' and it's purpose is to wrap JSD1 API so, they are not directly accessed anywhere else. This layer also maintain list of registered debuggers (usually &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; module) and fires various events to them (e.g. ''onToggleBreakpoint'', ''onToggleMonitor'', etc.) or execute theirs callback (e.g. ''onBreak'', ''onFunctionCall'', ''onError'', ''onThrow'', ''onScriptCreated'', etc.) &lt;br /&gt;
&lt;br /&gt;
Main responsibilities:&lt;br /&gt;
* Activate/deactivate JSD in the browser. The activation is global for all current browser windows.&lt;br /&gt;
* Hook debugger events (interrupts, break on a breakpoint, etc.)&lt;br /&gt;
* Maintains list of registered debuggers (there is usually just one - Firebug debugger) and sends events to them.&lt;br /&gt;
* Manages nested event loop that is created for the debugger UI when page JS execution breaks.&lt;br /&gt;
* Sets/removes/enables/disables/saves/loads breakpoints&lt;br /&gt;
* Implements debugger stepping over/in/out/runUntil&lt;br /&gt;
* Monitors function calls&lt;br /&gt;
* Starts/stops profiling&lt;br /&gt;
* Tracks exceptions and errors (not working well)&lt;br /&gt;
* Tracks compiled scripts (not all of them)&lt;br /&gt;
&lt;br /&gt;
=== Debugger ===&lt;br /&gt;
This object is derived from &amp;lt;code&amp;gt;Firebug.Module&amp;lt;/code&amp;gt; and represents Firebug's debugger. It's also registered as a debugger into ''Firebug Service'' (FBS). This object should be the only one accessing FBS. It calls FBS API and receives various callbacks and events.&lt;br /&gt;
&lt;br /&gt;
This object implements methods that can be used by the Script panel or other parts of Firebug (e.g. by those panels which implements BON).&lt;br /&gt;
&lt;br /&gt;
Some examples of the API:&lt;br /&gt;
* ''evaluate'', ''evaluateInCallingFrame''&lt;br /&gt;
* ''breakNow'', ''getCurrentStackTrace''&lt;br /&gt;
* ''rerun''&lt;br /&gt;
* ''stepOver'', ''stepInto'', ''stepOut'', ''runUntil, ''resume''&lt;br /&gt;
* ''setBreakpoint'', ''clearBrakpoint'', etc.&lt;br /&gt;
* ''monitorFunction'', ''unmonitorFunction''&lt;br /&gt;
* ''monitorScript'', ''unmonitorScript''&lt;br /&gt;
* ''activateDebugger'', ''deactivateDebugger''&lt;br /&gt;
&lt;br /&gt;
Implementation of these methods is based on FBS API.&lt;br /&gt;
&lt;br /&gt;
There is also &amp;lt;code&amp;gt;Firebug.DebuggerListener&amp;lt;/code&amp;gt; that defines the interface used by FBS &lt;br /&gt;
* ''onStop'', ''onResume'', ''onThrow'', ''onError'', ''onScriptCreated'' (there is more ''onScriptCreated'' events)&lt;br /&gt;
&lt;br /&gt;
This object is ''observable'' and it activates the underlying JSD only if an observer exists. The observer is currently the Script panel even if it would make a bit more sense if it's actually the ''JavaScriptTool''.&lt;br /&gt;
&lt;br /&gt;
=== JavaScriptTool ===&lt;br /&gt;
This object is part or BTI and represents a javascript debugger tool. This object is like a proxy sitting between &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; and the &amp;lt;code&amp;gt;ScriptPanel&amp;lt;/code&amp;gt;. The current implementation is in-process only so, based on direct &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; API calls.&lt;br /&gt;
&lt;br /&gt;
API of the tool is as follows:&lt;br /&gt;
* ''setBreakpoint'', ''clearBreakpoint'', ''enableBreakpoint'', ''disableBreakpoint'', ''isBreakpointDisabled'', ''getBreakpointCondition''&lt;br /&gt;
* ''rerun''&lt;br /&gt;
* ''resumeJavaScript'', ''stepOver'', ''stepInto'', ''stepOut'', ''runUntil''&lt;br /&gt;
* ''onConnect'', ''onDisconnect''&lt;br /&gt;
* ''onStartDebugging'', ''onStopDebugging''&lt;br /&gt;
* ''onCompilationUnit''&lt;br /&gt;
&lt;br /&gt;
The BTI is used by [[Crossfire]]. Crossfire has the following structure:&lt;br /&gt;
&lt;br /&gt;
    Crossfire Panel&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Module&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Server&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Socket Transport&lt;br /&gt;
&lt;br /&gt;
When starting up it does the following.&lt;br /&gt;
&lt;br /&gt;
# Register tools (e.g. console, inspector, ...)&lt;br /&gt;
# Start server&lt;br /&gt;
# Create socket transport&lt;br /&gt;
# Add BTI listener&lt;br /&gt;
# Set connection status&lt;br /&gt;
&lt;br /&gt;
=== Script Panel ===&lt;br /&gt;
The [[Script Panel]] sits at the top of the whole stack of layers/objects. It represents the debugger UI (a view + a controller). The implementation of this object is quite extensive since it also includes the source code view and viewport (see &amp;lt;code&amp;gt;[https://github.com/firebug/firebug/blob/master/extension/content/firebug/js/sourceBox.js firebug/js/sourceBox.js]&amp;lt;/code&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
The ''Script'' panel should never access the &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; directly. It should always use the &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
So, for example, if the user clicks on the Breakpoint Column, the action is handled by the ''Script'' panel, forwarded to the &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt;, which forwards it to the &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt;, which forwards it to &amp;lt;code&amp;gt;FBS&amp;lt;/code&amp;gt;. Finally, &amp;lt;code&amp;gt;FBS&amp;lt;/code&amp;gt; is using JSD1 API to set the breakpoint.&lt;br /&gt;
&lt;br /&gt;
There are side panels ([[Breakpoints Side Panel|Breakpoints]], [[Watch Side Panel|Watch]] and [[Stack Side Panel|Stack]]), which are synchronized automatically with the ''Script'' panel. They should all use &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt; to get appropriate data to display.&lt;br /&gt;
&lt;br /&gt;
The synchronization happens through basic Firebug mechanisms like, &amp;lt;code&amp;gt;updateSelection&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;updateLocation&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New Debugger Architecture ==&lt;br /&gt;
=== Panels ===&lt;br /&gt;
The Script panel needs to be built on top of JSD2, remote protocol and Firebug remoting API. Remoting is already supported by [[HTTP Monitor]].&lt;br /&gt;
&lt;br /&gt;
First of all, take a look a the following diagram.&lt;br /&gt;
&lt;br /&gt;
[[Image:New-script-panel-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerClient''' This object comes from Firefox platform and is responsible for connection to the server back-end. The object maintains the underlying transport layer, it's responsible for tab attach/detach, it implements basic packets send and receive logic. The implementation is currently within ''resource://gre/modules/devtools/dbg-client.jsm'' module.&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerClientModule''' This module (singleton, one per Firebug instance) represents a wrapper around ''DebuggerClient''. It implements connection setup and initialization (e.g. port number). This object represents the ''connection'' in Firebug and should be shared by all ''remotable'' tools (e.g. the Script panel, Net panel, Profiler, etc.). Name of this module isn't probably descriptive enough, it could be changed. This object (or related object) could also replace the ''TabWatcher''.&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerTool''' This object implements API related to debugging (typical methods: stepIn, stepOut, setBreakpoint, etc.). The Script panel should always consume debugger API through this object. ''DebuggerTool'' registers itself as a ''DebuggerClientModule'' and thus gets all necessary events from the back-end (e.g. onConnect, onThreadAttached, etc.)&lt;br /&gt;
&lt;br /&gt;
* '''ScriptPanel''' Represents debugger UI and listens mostly to ''onStartDebugging'' and ''onStopDebugging'' events. Those are used to properly updated the panel's UI. &lt;br /&gt;
&lt;br /&gt;
* '''ScriptView''' This object is currently based on Orion (but could be replaced by CodeMirror, see [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]). The main responsibility of this object is displaying the source code (using color syntax highlight).&lt;br /&gt;
&lt;br /&gt;
* '''CallstackPanel''' This panel displays list of frames when the debugger is halted. The frame list is synchronized with ThreadClient's stack frame cache using ''framesadded'' and ''framescleared'' events.&lt;br /&gt;
&lt;br /&gt;
* '''ThreadClient''' This object comes from Firefox platform and is responsible for tab-thread related logic.&lt;br /&gt;
&lt;br /&gt;
* '''BreakpointStore''' Responsible for breakpoint persistence across Firefox restarts (in breakpoint.json file).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Grips ===&lt;br /&gt;
A grip represents handle to server side object (see [https://wiki.mozilla.org/Remote_Debugging_Protocol#Grips RDP] for more details).&lt;br /&gt;
&lt;br /&gt;
Firebug framework introduces several objects that deals with these handles, see the next diagram.&lt;br /&gt;
&lt;br /&gt;
[[File:Grips-architecture.jpg]]&lt;br /&gt;
&lt;br /&gt;
* '''GripFactory''' This is the place where grips instances are created. Every grip object is associated with a '''class''' (see RDP) and uses '''Firebug.registerGrip''' to register itself. This factory uses a list of registered types and instantiates the right one according to the server side grip class attribute.&lt;br /&gt;
&lt;br /&gt;
* '''GripCache''' The cache is the place where panels and other parts of Firebug should ask for grip-objects. If the requested object is not in the cache a request is sent to the backend and a promise synchronously returned and asynchronously resolved. If the object is already in the cache a promise is returned and synchronously resolved. '''GripCache''' is the only place, which uses '''GripFactory'''. See more about [https://getfirebug.com/wiki/index.php/Remoting_Architecture#Asynchronous_Data_Access asynchronous data access].&lt;br /&gt;
&lt;br /&gt;
* '''ObjectGrip''' Represents a wrapper for '''RDP Grip'''&lt;br /&gt;
&lt;br /&gt;
* '''Property''' Represents a wrapper for '''RDP Property'''&lt;br /&gt;
&lt;br /&gt;
* '''FunctionGrip''' Represents a wrapper for a function object.&lt;br /&gt;
&lt;br /&gt;
* '''ScopeGrip''' Represents a wrapper for a scope object. This object is used by the '''Watch''' panel to show chain of current scopes.&lt;br /&gt;
&lt;br /&gt;
=== Breakpoints ===&lt;br /&gt;
This section describes architecture design for debugger breakpoints.&lt;br /&gt;
&lt;br /&gt;
[[File:Breakpoints-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
* '''BreakpointStore''' The main component implementing public API for breakpoint creation and removal. This object is also responsible for client side persistence and initialization. There is one instance of this object per browser window (i.e. per Firebug). So, if a breakpoint is created in one context it automatically appears in all contexts that are using the same URL.&lt;br /&gt;
* '''FunctionMonitor''', '''ScriptPanel''', '''BreakpointPanel''', '''ConsolePanel''' These represent example objects that are dealing with breakpoints. There is and can be even more such objects in the future. All these objects use API implemented by '''BreakpointStore''' object. These objects also register themselves as ''DebuggerTool'' listeners to be notified about breakpoint related changes.&lt;br /&gt;
* '''DebuggerTool''' is responsible for breakpoint creation/removal on the server side. '''DebuggerTool''' registers itself as '''BreakpointStore''' listener to be notified about breakpoint creation/removal and sync the server side (i.e. create or remove breakpoints on the server side). There is one instance of this object per context.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See an example of a breakpoint creation (using the Script panel UI):&lt;br /&gt;
&lt;br /&gt;
[[File:Breakpoint-add-sequence.png]]&lt;br /&gt;
&lt;br /&gt;
* The user clicks on '''ScriptView''' breakpoint column. It's currently based on Orion, but it could be also CodeMirror in the future.&lt;br /&gt;
* '''ScriptView''' notifies '''ScriptPanel''' about the action.&lt;br /&gt;
* '''ScriptPanel''' is using '''BreakpointStore''' API to create a breakpoint. It calls ''addBreakpoint''. Breakpoint creation is asynchronous since the server side needs to be notified through TCP/IP. UI objects (e.g. panels) should wait for ''onBreakpointAdded'' event to update themselves.&lt;br /&gt;
* '''BreakpointStore''' sends ''onAddBreakpoint'' event to all registered listeners. These listeners are mostly all '''DebuggerTool''' instances (one per context) and also all UI object that want to display a temporary waiting-icon at the place where the breakpoint will (asynchronously) appear.&lt;br /&gt;
* '''DebuggerTool''' uses its associated '''ThreadClient''' to create a breakpoint on the server side. Each '''DebuggerTool''' instance will do it for its context. This way all contexts will be updated.&lt;br /&gt;
* '''ThreadClient''' sends packet to the server side and waits for asynchronous response.&lt;br /&gt;
* '''DebuggerTool''' has a direct (function) callback that is executed as soon as the response comes back from the server. Breakpoint's location is auto-corrected at this point if needed.&lt;br /&gt;
* '''DebuggerTool''' notifies all registered listeners (usually panels coming from the same context) about added breakpoint. It sends &amp;quot;onBreakpointAdded&amp;quot; event to the ''ScriptPanel'' in this scenario.&lt;br /&gt;
* '''ScriptPanel''' calls ''updateBreakpoint'' so, the '''ScriptView''' can update itself. Remove the waiting-icon and display the new breakpoint at the right location. It might also scroll to make sure that auto-corrected location is visible to the user.&lt;br /&gt;
&lt;br /&gt;
==== Breakpoint Condition Editor ====&lt;br /&gt;
Let's yet see a sequence of actions describing what happens if '''BreakpointConditionEditor''' is opened at line with no breakpoint. In such case a breakpoint needs to be automatically created and used if the user actually creates a condition.&lt;br /&gt;
&lt;br /&gt;
[[File:Breakpoint-condition-editor.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''onGutterClick''' The user right clicks on the breakpoint column&lt;br /&gt;
* '''startBreakpointConditionEditor''' An event is sent to the '''ScriptPanel'''. Note that the '''ScriptView''' communicates with the '''ScriptPanel''' only through events.&lt;br /&gt;
* A helper '''initializeBreakpointConditionEditor''' is executed. This method creates a temporary BP structure with condition set to an empty string.&lt;br /&gt;
* '''initializeBreakpoint''' method is called to display breakpoint loading icon. The temporary BP is passed into it.&lt;br /&gt;
* The '''ScriptView''' sends '''addBreakpoint''' event back to the '''SccriptPanel'''. This event is fake and mimicking user click on the breakpoint column.&lt;br /&gt;
* The '''ScriptPanel''' uses '''BreakpointStore''' to add a breakpoint. Just like it always does if the user clicks on the breakpoint column to create (or remove) a breakpoint. But it passes the condition to it so, the breakpoint is not stored immediately (kind of a hack).&lt;br /&gt;
* '''BreakpointStore''' sends an event to all listeners, '''DebuggerTool''' instances - '''onAddBreakpoint'''.&lt;br /&gt;
* '''DebuggerTool''' sets the breakpoint on the server side. We need to do this before displaying the '''BreakpointConditionEditor''' since we need to know the correct line. Note that the user could have clicked on non-executable line.&lt;br /&gt;
* '''onBreakpointAdded''' event is sent from '''DebuggerTool''' to '''ScriptPanel''' and the condition editor can be finally displayed to the user by calling '''openBreakpointConditionEditor'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''The entire feature is currently wired into the current breakpoint architecture. It should be rather implemented as an independent module''&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/Script_Panel_Refactoring</id>
		<title>Script Panel Refactoring</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/Script_Panel_Refactoring"/>
				<updated>2013-05-09T12:57:07Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Breakpoints */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page summarizes refactoring the Firebug debugger to use JSD2 and adding support for remote JavaScript debugging. [http://code.google.com/p/fbug/issues/detail?id=5421 Issue 5421] tracks the actual changes done.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
Firebug Wiki:&lt;br /&gt;
* [[HTTP Monitor]]&lt;br /&gt;
* [[Firebug 1.7: Mozilla Backend|Firebug 1.7 BTI]]&lt;br /&gt;
* [[Net Panel Architecture Review]]&lt;br /&gt;
* [[Remoting Prototype#Prototype|Remoting Prototype]]&lt;br /&gt;
* [[Remoting Architecture|Remoting Architecture]]&lt;br /&gt;
* [[JSD2 Adoption|JSD2 Adoption]]&lt;br /&gt;
&lt;br /&gt;
Mozilla Wiki:&lt;br /&gt;
* [https://wiki.mozilla.org/Debugger Debugger]&lt;br /&gt;
* [https://wiki.mozilla.org/Debugger_Client_API Debugger Client API]&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Guide JS Debugger API Guide]&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference JS Debugger API Reference]&lt;br /&gt;
* [https://wiki.mozilla.org/DevTools/Features/Debugger DevTools Debugger]&lt;br /&gt;
* [https://wiki.mozilla.org/Remote_Debugging_Protocol Remote Debugging Protocol]&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
* Adopt JSD2 (get rid of all JSD1 APIs)&lt;br /&gt;
* Support remote debugging&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
* [http://code.google.com/p/fbug/issues/detail?id=5421 Issue 5421]: Implement JSD2&lt;br /&gt;
* [http://code.google.com/p/fbug/issues/detail?id=5837 Issue 5837]: Implement remote debugging&lt;br /&gt;
&lt;br /&gt;
== JSD2 API Requirements ==&lt;br /&gt;
The following list summarizes the high-level features that Firebug needs to support. It should be verified that all the features can re-implemented on top of JSD2 before starting the refactoring.&lt;br /&gt;
&lt;br /&gt;
* List of scripts available on selected tab (including static, events and evaluated scripts) including iframes &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#findScripts%28%29 Debugger.findScripts()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stepping (into, over, out, resume, current line)&lt;br /&gt;
* Support for &amp;lt;code&amp;gt;debugger;&amp;lt;/code&amp;gt; keyword &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onDebuggerStatement%28%29 Debugger.onDebuggerStatement()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Support for breakpoints (add, remove, enable, disabled, conditional, list of existing breakpoints) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Script#Methods Debugger.Script methods]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Recognize executable lines&lt;br /&gt;
* Dynamic eval in a frame (used e.g. by the [[Watch Side Panel]] when the debugger is halted) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#eval%28%29 Debugger.Frame.eval()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#evalWithBindings%28%29 Debugger.Frame.evalWithBindings()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Get stack frames (including passed arguments) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#getNewestFrame%28%29 Debugger.getNewestFrame()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#Accessor_properties Debugger.Frame.older]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Scope chain variable exploring (with &amp;amp; closure scopes). It should be possible to see all values. &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#Accessor_properties Debugger.Frame.environment]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Break on next call&lt;br /&gt;
* Profiling (was part of JSD1)&lt;br /&gt;
* Tracking (break on) throw/catch/error &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onThrow%28%29 Debugger.onThrow()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onError%28%29 Debugger.onError()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tracking (monitoring) function calls&lt;br /&gt;
* Freezing page UI if debugger is halted (including timeouts, intervals and worker threads)&lt;br /&gt;
&lt;br /&gt;
=== Not Ready in JSD2 ===&lt;br /&gt;
* There is not source for evals.&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onNewScript%28%29 new Function scripts?]&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=676586 Meta bug]: Implement a script Debugger&lt;br /&gt;
** As soon as this one is fixed&lt;br /&gt;
** Profiling is unrelated to JSD2. What is the plan here?&lt;br /&gt;
** Tracking (break on) throw/catch/error; also what is the plan?&lt;br /&gt;
* Conditional breakpoints ([https://bugzilla.mozilla.org/show_bug.cgi?id=740825 bug 740825])&lt;br /&gt;
&lt;br /&gt;
== Current Debugger Architecture ==&lt;br /&gt;
This section describes the current debugger architecture.&lt;br /&gt;
&lt;br /&gt;
[[File:Current-debugger-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
There are several layers/objects so, let's describe them step by step starting from the bottom.&lt;br /&gt;
&lt;br /&gt;
* Backend: JSD1, FirebugService, Debugger&lt;br /&gt;
* Frontend: JavaScriptTool, ScriptPanel&lt;br /&gt;
&lt;br /&gt;
=== JSD1 ===&lt;br /&gt;
This layer represents JSD1 platform API. These API allows to implement script debuggers and represent direct competition to JSD2 API. Of course this layer should entirely disappear and should be replaced by JSD2.&lt;br /&gt;
&lt;br /&gt;
=== Firebug Service ===&lt;br /&gt;
Firebug service is implemented as [https://developer.mozilla.org/en-US/docs/JavaScript_code_modules/Using?redirectlocale=en-US&amp;amp;redirectslug=Using_JavaScript_code_modules js module] on top of JSD1 layer. The object is called ''FBS'' and it's purpose is to wrap JSD1 API so, they are not directly accessed anywhere else. This layer also maintain list of registered debuggers (usually &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; module) and fires various events to them (e.g. ''onToggleBreakpoint'', ''onToggleMonitor'', etc.) or execute theirs callback (e.g. ''onBreak'', ''onFunctionCall'', ''onError'', ''onThrow'', ''onScriptCreated'', etc.) &lt;br /&gt;
&lt;br /&gt;
Main responsibilities:&lt;br /&gt;
* Activate/deactivate JSD in the browser. The activation is global for all current browser windows.&lt;br /&gt;
* Hook debugger events (interrupts, break on a breakpoint, etc.)&lt;br /&gt;
* Maintains list of registered debuggers (there is usually just one - Firebug debugger) and sends events to them.&lt;br /&gt;
* Manages nested event loop that is created for the debugger UI when page JS execution breaks.&lt;br /&gt;
* Sets/removes/enables/disables/saves/loads breakpoints&lt;br /&gt;
* Implements debugger stepping over/in/out/runUntil&lt;br /&gt;
* Monitors function calls&lt;br /&gt;
* Starts/stops profiling&lt;br /&gt;
* Tracks exceptions and errors (not working well)&lt;br /&gt;
* Tracks compiled scripts (not all of them)&lt;br /&gt;
&lt;br /&gt;
=== Debugger ===&lt;br /&gt;
This object is derived from &amp;lt;code&amp;gt;Firebug.Module&amp;lt;/code&amp;gt; and represents Firebug's debugger. It's also registered as a debugger into ''Firebug Service'' (FBS). This object should be the only one accessing FBS. It calls FBS API and receives various callbacks and events.&lt;br /&gt;
&lt;br /&gt;
This object implements methods that can be used by the Script panel or other parts of Firebug (e.g. by those panels which implements BON).&lt;br /&gt;
&lt;br /&gt;
Some examples of the API:&lt;br /&gt;
* ''evaluate'', ''evaluateInCallingFrame''&lt;br /&gt;
* ''breakNow'', ''getCurrentStackTrace''&lt;br /&gt;
* ''rerun''&lt;br /&gt;
* ''stepOver'', ''stepInto'', ''stepOut'', ''runUntil, ''resume''&lt;br /&gt;
* ''setBreakpoint'', ''clearBrakpoint'', etc.&lt;br /&gt;
* ''monitorFunction'', ''unmonitorFunction''&lt;br /&gt;
* ''monitorScript'', ''unmonitorScript''&lt;br /&gt;
* ''activateDebugger'', ''deactivateDebugger''&lt;br /&gt;
&lt;br /&gt;
Implementation of these methods is based on FBS API.&lt;br /&gt;
&lt;br /&gt;
There is also &amp;lt;code&amp;gt;Firebug.DebuggerListener&amp;lt;/code&amp;gt; that defines the interface used by FBS &lt;br /&gt;
* ''onStop'', ''onResume'', ''onThrow'', ''onError'', ''onScriptCreated'' (there is more ''onScriptCreated'' events)&lt;br /&gt;
&lt;br /&gt;
This object is ''observable'' and it activates the underlying JSD only if an observer exists. The observer is currently the Script panel even if it would make a bit more sense if it's actually the ''JavaScriptTool''.&lt;br /&gt;
&lt;br /&gt;
=== JavaScriptTool ===&lt;br /&gt;
This object is part or BTI and represents a javascript debugger tool. This object is like a proxy sitting between &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; and the &amp;lt;code&amp;gt;ScriptPanel&amp;lt;/code&amp;gt;. The current implementation is in-process only so, based on direct &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; API calls.&lt;br /&gt;
&lt;br /&gt;
API of the tool is as follows:&lt;br /&gt;
* ''setBreakpoint'', ''clearBreakpoint'', ''enableBreakpoint'', ''disableBreakpoint'', ''isBreakpointDisabled'', ''getBreakpointCondition''&lt;br /&gt;
* ''rerun''&lt;br /&gt;
* ''resumeJavaScript'', ''stepOver'', ''stepInto'', ''stepOut'', ''runUntil''&lt;br /&gt;
* ''onConnect'', ''onDisconnect''&lt;br /&gt;
* ''onStartDebugging'', ''onStopDebugging''&lt;br /&gt;
* ''onCompilationUnit''&lt;br /&gt;
&lt;br /&gt;
The BTI is used by [[Crossfire]]. Crossfire has the following structure:&lt;br /&gt;
&lt;br /&gt;
    Crossfire Panel&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Module&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Server&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Socket Transport&lt;br /&gt;
&lt;br /&gt;
When starting up it does the following.&lt;br /&gt;
&lt;br /&gt;
# Register tools (e.g. console, inspector, ...)&lt;br /&gt;
# Start server&lt;br /&gt;
# Create socket transport&lt;br /&gt;
# Add BTI listener&lt;br /&gt;
# Set connection status&lt;br /&gt;
&lt;br /&gt;
=== Script Panel ===&lt;br /&gt;
The [[Script Panel]] sits at the top of the whole stack of layers/objects. It represents the debugger UI (a view + a controller). The implementation of this object is quite extensive since it also includes the source code view and viewport (see &amp;lt;code&amp;gt;[https://github.com/firebug/firebug/blob/master/extension/content/firebug/js/sourceBox.js firebug/js/sourceBox.js]&amp;lt;/code&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
The ''Script'' panel should never access the &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; directly. It should always use the &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
So, for example, if the user clicks on the Breakpoint Column, the action is handled by the ''Script'' panel, forwarded to the &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt;, which forwards it to the &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt;, which forwards it to &amp;lt;code&amp;gt;FBS&amp;lt;/code&amp;gt;. Finally, &amp;lt;code&amp;gt;FBS&amp;lt;/code&amp;gt; is using JSD1 API to set the breakpoint.&lt;br /&gt;
&lt;br /&gt;
There are side panels ([[Breakpoints Side Panel|Breakpoints]], [[Watch Side Panel|Watch]] and [[Stack Side Panel|Stack]]), which are synchronized automatically with the ''Script'' panel. They should all use &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt; to get appropriate data to display.&lt;br /&gt;
&lt;br /&gt;
The synchronization happens through basic Firebug mechanisms like, &amp;lt;code&amp;gt;updateSelection&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;updateLocation&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New Debugger Architecture ==&lt;br /&gt;
=== Panels ===&lt;br /&gt;
The Script panel needs to be built on top of JSD2, remote protocol and Firebug remoting API. Remoting is already supported by [[HTTP Monitor]].&lt;br /&gt;
&lt;br /&gt;
First of all, take a look a the following diagram.&lt;br /&gt;
&lt;br /&gt;
[[Image:New-script-panel-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerClient''' This object comes from Firefox platform and is responsible for connection to the server back-end. The object maintains the underlying transport layer, it's responsible for tab attach/detach, it implements basic packets send and receive logic. The implementation is currently within ''resource://gre/modules/devtools/dbg-client.jsm'' module.&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerClientModule''' This module (singleton, one per Firebug instance) represents a wrapper around ''DebuggerClient''. It implements connection setup and initialization (e.g. port number). This object represents the ''connection'' in Firebug and should be shared by all ''remotable'' tools (e.g. the Script panel, Net panel, Profiler, etc.). Name of this module isn't probably descriptive enough, it could be changed. This object (or related object) could also replace the ''TabWatcher''.&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerTool''' This object implements API related to debugging (typical methods: stepIn, stepOut, setBreakpoint, etc.). The Script panel should always consume debugger API through this object. ''DebuggerTool'' registers itself as a ''DebuggerClientModule'' and thus gets all necessary events from the back-end (e.g. onConnect, onThreadAttached, etc.)&lt;br /&gt;
&lt;br /&gt;
* '''ScriptPanel''' Represents debugger UI and listens mostly to ''onStartDebugging'' and ''onStopDebugging'' events. Those are used to properly updated the panel's UI. &lt;br /&gt;
&lt;br /&gt;
* '''ScriptView''' This object is currently based on Orion (but could be replaced by CodeMirror, see [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]). The main responsibility of this object is displaying the source code (using color syntax highlight).&lt;br /&gt;
&lt;br /&gt;
* '''CallstackPanel''' This panel displays list of frames when the debugger is halted. The frame list is synchronized with ThreadClient's stack frame cache using ''framesadded'' and ''framescleared'' events.&lt;br /&gt;
&lt;br /&gt;
* '''ThreadClient''' This object comes from Firefox platform and is responsible for tab-thread related logic.&lt;br /&gt;
&lt;br /&gt;
* '''BreakpointStore''' Responsible for breakpoint persistence across Firefox restarts (in breakpoint.json file).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Grips ===&lt;br /&gt;
A grip represents handle to server side object (see [https://wiki.mozilla.org/Remote_Debugging_Protocol#Grips RDP] for more details).&lt;br /&gt;
&lt;br /&gt;
Firebug framework introduces several objects that deals with these handles, see the next diagram.&lt;br /&gt;
&lt;br /&gt;
[[File:Grips-architecture.jpg]]&lt;br /&gt;
&lt;br /&gt;
* '''GripFactory''' This is the place where grips instances are created. Every grip object is associated with a '''class''' (see RDP) and uses '''Firebug.registerGrip''' to register itself. This factory uses a list of registered types and instantiates the right one according to the server side grip class attribute.&lt;br /&gt;
&lt;br /&gt;
* '''GripCache''' The cache is the place where panels and other parts of Firebug should ask for grip-objects. If the requested object is not in the cache a request is sent to the backend and a promise synchronously returned and asynchronously resolved. If the object is already in the cache a promise is returned and synchronously resolved. '''GripCache''' is the only place, which uses '''GripFactory'''. See more about [https://getfirebug.com/wiki/index.php/Remoting_Architecture#Asynchronous_Data_Access asynchronous data access].&lt;br /&gt;
&lt;br /&gt;
* '''ObjectGrip''' Represents a wrapper for '''RDP Grip'''&lt;br /&gt;
&lt;br /&gt;
* '''Property''' Represents a wrapper for '''RDP Property'''&lt;br /&gt;
&lt;br /&gt;
* '''FunctionGrip''' Represents a wrapper for a function object.&lt;br /&gt;
&lt;br /&gt;
* '''ScopeGrip''' Represents a wrapper for a scope object. This object is used by the '''Watch''' panel to show chain of current scopes.&lt;br /&gt;
&lt;br /&gt;
=== Breakpoints ===&lt;br /&gt;
This section describes architecture design for debugger breakpoints.&lt;br /&gt;
&lt;br /&gt;
[[File:Breakpoints-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
* '''BreakpointStore''' The main component implementing public API for breakpoint creation and removal. This object is also responsible for client side persistence and initialization. There is one instance of this object per browser window (i.e. per Firebug). So, if a breakpoint is created in one context it automatically appears in all contexts that are using the same URL.&lt;br /&gt;
* '''FunctionMonitor''', '''ScriptPanel''', '''BreakpointPanel''', '''ConsolePanel''' These represent example objects that are dealing with breakpoints. There is and can be even more such objects in the future. All these objects use API implemented by '''BreakpointStore''' object. These objects also register themselves as ''DebuggerTool'' listeners to be notified about breakpoint related changes.&lt;br /&gt;
* '''DebuggerTool''' is responsible for breakpoint creation/removal on the server side. '''DebuggerTool''' registers itself as '''BreakpointStore''' listener to be notified about breakpoint creation/removal and sync the server side (i.e. create or remove breakpoints on the server side). There is one instance of this object per context.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See an example of a breakpoint creation (using the Script panel UI):&lt;br /&gt;
&lt;br /&gt;
[[File:Breakpoint-add-sequence.png]]&lt;br /&gt;
&lt;br /&gt;
* The user clicks on '''ScriptView''' breakpoint column. It's currently based on Orion, but it could be also CodeMirror in the future.&lt;br /&gt;
* '''ScriptView''' notifies '''ScriptPanel''' about the action.&lt;br /&gt;
* '''ScriptPanel''' is using '''BreakpointStore''' API to create a breakpoint. It calls ''addBreakpoint''. Breakpoint creation is asynchronous since the server side needs to be notified through TCP/IP. UI objects (e.g. panels) should wait for ''onBreakpointAdded'' event to update themselves.&lt;br /&gt;
* '''BreakpointStore''' sends ''onAddBreakpoint'' event to all registered listeners. These listeners are mostly all '''DebuggerTool''' instances (one per context) and also all UI object that want to display a temporary waiting-icon at the place where the breakpoint will (asynchronously) appear.&lt;br /&gt;
* '''DebuggerTool''' uses its associated '''ThreadClient''' to create a breakpoint on the server side. Each '''DebuggerTool''' instance will do it for its context. This way all contexts will be updated.&lt;br /&gt;
* '''ThreadClient''' sends packet to the server side and waits for asynchronous response.&lt;br /&gt;
* '''DebuggerTool''' has a direct (function) callback that is executed as soon as the response comes back from the server. Breakpoint's location is auto-corrected at this point if needed.&lt;br /&gt;
* '''DebuggerTool''' notifies all registered listeners (usually panels coming from the same context) about added breakpoint. It sends &amp;quot;onBreakpointAdded&amp;quot; event to the ''ScriptPanel'' in this scenario.&lt;br /&gt;
* '''ScriptPanel''' calls ''updateBreakpoint'' so, the '''ScriptView''' can update itself. Remove the waiting-icon and display the new breakpoint at the right location. It might also scroll to make sure that auto-corrected location is visible to the user.&lt;br /&gt;
&lt;br /&gt;
==== Breakpoint Condition Editor ====&lt;br /&gt;
Let's yet see a sequence of actions describing what happens if '''BreakpointConditionEditor''' is opened at line with no breakpoint. In such case a breakpoint needs to be automatically created and used if the user actually creates a condition.&lt;br /&gt;
&lt;br /&gt;
[[File:Breakpoint-condition-editor.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''onGutterClick''' The user right clicks on the breakpoint column&lt;br /&gt;
* '''startBreakpointConditionEditor''' An event is sent to the '''ScriptPanel'''. Note that the '''ScriptView''' communicates with the '''ScriptPanel''' only through events.&lt;br /&gt;
* A helper '''initializeBreakpointConditionEditor''' is executed. This method creates a temporary BP structure with condition set to an empty string.&lt;br /&gt;
* '''initializeBreakpoint''' method is called to display breakpoint loading icon. The temporary BP is passed into it.&lt;br /&gt;
* The '''ScriptView''' sends '''addBreakpoint''' event back to the '''SccriptPanel'''. This event is fake and mimicking user click on the breakpoint column.&lt;br /&gt;
* The '''ScriptPanel''' uses '''BreakpointStore''' to add a breakpoint. Just like it always does if the user clicks on the breakpoint column to create (or remove) a breakpoint. But it passes the condition to it so, the breakpoint is not stored immediately (kind of a hack).&lt;br /&gt;
* '''BreakpointStore''' sends an event to all listeners, '''DebuggerTool''' instances - '''onAddBreakpoint'''.&lt;br /&gt;
* '''DebuggerTool''' sets the breakpoint on the server side. We need to do this before displaying the '''BreakpointConditionEditor''' since we need to know the correct line. Note that the user could have clicked on non-executable line.&lt;br /&gt;
* '''onBreakpointAdded''' event is sent from '''DebuggerTool''' to '''ScriptPanel''' and the condition editor can be finally displayed to the user by calling '''openBreakpointConditionEditor'''&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/File:Breakpoint-condition-editor.png</id>
		<title>File:Breakpoint-condition-editor.png</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/File:Breakpoint-condition-editor.png"/>
				<updated>2013-05-09T12:45:15Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-04-18T11:44:39Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* [[Script Panel Refactoring]]&lt;br /&gt;
* [[Remoting Architecture]]&lt;br /&gt;
* [[Remote Selector]]&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Error breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Monitor breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;XHR breakpoints (local scenario only)&amp;lt;/strike&amp;gt;[https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** &amp;lt;strike&amp;gt;Mutation breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857], [https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** &amp;lt;strike&amp;gt;respect 'actualLocation' sent back from the server (corrected BP location)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;The breakpoint condition editor does not disappear when clicking outside of it.&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** The bp-condition-editor doesn't scroll&lt;br /&gt;
* Use CodeMirror instead of Orion? See [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Restore expanded state of the Watch window across stepping.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see [https://bugzilla.mozilla.org/show_bug.cgi?id=797876 bug 797876]&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Edit Breakpoint Condition&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** &amp;lt;strike&amp;gt;Break on… features&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
* &amp;lt;strike&amp;gt;Debugging two tabs at once (there is a warning).&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Source Maps: https://github.com/mozilla/source-map&lt;br /&gt;
* Script panel search&lt;br /&gt;
** Search multiple files&lt;br /&gt;
** Search for regular expression&lt;br /&gt;
** Goto line&lt;br /&gt;
* FirebugRep.supportsObject() could use third parameter for remote-object-types&lt;br /&gt;
** See also Simon's [https://github.com/firebug/firebug/commit/5c220f5ea1045e7921dd92d8c255e9e4b35b85d9#commitcomment-2536753 comment]&lt;br /&gt;
* The Watch panel&lt;br /&gt;
** Changing local variable or argument needs environment actor re-fetch from the server&lt;br /&gt;
* Script panel&lt;br /&gt;
** execution line disappears when switching to another tab and back&lt;br /&gt;
** When Firefox exists with the debugger active (context.stopped) the process hangs in the memory&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing reports in Firebug issue list use label: &amp;lt;b&amp;gt;jsd2&amp;lt;/b&amp;gt; so, you can [http://code.google.com/p/fbug/issues/list?can=2&amp;amp;q=label%3Ajsd2 search] for them.&lt;br /&gt;
&lt;br /&gt;
=== Bugzilla ===&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=800200 Bug 800200] - rm JSD&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=837723 Bug 837723] - Introduce a new method in IJSDebugger allowing to get DO referent.&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-04-17T16:29:09Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* [[Script Panel Refactoring]]&lt;br /&gt;
* [[Remoting Architecture]]&lt;br /&gt;
* [[Remote Selector]]&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Error breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Monitor breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;XHR breakpoints (local scenario only)&amp;lt;/strike&amp;gt;[https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** &amp;lt;strike&amp;gt;Mutation breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857], [https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** &amp;lt;strike&amp;gt;respect 'actualLocation' sent back from the server (corrected BP location)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;The breakpoint condition editor does not disappear when clicking outside of it.&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** The bp-condition-editor doesn't scroll&lt;br /&gt;
* Use CodeMirror instead of Orion? See [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Restore expanded state of the Watch window across stepping.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see [https://bugzilla.mozilla.org/show_bug.cgi?id=797876 bug 797876]&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Edit Breakpoint Condition&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
* Debugging two tabs at once.&lt;br /&gt;
* Source Maps: https://github.com/mozilla/source-map&lt;br /&gt;
* Script panel search&lt;br /&gt;
** Search multiple files&lt;br /&gt;
** Search for regular expression&lt;br /&gt;
** Goto line&lt;br /&gt;
* FirebugRep.supportsObject() could use third parameter for remote-object-types&lt;br /&gt;
** See also Simon's [https://github.com/firebug/firebug/commit/5c220f5ea1045e7921dd92d8c255e9e4b35b85d9#commitcomment-2536753 comment]&lt;br /&gt;
* The Watch panel&lt;br /&gt;
** Changing local variable or argument needs environment actor re-fetch from the server&lt;br /&gt;
* Script panel&lt;br /&gt;
** execution line disappears when switching to another tab and back&lt;br /&gt;
** When Firefox exists with the debugger active (context.stopped) the process hangs in the memory&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing reports in Firebug issue list use label: &amp;lt;b&amp;gt;jsd2&amp;lt;/b&amp;gt; so, you can [http://code.google.com/p/fbug/issues/list?can=2&amp;amp;q=label%3Ajsd2 search] for them.&lt;br /&gt;
&lt;br /&gt;
=== Bugzilla ===&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=800200 Bug 800200] - rm JSD&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=837723 Bug 837723] - Introduce a new method in IJSDebugger allowing to get DO referent.&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-04-17T14:52:12Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* [[Script Panel Refactoring]]&lt;br /&gt;
* [[Remoting Architecture]]&lt;br /&gt;
* [[Remote Selector]]&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Error breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Monitor breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;XHR breakpoints (local scenario only)&amp;lt;/strike&amp;gt;[https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** &amp;lt;strike&amp;gt;Mutation breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857], [https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** &amp;lt;strike&amp;gt;respect 'actualLocation' sent back from the server (corrected BP location)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;The breakpoint condition editor does not disappear when clicking outside of it.&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** The bp-condition-editor doesn't scroll&lt;br /&gt;
* Use CodeMirror instead of Orion? See [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Restore expanded state of the Watch window across stepping.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see [https://bugzilla.mozilla.org/show_bug.cgi?id=797876 bug 797876]&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Edit Breakpoint Condition&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
* Debugging two tabs at once.&lt;br /&gt;
* Source Maps: https://github.com/mozilla/source-map&lt;br /&gt;
* Script panel search&lt;br /&gt;
** Search multiple files&lt;br /&gt;
** Search for regular expression&lt;br /&gt;
** Goto line&lt;br /&gt;
* FirebugRep.supportsObject() could use third parameter for remote-object-types&lt;br /&gt;
** See also Simon's [https://github.com/firebug/firebug/commit/5c220f5ea1045e7921dd92d8c255e9e4b35b85d9#commitcomment-2536753 comment]&lt;br /&gt;
* The Watch panel&lt;br /&gt;
** Changing local variable or argument needs environment actor re-fetch from the server&lt;br /&gt;
* Script panel&lt;br /&gt;
** execution line disappears when switching to another tab and back&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing reports in Firebug issue list use label: &amp;lt;b&amp;gt;jsd2&amp;lt;/b&amp;gt; so, you can [http://code.google.com/p/fbug/issues/list?can=2&amp;amp;q=label%3Ajsd2 search] for them.&lt;br /&gt;
&lt;br /&gt;
=== Bugzilla ===&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=800200 Bug 800200] - rm JSD&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=837723 Bug 837723] - Introduce a new method in IJSDebugger allowing to get DO referent.&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/Script_Panel_Refactoring</id>
		<title>Script Panel Refactoring</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/Script_Panel_Refactoring"/>
				<updated>2013-04-15T10:57:55Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Breakpoints */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page summarizes refactoring the Firebug debugger to use JSD2 and adding support for remote JavaScript debugging. [http://code.google.com/p/fbug/issues/detail?id=5421 Issue 5421] tracks the actual changes done.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
Firebug Wiki:&lt;br /&gt;
* [[HTTP Monitor]]&lt;br /&gt;
* [[Firebug 1.7: Mozilla Backend|Firebug 1.7 BTI]]&lt;br /&gt;
* [[Net Panel Architecture Review]]&lt;br /&gt;
* [[Remoting Prototype#Prototype|Remoting Prototype]]&lt;br /&gt;
* [[Remoting Architecture|Remoting Architecture]]&lt;br /&gt;
* [[JSD2 Adoption|JSD2 Adoption]]&lt;br /&gt;
&lt;br /&gt;
Mozilla Wiki:&lt;br /&gt;
* [https://wiki.mozilla.org/Debugger Debugger]&lt;br /&gt;
* [https://wiki.mozilla.org/Debugger_Client_API Debugger Client API]&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Guide JS Debugger API Guide]&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference JS Debugger API Reference]&lt;br /&gt;
* [https://wiki.mozilla.org/DevTools/Features/Debugger DevTools Debugger]&lt;br /&gt;
* [https://wiki.mozilla.org/Remote_Debugging_Protocol Remote Debugging Protocol]&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
* Adopt JSD2 (get rid of all JSD1 APIs)&lt;br /&gt;
* Support remote debugging&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
* [http://code.google.com/p/fbug/issues/detail?id=5421 Issue 5421]: Implement JSD2&lt;br /&gt;
* [http://code.google.com/p/fbug/issues/detail?id=5837 Issue 5837]: Implement remote debugging&lt;br /&gt;
&lt;br /&gt;
== JSD2 API Requirements ==&lt;br /&gt;
The following list summarizes the high-level features that Firebug needs to support. It should be verified that all the features can re-implemented on top of JSD2 before starting the refactoring.&lt;br /&gt;
&lt;br /&gt;
* List of scripts available on selected tab (including static, events and evaluated scripts) including iframes &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#findScripts%28%29 Debugger.findScripts()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stepping (into, over, out, resume, current line)&lt;br /&gt;
* Support for &amp;lt;code&amp;gt;debugger;&amp;lt;/code&amp;gt; keyword &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onDebuggerStatement%28%29 Debugger.onDebuggerStatement()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Support for breakpoints (add, remove, enable, disabled, conditional, list of existing breakpoints) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Script#Methods Debugger.Script methods]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Recognize executable lines&lt;br /&gt;
* Dynamic eval in a frame (used e.g. by the [[Watch Side Panel]] when the debugger is halted) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#eval%28%29 Debugger.Frame.eval()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#evalWithBindings%28%29 Debugger.Frame.evalWithBindings()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Get stack frames (including passed arguments) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#getNewestFrame%28%29 Debugger.getNewestFrame()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#Accessor_properties Debugger.Frame.older]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Scope chain variable exploring (with &amp;amp; closure scopes). It should be possible to see all values. &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#Accessor_properties Debugger.Frame.environment]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Break on next call&lt;br /&gt;
* Profiling (was part of JSD1)&lt;br /&gt;
* Tracking (break on) throw/catch/error &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onThrow%28%29 Debugger.onThrow()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onError%28%29 Debugger.onError()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tracking (monitoring) function calls&lt;br /&gt;
* Freezing page UI if debugger is halted (including timeouts, intervals and worker threads)&lt;br /&gt;
&lt;br /&gt;
=== Not Ready in JSD2 ===&lt;br /&gt;
* There is not source for evals.&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onNewScript%28%29 new Function scripts?]&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=676586 Meta bug]: Implement a script Debugger&lt;br /&gt;
** As soon as this one is fixed&lt;br /&gt;
** Profiling is unrelated to JSD2. What is the plan here?&lt;br /&gt;
** Tracking (break on) throw/catch/error; also what is the plan?&lt;br /&gt;
* Conditional breakpoints ([https://bugzilla.mozilla.org/show_bug.cgi?id=740825 bug 740825])&lt;br /&gt;
&lt;br /&gt;
== Current Debugger Architecture ==&lt;br /&gt;
This section describes the current debugger architecture.&lt;br /&gt;
&lt;br /&gt;
[[File:Current-debugger-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
There are several layers/objects so, let's describe them step by step starting from the bottom.&lt;br /&gt;
&lt;br /&gt;
* Backend: JSD1, FirebugService, Debugger&lt;br /&gt;
* Frontend: JavaScriptTool, ScriptPanel&lt;br /&gt;
&lt;br /&gt;
=== JSD1 ===&lt;br /&gt;
This layer represents JSD1 platform API. These API allows to implement script debuggers and represent direct competition to JSD2 API. Of course this layer should entirely disappear and should be replaced by JSD2.&lt;br /&gt;
&lt;br /&gt;
=== Firebug Service ===&lt;br /&gt;
Firebug service is implemented as [https://developer.mozilla.org/en-US/docs/JavaScript_code_modules/Using?redirectlocale=en-US&amp;amp;redirectslug=Using_JavaScript_code_modules js module] on top of JSD1 layer. The object is called ''FBS'' and it's purpose is to wrap JSD1 API so, they are not directly accessed anywhere else. This layer also maintain list of registered debuggers (usually &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; module) and fires various events to them (e.g. ''onToggleBreakpoint'', ''onToggleMonitor'', etc.) or execute theirs callback (e.g. ''onBreak'', ''onFunctionCall'', ''onError'', ''onThrow'', ''onScriptCreated'', etc.) &lt;br /&gt;
&lt;br /&gt;
Main responsibilities:&lt;br /&gt;
* Activate/deactivate JSD in the browser. The activation is global for all current browser windows.&lt;br /&gt;
* Hook debugger events (interrupts, break on a breakpoint, etc.)&lt;br /&gt;
* Maintains list of registered debuggers (there is usually just one - Firebug debugger) and sends events to them.&lt;br /&gt;
* Manages nested event loop that is created for the debugger UI when page JS execution breaks.&lt;br /&gt;
* Sets/removes/enables/disables/saves/loads breakpoints&lt;br /&gt;
* Implements debugger stepping over/in/out/runUntil&lt;br /&gt;
* Monitors function calls&lt;br /&gt;
* Starts/stops profiling&lt;br /&gt;
* Tracks exceptions and errors (not working well)&lt;br /&gt;
* Tracks compiled scripts (not all of them)&lt;br /&gt;
&lt;br /&gt;
=== Debugger ===&lt;br /&gt;
This object is derived from &amp;lt;code&amp;gt;Firebug.Module&amp;lt;/code&amp;gt; and represents Firebug's debugger. It's also registered as a debugger into ''Firebug Service'' (FBS). This object should be the only one accessing FBS. It calls FBS API and receives various callbacks and events.&lt;br /&gt;
&lt;br /&gt;
This object implements methods that can be used by the Script panel or other parts of Firebug (e.g. by those panels which implements BON).&lt;br /&gt;
&lt;br /&gt;
Some examples of the API:&lt;br /&gt;
* ''evaluate'', ''evaluateInCallingFrame''&lt;br /&gt;
* ''breakNow'', ''getCurrentStackTrace''&lt;br /&gt;
* ''rerun''&lt;br /&gt;
* ''stepOver'', ''stepInto'', ''stepOut'', ''runUntil, ''resume''&lt;br /&gt;
* ''setBreakpoint'', ''clearBrakpoint'', etc.&lt;br /&gt;
* ''monitorFunction'', ''unmonitorFunction''&lt;br /&gt;
* ''monitorScript'', ''unmonitorScript''&lt;br /&gt;
* ''activateDebugger'', ''deactivateDebugger''&lt;br /&gt;
&lt;br /&gt;
Implementation of these methods is based on FBS API.&lt;br /&gt;
&lt;br /&gt;
There is also &amp;lt;code&amp;gt;Firebug.DebuggerListener&amp;lt;/code&amp;gt; that defines the interface used by FBS &lt;br /&gt;
* ''onStop'', ''onResume'', ''onThrow'', ''onError'', ''onScriptCreated'' (there is more ''onScriptCreated'' events)&lt;br /&gt;
&lt;br /&gt;
This object is ''observable'' and it activates the underlying JSD only if an observer exists. The observer is currently the Script panel even if it would make a bit more sense if it's actually the ''JavaScriptTool''.&lt;br /&gt;
&lt;br /&gt;
=== JavaScriptTool ===&lt;br /&gt;
This object is part or BTI and represents a javascript debugger tool. This object is like a proxy sitting between &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; and the &amp;lt;code&amp;gt;ScriptPanel&amp;lt;/code&amp;gt;. The current implementation is in-process only so, based on direct &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; API calls.&lt;br /&gt;
&lt;br /&gt;
API of the tool is as follows:&lt;br /&gt;
* ''setBreakpoint'', ''clearBreakpoint'', ''enableBreakpoint'', ''disableBreakpoint'', ''isBreakpointDisabled'', ''getBreakpointCondition''&lt;br /&gt;
* ''rerun''&lt;br /&gt;
* ''resumeJavaScript'', ''stepOver'', ''stepInto'', ''stepOut'', ''runUntil''&lt;br /&gt;
* ''onConnect'', ''onDisconnect''&lt;br /&gt;
* ''onStartDebugging'', ''onStopDebugging''&lt;br /&gt;
* ''onCompilationUnit''&lt;br /&gt;
&lt;br /&gt;
The BTI is used by [[Crossfire]]. Crossfire has the following structure:&lt;br /&gt;
&lt;br /&gt;
    Crossfire Panel&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Module&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Server&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Socket Transport&lt;br /&gt;
&lt;br /&gt;
When starting up it does the following.&lt;br /&gt;
&lt;br /&gt;
# Register tools (e.g. console, inspector, ...)&lt;br /&gt;
# Start server&lt;br /&gt;
# Create socket transport&lt;br /&gt;
# Add BTI listener&lt;br /&gt;
# Set connection status&lt;br /&gt;
&lt;br /&gt;
=== Script Panel ===&lt;br /&gt;
The [[Script Panel]] sits at the top of the whole stack of layers/objects. It represents the debugger UI (a view + a controller). The implementation of this object is quite extensive since it also includes the source code view and viewport (see &amp;lt;code&amp;gt;[https://github.com/firebug/firebug/blob/master/extension/content/firebug/js/sourceBox.js firebug/js/sourceBox.js]&amp;lt;/code&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
The ''Script'' panel should never access the &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; directly. It should always use the &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
So, for example, if the user clicks on the Breakpoint Column, the action is handled by the ''Script'' panel, forwarded to the &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt;, which forwards it to the &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt;, which forwards it to &amp;lt;code&amp;gt;FBS&amp;lt;/code&amp;gt;. Finally, &amp;lt;code&amp;gt;FBS&amp;lt;/code&amp;gt; is using JSD1 API to set the breakpoint.&lt;br /&gt;
&lt;br /&gt;
There are side panels ([[Breakpoints Side Panel|Breakpoints]], [[Watch Side Panel|Watch]] and [[Stack Side Panel|Stack]]), which are synchronized automatically with the ''Script'' panel. They should all use &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt; to get appropriate data to display.&lt;br /&gt;
&lt;br /&gt;
The synchronization happens through basic Firebug mechanisms like, &amp;lt;code&amp;gt;updateSelection&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;updateLocation&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New Debugger Architecture ==&lt;br /&gt;
=== Panels ===&lt;br /&gt;
The Script panel needs to be built on top of JSD2, remote protocol and Firebug remoting API. Remoting is already supported by [[HTTP Monitor]].&lt;br /&gt;
&lt;br /&gt;
First of all, take a look a the following diagram.&lt;br /&gt;
&lt;br /&gt;
[[Image:New-script-panel-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerClient''' This object comes from Firefox platform and is responsible for connection to the server back-end. The object maintains the underlying transport layer, it's responsible for tab attach/detach, it implements basic packets send and receive logic. The implementation is currently within ''resource://gre/modules/devtools/dbg-client.jsm'' module.&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerClientModule''' This module (singleton, one per Firebug instance) represents a wrapper around ''DebuggerClient''. It implements connection setup and initialization (e.g. port number). This object represents the ''connection'' in Firebug and should be shared by all ''remotable'' tools (e.g. the Script panel, Net panel, Profiler, etc.). Name of this module isn't probably descriptive enough, it could be changed. This object (or related object) could also replace the ''TabWatcher''.&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerTool''' This object implements API related to debugging (typical methods: stepIn, stepOut, setBreakpoint, etc.). The Script panel should always consume debugger API through this object. ''DebuggerTool'' registers itself as a ''DebuggerClientModule'' and thus gets all necessary events from the back-end (e.g. onConnect, onThreadAttached, etc.)&lt;br /&gt;
&lt;br /&gt;
* '''ScriptPanel''' Represents debugger UI and listens mostly to ''onStartDebugging'' and ''onStopDebugging'' events. Those are used to properly updated the panel's UI. &lt;br /&gt;
&lt;br /&gt;
* '''ScriptView''' This object is currently based on Orion (but could be replaced by CodeMirror, see [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]). The main responsibility of this object is displaying the source code (using color syntax highlight).&lt;br /&gt;
&lt;br /&gt;
* '''CallstackPanel''' This panel displays list of frames when the debugger is halted. The frame list is synchronized with ThreadClient's stack frame cache using ''framesadded'' and ''framescleared'' events.&lt;br /&gt;
&lt;br /&gt;
* '''ThreadClient''' This object comes from Firefox platform and is responsible for tab-thread related logic.&lt;br /&gt;
&lt;br /&gt;
* '''BreakpointStore''' Responsible for breakpoint persistence across Firefox restarts (in breakpoint.json file).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Grips ===&lt;br /&gt;
A grip represents handle to server side object (see [https://wiki.mozilla.org/Remote_Debugging_Protocol#Grips RDP] for more details).&lt;br /&gt;
&lt;br /&gt;
Firebug framework introduces several objects that deals with these handles, see the next diagram.&lt;br /&gt;
&lt;br /&gt;
[[File:Grips-architecture.jpg]]&lt;br /&gt;
&lt;br /&gt;
* '''GripFactory''' This is the place where grips instances are created. Every grip object is associated with a '''class''' (see RDP) and uses '''Firebug.registerGrip''' to register itself. This factory uses a list of registered types and instantiates the right one according to the server side grip class attribute.&lt;br /&gt;
&lt;br /&gt;
* '''GripCache''' The cache is the place where panels and other parts of Firebug should ask for grip-objects. If the requested object is not in the cache a request is sent to the backend and a promise synchronously returned and asynchronously resolved. If the object is already in the cache a promise is returned and synchronously resolved. '''GripCache''' is the only place, which uses '''GripFactory'''. See more about [https://getfirebug.com/wiki/index.php/Remoting_Architecture#Asynchronous_Data_Access asynchronous data access].&lt;br /&gt;
&lt;br /&gt;
* '''ObjectGrip''' Represents a wrapper for '''RDP Grip'''&lt;br /&gt;
&lt;br /&gt;
* '''Property''' Represents a wrapper for '''RDP Property'''&lt;br /&gt;
&lt;br /&gt;
* '''FunctionGrip''' Represents a wrapper for a function object.&lt;br /&gt;
&lt;br /&gt;
* '''ScopeGrip''' Represents a wrapper for a scope object. This object is used by the '''Watch''' panel to show chain of current scopes.&lt;br /&gt;
&lt;br /&gt;
=== Breakpoints ===&lt;br /&gt;
This section describes architecture design for debugger breakpoints.&lt;br /&gt;
&lt;br /&gt;
[[File:Breakpoints-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
* '''BreakpointStore''' The main component implementing public API for breakpoint creation and removal. This object is also responsible for client side persistence and initialization. There is one instance of this object per browser window (i.e. per Firebug). So, if a breakpoint is created in one context it automatically appears in all contexts that are using the same URL.&lt;br /&gt;
* '''FunctionMonitor''', '''ScriptPanel''', '''BreakpointPanel''', '''ConsolePanel''' These represent example objects that are dealing with breakpoints. There is and can be even more such objects in the future. All these objects use API implemented by '''BreakpointStore''' object. These objects also register themselves as ''DebuggerTool'' listeners to be notified about breakpoint related changes.&lt;br /&gt;
* '''DebuggerTool''' is responsible for breakpoint creation/removal on the server side. '''DebuggerTool''' registers itself as '''BreakpointStore''' listener to be notified about breakpoint creation/removal and sync the server side (i.e. create or remove breakpoints on the server side). There is one instance of this object per context.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See an example of a breakpoint creation (using the Script panel UI):&lt;br /&gt;
&lt;br /&gt;
[[File:Breakpoint-add-sequence.png]]&lt;br /&gt;
&lt;br /&gt;
* The user clicks on '''ScriptView''' breakpoint column. It's currently based on Orion, but it could be also CodeMirror in the future.&lt;br /&gt;
* '''ScriptView''' notifies '''ScriptPanel''' about the action.&lt;br /&gt;
* '''ScriptPanel''' is using '''BreakpointStore''' API to create a breakpoint. It calls ''addBreakpoint''. Breakpoint creation is asynchronous since the server side needs to be notified through TCP/IP. UI objects (e.g. panels) should wait for ''onBreakpointAdded'' event to update themselves.&lt;br /&gt;
* '''BreakpointStore''' sends ''onAddBreakpoint'' event to all registered listeners. These listeners are mostly all '''DebuggerTool''' instances (one per context) and also all UI object that want to display a temporary waiting-icon at the place where the breakpoint will (asynchronously) appear.&lt;br /&gt;
* '''DebuggerTool''' uses its associated '''ThreadClient''' to create a breakpoint on the server side. Each '''DebuggerTool''' instance will do it for its context. This way all contexts will be updated.&lt;br /&gt;
* '''ThreadClient''' sends packet to the server side and waits for asynchronous response.&lt;br /&gt;
* '''DebuggerTool''' has a direct (function) callback that is executed as soon as the response comes back from the server. Breakpoint's location is auto-corrected at this point if needed.&lt;br /&gt;
* '''DebuggerTool''' notifies all registered listeners (usually panels coming from the same context) about added breakpoint. It sends &amp;quot;onBreakpointAdded&amp;quot; event to the ''ScriptPanel'' in this scenario.&lt;br /&gt;
* '''ScriptPanel''' calls ''updateBreakpoint'' so, the '''ScriptView''' can update itself. Remove the waiting-icon and display the new breakpoint at the right location. It might also scroll to make sure that auto-corrected location is visible to the user.&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/Script_Panel_Refactoring</id>
		<title>Script Panel Refactoring</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/Script_Panel_Refactoring"/>
				<updated>2013-04-15T10:48:02Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Breakpoints */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page summarizes refactoring the Firebug debugger to use JSD2 and adding support for remote JavaScript debugging. [http://code.google.com/p/fbug/issues/detail?id=5421 Issue 5421] tracks the actual changes done.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
Firebug Wiki:&lt;br /&gt;
* [[HTTP Monitor]]&lt;br /&gt;
* [[Firebug 1.7: Mozilla Backend|Firebug 1.7 BTI]]&lt;br /&gt;
* [[Net Panel Architecture Review]]&lt;br /&gt;
* [[Remoting Prototype#Prototype|Remoting Prototype]]&lt;br /&gt;
* [[Remoting Architecture|Remoting Architecture]]&lt;br /&gt;
* [[JSD2 Adoption|JSD2 Adoption]]&lt;br /&gt;
&lt;br /&gt;
Mozilla Wiki:&lt;br /&gt;
* [https://wiki.mozilla.org/Debugger Debugger]&lt;br /&gt;
* [https://wiki.mozilla.org/Debugger_Client_API Debugger Client API]&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Guide JS Debugger API Guide]&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference JS Debugger API Reference]&lt;br /&gt;
* [https://wiki.mozilla.org/DevTools/Features/Debugger DevTools Debugger]&lt;br /&gt;
* [https://wiki.mozilla.org/Remote_Debugging_Protocol Remote Debugging Protocol]&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
* Adopt JSD2 (get rid of all JSD1 APIs)&lt;br /&gt;
* Support remote debugging&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
* [http://code.google.com/p/fbug/issues/detail?id=5421 Issue 5421]: Implement JSD2&lt;br /&gt;
* [http://code.google.com/p/fbug/issues/detail?id=5837 Issue 5837]: Implement remote debugging&lt;br /&gt;
&lt;br /&gt;
== JSD2 API Requirements ==&lt;br /&gt;
The following list summarizes the high-level features that Firebug needs to support. It should be verified that all the features can re-implemented on top of JSD2 before starting the refactoring.&lt;br /&gt;
&lt;br /&gt;
* List of scripts available on selected tab (including static, events and evaluated scripts) including iframes &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#findScripts%28%29 Debugger.findScripts()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stepping (into, over, out, resume, current line)&lt;br /&gt;
* Support for &amp;lt;code&amp;gt;debugger;&amp;lt;/code&amp;gt; keyword &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onDebuggerStatement%28%29 Debugger.onDebuggerStatement()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Support for breakpoints (add, remove, enable, disabled, conditional, list of existing breakpoints) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Script#Methods Debugger.Script methods]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Recognize executable lines&lt;br /&gt;
* Dynamic eval in a frame (used e.g. by the [[Watch Side Panel]] when the debugger is halted) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#eval%28%29 Debugger.Frame.eval()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#evalWithBindings%28%29 Debugger.Frame.evalWithBindings()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Get stack frames (including passed arguments) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#getNewestFrame%28%29 Debugger.getNewestFrame()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#Accessor_properties Debugger.Frame.older]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Scope chain variable exploring (with &amp;amp; closure scopes). It should be possible to see all values. &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#Accessor_properties Debugger.Frame.environment]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Break on next call&lt;br /&gt;
* Profiling (was part of JSD1)&lt;br /&gt;
* Tracking (break on) throw/catch/error &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onThrow%28%29 Debugger.onThrow()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onError%28%29 Debugger.onError()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tracking (monitoring) function calls&lt;br /&gt;
* Freezing page UI if debugger is halted (including timeouts, intervals and worker threads)&lt;br /&gt;
&lt;br /&gt;
=== Not Ready in JSD2 ===&lt;br /&gt;
* There is not source for evals.&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onNewScript%28%29 new Function scripts?]&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=676586 Meta bug]: Implement a script Debugger&lt;br /&gt;
** As soon as this one is fixed&lt;br /&gt;
** Profiling is unrelated to JSD2. What is the plan here?&lt;br /&gt;
** Tracking (break on) throw/catch/error; also what is the plan?&lt;br /&gt;
* Conditional breakpoints ([https://bugzilla.mozilla.org/show_bug.cgi?id=740825 bug 740825])&lt;br /&gt;
&lt;br /&gt;
== Current Debugger Architecture ==&lt;br /&gt;
This section describes the current debugger architecture.&lt;br /&gt;
&lt;br /&gt;
[[File:Current-debugger-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
There are several layers/objects so, let's describe them step by step starting from the bottom.&lt;br /&gt;
&lt;br /&gt;
* Backend: JSD1, FirebugService, Debugger&lt;br /&gt;
* Frontend: JavaScriptTool, ScriptPanel&lt;br /&gt;
&lt;br /&gt;
=== JSD1 ===&lt;br /&gt;
This layer represents JSD1 platform API. These API allows to implement script debuggers and represent direct competition to JSD2 API. Of course this layer should entirely disappear and should be replaced by JSD2.&lt;br /&gt;
&lt;br /&gt;
=== Firebug Service ===&lt;br /&gt;
Firebug service is implemented as [https://developer.mozilla.org/en-US/docs/JavaScript_code_modules/Using?redirectlocale=en-US&amp;amp;redirectslug=Using_JavaScript_code_modules js module] on top of JSD1 layer. The object is called ''FBS'' and it's purpose is to wrap JSD1 API so, they are not directly accessed anywhere else. This layer also maintain list of registered debuggers (usually &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; module) and fires various events to them (e.g. ''onToggleBreakpoint'', ''onToggleMonitor'', etc.) or execute theirs callback (e.g. ''onBreak'', ''onFunctionCall'', ''onError'', ''onThrow'', ''onScriptCreated'', etc.) &lt;br /&gt;
&lt;br /&gt;
Main responsibilities:&lt;br /&gt;
* Activate/deactivate JSD in the browser. The activation is global for all current browser windows.&lt;br /&gt;
* Hook debugger events (interrupts, break on a breakpoint, etc.)&lt;br /&gt;
* Maintains list of registered debuggers (there is usually just one - Firebug debugger) and sends events to them.&lt;br /&gt;
* Manages nested event loop that is created for the debugger UI when page JS execution breaks.&lt;br /&gt;
* Sets/removes/enables/disables/saves/loads breakpoints&lt;br /&gt;
* Implements debugger stepping over/in/out/runUntil&lt;br /&gt;
* Monitors function calls&lt;br /&gt;
* Starts/stops profiling&lt;br /&gt;
* Tracks exceptions and errors (not working well)&lt;br /&gt;
* Tracks compiled scripts (not all of them)&lt;br /&gt;
&lt;br /&gt;
=== Debugger ===&lt;br /&gt;
This object is derived from &amp;lt;code&amp;gt;Firebug.Module&amp;lt;/code&amp;gt; and represents Firebug's debugger. It's also registered as a debugger into ''Firebug Service'' (FBS). This object should be the only one accessing FBS. It calls FBS API and receives various callbacks and events.&lt;br /&gt;
&lt;br /&gt;
This object implements methods that can be used by the Script panel or other parts of Firebug (e.g. by those panels which implements BON).&lt;br /&gt;
&lt;br /&gt;
Some examples of the API:&lt;br /&gt;
* ''evaluate'', ''evaluateInCallingFrame''&lt;br /&gt;
* ''breakNow'', ''getCurrentStackTrace''&lt;br /&gt;
* ''rerun''&lt;br /&gt;
* ''stepOver'', ''stepInto'', ''stepOut'', ''runUntil, ''resume''&lt;br /&gt;
* ''setBreakpoint'', ''clearBrakpoint'', etc.&lt;br /&gt;
* ''monitorFunction'', ''unmonitorFunction''&lt;br /&gt;
* ''monitorScript'', ''unmonitorScript''&lt;br /&gt;
* ''activateDebugger'', ''deactivateDebugger''&lt;br /&gt;
&lt;br /&gt;
Implementation of these methods is based on FBS API.&lt;br /&gt;
&lt;br /&gt;
There is also &amp;lt;code&amp;gt;Firebug.DebuggerListener&amp;lt;/code&amp;gt; that defines the interface used by FBS &lt;br /&gt;
* ''onStop'', ''onResume'', ''onThrow'', ''onError'', ''onScriptCreated'' (there is more ''onScriptCreated'' events)&lt;br /&gt;
&lt;br /&gt;
This object is ''observable'' and it activates the underlying JSD only if an observer exists. The observer is currently the Script panel even if it would make a bit more sense if it's actually the ''JavaScriptTool''.&lt;br /&gt;
&lt;br /&gt;
=== JavaScriptTool ===&lt;br /&gt;
This object is part or BTI and represents a javascript debugger tool. This object is like a proxy sitting between &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; and the &amp;lt;code&amp;gt;ScriptPanel&amp;lt;/code&amp;gt;. The current implementation is in-process only so, based on direct &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; API calls.&lt;br /&gt;
&lt;br /&gt;
API of the tool is as follows:&lt;br /&gt;
* ''setBreakpoint'', ''clearBreakpoint'', ''enableBreakpoint'', ''disableBreakpoint'', ''isBreakpointDisabled'', ''getBreakpointCondition''&lt;br /&gt;
* ''rerun''&lt;br /&gt;
* ''resumeJavaScript'', ''stepOver'', ''stepInto'', ''stepOut'', ''runUntil''&lt;br /&gt;
* ''onConnect'', ''onDisconnect''&lt;br /&gt;
* ''onStartDebugging'', ''onStopDebugging''&lt;br /&gt;
* ''onCompilationUnit''&lt;br /&gt;
&lt;br /&gt;
The BTI is used by [[Crossfire]]. Crossfire has the following structure:&lt;br /&gt;
&lt;br /&gt;
    Crossfire Panel&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Module&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Server&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Socket Transport&lt;br /&gt;
&lt;br /&gt;
When starting up it does the following.&lt;br /&gt;
&lt;br /&gt;
# Register tools (e.g. console, inspector, ...)&lt;br /&gt;
# Start server&lt;br /&gt;
# Create socket transport&lt;br /&gt;
# Add BTI listener&lt;br /&gt;
# Set connection status&lt;br /&gt;
&lt;br /&gt;
=== Script Panel ===&lt;br /&gt;
The [[Script Panel]] sits at the top of the whole stack of layers/objects. It represents the debugger UI (a view + a controller). The implementation of this object is quite extensive since it also includes the source code view and viewport (see &amp;lt;code&amp;gt;[https://github.com/firebug/firebug/blob/master/extension/content/firebug/js/sourceBox.js firebug/js/sourceBox.js]&amp;lt;/code&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
The ''Script'' panel should never access the &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; directly. It should always use the &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
So, for example, if the user clicks on the Breakpoint Column, the action is handled by the ''Script'' panel, forwarded to the &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt;, which forwards it to the &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt;, which forwards it to &amp;lt;code&amp;gt;FBS&amp;lt;/code&amp;gt;. Finally, &amp;lt;code&amp;gt;FBS&amp;lt;/code&amp;gt; is using JSD1 API to set the breakpoint.&lt;br /&gt;
&lt;br /&gt;
There are side panels ([[Breakpoints Side Panel|Breakpoints]], [[Watch Side Panel|Watch]] and [[Stack Side Panel|Stack]]), which are synchronized automatically with the ''Script'' panel. They should all use &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt; to get appropriate data to display.&lt;br /&gt;
&lt;br /&gt;
The synchronization happens through basic Firebug mechanisms like, &amp;lt;code&amp;gt;updateSelection&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;updateLocation&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New Debugger Architecture ==&lt;br /&gt;
=== Panels ===&lt;br /&gt;
The Script panel needs to be built on top of JSD2, remote protocol and Firebug remoting API. Remoting is already supported by [[HTTP Monitor]].&lt;br /&gt;
&lt;br /&gt;
First of all, take a look a the following diagram.&lt;br /&gt;
&lt;br /&gt;
[[Image:New-script-panel-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerClient''' This object comes from Firefox platform and is responsible for connection to the server back-end. The object maintains the underlying transport layer, it's responsible for tab attach/detach, it implements basic packets send and receive logic. The implementation is currently within ''resource://gre/modules/devtools/dbg-client.jsm'' module.&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerClientModule''' This module (singleton, one per Firebug instance) represents a wrapper around ''DebuggerClient''. It implements connection setup and initialization (e.g. port number). This object represents the ''connection'' in Firebug and should be shared by all ''remotable'' tools (e.g. the Script panel, Net panel, Profiler, etc.). Name of this module isn't probably descriptive enough, it could be changed. This object (or related object) could also replace the ''TabWatcher''.&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerTool''' This object implements API related to debugging (typical methods: stepIn, stepOut, setBreakpoint, etc.). The Script panel should always consume debugger API through this object. ''DebuggerTool'' registers itself as a ''DebuggerClientModule'' and thus gets all necessary events from the back-end (e.g. onConnect, onThreadAttached, etc.)&lt;br /&gt;
&lt;br /&gt;
* '''ScriptPanel''' Represents debugger UI and listens mostly to ''onStartDebugging'' and ''onStopDebugging'' events. Those are used to properly updated the panel's UI. &lt;br /&gt;
&lt;br /&gt;
* '''ScriptView''' This object is currently based on Orion (but could be replaced by CodeMirror, see [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]). The main responsibility of this object is displaying the source code (using color syntax highlight).&lt;br /&gt;
&lt;br /&gt;
* '''CallstackPanel''' This panel displays list of frames when the debugger is halted. The frame list is synchronized with ThreadClient's stack frame cache using ''framesadded'' and ''framescleared'' events.&lt;br /&gt;
&lt;br /&gt;
* '''ThreadClient''' This object comes from Firefox platform and is responsible for tab-thread related logic.&lt;br /&gt;
&lt;br /&gt;
* '''BreakpointStore''' Responsible for breakpoint persistence across Firefox restarts (in breakpoint.json file).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Grips ===&lt;br /&gt;
A grip represents handle to server side object (see [https://wiki.mozilla.org/Remote_Debugging_Protocol#Grips RDP] for more details).&lt;br /&gt;
&lt;br /&gt;
Firebug framework introduces several objects that deals with these handles, see the next diagram.&lt;br /&gt;
&lt;br /&gt;
[[File:Grips-architecture.jpg]]&lt;br /&gt;
&lt;br /&gt;
* '''GripFactory''' This is the place where grips instances are created. Every grip object is associated with a '''class''' (see RDP) and uses '''Firebug.registerGrip''' to register itself. This factory uses a list of registered types and instantiates the right one according to the server side grip class attribute.&lt;br /&gt;
&lt;br /&gt;
* '''GripCache''' The cache is the place where panels and other parts of Firebug should ask for grip-objects. If the requested object is not in the cache a request is sent to the backend and a promise synchronously returned and asynchronously resolved. If the object is already in the cache a promise is returned and synchronously resolved. '''GripCache''' is the only place, which uses '''GripFactory'''. See more about [https://getfirebug.com/wiki/index.php/Remoting_Architecture#Asynchronous_Data_Access asynchronous data access].&lt;br /&gt;
&lt;br /&gt;
* '''ObjectGrip''' Represents a wrapper for '''RDP Grip'''&lt;br /&gt;
&lt;br /&gt;
* '''Property''' Represents a wrapper for '''RDP Property'''&lt;br /&gt;
&lt;br /&gt;
* '''FunctionGrip''' Represents a wrapper for a function object.&lt;br /&gt;
&lt;br /&gt;
* '''ScopeGrip''' Represents a wrapper for a scope object. This object is used by the '''Watch''' panel to show chain of current scopes.&lt;br /&gt;
&lt;br /&gt;
=== Breakpoints ===&lt;br /&gt;
This section describes architecture design for debugger breakpoints.&lt;br /&gt;
&lt;br /&gt;
[[File:Breakpoints-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
* '''BreakpointStore''' The main component implementing public API for breakpoint creation and removal. This object is also responsible for client side persistence and initialization. There is one instance of this object per browser window (i.e. per Firebug). So, if a breakpoint is created in one context it automatically appears in all contexts that are using the same URL.&lt;br /&gt;
* '''FunctionMonitor''', '''ScriptPanel''', '''BreakpointPanel''', '''ConsolePanel''' These represent example objects that are dealing with breakpoints. There is and can be even more such objects in the future. All these objects use API implemented by '''BreakpointStore''' object. These objects also register themselves as ''DebuggerTool'' listeners to be notified about breakpoint related changes.&lt;br /&gt;
* '''DebuggerTool''' is responsible for breakpoint creation/removal on the server side. '''DebuggerTool''' registers itself as '''BreakpointStore''' listener to be notified about breakpoint creation/removal and sync the server side (i.e. create or remove breakpoints on the server side). There is one instance of this object per context.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See an example of a breakpoint creation (using the Script panel UI):&lt;br /&gt;
&lt;br /&gt;
[[File:Breakpoint-add-sequence.png]]&lt;br /&gt;
&lt;br /&gt;
* The user clicks on '''ScriptView''' breakpoint column. It's currently based on Orion, but it could be also CodeMirror in the future.&lt;br /&gt;
* '''ScriptView''' notifies '''ScriptPanel''' about the action.&lt;br /&gt;
* '''ScriptPanel''' is using '''BreakpointStore''' API to create a breakpoint. It calls ''addBreakpoint''. Breakpoint creation is asynchronous so, the return value is not useful. The panel must wait for ''onBreakpointAdded'' event instead.&lt;br /&gt;
* '''BreakpointStore''' sends ''onAddBreakpoint'' event to all registered listeners (in all contexts). The listeners will be most likely all '''DebuggerTool''' instances (one per context) and also all UI object that want to display a temporary waiting-icon at the place where the breakpoint will (asynchronously) appear.&lt;br /&gt;
* '''DebuggerTool''' uses its associated '''ThreadClient''' to create a breakpoint on the server side. Each '''DebuggerTool''' instance will do it for its context. This way all contexts will be updated. We might want to filter according to URL.&lt;br /&gt;
* '''ThreadClient''' sends packet to the server side and waits for asynchronous response.&lt;br /&gt;
* '''DebuggerTool''' has a direct (function) callback that is executed as soon as the response comes back from the server. Breakpoint's location is auto-corrected if needed.&lt;br /&gt;
* '''DebuggerTool''' directly access '''BreakpointStore''' and calls ''createBreakpoint''. Since '''BreakpointStore''' is a singleton, every context might try to create the same breakpoint. So, the tool just bails out if the same breakpoint already exists.&lt;br /&gt;
* '''BreakpointStore''' sends ''onBreakpointAdded'' to all listeners. So, in our case, the '''ScriptPanel''' also receives it.&lt;br /&gt;
* '''ScriptPanel''' calls ''updateBreakpoint'' so, the '''ScriptView''' can update itself. Remove the waiting-icon and display the new breakpoint at the right location. It might also scroll to make sure that auto-corrected location is visible to the user.&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/File:Breakpoint-add-sequence.png</id>
		<title>File:Breakpoint-add-sequence.png</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/File:Breakpoint-add-sequence.png"/>
				<updated>2013-04-15T10:42:43Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: uploaded a new version of &amp;amp;quot;File:Breakpoint-add-sequence.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/File:Breakpoints-architecture.png</id>
		<title>File:Breakpoints-architecture.png</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/File:Breakpoints-architecture.png"/>
				<updated>2013-04-15T10:41:39Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: uploaded a new version of &amp;amp;quot;File:Breakpoints-architecture.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/File:Breakpoints-architecture.png</id>
		<title>File:Breakpoints-architecture.png</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/File:Breakpoints-architecture.png"/>
				<updated>2013-04-15T10:38:56Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: uploaded a new version of &amp;amp;quot;File:Breakpoints-architecture.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-04-15T07:29:29Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* [[Script Panel Refactoring]]&lt;br /&gt;
* [[Remoting Architecture]]&lt;br /&gt;
* [[Remote Selector]]&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Error breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Monitor breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;XHR breakpoints (local scenario only)&amp;lt;/strike&amp;gt;[https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** &amp;lt;strike&amp;gt;Mutation breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857], [https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** &amp;lt;strike&amp;gt;respect 'actualLocation' sent back from the server (corrected BP location)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;The breakpoint condition editor does not disappear when clicking outside of it.&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** The bp-condition-editor doesn't scroll&lt;br /&gt;
* Use CodeMirror instead of Orion? See [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Restore expanded state of the Watch window across stepping.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see [https://bugzilla.mozilla.org/show_bug.cgi?id=797876 bug 797876]&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Edit Breakpoint Condition&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
* Debugging two tabs at once.&lt;br /&gt;
* Source Maps: https://github.com/mozilla/source-map&lt;br /&gt;
* Script panel search&lt;br /&gt;
** Search multiple files&lt;br /&gt;
** Search for regular expression&lt;br /&gt;
** Goto line&lt;br /&gt;
* FirebugRep.supportsObject() could use third parameter for remote-object-types&lt;br /&gt;
** See also Simon's [https://github.com/firebug/firebug/commit/5c220f5ea1045e7921dd92d8c255e9e4b35b85d9#commitcomment-2536753 comment]&lt;br /&gt;
* The Watch panel&lt;br /&gt;
** Changing local variable or argument needs environment actor re-fetch from the server&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing reports in Firebug issue list use label: &amp;lt;b&amp;gt;jsd2&amp;lt;/b&amp;gt; so, you can [http://code.google.com/p/fbug/issues/list?can=2&amp;amp;q=label%3Ajsd2 search] for them.&lt;br /&gt;
&lt;br /&gt;
=== Bugzilla ===&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=800200 Bug 800200] - rm JSD&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=837723 Bug 837723] - Introduce a new method in IJSDebugger allowing to get DO referent.&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/Script_Panel_Refactoring</id>
		<title>Script Panel Refactoring</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/Script_Panel_Refactoring"/>
				<updated>2013-04-08T16:17:49Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Breakpoints */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page summarizes refactoring the Firebug debugger to use JSD2 and adding support for remote JavaScript debugging. [http://code.google.com/p/fbug/issues/detail?id=5421 Issue 5421] tracks the actual changes done.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
Firebug Wiki:&lt;br /&gt;
* [[HTTP Monitor]]&lt;br /&gt;
* [[Firebug 1.7: Mozilla Backend|Firebug 1.7 BTI]]&lt;br /&gt;
* [[Net Panel Architecture Review]]&lt;br /&gt;
* [[Remoting Prototype#Prototype|Remoting Prototype]]&lt;br /&gt;
* [[Remoting Architecture|Remoting Architecture]]&lt;br /&gt;
* [[JSD2 Adoption|JSD2 Adoption]]&lt;br /&gt;
&lt;br /&gt;
Mozilla Wiki:&lt;br /&gt;
* [https://wiki.mozilla.org/Debugger Debugger]&lt;br /&gt;
* [https://wiki.mozilla.org/Debugger_Client_API Debugger Client API]&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Guide JS Debugger API Guide]&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference JS Debugger API Reference]&lt;br /&gt;
* [https://wiki.mozilla.org/DevTools/Features/Debugger DevTools Debugger]&lt;br /&gt;
* [https://wiki.mozilla.org/Remote_Debugging_Protocol Remote Debugging Protocol]&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
* Adopt JSD2 (get rid of all JSD1 APIs)&lt;br /&gt;
* Support remote debugging&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
* [http://code.google.com/p/fbug/issues/detail?id=5421 Issue 5421]: Implement JSD2&lt;br /&gt;
* [http://code.google.com/p/fbug/issues/detail?id=5837 Issue 5837]: Implement remote debugging&lt;br /&gt;
&lt;br /&gt;
== JSD2 API Requirements ==&lt;br /&gt;
The following list summarizes the high-level features that Firebug needs to support. It should be verified that all the features can re-implemented on top of JSD2 before starting the refactoring.&lt;br /&gt;
&lt;br /&gt;
* List of scripts available on selected tab (including static, events and evaluated scripts) including iframes &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#findScripts%28%29 Debugger.findScripts()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stepping (into, over, out, resume, current line)&lt;br /&gt;
* Support for &amp;lt;code&amp;gt;debugger;&amp;lt;/code&amp;gt; keyword &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onDebuggerStatement%28%29 Debugger.onDebuggerStatement()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Support for breakpoints (add, remove, enable, disabled, conditional, list of existing breakpoints) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Script#Methods Debugger.Script methods]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Recognize executable lines&lt;br /&gt;
* Dynamic eval in a frame (used e.g. by the [[Watch Side Panel]] when the debugger is halted) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#eval%28%29 Debugger.Frame.eval()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#evalWithBindings%28%29 Debugger.Frame.evalWithBindings()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Get stack frames (including passed arguments) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#getNewestFrame%28%29 Debugger.getNewestFrame()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#Accessor_properties Debugger.Frame.older]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Scope chain variable exploring (with &amp;amp; closure scopes). It should be possible to see all values. &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#Accessor_properties Debugger.Frame.environment]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Break on next call&lt;br /&gt;
* Profiling (was part of JSD1)&lt;br /&gt;
* Tracking (break on) throw/catch/error &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onThrow%28%29 Debugger.onThrow()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onError%28%29 Debugger.onError()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tracking (monitoring) function calls&lt;br /&gt;
* Freezing page UI if debugger is halted (including timeouts, intervals and worker threads)&lt;br /&gt;
&lt;br /&gt;
=== Not Ready in JSD2 ===&lt;br /&gt;
* There is not source for evals.&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onNewScript%28%29 new Function scripts?]&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=676586 Meta bug]: Implement a script Debugger&lt;br /&gt;
** As soon as this one is fixed&lt;br /&gt;
** Profiling is unrelated to JSD2. What is the plan here?&lt;br /&gt;
** Tracking (break on) throw/catch/error; also what is the plan?&lt;br /&gt;
* Conditional breakpoints ([https://bugzilla.mozilla.org/show_bug.cgi?id=740825 bug 740825])&lt;br /&gt;
&lt;br /&gt;
== Current Debugger Architecture ==&lt;br /&gt;
This section describes the current debugger architecture.&lt;br /&gt;
&lt;br /&gt;
[[File:Current-debugger-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
There are several layers/objects so, let's describe them step by step starting from the bottom.&lt;br /&gt;
&lt;br /&gt;
* Backend: JSD1, FirebugService, Debugger&lt;br /&gt;
* Frontend: JavaScriptTool, ScriptPanel&lt;br /&gt;
&lt;br /&gt;
=== JSD1 ===&lt;br /&gt;
This layer represents JSD1 platform API. These API allows to implement script debuggers and represent direct competition to JSD2 API. Of course this layer should entirely disappear and should be replaced by JSD2.&lt;br /&gt;
&lt;br /&gt;
=== Firebug Service ===&lt;br /&gt;
Firebug service is implemented as [https://developer.mozilla.org/en-US/docs/JavaScript_code_modules/Using?redirectlocale=en-US&amp;amp;redirectslug=Using_JavaScript_code_modules js module] on top of JSD1 layer. The object is called ''FBS'' and it's purpose is to wrap JSD1 API so, they are not directly accessed anywhere else. This layer also maintain list of registered debuggers (usually &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; module) and fires various events to them (e.g. ''onToggleBreakpoint'', ''onToggleMonitor'', etc.) or execute theirs callback (e.g. ''onBreak'', ''onFunctionCall'', ''onError'', ''onThrow'', ''onScriptCreated'', etc.) &lt;br /&gt;
&lt;br /&gt;
Main responsibilities:&lt;br /&gt;
* Activate/deactivate JSD in the browser. The activation is global for all current browser windows.&lt;br /&gt;
* Hook debugger events (interrupts, break on a breakpoint, etc.)&lt;br /&gt;
* Maintains list of registered debuggers (there is usually just one - Firebug debugger) and sends events to them.&lt;br /&gt;
* Manages nested event loop that is created for the debugger UI when page JS execution breaks.&lt;br /&gt;
* Sets/removes/enables/disables/saves/loads breakpoints&lt;br /&gt;
* Implements debugger stepping over/in/out/runUntil&lt;br /&gt;
* Monitors function calls&lt;br /&gt;
* Starts/stops profiling&lt;br /&gt;
* Tracks exceptions and errors (not working well)&lt;br /&gt;
* Tracks compiled scripts (not all of them)&lt;br /&gt;
&lt;br /&gt;
=== Debugger ===&lt;br /&gt;
This object is derived from &amp;lt;code&amp;gt;Firebug.Module&amp;lt;/code&amp;gt; and represents Firebug's debugger. It's also registered as a debugger into ''Firebug Service'' (FBS). This object should be the only one accessing FBS. It calls FBS API and receives various callbacks and events.&lt;br /&gt;
&lt;br /&gt;
This object implements methods that can be used by the Script panel or other parts of Firebug (e.g. by those panels which implements BON).&lt;br /&gt;
&lt;br /&gt;
Some examples of the API:&lt;br /&gt;
* ''evaluate'', ''evaluateInCallingFrame''&lt;br /&gt;
* ''breakNow'', ''getCurrentStackTrace''&lt;br /&gt;
* ''rerun''&lt;br /&gt;
* ''stepOver'', ''stepInto'', ''stepOut'', ''runUntil, ''resume''&lt;br /&gt;
* ''setBreakpoint'', ''clearBrakpoint'', etc.&lt;br /&gt;
* ''monitorFunction'', ''unmonitorFunction''&lt;br /&gt;
* ''monitorScript'', ''unmonitorScript''&lt;br /&gt;
* ''activateDebugger'', ''deactivateDebugger''&lt;br /&gt;
&lt;br /&gt;
Implementation of these methods is based on FBS API.&lt;br /&gt;
&lt;br /&gt;
There is also &amp;lt;code&amp;gt;Firebug.DebuggerListener&amp;lt;/code&amp;gt; that defines the interface used by FBS &lt;br /&gt;
* ''onStop'', ''onResume'', ''onThrow'', ''onError'', ''onScriptCreated'' (there is more ''onScriptCreated'' events)&lt;br /&gt;
&lt;br /&gt;
This object is ''observable'' and it activates the underlying JSD only if an observer exists. The observer is currently the Script panel even if it would make a bit more sense if it's actually the ''JavaScriptTool''.&lt;br /&gt;
&lt;br /&gt;
=== JavaScriptTool ===&lt;br /&gt;
This object is part or BTI and represents a javascript debugger tool. This object is like a proxy sitting between &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; and the &amp;lt;code&amp;gt;ScriptPanel&amp;lt;/code&amp;gt;. The current implementation is in-process only so, based on direct &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; API calls.&lt;br /&gt;
&lt;br /&gt;
API of the tool is as follows:&lt;br /&gt;
* ''setBreakpoint'', ''clearBreakpoint'', ''enableBreakpoint'', ''disableBreakpoint'', ''isBreakpointDisabled'', ''getBreakpointCondition''&lt;br /&gt;
* ''rerun''&lt;br /&gt;
* ''resumeJavaScript'', ''stepOver'', ''stepInto'', ''stepOut'', ''runUntil''&lt;br /&gt;
* ''onConnect'', ''onDisconnect''&lt;br /&gt;
* ''onStartDebugging'', ''onStopDebugging''&lt;br /&gt;
* ''onCompilationUnit''&lt;br /&gt;
&lt;br /&gt;
The BTI is used by [[Crossfire]]. Crossfire has the following structure:&lt;br /&gt;
&lt;br /&gt;
    Crossfire Panel&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Module&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Server&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Socket Transport&lt;br /&gt;
&lt;br /&gt;
When starting up it does the following.&lt;br /&gt;
&lt;br /&gt;
# Register tools (e.g. console, inspector, ...)&lt;br /&gt;
# Start server&lt;br /&gt;
# Create socket transport&lt;br /&gt;
# Add BTI listener&lt;br /&gt;
# Set connection status&lt;br /&gt;
&lt;br /&gt;
=== Script Panel ===&lt;br /&gt;
The [[Script Panel]] sits at the top of the whole stack of layers/objects. It represents the debugger UI (a view + a controller). The implementation of this object is quite extensive since it also includes the source code view and viewport (see &amp;lt;code&amp;gt;[https://github.com/firebug/firebug/blob/master/extension/content/firebug/js/sourceBox.js firebug/js/sourceBox.js]&amp;lt;/code&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
The ''Script'' panel should never access the &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; directly. It should always use the &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
So, for example, if the user clicks on the Breakpoint Column, the action is handled by the ''Script'' panel, forwarded to the &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt;, which forwards it to the &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt;, which forwards it to &amp;lt;code&amp;gt;FBS&amp;lt;/code&amp;gt;. Finally, &amp;lt;code&amp;gt;FBS&amp;lt;/code&amp;gt; is using JSD1 API to set the breakpoint.&lt;br /&gt;
&lt;br /&gt;
There are side panels ([[Breakpoints Side Panel|Breakpoints]], [[Watch Side Panel|Watch]] and [[Stack Side Panel|Stack]]), which are synchronized automatically with the ''Script'' panel. They should all use &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt; to get appropriate data to display.&lt;br /&gt;
&lt;br /&gt;
The synchronization happens through basic Firebug mechanisms like, &amp;lt;code&amp;gt;updateSelection&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;updateLocation&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New Debugger Architecture ==&lt;br /&gt;
=== Panels ===&lt;br /&gt;
The Script panel needs to be built on top of JSD2, remote protocol and Firebug remoting API. Remoting is already supported by [[HTTP Monitor]].&lt;br /&gt;
&lt;br /&gt;
First of all, take a look a the following diagram.&lt;br /&gt;
&lt;br /&gt;
[[Image:New-script-panel-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerClient''' This object comes from Firefox platform and is responsible for connection to the server back-end. The object maintains the underlying transport layer, it's responsible for tab attach/detach, it implements basic packets send and receive logic. The implementation is currently within ''resource://gre/modules/devtools/dbg-client.jsm'' module.&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerClientModule''' This module (singleton, one per Firebug instance) represents a wrapper around ''DebuggerClient''. It implements connection setup and initialization (e.g. port number). This object represents the ''connection'' in Firebug and should be shared by all ''remotable'' tools (e.g. the Script panel, Net panel, Profiler, etc.). Name of this module isn't probably descriptive enough, it could be changed. This object (or related object) could also replace the ''TabWatcher''.&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerTool''' This object implements API related to debugging (typical methods: stepIn, stepOut, setBreakpoint, etc.). The Script panel should always consume debugger API through this object. ''DebuggerTool'' registers itself as a ''DebuggerClientModule'' and thus gets all necessary events from the back-end (e.g. onConnect, onThreadAttached, etc.)&lt;br /&gt;
&lt;br /&gt;
* '''ScriptPanel''' Represents debugger UI and listens mostly to ''onStartDebugging'' and ''onStopDebugging'' events. Those are used to properly updated the panel's UI. &lt;br /&gt;
&lt;br /&gt;
* '''ScriptView''' This object is currently based on Orion (but could be replaced by CodeMirror, see [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]). The main responsibility of this object is displaying the source code (using color syntax highlight).&lt;br /&gt;
&lt;br /&gt;
* '''CallstackPanel''' This panel displays list of frames when the debugger is halted. The frame list is synchronized with ThreadClient's stack frame cache using ''framesadded'' and ''framescleared'' events.&lt;br /&gt;
&lt;br /&gt;
* '''ThreadClient''' This object comes from Firefox platform and is responsible for tab-thread related logic.&lt;br /&gt;
&lt;br /&gt;
* '''BreakpointStore''' Responsible for breakpoint persistence across Firefox restarts (in breakpoint.json file).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Grips ===&lt;br /&gt;
A grip represents handle to server side object (see [https://wiki.mozilla.org/Remote_Debugging_Protocol#Grips RDP] for more details).&lt;br /&gt;
&lt;br /&gt;
Firebug framework introduces several objects that deals with these handles, see the next diagram.&lt;br /&gt;
&lt;br /&gt;
[[File:Grips-architecture.jpg]]&lt;br /&gt;
&lt;br /&gt;
* '''GripFactory''' This is the place where grips instances are created. Every grip object is associated with a '''class''' (see RDP) and uses '''Firebug.registerGrip''' to register itself. This factory uses a list of registered types and instantiates the right one according to the server side grip class attribute.&lt;br /&gt;
&lt;br /&gt;
* '''GripCache''' The cache is the place where panels and other parts of Firebug should ask for grip-objects. If the requested object is not in the cache a request is sent to the backend and a promise synchronously returned and asynchronously resolved. If the object is already in the cache a promise is returned and synchronously resolved. '''GripCache''' is the only place, which uses '''GripFactory'''. See more about [https://getfirebug.com/wiki/index.php/Remoting_Architecture#Asynchronous_Data_Access asynchronous data access].&lt;br /&gt;
&lt;br /&gt;
* '''ObjectGrip''' Represents a wrapper for '''RDP Grip'''&lt;br /&gt;
&lt;br /&gt;
* '''Property''' Represents a wrapper for '''RDP Property'''&lt;br /&gt;
&lt;br /&gt;
* '''FunctionGrip''' Represents a wrapper for a function object.&lt;br /&gt;
&lt;br /&gt;
* '''ScopeGrip''' Represents a wrapper for a scope object. This object is used by the '''Watch''' panel to show chain of current scopes.&lt;br /&gt;
&lt;br /&gt;
=== Breakpoints ===&lt;br /&gt;
This section describes architecture design for debugger breakpoints.&lt;br /&gt;
&lt;br /&gt;
[[File:Breakpoints-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
* '''BreakpointStore''' The main component implementing API for breakpoint creating and removal. This object is also responsible for client side persistence and initialization. There is one instance of this object per browser window. So, if a breakpoint is created in one context it automatically appears in all contexts that are using the same URL.&lt;br /&gt;
* '''FunctionMonitor''', '''ScriptPanel''', '''BreakpointPanel''', '''ConsolePanel''' These represent example objects that  are dealing with breakpoints. There is and can be even more such objects in the future. All these objects register themselves as '''BreakpointStore''' listeners and also use API implemented by '''BreakpointStore''' object.&lt;br /&gt;
* '''DebuggerTool''' is responsible for breakpoint creation/removal on the server side. '''BreakpointStore''' uses this object to sync breakpoints on the server side. There is one instance of this object per context.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See an example of a breakpoint creation (using the Script panel UI):&lt;br /&gt;
&lt;br /&gt;
[[File:Breakpoint-add-sequence.png]]&lt;br /&gt;
&lt;br /&gt;
* The user clicks on '''ScriptView''' breakpoint column. It's currently based on Orion, but it could be also CodeMirror in the future.&lt;br /&gt;
* '''ScriptView''' notifies '''ScriptPanel''' about the action.&lt;br /&gt;
* '''ScriptPanel''' is using '''BreakpointStore''' API to create a breakpoint. It calls ''addBreakpoint''. Breakpoint creation is asynchronous so, the return value is not useful. The panel must wait for ''onBreakpointAdded'' event instead.&lt;br /&gt;
* '''BreakpointStore''' sends ''onAddBreakpoint'' event to all registered listeners (in all contexts). The listeners will be most likely all '''DebuggerTool''' instances (one per context) and also all UI object that want to display a temporary waiting-icon at the place where the breakpoint will (asynchronously) appear.&lt;br /&gt;
* '''DebuggerTool''' uses its associated '''ThreadClient''' to create a breakpoint on the server side. Each '''DebuggerTool''' instance will do it for its context. This way all contexts will be updated. We might want to filter according to URL.&lt;br /&gt;
* '''ThreadClient''' sends packet to the server side and waits for asynchronous response.&lt;br /&gt;
* '''DebuggerTool''' has a direct (function) callback that is executed as soon as the response comes back from the server. Breakpoint's location is auto-corrected if needed.&lt;br /&gt;
* '''DebuggerTool''' directly access '''BreakpointStore''' and calls ''createBreakpoint''. Since '''BreakpointStore''' is a singleton, every context might try to create the same breakpoint. So, the tool just bails out if the same breakpoint already exists.&lt;br /&gt;
* '''BreakpointStore''' sends ''onBreakpointAdded'' to all listeners. So, in our case, the '''ScriptPanel''' also receives it.&lt;br /&gt;
* '''ScriptPanel''' calls ''updateBreakpoint'' so, the '''ScriptView''' can update itself. Remove the waiting-icon and display the new breakpoint at the right location. It might also scroll to make sure that auto-corrected location is visible to the user.&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/Script_Panel_Refactoring</id>
		<title>Script Panel Refactoring</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/Script_Panel_Refactoring"/>
				<updated>2013-04-05T12:44:31Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Breakpoints */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page summarizes refactoring the Firebug debugger to use JSD2 and adding support for remote JavaScript debugging. [http://code.google.com/p/fbug/issues/detail?id=5421 Issue 5421] tracks the actual changes done.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
Firebug Wiki:&lt;br /&gt;
* [[HTTP Monitor]]&lt;br /&gt;
* [[Firebug 1.7: Mozilla Backend|Firebug 1.7 BTI]]&lt;br /&gt;
* [[Net Panel Architecture Review]]&lt;br /&gt;
* [[Remoting Prototype#Prototype|Remoting Prototype]]&lt;br /&gt;
* [[Remoting Architecture|Remoting Architecture]]&lt;br /&gt;
* [[JSD2 Adoption|JSD2 Adoption]]&lt;br /&gt;
&lt;br /&gt;
Mozilla Wiki:&lt;br /&gt;
* [https://wiki.mozilla.org/Debugger Debugger]&lt;br /&gt;
* [https://wiki.mozilla.org/Debugger_Client_API Debugger Client API]&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Guide JS Debugger API Guide]&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference JS Debugger API Reference]&lt;br /&gt;
* [https://wiki.mozilla.org/DevTools/Features/Debugger DevTools Debugger]&lt;br /&gt;
* [https://wiki.mozilla.org/Remote_Debugging_Protocol Remote Debugging Protocol]&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
* Adopt JSD2 (get rid of all JSD1 APIs)&lt;br /&gt;
* Support remote debugging&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
* [http://code.google.com/p/fbug/issues/detail?id=5421 Issue 5421]: Implement JSD2&lt;br /&gt;
* [http://code.google.com/p/fbug/issues/detail?id=5837 Issue 5837]: Implement remote debugging&lt;br /&gt;
&lt;br /&gt;
== JSD2 API Requirements ==&lt;br /&gt;
The following list summarizes the high-level features that Firebug needs to support. It should be verified that all the features can re-implemented on top of JSD2 before starting the refactoring.&lt;br /&gt;
&lt;br /&gt;
* List of scripts available on selected tab (including static, events and evaluated scripts) including iframes &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#findScripts%28%29 Debugger.findScripts()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stepping (into, over, out, resume, current line)&lt;br /&gt;
* Support for &amp;lt;code&amp;gt;debugger;&amp;lt;/code&amp;gt; keyword &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onDebuggerStatement%28%29 Debugger.onDebuggerStatement()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Support for breakpoints (add, remove, enable, disabled, conditional, list of existing breakpoints) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Script#Methods Debugger.Script methods]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Recognize executable lines&lt;br /&gt;
* Dynamic eval in a frame (used e.g. by the [[Watch Side Panel]] when the debugger is halted) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#eval%28%29 Debugger.Frame.eval()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#evalWithBindings%28%29 Debugger.Frame.evalWithBindings()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Get stack frames (including passed arguments) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#getNewestFrame%28%29 Debugger.getNewestFrame()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#Accessor_properties Debugger.Frame.older]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Scope chain variable exploring (with &amp;amp; closure scopes). It should be possible to see all values. &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#Accessor_properties Debugger.Frame.environment]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Break on next call&lt;br /&gt;
* Profiling (was part of JSD1)&lt;br /&gt;
* Tracking (break on) throw/catch/error &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onThrow%28%29 Debugger.onThrow()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onError%28%29 Debugger.onError()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tracking (monitoring) function calls&lt;br /&gt;
* Freezing page UI if debugger is halted (including timeouts, intervals and worker threads)&lt;br /&gt;
&lt;br /&gt;
=== Not Ready in JSD2 ===&lt;br /&gt;
* There is not source for evals.&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onNewScript%28%29 new Function scripts?]&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=676586 Meta bug]: Implement a script Debugger&lt;br /&gt;
** As soon as this one is fixed&lt;br /&gt;
** Profiling is unrelated to JSD2. What is the plan here?&lt;br /&gt;
** Tracking (break on) throw/catch/error; also what is the plan?&lt;br /&gt;
* Conditional breakpoints ([https://bugzilla.mozilla.org/show_bug.cgi?id=740825 bug 740825])&lt;br /&gt;
&lt;br /&gt;
== Current Debugger Architecture ==&lt;br /&gt;
This section describes the current debugger architecture.&lt;br /&gt;
&lt;br /&gt;
[[File:Current-debugger-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
There are several layers/objects so, let's describe them step by step starting from the bottom.&lt;br /&gt;
&lt;br /&gt;
* Backend: JSD1, FirebugService, Debugger&lt;br /&gt;
* Frontend: JavaScriptTool, ScriptPanel&lt;br /&gt;
&lt;br /&gt;
=== JSD1 ===&lt;br /&gt;
This layer represents JSD1 platform API. These API allows to implement script debuggers and represent direct competition to JSD2 API. Of course this layer should entirely disappear and should be replaced by JSD2.&lt;br /&gt;
&lt;br /&gt;
=== Firebug Service ===&lt;br /&gt;
Firebug service is implemented as [https://developer.mozilla.org/en-US/docs/JavaScript_code_modules/Using?redirectlocale=en-US&amp;amp;redirectslug=Using_JavaScript_code_modules js module] on top of JSD1 layer. The object is called ''FBS'' and it's purpose is to wrap JSD1 API so, they are not directly accessed anywhere else. This layer also maintain list of registered debuggers (usually &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; module) and fires various events to them (e.g. ''onToggleBreakpoint'', ''onToggleMonitor'', etc.) or execute theirs callback (e.g. ''onBreak'', ''onFunctionCall'', ''onError'', ''onThrow'', ''onScriptCreated'', etc.) &lt;br /&gt;
&lt;br /&gt;
Main responsibilities:&lt;br /&gt;
* Activate/deactivate JSD in the browser. The activation is global for all current browser windows.&lt;br /&gt;
* Hook debugger events (interrupts, break on a breakpoint, etc.)&lt;br /&gt;
* Maintains list of registered debuggers (there is usually just one - Firebug debugger) and sends events to them.&lt;br /&gt;
* Manages nested event loop that is created for the debugger UI when page JS execution breaks.&lt;br /&gt;
* Sets/removes/enables/disables/saves/loads breakpoints&lt;br /&gt;
* Implements debugger stepping over/in/out/runUntil&lt;br /&gt;
* Monitors function calls&lt;br /&gt;
* Starts/stops profiling&lt;br /&gt;
* Tracks exceptions and errors (not working well)&lt;br /&gt;
* Tracks compiled scripts (not all of them)&lt;br /&gt;
&lt;br /&gt;
=== Debugger ===&lt;br /&gt;
This object is derived from &amp;lt;code&amp;gt;Firebug.Module&amp;lt;/code&amp;gt; and represents Firebug's debugger. It's also registered as a debugger into ''Firebug Service'' (FBS). This object should be the only one accessing FBS. It calls FBS API and receives various callbacks and events.&lt;br /&gt;
&lt;br /&gt;
This object implements methods that can be used by the Script panel or other parts of Firebug (e.g. by those panels which implements BON).&lt;br /&gt;
&lt;br /&gt;
Some examples of the API:&lt;br /&gt;
* ''evaluate'', ''evaluateInCallingFrame''&lt;br /&gt;
* ''breakNow'', ''getCurrentStackTrace''&lt;br /&gt;
* ''rerun''&lt;br /&gt;
* ''stepOver'', ''stepInto'', ''stepOut'', ''runUntil, ''resume''&lt;br /&gt;
* ''setBreakpoint'', ''clearBrakpoint'', etc.&lt;br /&gt;
* ''monitorFunction'', ''unmonitorFunction''&lt;br /&gt;
* ''monitorScript'', ''unmonitorScript''&lt;br /&gt;
* ''activateDebugger'', ''deactivateDebugger''&lt;br /&gt;
&lt;br /&gt;
Implementation of these methods is based on FBS API.&lt;br /&gt;
&lt;br /&gt;
There is also &amp;lt;code&amp;gt;Firebug.DebuggerListener&amp;lt;/code&amp;gt; that defines the interface used by FBS &lt;br /&gt;
* ''onStop'', ''onResume'', ''onThrow'', ''onError'', ''onScriptCreated'' (there is more ''onScriptCreated'' events)&lt;br /&gt;
&lt;br /&gt;
This object is ''observable'' and it activates the underlying JSD only if an observer exists. The observer is currently the Script panel even if it would make a bit more sense if it's actually the ''JavaScriptTool''.&lt;br /&gt;
&lt;br /&gt;
=== JavaScriptTool ===&lt;br /&gt;
This object is part or BTI and represents a javascript debugger tool. This object is like a proxy sitting between &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; and the &amp;lt;code&amp;gt;ScriptPanel&amp;lt;/code&amp;gt;. The current implementation is in-process only so, based on direct &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; API calls.&lt;br /&gt;
&lt;br /&gt;
API of the tool is as follows:&lt;br /&gt;
* ''setBreakpoint'', ''clearBreakpoint'', ''enableBreakpoint'', ''disableBreakpoint'', ''isBreakpointDisabled'', ''getBreakpointCondition''&lt;br /&gt;
* ''rerun''&lt;br /&gt;
* ''resumeJavaScript'', ''stepOver'', ''stepInto'', ''stepOut'', ''runUntil''&lt;br /&gt;
* ''onConnect'', ''onDisconnect''&lt;br /&gt;
* ''onStartDebugging'', ''onStopDebugging''&lt;br /&gt;
* ''onCompilationUnit''&lt;br /&gt;
&lt;br /&gt;
The BTI is used by [[Crossfire]]. Crossfire has the following structure:&lt;br /&gt;
&lt;br /&gt;
    Crossfire Panel&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Module&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Server&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Socket Transport&lt;br /&gt;
&lt;br /&gt;
When starting up it does the following.&lt;br /&gt;
&lt;br /&gt;
# Register tools (e.g. console, inspector, ...)&lt;br /&gt;
# Start server&lt;br /&gt;
# Create socket transport&lt;br /&gt;
# Add BTI listener&lt;br /&gt;
# Set connection status&lt;br /&gt;
&lt;br /&gt;
=== Script Panel ===&lt;br /&gt;
The [[Script Panel]] sits at the top of the whole stack of layers/objects. It represents the debugger UI (a view + a controller). The implementation of this object is quite extensive since it also includes the source code view and viewport (see &amp;lt;code&amp;gt;[https://github.com/firebug/firebug/blob/master/extension/content/firebug/js/sourceBox.js firebug/js/sourceBox.js]&amp;lt;/code&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
The ''Script'' panel should never access the &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; directly. It should always use the &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
So, for example, if the user clicks on the Breakpoint Column, the action is handled by the ''Script'' panel, forwarded to the &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt;, which forwards it to the &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt;, which forwards it to &amp;lt;code&amp;gt;FBS&amp;lt;/code&amp;gt;. Finally, &amp;lt;code&amp;gt;FBS&amp;lt;/code&amp;gt; is using JSD1 API to set the breakpoint.&lt;br /&gt;
&lt;br /&gt;
There are side panels ([[Breakpoints Side Panel|Breakpoints]], [[Watch Side Panel|Watch]] and [[Stack Side Panel|Stack]]), which are synchronized automatically with the ''Script'' panel. They should all use &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt; to get appropriate data to display.&lt;br /&gt;
&lt;br /&gt;
The synchronization happens through basic Firebug mechanisms like, &amp;lt;code&amp;gt;updateSelection&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;updateLocation&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New Debugger Architecture ==&lt;br /&gt;
=== Panels ===&lt;br /&gt;
The Script panel needs to be built on top of JSD2, remote protocol and Firebug remoting API. Remoting is already supported by [[HTTP Monitor]].&lt;br /&gt;
&lt;br /&gt;
First of all, take a look a the following diagram.&lt;br /&gt;
&lt;br /&gt;
[[Image:New-script-panel-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerClient''' This object comes from Firefox platform and is responsible for connection to the server back-end. The object maintains the underlying transport layer, it's responsible for tab attach/detach, it implements basic packets send and receive logic. The implementation is currently within ''resource://gre/modules/devtools/dbg-client.jsm'' module.&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerClientModule''' This module (singleton, one per Firebug instance) represents a wrapper around ''DebuggerClient''. It implements connection setup and initialization (e.g. port number). This object represents the ''connection'' in Firebug and should be shared by all ''remotable'' tools (e.g. the Script panel, Net panel, Profiler, etc.). Name of this module isn't probably descriptive enough, it could be changed. This object (or related object) could also replace the ''TabWatcher''.&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerTool''' This object implements API related to debugging (typical methods: stepIn, stepOut, setBreakpoint, etc.). The Script panel should always consume debugger API through this object. ''DebuggerTool'' registers itself as a ''DebuggerClientModule'' and thus gets all necessary events from the back-end (e.g. onConnect, onThreadAttached, etc.)&lt;br /&gt;
&lt;br /&gt;
* '''ScriptPanel''' Represents debugger UI and listens mostly to ''onStartDebugging'' and ''onStopDebugging'' events. Those are used to properly updated the panel's UI. &lt;br /&gt;
&lt;br /&gt;
* '''ScriptView''' This object is currently based on Orion (but could be replaced by CodeMirror, see [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]). The main responsibility of this object is displaying the source code (using color syntax highlight).&lt;br /&gt;
&lt;br /&gt;
* '''CallstackPanel''' This panel displays list of frames when the debugger is halted. The frame list is synchronized with ThreadClient's stack frame cache using ''framesadded'' and ''framescleared'' events.&lt;br /&gt;
&lt;br /&gt;
* '''ThreadClient''' This object comes from Firefox platform and is responsible for tab-thread related logic.&lt;br /&gt;
&lt;br /&gt;
* '''BreakpointStore''' Responsible for breakpoint persistence across Firefox restarts (in breakpoint.json file).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Grips ===&lt;br /&gt;
A grip represents handle to server side object (see [https://wiki.mozilla.org/Remote_Debugging_Protocol#Grips RDP] for more details).&lt;br /&gt;
&lt;br /&gt;
Firebug framework introduces several objects that deals with these handles, see the next diagram.&lt;br /&gt;
&lt;br /&gt;
[[File:Grips-architecture.jpg]]&lt;br /&gt;
&lt;br /&gt;
* '''GripFactory''' This is the place where grips instances are created. Every grip object is associated with a '''class''' (see RDP) and uses '''Firebug.registerGrip''' to register itself. This factory uses a list of registered types and instantiates the right one according to the server side grip class attribute.&lt;br /&gt;
&lt;br /&gt;
* '''GripCache''' The cache is the place where panels and other parts of Firebug should ask for grip-objects. If the requested object is not in the cache a request is sent to the backend and a promise synchronously returned and asynchronously resolved. If the object is already in the cache a promise is returned and synchronously resolved. '''GripCache''' is the only place, which uses '''GripFactory'''. See more about [https://getfirebug.com/wiki/index.php/Remoting_Architecture#Asynchronous_Data_Access asynchronous data access].&lt;br /&gt;
&lt;br /&gt;
* '''ObjectGrip''' Represents a wrapper for '''RDP Grip'''&lt;br /&gt;
&lt;br /&gt;
* '''Property''' Represents a wrapper for '''RDP Property'''&lt;br /&gt;
&lt;br /&gt;
* '''FunctionGrip''' Represents a wrapper for a function object.&lt;br /&gt;
&lt;br /&gt;
* '''ScopeGrip''' Represents a wrapper for a scope object. This object is used by the '''Watch''' panel to show chain of current scopes.&lt;br /&gt;
&lt;br /&gt;
=== Breakpoints ===&lt;br /&gt;
This section describes architecture design for debugger breakpoints.&lt;br /&gt;
&lt;br /&gt;
[[File:Breakpoints-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
* '''BreakpointStore''' The main component implementing API for breakpoint creating and removal. This object is also responsible for client side persistence and initialization. There is one instance of this object per browser window. So, if a breakpoint is created in one context it automatically appears in all contexts that are using the same URL.&lt;br /&gt;
* '''FunctionMonitor''', '''ScriptPanel''', '''BreakpointPanel''', '''ConsolePanel''' These represent example objects that  are dealing with breakpoints. There is and can be even more such objects in the future. All these objects register themselves as '''BreakpointStore''' listeners and also use API implemented by '''BreakpointStore''' object.&lt;br /&gt;
* '''DebuggerTool''' is responsible for breakpoint creation/removal on the server side. '''BreakpointStore''' uses this object to sync breakpoints on the server side. There is one instance of this object per context.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See an example of a breakpoint creation (using the Script panel UI):&lt;br /&gt;
&lt;br /&gt;
[[File:Breakpoint-add-sequence.png]]&lt;br /&gt;
&lt;br /&gt;
* The user clicks on '''ScriptView''' breakpoint column. It's currently based on Orion, but it could be also CodeMirror in the future.&lt;br /&gt;
* '''ScriptView''' notifies '''ScriptPanel''' about the action.&lt;br /&gt;
* '''ScriptPanel''' is using '''BreakpointStore''' API to create a breakpoint. It calls ''addBreakpoint''. Breakpoint creation is asynchronous so, the return value is not useful. The panel must wait for ''onBreakpointAdded'' event instead.&lt;br /&gt;
* '''BreakpointStore''' sends ''onAddBreakpoint'' event to all registered listeners (in all contexts). The listeners will be most likely all '''DebuggerTool''' instances (one per context) and also all UI object that want to display a temporary waiting-icon at the place where the breakpoint will (asynchronously) appear.&lt;br /&gt;
* '''DebuggerTool''' uses its associated '''ThreadClient''' to create a breakpoint on the server side. Each '''DebuggerTool''' instance will do it for its context. This way all contexts will be updated. We might want to filter according to URL.&lt;br /&gt;
* '''ThreadClient''' sends packet to the server side and waits for asynchronous response.&lt;br /&gt;
* '''DebuggerTool''' has a direct (function) callback that is executed as soon as the response comes back from the server. Breakpoint's location is auto-corrected if needed.&lt;br /&gt;
* '''DebuggerTool''' directly access '''BreakpointStore''' and calls ''createBreakpoint''. Since '''BreakpointStore''' is a singleton, every context might try to create it.&lt;br /&gt;
* '''BreakpointStore''' sends ''onBreakpointAdded'' to all listeners. So, in our case, the '''ScriptPanel''' also receives it.&lt;br /&gt;
* '''ScriptPanel''' calls ''updateBreakpoint'' so, the '''ScriptView''' can update itself. Remove the waiting-icon and display the new breakpoint at the right location. It might also scroll to make sure that auto-corrected location is visible to the user.&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/Script_Panel_Refactoring</id>
		<title>Script Panel Refactoring</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/Script_Panel_Refactoring"/>
				<updated>2013-04-05T12:27:25Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Breakpoints */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page summarizes refactoring the Firebug debugger to use JSD2 and adding support for remote JavaScript debugging. [http://code.google.com/p/fbug/issues/detail?id=5421 Issue 5421] tracks the actual changes done.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
Firebug Wiki:&lt;br /&gt;
* [[HTTP Monitor]]&lt;br /&gt;
* [[Firebug 1.7: Mozilla Backend|Firebug 1.7 BTI]]&lt;br /&gt;
* [[Net Panel Architecture Review]]&lt;br /&gt;
* [[Remoting Prototype#Prototype|Remoting Prototype]]&lt;br /&gt;
* [[Remoting Architecture|Remoting Architecture]]&lt;br /&gt;
* [[JSD2 Adoption|JSD2 Adoption]]&lt;br /&gt;
&lt;br /&gt;
Mozilla Wiki:&lt;br /&gt;
* [https://wiki.mozilla.org/Debugger Debugger]&lt;br /&gt;
* [https://wiki.mozilla.org/Debugger_Client_API Debugger Client API]&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Guide JS Debugger API Guide]&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference JS Debugger API Reference]&lt;br /&gt;
* [https://wiki.mozilla.org/DevTools/Features/Debugger DevTools Debugger]&lt;br /&gt;
* [https://wiki.mozilla.org/Remote_Debugging_Protocol Remote Debugging Protocol]&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
* Adopt JSD2 (get rid of all JSD1 APIs)&lt;br /&gt;
* Support remote debugging&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
* [http://code.google.com/p/fbug/issues/detail?id=5421 Issue 5421]: Implement JSD2&lt;br /&gt;
* [http://code.google.com/p/fbug/issues/detail?id=5837 Issue 5837]: Implement remote debugging&lt;br /&gt;
&lt;br /&gt;
== JSD2 API Requirements ==&lt;br /&gt;
The following list summarizes the high-level features that Firebug needs to support. It should be verified that all the features can re-implemented on top of JSD2 before starting the refactoring.&lt;br /&gt;
&lt;br /&gt;
* List of scripts available on selected tab (including static, events and evaluated scripts) including iframes &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#findScripts%28%29 Debugger.findScripts()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stepping (into, over, out, resume, current line)&lt;br /&gt;
* Support for &amp;lt;code&amp;gt;debugger;&amp;lt;/code&amp;gt; keyword &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onDebuggerStatement%28%29 Debugger.onDebuggerStatement()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Support for breakpoints (add, remove, enable, disabled, conditional, list of existing breakpoints) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Script#Methods Debugger.Script methods]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Recognize executable lines&lt;br /&gt;
* Dynamic eval in a frame (used e.g. by the [[Watch Side Panel]] when the debugger is halted) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#eval%28%29 Debugger.Frame.eval()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#evalWithBindings%28%29 Debugger.Frame.evalWithBindings()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Get stack frames (including passed arguments) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#getNewestFrame%28%29 Debugger.getNewestFrame()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#Accessor_properties Debugger.Frame.older]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Scope chain variable exploring (with &amp;amp; closure scopes). It should be possible to see all values. &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#Accessor_properties Debugger.Frame.environment]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Break on next call&lt;br /&gt;
* Profiling (was part of JSD1)&lt;br /&gt;
* Tracking (break on) throw/catch/error &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onThrow%28%29 Debugger.onThrow()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onError%28%29 Debugger.onError()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tracking (monitoring) function calls&lt;br /&gt;
* Freezing page UI if debugger is halted (including timeouts, intervals and worker threads)&lt;br /&gt;
&lt;br /&gt;
=== Not Ready in JSD2 ===&lt;br /&gt;
* There is not source for evals.&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onNewScript%28%29 new Function scripts?]&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=676586 Meta bug]: Implement a script Debugger&lt;br /&gt;
** As soon as this one is fixed&lt;br /&gt;
** Profiling is unrelated to JSD2. What is the plan here?&lt;br /&gt;
** Tracking (break on) throw/catch/error; also what is the plan?&lt;br /&gt;
* Conditional breakpoints ([https://bugzilla.mozilla.org/show_bug.cgi?id=740825 bug 740825])&lt;br /&gt;
&lt;br /&gt;
== Current Debugger Architecture ==&lt;br /&gt;
This section describes the current debugger architecture.&lt;br /&gt;
&lt;br /&gt;
[[File:Current-debugger-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
There are several layers/objects so, let's describe them step by step starting from the bottom.&lt;br /&gt;
&lt;br /&gt;
* Backend: JSD1, FirebugService, Debugger&lt;br /&gt;
* Frontend: JavaScriptTool, ScriptPanel&lt;br /&gt;
&lt;br /&gt;
=== JSD1 ===&lt;br /&gt;
This layer represents JSD1 platform API. These API allows to implement script debuggers and represent direct competition to JSD2 API. Of course this layer should entirely disappear and should be replaced by JSD2.&lt;br /&gt;
&lt;br /&gt;
=== Firebug Service ===&lt;br /&gt;
Firebug service is implemented as [https://developer.mozilla.org/en-US/docs/JavaScript_code_modules/Using?redirectlocale=en-US&amp;amp;redirectslug=Using_JavaScript_code_modules js module] on top of JSD1 layer. The object is called ''FBS'' and it's purpose is to wrap JSD1 API so, they are not directly accessed anywhere else. This layer also maintain list of registered debuggers (usually &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; module) and fires various events to them (e.g. ''onToggleBreakpoint'', ''onToggleMonitor'', etc.) or execute theirs callback (e.g. ''onBreak'', ''onFunctionCall'', ''onError'', ''onThrow'', ''onScriptCreated'', etc.) &lt;br /&gt;
&lt;br /&gt;
Main responsibilities:&lt;br /&gt;
* Activate/deactivate JSD in the browser. The activation is global for all current browser windows.&lt;br /&gt;
* Hook debugger events (interrupts, break on a breakpoint, etc.)&lt;br /&gt;
* Maintains list of registered debuggers (there is usually just one - Firebug debugger) and sends events to them.&lt;br /&gt;
* Manages nested event loop that is created for the debugger UI when page JS execution breaks.&lt;br /&gt;
* Sets/removes/enables/disables/saves/loads breakpoints&lt;br /&gt;
* Implements debugger stepping over/in/out/runUntil&lt;br /&gt;
* Monitors function calls&lt;br /&gt;
* Starts/stops profiling&lt;br /&gt;
* Tracks exceptions and errors (not working well)&lt;br /&gt;
* Tracks compiled scripts (not all of them)&lt;br /&gt;
&lt;br /&gt;
=== Debugger ===&lt;br /&gt;
This object is derived from &amp;lt;code&amp;gt;Firebug.Module&amp;lt;/code&amp;gt; and represents Firebug's debugger. It's also registered as a debugger into ''Firebug Service'' (FBS). This object should be the only one accessing FBS. It calls FBS API and receives various callbacks and events.&lt;br /&gt;
&lt;br /&gt;
This object implements methods that can be used by the Script panel or other parts of Firebug (e.g. by those panels which implements BON).&lt;br /&gt;
&lt;br /&gt;
Some examples of the API:&lt;br /&gt;
* ''evaluate'', ''evaluateInCallingFrame''&lt;br /&gt;
* ''breakNow'', ''getCurrentStackTrace''&lt;br /&gt;
* ''rerun''&lt;br /&gt;
* ''stepOver'', ''stepInto'', ''stepOut'', ''runUntil, ''resume''&lt;br /&gt;
* ''setBreakpoint'', ''clearBrakpoint'', etc.&lt;br /&gt;
* ''monitorFunction'', ''unmonitorFunction''&lt;br /&gt;
* ''monitorScript'', ''unmonitorScript''&lt;br /&gt;
* ''activateDebugger'', ''deactivateDebugger''&lt;br /&gt;
&lt;br /&gt;
Implementation of these methods is based on FBS API.&lt;br /&gt;
&lt;br /&gt;
There is also &amp;lt;code&amp;gt;Firebug.DebuggerListener&amp;lt;/code&amp;gt; that defines the interface used by FBS &lt;br /&gt;
* ''onStop'', ''onResume'', ''onThrow'', ''onError'', ''onScriptCreated'' (there is more ''onScriptCreated'' events)&lt;br /&gt;
&lt;br /&gt;
This object is ''observable'' and it activates the underlying JSD only if an observer exists. The observer is currently the Script panel even if it would make a bit more sense if it's actually the ''JavaScriptTool''.&lt;br /&gt;
&lt;br /&gt;
=== JavaScriptTool ===&lt;br /&gt;
This object is part or BTI and represents a javascript debugger tool. This object is like a proxy sitting between &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; and the &amp;lt;code&amp;gt;ScriptPanel&amp;lt;/code&amp;gt;. The current implementation is in-process only so, based on direct &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; API calls.&lt;br /&gt;
&lt;br /&gt;
API of the tool is as follows:&lt;br /&gt;
* ''setBreakpoint'', ''clearBreakpoint'', ''enableBreakpoint'', ''disableBreakpoint'', ''isBreakpointDisabled'', ''getBreakpointCondition''&lt;br /&gt;
* ''rerun''&lt;br /&gt;
* ''resumeJavaScript'', ''stepOver'', ''stepInto'', ''stepOut'', ''runUntil''&lt;br /&gt;
* ''onConnect'', ''onDisconnect''&lt;br /&gt;
* ''onStartDebugging'', ''onStopDebugging''&lt;br /&gt;
* ''onCompilationUnit''&lt;br /&gt;
&lt;br /&gt;
The BTI is used by [[Crossfire]]. Crossfire has the following structure:&lt;br /&gt;
&lt;br /&gt;
    Crossfire Panel&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Module&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Server&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Socket Transport&lt;br /&gt;
&lt;br /&gt;
When starting up it does the following.&lt;br /&gt;
&lt;br /&gt;
# Register tools (e.g. console, inspector, ...)&lt;br /&gt;
# Start server&lt;br /&gt;
# Create socket transport&lt;br /&gt;
# Add BTI listener&lt;br /&gt;
# Set connection status&lt;br /&gt;
&lt;br /&gt;
=== Script Panel ===&lt;br /&gt;
The [[Script Panel]] sits at the top of the whole stack of layers/objects. It represents the debugger UI (a view + a controller). The implementation of this object is quite extensive since it also includes the source code view and viewport (see &amp;lt;code&amp;gt;[https://github.com/firebug/firebug/blob/master/extension/content/firebug/js/sourceBox.js firebug/js/sourceBox.js]&amp;lt;/code&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
The ''Script'' panel should never access the &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; directly. It should always use the &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
So, for example, if the user clicks on the Breakpoint Column, the action is handled by the ''Script'' panel, forwarded to the &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt;, which forwards it to the &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt;, which forwards it to &amp;lt;code&amp;gt;FBS&amp;lt;/code&amp;gt;. Finally, &amp;lt;code&amp;gt;FBS&amp;lt;/code&amp;gt; is using JSD1 API to set the breakpoint.&lt;br /&gt;
&lt;br /&gt;
There are side panels ([[Breakpoints Side Panel|Breakpoints]], [[Watch Side Panel|Watch]] and [[Stack Side Panel|Stack]]), which are synchronized automatically with the ''Script'' panel. They should all use &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt; to get appropriate data to display.&lt;br /&gt;
&lt;br /&gt;
The synchronization happens through basic Firebug mechanisms like, &amp;lt;code&amp;gt;updateSelection&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;updateLocation&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New Debugger Architecture ==&lt;br /&gt;
=== Panels ===&lt;br /&gt;
The Script panel needs to be built on top of JSD2, remote protocol and Firebug remoting API. Remoting is already supported by [[HTTP Monitor]].&lt;br /&gt;
&lt;br /&gt;
First of all, take a look a the following diagram.&lt;br /&gt;
&lt;br /&gt;
[[Image:New-script-panel-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerClient''' This object comes from Firefox platform and is responsible for connection to the server back-end. The object maintains the underlying transport layer, it's responsible for tab attach/detach, it implements basic packets send and receive logic. The implementation is currently within ''resource://gre/modules/devtools/dbg-client.jsm'' module.&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerClientModule''' This module (singleton, one per Firebug instance) represents a wrapper around ''DebuggerClient''. It implements connection setup and initialization (e.g. port number). This object represents the ''connection'' in Firebug and should be shared by all ''remotable'' tools (e.g. the Script panel, Net panel, Profiler, etc.). Name of this module isn't probably descriptive enough, it could be changed. This object (or related object) could also replace the ''TabWatcher''.&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerTool''' This object implements API related to debugging (typical methods: stepIn, stepOut, setBreakpoint, etc.). The Script panel should always consume debugger API through this object. ''DebuggerTool'' registers itself as a ''DebuggerClientModule'' and thus gets all necessary events from the back-end (e.g. onConnect, onThreadAttached, etc.)&lt;br /&gt;
&lt;br /&gt;
* '''ScriptPanel''' Represents debugger UI and listens mostly to ''onStartDebugging'' and ''onStopDebugging'' events. Those are used to properly updated the panel's UI. &lt;br /&gt;
&lt;br /&gt;
* '''ScriptView''' This object is currently based on Orion (but could be replaced by CodeMirror, see [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]). The main responsibility of this object is displaying the source code (using color syntax highlight).&lt;br /&gt;
&lt;br /&gt;
* '''CallstackPanel''' This panel displays list of frames when the debugger is halted. The frame list is synchronized with ThreadClient's stack frame cache using ''framesadded'' and ''framescleared'' events.&lt;br /&gt;
&lt;br /&gt;
* '''ThreadClient''' This object comes from Firefox platform and is responsible for tab-thread related logic.&lt;br /&gt;
&lt;br /&gt;
* '''BreakpointStore''' Responsible for breakpoint persistence across Firefox restarts (in breakpoint.json file).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Grips ===&lt;br /&gt;
A grip represents handle to server side object (see [https://wiki.mozilla.org/Remote_Debugging_Protocol#Grips RDP] for more details).&lt;br /&gt;
&lt;br /&gt;
Firebug framework introduces several objects that deals with these handles, see the next diagram.&lt;br /&gt;
&lt;br /&gt;
[[File:Grips-architecture.jpg]]&lt;br /&gt;
&lt;br /&gt;
* '''GripFactory''' This is the place where grips instances are created. Every grip object is associated with a '''class''' (see RDP) and uses '''Firebug.registerGrip''' to register itself. This factory uses a list of registered types and instantiates the right one according to the server side grip class attribute.&lt;br /&gt;
&lt;br /&gt;
* '''GripCache''' The cache is the place where panels and other parts of Firebug should ask for grip-objects. If the requested object is not in the cache a request is sent to the backend and a promise synchronously returned and asynchronously resolved. If the object is already in the cache a promise is returned and synchronously resolved. '''GripCache''' is the only place, which uses '''GripFactory'''. See more about [https://getfirebug.com/wiki/index.php/Remoting_Architecture#Asynchronous_Data_Access asynchronous data access].&lt;br /&gt;
&lt;br /&gt;
* '''ObjectGrip''' Represents a wrapper for '''RDP Grip'''&lt;br /&gt;
&lt;br /&gt;
* '''Property''' Represents a wrapper for '''RDP Property'''&lt;br /&gt;
&lt;br /&gt;
* '''FunctionGrip''' Represents a wrapper for a function object.&lt;br /&gt;
&lt;br /&gt;
* '''ScopeGrip''' Represents a wrapper for a scope object. This object is used by the '''Watch''' panel to show chain of current scopes.&lt;br /&gt;
&lt;br /&gt;
=== Breakpoints ===&lt;br /&gt;
This section describes architecture design for debugger breakpoints.&lt;br /&gt;
&lt;br /&gt;
[[File:Breakpoints-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
* '''BreakpointStore''' The main component implementing API for breakpoint creating and removal. This object is also responsible for client side persistence and initialization. There is one instance of this object per browser window. So, if a breakpoint is created in one context it automatically appears in all contexts that are using the same URL.&lt;br /&gt;
* '''FunctionMonitor''', '''ScriptPanel''', '''BreakpointPanel''', '''ConsolePanel''' These represent example objects that  are dealing with breakpoints. There is and can be even more such objects in the future. All these objects register themselves as '''BreakpointStore''' listeners and also use API implemented by '''BreakpointStore''' object.&lt;br /&gt;
* '''DebuggerTool''' is responsible for breakpoint creation/removal on the server side. '''BreakpointStore''' uses this object to sync breakpoints on the server side. There is one instance of this object per context.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See an example of a breakpoint creation (using the Script panel UI)&lt;br /&gt;
&lt;br /&gt;
[[File:Breakpoint-add-sequence.png]]&lt;br /&gt;
&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/Script_Panel_Refactoring</id>
		<title>Script Panel Refactoring</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/Script_Panel_Refactoring"/>
				<updated>2013-04-05T12:19:34Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Breakpoints */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page summarizes refactoring the Firebug debugger to use JSD2 and adding support for remote JavaScript debugging. [http://code.google.com/p/fbug/issues/detail?id=5421 Issue 5421] tracks the actual changes done.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
Firebug Wiki:&lt;br /&gt;
* [[HTTP Monitor]]&lt;br /&gt;
* [[Firebug 1.7: Mozilla Backend|Firebug 1.7 BTI]]&lt;br /&gt;
* [[Net Panel Architecture Review]]&lt;br /&gt;
* [[Remoting Prototype#Prototype|Remoting Prototype]]&lt;br /&gt;
* [[Remoting Architecture|Remoting Architecture]]&lt;br /&gt;
* [[JSD2 Adoption|JSD2 Adoption]]&lt;br /&gt;
&lt;br /&gt;
Mozilla Wiki:&lt;br /&gt;
* [https://wiki.mozilla.org/Debugger Debugger]&lt;br /&gt;
* [https://wiki.mozilla.org/Debugger_Client_API Debugger Client API]&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Guide JS Debugger API Guide]&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference JS Debugger API Reference]&lt;br /&gt;
* [https://wiki.mozilla.org/DevTools/Features/Debugger DevTools Debugger]&lt;br /&gt;
* [https://wiki.mozilla.org/Remote_Debugging_Protocol Remote Debugging Protocol]&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
* Adopt JSD2 (get rid of all JSD1 APIs)&lt;br /&gt;
* Support remote debugging&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
* [http://code.google.com/p/fbug/issues/detail?id=5421 Issue 5421]: Implement JSD2&lt;br /&gt;
* [http://code.google.com/p/fbug/issues/detail?id=5837 Issue 5837]: Implement remote debugging&lt;br /&gt;
&lt;br /&gt;
== JSD2 API Requirements ==&lt;br /&gt;
The following list summarizes the high-level features that Firebug needs to support. It should be verified that all the features can re-implemented on top of JSD2 before starting the refactoring.&lt;br /&gt;
&lt;br /&gt;
* List of scripts available on selected tab (including static, events and evaluated scripts) including iframes &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#findScripts%28%29 Debugger.findScripts()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stepping (into, over, out, resume, current line)&lt;br /&gt;
* Support for &amp;lt;code&amp;gt;debugger;&amp;lt;/code&amp;gt; keyword &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onDebuggerStatement%28%29 Debugger.onDebuggerStatement()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Support for breakpoints (add, remove, enable, disabled, conditional, list of existing breakpoints) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Script#Methods Debugger.Script methods]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Recognize executable lines&lt;br /&gt;
* Dynamic eval in a frame (used e.g. by the [[Watch Side Panel]] when the debugger is halted) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#eval%28%29 Debugger.Frame.eval()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#evalWithBindings%28%29 Debugger.Frame.evalWithBindings()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Get stack frames (including passed arguments) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#getNewestFrame%28%29 Debugger.getNewestFrame()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#Accessor_properties Debugger.Frame.older]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Scope chain variable exploring (with &amp;amp; closure scopes). It should be possible to see all values. &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#Accessor_properties Debugger.Frame.environment]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Break on next call&lt;br /&gt;
* Profiling (was part of JSD1)&lt;br /&gt;
* Tracking (break on) throw/catch/error &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onThrow%28%29 Debugger.onThrow()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onError%28%29 Debugger.onError()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tracking (monitoring) function calls&lt;br /&gt;
* Freezing page UI if debugger is halted (including timeouts, intervals and worker threads)&lt;br /&gt;
&lt;br /&gt;
=== Not Ready in JSD2 ===&lt;br /&gt;
* There is not source for evals.&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onNewScript%28%29 new Function scripts?]&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=676586 Meta bug]: Implement a script Debugger&lt;br /&gt;
** As soon as this one is fixed&lt;br /&gt;
** Profiling is unrelated to JSD2. What is the plan here?&lt;br /&gt;
** Tracking (break on) throw/catch/error; also what is the plan?&lt;br /&gt;
* Conditional breakpoints ([https://bugzilla.mozilla.org/show_bug.cgi?id=740825 bug 740825])&lt;br /&gt;
&lt;br /&gt;
== Current Debugger Architecture ==&lt;br /&gt;
This section describes the current debugger architecture.&lt;br /&gt;
&lt;br /&gt;
[[File:Current-debugger-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
There are several layers/objects so, let's describe them step by step starting from the bottom.&lt;br /&gt;
&lt;br /&gt;
* Backend: JSD1, FirebugService, Debugger&lt;br /&gt;
* Frontend: JavaScriptTool, ScriptPanel&lt;br /&gt;
&lt;br /&gt;
=== JSD1 ===&lt;br /&gt;
This layer represents JSD1 platform API. These API allows to implement script debuggers and represent direct competition to JSD2 API. Of course this layer should entirely disappear and should be replaced by JSD2.&lt;br /&gt;
&lt;br /&gt;
=== Firebug Service ===&lt;br /&gt;
Firebug service is implemented as [https://developer.mozilla.org/en-US/docs/JavaScript_code_modules/Using?redirectlocale=en-US&amp;amp;redirectslug=Using_JavaScript_code_modules js module] on top of JSD1 layer. The object is called ''FBS'' and it's purpose is to wrap JSD1 API so, they are not directly accessed anywhere else. This layer also maintain list of registered debuggers (usually &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; module) and fires various events to them (e.g. ''onToggleBreakpoint'', ''onToggleMonitor'', etc.) or execute theirs callback (e.g. ''onBreak'', ''onFunctionCall'', ''onError'', ''onThrow'', ''onScriptCreated'', etc.) &lt;br /&gt;
&lt;br /&gt;
Main responsibilities:&lt;br /&gt;
* Activate/deactivate JSD in the browser. The activation is global for all current browser windows.&lt;br /&gt;
* Hook debugger events (interrupts, break on a breakpoint, etc.)&lt;br /&gt;
* Maintains list of registered debuggers (there is usually just one - Firebug debugger) and sends events to them.&lt;br /&gt;
* Manages nested event loop that is created for the debugger UI when page JS execution breaks.&lt;br /&gt;
* Sets/removes/enables/disables/saves/loads breakpoints&lt;br /&gt;
* Implements debugger stepping over/in/out/runUntil&lt;br /&gt;
* Monitors function calls&lt;br /&gt;
* Starts/stops profiling&lt;br /&gt;
* Tracks exceptions and errors (not working well)&lt;br /&gt;
* Tracks compiled scripts (not all of them)&lt;br /&gt;
&lt;br /&gt;
=== Debugger ===&lt;br /&gt;
This object is derived from &amp;lt;code&amp;gt;Firebug.Module&amp;lt;/code&amp;gt; and represents Firebug's debugger. It's also registered as a debugger into ''Firebug Service'' (FBS). This object should be the only one accessing FBS. It calls FBS API and receives various callbacks and events.&lt;br /&gt;
&lt;br /&gt;
This object implements methods that can be used by the Script panel or other parts of Firebug (e.g. by those panels which implements BON).&lt;br /&gt;
&lt;br /&gt;
Some examples of the API:&lt;br /&gt;
* ''evaluate'', ''evaluateInCallingFrame''&lt;br /&gt;
* ''breakNow'', ''getCurrentStackTrace''&lt;br /&gt;
* ''rerun''&lt;br /&gt;
* ''stepOver'', ''stepInto'', ''stepOut'', ''runUntil, ''resume''&lt;br /&gt;
* ''setBreakpoint'', ''clearBrakpoint'', etc.&lt;br /&gt;
* ''monitorFunction'', ''unmonitorFunction''&lt;br /&gt;
* ''monitorScript'', ''unmonitorScript''&lt;br /&gt;
* ''activateDebugger'', ''deactivateDebugger''&lt;br /&gt;
&lt;br /&gt;
Implementation of these methods is based on FBS API.&lt;br /&gt;
&lt;br /&gt;
There is also &amp;lt;code&amp;gt;Firebug.DebuggerListener&amp;lt;/code&amp;gt; that defines the interface used by FBS &lt;br /&gt;
* ''onStop'', ''onResume'', ''onThrow'', ''onError'', ''onScriptCreated'' (there is more ''onScriptCreated'' events)&lt;br /&gt;
&lt;br /&gt;
This object is ''observable'' and it activates the underlying JSD only if an observer exists. The observer is currently the Script panel even if it would make a bit more sense if it's actually the ''JavaScriptTool''.&lt;br /&gt;
&lt;br /&gt;
=== JavaScriptTool ===&lt;br /&gt;
This object is part or BTI and represents a javascript debugger tool. This object is like a proxy sitting between &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; and the &amp;lt;code&amp;gt;ScriptPanel&amp;lt;/code&amp;gt;. The current implementation is in-process only so, based on direct &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; API calls.&lt;br /&gt;
&lt;br /&gt;
API of the tool is as follows:&lt;br /&gt;
* ''setBreakpoint'', ''clearBreakpoint'', ''enableBreakpoint'', ''disableBreakpoint'', ''isBreakpointDisabled'', ''getBreakpointCondition''&lt;br /&gt;
* ''rerun''&lt;br /&gt;
* ''resumeJavaScript'', ''stepOver'', ''stepInto'', ''stepOut'', ''runUntil''&lt;br /&gt;
* ''onConnect'', ''onDisconnect''&lt;br /&gt;
* ''onStartDebugging'', ''onStopDebugging''&lt;br /&gt;
* ''onCompilationUnit''&lt;br /&gt;
&lt;br /&gt;
The BTI is used by [[Crossfire]]. Crossfire has the following structure:&lt;br /&gt;
&lt;br /&gt;
    Crossfire Panel&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Module&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Server&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Socket Transport&lt;br /&gt;
&lt;br /&gt;
When starting up it does the following.&lt;br /&gt;
&lt;br /&gt;
# Register tools (e.g. console, inspector, ...)&lt;br /&gt;
# Start server&lt;br /&gt;
# Create socket transport&lt;br /&gt;
# Add BTI listener&lt;br /&gt;
# Set connection status&lt;br /&gt;
&lt;br /&gt;
=== Script Panel ===&lt;br /&gt;
The [[Script Panel]] sits at the top of the whole stack of layers/objects. It represents the debugger UI (a view + a controller). The implementation of this object is quite extensive since it also includes the source code view and viewport (see &amp;lt;code&amp;gt;[https://github.com/firebug/firebug/blob/master/extension/content/firebug/js/sourceBox.js firebug/js/sourceBox.js]&amp;lt;/code&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
The ''Script'' panel should never access the &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; directly. It should always use the &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
So, for example, if the user clicks on the Breakpoint Column, the action is handled by the ''Script'' panel, forwarded to the &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt;, which forwards it to the &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt;, which forwards it to &amp;lt;code&amp;gt;FBS&amp;lt;/code&amp;gt;. Finally, &amp;lt;code&amp;gt;FBS&amp;lt;/code&amp;gt; is using JSD1 API to set the breakpoint.&lt;br /&gt;
&lt;br /&gt;
There are side panels ([[Breakpoints Side Panel|Breakpoints]], [[Watch Side Panel|Watch]] and [[Stack Side Panel|Stack]]), which are synchronized automatically with the ''Script'' panel. They should all use &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt; to get appropriate data to display.&lt;br /&gt;
&lt;br /&gt;
The synchronization happens through basic Firebug mechanisms like, &amp;lt;code&amp;gt;updateSelection&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;updateLocation&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New Debugger Architecture ==&lt;br /&gt;
=== Panels ===&lt;br /&gt;
The Script panel needs to be built on top of JSD2, remote protocol and Firebug remoting API. Remoting is already supported by [[HTTP Monitor]].&lt;br /&gt;
&lt;br /&gt;
First of all, take a look a the following diagram.&lt;br /&gt;
&lt;br /&gt;
[[Image:New-script-panel-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerClient''' This object comes from Firefox platform and is responsible for connection to the server back-end. The object maintains the underlying transport layer, it's responsible for tab attach/detach, it implements basic packets send and receive logic. The implementation is currently within ''resource://gre/modules/devtools/dbg-client.jsm'' module.&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerClientModule''' This module (singleton, one per Firebug instance) represents a wrapper around ''DebuggerClient''. It implements connection setup and initialization (e.g. port number). This object represents the ''connection'' in Firebug and should be shared by all ''remotable'' tools (e.g. the Script panel, Net panel, Profiler, etc.). Name of this module isn't probably descriptive enough, it could be changed. This object (or related object) could also replace the ''TabWatcher''.&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerTool''' This object implements API related to debugging (typical methods: stepIn, stepOut, setBreakpoint, etc.). The Script panel should always consume debugger API through this object. ''DebuggerTool'' registers itself as a ''DebuggerClientModule'' and thus gets all necessary events from the back-end (e.g. onConnect, onThreadAttached, etc.)&lt;br /&gt;
&lt;br /&gt;
* '''ScriptPanel''' Represents debugger UI and listens mostly to ''onStartDebugging'' and ''onStopDebugging'' events. Those are used to properly updated the panel's UI. &lt;br /&gt;
&lt;br /&gt;
* '''ScriptView''' This object is currently based on Orion (but could be replaced by CodeMirror, see [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]). The main responsibility of this object is displaying the source code (using color syntax highlight).&lt;br /&gt;
&lt;br /&gt;
* '''CallstackPanel''' This panel displays list of frames when the debugger is halted. The frame list is synchronized with ThreadClient's stack frame cache using ''framesadded'' and ''framescleared'' events.&lt;br /&gt;
&lt;br /&gt;
* '''ThreadClient''' This object comes from Firefox platform and is responsible for tab-thread related logic.&lt;br /&gt;
&lt;br /&gt;
* '''BreakpointStore''' Responsible for breakpoint persistence across Firefox restarts (in breakpoint.json file).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Grips ===&lt;br /&gt;
A grip represents handle to server side object (see [https://wiki.mozilla.org/Remote_Debugging_Protocol#Grips RDP] for more details).&lt;br /&gt;
&lt;br /&gt;
Firebug framework introduces several objects that deals with these handles, see the next diagram.&lt;br /&gt;
&lt;br /&gt;
[[File:Grips-architecture.jpg]]&lt;br /&gt;
&lt;br /&gt;
* '''GripFactory''' This is the place where grips instances are created. Every grip object is associated with a '''class''' (see RDP) and uses '''Firebug.registerGrip''' to register itself. This factory uses a list of registered types and instantiates the right one according to the server side grip class attribute.&lt;br /&gt;
&lt;br /&gt;
* '''GripCache''' The cache is the place where panels and other parts of Firebug should ask for grip-objects. If the requested object is not in the cache a request is sent to the backend and a promise synchronously returned and asynchronously resolved. If the object is already in the cache a promise is returned and synchronously resolved. '''GripCache''' is the only place, which uses '''GripFactory'''. See more about [https://getfirebug.com/wiki/index.php/Remoting_Architecture#Asynchronous_Data_Access asynchronous data access].&lt;br /&gt;
&lt;br /&gt;
* '''ObjectGrip''' Represents a wrapper for '''RDP Grip'''&lt;br /&gt;
&lt;br /&gt;
* '''Property''' Represents a wrapper for '''RDP Property'''&lt;br /&gt;
&lt;br /&gt;
* '''FunctionGrip''' Represents a wrapper for a function object.&lt;br /&gt;
&lt;br /&gt;
* '''ScopeGrip''' Represents a wrapper for a scope object. This object is used by the '''Watch''' panel to show chain of current scopes.&lt;br /&gt;
&lt;br /&gt;
=== Breakpoints ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
[[File:Breakpoints-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:Breakpoint-add-sequence.png]]&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/Script_Panel_Refactoring</id>
		<title>Script Panel Refactoring</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/Script_Panel_Refactoring"/>
				<updated>2013-04-05T12:19:14Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Breakpoints */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page summarizes refactoring the Firebug debugger to use JSD2 and adding support for remote JavaScript debugging. [http://code.google.com/p/fbug/issues/detail?id=5421 Issue 5421] tracks the actual changes done.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
Firebug Wiki:&lt;br /&gt;
* [[HTTP Monitor]]&lt;br /&gt;
* [[Firebug 1.7: Mozilla Backend|Firebug 1.7 BTI]]&lt;br /&gt;
* [[Net Panel Architecture Review]]&lt;br /&gt;
* [[Remoting Prototype#Prototype|Remoting Prototype]]&lt;br /&gt;
* [[Remoting Architecture|Remoting Architecture]]&lt;br /&gt;
* [[JSD2 Adoption|JSD2 Adoption]]&lt;br /&gt;
&lt;br /&gt;
Mozilla Wiki:&lt;br /&gt;
* [https://wiki.mozilla.org/Debugger Debugger]&lt;br /&gt;
* [https://wiki.mozilla.org/Debugger_Client_API Debugger Client API]&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Guide JS Debugger API Guide]&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference JS Debugger API Reference]&lt;br /&gt;
* [https://wiki.mozilla.org/DevTools/Features/Debugger DevTools Debugger]&lt;br /&gt;
* [https://wiki.mozilla.org/Remote_Debugging_Protocol Remote Debugging Protocol]&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
* Adopt JSD2 (get rid of all JSD1 APIs)&lt;br /&gt;
* Support remote debugging&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
* [http://code.google.com/p/fbug/issues/detail?id=5421 Issue 5421]: Implement JSD2&lt;br /&gt;
* [http://code.google.com/p/fbug/issues/detail?id=5837 Issue 5837]: Implement remote debugging&lt;br /&gt;
&lt;br /&gt;
== JSD2 API Requirements ==&lt;br /&gt;
The following list summarizes the high-level features that Firebug needs to support. It should be verified that all the features can re-implemented on top of JSD2 before starting the refactoring.&lt;br /&gt;
&lt;br /&gt;
* List of scripts available on selected tab (including static, events and evaluated scripts) including iframes &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#findScripts%28%29 Debugger.findScripts()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stepping (into, over, out, resume, current line)&lt;br /&gt;
* Support for &amp;lt;code&amp;gt;debugger;&amp;lt;/code&amp;gt; keyword &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onDebuggerStatement%28%29 Debugger.onDebuggerStatement()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Support for breakpoints (add, remove, enable, disabled, conditional, list of existing breakpoints) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Script#Methods Debugger.Script methods]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Recognize executable lines&lt;br /&gt;
* Dynamic eval in a frame (used e.g. by the [[Watch Side Panel]] when the debugger is halted) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#eval%28%29 Debugger.Frame.eval()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#evalWithBindings%28%29 Debugger.Frame.evalWithBindings()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Get stack frames (including passed arguments) &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#getNewestFrame%28%29 Debugger.getNewestFrame()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#Accessor_properties Debugger.Frame.older]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Scope chain variable exploring (with &amp;amp; closure scopes). It should be possible to see all values. &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger.Frame#Accessor_properties Debugger.Frame.environment]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Break on next call&lt;br /&gt;
* Profiling (was part of JSD1)&lt;br /&gt;
* Tracking (break on) throw/catch/error &amp;amp;rarr; &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onThrow%28%29 Debugger.onThrow()]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onError%28%29 Debugger.onError()]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tracking (monitoring) function calls&lt;br /&gt;
* Freezing page UI if debugger is halted (including timeouts, intervals and worker threads)&lt;br /&gt;
&lt;br /&gt;
=== Not Ready in JSD2 ===&lt;br /&gt;
* There is not source for evals.&lt;br /&gt;
* [https://developer.mozilla.org/en/SpiderMonkey/JS_Debugger_API_Reference/Debugger#onNewScript%28%29 new Function scripts?]&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=676586 Meta bug]: Implement a script Debugger&lt;br /&gt;
** As soon as this one is fixed&lt;br /&gt;
** Profiling is unrelated to JSD2. What is the plan here?&lt;br /&gt;
** Tracking (break on) throw/catch/error; also what is the plan?&lt;br /&gt;
* Conditional breakpoints ([https://bugzilla.mozilla.org/show_bug.cgi?id=740825 bug 740825])&lt;br /&gt;
&lt;br /&gt;
== Current Debugger Architecture ==&lt;br /&gt;
This section describes the current debugger architecture.&lt;br /&gt;
&lt;br /&gt;
[[File:Current-debugger-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
There are several layers/objects so, let's describe them step by step starting from the bottom.&lt;br /&gt;
&lt;br /&gt;
* Backend: JSD1, FirebugService, Debugger&lt;br /&gt;
* Frontend: JavaScriptTool, ScriptPanel&lt;br /&gt;
&lt;br /&gt;
=== JSD1 ===&lt;br /&gt;
This layer represents JSD1 platform API. These API allows to implement script debuggers and represent direct competition to JSD2 API. Of course this layer should entirely disappear and should be replaced by JSD2.&lt;br /&gt;
&lt;br /&gt;
=== Firebug Service ===&lt;br /&gt;
Firebug service is implemented as [https://developer.mozilla.org/en-US/docs/JavaScript_code_modules/Using?redirectlocale=en-US&amp;amp;redirectslug=Using_JavaScript_code_modules js module] on top of JSD1 layer. The object is called ''FBS'' and it's purpose is to wrap JSD1 API so, they are not directly accessed anywhere else. This layer also maintain list of registered debuggers (usually &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; module) and fires various events to them (e.g. ''onToggleBreakpoint'', ''onToggleMonitor'', etc.) or execute theirs callback (e.g. ''onBreak'', ''onFunctionCall'', ''onError'', ''onThrow'', ''onScriptCreated'', etc.) &lt;br /&gt;
&lt;br /&gt;
Main responsibilities:&lt;br /&gt;
* Activate/deactivate JSD in the browser. The activation is global for all current browser windows.&lt;br /&gt;
* Hook debugger events (interrupts, break on a breakpoint, etc.)&lt;br /&gt;
* Maintains list of registered debuggers (there is usually just one - Firebug debugger) and sends events to them.&lt;br /&gt;
* Manages nested event loop that is created for the debugger UI when page JS execution breaks.&lt;br /&gt;
* Sets/removes/enables/disables/saves/loads breakpoints&lt;br /&gt;
* Implements debugger stepping over/in/out/runUntil&lt;br /&gt;
* Monitors function calls&lt;br /&gt;
* Starts/stops profiling&lt;br /&gt;
* Tracks exceptions and errors (not working well)&lt;br /&gt;
* Tracks compiled scripts (not all of them)&lt;br /&gt;
&lt;br /&gt;
=== Debugger ===&lt;br /&gt;
This object is derived from &amp;lt;code&amp;gt;Firebug.Module&amp;lt;/code&amp;gt; and represents Firebug's debugger. It's also registered as a debugger into ''Firebug Service'' (FBS). This object should be the only one accessing FBS. It calls FBS API and receives various callbacks and events.&lt;br /&gt;
&lt;br /&gt;
This object implements methods that can be used by the Script panel or other parts of Firebug (e.g. by those panels which implements BON).&lt;br /&gt;
&lt;br /&gt;
Some examples of the API:&lt;br /&gt;
* ''evaluate'', ''evaluateInCallingFrame''&lt;br /&gt;
* ''breakNow'', ''getCurrentStackTrace''&lt;br /&gt;
* ''rerun''&lt;br /&gt;
* ''stepOver'', ''stepInto'', ''stepOut'', ''runUntil, ''resume''&lt;br /&gt;
* ''setBreakpoint'', ''clearBrakpoint'', etc.&lt;br /&gt;
* ''monitorFunction'', ''unmonitorFunction''&lt;br /&gt;
* ''monitorScript'', ''unmonitorScript''&lt;br /&gt;
* ''activateDebugger'', ''deactivateDebugger''&lt;br /&gt;
&lt;br /&gt;
Implementation of these methods is based on FBS API.&lt;br /&gt;
&lt;br /&gt;
There is also &amp;lt;code&amp;gt;Firebug.DebuggerListener&amp;lt;/code&amp;gt; that defines the interface used by FBS &lt;br /&gt;
* ''onStop'', ''onResume'', ''onThrow'', ''onError'', ''onScriptCreated'' (there is more ''onScriptCreated'' events)&lt;br /&gt;
&lt;br /&gt;
This object is ''observable'' and it activates the underlying JSD only if an observer exists. The observer is currently the Script panel even if it would make a bit more sense if it's actually the ''JavaScriptTool''.&lt;br /&gt;
&lt;br /&gt;
=== JavaScriptTool ===&lt;br /&gt;
This object is part or BTI and represents a javascript debugger tool. This object is like a proxy sitting between &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; and the &amp;lt;code&amp;gt;ScriptPanel&amp;lt;/code&amp;gt;. The current implementation is in-process only so, based on direct &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; API calls.&lt;br /&gt;
&lt;br /&gt;
API of the tool is as follows:&lt;br /&gt;
* ''setBreakpoint'', ''clearBreakpoint'', ''enableBreakpoint'', ''disableBreakpoint'', ''isBreakpointDisabled'', ''getBreakpointCondition''&lt;br /&gt;
* ''rerun''&lt;br /&gt;
* ''resumeJavaScript'', ''stepOver'', ''stepInto'', ''stepOut'', ''runUntil''&lt;br /&gt;
* ''onConnect'', ''onDisconnect''&lt;br /&gt;
* ''onStartDebugging'', ''onStopDebugging''&lt;br /&gt;
* ''onCompilationUnit''&lt;br /&gt;
&lt;br /&gt;
The BTI is used by [[Crossfire]]. Crossfire has the following structure:&lt;br /&gt;
&lt;br /&gt;
    Crossfire Panel&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Module&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Server&lt;br /&gt;
        ↓&lt;br /&gt;
    Crossfire Socket Transport&lt;br /&gt;
&lt;br /&gt;
When starting up it does the following.&lt;br /&gt;
&lt;br /&gt;
# Register tools (e.g. console, inspector, ...)&lt;br /&gt;
# Start server&lt;br /&gt;
# Create socket transport&lt;br /&gt;
# Add BTI listener&lt;br /&gt;
# Set connection status&lt;br /&gt;
&lt;br /&gt;
=== Script Panel ===&lt;br /&gt;
The [[Script Panel]] sits at the top of the whole stack of layers/objects. It represents the debugger UI (a view + a controller). The implementation of this object is quite extensive since it also includes the source code view and viewport (see &amp;lt;code&amp;gt;[https://github.com/firebug/firebug/blob/master/extension/content/firebug/js/sourceBox.js firebug/js/sourceBox.js]&amp;lt;/code&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
The ''Script'' panel should never access the &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt; directly. It should always use the &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
So, for example, if the user clicks on the Breakpoint Column, the action is handled by the ''Script'' panel, forwarded to the &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt;, which forwards it to the &amp;lt;code&amp;gt;Firebug.Debugger&amp;lt;/code&amp;gt;, which forwards it to &amp;lt;code&amp;gt;FBS&amp;lt;/code&amp;gt;. Finally, &amp;lt;code&amp;gt;FBS&amp;lt;/code&amp;gt; is using JSD1 API to set the breakpoint.&lt;br /&gt;
&lt;br /&gt;
There are side panels ([[Breakpoints Side Panel|Breakpoints]], [[Watch Side Panel|Watch]] and [[Stack Side Panel|Stack]]), which are synchronized automatically with the ''Script'' panel. They should all use &amp;lt;code&amp;gt;JavaScriptTool&amp;lt;/code&amp;gt; to get appropriate data to display.&lt;br /&gt;
&lt;br /&gt;
The synchronization happens through basic Firebug mechanisms like, &amp;lt;code&amp;gt;updateSelection&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;updateLocation&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== New Debugger Architecture ==&lt;br /&gt;
=== Panels ===&lt;br /&gt;
The Script panel needs to be built on top of JSD2, remote protocol and Firebug remoting API. Remoting is already supported by [[HTTP Monitor]].&lt;br /&gt;
&lt;br /&gt;
First of all, take a look a the following diagram.&lt;br /&gt;
&lt;br /&gt;
[[Image:New-script-panel-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerClient''' This object comes from Firefox platform and is responsible for connection to the server back-end. The object maintains the underlying transport layer, it's responsible for tab attach/detach, it implements basic packets send and receive logic. The implementation is currently within ''resource://gre/modules/devtools/dbg-client.jsm'' module.&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerClientModule''' This module (singleton, one per Firebug instance) represents a wrapper around ''DebuggerClient''. It implements connection setup and initialization (e.g. port number). This object represents the ''connection'' in Firebug and should be shared by all ''remotable'' tools (e.g. the Script panel, Net panel, Profiler, etc.). Name of this module isn't probably descriptive enough, it could be changed. This object (or related object) could also replace the ''TabWatcher''.&lt;br /&gt;
&lt;br /&gt;
* '''DebuggerTool''' This object implements API related to debugging (typical methods: stepIn, stepOut, setBreakpoint, etc.). The Script panel should always consume debugger API through this object. ''DebuggerTool'' registers itself as a ''DebuggerClientModule'' and thus gets all necessary events from the back-end (e.g. onConnect, onThreadAttached, etc.)&lt;br /&gt;
&lt;br /&gt;
* '''ScriptPanel''' Represents debugger UI and listens mostly to ''onStartDebugging'' and ''onStopDebugging'' events. Those are used to properly updated the panel's UI. &lt;br /&gt;
&lt;br /&gt;
* '''ScriptView''' This object is currently based on Orion (but could be replaced by CodeMirror, see [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]). The main responsibility of this object is displaying the source code (using color syntax highlight).&lt;br /&gt;
&lt;br /&gt;
* '''CallstackPanel''' This panel displays list of frames when the debugger is halted. The frame list is synchronized with ThreadClient's stack frame cache using ''framesadded'' and ''framescleared'' events.&lt;br /&gt;
&lt;br /&gt;
* '''ThreadClient''' This object comes from Firefox platform and is responsible for tab-thread related logic.&lt;br /&gt;
&lt;br /&gt;
* '''BreakpointStore''' Responsible for breakpoint persistence across Firefox restarts (in breakpoint.json file).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Grips ===&lt;br /&gt;
A grip represents handle to server side object (see [https://wiki.mozilla.org/Remote_Debugging_Protocol#Grips RDP] for more details).&lt;br /&gt;
&lt;br /&gt;
Firebug framework introduces several objects that deals with these handles, see the next diagram.&lt;br /&gt;
&lt;br /&gt;
[[File:Grips-architecture.jpg]]&lt;br /&gt;
&lt;br /&gt;
* '''GripFactory''' This is the place where grips instances are created. Every grip object is associated with a '''class''' (see RDP) and uses '''Firebug.registerGrip''' to register itself. This factory uses a list of registered types and instantiates the right one according to the server side grip class attribute.&lt;br /&gt;
&lt;br /&gt;
* '''GripCache''' The cache is the place where panels and other parts of Firebug should ask for grip-objects. If the requested object is not in the cache a request is sent to the backend and a promise synchronously returned and asynchronously resolved. If the object is already in the cache a promise is returned and synchronously resolved. '''GripCache''' is the only place, which uses '''GripFactory'''. See more about [https://getfirebug.com/wiki/index.php/Remoting_Architecture#Asynchronous_Data_Access asynchronous data access].&lt;br /&gt;
&lt;br /&gt;
* '''ObjectGrip''' Represents a wrapper for '''RDP Grip'''&lt;br /&gt;
&lt;br /&gt;
* '''Property''' Represents a wrapper for '''RDP Property'''&lt;br /&gt;
&lt;br /&gt;
* '''FunctionGrip''' Represents a wrapper for a function object.&lt;br /&gt;
&lt;br /&gt;
* '''ScopeGrip''' Represents a wrapper for a scope object. This object is used by the '''Watch''' panel to show chain of current scopes.&lt;br /&gt;
&lt;br /&gt;
=== Breakpoints ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
[[File:Breakpoints-architecture.png]]&lt;br /&gt;
&lt;br /&gt;
[[Breakpoint-add-sequence.png]]&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/File:Breakpoint-add-sequence.png</id>
		<title>File:Breakpoint-add-sequence.png</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/File:Breakpoint-add-sequence.png"/>
				<updated>2013-04-05T12:19:01Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/File:Breakpoints-architecture.png</id>
		<title>File:Breakpoints-architecture.png</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/File:Breakpoints-architecture.png"/>
				<updated>2013-04-05T12:18:10Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-04-02T16:02:49Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* [[Script Panel Refactoring]]&lt;br /&gt;
* [[Remoting Architecture]]&lt;br /&gt;
* [[Remote Selector]]&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Monitor breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;XHR breakpoints (local scenario only)&amp;lt;/strike&amp;gt;[https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** &amp;lt;strike&amp;gt;Mutation breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857], [https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** &amp;lt;strike&amp;gt;respect 'actualLocation' sent back from the server (corrected BP location)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;The breakpoint condition editor does not disappear when clicking outside of it.&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** The bp-condition-editor doesn't scroll&lt;br /&gt;
* Use CodeMirror instead of Orion? See [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Restore expanded state of the Watch window across stepping.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see [https://bugzilla.mozilla.org/show_bug.cgi?id=797876 bug 797876]&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Edit Breakpoint Condition&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
* Debugging two tabs at once.&lt;br /&gt;
* Source Maps: https://github.com/mozilla/source-map&lt;br /&gt;
* Script panel search&lt;br /&gt;
** Search multiple files&lt;br /&gt;
** Search for regular expression&lt;br /&gt;
** Goto line&lt;br /&gt;
* FirebugRep.supportsObject() could use third parameter for remote-object-types&lt;br /&gt;
** See also Simon's [https://github.com/firebug/firebug/commit/5c220f5ea1045e7921dd92d8c255e9e4b35b85d9#commitcomment-2536753 comment]&lt;br /&gt;
* The Watch panel&lt;br /&gt;
** Changing local variable or argument needs environment actor re-fetch from the server&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing reports in Firebug issue list use label: &amp;lt;b&amp;gt;jsd2&amp;lt;/b&amp;gt; so, you can [http://code.google.com/p/fbug/issues/list?can=2&amp;amp;q=label%3Ajsd2 search] for them.&lt;br /&gt;
&lt;br /&gt;
=== Bugzilla ===&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=800200 Bug 800200] - rm JSD&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=837723 Bug 837723] - Introduce a new method in IJSDebugger allowing to get DO referent.&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-04-02T15:38:40Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* [[Script Panel Refactoring]]&lt;br /&gt;
* [[Remoting Architecture]]&lt;br /&gt;
* [[Remote Selector]]&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Monitor breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;XHR breakpoints (local scenario only)&amp;lt;/strike&amp;gt;[https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** &amp;lt;strike&amp;gt;Mutation breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857], [https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** &amp;lt;strike&amp;gt;respect 'actualLocation' sent back from the server (corrected BP location)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;The breakpoint condition editor does not disappear when clicking outside of it.&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** The bp-condition-editor doesn't scroll&lt;br /&gt;
* Use CodeMirror instead of Orion? See [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see [https://bugzilla.mozilla.org/show_bug.cgi?id=797876 bug 797876]&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Edit Breakpoint Condition&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
* Debugging two tabs at once.&lt;br /&gt;
* Source Maps: https://github.com/mozilla/source-map&lt;br /&gt;
* Script panel search&lt;br /&gt;
** Search multiple files&lt;br /&gt;
** Search for regular expression&lt;br /&gt;
** Goto line&lt;br /&gt;
* FirebugRep.supportsObject() could use third parameter for remote-object-types&lt;br /&gt;
** See also Simon's [https://github.com/firebug/firebug/commit/5c220f5ea1045e7921dd92d8c255e9e4b35b85d9#commitcomment-2536753 comment]&lt;br /&gt;
* The Watch panel&lt;br /&gt;
** Changing local variable or argument needs environment actor re-fetch from the server&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing reports in Firebug issue list use label: &amp;lt;b&amp;gt;jsd2&amp;lt;/b&amp;gt; so, you can [http://code.google.com/p/fbug/issues/list?can=2&amp;amp;q=label%3Ajsd2 search] for them.&lt;br /&gt;
&lt;br /&gt;
=== Bugzilla ===&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=800200 Bug 800200] - rm JSD&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=837723 Bug 837723] - Introduce a new method in IJSDebugger allowing to get DO referent.&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-03-29T07:46:27Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* [[Script Panel Refactoring]]&lt;br /&gt;
* [[Remoting Architecture]]&lt;br /&gt;
* [[Remote Selector]]&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Monitor breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** XHR breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857], [https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;The breakpoint condition editor does not disappear when clicking outside of it.&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** The bp-condition-editor doesn't scroll&lt;br /&gt;
* Use CodeMirror instead of Orion? See [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see [https://bugzilla.mozilla.org/show_bug.cgi?id=797876 bug 797876]&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Edit Breakpoint Condition&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
* Debugging two tabs at once.&lt;br /&gt;
* Source Maps: https://github.com/mozilla/source-map&lt;br /&gt;
* Script panel search&lt;br /&gt;
** Search multiple files&lt;br /&gt;
** Search for regular expression&lt;br /&gt;
** Goto line&lt;br /&gt;
* FirebugRep.supportsObject() could use third parameter for remote-object-types&lt;br /&gt;
** See also Simon's [https://github.com/firebug/firebug/commit/5c220f5ea1045e7921dd92d8c255e9e4b35b85d9#commitcomment-2536753 comment]&lt;br /&gt;
* The Watch panel&lt;br /&gt;
** Changing local variable or argument needs environment actor re-fetch from the server&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing reports in Firebug issue list use label: &amp;lt;b&amp;gt;jsd2&amp;lt;/b&amp;gt; so, you can [http://code.google.com/p/fbug/issues/list?can=2&amp;amp;q=label%3Ajsd2 search] for them.&lt;br /&gt;
&lt;br /&gt;
=== Bugzilla ===&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=800200 Bug 800200] - rm JSD&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=837723 Bug 837723] - Introduce a new method in IJSDebugger allowing to get DO referent.&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-03-21T15:44:27Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* [[Script Panel Refactoring]]&lt;br /&gt;
* [[Remoting Architecture]]&lt;br /&gt;
* [[Remote Selector]]&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857], [https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;The breakpoint condition editor does not disappear when clicking outside of it.&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** The bp-condition-editor doesn't scroll&lt;br /&gt;
* Use CodeMirror instead of Orion? See [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see [https://bugzilla.mozilla.org/show_bug.cgi?id=797876 bug 797876]&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Edit Breakpoint Condition&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
* Debugging two tabs at once.&lt;br /&gt;
* Source Maps: https://github.com/mozilla/source-map&lt;br /&gt;
* Script panel search&lt;br /&gt;
** Search multiple files&lt;br /&gt;
** Search for regular expression&lt;br /&gt;
** Goto line&lt;br /&gt;
* FirebugRep.supportsObject() could use third parameter for remote-object-types&lt;br /&gt;
** See also Simon's [https://github.com/firebug/firebug/commit/5c220f5ea1045e7921dd92d8c255e9e4b35b85d9#commitcomment-2536753 comment]&lt;br /&gt;
* The Watch panel&lt;br /&gt;
** Changing local variable or argument needs environment actor re-fetch from the server&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing reports in Firebug issue list use label: &amp;lt;b&amp;gt;jsd2&amp;lt;/b&amp;gt; so, you can [http://code.google.com/p/fbug/issues/list?can=2&amp;amp;q=label%3Ajsd2 search] for them.&lt;br /&gt;
&lt;br /&gt;
=== Bugzilla ===&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=800200 Bug 800200] - rm JSD&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=837723 Bug 837723] - Introduce a new method in IJSDebugger allowing to get DO referent.&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-03-21T15:44:07Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* [[Script Panel Refactoring]]&lt;br /&gt;
* [[Remoting Architecture]]&lt;br /&gt;
* [[Remote Selector]]&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857], [https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;The breakpoint condition editor does not disappear when clicking outside of it.&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** The bp-condition-editor doesn't scroll&lt;br /&gt;
* Use CodeMirror instead of Orion? See [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see [https://bugzilla.mozilla.org/show_bug.cgi?id=797876 bug 797876]&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Edit Breakpoint Condition&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
* Debugging two tabs at once.&lt;br /&gt;
* Source Maps: https://github.com/mozilla/source-map&lt;br /&gt;
* Script panel search&lt;br /&gt;
** Search multiple files&lt;br /&gt;
** Search for regular expression&lt;br /&gt;
** Goto line&lt;br /&gt;
* FirebugRep.supportsObject() could use third parameter for remote-object-types&lt;br /&gt;
** See also Simon's [https://github.com/firebug/firebug/commit/5c220f5ea1045e7921dd92d8c255e9e4b35b85d9#commitcomment-2536753 comment]&lt;br /&gt;
* The Watch panel&lt;br /&gt;
** Changing local variable or argument needs envirnment actor refetch from the server&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing reports in Firebug issue list use label: &amp;lt;b&amp;gt;jsd2&amp;lt;/b&amp;gt; so, you can [http://code.google.com/p/fbug/issues/list?can=2&amp;amp;q=label%3Ajsd2 search] for them.&lt;br /&gt;
&lt;br /&gt;
=== Bugzilla ===&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=800200 Bug 800200] - rm JSD&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=837723 Bug 837723] - Introduce a new method in IJSDebugger allowing to get DO referent.&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-02-05T07:05:19Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Bugzilla */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* [[Script Panel Refactoring]]&lt;br /&gt;
* [[Remoting Architecture]]&lt;br /&gt;
* [[Remote Selector]]&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857], [https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;The breakpoint condition editor does not disappear when clicking outside of it.&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** The bp-condition-editor doesn't scroll&lt;br /&gt;
* Use CodeMirror instead of Orion? See [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see [https://bugzilla.mozilla.org/show_bug.cgi?id=797876 bug 797876]&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Edit Breakpoint Condition&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
* Debugging two tabs at once.&lt;br /&gt;
* Source Maps: https://github.com/mozilla/source-map&lt;br /&gt;
* Script panel search&lt;br /&gt;
** Search multiple files&lt;br /&gt;
** Search for regular expression&lt;br /&gt;
** Goto line&lt;br /&gt;
* FirebugRep.supportsObject() could use third parameter for remote-object-types&lt;br /&gt;
** See also Simon's [https://github.com/firebug/firebug/commit/5c220f5ea1045e7921dd92d8c255e9e4b35b85d9#commitcomment-2536753 comment]&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing reports in Firebug issue list use label: &amp;lt;b&amp;gt;jsd2&amp;lt;/b&amp;gt; so, you can [http://code.google.com/p/fbug/issues/list?can=2&amp;amp;q=label%3Ajsd2 search] for them.&lt;br /&gt;
&lt;br /&gt;
=== Bugzilla ===&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=800200 Bug 800200] - rm JSD&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=837723 Bug 837723] - Introduce a new method in IJSDebugger allowing to get DO referent.&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-02-05T07:04:13Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Related Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* [[Script Panel Refactoring]]&lt;br /&gt;
* [[Remoting Architecture]]&lt;br /&gt;
* [[Remote Selector]]&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857], [https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;The breakpoint condition editor does not disappear when clicking outside of it.&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** The bp-condition-editor doesn't scroll&lt;br /&gt;
* Use CodeMirror instead of Orion? See [https://bugzilla.mozilla.org/show_bug.cgi?id=816756 bug 816756]&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see [https://bugzilla.mozilla.org/show_bug.cgi?id=797876 bug 797876]&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Edit Breakpoint Condition&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
* Debugging two tabs at once.&lt;br /&gt;
* Source Maps: https://github.com/mozilla/source-map&lt;br /&gt;
* Script panel search&lt;br /&gt;
** Search multiple files&lt;br /&gt;
** Search for regular expression&lt;br /&gt;
** Goto line&lt;br /&gt;
* FirebugRep.supportsObject() could use third parameter for remote-object-types&lt;br /&gt;
** See also Simon's [https://github.com/firebug/firebug/commit/5c220f5ea1045e7921dd92d8c255e9e4b35b85d9#commitcomment-2536753 comment]&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing reports in Firebug issue list use label: &amp;lt;b&amp;gt;jsd2&amp;lt;/b&amp;gt; so, you can [http://code.google.com/p/fbug/issues/list?can=2&amp;amp;q=label%3Ajsd2 search] for them.&lt;br /&gt;
&lt;br /&gt;
=== Bugzilla ===&lt;br /&gt;
* [https://bugzilla.mozilla.org/show_bug.cgi?id=837723 Bug 837723] - Introduce a new method in IJSDebugger allowing to get DO referent.&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-02-01T12:38:26Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Script_Panel_Refactoring&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remoting_Architecture&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remote_Selector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857], [https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;The breakpoint condition editor does not disappear when clicking outside of it.&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** The bp-condition-editor doesn't scroll&lt;br /&gt;
* Use CodeMirror instead of Orion? See Bug 816756&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see bug 797876&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Edit Breakpoint Condition&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
* Debugging two tabs at once.&lt;br /&gt;
* Source Maps: https://github.com/mozilla/source-map&lt;br /&gt;
&lt;br /&gt;
* FirebugRep.supportsObject() could use third parameter for remote-object-types&lt;br /&gt;
** See also Simon's [https://github.com/firebug/firebug/commit/5c220f5ea1045e7921dd92d8c255e9e4b35b85d9#commitcomment-2536753 comment]&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing bug reports use label: &amp;lt;b&amp;gt;jsd2&amp;lt;/b&amp;gt; so, you can [http://code.google.com/p/fbug/issues/list?can=2&amp;amp;q=label%3Ajsd2+&amp;amp;colspec=ID+Type+Status+Owner+Test+Summary+Reporter&amp;amp;cells=tiles search] for them.&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-02-01T12:36:09Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Related Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Script_Panel_Refactoring&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remoting_Architecture&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remote_Selector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857], [https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;The breakpoint condition editor does not disappear when clicking outside of it.&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** The bp-condition-editor doesn't scroll&lt;br /&gt;
* Use CodeMirror instead of Orion? See Bug 816756&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see bug 797876&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Edit Breakpoint Condition&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
* Debugging two tabs at once.&lt;br /&gt;
* Source Maps: https://github.com/mozilla/source-map&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing bug reports use label: &amp;lt;b&amp;gt;jsd2&amp;lt;/b&amp;gt; so, you can [http://code.google.com/p/fbug/issues/list?can=2&amp;amp;q=label%3Ajsd2+&amp;amp;colspec=ID+Type+Status+Owner+Test+Summary+Reporter&amp;amp;cells=tiles search] for them.&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/Firebug_Coding_Style</id>
		<title>Firebug Coding Style</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/Firebug_Coding_Style"/>
				<updated>2013-01-30T14:44:24Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Whitespace */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document attempts to explain the basic styles and patterns, that are used in the Firebug codebase. New code should try to conform to these standards, so that it is as easy to maintain as existing code. Of course every rule has an exception, but it's important to know the rules nonetheless!&lt;br /&gt;
&lt;br /&gt;
== Formatting Code ==&lt;br /&gt;
=== File Encoding ===&lt;br /&gt;
All source files should be encoded in UTF-8 without [http://en.wikipedia.org/wiki/Byte_order_mark BOM].&lt;br /&gt;
&lt;br /&gt;
=== Whitespace ===&lt;br /&gt;
No tabs. No whitespace at the end of a line. But, every line should end with a line feed character (&amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;, Unicode: &amp;lt;code&amp;gt;0x0A&amp;lt;/code&amp;gt;), also the last line of a file.&lt;br /&gt;
&lt;br /&gt;
Operators are surrounded by spaces as well as parameters in a function call.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var text = &amp;quot;Message: &amp;quot; + msgID + &amp;quot;: &amp;quot; + msgText;&lt;br /&gt;
var result = result ? &amp;quot;positive&amp;quot; : &amp;quot;negative&amp;quot;;&lt;br /&gt;
var target = event.target || document.getElementsByTagName(&amp;quot;body&amp;quot;)[0];&lt;br /&gt;
var expression = getExpressionAt(rangeParent.data, rangeOffset);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The incrementation and decrementation operators are not separated by spaces. So e.g. you should write &amp;lt;code&amp;gt;while(i-- &amp;gt; 0)&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;while(i --&amp;gt; 0)&amp;lt;/code&amp;gt; to avoid misinterpretations.&lt;br /&gt;
&lt;br /&gt;
=== Source File Size ===&lt;br /&gt;
A source file should avoid huge amount of code lines. Couple thousands of lines in a file is already a lot. Firebug is using [http://wiki.commonjs.org/wiki/Modules/AsynchronousDefinition AMD syntax] and more smaller files (modules) is preferred.&lt;br /&gt;
&lt;br /&gt;
=== Line Length ===&lt;br /&gt;
100 characters or less. There is no exception in &amp;lt;code&amp;gt;*.js&amp;lt;/code&amp;gt; files! In some cases this rule can be broken in &amp;lt;code&amp;gt;*.html&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;*.xul&amp;lt;/code&amp;gt; files. But keep in mind long lines are hard to read (also search results are hard to read).&lt;br /&gt;
&lt;br /&gt;
When wrapping lines, operators stay at the end of a line.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if ((... &amp;amp;&amp;amp;&lt;br /&gt;
    ...) ||&lt;br /&gt;
    ...)&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var string = ... +&lt;br /&gt;
    ...;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also member operators stay at the end of the line.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var service = Cc[...].&lt;br /&gt;
    getService(...);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Indentation === &lt;br /&gt;
Four spaces per logic level.&lt;br /&gt;
&lt;br /&gt;
=== Commands === &lt;br /&gt;
Every command must end with a semicolon.&lt;br /&gt;
&lt;br /&gt;
Variable definitions should be done separately, not comma-separated.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var foo = 1;&lt;br /&gt;
var bar = 2;&lt;br /&gt;
&lt;br /&gt;
foo = someFunction();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== License ===&lt;br /&gt;
Files should include a license note at the first line of the file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/* See license.txt for terms of usage */&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case of &amp;lt;code&amp;gt;*.xml&amp;lt;/code&amp;gt; files (e.g. in overlays), this must be after XML declaration, for example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- See license.txt for terms of usage --&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/xml&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case of &amp;lt;code&amp;gt;*.properties&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;*.manifest&amp;lt;/code&amp;gt; files, this must be commented using # character.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;properties&amp;quot;&amp;gt;&lt;br /&gt;
# See license.txt for terms of usage&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Control Structures ===&lt;br /&gt;
Existing Firebug codebase uses braces on the next line like as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function foo()&lt;br /&gt;
{&lt;br /&gt;
    // ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Yes, there can be exceptions and [http://en.wikipedia.org/wiki/The_C_Programming_Language_%28book%29 K&amp;amp;R] style can be preferred in some cases. For example, definition of a config object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var foo = { prop1: &amp;quot;value1&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
var bar = {&lt;br /&gt;
    prop1: &amp;quot;value1&amp;quot;,&lt;br /&gt;
    prop2: &amp;quot;value2&amp;quot;,&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anyway, class and function definitions should always have the braces on the next line as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Firebug.MyModule = extend(Firebug.Module,&lt;br /&gt;
{&lt;br /&gt;
    initializeUI: function()&lt;br /&gt;
    {&lt;br /&gt;
    },&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function myFunction()&lt;br /&gt;
{&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Control structures should look like as follows (also notice the spacing between a keyword and the left bracket):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if (...)&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
else if (...)&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example showing how to deal with spaces:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if ((a &amp;gt; 0) &amp;amp;&amp;amp; (b &amp;gt; 0))&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
switch (...)&lt;br /&gt;
{&lt;br /&gt;
    case 1:&lt;br /&gt;
        ...&lt;br /&gt;
        break;&lt;br /&gt;
&lt;br /&gt;
    case 2:&lt;br /&gt;
        ...&lt;br /&gt;
        break;&lt;br /&gt;
&lt;br /&gt;
    default:&lt;br /&gt;
        ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ternary expressions must be wrapped in brackets for clarity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var variable = (condition ? true : false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To avoid misunderstandings ''for'' loops are always written in their long form, i.e. loop heads like &amp;lt;code&amp;gt;for (var i = count; i--; )&amp;lt;/code&amp;gt; should be avoided in favor of &amp;lt;code&amp;gt;for (var i = count-1; i&amp;gt;=0; i--)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
for (var i=0; i&amp;lt;10; i++)&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
try&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
catch (err)&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Firebug prefers no braces, if they are not necessary.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if (...)&lt;br /&gt;
    dump(true);&lt;br /&gt;
else&lt;br /&gt;
    dump(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But if one of the branches needs braces use them for all. Also note&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if (...)&lt;br /&gt;
{&lt;br /&gt;
    dump(&amp;quot;0&amp;quot;);&lt;br /&gt;
    dump(&amp;quot;1&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    dump(2);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the head of a control structure is wrapped into several lines because it is longer than the maximum line length, also use braces, even when the block just contains one line.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if (...&lt;br /&gt;
    ...)&lt;br /&gt;
{&lt;br /&gt;
    dump(&amp;quot;0&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    dump(2);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Firebug prefers no brackets for operators like &amp;lt;code&amp;gt;typeof&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if (typeof variable == &amp;quot;object&amp;quot;)&lt;br /&gt;
    return false;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Comments ===&lt;br /&gt;
Multi-line as well as single line comments should always be put into their own line.&lt;br /&gt;
So you should write:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// This is a comment&lt;br /&gt;
var abc = xyz;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To describe what specific functions do, especially published APIs, [http://en.wikipedia.org/wiki/JSDoc JSDoc] comments are used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Returns the domain of a given URL&lt;br /&gt;
 * &lt;br /&gt;
 * @param {string} url URL, for which to get the domain&lt;br /&gt;
 * &lt;br /&gt;
 * @return {string} Domain&lt;br /&gt;
 */&lt;br /&gt;
Url.getDomain = function(url)&lt;br /&gt;
{&lt;br /&gt;
    var m = /[^:]+:\/{1,3}([^\/]+)/.exec(url);&lt;br /&gt;
    return m ? m[1] : &amp;quot;&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Horizontal Lines ===&lt;br /&gt;
&lt;br /&gt;
Sometimes it is helpful to divide portions of a file by a horizontal line. For this you should use following comment (100 characters long):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// ********************************************************************************************* //&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Firebug codebase also uses the following horizontal separator for dividing members of one object (this separator uses indentation (4 spaces) since it's used within an object scope that is indented (100 characters long).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
American English is used for all labels and comments. That means, that you should write e.g. &amp;lt;code&amp;gt;synchronize&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;synchronise&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;color&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;colour&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Functions and Methods ===&lt;br /&gt;
Functions should use camelCase but should not capitalize the first letter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function foo()&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function myFoo()&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Objects ===&lt;br /&gt;
Constructors for objects should be capitalized and use CamelCase.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function ObjectConstructor()&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Firebug.MyModule = extend(Firebug.Module,&lt;br /&gt;
{&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
MyObject.prototype = ()&lt;br /&gt;
{&lt;br /&gt;
    myMethod: function()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Constants ===&lt;br /&gt;
Constants should be capitalized as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var MY_CONSTANT = true;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt;, since the code can also be used in the browser environment where ''const'' is not supported.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
Variables should use camelCase and not capitalize the first letter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var thisIsMyVariable = true;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Prefixes ===&lt;br /&gt;
Firebug codebase doesn't use any prefixes for member fields.&lt;br /&gt;
&lt;br /&gt;
== Good Practices ==&lt;br /&gt;
&lt;br /&gt;
=== Vertical Indentation ===&lt;br /&gt;
Method defintions should be separated by a new line. Note the new line between ''initialize'' and ''shutdown'' methods.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Firebug.MyModule = extend(Firebug.Module,&lt;br /&gt;
{&lt;br /&gt;
    initialize: function()&lt;br /&gt;
    {&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    shutdown: function()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also portions of code logically belonging together should be separated by a new line from other code. Note the new line between ''super.initialize'' and ''this.onMutateText''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
initialize: function()&lt;br /&gt;
{&lt;br /&gt;
    super.initialize.apply(this, arguments);&lt;br /&gt;
&lt;br /&gt;
    this.onMutateText = bind(this.onMutateText, this);&lt;br /&gt;
    this.onMutateAttr = bind(this.onMutateAttr, this);&lt;br /&gt;
    this.onMutateNode = bind(this.onMutateNode, this);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Horizontal lines should be surrounded by new lines too&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function myFunc1()&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ********************************************************************************************* //&lt;br /&gt;
&lt;br /&gt;
function myFunc2()&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example File ==&lt;br /&gt;
Example of a typical Firebug file implementing a module object. Firebug namespaces (FBL.ns) are no longer the preferred way for Firebug files. See AMD below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/* See license.txt for terms of usage */&lt;br /&gt;
&lt;br /&gt;
FBL.ns(function() {&lt;br /&gt;
&lt;br /&gt;
// ********************************************************************************************* //&lt;br /&gt;
// Constants&lt;br /&gt;
&lt;br /&gt;
var MY_CONSTANT = true;&lt;br /&gt;
&lt;br /&gt;
// ********************************************************************************************* //&lt;br /&gt;
// Module Implementation&lt;br /&gt;
&lt;br /&gt;
Firebug.MyModule = extend(Firebug.Module,&lt;br /&gt;
{&lt;br /&gt;
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //&lt;br /&gt;
    // Initialization&lt;br /&gt;
&lt;br /&gt;
    initializeUI: function()&lt;br /&gt;
    {&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //&lt;br /&gt;
    // Toolbar Actions&lt;br /&gt;
&lt;br /&gt;
    myButtonHandler: function()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// ********************************************************************************************* //&lt;br /&gt;
// Registration&lt;br /&gt;
&lt;br /&gt;
Firebug.registerModule(Firebug.StartButton);&lt;br /&gt;
&lt;br /&gt;
// ********************************************************************************************* //&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code should also have [[Firebug Source Code Comments|comments]].&lt;br /&gt;
&lt;br /&gt;
== Example Module File ==&lt;br /&gt;
Example of a typical [http://wiki.commonjs.org/wiki/Modules/AsynchronousDefinition asynchronous module definition (AMD)]. Every file in Firebug source base should use the AMD pattern starting from Firebug 1.8.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/* See license.txt for terms of usage */&lt;br /&gt;
&lt;br /&gt;
define([&lt;br /&gt;
    &amp;quot;firebug/lib&amp;quot;,&lt;br /&gt;
    &amp;quot;firebug/firebug&amp;quot;,&lt;br /&gt;
    &amp;quot;firebug/domplate&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
function(FBL, Firebug, Domplate) {&lt;br /&gt;
&lt;br /&gt;
// ********************************************************************************************* //&lt;br /&gt;
// Constants&lt;br /&gt;
&lt;br /&gt;
var MY_CONSTANT = true;&lt;br /&gt;
&lt;br /&gt;
// ********************************************************************************************* //&lt;br /&gt;
// Module Implementation&lt;br /&gt;
&lt;br /&gt;
Firebug.MyModule = extend(Firebug.Module,&lt;br /&gt;
{&lt;br /&gt;
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //&lt;br /&gt;
    // Initialization&lt;br /&gt;
&lt;br /&gt;
    initializeUI: function()&lt;br /&gt;
    {&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //&lt;br /&gt;
    // Toolbar Actions&lt;br /&gt;
&lt;br /&gt;
    myButtonHandler: function()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// ********************************************************************************************* //&lt;br /&gt;
// Registration&lt;br /&gt;
&lt;br /&gt;
Firebug.registerModule(Firebug.MyModule);&lt;br /&gt;
&lt;br /&gt;
return Firebug.MyModule;&lt;br /&gt;
&lt;br /&gt;
// ********************************************************************************************* //&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code should also have [[Firebug Source Code Comments|comments]].&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [https://github.com/fflorent/firebug_vimrc/ vimrc file] supporting Firebug coding style. &lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Firebug Modules]]&lt;br /&gt;
* [[Firebug Source Code Comments]]&lt;br /&gt;
* [https://developer.mozilla.org/en/JavaScript_Tips Mozilla JavaScript Tips]&lt;br /&gt;
* [https://developer.mozilla.org/en/Developer_Guide/Coding_Style Mozilla Coding Style]&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/Firebug_Coding_Style</id>
		<title>Firebug Coding Style</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/Firebug_Coding_Style"/>
				<updated>2013-01-30T14:44:07Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Whitespace */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document attempts to explain the basic styles and patterns, that are used in the Firebug codebase. New code should try to conform to these standards, so that it is as easy to maintain as existing code. Of course every rule has an exception, but it's important to know the rules nonetheless!&lt;br /&gt;
&lt;br /&gt;
== Formatting Code ==&lt;br /&gt;
=== File Encoding ===&lt;br /&gt;
All source files should be encoded in UTF-8 without [http://en.wikipedia.org/wiki/Byte_order_mark BOM].&lt;br /&gt;
&lt;br /&gt;
=== Whitespace ===&lt;br /&gt;
No tabs. No whitespace at the end of a line. But, every line should end with a line feed character (&amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;, Unicode: &amp;lt;code&amp;gt;0x0A&amp;lt;/code&amp;gt;), also the last line of a file.&lt;br /&gt;
&lt;br /&gt;
Operators are surrounded by spaces as well as parameters in a function call, except the string concatinator.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var text = &amp;quot;Message: &amp;quot; + msgID + &amp;quot;: &amp;quot; + msgText;&lt;br /&gt;
var result = result ? &amp;quot;positive&amp;quot; : &amp;quot;negative&amp;quot;;&lt;br /&gt;
var target = event.target || document.getElementsByTagName(&amp;quot;body&amp;quot;)[0];&lt;br /&gt;
var expression = getExpressionAt(rangeParent.data, rangeOffset);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The incrementation and decrementation operators are not separated by spaces. So e.g. you should write &amp;lt;code&amp;gt;while(i-- &amp;gt; 0)&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;while(i --&amp;gt; 0)&amp;lt;/code&amp;gt; to avoid misinterpretations.&lt;br /&gt;
&lt;br /&gt;
=== Source File Size ===&lt;br /&gt;
A source file should avoid huge amount of code lines. Couple thousands of lines in a file is already a lot. Firebug is using [http://wiki.commonjs.org/wiki/Modules/AsynchronousDefinition AMD syntax] and more smaller files (modules) is preferred.&lt;br /&gt;
&lt;br /&gt;
=== Line Length ===&lt;br /&gt;
100 characters or less. There is no exception in &amp;lt;code&amp;gt;*.js&amp;lt;/code&amp;gt; files! In some cases this rule can be broken in &amp;lt;code&amp;gt;*.html&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;*.xul&amp;lt;/code&amp;gt; files. But keep in mind long lines are hard to read (also search results are hard to read).&lt;br /&gt;
&lt;br /&gt;
When wrapping lines, operators stay at the end of a line.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if ((... &amp;amp;&amp;amp;&lt;br /&gt;
    ...) ||&lt;br /&gt;
    ...)&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var string = ... +&lt;br /&gt;
    ...;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also member operators stay at the end of the line.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var service = Cc[...].&lt;br /&gt;
    getService(...);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Indentation === &lt;br /&gt;
Four spaces per logic level.&lt;br /&gt;
&lt;br /&gt;
=== Commands === &lt;br /&gt;
Every command must end with a semicolon.&lt;br /&gt;
&lt;br /&gt;
Variable definitions should be done separately, not comma-separated.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var foo = 1;&lt;br /&gt;
var bar = 2;&lt;br /&gt;
&lt;br /&gt;
foo = someFunction();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== License ===&lt;br /&gt;
Files should include a license note at the first line of the file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/* See license.txt for terms of usage */&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case of &amp;lt;code&amp;gt;*.xml&amp;lt;/code&amp;gt; files (e.g. in overlays), this must be after XML declaration, for example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- See license.txt for terms of usage --&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/xml&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case of &amp;lt;code&amp;gt;*.properties&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;*.manifest&amp;lt;/code&amp;gt; files, this must be commented using # character.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;properties&amp;quot;&amp;gt;&lt;br /&gt;
# See license.txt for terms of usage&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Control Structures ===&lt;br /&gt;
Existing Firebug codebase uses braces on the next line like as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function foo()&lt;br /&gt;
{&lt;br /&gt;
    // ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Yes, there can be exceptions and [http://en.wikipedia.org/wiki/The_C_Programming_Language_%28book%29 K&amp;amp;R] style can be preferred in some cases. For example, definition of a config object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var foo = { prop1: &amp;quot;value1&amp;quot; };&lt;br /&gt;
&lt;br /&gt;
var bar = {&lt;br /&gt;
    prop1: &amp;quot;value1&amp;quot;,&lt;br /&gt;
    prop2: &amp;quot;value2&amp;quot;,&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anyway, class and function definitions should always have the braces on the next line as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Firebug.MyModule = extend(Firebug.Module,&lt;br /&gt;
{&lt;br /&gt;
    initializeUI: function()&lt;br /&gt;
    {&lt;br /&gt;
    },&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function myFunction()&lt;br /&gt;
{&lt;br /&gt;
    // ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Control structures should look like as follows (also notice the spacing between a keyword and the left bracket):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if (...)&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
else if (...)&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another example showing how to deal with spaces:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if ((a &amp;gt; 0) &amp;amp;&amp;amp; (b &amp;gt; 0))&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
switch (...)&lt;br /&gt;
{&lt;br /&gt;
    case 1:&lt;br /&gt;
        ...&lt;br /&gt;
        break;&lt;br /&gt;
&lt;br /&gt;
    case 2:&lt;br /&gt;
        ...&lt;br /&gt;
        break;&lt;br /&gt;
&lt;br /&gt;
    default:&lt;br /&gt;
        ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ternary expressions must be wrapped in brackets for clarity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var variable = (condition ? true : false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To avoid misunderstandings ''for'' loops are always written in their long form, i.e. loop heads like &amp;lt;code&amp;gt;for (var i = count; i--; )&amp;lt;/code&amp;gt; should be avoided in favor of &amp;lt;code&amp;gt;for (var i = count-1; i&amp;gt;=0; i--)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
for (var i=0; i&amp;lt;10; i++)&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
try&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
catch (err)&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Firebug prefers no braces, if they are not necessary.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if (...)&lt;br /&gt;
    dump(true);&lt;br /&gt;
else&lt;br /&gt;
    dump(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But if one of the branches needs braces use them for all. Also note&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if (...)&lt;br /&gt;
{&lt;br /&gt;
    dump(&amp;quot;0&amp;quot;);&lt;br /&gt;
    dump(&amp;quot;1&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    dump(2);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the head of a control structure is wrapped into several lines because it is longer than the maximum line length, also use braces, even when the block just contains one line.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if (...&lt;br /&gt;
    ...)&lt;br /&gt;
{&lt;br /&gt;
    dump(&amp;quot;0&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    dump(2);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Firebug prefers no brackets for operators like &amp;lt;code&amp;gt;typeof&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if (typeof variable == &amp;quot;object&amp;quot;)&lt;br /&gt;
    return false;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Comments ===&lt;br /&gt;
Multi-line as well as single line comments should always be put into their own line.&lt;br /&gt;
So you should write:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// This is a comment&lt;br /&gt;
var abc = xyz;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To describe what specific functions do, especially published APIs, [http://en.wikipedia.org/wiki/JSDoc JSDoc] comments are used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Returns the domain of a given URL&lt;br /&gt;
 * &lt;br /&gt;
 * @param {string} url URL, for which to get the domain&lt;br /&gt;
 * &lt;br /&gt;
 * @return {string} Domain&lt;br /&gt;
 */&lt;br /&gt;
Url.getDomain = function(url)&lt;br /&gt;
{&lt;br /&gt;
    var m = /[^:]+:\/{1,3}([^\/]+)/.exec(url);&lt;br /&gt;
    return m ? m[1] : &amp;quot;&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Horizontal Lines ===&lt;br /&gt;
&lt;br /&gt;
Sometimes it is helpful to divide portions of a file by a horizontal line. For this you should use following comment (100 characters long):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// ********************************************************************************************* //&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Firebug codebase also uses the following horizontal separator for dividing members of one object (this separator uses indentation (4 spaces) since it's used within an object scope that is indented (100 characters long).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Naming ==&lt;br /&gt;
&lt;br /&gt;
American English is used for all labels and comments. That means, that you should write e.g. &amp;lt;code&amp;gt;synchronize&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;synchronise&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;color&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;colour&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Functions and Methods ===&lt;br /&gt;
Functions should use camelCase but should not capitalize the first letter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function foo()&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function myFoo()&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Objects ===&lt;br /&gt;
Constructors for objects should be capitalized and use CamelCase.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function ObjectConstructor()&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Firebug.MyModule = extend(Firebug.Module,&lt;br /&gt;
{&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
MyObject.prototype = ()&lt;br /&gt;
{&lt;br /&gt;
    myMethod: function()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Constants ===&lt;br /&gt;
Constants should be capitalized as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var MY_CONSTANT = true;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;const&amp;lt;/code&amp;gt;, since the code can also be used in the browser environment where ''const'' is not supported.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
Variables should use camelCase and not capitalize the first letter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var thisIsMyVariable = true;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Prefixes ===&lt;br /&gt;
Firebug codebase doesn't use any prefixes for member fields.&lt;br /&gt;
&lt;br /&gt;
== Good Practices ==&lt;br /&gt;
&lt;br /&gt;
=== Vertical Indentation ===&lt;br /&gt;
Method defintions should be separated by a new line. Note the new line between ''initialize'' and ''shutdown'' methods.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Firebug.MyModule = extend(Firebug.Module,&lt;br /&gt;
{&lt;br /&gt;
    initialize: function()&lt;br /&gt;
    {&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    shutdown: function()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also portions of code logically belonging together should be separated by a new line from other code. Note the new line between ''super.initialize'' and ''this.onMutateText''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
initialize: function()&lt;br /&gt;
{&lt;br /&gt;
    super.initialize.apply(this, arguments);&lt;br /&gt;
&lt;br /&gt;
    this.onMutateText = bind(this.onMutateText, this);&lt;br /&gt;
    this.onMutateAttr = bind(this.onMutateAttr, this);&lt;br /&gt;
    this.onMutateNode = bind(this.onMutateNode, this);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Horizontal lines should be surrounded by new lines too&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function myFunc1()&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ********************************************************************************************* //&lt;br /&gt;
&lt;br /&gt;
function myFunc2()&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example File ==&lt;br /&gt;
Example of a typical Firebug file implementing a module object. Firebug namespaces (FBL.ns) are no longer the preferred way for Firebug files. See AMD below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/* See license.txt for terms of usage */&lt;br /&gt;
&lt;br /&gt;
FBL.ns(function() {&lt;br /&gt;
&lt;br /&gt;
// ********************************************************************************************* //&lt;br /&gt;
// Constants&lt;br /&gt;
&lt;br /&gt;
var MY_CONSTANT = true;&lt;br /&gt;
&lt;br /&gt;
// ********************************************************************************************* //&lt;br /&gt;
// Module Implementation&lt;br /&gt;
&lt;br /&gt;
Firebug.MyModule = extend(Firebug.Module,&lt;br /&gt;
{&lt;br /&gt;
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //&lt;br /&gt;
    // Initialization&lt;br /&gt;
&lt;br /&gt;
    initializeUI: function()&lt;br /&gt;
    {&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //&lt;br /&gt;
    // Toolbar Actions&lt;br /&gt;
&lt;br /&gt;
    myButtonHandler: function()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// ********************************************************************************************* //&lt;br /&gt;
// Registration&lt;br /&gt;
&lt;br /&gt;
Firebug.registerModule(Firebug.StartButton);&lt;br /&gt;
&lt;br /&gt;
// ********************************************************************************************* //&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code should also have [[Firebug Source Code Comments|comments]].&lt;br /&gt;
&lt;br /&gt;
== Example Module File ==&lt;br /&gt;
Example of a typical [http://wiki.commonjs.org/wiki/Modules/AsynchronousDefinition asynchronous module definition (AMD)]. Every file in Firebug source base should use the AMD pattern starting from Firebug 1.8.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/* See license.txt for terms of usage */&lt;br /&gt;
&lt;br /&gt;
define([&lt;br /&gt;
    &amp;quot;firebug/lib&amp;quot;,&lt;br /&gt;
    &amp;quot;firebug/firebug&amp;quot;,&lt;br /&gt;
    &amp;quot;firebug/domplate&amp;quot;&lt;br /&gt;
],&lt;br /&gt;
function(FBL, Firebug, Domplate) {&lt;br /&gt;
&lt;br /&gt;
// ********************************************************************************************* //&lt;br /&gt;
// Constants&lt;br /&gt;
&lt;br /&gt;
var MY_CONSTANT = true;&lt;br /&gt;
&lt;br /&gt;
// ********************************************************************************************* //&lt;br /&gt;
// Module Implementation&lt;br /&gt;
&lt;br /&gt;
Firebug.MyModule = extend(Firebug.Module,&lt;br /&gt;
{&lt;br /&gt;
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //&lt;br /&gt;
    // Initialization&lt;br /&gt;
&lt;br /&gt;
    initializeUI: function()&lt;br /&gt;
    {&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //&lt;br /&gt;
    // Toolbar Actions&lt;br /&gt;
&lt;br /&gt;
    myButtonHandler: function()&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// ********************************************************************************************* //&lt;br /&gt;
// Registration&lt;br /&gt;
&lt;br /&gt;
Firebug.registerModule(Firebug.MyModule);&lt;br /&gt;
&lt;br /&gt;
return Firebug.MyModule;&lt;br /&gt;
&lt;br /&gt;
// ********************************************************************************************* //&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code should also have [[Firebug Source Code Comments|comments]].&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [https://github.com/fflorent/firebug_vimrc/ vimrc file] supporting Firebug coding style. &lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Firebug Modules]]&lt;br /&gt;
* [[Firebug Source Code Comments]]&lt;br /&gt;
* [https://developer.mozilla.org/en/JavaScript_Tips Mozilla JavaScript Tips]&lt;br /&gt;
* [https://developer.mozilla.org/en/Developer_Guide/Coding_Style Mozilla Coding Style]&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-01-30T11:23:43Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Script_Panel_Refactoring&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remoting_Architecture&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remote_Selector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857], [https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;The breakpoint condition editor does not disappear when clicking outside of it.&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** The bp-condition-editor doesn't scroll&lt;br /&gt;
* Use CodeMirror instead of Orion? See Bug 816756&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see bug 797876&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Edit Breakpoint Condition&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
* Debugging two tabs at once.&lt;br /&gt;
* Source Maps: https://github.com/mozilla/source-map&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing bug reports&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-01-24T15:35:23Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Script_Panel_Refactoring&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remoting_Architecture&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remote_Selector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857], [https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;The breakpoint condition editor does not disappear when clicking outside of it.&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** The bp-condition-editor doesn't scroll&lt;br /&gt;
* Use CodeMirror instead of Orion? See Bug 816756&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see bug 797876&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Edit Breakpoint Condition&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
* Debugging two tabs at once.&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing bug reports&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-01-23T17:10:32Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Script_Panel_Refactoring&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remoting_Architecture&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remote_Selector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857], [https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;The breakpoint condition editor does not disappear when clicking outside of it.&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** The bp-condition-editor doesn't scroll&lt;br /&gt;
* Use CodeMirror instead of Orion? See Bug 816756&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see bug 797876&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Edit Breakpoint Condition&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
* Debugging two tabs at once.&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing bug reports&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-01-23T12:54:13Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Script_Panel_Refactoring&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remoting_Architecture&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remote_Selector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857], [https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** The breakpoint condition editor does not disappear when clicking outside of it.&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use CodeMirror instead of Orion? See Bug 816756&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see bug 797876&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Edit Breakpoint Condition&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
* Debugging two tabs at once.&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing bug reports&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-01-23T11:07:12Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Script_Panel_Refactoring&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remoting_Architecture&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remote_Selector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857], [https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** The breakpoint condition editor does not disappear when clicking outside of it.&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use CodeMirror instead of Orion? See Bug 816756&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see bug 797876&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Edit Breakpoint Condition&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing bug reports&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-01-22T16:59:28Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Script_Panel_Refactoring&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remoting_Architecture&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remote_Selector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857], [https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use CodeMirror instead of Orion? See Bug 816756&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see bug 797876&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Edit Breakpoint Condition&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing bug reports&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-01-22T16:58:44Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Script_Panel_Refactoring&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remoting_Architecture&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remote_Selector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** DOM event breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=800857 bug 800857],&lt;br /&gt;
[https://bugzilla.mozilla.org/show_bug.cgi?id=832982 bug 832982]&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use CodeMirror instead of Orion? See Bug 816756&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see bug 797876&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Edit Breakpoint Condition&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing bug reports&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-01-22T16:57:46Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Script_Panel_Refactoring&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remoting_Architecture&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remote_Selector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints [https://bugzilla.mozilla.org/show_bug.cgi?id=832983 bug 832983], [https://bugzilla.mozilla.org/show_bug.cgi?id=821610 bug 821610]&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use CodeMirror instead of Orion? See Bug 816756&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see bug 797876&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Edit Breakpoint Condition&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing bug reports&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-01-22T15:00:13Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Script_Panel_Refactoring&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remoting_Architecture&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remote_Selector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use CodeMirror instead of Orion? See Bug 816756&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see bug 797876&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Edit Breakpoint Condition&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
* The Script panel &amp;amp; two tabs with Firebug opened.&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing bug reports&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-01-22T11:47:17Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Script_Panel_Refactoring&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remoting_Architecture&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remote_Selector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use CodeMirror instead of Orion? See Bug 816756&lt;br /&gt;
* &amp;lt;strike&amp;gt;Pause on exception&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see bug 797876&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Edit Breakpoint Condition&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing bug reports&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-01-22T07:10:38Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Script_Panel_Refactoring&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remoting_Architecture&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remote_Selector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Tasks ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use CodeMirror instead of Orion? See Bug 816756&lt;br /&gt;
* Pause on exception&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see bug 797876&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Edit Breakpoint Condition&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Related Issues ==&lt;br /&gt;
Existing bug reports&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-01-21T17:23:03Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Script_Panel_Refactoring&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remoting_Architecture&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remote_Selector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use CodeMirror instead of Orion? See Bug 816756&lt;br /&gt;
* Pause on exception&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see bug 797876&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Edit Breakpoint Condition&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* &amp;lt;strike&amp;gt;Stack frames displayed in Script panel's toolbar&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-01-18T14:14:03Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Script_Panel_Refactoring&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remoting_Architecture&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remote_Selector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use CodeMirror instead of Orion? See Bug 816756&lt;br /&gt;
* Pause on exception&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see bug 797876&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Edit Breakpoint Condition&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* Stack frames displayed in Script panel's toolbar&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-01-18T14:13:43Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Script_Panel_Refactoring&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remoting_Architecture&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remote_Selector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use CodeMirror instead of Orion? See Bug 816756&lt;br /&gt;
* Pause on exception&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see bug 797876&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** &amp;lt;strike&amp;gt;Copy Source&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Add Watch&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Toggle Disabled Breakpoint&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Continue, step over, step into, step out&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Edit Breakpoint Condition&lt;br /&gt;
** Run Until&lt;br /&gt;
** Rerun&lt;br /&gt;
** The other actions?&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* Stack frames displayed in Script panel's toolbar&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-01-18T12:49:04Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Script_Panel_Refactoring&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remoting_Architecture&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remote_Selector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;Remove the old Script panel&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove also all related sidepanels&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Remove the firebug-service&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** &amp;lt;strike&amp;gt;Rename the new panel to “Script” (currently Debugger)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use CodeMirror instead of Orion? See Bug 816756&lt;br /&gt;
* Pause on exception&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see bug 797876&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** Run Until..&lt;br /&gt;
** The other actions?&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* Stack frames displayed in Script panel's toolbar&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-01-16T13:08:28Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Script_Panel_Refactoring&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remoting_Architecture&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remote_Selector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Remove the old Script panel&lt;br /&gt;
** Remove also all related sidepanels&lt;br /&gt;
** Remove the firebug-service&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** Rename the new panel to “Script” (currently Debugger) &lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use CodeMirror instead of Orion? See Bug 816756&lt;br /&gt;
* Pause on exception&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see bug 797876&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** Run Until..&lt;br /&gt;
** The other actions?&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* Stack frames displayed in Script panel's toolbar&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;br /&gt;
* Break notifications (explaining the reason why break happened)&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-01-16T13:00:53Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Script_Panel_Refactoring&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remoting_Architecture&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remote_Selector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Remove the old Script panel&lt;br /&gt;
** Remove also all related sidepanels&lt;br /&gt;
** Remove the firebug-service&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** Rename the new panel to “Script” (currently Debugger) &lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** breakpoint initialization should be done when the target script (URL) is loaded.&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use CodeMirror instead of Orion? See Bug 816756&lt;br /&gt;
* Pause on exception&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see bug 797876&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** Run Until..&lt;br /&gt;
** The other actions?&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* Stack frames displayed in Script panel's toolbar&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-01-16T12:44:23Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Script_Panel_Refactoring&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remoting_Architecture&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remote_Selector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Remove the old Script panel&lt;br /&gt;
** Remove also all related sidepanels&lt;br /&gt;
** Remove the firebug-service&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** Rename the new panel to “Script” (currently Debugger) &lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** respect 'actualLocation' sent back from the server (corrected BP location)&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use CodeMirror instead of Orion? See Bug 816756&lt;br /&gt;
* Pause on exception&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see bug 797876&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** Run Until..&lt;br /&gt;
** The other actions?&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* Stack frames displayed in Script panel's toolbar&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	<entry>
		<id>http://getfirebug.com/wiki/index.php/JSD2_Adoption</id>
		<title>JSD2 Adoption</title>
		<link rel="alternate" type="text/html" href="http://getfirebug.com/wiki/index.php/JSD2_Adoption"/>
				<updated>2013-01-16T06:55:14Z</updated>
		
		<summary type="html">&lt;p&gt;Honza: /* Open Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resources ==&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Script_Panel_Refactoring&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remoting_Architecture&lt;br /&gt;
* https://getfirebug.com/wiki/index.php/Remote_Selector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Issues ==&lt;br /&gt;
Rough list of missing things. The list should be converted into meaningful list of bug reports within Firebug issue tracker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Remove the old Script panel&lt;br /&gt;
** Remove also all related sidepanels&lt;br /&gt;
** Remove the firebug-service&lt;br /&gt;
** Remove BTI?&lt;br /&gt;
** Rename the new panel to “Script” (currently Debugger) &lt;br /&gt;
* Use ‘tabNavigated’ and ‘tabDetached’ to implement new TabWatcher&lt;br /&gt;
* Breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;Breakpoint removal (from the Script and Breakpoints panel)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Conditional breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** &amp;lt;strike&amp;gt;Disable/Enable breakpoints&amp;lt;/strike&amp;gt;&lt;br /&gt;
** Error breakpoints&lt;br /&gt;
** Monitor breakpoints&lt;br /&gt;
** XHR breakpoints&lt;br /&gt;
** Mutation breakpoints&lt;br /&gt;
** &amp;lt;strike&amp;gt;breakpoint info tip (condition)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Use CodeMirror instead of Orion? See Bug 816756&lt;br /&gt;
* Pause on exception&lt;br /&gt;
* &amp;lt;strike&amp;gt;User expression in the Watch window&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Restore expanded state of the Watch window across stepping.&lt;br /&gt;
* Execute command line expression within the current frame&lt;br /&gt;
* New profiler API, see bug 797876&lt;br /&gt;
* The autocompletion for “New watch expression” doesn’t allow to type just ‘a’ expression (always autocompleted to ‘atob’)&lt;br /&gt;
* Script panel context menu&lt;br /&gt;
** Run Until..&lt;br /&gt;
** The other actions?&lt;br /&gt;
* Meta: integration with other panels&lt;br /&gt;
** Break on… features&lt;br /&gt;
** Command line &lt;br /&gt;
** Console logging&lt;br /&gt;
** DOM panel&lt;br /&gt;
* Stack frames displayed in Script panel's toolbar&lt;br /&gt;
* Click on a function jumps to the definition&lt;br /&gt;
* Script panel info tip (var value)&lt;br /&gt;
* Adopt existing tests&lt;br /&gt;
* Scroll the script panel to show execution line&lt;br /&gt;
* Watch window: edit value and user variable name&lt;/div&gt;</summary>
		<author><name>Honza</name></author>	</entry>

	</feed>