⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 243722 in webkit


Ignore:
Timestamp:
Apr 1, 2019, 4:38:45 PM (7 years ago)
Author:
Devin Rousso
Message:

Web Inspector: DOMDebugger: disabling a breakpoint for a specific event listener removes it from the UI
https://bugs.webkit.org/show_bug.cgi?id=196453
<rdar://problem/49489318>

Reviewed by Joseph Pecoraro.

Allow breakpoints for specific event listeners to be disabled, rather than immeditately
removing/deleting them when they are about to become disabled. This preserves the existing
functionality, but now allows for the tree element to stay in the UI in a disabled state.

  • UserInterface/Controllers/DOMManager.js:

(WI.DOMManager):
(WI.DOMManager.prototype.setBreakpointForEventListener):
(WI.DOMManager.prototype.removeBreakpointForEventListener):
(WI.DOMManager.prototype.removeEventListenerBreakpointsForNode): Added.
(WI.DOMManager.prototype._updateEventBreakpoint): Added.
(WI.DOMManager.prototype._handleEventBreakpointDisabledStateChanged): Added.

  • UserInterface/Controllers/DOMDebuggerManager.js:

(WI.DOMDebuggerManager.prototype._handleEventBreakpointDisabledStateChanged):

  • UserInterface/Views/EventBreakpointTreeElement.js:

(WI.EventBreakpointTreeElement.prototype.populateContextMenu):
(WI.EventBreakpointTreeElement.prototype._toggleBreakpoint):

  • UserInterface/Views/ContextMenuUtilities.js:

(WI.appendContextMenuItemsForDOMNodeBreakpoints):

  • UserInterface/Views/DOMNodeTreeElement.js:

(WI.DOMNodeTreeElement.prototype.ondelete):

