Changeset 89245 in webkit


Ignore:
Timestamp:
Jun 20, 2011 7:10:42 AM (13 years ago)
Author:
loislo@chromium.org
Message:

2011-06-20 Ilya Tikhonovsky <loislo@chromium.org>

Reviewed by Yury Semikhatsky.

Web Inspector: It would be useful to be able to pause on element's style change.
https://bugs.webkit.org/show_bug.cgi?id=62982

Current workaround is to use mutation events but it's awkward and doesn't
compare _usability-wise_ to what could be implemented as native support in web inspector.
In complex applications, being able to see which code causes element to change its style is indispensable.

  • inspector/debugger/dom-breakpoints.html:
  • platform/chromium/inspector/debugger/dom-breakpoints-expected.txt:

2011-06-20 Ilya Tikhonovsky <loislo@chromium.org>

Reviewed by Yury Semikhatsky.

Web Inspector: It would be useful to be able to pause on element's style change.
https://bugs.webkit.org/show_bug.cgi?id=62982

Current workaround is to use mutation events but it's awkward and doesn't
compare _usability-wise_ to what could be implemented as native support in web inspector.
In complex applications, being able to see which code causes element to change its style is indispensable.

  • inspector/InspectorDOMDebuggerAgent.cpp: (WebCore::InspectorDOMDebuggerAgent::didInvalidateStyleAttr):
  • inspector/InspectorDOMDebuggerAgent.h:
  • inspector/InspectorInstrumentation.cpp: (WebCore::InspectorInstrumentation::didInvalidateStyleAttrImpl):
Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r89244 r89245  
     12011-06-20  Ilya Tikhonovsky  <loislo@chromium.org>
     2
     3        Reviewed by Yury Semikhatsky.
     4
     5        Web Inspector: It would be useful to be able to pause on element's style change.
     6        https://bugs.webkit.org/show_bug.cgi?id=62982
     7
     8        Current workaround is to use mutation events but it's awkward and doesn't
     9        compare _usability-wise_ to what could be implemented as native support in web inspector.
     10        In complex applications, being able to see which code causes element to change its style is indispensable.
     11
     12        * inspector/debugger/dom-breakpoints.html:
     13        * platform/chromium/inspector/debugger/dom-breakpoints-expected.txt:
     14
    1152011-06-20  Chang Shu  <cshu@webkit.org>
    216
  • trunk/LayoutTests/inspector/debugger/dom-breakpoints.html

    r83864 r89245  
    1717    var element = document.getElementById(elementId);
    1818    element.setAttribute(name, value);
     19}
     20
     21function modifyStyleAttribute(elementId, name, value)
     22{
     23    var element = document.getElementById(elementId);
     24    element.style.setProperty(name, value);
    1925}
    2026
     
    7783            waitUntilPausedAndDumpStack(step2);
    7884   
     85            function step2(callFrames)
     86            {
     87                pane._removeBreakpoint(rootElement, pane._breakpointTypes.AttributeModified);
     88                next();
     89            }
     90        },
     91
     92        function testModifyStyleAttribute(next)
     93        {
     94            InspectorTest.addResult("Test that 'Attribute Modified' breakpoint is hit when modifying style attribute.");
     95            pane._setBreakpoint(rootElement, pane._breakpointTypes.AttributeModified, true);
     96            InspectorTest.addResult("Set 'Attribute Modified' DOM breakpoint on rootElement.");
     97            InspectorTest.evaluateInPageWithTimeout("modifyStyleAttribute('rootElement', 'color', 'green')");
     98            InspectorTest.addResult("Modify rootElement style.color attribute.");
     99            waitUntilPausedAndDumpStack(step2);
     100
    79101            function step2(callFrames)
    80102            {
     
    168190</p>
    169191
    170 <div id="rootElement">
     192<div id="rootElement" style="color: red">
    171193<div id="elementToRemove"></div>
    172194</div>
  • trunk/LayoutTests/platform/chromium/inspector/debugger/dom-breakpoints-expected.txt

    r79599 r89245  
    2929Script execution paused.
    3030Call stack:
    31     0) removeElement (dom-breakpoints.html:24)
     31    0) removeElement (dom-breakpoints.html:30)
    3232    1)  (:1)
    3333Paused on a "Subtree Modified" breakpoint set on div#rootElement, because its descendant div#grandchildElement was removed.
     
    4545Script execution resumed.
    4646
     47Running: testModifyStyleAttribute
     48Test that 'Attribute Modified' breakpoint is hit when modifying style attribute.
     49Set 'Attribute Modified' DOM breakpoint on rootElement.
     50Modify rootElement style.color attribute.
     51Script execution paused.
     52Call stack:
     53    0) modifyStyleAttribute (dom-breakpoints.html:24)
     54    1)  (:1)
     55Paused on a "Attribute Modified" breakpoint set on div#rootElement.
     56Script execution resumed.
     57
    4758Running: testRemoveNode
    4859Test that 'Node Removed' breakpoint is hit when removing a node.
     
    5162Script execution paused.
    5263Call stack:
    53     0) removeElement (dom-breakpoints.html:24)
     64    0) removeElement (dom-breakpoints.html:30)
    5465    1)  (:1)
    5566Paused on a "Node Removed" breakpoint set on div#elementToRemove.
  • trunk/Source/WebCore/ChangeLog

    r89236 r89245  
     12011-06-20  Ilya Tikhonovsky  <loislo@chromium.org>
     2
     3        Reviewed by Yury Semikhatsky.
     4
     5        Web Inspector: It would be useful to be able to pause on element's style change.
     6        https://bugs.webkit.org/show_bug.cgi?id=62982
     7
     8        Current workaround is to use mutation events but it's awkward and doesn't
     9        compare _usability-wise_ to what could be implemented as native support in web inspector.
     10        In complex applications, being able to see which code causes element to change its style is indispensable.
     11
     12        * inspector/InspectorDOMDebuggerAgent.cpp:
     13        (WebCore::InspectorDOMDebuggerAgent::didInvalidateStyleAttr):
     14        * inspector/InspectorDOMDebuggerAgent.h:
     15        * inspector/InspectorInstrumentation.cpp:
     16        (WebCore::InspectorInstrumentation::didInvalidateStyleAttrImpl):
     17
    1182011-06-19  Mads Ager  <ager@chromium.org>
    219
  • trunk/Source/WebCore/inspector/InspectorDOMDebuggerAgent.cpp

    r86542 r89245  
    142142}
    143143
     144void InspectorDOMDebuggerAgent::didInvalidateStyleAttr(Node* node)
     145{
     146    if (hasBreakpoint(node, AttributeModified)) {
     147        RefPtr<InspectorObject> eventData = InspectorObject::create();
     148        descriptionForDOMEvent(node, AttributeModified, false, eventData.get());
     149        eventData->setString("breakpointType", domNativeBreakpointType);
     150        m_debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
     151    }
     152}
     153
    144154void InspectorDOMDebuggerAgent::didInsertDOMNode(Node* node)
    145155{
     
    205215void InspectorDOMDebuggerAgent::willInsertDOMNode(Node*, Node* parent)
    206216{
    207     InspectorDebuggerAgent* debuggerAgent = m_debuggerAgent;
    208     if (!debuggerAgent)
    209         return;
    210 
    211217    if (hasBreakpoint(parent, SubtreeModified)) {
    212218        RefPtr<InspectorObject> eventData = InspectorObject::create();
    213219        descriptionForDOMEvent(parent, SubtreeModified, true, eventData.get());
    214220        eventData->setString("breakpointType", domNativeBreakpointType);
    215         debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
     221        m_debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
    216222    }
    217223}
     
    219225void InspectorDOMDebuggerAgent::willRemoveDOMNode(Node* node)
    220226{
    221     InspectorDebuggerAgent* debuggerAgent = m_debuggerAgent;
    222     if (!debuggerAgent)
    223         return;
    224 
    225227    Node* parentNode = InspectorDOMAgent::innerParentNode(node);
    226228    if (hasBreakpoint(node, NodeRemoved)) {
     
    228230        descriptionForDOMEvent(node, NodeRemoved, false, eventData.get());
    229231        eventData->setString("breakpointType", domNativeBreakpointType);
    230         debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
     232        m_debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
    231233    } else if (parentNode && hasBreakpoint(parentNode, SubtreeModified)) {
    232234        RefPtr<InspectorObject> eventData = InspectorObject::create();
    233235        descriptionForDOMEvent(node, SubtreeModified, false, eventData.get());
    234236        eventData->setString("breakpointType", domNativeBreakpointType);
    235         debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
     237        m_debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
    236238    }
    237239}
     
    239241void InspectorDOMDebuggerAgent::willModifyDOMAttr(Element* element)
    240242{
    241     InspectorDebuggerAgent* debuggerAgent = m_debuggerAgent;
    242     if (!debuggerAgent)
    243         return;
    244 
    245243    if (hasBreakpoint(element, AttributeModified)) {
    246244        RefPtr<InspectorObject> eventData = InspectorObject::create();
    247245        descriptionForDOMEvent(element, AttributeModified, false, eventData.get());
    248246        eventData->setString("breakpointType", domNativeBreakpointType);
    249         debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
     247        m_debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
    250248    }
    251249}
     
    308306void InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded(const String& categoryType, const String& eventName, bool synchronous)
    309307{
    310     InspectorDebuggerAgent* debuggerAgent = m_debuggerAgent;
    311     if (!debuggerAgent)
    312         return;
    313 
    314308    String fullEventName = categoryType + ':' + eventName;
    315309    RefPtr<InspectorObject> eventListenerBreakpoints = m_inspectorState->getObject(DOMDebuggerAgentState::eventListenerBreakpoints);
     
    321315    eventData->setString("eventName", fullEventName);
    322316    if (synchronous)
    323         debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
     317        m_debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
    324318    else
    325         debuggerAgent->schedulePauseOnNextStatement(NativeBreakpointDebuggerEventType, eventData.release());
     319        m_debuggerAgent->schedulePauseOnNextStatement(NativeBreakpointDebuggerEventType, eventData.release());
    326320}
    327321
     
    352346void InspectorDOMDebuggerAgent::willSendXMLHttpRequest(const String& url)
    353347{
    354     InspectorDebuggerAgent* debuggerAgent = m_debuggerAgent;
    355     if (!debuggerAgent)
    356         return;
    357 
    358348    String breakpointURL;
    359349    if (m_inspectorState->getBoolean(DOMDebuggerAgentState::pauseOnAllXHRs))
     
    376366    eventData->setString("breakpointURL", breakpointURL);
    377367    eventData->setString("url", url);
    378     debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
     368    m_debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
    379369}
    380370
  • trunk/Source/WebCore/inspector/InspectorDOMDebuggerAgent.h

    r85850 r89245  
    7373    // InspectorInstrumentation API
    7474    void willInsertDOMNode(Node*, Node* parent);
     75    void didInvalidateStyleAttr(Node*);
    7576    void didInsertDOMNode(Node*);
    7677    void willRemoveDOMNode(Node*);
  • trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp

    r89224 r89245  
    163163    if (InspectorDOMAgent* domAgent = instrumentingAgents->inspectorDOMAgent())
    164164        domAgent->didInvalidateStyleAttr(node);
     165    if (InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents->inspectorDOMDebuggerAgent())
     166        domDebuggerAgent->didInvalidateStyleAttr(node);
    165167}
    166168
Note: See TracChangeset for help on using the changeset viewer.