Title: [125399] trunk
Revision
125399
Author
apav...@chromium.org
Date
2012-08-13 02:06:15 -0700 (Mon, 13 Aug 2012)

Log Message

Web Inspector: [Protocol] Force elements pseudo state via a separate InspectorCSSAgent method
https://bugs.webkit.org/show_bug.cgi?id=93721

Reviewed by Pavel Feldman.

Source/WebCore:

Introduce InspectorCSSAgent::forcePseudoState() to modify the element's forced pseudo state.

* inspector/Inspector.json:
* inspector/InspectorCSSAgent.cpp:
(WebCore::InspectorCSSAgent::getMatchedStylesForNode):
(WebCore::InspectorCSSAgent::getComputedStyleForNode):
(WebCore::InspectorCSSAgent::forcePseudoState):
(WebCore):
* inspector/InspectorCSSAgent.h:
(InspectorCSSAgent):
* inspector/InspectorDOMAgent.h:
(InspectorDOMAgent):
* inspector/front-end/AuditRules.js:
(WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.getStyles):
* inspector/front-end/CSSStyleModel.js:
(WebInspector.CSSStyleModel.prototype.getMatchedStylesAsync):
(WebInspector.CSSStyleModel.prototype.getComputedStyleAsync):
(WebInspector.CSSStyleModel.prototype.forcePseudoState):
* inspector/front-end/ElementsPanel.js:
(WebInspector.ElementsPanel.prototype._setPseudoClassForNodeId):
* inspector/front-end/MetricsSidebarPane.js:
* inspector/front-end/StylesSidebarPane.js:
(WebInspector.StylesSidebarPane.prototype._refreshUpdate):
(WebInspector.StylesSidebarPane.prototype._rebuildUpdate):

LayoutTests:

* http/tests/inspector/modify-cross-domain-rule.html:
* inspector/styles/get-set-stylesheet-text.html:
* inspector/styles/styles-formatting.html:
* inspector/styles/styles-new-API.html:
* inspector/styles/styles-new-API-expected.txt:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (125398 => 125399)


--- trunk/LayoutTests/ChangeLog	2012-08-13 08:26:15 UTC (rev 125398)
+++ trunk/LayoutTests/ChangeLog	2012-08-13 09:06:15 UTC (rev 125399)
@@ -1,3 +1,16 @@
+2012-08-10  Alexander Pavlov  <apav...@chromium.org>
+
+        Web Inspector: [Protocol] Force elements pseudo state via a separate InspectorCSSAgent method
+        https://bugs.webkit.org/show_bug.cgi?id=93721
+
+        Reviewed by Pavel Feldman.
+
+        * http/tests/inspector/modify-cross-domain-rule.html:
+        * inspector/styles/get-set-stylesheet-text.html:
+        * inspector/styles/styles-formatting.html:
+        * inspector/styles/styles-new-API.html:
+        * inspector/styles/styles-new-API-expected.txt:
+
 2012-08-13  Christophe Dumez  <christophe.du...@intel.com>
 
         [EFL][WK2] Replace Skipped list by TestExpectations

Modified: trunk/LayoutTests/http/tests/inspector/modify-cross-domain-rule.html (125398 => 125399)


--- trunk/LayoutTests/http/tests/inspector/modify-cross-domain-rule.html	2012-08-13 08:26:15 UTC (rev 125398)
+++ trunk/LayoutTests/http/tests/inspector/modify-cross-domain-rule.html	2012-08-13 09:06:15 UTC (rev 125399)
@@ -34,7 +34,7 @@
                     return;
                 }
 
-                WebInspector.cssModel.getMatchedStylesAsync(nodeId, null, false, false, callback);
+                WebInspector.cssModel.getMatchedStylesAsync(nodeId, false, false, callback);
             }
 
             function callback(rules)

Modified: trunk/LayoutTests/inspector/styles/get-set-stylesheet-text.html (125398 => 125399)


--- trunk/LayoutTests/inspector/styles/get-set-stylesheet-text.html	2012-08-13 08:26:15 UTC (rev 125398)
+++ trunk/LayoutTests/inspector/styles/get-set-stylesheet-text.html	2012-08-13 09:06:15 UTC (rev 125399)
@@ -70,7 +70,7 @@
 
         function nodeCallback(node)
         {
-            CSSAgent.getMatchedStylesForNode(node.id, [], false, false, callback);
+            CSSAgent.getMatchedStylesForNode(node.id, false, false, callback);
         }
 
         InspectorTest.selectNodeWithId("inspected", nodeCallback);

