Chromium Code Reviews| 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; |