| OLD | NEW |
| 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 /** | 4 /** |
| 5 * @implements {WebInspector.ContextFlavorListener} | 5 * @implements {UI.ContextFlavorListener} |
| 6 * @implements {WebInspector.TargetManager.Observer} | 6 * @implements {SDK.TargetManager.Observer} |
| 7 * @implements {WebInspector.ToolbarItem.ItemsProvider} | 7 * @implements {UI.ToolbarItem.ItemsProvider} |
| 8 * @unrestricted | 8 * @unrestricted |
| 9 */ | 9 */ |
| 10 WebInspector.XHRBreakpointsSidebarPane = class extends WebInspector.BreakpointsS
idebarPaneBase { | 10 Sources.XHRBreakpointsSidebarPane = class extends Components.BreakpointsSidebarP
aneBase { |
| 11 constructor() { | 11 constructor() { |
| 12 super(); | 12 super(); |
| 13 this._xhrBreakpointsSetting = WebInspector.settings.createLocalSetting('xhrB
reakpoints', []); | 13 this._xhrBreakpointsSetting = Common.settings.createLocalSetting('xhrBreakpo
ints', []); |
| 14 | 14 |
| 15 /** @type {!Map.<string, !Element>} */ | 15 /** @type {!Map.<string, !Element>} */ |
| 16 this._breakpointElements = new Map(); | 16 this._breakpointElements = new Map(); |
| 17 | 17 |
| 18 this._addButton = new WebInspector.ToolbarButton(WebInspector.UIString('Add
breakpoint'), 'largeicon-add'); | 18 this._addButton = new UI.ToolbarButton(Common.UIString('Add breakpoint'), 'l
argeicon-add'); |
| 19 this._addButton.addEventListener('click', this._addButtonClicked.bind(this))
; | 19 this._addButton.addEventListener('click', this._addButtonClicked.bind(this))
; |
| 20 | 20 |
| 21 this.emptyElement.addEventListener('contextmenu', this._emptyElementContextM
enu.bind(this), true); | 21 this.emptyElement.addEventListener('contextmenu', this._emptyElementContextM
enu.bind(this), true); |
| 22 WebInspector.targetManager.observeTargets(this, WebInspector.Target.Capabili
ty.Browser); | 22 SDK.targetManager.observeTargets(this, SDK.Target.Capability.Browser); |
| 23 this._update(); | 23 this._update(); |
| 24 } | 24 } |
| 25 | 25 |
| 26 /** | 26 /** |
| 27 * @override | 27 * @override |
| 28 * @param {!WebInspector.Target} target | 28 * @param {!SDK.Target} target |
| 29 */ | 29 */ |
| 30 targetAdded(target) { | 30 targetAdded(target) { |
| 31 this._restoreBreakpoints(target); | 31 this._restoreBreakpoints(target); |
| 32 } | 32 } |
| 33 | 33 |
| 34 /** | 34 /** |
| 35 * @override | 35 * @override |
| 36 * @param {!WebInspector.Target} target | 36 * @param {!SDK.Target} target |
| 37 */ | 37 */ |
| 38 targetRemoved(target) { | 38 targetRemoved(target) { |
| 39 } | 39 } |
| 40 | 40 |
| 41 /** | 41 /** |
| 42 * @override | 42 * @override |
| 43 * @return {!Array<!WebInspector.ToolbarItem>} | 43 * @return {!Array<!UI.ToolbarItem>} |
| 44 */ | 44 */ |
| 45 toolbarItems() { | 45 toolbarItems() { |
| 46 return [this._addButton]; | 46 return [this._addButton]; |
| 47 } | 47 } |
| 48 | 48 |
| 49 _emptyElementContextMenu(event) { | 49 _emptyElementContextMenu(event) { |
| 50 var contextMenu = new WebInspector.ContextMenu(event); | 50 var contextMenu = new UI.ContextMenu(event); |
| 51 contextMenu.appendItem(WebInspector.UIString.capitalize('Add ^breakpoint'),
this._addButtonClicked.bind(this)); | 51 contextMenu.appendItem(Common.UIString.capitalize('Add ^breakpoint'), this._
addButtonClicked.bind(this)); |
| 52 contextMenu.show(); | 52 contextMenu.show(); |
| 53 } | 53 } |
| 54 | 54 |
| 55 _addButtonClicked(event) { | 55 _addButtonClicked(event) { |
| 56 if (event) | 56 if (event) |
| 57 event.consume(); | 57 event.consume(); |
| 58 | 58 |
| 59 WebInspector.viewManager.showView('sources.xhrBreakpoints'); | 59 UI.viewManager.showView('sources.xhrBreakpoints'); |
| 60 | 60 |
| 61 var inputElementContainer = createElementWithClass('p', 'breakpoint-conditio
n'); | 61 var inputElementContainer = createElementWithClass('p', 'breakpoint-conditio
n'); |
| 62 inputElementContainer.textContent = WebInspector.UIString('Break when URL co
ntains:'); | 62 inputElementContainer.textContent = Common.UIString('Break when URL contains
:'); |
| 63 | 63 |
| 64 var inputElement = inputElementContainer.createChild('span', 'editing'); | 64 var inputElement = inputElementContainer.createChild('span', 'editing'); |
| 65 inputElement.id = 'breakpoint-condition-input'; | 65 inputElement.id = 'breakpoint-condition-input'; |
| 66 this.addListElement(inputElementContainer, /** @type {?Element} */ (this.lis
tElement.firstChild)); | 66 this.addListElement(inputElementContainer, /** @type {?Element} */ (this.lis
tElement.firstChild)); |
| 67 | 67 |
| 68 /** | 68 /** |
| 69 * @param {boolean} accept | 69 * @param {boolean} accept |
| 70 * @param {!Element} e | 70 * @param {!Element} e |
| 71 * @param {string} text | 71 * @param {string} text |
| 72 * @this {WebInspector.XHRBreakpointsSidebarPane} | 72 * @this {Sources.XHRBreakpointsSidebarPane} |
| 73 */ | 73 */ |
| 74 function finishEditing(accept, e, text) { | 74 function finishEditing(accept, e, text) { |
| 75 this.removeListElement(inputElementContainer); | 75 this.removeListElement(inputElementContainer); |
| 76 if (accept) { | 76 if (accept) { |
| 77 this._setBreakpoint(text, true); | 77 this._setBreakpoint(text, true); |
| 78 this._saveBreakpoints(); | 78 this._saveBreakpoints(); |
| 79 } | 79 } |
| 80 } | 80 } |
| 81 | 81 |
| 82 var config = new WebInspector.InplaceEditor.Config(finishEditing.bind(this,
true), finishEditing.bind(this, false)); | 82 var config = new UI.InplaceEditor.Config(finishEditing.bind(this, true), fin
ishEditing.bind(this, false)); |
| 83 WebInspector.InplaceEditor.startEditing(inputElement, config); | 83 UI.InplaceEditor.startEditing(inputElement, config); |
| 84 } | 84 } |
| 85 | 85 |
| 86 /** | 86 /** |
| 87 * @param {string} url | 87 * @param {string} url |
| 88 * @param {boolean} enabled | 88 * @param {boolean} enabled |
| 89 * @param {!WebInspector.Target=} target | 89 * @param {!SDK.Target=} target |
| 90 */ | 90 */ |
| 91 _setBreakpoint(url, enabled, target) { | 91 _setBreakpoint(url, enabled, target) { |
| 92 if (enabled) | 92 if (enabled) |
| 93 this._updateBreakpointOnTarget(url, true, target); | 93 this._updateBreakpointOnTarget(url, true, target); |
| 94 | 94 |
| 95 if (this._breakpointElements.has(url)) { | 95 if (this._breakpointElements.has(url)) { |
| 96 this._breakpointElements.get(url)._checkboxElement.checked = enabled; | 96 this._breakpointElements.get(url)._checkboxElement.checked = enabled; |
| 97 return; | 97 return; |
| 98 } | 98 } |
| 99 | 99 |
| 100 var element = createElement('li'); | 100 var element = createElement('li'); |
| 101 element._url = url; | 101 element._url = url; |
| 102 element.addEventListener('contextmenu', this._contextMenu.bind(this, url), t
rue); | 102 element.addEventListener('contextmenu', this._contextMenu.bind(this, url), t
rue); |
| 103 | 103 |
| 104 var title = url ? WebInspector.UIString('URL contains "%s"', url) : WebInspe
ctor.UIString('Any XHR'); | 104 var title = url ? Common.UIString('URL contains "%s"', url) : Common.UIStrin
g('Any XHR'); |
| 105 var label = createCheckboxLabel(title, enabled); | 105 var label = createCheckboxLabel(title, enabled); |
| 106 element.appendChild(label); | 106 element.appendChild(label); |
| 107 label.checkboxElement.addEventListener('click', this._checkboxClicked.bind(t
his, url), false); | 107 label.checkboxElement.addEventListener('click', this._checkboxClicked.bind(t
his, url), false); |
| 108 element._checkboxElement = label.checkboxElement; | 108 element._checkboxElement = label.checkboxElement; |
| 109 | 109 |
| 110 label.textElement.classList.add('cursor-auto'); | 110 label.textElement.classList.add('cursor-auto'); |
| 111 label.textElement.addEventListener('dblclick', this._labelClicked.bind(this,
url), false); | 111 label.textElement.addEventListener('dblclick', this._labelClicked.bind(this,
url), false); |
| 112 | 112 |
| 113 var currentElement = /** @type {?Element} */ (this.listElement.firstChild); | 113 var currentElement = /** @type {?Element} */ (this.listElement.firstChild); |
| 114 while (currentElement) { | 114 while (currentElement) { |
| 115 if (currentElement._url && currentElement._url < element._url) | 115 if (currentElement._url && currentElement._url < element._url) |
| 116 break; | 116 break; |
| 117 currentElement = /** @type {?Element} */ (currentElement.nextSibling); | 117 currentElement = /** @type {?Element} */ (currentElement.nextSibling); |
| 118 } | 118 } |
| 119 this.addListElement(element, currentElement); | 119 this.addListElement(element, currentElement); |
| 120 this._breakpointElements.set(url, element); | 120 this._breakpointElements.set(url, element); |
| 121 } | 121 } |
| 122 | 122 |
| 123 /** | 123 /** |
| 124 * @param {string} url | 124 * @param {string} url |
| 125 * @param {!WebInspector.Target=} target | 125 * @param {!SDK.Target=} target |
| 126 */ | 126 */ |
| 127 _removeBreakpoint(url, target) { | 127 _removeBreakpoint(url, target) { |
| 128 var element = this._breakpointElements.get(url); | 128 var element = this._breakpointElements.get(url); |
| 129 if (!element) | 129 if (!element) |
| 130 return; | 130 return; |
| 131 | 131 |
| 132 this.removeListElement(element); | 132 this.removeListElement(element); |
| 133 this._breakpointElements.delete(url); | 133 this._breakpointElements.delete(url); |
| 134 if (element._checkboxElement.checked) | 134 if (element._checkboxElement.checked) |
| 135 this._updateBreakpointOnTarget(url, false, target); | 135 this._updateBreakpointOnTarget(url, false, target); |
| 136 } | 136 } |
| 137 | 137 |
| 138 /** | 138 /** |
| 139 * @param {string} url | 139 * @param {string} url |
| 140 * @param {boolean} enable | 140 * @param {boolean} enable |
| 141 * @param {!WebInspector.Target=} target | 141 * @param {!SDK.Target=} target |
| 142 */ | 142 */ |
| 143 _updateBreakpointOnTarget(url, enable, target) { | 143 _updateBreakpointOnTarget(url, enable, target) { |
| 144 var targets = target ? [target] : WebInspector.targetManager.targets(WebInsp
ector.Target.Capability.Browser); | 144 var targets = target ? [target] : SDK.targetManager.targets(SDK.Target.Capab
ility.Browser); |
| 145 for (target of targets) { | 145 for (target of targets) { |
| 146 if (enable) | 146 if (enable) |
| 147 target.domdebuggerAgent().setXHRBreakpoint(url); | 147 target.domdebuggerAgent().setXHRBreakpoint(url); |
| 148 else | 148 else |
| 149 target.domdebuggerAgent().removeXHRBreakpoint(url); | 149 target.domdebuggerAgent().removeXHRBreakpoint(url); |
| 150 } | 150 } |
| 151 } | 151 } |
| 152 | 152 |
| 153 _contextMenu(url, event) { | 153 _contextMenu(url, event) { |
| 154 var contextMenu = new WebInspector.ContextMenu(event); | 154 var contextMenu = new UI.ContextMenu(event); |
| 155 | 155 |
| 156 /** | 156 /** |
| 157 * @this {WebInspector.XHRBreakpointsSidebarPane} | 157 * @this {Sources.XHRBreakpointsSidebarPane} |
| 158 */ | 158 */ |
| 159 function removeBreakpoint() { | 159 function removeBreakpoint() { |
| 160 this._removeBreakpoint(url); | 160 this._removeBreakpoint(url); |
| 161 this._saveBreakpoints(); | 161 this._saveBreakpoints(); |
| 162 } | 162 } |
| 163 | 163 |
| 164 /** | 164 /** |
| 165 * @this {WebInspector.XHRBreakpointsSidebarPane} | 165 * @this {Sources.XHRBreakpointsSidebarPane} |
| 166 */ | 166 */ |
| 167 function removeAllBreakpoints() { | 167 function removeAllBreakpoints() { |
| 168 for (var url of this._breakpointElements.keys()) | 168 for (var url of this._breakpointElements.keys()) |
| 169 this._removeBreakpoint(url); | 169 this._removeBreakpoint(url); |
| 170 this._saveBreakpoints(); | 170 this._saveBreakpoints(); |
| 171 } | 171 } |
| 172 var removeAllTitle = WebInspector.UIString.capitalize('Remove ^all ^breakpoi
nts'); | 172 var removeAllTitle = Common.UIString.capitalize('Remove ^all ^breakpoints'); |
| 173 | 173 |
| 174 contextMenu.appendItem(WebInspector.UIString.capitalize('Add ^breakpoint'),
this._addButtonClicked.bind(this)); | 174 contextMenu.appendItem(Common.UIString.capitalize('Add ^breakpoint'), this._
addButtonClicked.bind(this)); |
| 175 contextMenu.appendItem(WebInspector.UIString.capitalize('Remove ^breakpoint'
), removeBreakpoint.bind(this)); | 175 contextMenu.appendItem(Common.UIString.capitalize('Remove ^breakpoint'), rem
oveBreakpoint.bind(this)); |
| 176 contextMenu.appendItem(removeAllTitle, removeAllBreakpoints.bind(this)); | 176 contextMenu.appendItem(removeAllTitle, removeAllBreakpoints.bind(this)); |
| 177 contextMenu.show(); | 177 contextMenu.show(); |
| 178 } | 178 } |
| 179 | 179 |
| 180 _checkboxClicked(url, event) { | 180 _checkboxClicked(url, event) { |
| 181 this._updateBreakpointOnTarget(url, event.target.checked); | 181 this._updateBreakpointOnTarget(url, event.target.checked); |
| 182 this._saveBreakpoints(); | 182 this._saveBreakpoints(); |
| 183 } | 183 } |
| 184 | 184 |
| 185 _labelClicked(url) { | 185 _labelClicked(url) { |
| 186 var element = this._breakpointElements.get(url) || null; | 186 var element = this._breakpointElements.get(url) || null; |
| 187 var inputElement = createElementWithClass('span', 'breakpoint-condition edit
ing'); | 187 var inputElement = createElementWithClass('span', 'breakpoint-condition edit
ing'); |
| 188 inputElement.textContent = url; | 188 inputElement.textContent = url; |
| 189 this.listElement.insertBefore(inputElement, element); | 189 this.listElement.insertBefore(inputElement, element); |
| 190 element.classList.add('hidden'); | 190 element.classList.add('hidden'); |
| 191 | 191 |
| 192 /** | 192 /** |
| 193 * @param {boolean} accept | 193 * @param {boolean} accept |
| 194 * @param {!Element} e | 194 * @param {!Element} e |
| 195 * @param {string} text | 195 * @param {string} text |
| 196 * @this {WebInspector.XHRBreakpointsSidebarPane} | 196 * @this {Sources.XHRBreakpointsSidebarPane} |
| 197 */ | 197 */ |
| 198 function finishEditing(accept, e, text) { | 198 function finishEditing(accept, e, text) { |
| 199 this.removeListElement(inputElement); | 199 this.removeListElement(inputElement); |
| 200 if (accept) { | 200 if (accept) { |
| 201 this._removeBreakpoint(url); | 201 this._removeBreakpoint(url); |
| 202 this._setBreakpoint(text, element._checkboxElement.checked); | 202 this._setBreakpoint(text, element._checkboxElement.checked); |
| 203 this._saveBreakpoints(); | 203 this._saveBreakpoints(); |
| 204 } else | 204 } else |
| 205 element.classList.remove('hidden'); | 205 element.classList.remove('hidden'); |
| 206 } | 206 } |
| 207 | 207 |
| 208 WebInspector.InplaceEditor.startEditing( | 208 UI.InplaceEditor.startEditing( |
| 209 inputElement, | 209 inputElement, |
| 210 new WebInspector.InplaceEditor.Config(finishEditing.bind(this, true), fi
nishEditing.bind(this, false))); | 210 new UI.InplaceEditor.Config(finishEditing.bind(this, true), finishEditin
g.bind(this, false))); |
| 211 } | 211 } |
| 212 | 212 |
| 213 /** | 213 /** |
| 214 * @override | 214 * @override |
| 215 * @param {?Object} object | 215 * @param {?Object} object |
| 216 */ | 216 */ |
| 217 flavorChanged(object) { | 217 flavorChanged(object) { |
| 218 this._update(); | 218 this._update(); |
| 219 } | 219 } |
| 220 | 220 |
| 221 _update() { | 221 _update() { |
| 222 var details = WebInspector.context.flavor(WebInspector.DebuggerPausedDetails
); | 222 var details = UI.context.flavor(SDK.DebuggerPausedDetails); |
| 223 if (!details || details.reason !== WebInspector.DebuggerModel.BreakReason.XH
R) { | 223 if (!details || details.reason !== SDK.DebuggerModel.BreakReason.XHR) { |
| 224 if (this._highlightedElement) { | 224 if (this._highlightedElement) { |
| 225 this._highlightedElement.classList.remove('breakpoint-hit'); | 225 this._highlightedElement.classList.remove('breakpoint-hit'); |
| 226 delete this._highlightedElement; | 226 delete this._highlightedElement; |
| 227 } | 227 } |
| 228 return; | 228 return; |
| 229 } | 229 } |
| 230 var url = details.auxData['breakpointURL']; | 230 var url = details.auxData['breakpointURL']; |
| 231 var element = this._breakpointElements.get(url); | 231 var element = this._breakpointElements.get(url); |
| 232 if (!element) | 232 if (!element) |
| 233 return; | 233 return; |
| 234 WebInspector.viewManager.showView('sources.xhrBreakpoints'); | 234 UI.viewManager.showView('sources.xhrBreakpoints'); |
| 235 element.classList.add('breakpoint-hit'); | 235 element.classList.add('breakpoint-hit'); |
| 236 this._highlightedElement = element; | 236 this._highlightedElement = element; |
| 237 } | 237 } |
| 238 | 238 |
| 239 _saveBreakpoints() { | 239 _saveBreakpoints() { |
| 240 var breakpoints = []; | 240 var breakpoints = []; |
| 241 for (var url of this._breakpointElements.keys()) | 241 for (var url of this._breakpointElements.keys()) |
| 242 breakpoints.push({url: url, enabled: this._breakpointElements.get(url)._ch
eckboxElement.checked}); | 242 breakpoints.push({url: url, enabled: this._breakpointElements.get(url)._ch
eckboxElement.checked}); |
| 243 this._xhrBreakpointsSetting.set(breakpoints); | 243 this._xhrBreakpointsSetting.set(breakpoints); |
| 244 } | 244 } |
| 245 | 245 |
| 246 /** | 246 /** |
| 247 * @param {!WebInspector.Target} target | 247 * @param {!SDK.Target} target |
| 248 */ | 248 */ |
| 249 _restoreBreakpoints(target) { | 249 _restoreBreakpoints(target) { |
| 250 var breakpoints = this._xhrBreakpointsSetting.get(); | 250 var breakpoints = this._xhrBreakpointsSetting.get(); |
| 251 for (var i = 0; i < breakpoints.length; ++i) { | 251 for (var i = 0; i < breakpoints.length; ++i) { |
| 252 var breakpoint = breakpoints[i]; | 252 var breakpoint = breakpoints[i]; |
| 253 if (breakpoint && typeof breakpoint.url === 'string') | 253 if (breakpoint && typeof breakpoint.url === 'string') |
| 254 this._setBreakpoint(breakpoint.url, breakpoint.enabled, target); | 254 this._setBreakpoint(breakpoint.url, breakpoint.enabled, target); |
| 255 } | 255 } |
| 256 } | 256 } |
| 257 }; | 257 }; |
| OLD | NEW |