Title: [89245] trunk
Revision
89245
Author
[email protected]
Date
2011-06-20 07:10:42 -0700 (Mon, 20 Jun 2011)

Log Message

2011-06-20  Ilya Tikhonovsky  <[email protected]>

        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  <[email protected]>

        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):

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (89244 => 89245)


--- trunk/LayoutTests/ChangeLog	2011-06-20 13:55:42 UTC (rev 89244)
+++ trunk/LayoutTests/ChangeLog	2011-06-20 14:10:42 UTC (rev 89245)
@@ -1,3 +1,17 @@
+2011-06-20  Ilya Tikhonovsky  <[email protected]>
+
+        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  Chang Shu  <[email protected]>
 
         unreviewed.

Modified: trunk/LayoutTests/inspector/debugger/dom-breakpoints.html (89244 => 89245)


--- trunk/LayoutTests/inspector/debugger/dom-breakpoints.html	2011-06-20 13:55:42 UTC (rev 89244)
+++ trunk/LayoutTests/inspector/debugger/dom-breakpoints.html	2011-06-20 14:10:42 UTC (rev 89245)
@@ -18,6 +18,12 @@
     element.setAttribute(name, value);
 }
 
+function modifyStyleAttribute(elementId, name, value)
+{
+    var element = document.getElementById(elementId);
+    element.style.setProperty(name, value);
+}
+
 function removeElement(elementId)
 {
     var element = document.getElementById(elementId);
@@ -83,6 +89,22 @@
             }
         },
 
+        function testModifyStyleAttribute(next)
+        {
+            InspectorTest.addResult("Test that 'Attribute Modified' breakpoint is hit when modifying style attribute.");
+            pane._setBreakpoint(rootElement, pane._breakpointTypes.AttributeModified, true);
+            InspectorTest.addResult("Set 'Attribute Modified' DOM breakpoint on rootElement.");
+            InspectorTest.evaluateInPageWithTimeout("modifyStyleAttribute('rootElement', 'color', 'green')");
+            InspectorTest.addResult("Modify rootElement style.color attribute.");
+            waitUntilPausedAndDumpStack(step2);
+
+            function step2(callFrames)
+            {
+                pane._removeBreakpoint(rootElement, pane._breakpointTypes.AttributeModified);
+                next();
+            }
+        },
+
         function testRemoveNode(next)
         {
             InspectorTest.addResult("Test that 'Node Removed' breakpoint is hit when removing a node.");
@@ -167,7 +189,7 @@
 Tests DOM breakpoints. <a href="" 42886</a>
 </p>
 
-<div id="rootElement">
+<div id="rootElement" style="color: red">
 <div id="elementToRemove"></div>
 </div>
 

Modified: trunk/LayoutTests/platform/chromium/inspector/debugger/dom-breakpoints-expected.txt (89244 => 89245)


--- trunk/LayoutTests/platform/chromium/inspector/debugger/dom-breakpoints-expected.txt	2011-06-20 13:55:42 UTC (rev 89244)
+++ trunk/LayoutTests/platform/chromium/inspector/debugger/dom-breakpoints-expected.txt	2011-06-20 14:10:42 UTC (rev 89245)
@@ -28,7 +28,7 @@
 Remove grandchildElement.
 Script execution paused.
 Call stack:
-    0) removeElement (dom-breakpoints.html:24)
+    0) removeElement (dom-breakpoints.html:30)
     1)  (:1)
 Paused on a "Subtree Modified" breakpoint set on div#rootElement, because its descendant div#grandchildElement was removed.
 Script execution resumed.
@@ -44,13 +44,24 @@
 Paused on a "Attribute Modified" breakpoint set on div#rootElement.
 Script execution resumed.
 