Modified: trunk/LayoutTests/inspector/styles/styles-formatting.html (125398 => 125399)


--- trunk/LayoutTests/inspector/styles/styles-formatting.html	2012-08-13 08:26:15 UTC (rev 125398)
+++ trunk/LayoutTests/inspector/styles/styles-formatting.html	2012-08-13 09:06:15 UTC (rev 125399)
@@ -26,7 +26,7 @@
 
             function nodeCallback(node)
             {
-                WebInspector.cssModel.getMatchedStylesAsync(node.id, undefined, false, false, callback);
+                WebInspector.cssModel.getMatchedStylesAsync(node.id, false, false, callback);
             }
             InspectorTest.selectNodeWithId("formatted", nodeCallback);
         },
@@ -121,7 +121,7 @@
 
             function nodeCallback(node)
             {
-                WebInspector.cssModel.getMatchedStylesAsync(node.id, undefined, false, false, callback);
+                WebInspector.cssModel.getMatchedStylesAsync(node.id, false, false, callback);
             }
             InspectorTest.selectNodeWithId("unformatted", nodeCallback);
         },

Modified: trunk/LayoutTests/inspector/styles/styles-new-API-expected.txt (125398 => 125399)


--- trunk/LayoutTests/inspector/styles/styles-new-API-expected.txt	2012-08-13 08:26:15 UTC (rev 125398)
+++ trunk/LayoutTests/inspector/styles/styles-new-API-expected.txt	2012-08-13 09:06:15 UTC (rev 125399)
@@ -77,7 +77,60 @@
 ['font-weight':'normal'] @[0-20] active
 ['width':'85%'] @[21-32] active
 ['background-image':'url(bar.png)'] @[33-63] active
+=== BODY with forced :hover ===
+body: [user-agent] {
+    ['display':'block'] @[undefined-undefined] style
+    ['margin-top':'8px'] @[undefined-undefined] style
+    ['margin-right':'8px'] @[undefined-undefined] style
+    ['margin-bottom':'8px'] @[undefined-undefined] style
+    ['margin-left':'8px'] @[undefined-undefined] style
+}
+body: [regular] {
+    ['property':'imported-media-screen-stylesheet' non-parsed] @[5-48] active
+}
+body: [regular] {
+    ['property':'imported-media-screen-stylesheet' non-parsed] @[5-48] active
+}
+body: [regular] {
+    ['font-size':'12px'] @[5-21] active
+    ['foo':'bar !
 
+    important /* !important property not recognized by WebCore */' is-important non-parsed] @[26-104] active
+    ['height':'100% !important' is-important] @[109-133] active
+    ['colorz':'"!important"' non-parsed] @[138-159] active
+    ['important':'!important' non-parsed] @[164-185] active
+    ['color':'yellow'] @[190-204] active
+    ['color':'"badcolor" ! important /* good property with strange value */' is-important non-parsed] @[209-278] active
+}
+body.main1: [regular] {
+    ['color':'#F00BAA'] @[13-28] active
+    ['zoo':'moo /* not an !important unrecognized property */' non-parsed] @[28-81] active
+}
+body.main2: [regular] {
+    ['background':'green /* value !important comment */ !important /* no semicolon, very !important */' is-important] @[0-95] active
+    ['background-image':'initial' is-important] @[undefined-undefined] style
+    ['background-repeat-x':'initial' is-important] @[undefined-undefined] style
+    ['background-repeat-y':'initial' is-important] @[undefined-undefined] style
+    ['background-attachment':'initial' is-important] @[undefined-undefined] style
+    ['background-position-x':'initial' is-important] @[undefined-undefined] style
+    ['background-position-y':'initial' is-important] @[undefined-undefined] style
+    ['background-origin':'initial' is-important] @[undefined-undefined] style
+    ['background-clip':'initial' is-important] @[undefined-undefined] style
+    ['background-color':'green' is-important] @[undefined-undefined] style
+    ['background-size':'initial' is-important] @[undefined-undefined] style
+}
+body.mainpage: [regular] {
+    ['text-decoration':'none'] @[5-27] active
+    ['badproperty':'1badvalue1' non-parsed] @[108-132] active
+}
+body.mainpage: [regular] {
+    ['prop1':'val1' non-parsed] @[5-17] active
+    ['prop2':'val2' non-parsed] @[22-34] active
+}
+body:hover: [regular] {
+    ['color':'#CDE'] @[3-15] active
+}
+
 === Attributes style for table ===
 ['width':'50%'] @[undefined-undefined] style
 
@@ -252,6 +305,9 @@
     prop2: val2;
 }
 
