Index: Source/core/inspector/InspectorCSSAgent.cpp |
diff --git a/Source/core/inspector/InspectorCSSAgent.cpp b/Source/core/inspector/InspectorCSSAgent.cpp |
index 2d18ad58ca26b5b471aa29937c595664a74622c3..3c769c3333c02d2f52bdfae2ba2d9b35b807f2dc 100644 |
--- a/Source/core/inspector/InspectorCSSAgent.cpp |
+++ b/Source/core/inspector/InspectorCSSAgent.cpp |
@@ -30,6 +30,12 @@ |
#include "core/CSSPropertyNames.h" |
#include "core/InspectorTypeBuilder.h" |
#include "core/StylePropertyShorthand.h" |
+#include "core/animation/Animation.h" |
+#include "core/animation/AnimationEffect.h" |
+#include "core/animation/AnimationNode.h" |
+#include "core/animation/AnimationPlayer.h" |
+#include "core/animation/ElementAnimation.h" |
+#include "core/animation/KeyframeEffectModel.h" |
#include "core/css/CSSComputedStyleDeclaration.h" |
#include "core/css/CSSDefaultStyleSheets.h" |
#include "core/css/CSSImportRule.h" |
@@ -66,6 +72,7 @@ |
#include "core/rendering/RenderObjectInlines.h" |
#include "core/rendering/RenderText.h" |
#include "core/rendering/RenderTextFragment.h" |
+#include "platform/Decimal.h" |
#include "platform/fonts/Font.h" |
#include "platform/fonts/GlyphBuffer.h" |
#include "platform/fonts/SimpleShaper.h" |
@@ -832,6 +839,54 @@ void InspectorCSSAgent::setStyleSheetText(ErrorString* errorString, const String |
*errorString = InspectorDOMAgent::toErrorString(exceptionState); |
} |
+void InspectorCSSAgent::getKeyframeStylesForNode(ErrorString* errorString, int sequenceNumber, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSRule> >& keyframeStyles) |
+{ |
+ keyframeStyles = TypeBuilder::Array<TypeBuilder::CSS::CSSRule>::create(); |
+ AnimationPlayer& player = *(m_domAgent->m_idToAnimationPlayer.get(sequenceNumber)); |
caseq
2014/10/02 09:48:01
You can't expect client to provide a valid id, ple
samli
2014/10/03 06:05:04
Done.
|
+ ASSERT(player.source()); |
+ // FIXME: Needs to consider AnimationGroup once added. |
+ ASSERT(player.source()->isAnimation()); |
+ const Animation& animation = *toAnimation(player.source()); |
+ // FIXME: Needs to consider custom effects once added. |
+ ASSERT(animation.effect()->isKeyframeEffectModel()); |
+ const KeyframeEffectModelBase& effect = *toKeyframeEffectModelBase(animation.effect()); |
+ WillBeHeapVector<RefPtrWillBeMember<Keyframe> > keyframes = KeyframeEffectModelBase::normalizedKeyframes(effect.getFrames()); |
+ |
+ for (WillBeHeapVector<RefPtrWillBeMember<Keyframe> >::const_iterator i = keyframes.begin(); i != keyframes.end(); ++i) { |
+ if (i->get()->isStringKeyframe()) { |
caseq
2014/10/02 09:48:01
nit: we prefer early bail-out, i.e:
if (!i->get()
samli
2014/10/03 06:05:04
Done.
|
+ // Convert keyframe into CSSStyleRule |
+ const StringKeyframe& stringKeyframe = *toStringKeyframe(i->get()); |
+ RefPtr<StyleRule> styleRule = StyleRule::create(); |
+ styleRule->setProperties(stringKeyframe.propertySet()); |
+ if (!m_inspectorUserAgentStyleSheet) |
+ m_inspectorUserAgentStyleSheet = CSSStyleSheet::create(CSSDefaultStyleSheets::instance().defaultStyleSheet()); |
+ RefPtr<CSSStyleRule> cssStyleRule = CSSStyleRule::create(styleRule.get(), m_inspectorUserAgentStyleSheet.get()); |
+ |
+ // Convert offset |
+ Decimal decimal = Decimal::fromDouble(stringKeyframe.offset() * 100); |
+ String offset = decimal.toString(); |
+ offset.append("%"); |
caseq
2014/10/02 09:48:01
unused?
samli
2014/10/03 06:05:04
It's used below in the selector text. 873
This all
|
+ |
+ // Cannot set selector directly since isn't a valid selector and will be discarded |
+ // Construct CSSRule from scratch |
+ RefPtr<TypeBuilder::Array<TypeBuilder::CSS::Selector> > selectors = TypeBuilder::Array<TypeBuilder::CSS::Selector>::create(); |
+ selectors->addItem(TypeBuilder::CSS::Selector::create().setValue(offset).release()); |
+ RefPtr<TypeBuilder::CSS::SelectorList> selectorList = TypeBuilder::CSS::SelectorList::create() |
+ .setSelectors(selectors) |
+ .setText("") |
+ .release(); |
+ |
+ RefPtr<TypeBuilder::CSS::CSSRule> cssRule = TypeBuilder::CSS::CSSRule::create() |
+ .setSelectorList(selectorList) |
+ .setOrigin(TypeBuilder::CSS::StyleSheetOrigin::Inspector) |
+ .setStyle(bindStyleSheet(cssStyleRule->parentStyleSheet())->buildObjectForStyle(cssStyleRule->style())) |
+ .release(); |
+ |
+ keyframeStyles->addItem(cssRule); |
+ } |
+ } |
+} |
+ |
static bool extractRangeComponent(ErrorString* errorString, const RefPtr<JSONObject>& range, const String& component, unsigned& result) |
{ |
int parsedValue = 0; |