[SCM] WebKit Debian packaging branch, debian/experimental, updated. debian/1.3.8-1-1049-g2e11a8e

apavlov at chromium.org apavlov at chromium.org
Fri Jan 21 14:41:09 UTC 2011


The following commit has been merged in the debian/experimental branch:
commit 93e800a482e391e868128bcb4bbcc650aa3aa02e
Author: apavlov at chromium.org <apavlov at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Dec 24 16:39:32 2010 +0000

    2010-12-24  Alexander Pavlov  <apavlov at chromium.org>
    
            Reviewed by Yury Semikhatsky.
    
            Web Inspector: Inline HTML style property out of sync with element.style in Sidebar
            https://bugs.webkit.org/show_bug.cgi?id=51478
    
            Now the element attribute modifications (including "style") are tracked, which results in the
            source offsets update (in the backend) and Styles/Metrics pane updates (in the frontend)
            on the "style" attribute modification through the Elements tree. Also, it appears that
            a complete "style" attribute removal destroys the inline style declaration
            (StyledElement::m_inlineStyleDecl), while the code used to rely on it being immutable (hence a crash).
    
            Test: inspector/elements-delete-inline-style.html
    
            WebCore:
            * inspector/InspectorCSSAgent.cpp:
            (WebCore::InspectorCSSAgent::didModifyDOMAttr):
            * inspector/InspectorCSSAgent.h:
            * inspector/InspectorDOMAgent.cpp:
            (WebCore::InspectorDOMAgent::didModifyDOMAttr):
            * inspector/InspectorDOMAgent.h:
            * inspector/InspectorStyleSheet.cpp:
            (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
            (WebCore::InspectorStyleSheetForInlineStyle::didModifyElementAttribute):
            (WebCore::InspectorStyleSheetForInlineStyle::text):
            (WebCore::InspectorStyleSheetForInlineStyle::setStyleText):
            (WebCore::InspectorStyleSheetForInlineStyle::getStyleAttributeRanges):
            * inspector/InspectorStyleSheet.h:
            * inspector/front-end/ElementsTreeOutline.js:
            (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted):
    
            LayoutTests:
            * http/tests/inspector/inspector-test2.js:
            (initialize_InspectorTest.InspectorTest.addResults):
            (initialize_InspectorTest.InspectorTest.createKeyEvent):
            * inspector/elements-delete-inline-style-expected.txt: Added.
            * inspector/elements-delete-inline-style.html: Added.
            * inspector/elements-tests2.js: Added.
            (initialize_ElementTest.InspectorTest.expandDOMSubtree.processChildren):
            (initialize_ElementTest.InspectorTest.expandDOMSubtree):
            (initialize_ElementTest.InspectorTest.expandDOMSubtreeAndRun):
            (initialize_ElementTest.InspectorTest.nodeForId):
            (initialize_ElementTest.InspectorTest.selectElementAndRun):
            (initialize_ElementTest.InspectorTest.dumpSelectedElementStyles):
            (initialize_ElementTest.InspectorTest.getSelectedElementStyles):
            (initialize_ElementTest.InspectorTest.getElementStylePropertyTreeItem):
            (initialize_ElementTest.InspectorTest.dumpStyleTreeOutline):
            (initialize_ElementTest.InspectorTest.dumpStyleTreeItem):
            (initialize_ElementTest):
            * inspector/styles-add-blank-property.html: Remove unnecessary function.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@74634 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 2210373..f721d20 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,29 @@
+2010-12-24  Alexander Pavlov  <apavlov at chromium.org>
+
+        Reviewed by Yury Semikhatsky.
+
+        Web Inspector: Inline HTML style property out of sync with element.style in Sidebar
+        https://bugs.webkit.org/show_bug.cgi?id=51478
+
+        * http/tests/inspector/inspector-test2.js:
+        (initialize_InspectorTest.InspectorTest.addResults):
+        (initialize_InspectorTest.InspectorTest.createKeyEvent):
+        * inspector/elements-delete-inline-style-expected.txt: Added.
+        * inspector/elements-delete-inline-style.html: Added.
+        * inspector/elements-tests2.js: Added.
+        (initialize_ElementTest.InspectorTest.expandDOMSubtree.processChildren):
+        (initialize_ElementTest.InspectorTest.expandDOMSubtree):
+        (initialize_ElementTest.InspectorTest.expandDOMSubtreeAndRun):
+        (initialize_ElementTest.InspectorTest.nodeForId):
+        (initialize_ElementTest.InspectorTest.selectElementAndRun):
+        (initialize_ElementTest.InspectorTest.dumpSelectedElementStyles):
+        (initialize_ElementTest.InspectorTest.getSelectedElementStyles):
+        (initialize_ElementTest.InspectorTest.getElementStylePropertyTreeItem):
+        (initialize_ElementTest.InspectorTest.dumpStyleTreeOutline):
+        (initialize_ElementTest.InspectorTest.dumpStyleTreeItem):
+        (initialize_ElementTest):
+        * inspector/styles-add-blank-property.html: Remove unnecessary function.
+
 2010-12-24  Benjamin Kalman  <kalman at chromium.org>
 
         Reviewed by Ryosuke Niwa.
diff --git a/LayoutTests/http/tests/inspector/inspector-test2.js b/LayoutTests/http/tests/inspector/inspector-test2.js
index 9a130ee..302caf1 100644
--- a/LayoutTests/http/tests/inspector/inspector-test2.js
+++ b/LayoutTests/http/tests/inspector/inspector-test2.js
@@ -55,6 +55,14 @@ InspectorTest.addResult = function(text)
     }
 }
 