+body:hover {
+  color: #CDE;
+}
 '
 body.mainpage: [regular] {
     ['text-decoration':'none'] @[5-27] active
@@ -261,6 +317,9 @@
     ['prop1':'val1' non-parsed] @[5-17] active
     ['prop2':'val2' non-parsed] @[22-34] active
 }
+body:hover: [regular] {
+    ['color':'#CDE'] @[3-15] active
+}
 
 === Last stylesheet patched ===
 

Modified: trunk/LayoutTests/inspector/styles/styles-new-API.html (125398 => 125399)


--- trunk/LayoutTests/inspector/styles/styles-new-API.html	2012-08-13 08:26:15 UTC (rev 125398)
+++ trunk/LayoutTests/inspector/styles/styles-new-API.html	2012-08-13 09:06:15 UTC (rev 125399)
@@ -45,7 +45,7 @@
             InspectorTest.addResult("");
             InspectorTest.addResult("=== Inline style for body ===");
             dumpStyle(styles.inlineStyle);
-            test_tableStyles();
+            test_forcedState();
         }
 
         var resultStyles = {};
@@ -87,13 +87,26 @@
         function nodeCallback(node)
         {
             bodyId = node.id;
-            CSSAgent.getComputedStyleForNode(node.id, [], computedCallback);
+            CSSAgent.getComputedStyleForNode(node.id, computedCallback);
             CSSAgent.getInlineStylesForNode(node.id, inlineCallback);
-            CSSAgent.getMatchedStylesForNode(node.id, [], true, true, matchedCallback);
+            CSSAgent.getMatchedStylesForNode(node.id, true, true, matchedCallback);
         }
         InspectorTest.selectNodeWithId("mainBody", nodeCallback);
     }
 
+    function test_forcedState()
+    {
+        CSSAgent.forcePseudoState(bodyId, ["hover"]);
+        CSSAgent.getMatchedStylesForNode(bodyId, true, true, matchedCallback);
+
+        function matchedCallback(error, matchedRules)
+        {
+            InspectorTest.addResult("=== BODY with forced :hover ===");
+            dumpRulesArray(matchedRules);
+            CSSAgent.forcePseudoState(bodyId, ["hover"], test_tableStyles);
+        }
+    }
+
     function test_tableStyles()
     {
         function callback(error, inlineStyle, attributesStyle)
@@ -205,7 +218,7 @@
                 InspectorTest.addResult("error: " + error);
                 return;
             }
-            CSSAgent.getMatchedStylesForNode(bodyId, [], false, false, didGetStyles);
+            CSSAgent.getMatchedStylesForNode(bodyId, false, false, didGetStyles);
         }
 
         function ruleAdded(error, rule)
@@ -273,7 +286,7 @@
 
         function nodeCallback(node)
         {
-            CSSAgent.getMatchedStylesForNode(node.id, [], false, false, stylesCallback);
+            CSSAgent.getMatchedStylesForNode(node.id, false, false, stylesCallback);
         }
         InspectorTest.nodeWithId("toggle", nodeCallback);
     }
@@ -390,17 +403,6 @@
     }
 }
 
-/*
-Covered API methods:
- - getStylesForNode
- - getAllStyleSheets
- - getStyleSheet
- - setStyleSheetText
- - setStyleData
- - setRuleSelector
- - addRule
-*/
-
 </script>
 
 <style>
@@ -416,6 +418,9 @@
     prop2: val2;
 }
 
+body:hover {
+  color: #CDE;
+}
 </style>
 </head>
 

Modified: trunk/Source/WebCore/ChangeLog (125398 => 125399)


