Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(457)

Unified Diff: third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp

Issue 1577723002: Devtools: Add editable keyframes to the styles sidebar pane (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 e49567e8c600c24c9ee25e5cadec956b711fd187..2c08955b6cce97d7d5f455be1cefdd2d108aa1e4 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorCSSAgent.cpp
@@ -371,7 +371,8 @@ public:
enum Type {
SetRuleSelector,
SetStyleText,
- SetMediaRuleText
+ SetMediaRuleText,
+ SetKeyframeKey
};
ModifyRuleAction(Type type, InspectorStyleSheet* styleSheet, const SourceRange& range, const String& text)
@@ -398,6 +399,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();
}
@@ -416,6 +419,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();
}
@@ -986,8 +992,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);
@@ -1183,6 +1191,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;
@@ -1720,19 +1758,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())

Powered by Google App Engine
This is Rietveld 408576698