Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1544)

Unified Diff: Source/devtools/front_end/sources/BreakpointsSidebarPane.js

Issue 535143003: DevTools: Correctly set DOM breakpoints on every target. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/sources/BreakpointsSidebarPane.js
diff --git a/Source/devtools/front_end/sources/BreakpointsSidebarPane.js b/Source/devtools/front_end/sources/BreakpointsSidebarPane.js
index ae0da1fc28044258786f001dc6903f628e70fb66..571d93a47792fae7a502f1b286d9d1493822e1e2 100644
--- a/Source/devtools/front_end/sources/BreakpointsSidebarPane.js
+++ b/Source/devtools/front_end/sources/BreakpointsSidebarPane.js
@@ -290,12 +290,14 @@ WebInspector.JavaScriptBreakpointsSidebarPane.prototype = {
/**
* @constructor
* @extends {WebInspector.NativeBreakpointsSidebarPane}
+ * @implements {WebInspector.TargetManager.Observer}
*/
WebInspector.XHRBreakpointsSidebarPane = function()
{
WebInspector.NativeBreakpointsSidebarPane.call(this, WebInspector.UIString("XHR Breakpoints"));
- this._breakpointElements = {};
+ // FIXME: Use StringMap.
+ this._breakpointElements = { __proto__: null };
var addButton = document.createElement("button");
addButton.className = "pane-title-button add";
@@ -305,10 +307,23 @@ WebInspector.XHRBreakpointsSidebarPane = function()
this.emptyElement.addEventListener("contextmenu", this._emptyElementContextMenu.bind(this), true);
- this._restoreBreakpoints();
+ WebInspector.targetManager.observeTargets(this);
}
WebInspector.XHRBreakpointsSidebarPane.prototype = {
+ /**
+ * @param {!WebInspector.Target} target
+ */
+ targetAdded: function(target)
+ {
+ this._restoreBreakpoints(target);
+ },
+
+ /**
+ * @param {!WebInspector.Target} target
+ */
+ targetRemoved: function(target) { },
+
_emptyElementContextMenu: function(event)
{
var contextMenu = new WebInspector.ContextMenu(event);
@@ -351,8 +366,16 @@ WebInspector.XHRBreakpointsSidebarPane.prototype = {
WebInspector.InplaceEditor.startEditing(inputElement, config);
},
- _setBreakpoint: function(url, enabled)
+ /**
+ * @param {string} url
+ * @param {boolean} enabled
+ * @param {!WebInspector.Target=} target
+ */
+ _setBreakpoint: function(url, enabled, target)
{
+ if (enabled)
+ this._updateBreakpointOnTarget(url, true, target);
+
if (url in this._breakpointElements)
return;
@@ -385,14 +408,13 @@ WebInspector.XHRBreakpointsSidebarPane.prototype = {
}
this.addListElement(element, currentElement);
this._breakpointElements[url] = element;
- if (enabled) {
- var targets = WebInspector.targetManager.targets();
- for (var i = 0; i < targets.length; ++i)
- targets[i].domdebuggerAgent().setXHRBreakpoint(url);
- }
},
- _removeBreakpoint: function(url)
+ /**
+ * @param {string} url
+ * @param {!WebInspector.Target=} target
+ */
+ _removeBreakpoint: function(url, target)
{
var element = this._breakpointElements[url];
if (!element)
@@ -400,9 +422,22 @@ WebInspector.XHRBreakpointsSidebarPane.prototype = {
this.removeListElement(element);
delete this._breakpointElements[url];
- if (element._checkboxElement.checked) {
- var targets = WebInspector.targetManager.targets();
- for (var i = 0; i < targets.length; ++i)
+ if (element._checkboxElement.checked)
+ this._updateBreakpointOnTarget(url, false, target);
+ },
+
+ /**
+ * @param {string} url
+ * @param {boolean} enable
+ * @param {!WebInspector.Target=} target
+ */
+ _updateBreakpointOnTarget: function(url, enable, target)
+ {
+ var targets = target ? [target] : WebInspector.targetManager.targets();
+ for (var i = 0; i < targets.length; ++i) {
+ if (enable)
+ targets[i].domdebuggerAgent().setXHRBreakpoint(url);
+ else
targets[i].domdebuggerAgent().removeXHRBreakpoint(url);
}
},
@@ -439,10 +474,7 @@ WebInspector.XHRBreakpointsSidebarPane.prototype = {
_checkboxClicked: function(url, event)
{
- if (event.target.checked)
- DOMDebuggerAgent.setXHRBreakpoint(url);
- else
- DOMDebuggerAgent.removeXHRBreakpoint(url);
+ this._updateBreakpointOnTarget(url, event.target.checked);
this._saveBreakpoints();
},
@@ -501,13 +533,16 @@ WebInspector.XHRBreakpointsSidebarPane.prototype = {
WebInspector.settings.xhrBreakpoints.set(breakpoints);
},
- _restoreBreakpoints: function()
+ /**
+ * @param {!WebInspector.Target} target
+ */
+ _restoreBreakpoints: function(target)
{
var breakpoints = WebInspector.settings.xhrBreakpoints.get();
for (var i = 0; i < breakpoints.length; ++i) {
var breakpoint = breakpoints[i];
if (breakpoint && typeof breakpoint.url === "string")
- this._setBreakpoint(breakpoint.url, breakpoint.enabled);
+ this._setBreakpoint(breakpoint.url, breakpoint.enabled, target);
}
},
@@ -517,6 +552,7 @@ WebInspector.XHRBreakpointsSidebarPane.prototype = {
/**
* @constructor
* @extends {WebInspector.SidebarPane}
+ * @implements {WebInspector.TargetManager.Observer}
*/
WebInspector.EventListenerBreakpointsSidebarPane = function()
{
@@ -550,7 +586,7 @@ WebInspector.EventListenerBreakpointsSidebarPane = function()
this._createCategory(WebInspector.UIString("WebGL"), ["webglErrorFired", "webglWarningFired"], true);
this._createCategory(WebInspector.UIString("Window"), ["close"], true);
- this._restoreBreakpoints();
+ WebInspector.targetManager.observeTargets(this);
}
WebInspector.EventListenerBreakpointsSidebarPane.categoryListener = "listener:";
@@ -589,6 +625,19 @@ WebInspector.EventListenerBreakpointsSidebarPane.eventNameForUI = function(event
WebInspector.EventListenerBreakpointsSidebarPane.prototype = {
/**
+ * @param {!WebInspector.Target} target
+ */
+ targetAdded: function(target)
+ {
+ this._restoreBreakpoints(target);
+ },
+
+ /**
+ * @param {!WebInspector.Target} target
+ */
+ targetRemoved: function(target) { },
+
+ /**
* @param {string} name
* @param {!Array.<string>} eventNames
* @param {boolean=} isInstrumentationEvent
@@ -692,48 +741,70 @@ WebInspector.EventListenerBreakpointsSidebarPane.prototype = {
/**
* @param {string} eventName
- * @param {?Array.<string>=} targetNames
+ * @param {?Array.<string>=} eventTargetNames
+ * @param {!WebInspector.Target=} target
*/
- _setBreakpoint: function(eventName, targetNames)
+ _setBreakpoint: function(eventName, eventTargetNames, target)
{
- targetNames = targetNames || [WebInspector.EventListenerBreakpointsSidebarPane.eventTargetAny];
- for (var i = 0; i < targetNames.length; ++i) {
- var targetName = targetNames[i];
- var breakpointItem = this._findBreakpointItem(eventName, targetName);
+ eventTargetNames = eventTargetNames || [WebInspector.EventListenerBreakpointsSidebarPane.eventTargetAny];
+ for (var i = 0; i < eventTargetNames.length; ++i) {
+ var eventTargetName = eventTargetNames[i];
+ var breakpointItem = this._findBreakpointItem(eventName, eventTargetName);
if (!breakpointItem)
continue;
breakpointItem.checkbox.checked = true;
breakpointItem.parent.dirtyCheckbox = true;
- if (eventName.startsWith(WebInspector.EventListenerBreakpointsSidebarPane.categoryListener))
- DOMDebuggerAgent.setEventListenerBreakpoint(eventName.substring(WebInspector.EventListenerBreakpointsSidebarPane.categoryListener.length), targetName);
- else if (eventName.startsWith(WebInspector.EventListenerBreakpointsSidebarPane.categoryInstrumentation))
- DOMDebuggerAgent.setInstrumentationBreakpoint(eventName.substring(WebInspector.EventListenerBreakpointsSidebarPane.categoryInstrumentation.length));
+ this._updateBreakpointOnTarget(eventName, eventTargetName, true, target);
}
this._updateCategoryCheckboxes();
},
/**
* @param {string} eventName
- * @param {?Array.<string>=} targetNames
+ * @param {?Array.<string>=} eventTargetNames
+ * @param {!WebInspector.Target=} target
*/
- _removeBreakpoint: function(eventName, targetNames)
+ _removeBreakpoint: function(eventName, eventTargetNames, target)
{
- targetNames = targetNames || [WebInspector.EventListenerBreakpointsSidebarPane.eventTargetAny];
- for (var i = 0; i < targetNames.length; ++i) {
- var targetName = targetNames[i];
- var breakpointItem = this._findBreakpointItem(eventName, targetName);
+ eventTargetNames = eventTargetNames || [WebInspector.EventListenerBreakpointsSidebarPane.eventTargetAny];
+ for (var i = 0; i < eventTargetNames.length; ++i) {
+ var eventTargetName = eventTargetNames[i];
+ var breakpointItem = this._findBreakpointItem(eventName, eventTargetName);
if (!breakpointItem)
continue;
breakpointItem.checkbox.checked = false;
breakpointItem.parent.dirtyCheckbox = true;
- if (eventName.startsWith(WebInspector.EventListenerBreakpointsSidebarPane.categoryListener))
- DOMDebuggerAgent.removeEventListenerBreakpoint(eventName.substring(WebInspector.EventListenerBreakpointsSidebarPane.categoryListener.length), targetName);
- else if (eventName.startsWith(WebInspector.EventListenerBreakpointsSidebarPane.categoryInstrumentation))
- DOMDebuggerAgent.removeInstrumentationBreakpoint(eventName.substring(WebInspector.EventListenerBreakpointsSidebarPane.categoryInstrumentation.length));
+ this._updateBreakpointOnTarget(eventName, eventTargetName, false, target);
}
this._updateCategoryCheckboxes();
},
+ /**
+ * @param {string} eventName
+ * @param {string} eventTargetName
+ * @param {boolean} enable
+ * @param {!WebInspector.Target=} target
+ */
+ _updateBreakpointOnTarget: function(eventName, eventTargetName, enable, target)
+ {
+ var targets = target ? [target] : WebInspector.targetManager.targets();
+ for (var i = 0; i < targets.length; ++i) {
+ if (eventName.startsWith(WebInspector.EventListenerBreakpointsSidebarPane.categoryListener)) {
+ var protocolEventName = eventName.substring(WebInspector.EventListenerBreakpointsSidebarPane.categoryListener.length);
+ if (enable)
+ targets[i].domdebuggerAgent().setEventListenerBreakpoint(protocolEventName, eventTargetName);
+ else
+ targets[i].domdebuggerAgent().removeEventListenerBreakpoint(protocolEventName, eventTargetName);
+ } else if (eventName.startsWith(WebInspector.EventListenerBreakpointsSidebarPane.categoryInstrumentation)) {
+ var protocolEventName = eventName.substring(WebInspector.EventListenerBreakpointsSidebarPane.categoryInstrumentation.length);
+ if (enable)
+ targets[i].domdebuggerAgent().setInstrumentationBreakpoint(protocolEventName);
+ else
+ targets[i].domdebuggerAgent().removeInstrumentationBreakpoint(protocolEventName);
+ }
+ }
+ },
+
_updateCategoryCheckboxes: function()
{
for (var i = 0; i < this._categoryItems.length; ++i) {
@@ -813,13 +884,16 @@ WebInspector.EventListenerBreakpointsSidebarPane.prototype = {
WebInspector.settings.eventListenerBreakpoints.set(breakpoints);
},
- _restoreBreakpoints: function()
+ /**
+ * @param {!WebInspector.Target} target
+ */
+ _restoreBreakpoints: function(target)
{
var breakpoints = WebInspector.settings.eventListenerBreakpoints.get();
for (var i = 0; i < breakpoints.length; ++i) {
var breakpoint = breakpoints[i];
if (breakpoint && typeof breakpoint.eventName === "string")
- this._setBreakpoint(breakpoint.eventName, breakpoint.targetNames);
+ this._setBreakpoint(breakpoint.eventName, breakpoint.targetNames, target);
}
},
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698