Location:
trunk/Source/WebInspectorUI
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebInspectorUI/ChangeLog

    r243720 r243722  
     12019-04-01  Devin Rousso  <drousso@apple.com>
     2
     3        Web Inspector: DOMDebugger: disabling a breakpoint for a specific event listener removes it from the UI
     4        https://bugs.webkit.org/show_bug.cgi?id=196453
     5        <rdar://problem/49489318>
     6
     7        Reviewed by Joseph Pecoraro.
     8
     9        Allow breakpoints for specific event listeners to be disabled, rather than immeditately
     10        removing/deleting them when they are about to become disabled. This preserves the existing
     11        functionality, but now allows for the tree element to stay in the UI in a disabled state.
     12
     13        * UserInterface/Controllers/DOMManager.js:
     14        (WI.DOMManager):
     15        (WI.DOMManager.prototype.setBreakpointForEventListener):
     16        (WI.DOMManager.prototype.removeBreakpointForEventListener):
     17        (WI.DOMManager.prototype.removeEventListenerBreakpointsForNode): Added.
     18        (WI.DOMManager.prototype._updateEventBreakpoint): Added.
     19        (WI.DOMManager.prototype._handleEventBreakpointDisabledStateChanged): Added.
     20
     21        * UserInterface/Controllers/DOMDebuggerManager.js:
     22        (WI.DOMDebuggerManager.prototype._handleEventBreakpointDisabledStateChanged):
     23
     24        * UserInterface/Views/EventBreakpointTreeElement.js:
     25        (WI.EventBreakpointTreeElement.prototype.populateContextMenu):
     26        (WI.EventBreakpointTreeElement.prototype._toggleBreakpoint):
     27
     28        * UserInterface/Views/ContextMenuUtilities.js:
     29        (WI.appendContextMenuItemsForDOMNodeBreakpoints):
     30
     31        * UserInterface/Views/DOMNodeTreeElement.js:
     32        (WI.DOMNodeTreeElement.prototype.ondelete):
     33
    1342019-04-01  Devin Rousso  <drousso@apple.com>
    235
  • trunk/Source/WebInspectorUI/UserInterface/Controllers/DOMDebuggerManager.js

    r242765 r243722  
    555555    {
    556556        let breakpoint = event.target;
     557
     558        // Specific event listener breakpoints are handled by `DOMManager`.
     559        if (breakpoint.eventListener)
     560            return;
     561
    557562        for (let target of WI.targets) {
    558563            if (target.DOMDebuggerAgent)
  • trunk/Source/WebInspectorUI/UserInterface/Controllers/DOMManager.js

    r243214 r243722  
    5151        this._pendingDocumentRequestCallbacks = null;
    5252
     53        WI.EventBreakpoint.addEventListener(WI.EventBreakpoint.Event.DisabledStateChanged, this._handleEventBreakpointDisabledStateChanged, this);
     54
    5355        WI.Frame.addEventListener(WI.Frame.Event.MainResourceDidChange, this._mainResourceDidChange, this);
    5456    }
     
    593595    setBreakpointForEventListener(eventListener)
    594596    {
    595         let breakpoint = new WI.EventBreakpoint(WI.EventBreakpoint.Type.Listener, eventListener.type, {eventListener});
     597        let breakpoint = this._breakpointsForEventListeners.get(eventListener.eventListenerId);
     598        if (breakpoint) {
     599            console.assert(breakpoint.disabled);
     600            breakpoint.disabled = false;
     601            return;
     602        }
     603
     604        breakpoint = new WI.EventBreakpoint(WI.EventBreakpoint.Type.Listener, eventListener.type, {eventListener});
     605        console.assert(!breakpoint.disabled);
     606
    596607        this._breakpointsForEventListeners.set(eventListener.eventListenerId, breakpoint);
    597608
    598         DOMAgent.setBreakpointForEventListener(eventListener.eventListenerId, (error) => {
    599             if (error) {
    600                 console.error(error);
    601                 return;
    602             }
    603 
    604             WI.domDebuggerManager.dispatchEventToListeners(WI.DOMDebuggerManager.Event.EventBreakpointAdded, {breakpoint});
    605         });
     609        for (let target of WI.targets) {
     610            if (target.DOMAgent)
     611                this._updateEventBreakpoint(breakpoint, target);
     612        }
     613
     614        WI.domDebuggerManager.dispatchEventToListeners(WI.DOMDebuggerManager.Event.EventBreakpointAdded, {breakpoint});
    606615    }
    607616
    608617    removeBreakpointForEventListener(eventListener)
    609618    {
    610         let breakpoint = this._breakpointsForEventListeners.get(eventListener.eventListenerId);
     619        let breakpoint = this._breakpointsForEventListeners.take(eventListener.eventListenerId);
    611620        console.assert(breakpoint);
    612621
    613         this._breakpointsForEventListeners.delete(eventListener.eventListenerId);
    614 
    615         DOMAgent.removeBreakpointForEventListener(eventListener.eventListenerId, (error) => {
    616             if (error) {
    617                 console.error(error);
    618                 return;
    619             }
    620 
    621             WI.domDebuggerManager.dispatchEventToListeners(WI.DOMDebuggerManager.Event.EventBreakpointRemoved, {breakpoint});
    622         });
     622        for (let target of WI.targets) {
     623            if (target.DOMAgent)
     624                target.DOMAgent.removeBreakpointForEventListener(eventListener.eventListenerId);
     625        }
     626
     627        WI.domDebuggerManager.dispatchEventToListeners(WI.DOMDebuggerManager.Event.EventBreakpointRemoved, {breakpoint});
     628    }
     629
     630    removeEventListenerBreakpointsForNode(domNode)
     631    {
     632        for (let breakpoint of Array.from(this._breakpointsForEventListeners.values())) {
     633            let eventListener = breakpoint.eventListener;
     634            if (eventListener.nodeId === domNode.id)
     635                this.removeBreakpointForEventListener(eventListener);
     636        }
    623637    }
    624638
     
    627641        return this._breakpointsForEventListeners.get(eventListenerId) || null;
    628642    }
     643
     644    // Private
    629645
    630646    _buildHighlightConfig(mode = "all")
     
    647663    }
    648664
    649     // Private
     665    _updateEventBreakpoint(breakpoint, target)
     666    {
     667        let eventListener = breakpoint.eventListener;
     668        console.assert(eventListener);
     669
     670        if (breakpoint.disabled)
     671            target.DOMAgent.removeBreakpointForEventListener(eventListener.eventListenerId);
     672        else
     673            target.DOMAgent.setBreakpointForEventListener(eventListener.eventListenerId);
     674    }
     675
     676    _handleEventBreakpointDisabledStateChanged(event)
     677    {
     678        let breakpoint = event.target;
     679
     680        // Non-specific event listener breakpoints are handled by `DOMDebuggerManager`.
     681        if (!breakpoint.eventListener)
     682            return;
     683
     684        for (let target of WI.targets) {
     685            if (target.DOMAgent)
     686                this._updateEventBreakpoint(breakpoint, target);
     687        }
     688    }
    650689
    651690    _mainResourceDidChange(event)
  • trunk/Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js

    r243355 r243722  
    307307        contextMenu.appendItem(WI.UIString("Delete Breakpoints"), function() {
    308308            WI.domDebuggerManager.removeDOMBreakpointsForNode(domNode);
     309            WI.domManager.removeEventListenerBreakpointsForNode(domNode);
    309310        });
    310311    }
  • trunk/Source/WebInspectorUI/UserInterface/Views/DOMNodeTreeElement.js

    r236766 r243722  
    4747
    4848        WI.domDebuggerManager.removeDOMBreakpointsForNode(this.representedObject);
    49 
    50         for (let treeElement of this.children) {
    51             if (treeElement instanceof WI.EventBreakpointTreeElement)
    52                 treeElement.ondelete();
    53         }
     49        WI.domManager.removeEventListenerBreakpointsForNode(this.representedObject);
    5450
    5551        return true;
  • trunk/Source/WebInspectorUI/UserInterface/Views/EventBreakpointTreeElement.js

    r242318 r243722  
    111111    {
    112112        let breakpoint = this.representedObject;
    113         if (!breakpoint.eventListener) {
    114             let label = breakpoint.disabled ? WI.UIString("Enable Breakpoint") : WI.UIString("Disable Breakpoint");
    115             contextMenu.appendItem(label, this._toggleBreakpoint.bind(this));
    116         }
     113
     114        let label = breakpoint.disabled ? WI.UIString("Enable Breakpoint") : WI.UIString("Disable Breakpoint");
     115        contextMenu.appendItem(label, this._toggleBreakpoint.bind(this));
    117116
    118117        contextMenu.appendSeparator();
     
    147146    _toggleBreakpoint()
    148147    {
    149         if (this.representedObject.eventListener) {
    150             WI.domManager.removeBreakpointForEventListener(this.representedObject.eventListener);
    151             return;
    152         }
    153 
    154148        this.representedObject.disabled = !this.representedObject.disabled;
    155149    }
Note: See TracChangeset for help on using the changeset viewer.