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..f42b6df6084b050dff5eee54de36d2beef6d3bc5 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,58 @@ void InspectorCSSAgent::setStyleSheetText(ErrorString* errorString, const String |
| *errorString = InspectorDOMAgent::toErrorString(exceptionState); |
| } |
| +void InspectorCSSAgent::getKeyframeStylesForNode(ErrorString* errorString, const String& id, RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSRule> >& keyframeStyles) |
| +{ |
| + AnimationPlayer* player = m_domAgent->assertAnimationPlayer(errorString, id); |
| + if (!player) |
| + return; |
| + |
| + ASSERT(player->source()); |
|
vsevik
2014/10/06 16:00:54
Why do you ASSERT that source is not null? Looks l
samli
2014/10/07 05:25:43
Done.
|
| + // 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()); |
| + keyframeStyles = TypeBuilder::Array<TypeBuilder::CSS::CSSRule>::create(); |
|
vsevik
2014/10/06 16:00:54
This seems wrong. Not only you are abusing CSSRule
samli
2014/10/07 05:25:43
These keyframe styles are only shown for JS instan
|
| + |
| + for (WillBeHeapVector<RefPtrWillBeMember<Keyframe> >::const_iterator i = keyframes.begin(); i != keyframes.end(); ++i) { |
| + if (!i->get()->isStringKeyframe()) |
| + continue; |
| + |
| + // 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("%"); |
| + |
| + // Cannot set selector text directly since keyframe offset is not a valid |
| + // selector and will be discarded. Instead, 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; |