--- trunk/Source/WebCore/ChangeLog	2012-08-13 08:26:15 UTC (rev 125398)
+++ trunk/Source/WebCore/ChangeLog	2012-08-13 09:06:15 UTC (rev 125399)
@@ -1,3 +1,35 @@
+2012-08-10  Alexander Pavlov  <apav...@chromium.org>
+
+        Web Inspector: [Protocol] Force elements pseudo state via a separate InspectorCSSAgent method
+        https://bugs.webkit.org/show_bug.cgi?id=93721
+
+        Reviewed by Pavel Feldman.
+
+        Introduce InspectorCSSAgent::forcePseudoState() to modify the element's forced pseudo state.
+
+        * inspector/Inspector.json:
+        * inspector/InspectorCSSAgent.cpp:
+        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
+        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
+        (WebCore::InspectorCSSAgent::forcePseudoState):
+        (WebCore):
+        * inspector/InspectorCSSAgent.h:
+        (InspectorCSSAgent):
+        * inspector/InspectorDOMAgent.h:
+        (InspectorDOMAgent):
+        * inspector/front-end/AuditRules.js:
+        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.getStyles):
+        * inspector/front-end/CSSStyleModel.js:
+        (WebInspector.CSSStyleModel.prototype.getMatchedStylesAsync):
+        (WebInspector.CSSStyleModel.prototype.getComputedStyleAsync):
+        (WebInspector.CSSStyleModel.prototype.forcePseudoState):
+        * inspector/front-end/ElementsPanel.js:
+        (WebInspector.ElementsPanel.prototype._setPseudoClassForNodeId):
+        * inspector/front-end/MetricsSidebarPane.js:
+        * inspector/front-end/StylesSidebarPane.js:
+        (WebInspector.StylesSidebarPane.prototype._refreshUpdate):
+        (WebInspector.StylesSidebarPane.prototype._rebuildUpdate):
+
 2012-08-13  Shinya Kawanaka  <shin...@chromium.org>
 
         Cannot select the AuthorShadowDOM inner element of an img element

Modified: trunk/Source/WebCore/inspector/Inspector.json (125398 => 125399)


--- trunk/Source/WebCore/inspector/Inspector.json	2012-08-13 08:26:15 UTC (rev 125398)
+++ trunk/Source/WebCore/inspector/Inspector.json	2012-08-13 09:06:15 UTC (rev 125399)
@@ -2242,7 +2242,6 @@
                 "name": "getMatchedStylesForNode",
                 "parameters": [
                     { "name": "nodeId", "$ref": "DOM.NodeId" },
-                    { "name": "forcedPseudoClasses", "type": "array", "items": { "type": "string", "enum": ["active", "focus", "hover", "visited"] }, "optional": true, "description": "Element pseudo classes to force when computing applicable style rules." },
                     { "name": "includePseudo", "type": "boolean", "optional": true, "description": "Whether to include pseudo styles (default: true)." },
                     { "name": "includeInherited", "type": "boolean", "optional": true, "description": "Whether to include inherited styles (default: true)." }
                 ],
@@ -2267,8 +2266,7 @@
             {
                 "name": "getComputedStyleForNode",
                 "parameters": [
-                    { "name": "nodeId", "$ref": "DOM.NodeId" },
-                    { "name": "forcedPseudoClasses", "type": "array", "items": { "type": "string", "enum": ["active", "focus", "hover", "visited"] }, "optional": true, "description": "Element pseudo classes to force when computing applicable style rules." }
+                    { "name": "nodeId", "$ref": "DOM.NodeId" }
                 ],
                 "returns": [
                     { "name": "computedStyle", "type": "array", "items": { "$ref": "CSSComputedStyleProperty" }, "description": "Computed style for the specified DOM node." }
@@ -2365,6 +2363,14 @@
                 "description": "Returns all supported CSS property names."
             },
             {
+                "name": "forcePseudoState",
+                "parameters": [
+                    { "name": "nodeId", "$ref": "DOM.NodeId", "description": "The element id for which to force the pseudo state." },
+                    { "name": "forcedPseudoClasses", "type": "array", "items": { "type": "string", "enum": ["active", "focus", "hover", "visited"] }, "description": "Element pseudo classes to force when computing the element's style." }
+                ],
+                "description": "Ensures that the given node will have specified pseudo-classes whenever its style is computed by the browser."
+            },
+            {
                 "name": "startSelectorProfiler"
             },
             {

Modified: trunk/Source/WebCore/inspector/InspectorCSSAgent.cpp (125398 => 125399)


--- trunk/Source/WebCore/inspector/InspectorCSSAgent.cpp	2012-08-13 08:26:15 UTC (rev 125398)
+++ trunk/Source/WebCore/inspector/InspectorCSSAgent.cpp	2012-08-13 09:06:15 UTC (rev 125399)
@@ -583,34 +583,12 @@
     }
 }
 
