| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/animation/KeyframeEffect.h" | 5 #include "core/animation/KeyframeEffect.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/Dictionary.h" | 7 #include "bindings/core/v8/Dictionary.h" |
| 8 #include "bindings/core/v8/EffectModelOrDictionarySequenceOrDictionary.h" | 8 #include "bindings/core/v8/EffectModelOrDictionarySequenceOrDictionary.h" |
| 9 #include "bindings/core/v8/V8BindingForTesting.h" | 9 #include "bindings/core/v8/V8BindingForTesting.h" |
| 10 #include "bindings/core/v8/V8KeyframeEffectOptions.h" | 10 #include "bindings/core/v8/V8KeyframeEffectOptions.h" |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 Document& document() const { return pageHolder->document(); } | 37 Document& document() const { return pageHolder->document(); } |
| 38 | 38 |
| 39 std::unique_ptr<DummyPageHolder> pageHolder; | 39 std::unique_ptr<DummyPageHolder> pageHolder; |
| 40 Persistent<Element> element; | 40 Persistent<Element> element; |
| 41 TrackExceptionState exceptionState; | 41 TrackExceptionState exceptionState; |
| 42 }; | 42 }; |
| 43 | 43 |
| 44 class AnimationKeyframeEffectV8Test : public KeyframeEffectTest { | 44 class AnimationKeyframeEffectV8Test : public KeyframeEffectTest { |
| 45 protected: | 45 protected: |
| 46 template<typename T> | 46 template<typename T> |
| 47 static KeyframeEffect* createAnimation(Element* element, Vector<Dictionary>
keyframeDictionaryVector, T timingInput, ExceptionState& exceptionState) | 47 static KeyframeEffect* createAnimation(Document& document, Element* element,
Vector<Dictionary> keyframeDictionaryVector, T timingInput, ExceptionState& exc
eptionState) |
| 48 { | 48 { |
| 49 return KeyframeEffect::create(nullptr, element, EffectModelOrDictionaryS
equenceOrDictionary::fromDictionarySequence(keyframeDictionaryVector), timingInp
ut, exceptionState); | 49 return KeyframeEffect::create(&document, element, EffectModelOrDictionar
ySequenceOrDictionary::fromDictionarySequence(keyframeDictionaryVector), timingI
nput, exceptionState); |
| 50 } | 50 } |
| 51 static KeyframeEffect* createAnimation(Element* element, Vector<Dictionary>
keyframeDictionaryVector, ExceptionState& exceptionState) | 51 static KeyframeEffect* createAnimation(Document& document, Element* element,
Vector<Dictionary> keyframeDictionaryVector, ExceptionState& exceptionState) |
| 52 { | 52 { |
| 53 return KeyframeEffect::create(nullptr, element, EffectModelOrDictionaryS
equenceOrDictionary::fromDictionarySequence(keyframeDictionaryVector), exception
State); | 53 return KeyframeEffect::create(&document, element, EffectModelOrDictionar
ySequenceOrDictionary::fromDictionarySequence(keyframeDictionaryVector), excepti
onState); |
| 54 } | 54 } |
| 55 }; | 55 }; |
| 56 | 56 |
| 57 TEST_F(AnimationKeyframeEffectV8Test, CanCreateAnAnimation) | 57 TEST_F(AnimationKeyframeEffectV8Test, CanCreateAnAnimation) |
| 58 { | 58 { |
| 59 V8TestingScope scope; | 59 V8TestingScope scope; |
| 60 Vector<Dictionary> jsKeyframes; | 60 Vector<Dictionary> jsKeyframes; |
| 61 v8::Local<v8::Object> keyframe1 = v8::Object::New(scope.isolate()); | 61 v8::Local<v8::Object> keyframe1 = v8::Object::New(scope.isolate()); |
| 62 v8::Local<v8::Object> keyframe2 = v8::Object::New(scope.isolate()); | 62 v8::Local<v8::Object> keyframe2 = v8::Object::New(scope.isolate()); |
| 63 | 63 |
| 64 setV8ObjectPropertyAsString(scope.isolate(), keyframe1, "width", "100px"); | 64 setV8ObjectPropertyAsString(scope.isolate(), keyframe1, "width", "100px"); |
| 65 setV8ObjectPropertyAsString(scope.isolate(), keyframe1, "offset", "0"); | 65 setV8ObjectPropertyAsString(scope.isolate(), keyframe1, "offset", "0"); |
| 66 setV8ObjectPropertyAsString(scope.isolate(), keyframe1, "easing", "ease-in-o
ut"); | 66 setV8ObjectPropertyAsString(scope.isolate(), keyframe1, "easing", "ease-in-o
ut"); |
| 67 setV8ObjectPropertyAsString(scope.isolate(), keyframe2, "width", "0px"); | 67 setV8ObjectPropertyAsString(scope.isolate(), keyframe2, "width", "0px"); |
| 68 setV8ObjectPropertyAsString(scope.isolate(), keyframe2, "offset", "1"); | 68 setV8ObjectPropertyAsString(scope.isolate(), keyframe2, "offset", "1"); |
| 69 setV8ObjectPropertyAsString(scope.isolate(), keyframe2, "easing", "cubic-bez
ier(1, 1, 0.3, 0.3)"); | 69 setV8ObjectPropertyAsString(scope.isolate(), keyframe2, "easing", "cubic-bez
ier(1, 1, 0.3, 0.3)"); |
| 70 | 70 |
| 71 jsKeyframes.append(Dictionary(keyframe1, scope.isolate(), exceptionState)); | 71 jsKeyframes.append(Dictionary(keyframe1, scope.isolate(), exceptionState)); |
| 72 jsKeyframes.append(Dictionary(keyframe2, scope.isolate(), exceptionState)); | 72 jsKeyframes.append(Dictionary(keyframe2, scope.isolate(), exceptionState)); |
| 73 | 73 |
| 74 String value1; | 74 String value1; |
| 75 ASSERT_TRUE(DictionaryHelper::get(jsKeyframes[0], "width", value1)); | 75 ASSERT_TRUE(DictionaryHelper::get(jsKeyframes[0], "width", value1)); |
| 76 ASSERT_EQ("100px", value1); | 76 ASSERT_EQ("100px", value1); |
| 77 | 77 |
| 78 String value2; | 78 String value2; |
| 79 ASSERT_TRUE(DictionaryHelper::get(jsKeyframes[1], "width", value2)); | 79 ASSERT_TRUE(DictionaryHelper::get(jsKeyframes[1], "width", value2)); |
| 80 ASSERT_EQ("0px", value2); | 80 ASSERT_EQ("0px", value2); |
| 81 | 81 |
| 82 KeyframeEffect* animation = createAnimation(element.get(), jsKeyframes, 0, e
xceptionState); | 82 KeyframeEffect* animation = createAnimation(document(), element.get(), jsKey
frames, 0, exceptionState); |
| 83 | 83 |
| 84 Element* target = animation->target(); | 84 Element* target = animation->target(); |
| 85 EXPECT_EQ(*element.get(), *target); | 85 EXPECT_EQ(*element.get(), *target); |
| 86 | 86 |
| 87 const KeyframeVector keyframes = toKeyframeEffectModelBase(animation->model(
))->getFrames(); | 87 const KeyframeVector keyframes = toKeyframeEffectModelBase(animation->model(
))->getFrames(); |
| 88 | 88 |
| 89 EXPECT_EQ(0, keyframes[0]->offset()); | 89 EXPECT_EQ(0, keyframes[0]->offset()); |
| 90 EXPECT_EQ(1, keyframes[1]->offset()); | 90 EXPECT_EQ(1, keyframes[1]->offset()); |
| 91 | 91 |
| 92 const CSSValue* keyframe1Width = toStringKeyframe(keyframes[0].get())->cssPr
opertyValue(CSSPropertyWidth); | 92 const CSSValue* keyframe1Width = toStringKeyframe(keyframes[0].get())->cssPr
opertyValue(CSSPropertyWidth); |
| 93 const CSSValue* keyframe2Width = toStringKeyframe(keyframes[1].get())->cssPr
opertyValue(CSSPropertyWidth); | 93 const CSSValue* keyframe2Width = toStringKeyframe(keyframes[1].get())->cssPr
opertyValue(CSSPropertyWidth); |
| 94 ASSERT(keyframe1Width); | 94 ASSERT(keyframe1Width); |
| 95 ASSERT(keyframe2Width); | 95 ASSERT(keyframe2Width); |
| 96 | 96 |
| 97 EXPECT_EQ("100px", keyframe1Width->cssText()); | 97 EXPECT_EQ("100px", keyframe1Width->cssText()); |
| 98 EXPECT_EQ("0px", keyframe2Width->cssText()); | 98 EXPECT_EQ("0px", keyframe2Width->cssText()); |
| 99 | 99 |
| 100 EXPECT_EQ(*(CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Eas
eType::EASE_IN_OUT)), keyframes[0]->easing()); | 100 EXPECT_EQ(*(CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Eas
eType::EASE_IN_OUT)), keyframes[0]->easing()); |
| 101 EXPECT_EQ(*(CubicBezierTimingFunction::create(1, 1, 0.3, 0.3).get()), keyfra
mes[1]->easing()); | 101 EXPECT_EQ(*(CubicBezierTimingFunction::create(1, 1, 0.3, 0.3).get()), keyfra
mes[1]->easing()); |
| 102 } | 102 } |
| 103 | 103 |
| 104 TEST_F(AnimationKeyframeEffectV8Test, CanSetDuration) | 104 TEST_F(AnimationKeyframeEffectV8Test, CanSetDuration) |
| 105 { | 105 { |
| 106 Vector<Dictionary, 0> jsKeyframes; | 106 Vector<Dictionary, 0> jsKeyframes; |
| 107 double duration = 2000; | 107 double duration = 2000; |
| 108 | 108 |
| 109 KeyframeEffect* animation = createAnimation(element.get(), jsKeyframes, dura
tion, exceptionState); | 109 KeyframeEffect* animation = createAnimation(document(), element.get(), jsKey
frames, duration, exceptionState); |
| 110 | 110 |
| 111 EXPECT_EQ(duration / 1000, animation->specifiedTiming().iterationDuration); | 111 EXPECT_EQ(duration / 1000, animation->specifiedTiming().iterationDuration); |
| 112 } | 112 } |
| 113 | 113 |
| 114 TEST_F(AnimationKeyframeEffectV8Test, CanOmitSpecifiedDuration) | 114 TEST_F(AnimationKeyframeEffectV8Test, CanOmitSpecifiedDuration) |
| 115 { | 115 { |
| 116 Vector<Dictionary, 0> jsKeyframes; | 116 Vector<Dictionary, 0> jsKeyframes; |
| 117 KeyframeEffect* animation = createAnimation(element.get(), jsKeyframes, exce
ptionState); | 117 KeyframeEffect* animation = createAnimation(document(), element.get(), jsKey
frames, exceptionState); |
| 118 EXPECT_TRUE(std::isnan(animation->specifiedTiming().iterationDuration)); | 118 EXPECT_TRUE(std::isnan(animation->specifiedTiming().iterationDuration)); |
| 119 } | 119 } |
| 120 | 120 |
| 121 TEST_F(AnimationKeyframeEffectV8Test, SpecifiedGetters) | 121 TEST_F(AnimationKeyframeEffectV8Test, SpecifiedGetters) |
| 122 { | 122 { |
| 123 V8TestingScope scope; | 123 V8TestingScope scope; |
| 124 Vector<Dictionary, 0> jsKeyframes; | 124 Vector<Dictionary, 0> jsKeyframes; |
| 125 | 125 |
| 126 v8::Local<v8::Object> timingInput = v8::Object::New(scope.isolate()); | 126 v8::Local<v8::Object> timingInput = v8::Object::New(scope.isolate()); |
| 127 setV8ObjectPropertyAsNumber(scope.isolate(), timingInput, "delay", 2); | 127 setV8ObjectPropertyAsNumber(scope.isolate(), timingInput, "delay", 2); |
| 128 setV8ObjectPropertyAsNumber(scope.isolate(), timingInput, "endDelay", 0.5); | 128 setV8ObjectPropertyAsNumber(scope.isolate(), timingInput, "endDelay", 0.5); |
| 129 setV8ObjectPropertyAsString(scope.isolate(), timingInput, "fill", "backwards
"); | 129 setV8ObjectPropertyAsString(scope.isolate(), timingInput, "fill", "backwards
"); |
| 130 setV8ObjectPropertyAsNumber(scope.isolate(), timingInput, "iterationStart",
2); | 130 setV8ObjectPropertyAsNumber(scope.isolate(), timingInput, "iterationStart",
2); |
| 131 setV8ObjectPropertyAsNumber(scope.isolate(), timingInput, "iterations", 10); | 131 setV8ObjectPropertyAsNumber(scope.isolate(), timingInput, "iterations", 10); |
| 132 setV8ObjectPropertyAsNumber(scope.isolate(), timingInput, "playbackRate", 2)
; | 132 setV8ObjectPropertyAsNumber(scope.isolate(), timingInput, "playbackRate", 2)
; |
| 133 setV8ObjectPropertyAsString(scope.isolate(), timingInput, "direction", "reve
rse"); | 133 setV8ObjectPropertyAsString(scope.isolate(), timingInput, "direction", "reve
rse"); |
| 134 setV8ObjectPropertyAsString(scope.isolate(), timingInput, "easing", "step-st
art"); | 134 setV8ObjectPropertyAsString(scope.isolate(), timingInput, "easing", "step-st
art"); |
| 135 KeyframeEffectOptions timingInputDictionary; | 135 KeyframeEffectOptions timingInputDictionary; |
| 136 V8KeyframeEffectOptions::toImpl(scope.isolate(), timingInput, timingInputDic
tionary, exceptionState); | 136 V8KeyframeEffectOptions::toImpl(scope.isolate(), timingInput, timingInputDic
tionary, exceptionState); |
| 137 | 137 |
| 138 KeyframeEffect* animation = createAnimation(element.get(), jsKeyframes, timi
ngInputDictionary, exceptionState); | 138 KeyframeEffect* animation = createAnimation(document(), element.get(), jsKey
frames, timingInputDictionary, exceptionState); |
| 139 | 139 |
| 140 AnimationEffectTiming* specified = animation->timing(); | 140 AnimationEffectTiming* specified = animation->timing(); |
| 141 EXPECT_EQ(2, specified->delay()); | 141 EXPECT_EQ(2, specified->delay()); |
| 142 EXPECT_EQ(0.5, specified->endDelay()); | 142 EXPECT_EQ(0.5, specified->endDelay()); |
| 143 EXPECT_EQ("backwards", specified->fill()); | 143 EXPECT_EQ("backwards", specified->fill()); |
| 144 EXPECT_EQ(2, specified->iterationStart()); | 144 EXPECT_EQ(2, specified->iterationStart()); |
| 145 EXPECT_EQ(10, specified->iterations()); | 145 EXPECT_EQ(10, specified->iterations()); |
| 146 EXPECT_EQ(2, specified->playbackRate()); | 146 EXPECT_EQ(2, specified->playbackRate()); |
| 147 EXPECT_EQ("reverse", specified->direction()); | 147 EXPECT_EQ("reverse", specified->direction()); |
| 148 EXPECT_EQ("step-start", specified->easing()); | 148 EXPECT_EQ("step-start", specified->easing()); |
| 149 } | 149 } |
| 150 | 150 |
| 151 TEST_F(AnimationKeyframeEffectV8Test, SpecifiedDurationGetter) | 151 TEST_F(AnimationKeyframeEffectV8Test, SpecifiedDurationGetter) |
| 152 { | 152 { |
| 153 V8TestingScope scope; | 153 V8TestingScope scope; |
| 154 Vector<Dictionary, 0> jsKeyframes; | 154 Vector<Dictionary, 0> jsKeyframes; |
| 155 | 155 |
| 156 v8::Local<v8::Object> timingInputWithDuration = v8::Object::New(scope.isolat
e()); | 156 v8::Local<v8::Object> timingInputWithDuration = v8::Object::New(scope.isolat
e()); |
| 157 setV8ObjectPropertyAsNumber(scope.isolate(), timingInputWithDuration, "durat
ion", 2.5); | 157 setV8ObjectPropertyAsNumber(scope.isolate(), timingInputWithDuration, "durat
ion", 2.5); |
| 158 KeyframeEffectOptions timingInputDictionaryWithDuration; | 158 KeyframeEffectOptions timingInputDictionaryWithDuration; |
| 159 V8KeyframeEffectOptions::toImpl(scope.isolate(), timingInputWithDuration, ti
mingInputDictionaryWithDuration, exceptionState); | 159 V8KeyframeEffectOptions::toImpl(scope.isolate(), timingInputWithDuration, ti
mingInputDictionaryWithDuration, exceptionState); |
| 160 | 160 |
| 161 KeyframeEffect* animationWithDuration = createAnimation(element.get(), jsKey
frames, timingInputDictionaryWithDuration, exceptionState); | 161 KeyframeEffect* animationWithDuration = createAnimation(document(), element.
get(), jsKeyframes, timingInputDictionaryWithDuration, exceptionState); |
| 162 | 162 |
| 163 AnimationEffectTiming* specifiedWithDuration = animationWithDuration->timing
(); | 163 AnimationEffectTiming* specifiedWithDuration = animationWithDuration->timing
(); |
| 164 UnrestrictedDoubleOrString duration; | 164 UnrestrictedDoubleOrString duration; |
| 165 specifiedWithDuration->duration(duration); | 165 specifiedWithDuration->duration(duration); |
| 166 EXPECT_TRUE(duration.isUnrestrictedDouble()); | 166 EXPECT_TRUE(duration.isUnrestrictedDouble()); |
| 167 EXPECT_EQ(2.5, duration.getAsUnrestrictedDouble()); | 167 EXPECT_EQ(2.5, duration.getAsUnrestrictedDouble()); |
| 168 EXPECT_FALSE(duration.isString()); | 168 EXPECT_FALSE(duration.isString()); |
| 169 | 169 |
| 170 | 170 |
| 171 v8::Local<v8::Object> timingInputNoDuration = v8::Object::New(scope.isolate(
)); | 171 v8::Local<v8::Object> timingInputNoDuration = v8::Object::New(scope.isolate(
)); |
| 172 KeyframeEffectOptions timingInputDictionaryNoDuration; | 172 KeyframeEffectOptions timingInputDictionaryNoDuration; |
| 173 V8KeyframeEffectOptions::toImpl(scope.isolate(), timingInputNoDuration, timi
ngInputDictionaryNoDuration, exceptionState); | 173 V8KeyframeEffectOptions::toImpl(scope.isolate(), timingInputNoDuration, timi
ngInputDictionaryNoDuration, exceptionState); |
| 174 | 174 |
| 175 KeyframeEffect* animationNoDuration = createAnimation(element.get(), jsKeyfr
ames, timingInputDictionaryNoDuration, exceptionState); | 175 KeyframeEffect* animationNoDuration = createAnimation(document(), element.ge
t(), jsKeyframes, timingInputDictionaryNoDuration, exceptionState); |
| 176 | 176 |
| 177 AnimationEffectTiming* specifiedNoDuration = animationNoDuration->timing(); | 177 AnimationEffectTiming* specifiedNoDuration = animationNoDuration->timing(); |
| 178 UnrestrictedDoubleOrString duration2; | 178 UnrestrictedDoubleOrString duration2; |
| 179 specifiedNoDuration->duration(duration2); | 179 specifiedNoDuration->duration(duration2); |
| 180 EXPECT_FALSE(duration2.isUnrestrictedDouble()); | 180 EXPECT_FALSE(duration2.isUnrestrictedDouble()); |
| 181 EXPECT_TRUE(duration2.isString()); | 181 EXPECT_TRUE(duration2.isString()); |
| 182 EXPECT_EQ("auto", duration2.getAsString()); | 182 EXPECT_EQ("auto", duration2.getAsString()); |
| 183 } | 183 } |
| 184 | 184 |
| 185 TEST_F(AnimationKeyframeEffectV8Test, SpecifiedSetters) | 185 TEST_F(AnimationKeyframeEffectV8Test, SpecifiedSetters) |
| 186 { | 186 { |
| 187 V8TestingScope scope; | 187 V8TestingScope scope; |
| 188 Vector<Dictionary, 0> jsKeyframes; | 188 Vector<Dictionary, 0> jsKeyframes; |
| 189 v8::Local<v8::Object> timingInput = v8::Object::New(scope.isolate()); | 189 v8::Local<v8::Object> timingInput = v8::Object::New(scope.isolate()); |
| 190 KeyframeEffectOptions timingInputDictionary; | 190 KeyframeEffectOptions timingInputDictionary; |
| 191 V8KeyframeEffectOptions::toImpl(scope.isolate(), timingInput, timingInputDic
tionary, exceptionState); | 191 V8KeyframeEffectOptions::toImpl(scope.isolate(), timingInput, timingInputDic
tionary, exceptionState); |
| 192 KeyframeEffect* animation = createAnimation(element.get(), jsKeyframes, timi
ngInputDictionary, exceptionState); | 192 KeyframeEffect* animation = createAnimation(document(), element.get(), jsKey
frames, timingInputDictionary, exceptionState); |
| 193 | 193 |
| 194 AnimationEffectTiming* specified = animation->timing(); | 194 AnimationEffectTiming* specified = animation->timing(); |
| 195 | 195 |
| 196 EXPECT_EQ(0, specified->delay()); | 196 EXPECT_EQ(0, specified->delay()); |
| 197 specified->setDelay(2); | 197 specified->setDelay(2); |
| 198 EXPECT_EQ(2, specified->delay()); | 198 EXPECT_EQ(2, specified->delay()); |
| 199 | 199 |
| 200 EXPECT_EQ(0, specified->endDelay()); | 200 EXPECT_EQ(0, specified->endDelay()); |
| 201 specified->setEndDelay(0.5); | 201 specified->setEndDelay(0.5); |
| 202 EXPECT_EQ(0.5, specified->endDelay()); | 202 EXPECT_EQ(0.5, specified->endDelay()); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 217 | 217 |
| 218 EXPECT_EQ(1, specified->playbackRate()); | 218 EXPECT_EQ(1, specified->playbackRate()); |
| 219 specified->setPlaybackRate(2); | 219 specified->setPlaybackRate(2); |
| 220 EXPECT_EQ(2, specified->playbackRate()); | 220 EXPECT_EQ(2, specified->playbackRate()); |
| 221 | 221 |
| 222 EXPECT_EQ("normal", specified->direction()); | 222 EXPECT_EQ("normal", specified->direction()); |
| 223 specified->setDirection("reverse"); | 223 specified->setDirection("reverse"); |
| 224 EXPECT_EQ("reverse", specified->direction()); | 224 EXPECT_EQ("reverse", specified->direction()); |
| 225 | 225 |
| 226 EXPECT_EQ("linear", specified->easing()); | 226 EXPECT_EQ("linear", specified->easing()); |
| 227 specified->setEasing("step-start", exceptionState); | 227 specified->setEasing(&document(), "step-start", exceptionState); |
| 228 ASSERT_FALSE(exceptionState.hadException()); | 228 ASSERT_FALSE(exceptionState.hadException()); |
| 229 EXPECT_EQ("step-start", specified->easing()); | 229 EXPECT_EQ("step-start", specified->easing()); |
| 230 } | 230 } |
| 231 | 231 |
| 232 TEST_F(AnimationKeyframeEffectV8Test, SetSpecifiedDuration) | 232 TEST_F(AnimationKeyframeEffectV8Test, SetSpecifiedDuration) |
| 233 { | 233 { |
| 234 V8TestingScope scope; | 234 V8TestingScope scope; |
| 235 Vector<Dictionary, 0> jsKeyframes; | 235 Vector<Dictionary, 0> jsKeyframes; |
| 236 v8::Local<v8::Object> timingInput = v8::Object::New(scope.isolate()); | 236 v8::Local<v8::Object> timingInput = v8::Object::New(scope.isolate()); |
| 237 KeyframeEffectOptions timingInputDictionary; | 237 KeyframeEffectOptions timingInputDictionary; |
| 238 V8KeyframeEffectOptions::toImpl(scope.isolate(), timingInput, timingInputDic
tionary, exceptionState); | 238 V8KeyframeEffectOptions::toImpl(scope.isolate(), timingInput, timingInputDic
tionary, exceptionState); |
| 239 KeyframeEffect* animation = createAnimation(element.get(), jsKeyframes, timi
ngInputDictionary, exceptionState); | 239 KeyframeEffect* animation = createAnimation(document(), element.get(), jsKey
frames, timingInputDictionary, exceptionState); |
| 240 | 240 |
| 241 AnimationEffectTiming* specified = animation->timing(); | 241 AnimationEffectTiming* specified = animation->timing(); |
| 242 | 242 |
| 243 UnrestrictedDoubleOrString duration; | 243 UnrestrictedDoubleOrString duration; |
| 244 specified->duration(duration); | 244 specified->duration(duration); |
| 245 EXPECT_FALSE(duration.isUnrestrictedDouble()); | 245 EXPECT_FALSE(duration.isUnrestrictedDouble()); |
| 246 EXPECT_TRUE(duration.isString()); | 246 EXPECT_TRUE(duration.isString()); |
| 247 EXPECT_EQ("auto", duration.getAsString()); | 247 EXPECT_EQ("auto", duration.getAsString()); |
| 248 | 248 |
| 249 UnrestrictedDoubleOrString inDuration; | 249 UnrestrictedDoubleOrString inDuration; |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 361 Timing timing; | 361 Timing timing; |
| 362 timing.iterationDuration = 5; | 362 timing.iterationDuration = 5; |
| 363 KeyframeEffect* animation = KeyframeEffect::create(element.get(), nullptr, t
iming); | 363 KeyframeEffect* animation = KeyframeEffect::create(element.get(), nullptr, t
iming); |
| 364 EXPECT_EQ(element.get(), animation->target()); | 364 EXPECT_EQ(element.get(), animation->target()); |
| 365 document().timeline().play(animation); | 365 document().timeline().play(animation); |
| 366 pageHolder.reset(); | 366 pageHolder.reset(); |
| 367 element.clear(); | 367 element.clear(); |
| 368 } | 368 } |
| 369 | 369 |
| 370 } // namespace blink | 370 } // namespace blink |
| OLD | NEW |