Index: third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp |
diff --git a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp |
index ae0346ac52cb820480b22e85061f3bb905b9bd67..ec442d14f4a7fb064bdb5c682c8c1513a67c63d0 100644 |
--- a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp |
+++ b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp |
@@ -33,6 +33,7 @@ |
#include "core/css/CSSComputedStyleDeclaration.h" |
#include "core/css/CSSDefaultStyleSheets.h" |
#include "core/css/CSSImportRule.h" |
+#include "core/css/CSSKeyframeRule.h" |
#include "core/css/CSSMediaRule.h" |
#include "core/css/CSSRule.h" |
#include "core/css/CSSRuleList.h" |
@@ -787,6 +788,33 @@ void InspectorCSSAgent::getMatchedStylesForNode(ErrorString* errorString, int no |
inheritedEntries = entries.release(); |
} |
+void InspectorCSSAgent::getCSSAnimationsForNode(ErrorString* errorString, int nodeId, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSKeyframesRule>>& cssKeyframesRules) |
+{ |
+ Element* element = elementForId(errorString, nodeId); |
+ if (!element) { |
+ *errorString = "Node not found"; |
+ return; |
+ } |
+ |
+ PseudoId elementPseudoId = element->pseudoId(); |
+ if (elementPseudoId) { |
+ element = element->parentOrShadowHostElement(); |
+ if (!element) { |
+ *errorString = "Pseudo element has no parent"; |
+ return; |
+ } |
+ } |
+ |
+ Document* ownerDocument = element->ownerDocument(); |
+ // A non-active document has no styles. |
+ if (!ownerDocument->isActive()) |
+ return; |
+ |
+ StyleResolver& styleResolver = ownerDocument->ensureStyleResolver(); |
+ RefPtrWillBeRawPtr<CSSRuleList> keyframesRules = styleResolver.keyframesRulesForElement(element); |
+ cssKeyframesRules = buildArrayForKeyframesRules(keyframesRules.get()); |
+} |
+ |
void InspectorCSSAgent::getInlineStylesForNode(ErrorString* errorString, int nodeId, RefPtr<TypeBuilder::CSS::CSSStyle>& inlineStyle, RefPtr<TypeBuilder::CSS::CSSStyle>& attributesStyle) |
{ |
Element* element = elementForId(errorString, nodeId); |
@@ -1482,6 +1510,36 @@ PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::RuleMatch> > InspectorCSSAgent:: |
return result; |
} |
+PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSKeyframesRule>> InspectorCSSAgent::buildArrayForKeyframesRules(CSSRuleList* ruleList) |
+{ |
+ RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSKeyframesRule>> result = TypeBuilder::Array<TypeBuilder::CSS::CSSKeyframesRule>::create(); |
+ if (!ruleList) |
+ return result.release(); |
+ |
+ // TODO(samli): Filter for unique animations. |
+ for (unsigned i = 0; i < ruleList->length(); ++i) { |
+ CSSKeyframesRule* rule = toCSSKeyframesRule(ruleList->item(i)); |
+ RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSKeyframeRule>> keyframes = TypeBuilder::Array<TypeBuilder::CSS::CSSKeyframeRule>::create(); |
+ for (unsigned j = 0; j < rule->length(); j++) |
lushnikov
2015/10/06 23:01:34
++j
samli
2015/10/08 17:37:31
Done.
|
+ keyframes->addItem(buildObjectForKeyframeRule(rule->item(j))); |
+ RefPtr<TypeBuilder::CSS::CSSKeyframesRule> keyframesRule = TypeBuilder::CSS::CSSKeyframesRule::create() |
+ .setName(rule->name()) |
+ .setKeyframes(keyframes); |
+ result->addItem(keyframesRule); |
+ } |
+ |
+ return result; |
+} |
+ |
+PassRefPtr<TypeBuilder::CSS::CSSKeyframeRule> InspectorCSSAgent::buildObjectForKeyframeRule(CSSKeyframeRule* keyframeRule) |
+{ |
+ RefPtrWillBeRawPtr<InspectorStyle> inspectorStyle = InspectorStyle::create(keyframeRule->style(), nullptr, nullptr); |
+ RefPtr<TypeBuilder::CSS::CSSKeyframeRule> object = TypeBuilder::CSS::CSSKeyframeRule::create() |
+ .setKeyText(keyframeRule->keyText()) |
+ .setStyle(inspectorStyle->buildObjectForStyle()); |
+ return object; |
+} |
+ |
PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorCSSAgent::buildObjectForAttributesStyle(Element* element) |
{ |
if (!element->isStyledElement()) |