-void InspectorCSSAgent::recalcStyleForPseudoStateIfNeeded(Element* element, InspectorArray* forcedPseudoClasses)
+void InspectorCSSAgent::getMatchedStylesForNode(ErrorString* errorString, int nodeId, const bool* includePseudo, const bool* includeInherited, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSRule> >& matchedCSSRules, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::PseudoIdRules> >& pseudoIdRules, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::InheritedStyleEntry> >& inheritedEntries)
 {
-    int nodeId = m_domAgent->boundNodeId(element);
-    if (!nodeId)
-        return;
-
-    unsigned forcedPseudoState = computePseudoClassMask(forcedPseudoClasses);
-    NodeIdToForcedPseudoState::iterator it = m_nodeIdToForcedPseudoState.find(nodeId);
-    unsigned currentForcedPseudoState = it == m_nodeIdToForcedPseudoState.end() ? 0 : it->second;
-    bool needStyleRecalc = forcedPseudoState != currentForcedPseudoState;
-    if (!needStyleRecalc)
-        return;
-
-    if (forcedPseudoState)
-        m_nodeIdToForcedPseudoState.set(nodeId, forcedPseudoState);
-    else
-        m_nodeIdToForcedPseudoState.remove(nodeId);
-    element->ownerDocument()->styleResolverChanged(RecalcStyleImmediately);
-}
-
-void InspectorCSSAgent::getMatchedStylesForNode(ErrorString* errorString, int nodeId, const RefPtr<InspectorArray>* forcedPseudoClasses, const bool* includePseudo, const bool* includeInherited, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSRule> >& matchedCSSRules, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::PseudoIdRules> >& pseudoIdRules, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::InheritedStyleEntry> >& inheritedEntries)
-{
     Element* element = elementForId(errorString, nodeId);
     if (!element)
         return;
 
-    recalcStyleForPseudoStateIfNeeded(element, forcedPseudoClasses ? forcedPseudoClasses->get() : 0);
-
     // Matched rules.
     StyleResolver* styleResolver = element->ownerDocument()->styleResolver();
     RefPtr<CSSRuleList> matchedRules = styleResolver->styleRulesForElement(element, StyleResolver::AllCSSRules);
@@ -670,14 +648,12 @@
     attributesStyle = attributes ? attributes.release() : 0;
 }
 
-void InspectorCSSAgent::getComputedStyleForNode(ErrorString* errorString, int nodeId, const RefPtr<InspectorArray>* forcedPseudoClasses, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSComputedStyleProperty> >& style)
+void InspectorCSSAgent::getComputedStyleForNode(ErrorString* errorString, int nodeId, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSComputedStyleProperty> >& style)
 {
     Element* element = elementForId(errorString, nodeId);
     if (!element)
         return;
 
-    recalcStyleForPseudoStateIfNeeded(element, forcedPseudoClasses ? forcedPseudoClasses->get() : 0);
-
     RefPtr<CSSComputedStyleDeclaration> computedStyleInfo = CSSComputedStyleDeclaration::create(element, true);
     RefPtr<InspectorStyle> inspectorStyle = InspectorStyle::create(InspectorCSSId(), computedStyleInfo, 0);
     style = inspectorStyle->buildArrayForComputedStyle();
@@ -825,6 +801,26 @@
     cssProperties = properties.release();
 }
 