+Running: testModifyStyleAttribute
+Test that 'Attribute Modified' breakpoint is hit when modifying style attribute.
+Set 'Attribute Modified' DOM breakpoint on rootElement.
+Modify rootElement style.color attribute.
+Script execution paused.
+Call stack:
+    0) modifyStyleAttribute (dom-breakpoints.html:24)
+    1)  (:1)
+Paused on a "Attribute Modified" breakpoint set on div#rootElement.
+Script execution resumed.
+
 Running: testRemoveNode
 Test that 'Node Removed' breakpoint is hit when removing a node.
 Set 'Node Removed' DOM breakpoint on elementToRemove.
 Remove elementToRemove.
 Script execution paused.
 Call stack:
-    0) removeElement (dom-breakpoints.html:24)
+    0) removeElement (dom-breakpoints.html:30)
     1)  (:1)
 Paused on a "Node Removed" breakpoint set on div#elementToRemove.
 Script execution resumed.

Modified: trunk/Source/WebCore/ChangeLog (89244 => 89245)


--- trunk/Source/WebCore/ChangeLog	2011-06-20 13:55:42 UTC (rev 89244)
+++ trunk/Source/WebCore/ChangeLog	2011-06-20 14:10:42 UTC (rev 89245)
@@ -1,3 +1,20 @@
+2011-06-20  Ilya Tikhonovsky  <[email protected]>
+
+        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):
+
 2011-06-19  Mads Ager  <[email protected]>
 
         Reviewed by Adam Barth.

Modified: trunk/Source/WebCore/inspector/InspectorDOMDebuggerAgent.cpp (89244 => 89245)


--- trunk/Source/WebCore/inspector/InspectorDOMDebuggerAgent.cpp	2011-06-20 13:55:42 UTC (rev 89244)
+++ trunk/Source/WebCore/inspector/InspectorDOMDebuggerAgent.cpp	2011-06-20 14:10:42 UTC (rev 89245)
@@ -141,6 +141,16 @@
     m_inspectorState->setObject(DOMDebuggerAgentState::eventListenerBreakpoints, eventListenerBreakpoints);
 }
 
