| 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/DictionarySequenceOrDictionary.h" | 8 #include "bindings/core/v8/DictionarySequenceOrDictionary.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 20 matching lines...) Expand all Loading... |
| 31 | 31 |
| 32 document().animationClock().resetTimeForTesting(document().timeline().ze
roTime()); | 32 document().animationClock().resetTimeForTesting(document().timeline().ze
roTime()); |
| 33 document().documentElement()->appendChild(element.get()); | 33 document().documentElement()->appendChild(element.get()); |
| 34 EXPECT_EQ(0, document().timeline().currentTime()); | 34 EXPECT_EQ(0, document().timeline().currentTime()); |
| 35 } | 35 } |
| 36 | 36 |
| 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; | |
| 42 }; | 41 }; |
| 43 | 42 |
| 44 class AnimationKeyframeEffectV8Test : public KeyframeEffectTest { | 43 class AnimationKeyframeEffectV8Test : public KeyframeEffectTest { |
| 45 protected: | 44 protected: |
| 46 template<typename T> | 45 template<typename T> |
| 47 static KeyframeEffect* createAnimation(Element* element, Vector<Dictionary>
keyframeDictionaryVector, T timingInput, ExceptionState& exceptionState) | 46 static KeyframeEffect* createAnimation(Element* element, Vector<Dictionary>
keyframeDictionaryVector, T timingInput) |
| 48 { | 47 { |
| 48 NonThrowableExceptionState exceptionState; |
| 49 return KeyframeEffect::create(nullptr, element, DictionarySequenceOrDict
ionary::fromDictionarySequence(keyframeDictionaryVector), timingInput, exception
State); | 49 return KeyframeEffect::create(nullptr, element, DictionarySequenceOrDict
ionary::fromDictionarySequence(keyframeDictionaryVector), timingInput, exception
State); |
| 50 } | 50 } |
| 51 static KeyframeEffect* createAnimation(Element* element, Vector<Dictionary>
keyframeDictionaryVector, ExceptionState& exceptionState) | 51 static KeyframeEffect* createAnimation(Element* element, Vector<Dictionary>
keyframeDictionaryVector) |
| 52 { | 52 { |
| 53 NonThrowableExceptionState exceptionState; |
| 53 return KeyframeEffect::create(nullptr, element, DictionarySequenceOrDict
ionary::fromDictionarySequence(keyframeDictionaryVector), exceptionState); | 54 return KeyframeEffect::create(nullptr, element, DictionarySequenceOrDict
ionary::fromDictionarySequence(keyframeDictionaryVector), exceptionState); |
| 54 } | 55 } |
| 55 }; | 56 }; |
| 56 | 57 |
| 57 TEST_F(AnimationKeyframeEffectV8Test, CanCreateAnAnimation) | 58 TEST_F(AnimationKeyframeEffectV8Test, CanCreateAnAnimation) |
| 58 { | 59 { |
| 59 V8TestingScope scope; | 60 V8TestingScope scope; |
| 60 Vector<Dictionary> jsKeyframes; | 61 Vector<Dictionary> jsKeyframes; |
| 61 v8::Local<v8::Object> keyframe1 = v8::Object::New(scope.isolate()); | 62 v8::Local<v8::Object> keyframe1 = v8::Object::New(scope.isolate()); |
| 62 v8::Local<v8::Object> keyframe2 = v8::Object::New(scope.isolate()); | 63 v8::Local<v8::Object> keyframe2 = v8::Object::New(scope.isolate()); |
| 63 | 64 |
| 64 setV8ObjectPropertyAsString(scope.isolate(), keyframe1, "width", "100px"); | 65 setV8ObjectPropertyAsString(scope.isolate(), keyframe1, "width", "100px"); |
| 65 setV8ObjectPropertyAsString(scope.isolate(), keyframe1, "offset", "0"); | 66 setV8ObjectPropertyAsString(scope.isolate(), keyframe1, "offset", "0"); |
| 66 setV8ObjectPropertyAsString(scope.isolate(), keyframe1, "easing", "ease-in-o
ut"); | 67 setV8ObjectPropertyAsString(scope.isolate(), keyframe1, "easing", "ease-in-o
ut"); |
| 67 setV8ObjectPropertyAsString(scope.isolate(), keyframe2, "width", "0px"); | 68 setV8ObjectPropertyAsString(scope.isolate(), keyframe2, "width", "0px"); |
| 68 setV8ObjectPropertyAsString(scope.isolate(), keyframe2, "offset", "1"); | 69 setV8ObjectPropertyAsString(scope.isolate(), keyframe2, "offset", "1"); |
| 69 setV8ObjectPropertyAsString(scope.isolate(), keyframe2, "easing", "cubic-bez
ier(1, 1, 0.3, 0.3)"); | 70 setV8ObjectPropertyAsString(scope.isolate(), keyframe2, "easing", "cubic-bez
ier(1, 1, 0.3, 0.3)"); |
| 70 | 71 |
| 71 jsKeyframes.append(Dictionary(keyframe1, scope.isolate(), exceptionState)); | 72 jsKeyframes.append(Dictionary(scope.isolate(), keyframe1)); |
| 72 jsKeyframes.append(Dictionary(keyframe2, scope.isolate(), exceptionState)); | 73 jsKeyframes.append(Dictionary(scope.isolate(), keyframe2)); |
| 73 | 74 |
| 74 String value1; | 75 String value1; |
| 75 ASSERT_TRUE(DictionaryHelper::get(jsKeyframes[0], "width", value1)); | 76 ASSERT_TRUE(DictionaryHelper::get(jsKeyframes[0], "width", value1)); |
| 76 ASSERT_EQ("100px", value1); | 77 ASSERT_EQ("100px", value1); |
| 77 | 78 |
| 78 String value2; | 79 String value2; |
| 79 ASSERT_TRUE(DictionaryHelper::get(jsKeyframes[1], "width", value2)); | 80 ASSERT_TRUE(DictionaryHelper::get(jsKeyframes[1], "width", value2)); |
| 80 ASSERT_EQ("0px", value2); | 81 ASSERT_EQ("0px", value2); |
| 81 | 82 |
| 82 KeyframeEffect* animation = createAnimation(element.get(), jsKeyframes, 0, e
xceptionState); | 83 KeyframeEffect* animation = createAnimation(element.get(), jsKeyframes, 0); |
| 83 | 84 |
| 84 Element* target = animation->target(); | 85 Element* target = animation->target(); |
| 85 EXPECT_EQ(*element.get(), *target); | 86 EXPECT_EQ(*element.get(), *target); |
| 86 | 87 |
| 87 const KeyframeVector keyframes = toKeyframeEffectModelBase(animation->model(
))->getFrames(); | 88 const KeyframeVector keyframes = toKeyframeEffectModelBase(animation->model(
))->getFrames(); |
| 88 | 89 |
| 89 EXPECT_EQ(0, keyframes[0]->offset()); | 90 EXPECT_EQ(0, keyframes[0]->offset()); |
| 90 EXPECT_EQ(1, keyframes[1]->offset()); | 91 EXPECT_EQ(1, keyframes[1]->offset()); |
| 91 | 92 |
| 92 const CSSValue& keyframe1Width = toStringKeyframe(keyframes[0].get())->cssPr
opertyValue(CSSPropertyWidth); | 93 const CSSValue& keyframe1Width = toStringKeyframe(keyframes[0].get())->cssPr
opertyValue(CSSPropertyWidth); |
| 93 const CSSValue& keyframe2Width = toStringKeyframe(keyframes[1].get())->cssPr
opertyValue(CSSPropertyWidth); | 94 const CSSValue& keyframe2Width = toStringKeyframe(keyframes[1].get())->cssPr
opertyValue(CSSPropertyWidth); |
| 94 | 95 |
| 95 EXPECT_EQ("100px", keyframe1Width.cssText()); | 96 EXPECT_EQ("100px", keyframe1Width.cssText()); |
| 96 EXPECT_EQ("0px", keyframe2Width.cssText()); | 97 EXPECT_EQ("0px", keyframe2Width.cssText()); |
| 97 | 98 |
| 98 EXPECT_EQ(*(CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Eas
eType::EASE_IN_OUT)), keyframes[0]->easing()); | 99 EXPECT_EQ(*(CubicBezierTimingFunction::preset(CubicBezierTimingFunction::Eas
eType::EASE_IN_OUT)), keyframes[0]->easing()); |
| 99 EXPECT_EQ(*(CubicBezierTimingFunction::create(1, 1, 0.3, 0.3).get()), keyfra
mes[1]->easing()); | 100 EXPECT_EQ(*(CubicBezierTimingFunction::create(1, 1, 0.3, 0.3).get()), keyfra
mes[1]->easing()); |
| 100 } | 101 } |
| 101 | 102 |
| 102 TEST_F(AnimationKeyframeEffectV8Test, CanSetDuration) | 103 TEST_F(AnimationKeyframeEffectV8Test, CanSetDuration) |
| 103 { | 104 { |
| 104 Vector<Dictionary, 0> jsKeyframes; | 105 Vector<Dictionary, 0> jsKeyframes; |
| 105 double duration = 2000; | 106 double duration = 2000; |
| 106 | 107 |
| 107 KeyframeEffect* animation = createAnimation(element.get(), jsKeyframes, dura
tion, exceptionState); | 108 KeyframeEffect* animation = createAnimation(element.get(), jsKeyframes, dura
tion); |
| 108 | 109 |
| 109 EXPECT_EQ(duration / 1000, animation->specifiedTiming().iterationDuration); | 110 EXPECT_EQ(duration / 1000, animation->specifiedTiming().iterationDuration); |
| 110 } | 111 } |
| 111 | 112 |
| 112 TEST_F(AnimationKeyframeEffectV8Test, CanOmitSpecifiedDuration) | 113 TEST_F(AnimationKeyframeEffectV8Test, CanOmitSpecifiedDuration) |
| 113 { | 114 { |
| 114 Vector<Dictionary, 0> jsKeyframes; | 115 Vector<Dictionary, 0> jsKeyframes; |
| 115 KeyframeEffect* animation = createAnimation(element.get(), jsKeyframes, exce
ptionState); | 116 KeyframeEffect* animation = createAnimation(element.get(), jsKeyframes); |
| 116 EXPECT_TRUE(std::isnan(animation->specifiedTiming().iterationDuration)); | 117 EXPECT_TRUE(std::isnan(animation->specifiedTiming().iterationDuration)); |
| 117 } | 118 } |
| 118 | 119 |
| 119 TEST_F(AnimationKeyframeEffectV8Test, SpecifiedGetters) | 120 TEST_F(AnimationKeyframeEffectV8Test, SpecifiedGetters) |
| 120 { | 121 { |
| 121 V8TestingScope scope; | 122 V8TestingScope scope; |
| 122 Vector<Dictionary, 0> jsKeyframes; | 123 Vector<Dictionary, 0> jsKeyframes; |
| 123 | 124 |
| 124 v8::Local<v8::Object> timingInput = v8::Object::New(scope.isolate()); | 125 v8::Local<v8::Object> timingInput = v8::Object::New(scope.isolate()); |
| 125 setV8ObjectPropertyAsNumber(scope.isolate(), timingInput, "delay", 2); | 126 setV8ObjectPropertyAsNumber(scope.isolate(), timingInput, "delay", 2); |
| 126 setV8ObjectPropertyAsNumber(scope.isolate(), timingInput, "endDelay", 0.5); | 127 setV8ObjectPropertyAsNumber(scope.isolate(), timingInput, "endDelay", 0.5); |
| 127 setV8ObjectPropertyAsString(scope.isolate(), timingInput, "fill", "backwards
"); | 128 setV8ObjectPropertyAsString(scope.isolate(), timingInput, "fill", "backwards
"); |
| 128 setV8ObjectPropertyAsNumber(scope.isolate(), timingInput, "iterationStart",
2); | 129 setV8ObjectPropertyAsNumber(scope.isolate(), timingInput, "iterationStart",
2); |
| 129 setV8ObjectPropertyAsNumber(scope.isolate(), timingInput, "iterations", 10); | 130 setV8ObjectPropertyAsNumber(scope.isolate(), timingInput, "iterations", 10); |
| 130 setV8ObjectPropertyAsString(scope.isolate(), timingInput, "direction", "reve
rse"); | 131 setV8ObjectPropertyAsString(scope.isolate(), timingInput, "direction", "reve
rse"); |
| 131 setV8ObjectPropertyAsString(scope.isolate(), timingInput, "easing", "step-st
art"); | 132 setV8ObjectPropertyAsString(scope.isolate(), timingInput, "easing", "step-st
art"); |
| 132 KeyframeEffectOptions timingInputDictionary; | 133 KeyframeEffectOptions timingInputDictionary; |
| 134 TrackExceptionState exceptionState; |
| 133 V8KeyframeEffectOptions::toImpl(scope.isolate(), timingInput, timingInputDic
tionary, exceptionState); | 135 V8KeyframeEffectOptions::toImpl(scope.isolate(), timingInput, timingInputDic
tionary, exceptionState); |
| 136 EXPECT_FALSE(exceptionState.hadException()); |
| 134 | 137 |
| 135 KeyframeEffect* animation = createAnimation(element.get(), jsKeyframes, timi
ngInputDictionary, exceptionState); | 138 KeyframeEffect* animation = createAnimation(element.get(), jsKeyframes, timi
ngInputDictionary); |
| 136 | 139 |
| 137 AnimationEffectTiming* specified = animation->timing(); | 140 AnimationEffectTiming* specified = animation->timing(); |
| 138 EXPECT_EQ(2, specified->delay()); | 141 EXPECT_EQ(2, specified->delay()); |
| 139 EXPECT_EQ(0.5, specified->endDelay()); | 142 EXPECT_EQ(0.5, specified->endDelay()); |
| 140 EXPECT_EQ("backwards", specified->fill()); | 143 EXPECT_EQ("backwards", specified->fill()); |
| 141 EXPECT_EQ(2, specified->iterationStart()); | 144 EXPECT_EQ(2, specified->iterationStart()); |
| 142 EXPECT_EQ(10, specified->iterations()); | 145 EXPECT_EQ(10, specified->iterations()); |
| 143 EXPECT_EQ("reverse", specified->direction()); | 146 EXPECT_EQ("reverse", specified->direction()); |
| 144 EXPECT_EQ("step-start", specified->easing()); | 147 EXPECT_EQ("step-start", specified->easing()); |
| 145 } | 148 } |
| 146 | 149 |
| 147 TEST_F(AnimationKeyframeEffectV8Test, SpecifiedDurationGetter) | 150 TEST_F(AnimationKeyframeEffectV8Test, SpecifiedDurationGetter) |
| 148 { | 151 { |
| 149 V8TestingScope scope; | 152 V8TestingScope scope; |
| 150 Vector<Dictionary, 0> jsKeyframes; | 153 Vector<Dictionary, 0> jsKeyframes; |
| 151 | 154 |
| 152 v8::Local<v8::Object> timingInputWithDuration = v8::Object::New(scope.isolat
e()); | 155 v8::Local<v8::Object> timingInputWithDuration = v8::Object::New(scope.isolat
e()); |
| 153 setV8ObjectPropertyAsNumber(scope.isolate(), timingInputWithDuration, "durat
ion", 2.5); | 156 setV8ObjectPropertyAsNumber(scope.isolate(), timingInputWithDuration, "durat
ion", 2.5); |
| 154 KeyframeEffectOptions timingInputDictionaryWithDuration; | 157 KeyframeEffectOptions timingInputDictionaryWithDuration; |
| 158 TrackExceptionState exceptionState; |
| 155 V8KeyframeEffectOptions::toImpl(scope.isolate(), timingInputWithDuration, ti
mingInputDictionaryWithDuration, exceptionState); | 159 V8KeyframeEffectOptions::toImpl(scope.isolate(), timingInputWithDuration, ti
mingInputDictionaryWithDuration, exceptionState); |
| 160 EXPECT_FALSE(exceptionState.hadException()); |
| 156 | 161 |
| 157 KeyframeEffect* animationWithDuration = createAnimation(element.get(), jsKey
frames, timingInputDictionaryWithDuration, exceptionState); | 162 KeyframeEffect* animationWithDuration = createAnimation(element.get(), jsKey
frames, timingInputDictionaryWithDuration); |
| 158 | 163 |
| 159 AnimationEffectTiming* specifiedWithDuration = animationWithDuration->timing
(); | 164 AnimationEffectTiming* specifiedWithDuration = animationWithDuration->timing
(); |
| 160 UnrestrictedDoubleOrString duration; | 165 UnrestrictedDoubleOrString duration; |
| 161 specifiedWithDuration->duration(duration); | 166 specifiedWithDuration->duration(duration); |
| 162 EXPECT_TRUE(duration.isUnrestrictedDouble()); | 167 EXPECT_TRUE(duration.isUnrestrictedDouble()); |
| 163 EXPECT_EQ(2.5, duration.getAsUnrestrictedDouble()); | 168 EXPECT_EQ(2.5, duration.getAsUnrestrictedDouble()); |
| 164 EXPECT_FALSE(duration.isString()); | 169 EXPECT_FALSE(duration.isString()); |
| 165 | 170 |
| 166 | 171 |
| 167 v8::Local<v8::Object> timingInputNoDuration = v8::Object::New(scope.isolate(
)); | 172 v8::Local<v8::Object> timingInputNoDuration = v8::Object::New(scope.isolate(
)); |
| 168 KeyframeEffectOptions timingInputDictionaryNoDuration; | 173 KeyframeEffectOptions timingInputDictionaryNoDuration; |
| 169 V8KeyframeEffectOptions::toImpl(scope.isolate(), timingInputNoDuration, timi
ngInputDictionaryNoDuration, exceptionState); | 174 V8KeyframeEffectOptions::toImpl(scope.isolate(), timingInputNoDuration, timi
ngInputDictionaryNoDuration, exceptionState); |
| 175 EXPECT_FALSE(exceptionState.hadException()); |
| 170 | 176 |
| 171 KeyframeEffect* animationNoDuration = createAnimation(element.get(), jsKeyfr
ames, timingInputDictionaryNoDuration, exceptionState); | 177 KeyframeEffect* animationNoDuration = createAnimation(element.get(), jsKeyfr
ames, timingInputDictionaryNoDuration); |
| 172 | 178 |
| 173 AnimationEffectTiming* specifiedNoDuration = animationNoDuration->timing(); | 179 AnimationEffectTiming* specifiedNoDuration = animationNoDuration->timing(); |
| 174 UnrestrictedDoubleOrString duration2; | 180 UnrestrictedDoubleOrString duration2; |
| 175 specifiedNoDuration->duration(duration2); | 181 specifiedNoDuration->duration(duration2); |
| 176 EXPECT_FALSE(duration2.isUnrestrictedDouble()); | 182 EXPECT_FALSE(duration2.isUnrestrictedDouble()); |
| 177 EXPECT_TRUE(duration2.isString()); | 183 EXPECT_TRUE(duration2.isString()); |
| 178 EXPECT_EQ("auto", duration2.getAsString()); | 184 EXPECT_EQ("auto", duration2.getAsString()); |
| 179 } | 185 } |
| 180 | 186 |
| 181 TEST_F(AnimationKeyframeEffectV8Test, SpecifiedSetters) | 187 TEST_F(AnimationKeyframeEffectV8Test, SpecifiedSetters) |
| 182 { | 188 { |
| 183 V8TestingScope scope; | 189 V8TestingScope scope; |
| 184 Vector<Dictionary, 0> jsKeyframes; | 190 Vector<Dictionary, 0> jsKeyframes; |
| 185 v8::Local<v8::Object> timingInput = v8::Object::New(scope.isolate()); | 191 v8::Local<v8::Object> timingInput = v8::Object::New(scope.isolate()); |
| 186 KeyframeEffectOptions timingInputDictionary; | 192 KeyframeEffectOptions timingInputDictionary; |
| 193 TrackExceptionState exceptionState; |
| 187 V8KeyframeEffectOptions::toImpl(scope.isolate(), timingInput, timingInputDic
tionary, exceptionState); | 194 V8KeyframeEffectOptions::toImpl(scope.isolate(), timingInput, timingInputDic
tionary, exceptionState); |
| 188 KeyframeEffect* animation = createAnimation(element.get(), jsKeyframes, timi
ngInputDictionary, exceptionState); | 195 EXPECT_FALSE(exceptionState.hadException()); |
| 196 KeyframeEffect* animation = createAnimation(element.get(), jsKeyframes, timi
ngInputDictionary); |
| 189 | 197 |
| 190 AnimationEffectTiming* specified = animation->timing(); | 198 AnimationEffectTiming* specified = animation->timing(); |
| 191 | 199 |
| 192 EXPECT_EQ(0, specified->delay()); | 200 EXPECT_EQ(0, specified->delay()); |
| 193 specified->setDelay(2); | 201 specified->setDelay(2); |
| 194 EXPECT_EQ(2, specified->delay()); | 202 EXPECT_EQ(2, specified->delay()); |
| 195 | 203 |
| 196 EXPECT_EQ(0, specified->endDelay()); | 204 EXPECT_EQ(0, specified->endDelay()); |
| 197 specified->setEndDelay(0.5); | 205 specified->setEndDelay(0.5); |
| 198 EXPECT_EQ(0.5, specified->endDelay()); | 206 EXPECT_EQ(0.5, specified->endDelay()); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 224 ASSERT_FALSE(exceptionState.hadException()); | 232 ASSERT_FALSE(exceptionState.hadException()); |
| 225 EXPECT_EQ("step-start", specified->easing()); | 233 EXPECT_EQ("step-start", specified->easing()); |
| 226 } | 234 } |
| 227 | 235 |
| 228 TEST_F(AnimationKeyframeEffectV8Test, SetSpecifiedDuration) | 236 TEST_F(AnimationKeyframeEffectV8Test, SetSpecifiedDuration) |
| 229 { | 237 { |
| 230 V8TestingScope scope; | 238 V8TestingScope scope; |
| 231 Vector<Dictionary, 0> jsKeyframes; | 239 Vector<Dictionary, 0> jsKeyframes; |
| 232 v8::Local<v8::Object> timingInput = v8::Object::New(scope.isolate()); | 240 v8::Local<v8::Object> timingInput = v8::Object::New(scope.isolate()); |
| 233 KeyframeEffectOptions timingInputDictionary; | 241 KeyframeEffectOptions timingInputDictionary; |
| 242 TrackExceptionState exceptionState; |
| 234 V8KeyframeEffectOptions::toImpl(scope.isolate(), timingInput, timingInputDic
tionary, exceptionState); | 243 V8KeyframeEffectOptions::toImpl(scope.isolate(), timingInput, timingInputDic
tionary, exceptionState); |
| 235 KeyframeEffect* animation = createAnimation(element.get(), jsKeyframes, timi
ngInputDictionary, exceptionState); | 244 EXPECT_FALSE(exceptionState.hadException()); |
| 245 KeyframeEffect* animation = createAnimation(element.get(), jsKeyframes, timi
ngInputDictionary); |
| 236 | 246 |
| 237 AnimationEffectTiming* specified = animation->timing(); | 247 AnimationEffectTiming* specified = animation->timing(); |
| 238 | 248 |
| 239 UnrestrictedDoubleOrString duration; | 249 UnrestrictedDoubleOrString duration; |
| 240 specified->duration(duration); | 250 specified->duration(duration); |
| 241 EXPECT_FALSE(duration.isUnrestrictedDouble()); | 251 EXPECT_FALSE(duration.isUnrestrictedDouble()); |
| 242 EXPECT_TRUE(duration.isString()); | 252 EXPECT_TRUE(duration.isString()); |
| 243 EXPECT_EQ("auto", duration.getAsString()); | 253 EXPECT_EQ("auto", duration.getAsString()); |
| 244 | 254 |
| 245 UnrestrictedDoubleOrString inDuration; | 255 UnrestrictedDoubleOrString inDuration; |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 Timing timing; | 367 Timing timing; |
| 358 timing.iterationDuration = 5; | 368 timing.iterationDuration = 5; |
| 359 KeyframeEffect* animation = KeyframeEffect::create(element.get(), nullptr, t
iming); | 369 KeyframeEffect* animation = KeyframeEffect::create(element.get(), nullptr, t
iming); |
| 360 EXPECT_EQ(element.get(), animation->target()); | 370 EXPECT_EQ(element.get(), animation->target()); |
| 361 document().timeline().play(animation); | 371 document().timeline().play(animation); |
| 362 pageHolder.reset(); | 372 pageHolder.reset(); |
| 363 element.clear(); | 373 element.clear(); |
| 364 } | 374 } |
| 365 | 375 |
| 366 } // namespace blink | 376 } // namespace blink |
| OLD | NEW |