+void InspectorCSSAgent::forcePseudoState(ErrorString* errorString, int nodeId, const RefPtr<InspectorArray>& forcedPseudoClasses)
+{
+    Element* element = m_domAgent->assertElement(errorString, nodeId);
+    if (!element)
+        return;
+
+    unsigned forcedPseudoState = computePseudoClassMask(forcedPseudoClasses.get());
+    NodeIdToForcedPseudoState::iterator it = m_nodeIdToForcedPseudoState.find(nodeId);
+    unsigned currentForcedPseudoState = it == m_nodeIdToForcedPseudoState.end() ? 0 : it->second;
+    bool needStyleRecalc = forcedPseudoState != currentForcedPseudoState;
+    if (!needStyleRecalc)
+        return;
+
+    if (forcedPseudoState)
+        m_nodeIdToForcedPseudoState.set(nodeId, forcedPseudoState);
+    else
+        m_nodeIdToForcedPseudoState.remove(nodeId);
+    element->ownerDocument()->styleResolverChanged(RecalcStyleImmediately);
+}
+
 void InspectorCSSAgent::getNamedFlowCollection(ErrorString* errorString, int documentNodeId, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::NamedFlow> >& result)
 {
     Document* document = m_domAgent->assertDocument(errorString, documentNodeId);

Modified: trunk/Source/WebCore/inspector/InspectorCSSAgent.h (125398 => 125399)


--- trunk/Source/WebCore/inspector/InspectorCSSAgent.h	2012-08-13 08:26:15 UTC (rev 125398)
+++ trunk/Source/WebCore/inspector/InspectorCSSAgent.h	2012-08-13 09:06:15 UTC (rev 125399)
@@ -101,9 +101,9 @@
     void didCreateNamedFlow(Document*, const AtomicString& name);
     void didRemoveNamedFlow(Document*, const AtomicString& name);
 
-    virtual void getComputedStyleForNode(ErrorString*, int nodeId, const RefPtr<InspectorArray>* forcedPseudoClasses, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSComputedStyleProperty> >&);
+    virtual void getComputedStyleForNode(ErrorString*, int nodeId, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSComputedStyleProperty> >&);
     virtual void getInlineStylesForNode(ErrorString*, int nodeId, RefPtr<TypeBuilder::CSS::CSSStyle>& inlineStyle, RefPtr<TypeBuilder::CSS::CSSStyle>& attributes);
-    virtual void getMatchedStylesForNode(ErrorString*, int nodeId, const RefPtr<InspectorArray>* forcedPseudoClasses, const bool* includePseudo, const bool* includeInherited, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSRule> >& matchedCSSRules, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::PseudoIdRules> >& pseudoRules, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::InheritedStyleEntry> >& inheritedEntries);
+    virtual void getMatchedStylesForNode(ErrorString*, int nodeId, const bool* includePseudo, const bool* includeInherited, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSRule> >& matchedCSSRules, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::PseudoIdRules> >& pseudoRules, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::InheritedStyleEntry> >& inheritedEntries);
     virtual void getAllStyleSheets(ErrorString*, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSStyleSheetHeader> >& styleSheetInfos);
     virtual void getStyleSheet(ErrorString*, const String& styleSheetId, RefPtr<TypeBuilder::CSS::CSSStyleSheetBody>& result);
     virtual void getStyleSheetText(ErrorString*, const String& styleSheetId, String* result);
@@ -113,6 +113,7 @@
     virtual void setRuleSelector(ErrorString*, const RefPtr<InspectorObject>& ruleId, const String& selector, RefPtr<TypeBuilder::CSS::CSSRule>& result);
     virtual void addRule(ErrorString*, int contextNodeId, const String& selector, RefPtr<TypeBuilder::CSS::CSSRule>& result);
     virtual void getSupportedCSSProperties(ErrorString*, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSPropertyInfo> >& result);
+    virtual void forcePseudoState(ErrorString*, int nodeId, const RefPtr<InspectorArray>& forcedPseudoClasses);
     virtual void getNamedFlowCollection(ErrorString*, int documentNodeId, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::NamedFlow> >& result);
     virtual void getFlowByName(ErrorString*, int documentNodeId, const String& flowName, RefPtr<TypeBuilder::CSS::NamedFlow>& result);
 
@@ -141,7 +142,6 @@
     typedef HashMap<RefPtr<Document>, RefPtr<InspectorStyleSheet> > DocumentToViaInspectorStyleSheet; // "via inspector" stylesheets
     typedef HashMap<int, unsigned> NodeIdToForcedPseudoState;
 
-    void recalcStyleForPseudoStateIfNeeded(Element*, InspectorArray* forcedPseudoClasses);
     InspectorStyleSheetForInlineStyle* asInspectorStyleSheet(Element* element);
     Element* elementForId(ErrorString*, int nodeId);
     void collectStyleSheets(CSSStyleSheet*, TypeBuilder::Array<WebCore::TypeBuilder::CSS::CSSStyleSheetHeader>*);

Modified: trunk/Source/WebCore/inspector/InspectorDOMAgent.h (125398 => 125399)


--- trunk/Source/WebCore/inspector/InspectorDOMAgent.h	2012-08-13 08:26:15 UTC (rev 125398)
+++ trunk/Source/WebCore/inspector/InspectorDOMAgent.h	2012-08-13 09:06:15 UTC (rev 125399)
@@ -193,6 +193,7 @@
     static bool isWhitespace(Node*);
 
     Node* assertNode(ErrorString*, int nodeId);
+    Element* assertElement(ErrorString*, int nodeId);
     Document* assertDocument(ErrorString*, int nodeId);
 
     // Methods called from other agents.
@@ -209,7 +210,6 @@
     int bind(Node*, NodeToIdMap*);
     void unbind(Node*, NodeToIdMap*);
 
-    Element* assertElement(ErrorString*, int nodeId);
     Node* assertEditableNode(ErrorString*, int nodeId);
     Element* assertEditableElement(ErrorString*, int nodeId);
 

Modified: trunk/Source/WebCore/inspector/front-end/AuditRules.js (125398 => 125399)


--- trunk/Source/WebCore/inspector/front-end/AuditRules.js	2012-08-13 08:26:15 UTC (rev 125398)
+++ trunk/Source/WebCore/inspector/front-end/AuditRules.js	2012-08-13 09:06:15 UTC (rev 125399)
@@ -786,9 +786,9 @@
                 doneCallback();
 
             for (var i = 0; nodeIds && i < nodeIds.length; ++i) {
-                WebInspector.cssModel.getMatchedStylesAsync(nodeIds[i], undefined, false, false, matchedCallback);
+                WebInspector.cssModel.getMatchedStylesAsync(nodeIds[i], false, false, matchedCallback);
                 WebInspector.cssModel.getInlineStylesAsync(nodeIds[i], inlineCallback);
-                WebInspector.cssModel.getComputedStyleAsync(nodeIds[i], undefined, imageStylesReady.bind(null, nodeIds[i], targetResult, i === nodeIds.length - 1));
+                WebInspector.cssModel.getComputedStyleAsync(nodeIds[i], imageStylesReady.bind(null, nodeIds[i], targetResult, i === nodeIds.length - 1));
             }
         }
 