+InspectorTest.addResults = function(textArray)
+{
+    if (!textArray)
+        return;
+    for (var i = 0, size = textArray.length; i < size; ++i)
+        InspectorTest.addResult(textArray[i]);
+}
+
 InspectorTest.addObject = function(object, nondeterministicProps, prefix, firstLinePrefix)
 {
     prefix = prefix || "";
@@ -115,6 +123,13 @@ InspectorTest.runAfterPendingDispatches = function(callback)
     WebInspector.TestController.prototype.runAfterPendingDispatches(callback);
 }
 
+InspectorTest.createKeyEvent = function(keyIdentifier)
+{
+    var evt = document.createEvent("KeyboardEvent");
+    evt.initKeyboardEvent("keydown", true /* can bubble */, true /* can cancel */, null /* view */, keyIdentifier, "");
+    return evt;
+}
+
 InspectorTest.findDOMNode = function(root, filter, callback)
 {
     var found = false;
diff --git a/LayoutTests/inspector/elements-delete-inline-style-expected.txt b/LayoutTests/inspector/elements-delete-inline-style-expected.txt
new file mode 100755
index 0000000..d963da1
--- /dev/null
+++ b/LayoutTests/inspector/elements-delete-inline-style-expected.txt
@@ -0,0 +1,20 @@
+Tests that the "style" attribute removal results in the Styles sidebar pane update (not a crash). Bug 51478
+
+Before style property removal:
+[expanded] element.style { ()
+color: red;
+
+======== Matched CSS Rules ========
+[expanded] div { (user agent stylesheet)
+display: block;
+
+
+After style property removal:
+[expanded] element.style { ()
+
+======== Matched CSS Rules ========
+[expanded] div { (user agent stylesheet)
+display: block;
+
+
+
diff --git a/LayoutTests/inspector/elements-delete-inline-style.html b/LayoutTests/inspector/elements-delete-inline-style.html
new file mode 100755
index 0000000..e875f38
--- /dev/null
+++ b/LayoutTests/inspector/elements-delete-inline-style.html
@@ -0,0 +1,53 @@
+<html>
+<head>
+<script src="../http/tests/inspector/inspector-test2.js"></script>
+<script src="elements-tests2.js"></script>
+<script>
+
+function test()
+{
+    function selectInspectedElement()
+    {
+        InspectorTest.selectElementAndRun("inspected", executeTest);
+    }
+
+    function executeTest()
+    {
+        InspectorTest.addResult("Before style property removal:");
+        InspectorTest.addResults(InspectorTest.getSelectedElementStyles(true));
+
+        var treeElement;
+        var innerMapping = WebInspector.domAgent._idToDOMNode;
+        for (var nodeId in innerMapping) {
+            if (innerMapping[nodeId].nodeName === "DIV") {
+                treeElement = WebInspector.panels.elements.treeOutline.findTreeElement(innerMapping[nodeId]);
+                break;
+            }
+        }
+        var styleAttrElement = treeElement.listItemElement.getElementsByClassName("webkit-html-attribute")[1];
+        treeElement._startEditingTarget(styleAttrElement);
+        var editorElement = window.getSelection().anchorNode.parentElement;
+
+        // Remove the "style" attribute altogether (not just clear its value).
+        editorElement.textContent = "";
+        editorElement.dispatchEvent(InspectorTest.createKeyEvent("Enter"));
+        InspectorTest.runAfterPendingDispatches(function() {
+            InspectorTest.addResult("After style property removal:");
+            InspectorTest.addResults(InspectorTest.getSelectedElementStyles(true));
+            InspectorTest.completeTest();
+        });
+    }
+
+    InspectorTest.expandDOMSubtreeAndRun(null, selectInspectedElement);
+}
+
+</script>
+</head>
+<body onload="runTest()">
+<p>
+Tests that the "style" attribute removal results in the Styles sidebar pane update (not a crash). <a href="http://bugs.webkit.org/show_bug.cgi?id=51478">Bug 51478</a>
+</p>
+
+<div id="inspected" style="color: red"></div>
+</body>
+</html>
diff --git a/LayoutTests/inspector/elements-tests2.js b/LayoutTests/inspector/elements-tests2.js
new file mode 100755
index 0000000..550882f
--- /dev/null
+++ b/LayoutTests/inspector/elements-tests2.js
@@ -0,0 +1,126 @@
+var initialize_ElementTest = function() {
+
+InspectorTest.expandDOMSubtree = function(node)
+{
+    node = node || WebInspector.domAgent.document;
+    function processChildren(children)
+    {
+       for (var i = 0; children && i < children.length; ++i)
+           InspectorTest.expandDOMSubtree(children[i]);
+    }
+    WebInspector.domAgent.getChildNodesAsync(node, processChildren);
+};
+
+InspectorTest.expandDOMSubtreeAndRun = function(node, callback)
+{
+    InspectorTest.expandDOMSubtree(node);
+    InspectorTest.runAfterPendingDispatches(callback);
+};
+
+InspectorTest.nodeForId = function(idValue)
+{
+    var innerMapping = WebInspector.domAgent._idToDOMNode;
+    for (var nodeId in innerMapping) {
+        var node = innerMapping[nodeId];
+        if (node.getAttribute("id") === idValue)
+            return node;
+    }
+    return null;
+};
+
+InspectorTest.selectElementAndRun = function(idValue, callback)
+{
+    var node = InspectorTest.nodeForId(idValue);
+    if (!node) {
+        InspectorTest.addResult("Debugger was enabled.");
+        InspectorTest.completeTest();
+        return;
+    }
+
+    WebInspector.updateFocusedNode(node.id);
+    InspectorTest.runAfterPendingDispatches(callback);
+};
+
+InspectorTest.dumpSelectedElementStyles = function()
+{
+    InspectorTest.addResult("Debugger was enabled.");
+    InspectorTest.completeTest();
+    InspectorTest.addResults(InspectorTest.getSelectedElementStyles(false));
+};
+
+InspectorTest.getSelectedElementStyles = function(excludeComputed, excludeMatched)
+{
+    var result = [];
+    var styleSections = WebInspector.panels.elements.sidebarPanes.styles.sections;
+    for (var pseudoId in styleSections) {
+        var pseudoName = WebInspector.StylesSidebarPane.PseudoIdNames[pseudoId];
+        var sections = styleSections[pseudoId];
+        for (var i = 0; i < sections.length; ++i) {
+            var section = sections[i];
+            if (section.computedStyle && excludeComputed)
+                continue;
+            if (section.rule && excludeMatched)
+                continue;
+            if (section.element.previousSibling && section.element.previousSibling.className === "styles-sidebar-separator")
+                result.push("======== " + section.element.previousSibling.textContent + " ========");
+            result.push((section.expanded ? "[expanded] " : "[collapsed] ") + section.titleElement.textContent + " (" + section.subtitleAsTextForTest + ")");
+            section.expand();
+            InspectorTest.dumpStyleTreeOutline(section.propertiesTreeOutline, result);
+            result.push("");
+        }
+        result.push("");
+    }
+    return result;
+};
+
+// FIXME: this returns the first tree item found (may fail for same-named properties in a style).
+InspectorTest.getElementStylePropertyTreeItem = function(propertyName)
+{
+    var styleSections = WebInspector.panels.elements.sidebarPanes.styles.sections[0];
+    var elementStyleSection = styleSections[1];
+    var outline = elementStyleSection.propertiesTreeOutline;
+    for (var i = 0; i < outline.children.length; ++i) {
+        var treeItem = outline.children[i];
+        if (treeItem.name === propertyName)
+            return treeItem;
+    }
+    return null;
+};
+
+InspectorTest.dumpStyleTreeOutline = function(treeItem, result)
+{
+    var children = treeItem.children;
+    for (var i = 0; i < children.length; ++i)
+        InspectorTest.dumpStyleTreeItem(children[i], result, "");
+};
+
+InspectorTest.dumpStyleTreeItem = function(treeItem, result, prefix)
+{
+    // Filter out width and height properties in order to minimize
+    // potential diffs.
+    if (!treeItem.listItemElement.textContent.indexOf("width") ||
+        !treeItem.listItemElement.textContent.indexOf("height"))
+        return;
+
+    if (treeItem.listItemElement.hasStyleClass("inherited"))
+        return;
+    var typePrefix = "";
+    if (treeItem.listItemElement.hasStyleClass("overloaded"))
+        typePrefix += "/-- overloaded --/ ";
+    if (treeItem.listItemElement.hasStyleClass("disabled"))
+        typePrefix += "/-- disabled --/ ";
+    var textContent = treeItem.listItemElement.textContent;
+
+    // Add non-selectable url text.
+    var textData = treeItem.listItemElement.querySelector("[data-uncopyable]");
+    if (textData)
+        textContent += textData.getAttribute("data-uncopyable");
+
+    result.push(prefix + typePrefix + textContent);
+    treeItem.expand();
+    var children = treeItem.children;
+    for (var i = 0; children && i < children.length; ++i)
+        InspectorTest.dumpStyleTreeItem(children[i], result, prefix + "    ");
+};
+
+};
diff --git a/LayoutTests/inspector/styles-add-blank-property.html b/LayoutTests/inspector/styles-add-blank-property.html
index b6b50e6..f496b51 100644
--- a/LayoutTests/inspector/styles-add-blank-property.html
+++ b/LayoutTests/inspector/styles-add-blank-property.html
@@ -27,13 +27,6 @@ function frontend_selectInspectedElement(testController)
     frontend_selectElementAndRun(testController, "inspected", frontend_dumpInspectedStyle);
 }
 
-function frontend_createKeyboardEvent(eventName, keyIdentifier)
-{
-    var evt = document.createEvent("KeyboardEvent");
-    evt.initKeyboardEvent(eventName, true /* can bubble */, true /* can cancel */, null /* view */, keyIdentifier, "");
-    return evt;
-}
-
 function frontend_dumpInspectedStyle(testController)
 {
     testController.results.push("Before append:");
@@ -42,8 +35,8 @@ function frontend_dumpInspectedStyle(testController)
     var section = WebInspector.panels.elements.sidebarPanes.styles.sections[0][1];
     section.expand();
     var treeElement = section.addNewBlankProperty();
-    var enterKeyDown = frontend_createKeyboardEvent("keydown", "Enter");
-    var incrementKeyDown = frontend_createKeyboardEvent("keydown", "Up");
+    var enterKeyDown = frontend_createKeyEvent("Enter");
+    var incrementKeyDown = frontend_createKeyEvent("Up");
 
     function removeEmpty()
     {
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index b8b514f..b8b17ed 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,34 @@
+2010-12-24  Alexander Pavlov  <apavlov at chromium.org>
+
+        Reviewed by Yury Semikhatsky.
+
+        Web Inspector: Inline HTML style property out of sync with element.style in Sidebar
+        https://bugs.webkit.org/show_bug.cgi?id=51478
+
+        Now the element attribute modifications (including "style") are tracked, which results in the
+        source offsets update (in the backend) and Styles/Metrics pane updates (in the frontend)
+        on the "style" attribute modification through the Elements tree. Also, it appears that
+        a complete "style" attribute removal destroys the inline style declaration
+        (StyledElement::m_inlineStyleDecl), while the code used to rely on it being immutable (hence a crash).
+
+        Test: inspector/elements-delete-inline-style.html
+
+        * inspector/InspectorCSSAgent.cpp:
+        (WebCore::InspectorCSSAgent::didModifyDOMAttr):
+        * inspector/InspectorCSSAgent.h:
+        * inspector/InspectorDOMAgent.cpp:
+        (WebCore::InspectorDOMAgent::didModifyDOMAttr):
+        * inspector/InspectorDOMAgent.h:
+        * inspector/InspectorStyleSheet.cpp:
+        (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
+        (WebCore::InspectorStyleSheetForInlineStyle::didModifyElementAttribute):
+        (WebCore::InspectorStyleSheetForInlineStyle::text):
+        (WebCore::InspectorStyleSheetForInlineStyle::setStyleText):
+        (WebCore::InspectorStyleSheetForInlineStyle::getStyleAttributeRanges):
+        * inspector/InspectorStyleSheet.h:
+        * inspector/front-end/ElementsTreeOutline.js:
+        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted):
+
 2010-12-24  Noel Gordon  <noel.gordon at gmail.com>
 
         Reviewed by Andreas Kling.
diff --git a/WebCore/inspector/InspectorCSSAgent.cpp b/WebCore/inspector/InspectorCSSAgent.cpp
index 31d951a..67980f8 100644
--- a/WebCore/inspector/InspectorCSSAgent.cpp
+++ b/WebCore/inspector/InspectorCSSAgent.cpp
@@ -542,6 +542,18 @@ void InspectorCSSAgent::didRemoveDOMNode(Node* node)
     m_nodeToInspectorStyleSheet.remove(node);
 }
 
+void InspectorCSSAgent::didModifyDOMAttr(Element* element)
+{
+    if (!element)
+        return;
+
+    NodeToInspectorStyleSheet::iterator it = m_nodeToInspectorStyleSheet.find(element);
+    if (it == m_nodeToInspectorStyleSheet.end())
+        return;
+
+    it->second->didModifyElementAttribute();
+}
+
 } // namespace WebCore
 
 #endif // ENABLE(INSPECTOR)
diff --git a/WebCore/inspector/InspectorCSSAgent.h b/WebCore/inspector/InspectorCSSAgent.h
index f67d57d..387c89b 100644
--- a/WebCore/inspector/InspectorCSSAgent.h
+++ b/WebCore/inspector/InspectorCSSAgent.h
@@ -97,6 +97,7 @@ private:
     // InspectorDOMAgent::DOMListener interface
     virtual void didRemoveDocument(Document*);
     virtual void didRemoveDOMNode(Node*);
+    virtual void didModifyDOMAttr(Element*);
 
     InspectorDOMAgent* m_domAgent;
 
diff --git a/WebCore/inspector/InspectorDOMAgent.cpp b/WebCore/inspector/InspectorDOMAgent.cpp
index cbba75f..e42bf2a 100644
--- a/WebCore/inspector/InspectorDOMAgent.cpp
+++ b/WebCore/inspector/InspectorDOMAgent.cpp
@@ -1132,6 +1132,9 @@ void InspectorDOMAgent::didModifyDOMAttr(Element* element)
     if (!id)
         return;
 
+    if (m_domListener)
+        m_domListener->didModifyDOMAttr(element);
+
     m_frontend->attributesUpdated(id, buildArrayForElementAttributes(element));
 }
 
diff --git a/WebCore/inspector/InspectorDOMAgent.h b/WebCore/inspector/InspectorDOMAgent.h
index 5347090..e57bcea 100644
--- a/WebCore/inspector/InspectorDOMAgent.h
+++ b/WebCore/inspector/InspectorDOMAgent.h
@@ -85,6 +85,7 @@ namespace WebCore {
             }
             virtual void didRemoveDocument(Document*) = 0;
             virtual void didRemoveDOMNode(Node*) = 0;
+            virtual void didModifyDOMAttr(Element*) = 0;
         };
 
         static PassRefPtr<InspectorDOMAgent> create(InspectorFrontend* frontend)
diff --git a/WebCore/inspector/InspectorStyleSheet.cpp b/WebCore/inspector/InspectorStyleSheet.cpp
index 6e3ebe8..f575a52 100644
--- a/WebCore/inspector/InspectorStyleSheet.cpp
+++ b/WebCore/inspector/InspectorStyleSheet.cpp
@@ -1099,11 +1099,28 @@ InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle(const Strin
 {
     ASSERT(element);
     m_inspectorStyle = InspectorStyle::create(InspectorCSSId(id, 0), inlineStyle(), this);
+    m_styleText = m_element->isStyledElement() ? m_element->getAttribute("style").string() : String();
+}
+
+void InspectorStyleSheetForInlineStyle::didModifyElementAttribute()
+{
+    String newStyleText = m_element->getAttribute("style");
+    bool shouldDropSourceData = false;
+    if (m_element->isStyledElement() && m_element->style() != m_inspectorStyle->cssStyle()) {
+        m_inspectorStyle = InspectorStyle::create(InspectorCSSId(id(), 0), inlineStyle(), this);
+        shouldDropSourceData = true;
+    }
+    if (newStyleText != m_styleText) {
+        m_styleText = newStyleText;
+        shouldDropSourceData = true;
+    }
+    if (shouldDropSourceData)
+        m_ruleSourceData.clear();
 }
 
 bool InspectorStyleSheetForInlineStyle::text(String* result) const
 {
-    *result = m_element->getAttribute("style");
+    *result = m_styleText;
     return true;
 }
 
@@ -1112,6 +1129,7 @@ bool InspectorStyleSheetForInlineStyle::setStyleText(CSSStyleDeclaration* style,
     ASSERT_UNUSED(style, style == inlineStyle());
     ExceptionCode ec = 0;
     m_element->setAttribute("style", text, ec);
+    m_styleText = text;
     m_ruleSourceData.clear();
     return !ec;
 }
@@ -1149,13 +1167,10 @@ CSSStyleDeclaration* InspectorStyleSheetForInlineStyle::inlineStyle() const
 
 bool InspectorStyleSheetForInlineStyle::getStyleAttributeRanges(RefPtr<CSSStyleSourceData>* result)
 {
-    DEFINE_STATIC_LOCAL(String, styleAttributeName, ("style"));
-
     if (!m_element->isStyledElement())
         return false;
 
-    String styleText = static_cast<StyledElement*>(m_element)->getAttribute(styleAttributeName);
-    if (styleText.isEmpty()) {
+    if (m_styleText.isEmpty()) {
         (*result)->styleBodyRange.start = 0;
         (*result)->styleBodyRange.end = 0;
         return true;
@@ -1163,7 +1178,7 @@ bool InspectorStyleSheetForInlineStyle::getStyleAttributeRanges(RefPtr<CSSStyleS
 
     RefPtr<CSSMutableStyleDeclaration> tempDeclaration = CSSMutableStyleDeclaration::create();
     CSSParser p;
-    p.parseDeclaration(tempDeclaration.get(), styleText, result);
+    p.parseDeclaration(tempDeclaration.get(), m_styleText, result);
     return true;
 }
 
diff --git a/WebCore/inspector/InspectorStyleSheet.h b/WebCore/inspector/InspectorStyleSheet.h
index b649bed..ec266cd 100644
--- a/WebCore/inspector/InspectorStyleSheet.h
+++ b/WebCore/inspector/InspectorStyleSheet.h
@@ -237,6 +237,7 @@ public:
     }
 
     InspectorStyleSheetForInlineStyle(const String& id, Element* element, const String& origin);
+    void didModifyElementAttribute();
     virtual bool text(String* result) const;
     virtual CSSStyleDeclaration* styleForId(const InspectorCSSId& id) const { ASSERT_UNUSED(id, !id.ordinal()); return inlineStyle(); }
 
@@ -259,6 +260,9 @@ private:
     Element* m_element;
     RefPtr<CSSRuleSourceData> m_ruleSourceData;
     RefPtr<InspectorStyle> m_inspectorStyle;
+
+    // Contains "style" attribute value and should always be up-to-date.
+    String m_styleText;
 };
 
 #endif
diff --git a/WebCore/inspector/front-end/ElementsTreeOutline.js b/WebCore/inspector/front-end/ElementsTreeOutline.js
index f25f858..67d34b2 100644
--- a/WebCore/inspector/front-end/ElementsTreeOutline.js
+++ b/WebCore/inspector/front-end/ElementsTreeOutline.js
@@ -1077,6 +1077,7 @@ WebInspector.ElementsTreeElement.prototype = {
 
         if (!parseElement.hasAttributes()) {
             this.representedObject.removeAttribute(attributeName);
+            this.treeOutline.focusedNodeChanged(true);
             moveToNextAttributeIfNeeded.call(this);
             return;
         }

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list