| 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 3ef64c48df5a1d2ced864c86c082be72bec7a6ac..22694ea4f77536e26aced00fc4c7848c581023fa 100644
|
| --- a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp
|
| +++ b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp
|
| @@ -372,7 +372,8 @@ public:
|
| enum Type {
|
| SetRuleSelector,
|
| SetStyleText,
|
| - SetMediaRuleText
|
| + SetMediaRuleText,
|
| + SetKeyframeKey
|
| };
|
|
|
| ModifyRuleAction(Type type, InspectorStyleSheet* styleSheet, const SourceRange& range, const String& text)
|
| @@ -399,6 +400,8 @@ public:
|
| return m_styleSheet->setStyleText(m_newRange, m_oldText, nullptr, nullptr, exceptionState);
|
| case SetMediaRuleText:
|
| return m_styleSheet->setMediaRuleText(m_newRange, m_oldText, nullptr, nullptr, exceptionState);
|
| + case SetKeyframeKey:
|
| + return m_styleSheet->setKeyframeKey(m_newRange, m_oldText, nullptr, nullptr, exceptionState);
|
| default:
|
| ASSERT_NOT_REACHED();
|
| }
|
| @@ -417,6 +420,9 @@ public:
|
| case SetMediaRuleText:
|
| m_cssRule = m_styleSheet->setMediaRuleText(m_oldRange, m_newText, &m_newRange, &m_oldText, exceptionState);
|
| break;
|
| + case SetKeyframeKey:
|
| + m_cssRule = m_styleSheet->setKeyframeKey(m_oldRange, m_newText, &m_newRange, &m_oldText, exceptionState);
|
| + break;
|
| default:
|
| ASSERT_NOT_REACHED();
|
| }
|
| @@ -839,7 +845,7 @@ void InspectorCSSAgent::getMediaQueries(ErrorString* errorString, RefPtr<TypeBui
|
| }
|
| }
|
|
|
| -void InspectorCSSAgent::getMatchedStylesForNode(ErrorString* errorString, int nodeId, RefPtr<TypeBuilder::CSS::CSSStyle>& inlineStyle, RefPtr<TypeBuilder::CSS::CSSStyle>& attributesStyle, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::RuleMatch>>& matchedCSSRules, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::PseudoElementMatches>>& pseudoIdMatches, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::InheritedStyleEntry>>& inheritedEntries)
|
| +void InspectorCSSAgent::getMatchedStylesForNode(ErrorString* errorString, int nodeId, RefPtr<TypeBuilder::CSS::CSSStyle>& inlineStyle, RefPtr<TypeBuilder::CSS::CSSStyle>& attributesStyle, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::RuleMatch>>& matchedCSSRules, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::PseudoElementMatches>>& pseudoIdMatches, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::InheritedStyleEntry>>& inheritedEntries, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSKeyframesRule>>& cssKeyframesRules)
|
| {
|
| Element* element = elementForId(errorString, nodeId);
|
| if (!element) {
|
| @@ -915,6 +921,8 @@ void InspectorCSSAgent::getMatchedStylesForNode(ErrorString* errorString, int no
|
| parentElement = parentElement->parentOrShadowHostElement();
|
| }
|
| inheritedEntries = entries.release();
|
| +
|
| + cssKeyframesRules = animationsForNode(element);
|
| }
|
|
|
| template<class CSSRuleCollection>
|
| @@ -937,33 +945,15 @@ static CSSKeyframesRule* findKeyframesRule(CSSRuleCollection* cssRules, StyleRul
|
| return result;
|
| }
|
|
|
| -void InspectorCSSAgent::getCSSAnimationsForNode(ErrorString* errorString, int nodeId, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSKeyframesRule>>& cssKeyframesRules)
|
| +PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSKeyframesRule>> InspectorCSSAgent::animationsForNode(Element* element)
|
| {
|
| - 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;
|
| - }
|
| - }
|
| -
|
| - cssKeyframesRules = TypeBuilder::Array<TypeBuilder::CSS::CSSKeyframesRule>::create();
|
| + RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSKeyframesRule>> cssKeyframesRules = TypeBuilder::Array<TypeBuilder::CSS::CSSKeyframesRule>::create();
|
| Document* ownerDocument = element->ownerDocument();
|
| - // A non-active document has no styles.
|
| - if (!ownerDocument->isActive())
|
| - return;
|
|
|
| StyleResolver& styleResolver = ownerDocument->ensureStyleResolver();
|
| RefPtr<ComputedStyle> style = styleResolver.styleForElement(element);
|
| if (!style)
|
| - return;
|
| + return cssKeyframesRules;
|
| const CSSAnimationData* animationData = style->animations();
|
| for (size_t i = 0; animationData && i < animationData->nameList().size(); ++i) {
|
| AtomicString animationName(animationData->nameList()[i]);
|
| @@ -987,8 +977,10 @@ void InspectorCSSAgent::getCSSAnimationsForNode(ErrorString* errorString, int no
|
| continue;
|
|
|
| RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSKeyframeRule>> keyframes = TypeBuilder::Array<TypeBuilder::CSS::CSSKeyframeRule>::create();
|
| - for (unsigned j = 0; j < cssKeyframesRule->length(); ++j)
|
| - keyframes->addItem(buildObjectForKeyframeRule(cssKeyframesRule->item(j)));
|
| + for (unsigned j = 0; j < cssKeyframesRule->length(); ++j) {
|
| + InspectorStyleSheet* inspectorStyleSheet = bindStyleSheet(cssKeyframesRule->parentStyleSheet());
|
| + keyframes->addItem(inspectorStyleSheet->buildObjectForKeyframeRule(cssKeyframesRule->item(j)));
|
| + }
|
|
|
| InspectorStyleSheet* inspectorStyleSheet = bindStyleSheet(cssKeyframesRule->parentStyleSheet());
|
| RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = inspectorStyleSheet->sourceDataForRule(cssKeyframesRule);
|
| @@ -999,6 +991,7 @@ void InspectorCSSAgent::getCSSAnimationsForNode(ErrorString* errorString, int no
|
| .setKeyframes(keyframes);
|
| cssKeyframesRules->addItem(keyframesRuleObject);
|
| }
|
| + return cssKeyframesRules;
|
| }
|
|
|
| void InspectorCSSAgent::getInlineStylesForNode(ErrorString* errorString, int nodeId, RefPtr<TypeBuilder::CSS::CSSStyle>& inlineStyle, RefPtr<TypeBuilder::CSS::CSSStyle>& attributesStyle)
|
| @@ -1184,6 +1177,36 @@ void InspectorCSSAgent::setRuleSelector(ErrorString* errorString, const String&
|
| *errorString = InspectorDOMAgent::toErrorString(exceptionState);
|
| }
|
|
|
| +void InspectorCSSAgent::setKeyframeKey(ErrorString* errorString, const String& styleSheetId, const RefPtr<JSONObject>& range, const String& keyText, RefPtr<TypeBuilder::CSS::Value>& result)
|
| +{
|
| + FrontendOperationScope scope;
|
| + InspectorStyleSheet* inspectorStyleSheet = assertInspectorStyleSheetForId(errorString, styleSheetId);
|
| + if (!inspectorStyleSheet) {
|
| + *errorString = "Stylesheet not found";
|
| + return;
|
| + }
|
| + SourceRange keyRange;
|
| + if (!jsonRangeToSourceRange(errorString, inspectorStyleSheet, range, &keyRange))
|
| + return;
|
| +
|
| + TrackExceptionState exceptionState;
|
| + RefPtrWillBeRawPtr<ModifyRuleAction> action = adoptRefWillBeNoop(new ModifyRuleAction(ModifyRuleAction::SetKeyframeKey, inspectorStyleSheet, keyRange, keyText));
|
| + bool success = m_domAgent->history()->perform(action, exceptionState);
|
| + if (success) {
|
| + RefPtrWillBeRawPtr<CSSKeyframeRule> rule = toCSSKeyframeRule(action->takeRule().get());
|
| + InspectorStyleSheet* inspectorStyleSheet = bindStyleSheet(rule->parentStyleSheet());
|
| + if (!inspectorStyleSheet) {
|
| + *errorString = "Failed to get inspector style sheet for rule.";
|
| + return;
|
| + }
|
| +
|
| + RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = inspectorStyleSheet->sourceDataForRule(rule);
|
| + result = TypeBuilder::CSS::Value::create().setText(rule->keyText());
|
| + result->setRange(inspectorStyleSheet->buildSourceRangeObject(sourceData->ruleHeaderRange));
|
| + }
|
| + *errorString = InspectorDOMAgent::toErrorString(exceptionState);
|
| +}
|
| +
|
| void InspectorCSSAgent::setStyleText(ErrorString* errorString, const String& styleSheetId, const RefPtr<JSONObject>& range, const String& text, RefPtr<TypeBuilder::CSS::CSSStyle>& result)
|
| {
|
| FrontendOperationScope scope;
|
| @@ -1721,19 +1744,6 @@ PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::RuleMatch> > InspectorCSSAgent::
|
| return result;
|
| }
|
|
|
| -PassRefPtr<TypeBuilder::CSS::CSSKeyframeRule> InspectorCSSAgent::buildObjectForKeyframeRule(CSSKeyframeRule* keyframeRule)
|
| -{
|
| - InspectorStyleSheet* inspectorStyleSheet = bindStyleSheet(keyframeRule->parentStyleSheet());
|
| - RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = inspectorStyleSheet->sourceDataForRule(keyframeRule);
|
| - RefPtr<TypeBuilder::CSS::Value> keyText = TypeBuilder::CSS::Value::create().setText(keyframeRule->keyText());
|
| - keyText->setRange(inspectorStyleSheet->buildSourceRangeObject(sourceData->ruleHeaderRange));
|
| - RefPtr<TypeBuilder::CSS::CSSKeyframeRule> object = TypeBuilder::CSS::CSSKeyframeRule::create()
|
| - // TODO(samli): keyText() normalises 'from' and 'to' keyword values.
|
| - .setKeyText(keyText)
|
| - .setStyle(inspectorStyleSheet->buildObjectForStyle(keyframeRule->style()));
|
| - return object;
|
| -}
|
| -
|
| PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorCSSAgent::buildObjectForAttributesStyle(Element* element)
|
| {
|
| if (!element->isStyledElement())
|
|
|