Modified: trunk/Source/WebCore/inspector/front-end/CSSStyleModel.js (125398 => 125399)


--- trunk/Source/WebCore/inspector/front-end/CSSStyleModel.js	2012-08-13 08:26:15 UTC (rev 125398)
+++ trunk/Source/WebCore/inspector/front-end/CSSStyleModel.js	2012-08-13 09:06:15 UTC (rev 125399)
@@ -64,12 +64,11 @@
 WebInspector.CSSStyleModel.prototype = {
     /**
      * @param {DOMAgent.NodeId} nodeId
-     * @param {?Array.<string>|undefined} forcedPseudoClasses
      * @param {boolean} needPseudo
      * @param {boolean} needInherited
      * @param {function(?*)} userCallback
      */
-    getMatchedStylesAsync: function(nodeId, forcedPseudoClasses, needPseudo, needInherited, userCallback)
+    getMatchedStylesAsync: function(nodeId, needPseudo, needInherited, userCallback)
     {
         /**
          * @param {function(?*)} userCallback
@@ -115,15 +114,14 @@
                 userCallback(result);
         }
 
-        CSSAgent.getMatchedStylesForNode(nodeId, forcedPseudoClasses || [], needPseudo, needInherited, callback.bind(null, userCallback));
+        CSSAgent.getMatchedStylesForNode(nodeId, needPseudo, needInherited, callback.bind(null, userCallback));
     },
 
     /**
      * @param {DOMAgent.NodeId} nodeId
-     * @param {?Array.<string>|undefined} forcedPseudoClasses
      * @param {function(?WebInspector.CSSStyleDeclaration)} userCallback
      */
-    getComputedStyleAsync: function(nodeId, forcedPseudoClasses, userCallback)
+    getComputedStyleAsync: function(nodeId, userCallback)
     {
         /**
          * @param {function(?WebInspector.CSSStyleDeclaration)} userCallback
@@ -136,7 +134,7 @@
                 userCallback(WebInspector.CSSStyleDeclaration.parseComputedStylePayload(computedPayload));
         }
 
-        CSSAgent.getComputedStyleForNode(nodeId, forcedPseudoClasses || [], callback.bind(null, userCallback));
+        CSSAgent.getComputedStyleForNode(nodeId, callback.bind(null, userCallback));
     },
 
     /**
@@ -164,6 +162,16 @@
 
     /**
      * @param {DOMAgent.NodeId} nodeId
+     * @param {?Array.<string>|undefined} forcedPseudoClasses
+     * @param {function()=} userCallback
+     */
+    forcePseudoState: function(nodeId, forcedPseudoClasses, userCallback)
+    {
+        CSSAgent.forcePseudoState(nodeId, forcedPseudoClasses || [], userCallback);
+    },
+
+    /**
+     * @param {DOMAgent.NodeId} nodeId
      * @param {function(?Array.<WebInspector.NamedFlow>)} userCallback
      */
     getNamedFlowCollectionAsync: function(nodeId, userCallback)

Modified: trunk/Source/WebCore/inspector/front-end/ElementsPanel.js (125398 => 125399)


--- trunk/Source/WebCore/inspector/front-end/ElementsPanel.js	2012-08-13 08:26:15 UTC (rev 125398)
+++ trunk/Source/WebCore/inspector/front-end/ElementsPanel.js	2012-08-13 09:06:15 UTC (rev 125399)
@@ -177,22 +177,23 @@
         if (!node)
             return;
 
-        var pseudoClasses = node.getUserProperty("pseudoState");
+        var pseudoClasses = node.getUserProperty(WebInspector.ElementsTreeOutline.PseudoStateDecorator.PropertyName);
         if (enable) {
             pseudoClasses = pseudoClasses || [];
             if (pseudoClasses.indexOf(pseudoClass) >= 0)
                 return;
             pseudoClasses.push(pseudoClass);
-            node.setUserProperty("pseudoState", pseudoClasses);
+            node.setUserProperty(WebInspector.ElementsTreeOutline.PseudoStateDecorator.PropertyName, pseudoClasses);
         } else {
             if (!pseudoClasses || pseudoClasses.indexOf(pseudoClass) < 0)
                 return;
             pseudoClasses.remove(pseudoClass);
             if (!pseudoClasses.length)
-                node.removeUserProperty("pseudoState");
+                node.removeUserProperty(WebInspector.ElementsTreeOutline.PseudoStateDecorator.PropertyName);
         }
 
         this.treeOutline.updateOpenCloseTags(node);
+        WebInspector.cssModel.forcePseudoState(node.id, node.getUserProperty(WebInspector.ElementsTreeOutline.PseudoStateDecorator.PropertyName));
         this._metricsPaneEdited();
         this._stylesPaneEdited();
     },

Modified: trunk/Source/WebCore/inspector/front-end/MetricsSidebarPane.js (125398 => 125399)


--- trunk/Source/WebCore/inspector/front-end/MetricsSidebarPane.js	2012-08-13 08:26:15 UTC (rev 125398)
+++ trunk/Source/WebCore/inspector/front-end/MetricsSidebarPane.js	2012-08-13 09:06:15 UTC (rev 125399)
@@ -72,7 +72,7 @@
                 return;
             this._updateMetrics(style);
         }
-        WebInspector.cssModel.getComputedStyleAsync(node.id, WebInspector.panels.elements.sidebarPanes.styles.forcedPseudoClasses, callback.bind(this));
+        WebInspector.cssModel.getComputedStyleAsync(node.id, callback.bind(this));
 
         function inlineStyleCallback(style)
         {

Modified: trunk/Source/WebCore/inspector/front-end/StylesSidebarPane.js (125398 => 125399)


--- trunk/Source/WebCore/inspector/front-end/StylesSidebarPane.js	2012-08-13 08:26:15 UTC (rev 125398)
+++ trunk/Source/WebCore/inspector/front-end/StylesSidebarPane.js	2012-08-13 09:06:15 UTC (rev 125399)
@@ -150,7 +150,7 @@
             contextMenu.show(event);
     },
 
-    get forcedPseudoClasses()
+    get _forcedPseudoClasses()
     {
         return this.node ? (this.node.getUserProperty("pseudoState") || undefined) : undefined;
     },
@@ -160,7 +160,7 @@
         if (!this.node)
             return;
 
-        var nodePseudoState = this.forcedPseudoClasses;
+        var nodePseudoState = this._forcedPseudoClasses;
         if (!nodePseudoState)
             nodePseudoState = [];
 
@@ -236,7 +236,7 @@
 
         if (this._computedStylePane.expanded || forceFetchComputedStyle) {
             this._refreshUpdateInProgress = true;
-            WebInspector.cssModel.getComputedStyleAsync(node.id, this.forcedPseudoClasses, computedStyleCallback.bind(this));
+            WebInspector.cssModel.getComputedStyleAsync(node.id, computedStyleCallback.bind(this));
         } else {
             this._innerRefreshUpdate(node, null, editedSection);
             if (userCallback)
@@ -294,9 +294,9 @@
         }
 
         if (this._computedStylePane.expanded)
-            WebInspector.cssModel.getComputedStyleAsync(node.id, this.forcedPseudoClasses, computedCallback.bind(this));
+            WebInspector.cssModel.getComputedStyleAsync(node.id, computedCallback.bind(this));
         WebInspector.cssModel.getInlineStylesAsync(node.id, inlineCallback.bind(this));
-        WebInspector.cssModel.getMatchedStylesAsync(node.id, this.forcedPseudoClasses, true, true, stylesCallback.bind(this));
+        WebInspector.cssModel.getMatchedStylesAsync(node.id, true, true, stylesCallback.bind(this));
     },
 
     /**
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to