+void InspectorDOMDebuggerAgent::didInvalidateStyleAttr(Node* node)
+{
+    if (hasBreakpoint(node, AttributeModified)) {
+        RefPtr<InspectorObject> eventData = InspectorObject::create();
+        descriptionForDOMEvent(node, AttributeModified, false, eventData.get());
+        eventData->setString("breakpointType", domNativeBreakpointType);
+        m_debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
+    }
+}
+
 void InspectorDOMDebuggerAgent::didInsertDOMNode(Node* node)
 {
     if (m_domBreakpoints.size()) {
@@ -204,49 +214,37 @@
 
 void InspectorDOMDebuggerAgent::willInsertDOMNode(Node*, Node* parent)
 {
-    InspectorDebuggerAgent* debuggerAgent = m_debuggerAgent;
-    if (!debuggerAgent)
-        return;
-
     if (hasBreakpoint(parent, SubtreeModified)) {
         RefPtr<InspectorObject> eventData = InspectorObject::create();
         descriptionForDOMEvent(parent, SubtreeModified, true, eventData.get());
         eventData->setString("breakpointType", domNativeBreakpointType);
-        debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
+        m_debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
     }
 }
 
 void InspectorDOMDebuggerAgent::willRemoveDOMNode(Node* node)
 {
-    InspectorDebuggerAgent* debuggerAgent = m_debuggerAgent;
-    if (!debuggerAgent)
-        return;
-
     Node* parentNode = InspectorDOMAgent::innerParentNode(node);
     if (hasBreakpoint(node, NodeRemoved)) {
         RefPtr<InspectorObject> eventData = InspectorObject::create();
         descriptionForDOMEvent(node, NodeRemoved, false, eventData.get());
         eventData->setString("breakpointType", domNativeBreakpointType);
-        debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
+        m_debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
     } else if (parentNode && hasBreakpoint(parentNode, SubtreeModified)) {
         RefPtr<InspectorObject> eventData = InspectorObject::create();
         descriptionForDOMEvent(node, SubtreeModified, false, eventData.get());
         eventData->setString("breakpointType", domNativeBreakpointType);
-        debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
+        m_debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
     }
 }
 
 void InspectorDOMDebuggerAgent::willModifyDOMAttr(Element* element)
 {
-    InspectorDebuggerAgent* debuggerAgent = m_debuggerAgent;
-    if (!debuggerAgent)
-        return;
-
     if (hasBreakpoint(element, AttributeModified)) {
         RefPtr<InspectorObject> eventData = InspectorObject::create();
         descriptionForDOMEvent(element, AttributeModified, false, eventData.get());
         eventData->setString("breakpointType", domNativeBreakpointType);
-        debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
+        m_debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
     }
 }
 
@@ -307,10 +305,6 @@
 
 void InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded(const String& categoryType, const String& eventName, bool synchronous)
 {
-    InspectorDebuggerAgent* debuggerAgent = m_debuggerAgent;
-    if (!debuggerAgent)
-        return;
-
     String fullEventName = categoryType + ':' + eventName;
     RefPtr<InspectorObject> eventListenerBreakpoints = m_inspectorState->getObject(DOMDebuggerAgentState::eventListenerBreakpoints);
     if (eventListenerBreakpoints->find(fullEventName) == eventListenerBreakpoints->end())
@@ -320,9 +314,9 @@
     eventData->setString("breakpointType", eventListenerNativeBreakpointType);
     eventData->setString("eventName", fullEventName);
     if (synchronous)
-        debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
+        m_debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
     else
-        debuggerAgent->schedulePauseOnNextStatement(NativeBreakpointDebuggerEventType, eventData.release());
+        m_debuggerAgent->schedulePauseOnNextStatement(NativeBreakpointDebuggerEventType, eventData.release());
 }
 
 void InspectorDOMDebuggerAgent::setXHRBreakpoint(ErrorString*, const String& url)
@@ -351,10 +345,6 @@
 
 void InspectorDOMDebuggerAgent::willSendXMLHttpRequest(const String& url)
 {
-    InspectorDebuggerAgent* debuggerAgent = m_debuggerAgent;
-    if (!debuggerAgent)
-        return;
-
     String breakpointURL;
     if (m_inspectorState->getBoolean(DOMDebuggerAgentState::pauseOnAllXHRs))
         breakpointURL = "";
@@ -375,7 +365,7 @@
     eventData->setString("breakpointType", xhrNativeBreakpointType);
     eventData->setString("breakpointURL", breakpointURL);
     eventData->setString("url", url);
-    debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
+    m_debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release());
 }
 
 void InspectorDOMDebuggerAgent::clear()

Modified: trunk/Source/WebCore/inspector/InspectorDOMDebuggerAgent.h (89244 => 89245)


--- trunk/Source/WebCore/inspector/InspectorDOMDebuggerAgent.h	2011-06-20 13:55:42 UTC (rev 89244)
+++ trunk/Source/WebCore/inspector/InspectorDOMDebuggerAgent.h	2011-06-20 14:10:42 UTC (rev 89245)
@@ -72,6 +72,7 @@
 
     // InspectorInstrumentation API
     void willInsertDOMNode(Node*, Node* parent);
+    void didInvalidateStyleAttr(Node*);
     void didInsertDOMNode(Node*);
     void willRemoveDOMNode(Node*);
     void didRemoveDOMNode(Node*);

Modified: trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp (89244 => 89245)


--- trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp	2011-06-20 13:55:42 UTC (rev 89244)
+++ trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp	2011-06-20 14:10:42 UTC (rev 89245)
@@ -162,6 +162,8 @@
 {
     if (InspectorDOMAgent* domAgent = instrumentingAgents->inspectorDOMAgent())
         domAgent->didInvalidateStyleAttr(node);
+    if (InspectorDOMDebuggerAgent* domDebuggerAgent = instrumentingAgents->inspectorDOMDebuggerAgent())
+        domDebuggerAgent->didInvalidateStyleAttr(node);
 }
 
 void InspectorInstrumentation::mouseDidMoveOverElementImpl(InstrumentingAgents* instrumentingAgents, const HitTestResult& result, unsigned modifierFlags)
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to