haikuwebkit/LayoutTests/svg/animations/svglength-animation-LengthM...

72 lines
2.0 KiB
HTML
Raw Permalink Normal View History

2011-06-13 Dirk Schulze <krit@webkit.org> Reviewed by Nikolas Zimmermann. SVGAnimation should use direct unit animation for SVGLength https://bugs.webkit.org/show_bug.cgi?id=61368 Added new tests to check correct behavior of SVGLength animations. * svg/animations/script-tests/svglength-animation-LengthModeHeight.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-LengthModeOther.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-LengthModeWidth.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-invalid-value-1.js: Added. (sample1): (sample2): (executeTest): * svg/animations/script-tests/svglength-animation-invalid-value-2.js: Added. (sample1): (sample2): (executeTest): * svg/animations/script-tests/svglength-animation-invalid-value-3.js: Added. (sample1): (sample2): (executeTest): * svg/animations/script-tests/svglength-animation-number-to-number.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-cm.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-ems.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-exs.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-in.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-number.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-pc.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-percentage.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-pt.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-px.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-values.js: Added. (sample1): (sample2): (sample3): (sample4): (sample5): (executeTest): * svg/animations/svglength-animation-LengthModeHeight-expected.txt: Added. * svg/animations/svglength-animation-LengthModeHeight.html: Added. * svg/animations/svglength-animation-LengthModeOther-expected.txt: Added. * svg/animations/svglength-animation-LengthModeOther.html: Added. * svg/animations/svglength-animation-LengthModeWidth-expected.txt: Added. * svg/animations/svglength-animation-LengthModeWidth.html: Added. * svg/animations/svglength-animation-invalid-value-1-expected.txt: Added. * svg/animations/svglength-animation-invalid-value-1.html: Added. * svg/animations/svglength-animation-invalid-value-2-expected.txt: Added. * svg/animations/svglength-animation-invalid-value-2.html: Added. * svg/animations/svglength-animation-invalid-value-3-expected.txt: Added. * svg/animations/svglength-animation-invalid-value-3.html: Added. * svg/animations/svglength-animation-number-to-number-expected.txt: Added. * svg/animations/svglength-animation-number-to-number.html: Added. * svg/animations/svglength-animation-px-to-cm-expected.txt: Added. * svg/animations/svglength-animation-px-to-cm.html: Added. * svg/animations/svglength-animation-px-to-ems-expected.txt: Added. * svg/animations/svglength-animation-px-to-ems.html: Added. * svg/animations/svglength-animation-px-to-exs-expected.txt: Added. * svg/animations/svglength-animation-px-to-exs.html: Added. * svg/animations/svglength-animation-px-to-in-expected.txt: Added. * svg/animations/svglength-animation-px-to-in.html: Added. * svg/animations/svglength-animation-px-to-number-expected.txt: Added. * svg/animations/svglength-animation-px-to-number.html: Added. * svg/animations/svglength-animation-px-to-pc-expected.txt: Added. * svg/animations/svglength-animation-px-to-pc.html: Added. * svg/animations/svglength-animation-px-to-percentage-expected.txt: Added. * svg/animations/svglength-animation-px-to-percentage.html: Added. * svg/animations/svglength-animation-px-to-pt-expected.txt: Added. * svg/animations/svglength-animation-px-to-pt.html: Added. * svg/animations/svglength-animation-px-to-px-expected.txt: Added. * svg/animations/svglength-animation-px-to-px.html: Added. * svg/animations/svglength-animation-values-expected.txt: Added. * svg/animations/svglength-animation-values.html: Added. 2011-06-13 Dirk Schulze <krit@webkit.org> Reviewed by Nikolas Zimmermann. SVGAnimation should use direct unit animation for SVGLength https://bugs.webkit.org/show_bug.cgi?id=61368 When running SMIL animations within SVG, we unnecessarily transform the underlying SVG primitive datatype to strings, number+units, and back. As first step the target element gets asked for its current value. This value gets transformed to a string. In SVGAnimateElement we try to parse this string again and split it into a number and its unit. In the further steps we just animate the number. This number gets transformed back to a string together with the parsed unit. The string gets passed back to the target element, which is responsible for parsing the passed string back to a value as a SVG primitive datatype (like SVGLength, SVGNumber, SVGAngle, SVGColor, ...), relayout and rerendering. In short: SVG primitive datatype -> string -> number + unit animation -> string -> SVG primitive datatype. This patch does not attempt to change the string transformations, but addresses the parsing of the string back to a number and unit in the SVG animation code. There's no need to write a new parser in SVGAnimateElement to parse SVG primitive datatypes, we can instead reuse the existing ones. Also the current parser of SVGAnimateElement does not handle most unit types, nor is it possible to animate lists like SVGLengthList with the parsed content. An animation of values with different unit types is not possible: <rect width="20" height="20"> <animate animateAttribute="width" from="20px" to="10%" dur="4s"/> </rect> For the example above we would animate the rect width from 20px to 10px in 4 seconds and jump to the 10% of the viewport at the end of the animation. With using the parsers of SVG primitive datatypes we will also use the SVG primitive datatypes in the animation code itself. And that makes it possible to do such animations. In short: SVG primitive datatype -> string -> SVG primitive datatype animation -> string -> SVG primitive datatype. It will be easier to avoid the string transformation once all SVG primitive datatypes are supported. To hide the complexity of the animation code, the actual calculations of SVG animation specific values was moved to the corresponding SVGAnimated* files (SVGAnimatedLength.cpp for SVGLength). SVGAnimateElement itself just works with the new added generic datatype SVGAnimationType. SVGAnimatorFactory creates the SVG primitive datatype specific animators. This makes the main animation code a lot more readable and maintainable. With this patch I add the SVGAnimatorFactory and convert SVGLength animation to the new concept. Tests: svg/animations/svglength-animation-LengthModeHeight.html svg/animations/svglength-animation-LengthModeOther.html svg/animations/svglength-animation-LengthModeWidth.html svg/animations/svglength-animation-invalid-value-1.html svg/animations/svglength-animation-invalid-value-2.html svg/animations/svglength-animation-invalid-value-3.html svg/animations/svglength-animation-number-to-number.html svg/animations/svglength-animation-px-to-cm.html svg/animations/svglength-animation-px-to-ems.html svg/animations/svglength-animation-px-to-exs.html svg/animations/svglength-animation-px-to-in.html svg/animations/svglength-animation-px-to-number.html svg/animations/svglength-animation-px-to-pc.html svg/animations/svglength-animation-px-to-percentage.html svg/animations/svglength-animation-px-to-pt.html svg/animations/svglength-animation-px-to-px.html svg/animations/svglength-animation-values.html * CMakeLists.txt: Added new files to build system. * GNUmakefile.list.am: Ditto. * WebCore.gypi: Ditto. * WebCore.pro: Ditto. * WebCore.vcproj/WebCore.vcproj: Ditto. * WebCore.xcodeproj/project.pbxproj: Ditto. * svg/SVGAllInOne.cpp: Added SVGAnimatedLength.cpp for Win and other build systems. * svg/SVGAnimateElement.cpp: (WebCore::parseNumberValueAndUnit): Remove parsing code for SVGLength. Use SVGLength parser directly. (WebCore::SVGAnimateElement::adjustForCurrentColor): Made adjustForCurrentColor public as preperation for SVGAnimatedColor. (WebCore::getPropertyValue): Inline function to get computedStyle of CSS property. (WebCore::SVGAnimateElement::adjustForInheritance): Made adjustForInheritance as preperation for SVGAnimated* files. (WebCore::SVGAnimateElement::determineAnimatedAttributeType): SVGLength need special handling via SVGAnimator now. (WebCore::SVGAnimateElement::calculateAnimatedValue): Cleanup. Make use of SVGAnimator for SVGLength. (WebCore::SVGAnimateElement::calculateFromAndToValues): Ditto. (WebCore::SVGAnimateElement::calculateFromAndByValues): Ditto. (WebCore::SVGAnimateElement::resetToBaseValue): Ditto. (WebCore::SVGAnimateElement::applyResultsToTarget): Ditto. (WebCore::SVGAnimateElement::calculateDistance): Ditto. * svg/SVGAnimateElement.h: * svg/SVGAnimatedLength.cpp: Added. (WebCore::SVGAnimatedLengthAnimator::SVGAnimatedLengthAnimator): (WebCore::sharedSVGLength): (WebCore::SVGAnimatedLengthAnimator::constructFromString): (WebCore::SVGAnimatedLengthAnimator::calculateFromAndToValues): (WebCore::SVGAnimatedLengthAnimator::calculateFromAndByValues): (WebCore::SVGAnimatedLengthAnimator::calculateAnimatedValue): (WebCore::SVGAnimatedLengthAnimator::calculateDistance): * svg/SVGAnimatedLength.h: Added new class SVGAnimatedLengthAnimator which is responsible for the actual animation. (WebCore::SVGAnimatedLengthAnimator::~SVGAnimatedLengthAnimator): * svg/SVGAnimatedType.h: Added. Generic SVG unit type for animations in SVGAnimateElement. (WebCore::SVGAnimatedType::createLength): (WebCore::SVGAnimatedType::~SVGAnimatedType): (WebCore::SVGAnimatedType::type): (WebCore::SVGAnimatedType::length): (WebCore::SVGAnimatedType::SVGAnimatedType): * svg/SVGAnimatedTypeAnimator.h: Added. Base class for SVGAnimatedLengthAnimator and future SVG unit animators. (WebCore::SVGAnimatedTypeAnimator::~SVGAnimatedTypeAnimator): (WebCore::SVGAnimatedTypeAnimator::setContextElement): (WebCore::SVGAnimatedTypeAnimator::SVGAnimatedTypeAnimator): * svg/SVGAnimationElement.cpp: (WebCore::SVGAnimationElement::parseMappedAttribute): We do not use parseNumberValueAndUnit for SVGLength now. Have to strip white spaces here. Whitespaces shouldn't be stripped on the following attributes: 'from', 'to' and 'by'. This is not the case for SVGLength anymore. Added new tests to check this behavior. (WebCore::SVGAnimationElement::animationMode): Enum is accessible in WebCore namespace now. (WebCore::SVGAnimationElement::calcMode): Ditto. * svg/SVGAnimationElement.h: * svg/SVGAnimatorFactory.h: Added. (WebCore::SVGAnimatorFactory::create): * svg/SVGLength.cpp: (WebCore::SVGLength::setValueAsString): New setter with string and SVGLengthMode. (WebCore::SVGLength::lengthModeForAnimatedLengthAttribute): Get LengthMode for SVGLength depending on the attribute name. * svg/SVGLength.h: Canonical link: https://commits.webkit.org/78067@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@88663 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-06-13 18:48:36 +00:00
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
Change LayoutTests' s* files to use pre and post js files in LayoutTests/resources. https://bugs.webkit.org/show_bug.cgi?id=120899. Rubber stamped by Filip Pizlo. * scrollbars/rtl/div-absolute.html: * scrollbars/rtl/div-horizontal.html: * scrollbars/rtl/div-vertical.html: * security/crypto-random-values-limits.html: * security/crypto-random-values-types.html: * security/crypto-random-values.html: * storage/domstorage/clear.html: * storage/domstorage/complex-keys.html: * storage/domstorage/complex-values.html: * storage/domstorage/events/basic-body-attribute.html: * storage/domstorage/events/basic-setattribute.html: * storage/domstorage/events/basic.html: * storage/domstorage/events/case-sensitive.html: * storage/domstorage/events/script-tests/TEMPLATE.html: * storage/domstorage/localstorage/close-idle-localstorage-databases-immediately.html: * storage/domstorage/localstorage/missing-arguments.html: * storage/domstorage/localstorage/storagetracker/storage-tracker-1-prepare.html: * storage/domstorage/localstorage/storagetracker/storage-tracker-2-create.html: * storage/domstorage/localstorage/storagetracker/storage-tracker-3-delete-all.html: * storage/domstorage/localstorage/storagetracker/storage-tracker-4-create.html: * storage/domstorage/localstorage/storagetracker/storage-tracker-5-delete-one.html: * storage/domstorage/localstorage/storagetracker/storage-tracker-6-create.html: * storage/domstorage/localstorage/storagetracker/storage-tracker-7-usage.html: * storage/domstorage/quota.html: * storage/domstorage/remove-item.html: * storage/domstorage/script-tests/TEMPLATE.html: * storage/domstorage/storage-functions-not-overwritten.html: * storage/indexeddb/aborted-versionchange-closes.html: * storage/indexeddb/basics-shared-workers.html: * storage/indexeddb/basics-workers.html: * storage/indexeddb/basics.html: * storage/indexeddb/clone-exception.html: * storage/indexeddb/create-and-remove-object-store.html: * storage/indexeddb/create-object-store-options.html: * storage/indexeddb/createIndex-after-failure.html: * storage/indexeddb/createObjectStore-name-argument-required.html: * storage/indexeddb/createObjectStore-null-name.html: * storage/indexeddb/cursor-added-bug.html: * storage/indexeddb/cursor-advance-workers.html: * storage/indexeddb/cursor-advance.html: * storage/indexeddb/cursor-continue-dir.html: * storage/indexeddb/cursor-continue-validity.html: * storage/indexeddb/cursor-continue.html: * storage/indexeddb/cursor-delete.html: * storage/indexeddb/cursor-finished.html: * storage/indexeddb/cursor-inconsistency.html: * storage/indexeddb/cursor-index-delete.html: * storage/indexeddb/cursor-key-order.html: * storage/indexeddb/cursor-overloads.html: * storage/indexeddb/cursor-prev-no-duplicate.html: * storage/indexeddb/cursor-primary-key-order.html: * storage/indexeddb/cursor-properties.html: * storage/indexeddb/cursor-reverse-bug.html: * storage/indexeddb/cursor-skip-deleted.html: * storage/indexeddb/cursor-update-value-argument-required.html: * storage/indexeddb/cursor-update.html: * storage/indexeddb/cursor-value.html: * storage/indexeddb/data-corruption.html: * storage/indexeddb/database-basics.html: * storage/indexeddb/database-close.html: * storage/indexeddb/database-closepending-flag.html: * storage/indexeddb/database-deletepending-flag.html: * storage/indexeddb/database-name-undefined.html: * storage/indexeddb/database-odd-names.html: * storage/indexeddb/database-quota.html: * storage/indexeddb/database-wrapper.html: * storage/indexeddb/delete-closed-database-object.html: * storage/indexeddb/delete-in-upgradeneeded-close-in-open-success.html: * storage/indexeddb/delete-in-upgradeneeded-close-in-versionchange.html: * storage/indexeddb/delete-range.html: * storage/indexeddb/deleteIndex-bug110792.html: * storage/indexeddb/deleteIndex.html: * storage/indexeddb/deleteObjectStore-name-argument-required.html: * storage/indexeddb/deleteObjectStore-null-name.html: * storage/indexeddb/deleted-objects.html: * storage/indexeddb/deletedatabase-blocked.html: * storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange-workers.html: * storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange.html: * storage/indexeddb/deletedatabase-delayed-by-versionchange.html: * storage/indexeddb/deletedatabase-not-blocked.html: * storage/indexeddb/deletedatabase-transaction.html: * storage/indexeddb/dont-commit-on-blocked.html: * storage/indexeddb/dont-wedge.html: * storage/indexeddb/duplicates.html: * storage/indexeddb/error-causes-abort-by-default.html: * storage/indexeddb/events.html: * storage/indexeddb/exception-in-event-aborts.html: * storage/indexeddb/exceptions.html: * storage/indexeddb/factory-basics-workers.html: * storage/indexeddb/factory-basics.html: * storage/indexeddb/factory-cmp.html: * storage/indexeddb/factory-deletedatabase.html: * storage/indexeddb/get-keyrange.html: * storage/indexeddb/index-basics-workers.html: * storage/indexeddb/index-basics.html: * storage/indexeddb/index-count.html: * storage/indexeddb/index-cursor.html: * storage/indexeddb/index-duplicate-keypaths.html: * storage/indexeddb/index-get-key-argument-required.html: * storage/indexeddb/index-multientry.html: * storage/indexeddb/index-population.html: * storage/indexeddb/index-unique.html: * storage/indexeddb/interfaces.html: * storage/indexeddb/intversion-abort-in-initial-upgradeneeded.html: * storage/indexeddb/intversion-bad-parameters.html: * storage/indexeddb/intversion-blocked.html: * storage/indexeddb/intversion-close-between-events.html: * storage/indexeddb/intversion-close-in-oncomplete.html: * storage/indexeddb/intversion-close-in-upgradeneeded.html: * storage/indexeddb/intversion-encoding.html: * storage/indexeddb/intversion-gated-on-delete.html: * storage/indexeddb/intversion-long-queue.html: * storage/indexeddb/intversion-omit-parameter.html: * storage/indexeddb/intversion-open-in-upgradeneeded.html: * storage/indexeddb/intversion-open-with-version.html: * storage/indexeddb/intversion-persistence.html: * storage/indexeddb/intversion-revert-on-abort.html: * storage/indexeddb/intversion-two-opens-no-versions.html: * storage/indexeddb/intversion-upgrades.html: * storage/indexeddb/invalid-keys.html: * storage/indexeddb/key-generator.html: * storage/indexeddb/key-sort-order-across-types.html: * storage/indexeddb/key-sort-order-date.html: * storage/indexeddb/key-type-array.html: * storage/indexeddb/key-type-infinity.html: * storage/indexeddb/keypath-arrays.html: * storage/indexeddb/keypath-basics.html: * storage/indexeddb/keypath-edges.html: * storage/indexeddb/keypath-fetch-key.html: * storage/indexeddb/keypath-intrinsic-properties.html: * storage/indexeddb/keyrange-required-arguments.html: * storage/indexeddb/keyrange.html: * storage/indexeddb/lazy-index-population.html: * storage/indexeddb/lazy-index-types.html: * storage/indexeddb/legacy-constants.html: * storage/indexeddb/list-ordering.html: * storage/indexeddb/metadata.html: * storage/indexeddb/mozilla/add-twice-failure.html: * storage/indexeddb/mozilla/autoincrement-indexes.html: * storage/indexeddb/mozilla/bad-keypath.html: * storage/indexeddb/mozilla/clear.html: * storage/indexeddb/mozilla/create-index-unique.html: * storage/indexeddb/mozilla/create-index-with-integer-keys.html: * storage/indexeddb/mozilla/create-objectstore-basics.html: * storage/indexeddb/mozilla/create-objectstore-null-name.html: * storage/indexeddb/mozilla/cursor-mutation-objectstore-only.html: * storage/indexeddb/mozilla/cursor-mutation.html: * storage/indexeddb/mozilla/cursor-update-updates-indexes.html: * storage/indexeddb/mozilla/cursors.html: * storage/indexeddb/mozilla/delete-result.html: * storage/indexeddb/mozilla/event-source.html: * storage/indexeddb/mozilla/global-data.html: * storage/indexeddb/mozilla/index-prev-no-duplicate.html: * storage/indexeddb/mozilla/indexes.html: * storage/indexeddb/mozilla/key-requirements-delete-null-key.html: * storage/indexeddb/mozilla/key-requirements-inline-and-passed.html: * storage/indexeddb/mozilla/key-requirements-put-no-key.html: * storage/indexeddb/mozilla/key-requirements-put-null-key.html: * storage/indexeddb/mozilla/key-requirements.html: * storage/indexeddb/mozilla/object-cursors.html: * storage/indexeddb/mozilla/object-identity.html: * storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put.html: * storage/indexeddb/mozilla/object-store-remove-values.html: * storage/indexeddb/mozilla/objectstorenames.html: * storage/indexeddb/mozilla/odd-result-order.html: * storage/indexeddb/mozilla/open-database-null-name.html: * storage/indexeddb/mozilla/put-get-values.html: * storage/indexeddb/mozilla/readonly-transactions.html: * storage/indexeddb/mozilla/readwrite-transactions.html: * storage/indexeddb/mozilla/readyState.html: * storage/indexeddb/mozilla/remove-index.html: * storage/indexeddb/mozilla/remove-objectstore.html: * storage/indexeddb/mozilla/resources/add-twice-failure.js: * storage/indexeddb/mozilla/resources/autoincrement-indexes.js: * storage/indexeddb/mozilla/resources/bad-keypath.js: * storage/indexeddb/mozilla/resources/clear.js: * storage/indexeddb/mozilla/resources/create-index-unique.js: * storage/indexeddb/mozilla/resources/create-index-with-integer-keys.js: * storage/indexeddb/mozilla/resources/create-objectstore-basics.js: * storage/indexeddb/mozilla/resources/create-objectstore-null-name.js: * storage/indexeddb/mozilla/resources/cursor-mutation-objectstore-only.js: * storage/indexeddb/mozilla/resources/cursor-mutation.js: * storage/indexeddb/mozilla/resources/cursor-update-updates-indexes.js: * storage/indexeddb/mozilla/resources/cursors.js: * storage/indexeddb/mozilla/resources/delete-result.js: * storage/indexeddb/mozilla/resources/event-source.js: * storage/indexeddb/mozilla/resources/global-data.js: * storage/indexeddb/mozilla/resources/indexes.js: * storage/indexeddb/mozilla/resources/key-requirements-delete-null-key.js: * storage/indexeddb/mozilla/resources/key-requirements-inline-and-passed.js: * storage/indexeddb/mozilla/resources/key-requirements-put-no-key.js: * storage/indexeddb/mozilla/resources/key-requirements-put-null-key.js: * storage/indexeddb/mozilla/resources/key-requirements.js: * storage/indexeddb/mozilla/resources/object-cursors.js: * storage/indexeddb/mozilla/resources/object-identity.js: * storage/indexeddb/mozilla/resources/object-store-inline-autoincrement-key-added-on-put.js: * storage/indexeddb/mozilla/resources/object-store-remove-values.js: * storage/indexeddb/mozilla/resources/objectstorenames.js: * storage/indexeddb/mozilla/resources/odd-result-order.js: * storage/indexeddb/mozilla/resources/open-database-null-name.js: * storage/indexeddb/mozilla/resources/put-get-values.js: * storage/indexeddb/mozilla/resources/readonly-transactions.js: * storage/indexeddb/mozilla/resources/readwrite-transactions.js: * storage/indexeddb/mozilla/resources/readyState.js: * storage/indexeddb/mozilla/resources/remove-index.js: * storage/indexeddb/mozilla/resources/remove-objectstore.js: * storage/indexeddb/mozilla/resources/versionchange-abort.js: * storage/indexeddb/mozilla/versionchange-abort.html: * storage/indexeddb/mutating-cursor.html: * storage/indexeddb/noblobs.html: * storage/indexeddb/object-lookups-in-versionchange.html: * storage/indexeddb/objectStore-required-arguments.html: * storage/indexeddb/objectstore-autoincrement.html: * storage/indexeddb/objectstore-basics-workers.html: * storage/indexeddb/objectstore-basics.html: * storage/indexeddb/objectstore-clear.html: * storage/indexeddb/objectstore-count.html: * storage/indexeddb/objectstore-cursor.html: * storage/indexeddb/objectstore-removeobjectstore.html: * storage/indexeddb/odd-strings.html: * storage/indexeddb/open-bad-versions.html: * storage/indexeddb/open-cursor.html: * storage/indexeddb/open-during-transaction.html: * storage/indexeddb/open-ordering.html: * storage/indexeddb/open-twice-workers.html: * storage/indexeddb/opencursor-key.html: * storage/indexeddb/pending-activity-workers.html: * storage/indexeddb/pending-activity.html: * storage/indexeddb/pending-version-change-on-exit.html: * storage/indexeddb/pending-version-change-stuck-works-with-terminate.html: * storage/indexeddb/pending-version-change-stuck.html: * storage/indexeddb/persistence.html: * storage/indexeddb/prefetch-bugfix-108071.html: * storage/indexeddb/queued-commands.html: * storage/indexeddb/readonly-properties.html: * storage/indexeddb/readonly.html: * storage/indexeddb/removed.html: * storage/indexeddb/request-continue-abort.html: * storage/indexeddb/request-event-propagation.html: * storage/indexeddb/resources/aborted-versionchange-closes.js: * storage/indexeddb/resources/basics.js: * storage/indexeddb/resources/create-and-remove-object-store.js: * storage/indexeddb/resources/create-object-store-options.js: * storage/indexeddb/resources/createIndex-after-failure.js: * storage/indexeddb/resources/createObjectStore-name-argument-required.js: * storage/indexeddb/resources/createObjectStore-null-name.js: * storage/indexeddb/resources/cursor-added-bug.js: * storage/indexeddb/resources/cursor-advance.js: * storage/indexeddb/resources/cursor-continue-dir.js: * storage/indexeddb/resources/cursor-continue-validity.js: * storage/indexeddb/resources/cursor-continue.js: * storage/indexeddb/resources/cursor-delete.js: * storage/indexeddb/resources/cursor-inconsistency.js: * storage/indexeddb/resources/cursor-index-delete.js: * storage/indexeddb/resources/cursor-key-order.js: * storage/indexeddb/resources/cursor-prev-no-duplicate.js: * storage/indexeddb/resources/cursor-primary-key-order.js: * storage/indexeddb/resources/cursor-properties.js: * storage/indexeddb/resources/cursor-reverse-bug.js: * storage/indexeddb/resources/cursor-skip-deleted.js: * storage/indexeddb/resources/cursor-update-value-argument-required.js: * storage/indexeddb/resources/cursor-update.js: * storage/indexeddb/resources/cursor-value.js: * storage/indexeddb/resources/data-corruption.js: * storage/indexeddb/resources/database-basics.js: * storage/indexeddb/resources/database-close.js: * storage/indexeddb/resources/database-closepending-flag.js: * storage/indexeddb/resources/database-deletepending-flag.js: * storage/indexeddb/resources/database-name-undefined.js: * storage/indexeddb/resources/database-odd-names.js: * storage/indexeddb/resources/database-quota.js: * storage/indexeddb/resources/database-wrapper.js: * storage/indexeddb/resources/delete-closed-database-object.js: * storage/indexeddb/resources/delete-in-upgradeneeded-close-in-open-success.js: * storage/indexeddb/resources/delete-in-upgradeneeded-close-in-versionchange.js: * storage/indexeddb/resources/delete-range.js: * storage/indexeddb/resources/deleteIndex.js: * storage/indexeddb/resources/deleteObjectStore-name-argument-required.js: * storage/indexeddb/resources/deleteObjectStore-null-name.js: * storage/indexeddb/resources/deleted-objects.js: * storage/indexeddb/resources/deletedatabase-blocked.js: * storage/indexeddb/resources/deletedatabase-delayed-by-open-and-versionchange.js: * storage/indexeddb/resources/deletedatabase-delayed-by-versionchange.js: * storage/indexeddb/resources/deletedatabase-not-blocked.js: * storage/indexeddb/resources/dont-commit-on-blocked-worker.js: * storage/indexeddb/resources/dont-wedge.js: * storage/indexeddb/resources/duplicates.js: * storage/indexeddb/resources/error-causes-abort-by-default.js: * storage/indexeddb/resources/events.js: * storage/indexeddb/resources/exception-in-event-aborts.js: * storage/indexeddb/resources/exceptions.js: * storage/indexeddb/resources/factory-basics.js: * storage/indexeddb/resources/factory-cmp.js: * storage/indexeddb/resources/factory-deletedatabase.js: * storage/indexeddb/resources/get-keyrange.js: * storage/indexeddb/resources/index-basics.js: * storage/indexeddb/resources/index-count.js: * storage/indexeddb/resources/index-cursor.js: * storage/indexeddb/resources/index-duplicate-keypaths.js: * storage/indexeddb/resources/index-get-key-argument-required.js: * storage/indexeddb/resources/index-multientry.js: * storage/indexeddb/resources/index-population.js: * storage/indexeddb/resources/index-unique.js: * storage/indexeddb/resources/interfaces.js: * storage/indexeddb/resources/intversion-abort-in-initial-upgradeneeded.js: * storage/indexeddb/resources/intversion-bad-parameters.js: * storage/indexeddb/resources/intversion-blocked.js: * storage/indexeddb/resources/intversion-close-between-events.js: * storage/indexeddb/resources/intversion-close-in-oncomplete.js: * storage/indexeddb/resources/intversion-close-in-upgradeneeded.js: * storage/indexeddb/resources/intversion-encoding.js: * storage/indexeddb/resources/intversion-gated-on-delete.js: * storage/indexeddb/resources/intversion-long-queue.js: * storage/indexeddb/resources/intversion-omit-parameter.js: * storage/indexeddb/resources/intversion-open-in-upgradeneeded.js: * storage/indexeddb/resources/intversion-open-with-version.js: * storage/indexeddb/resources/intversion-persistence.js: * storage/indexeddb/resources/intversion-revert-on-abort.js: * storage/indexeddb/resources/intversion-two-opens-no-versions.js: * storage/indexeddb/resources/intversion-upgrades.js: * storage/indexeddb/resources/invalid-keys.js: * storage/indexeddb/resources/key-generator.js: * storage/indexeddb/resources/key-sort-order-across-types.js: * storage/indexeddb/resources/key-sort-order-date.js: * storage/indexeddb/resources/key-type-array.js: * storage/indexeddb/resources/key-type-infinity.js: * storage/indexeddb/resources/keypath-arrays.js: * storage/indexeddb/resources/keypath-basics.js: * storage/indexeddb/resources/keypath-edges.js: * storage/indexeddb/resources/keypath-fetch-key.js: * storage/indexeddb/resources/keypath-intrinsic-properties.js: * storage/indexeddb/resources/keyrange-required-arguments.js: * storage/indexeddb/resources/keyrange.js: * storage/indexeddb/resources/lazy-index-types.js: * storage/indexeddb/resources/legacy-constants.js: * storage/indexeddb/resources/list-ordering.js: * storage/indexeddb/resources/metadata.js: * storage/indexeddb/resources/mutating-cursor.js: * storage/indexeddb/resources/objectStore-required-arguments.js: * storage/indexeddb/resources/objectstore-autoincrement.js: * storage/indexeddb/resources/objectstore-basics.js: * storage/indexeddb/resources/objectstore-clear.js: * storage/indexeddb/resources/objectstore-count.js: * storage/indexeddb/resources/objectstore-cursor.js: * storage/indexeddb/resources/objectstore-removeobjectstore.js: * storage/indexeddb/resources/odd-strings.js: * storage/indexeddb/resources/open-cursor.js: * storage/indexeddb/resources/open-during-transaction.js: * storage/indexeddb/resources/open-ordering.js: * storage/indexeddb/resources/open-twice.js: * storage/indexeddb/resources/opencursor-key.js: * storage/indexeddb/resources/pending-activity.js: * storage/indexeddb/resources/pending-version-change-on-exit.js: * storage/indexeddb/resources/pending-version-change-stuck.js: * storage/indexeddb/resources/persistence.js: * storage/indexeddb/resources/prefetch-bugfix-108071.js: * storage/indexeddb/resources/queued-commands.js: * storage/indexeddb/resources/readonly-properties.js: * storage/indexeddb/resources/readonly.js: * storage/indexeddb/resources/removed.js: * storage/indexeddb/resources/request-continue-abort.js: * storage/indexeddb/resources/request-event-propagation.js: * storage/indexeddb/resources/set_version_blocked.js: * storage/indexeddb/resources/setversion-blocked-by-versionchange-close.js: * storage/indexeddb/resources/setversion-not-blocked.js: * storage/indexeddb/resources/transaction-abort.js: * storage/indexeddb/resources/transaction-active-flag.js: * storage/indexeddb/resources/transaction-after-close.js: * storage/indexeddb/resources/transaction-and-objectstore-calls.js: * storage/indexeddb/resources/transaction-basics.js: * storage/indexeddb/resources/transaction-complete-workers.js: * storage/indexeddb/resources/transaction-coordination-across-databases.js: * storage/indexeddb/resources/transaction-coordination-within-database.js: * storage/indexeddb/resources/transaction-crash-on-abort.js: * storage/indexeddb/resources/transaction-error.js: * storage/indexeddb/resources/transaction-event-propagation.js: * storage/indexeddb/resources/transaction-read-only.js: * storage/indexeddb/resources/transaction-readwrite-exclusive.js: * storage/indexeddb/resources/transaction-rollback.js: * storage/indexeddb/resources/transaction-scope-sequencing.js: * storage/indexeddb/resources/transaction-starvation.js: * storage/indexeddb/resources/transaction-storeNames-required.js: * storage/indexeddb/resources/unblocked-version-changes.js: * storage/indexeddb/resources/unprefix.js: * storage/indexeddb/resources/value-undefined.js: * storage/indexeddb/resources/values-odd-types.js: * storage/indexeddb/resources/version-change-abort.js: * storage/indexeddb/resources/version-change-exclusive.js: * storage/indexeddb/resources/versionchangerequest-activedomobject.js: * storage/indexeddb/set_version_blocked.html: * storage/indexeddb/setversion-blocked-by-versionchange-close.html: * storage/indexeddb/setversion-not-blocked.html: * storage/indexeddb/structured-clone.html: * storage/indexeddb/transaction-abort.html: * storage/indexeddb/transaction-active-flag.html: * storage/indexeddb/transaction-after-close.html: * storage/indexeddb/transaction-and-objectstore-calls.html: * storage/indexeddb/transaction-basics.html: * storage/indexeddb/transaction-complete-with-js-recursion-cross-frame.html: * storage/indexeddb/transaction-complete-with-js-recursion.html: * storage/indexeddb/transaction-complete-workers.html: * storage/indexeddb/transaction-coordination-across-databases.html: * storage/indexeddb/transaction-coordination-within-database.html: * storage/indexeddb/transaction-crash-in-tasks.html: * storage/indexeddb/transaction-crash-on-abort.html: * storage/indexeddb/transaction-error.html: * storage/indexeddb/transaction-event-propagation.html: * storage/indexeddb/transaction-read-only.html: * storage/indexeddb/transaction-readwrite-exclusive.html: * storage/indexeddb/transaction-rollback.html: * storage/indexeddb/transaction-scope-sequencing.html: * storage/indexeddb/transaction-starvation.html: * storage/indexeddb/transaction-storeNames-required.html: * storage/indexeddb/unblocked-version-changes.html: * storage/indexeddb/unprefix-workers.html: * storage/indexeddb/unprefix.html: * storage/indexeddb/value-undefined.html: * storage/indexeddb/values-odd-types.html: * storage/indexeddb/version-change-abort.html: * storage/indexeddb/version-change-exclusive.html: * storage/indexeddb/versionchangerequest-activedomobject.html: * storage/script-tests/TEMPLATE.html: * storage/storageinfo-missing-arguments.html: * storage/storageinfo-no-callbacks.html: * storage/storageinfo-query-usage.html: * storage/storageinfo-request-quota.html: * storage/storagequota-query-usage.html: * storage/storagequota-request-quota.html: * storage/websql/execute-sql-rowsAffected.html: * svg/animations/accumulate-values-width-animation.html: * svg/animations/additive-from-to-width-animation.html: * svg/animations/additive-type-by-animation.html: * svg/animations/additive-values-width-animation.html: * svg/animations/animVal-basics.html: * svg/animations/animate-calcMode-spline-by.html: * svg/animations/animate-calcMode-spline-from-by.html: * svg/animations/animate-calcMode-spline-from-to.html: * svg/animations/animate-calcMode-spline-to.html: * svg/animations/animate-calcMode-spline-values.html: * svg/animations/animate-color-calcMode-discrete.html: * svg/animations/animate-color-fill-currentColor.html: * svg/animations/animate-color-fill-from-by.html: * svg/animations/animate-color-rgba-calcMode-discrete.html: * svg/animations/animate-color-transparent.html: * svg/animations/animate-css-xml-attributeType.html: * svg/animations/animate-currentColor.html: * svg/animations/animate-dynamic-update-attributeName.html: * svg/animations/animate-elem-02-t-drt.html: * svg/animations/animate-elem-03-t-drt.html: * svg/animations/animate-elem-04-t-drt.html: * svg/animations/animate-elem-05-t-drt.html: * svg/animations/animate-elem-06-t-drt.html: * svg/animations/animate-elem-07-t-drt.html: * svg/animations/animate-elem-08-t-drt.html: * svg/animations/animate-elem-09-t-drt.html: * svg/animations/animate-elem-10-t-drt.html: * svg/animations/animate-elem-11-t-drt.html: * svg/animations/animate-elem-12-t-drt.html: * svg/animations/animate-elem-13-t-drt.html: * svg/animations/animate-elem-14-t-drt.html: * svg/animations/animate-elem-15-t-drt.html: * svg/animations/animate-elem-16-t-drt.html: * svg/animations/animate-elem-17-t-drt.html: * svg/animations/animate-elem-18-t-drt.html: * svg/animations/animate-elem-19-t-drt.html: * svg/animations/animate-end-attribute-numeric-precision.html: * svg/animations/animate-end-attribute.html: * svg/animations/animate-endElement-beginElement.html: * svg/animations/animate-from-to-keyTimes.html: * svg/animations/animate-gradient-transform.html: * svg/animations/animate-inherit-css-property.html: * svg/animations/animate-insert-begin.html: * svg/animations/animate-insert-no-begin.html: * svg/animations/animate-keySplines.html: * svg/animations/animate-marker-orient-from-angle-to-angle.html: * svg/animations/animate-marker-orient-from-angle-to-auto.html: * svg/animations/animate-marker-orient-to-angle.html: * svg/animations/animate-mpath-insert.html: * svg/animations/animate-number-calcMode-discrete-keyTimes.html: * svg/animations/animate-number-calcMode-discrete.html: * svg/animations/animate-path-animation-Cc-Ss.html: * svg/animations/animate-path-animation-Ll-Vv-Hh.html: * svg/animations/animate-path-animation-Qq-Tt.html: * svg/animations/animate-path-animation-cC-sS-inverse.html: * svg/animations/animate-path-animation-lL-vV-hH-inverse.html: * svg/animations/animate-path-animation-qQ-tT-inverse.html: * svg/animations/animate-path-nested-transforms.html: * svg/animations/animate-path-to-animation.html: * svg/animations/animate-reset-freeze.html: * svg/animations/animate-setcurrenttime.html: * svg/animations/animate-text-nested-transforms.html: * svg/animations/animateTransform-pattern-transform.html: * svg/animations/animateTransform-translate-attributetype-auto.html: * svg/animations/animateTransform-translate-invalid-attributetype.html: * svg/animations/attributeTypes.html: * svg/animations/change-baseVal-while-animating-fill-freeze-2.html: * svg/animations/change-baseVal-while-animating-fill-freeze.html: * svg/animations/change-baseVal-while-animating-fill-remove-2.html: * svg/animations/change-baseVal-while-animating-fill-remove.html: * svg/animations/change-css-property-while-animating-fill-freeze.html: * svg/animations/change-css-property-while-animating-fill-remove.html: * svg/animations/change-target-while-animating-SVG-property.html: * svg/animations/deferred-insertion.html: * svg/animations/dynamic-modify-attributename-crash2.svg: * svg/animations/force-use-shadow-tree-recreation-while-animating.html: * svg/animations/multiple-animations-ending.html: * svg/animations/multiple-animations-fill-freeze.html: * svg/animations/multiple-begin-additive-animation.html: * svg/animations/non-additive-type-by-animation.html: * svg/animations/non-additive-type-from-by-animation.html: * svg/animations/reinserting-svg-into-document.html: * svg/animations/remove-animation-element-while-animation-is-running.html: * svg/animations/single-values-animation.html: * svg/animations/svgPreserveAspectRatio-animation-1.html: * svg/animations/svgangle-animation-deg-to-grad.html: * svg/animations/svgangle-animation-deg-to-rad.html: * svg/animations/svgangle-animation-grad-to-deg.html: * svg/animations/svgangle-animation-grad-to-rad.html: * svg/animations/svgangle-animation-rad-to-deg.html: * svg/animations/svgangle-animation-rad-to-grad.html: * svg/animations/svgboolean-animation-1.html: * svg/animations/svgenum-animation-1.html: * svg/animations/svgenum-animation-10.html: * svg/animations/svgenum-animation-11.html: * svg/animations/svgenum-animation-12.html: * svg/animations/svgenum-animation-13.html: * svg/animations/svgenum-animation-2.html: * svg/animations/svgenum-animation-3.html: * svg/animations/svgenum-animation-4.html: * svg/animations/svgenum-animation-5.html: * svg/animations/svgenum-animation-6.html: * svg/animations/svgenum-animation-7.html: * svg/animations/svgenum-animation-8.html: * svg/animations/svgenum-animation-9.html: * svg/animations/svginteger-animation-1.html: * svg/animations/svginteger-animation-2.html: * svg/animations/svglength-additive-by-1.html: * svg/animations/svglength-additive-by-2.html: * svg/animations/svglength-additive-by-3.html: * svg/animations/svglength-additive-by-4.html: * svg/animations/svglength-additive-by-5.html: * svg/animations/svglength-additive-by-6.html: * svg/animations/svglength-additive-from-by-1.html: * svg/animations/svglength-additive-from-by-2.html: * svg/animations/svglength-additive-from-by-3.html: * svg/animations/svglength-additive-from-by-4.html: * svg/animations/svglength-animation-LengthModeHeight.html: * svg/animations/svglength-animation-LengthModeOther.html: * svg/animations/svglength-animation-LengthModeWidth.html: * svg/animations/svglength-animation-invalid-value-1.html: * svg/animations/svglength-animation-invalid-value-2.html: * svg/animations/svglength-animation-invalid-value-3.html: * svg/animations/svglength-animation-number-to-number.html: * svg/animations/svglength-animation-px-to-cm.html: * svg/animations/svglength-animation-px-to-ems.html: * svg/animations/svglength-animation-px-to-exs.html: * svg/animations/svglength-animation-px-to-in.html: * svg/animations/svglength-animation-px-to-number.html: * svg/animations/svglength-animation-px-to-pc.html: * svg/animations/svglength-animation-px-to-percentage.html: * svg/animations/svglength-animation-px-to-pt.html: * svg/animations/svglength-animation-px-to-px.html: * svg/animations/svglength-animation-unitType.html: * svg/animations/svglength-animation-values.html: * svg/animations/svglengthlist-animation-1.html: * svg/animations/svglengthlist-animation-2.html: * svg/animations/svglengthlist-animation-3.html: * svg/animations/svglengthlist-animation-4.html: * svg/animations/svglengthlist-animation-5.html: * svg/animations/svgnumber-animation-1.html: * svg/animations/svgnumber-animation-2.html: * svg/animations/svgnumber-animation-3.html: * svg/animations/svgnumber-animation-4.html: * svg/animations/svgnumberlist-animation-1.html: * svg/animations/svgnumberlist-animation-2.html: * svg/animations/svgnumberoptionalnumber-animation-1.html: * svg/animations/svgnumberoptionalnumber-animation-2.html: * svg/animations/svgnumberoptionalnumber-animation-3.html: * svg/animations/svgnumberoptionalnumber-animation-4.html: * svg/animations/svgpath-animation-1.html: * svg/animations/svgpointlist-animation-1.html: * svg/animations/svgpointlist-animation-2.html: * svg/animations/svgrect-animation-1.html: * svg/animations/svgrect-animation-2.html: * svg/animations/svgstring-animation-1.html: * svg/animations/svgstring-animation-fallback-to-discrete.html: * svg/animations/svgtransform-animation-1.html: * svg/animations/svgtransform-animation-discrete.html: * svg/animations/use-animate-transform-and-position.html: * svg/as-image/svg-canvas-link-not-colored.html: * svg/as-image/svg-canvas-xhtml-tainted.html: * svg/as-image/svg-container-size-after-reload.html: * svg/as-object/embedded-svg-immediate-offsetWidth-query.html: * svg/as-object/embedded-svg-size-changes.html: * svg/as-object/nested-embedded-svg-size-changes.html: * svg/css/buffered-rendering.html: * svg/css/case-sensitive-attrname-selectors.html: * svg/css/glyph-orientation-rounding-test.xhtml: * svg/css/mask-type.html: * svg/css/rect-system-color.xhtml: * svg/css/scientific-numbers.html: * svg/css/svg-attribute-length-parsing.html: * svg/css/svg-attribute-parser-mode.html: * svg/custom/SVGException.html: * svg/custom/acid3-test-77.html: * svg/custom/currentColor-on-color.html: * svg/custom/document-all-includes-svg.html: * svg/custom/focus-event-handling-keyboard.xhtml: * svg/custom/focus-event-handling.xhtml: * svg/custom/frame-getSVGDocument.html: * svg/custom/getBoundingClientRect.xhtml: * svg/custom/getSubStringLength.html: * svg/custom/global-constructors.html: * svg/custom/immutable-properties.html: * svg/custom/invalid-length-units.html: * svg/custom/loadevents-async.html: * svg/custom/poly-parsing-error.html: * svg/custom/script-tests/TEMPLATE.html: * svg/custom/selectSubString.html: * svg/custom/svg-createsvgtransform-type.html: * svg/custom/svg-fonts-in-text-controls.html: * svg/custom/svg-getelementid.xhtml: * svg/custom/svg-modify-currentTranslate.html: * svg/custom/svg-viewBox-dynamic.html: * svg/custom/svg-xml-dom-sync.html: * svg/custom/tearoffs-with-tearoffs.html: * svg/custom/use-href-update-crash.svg: * svg/custom/use-instanceRoot-as-event-target.xhtml: * svg/custom/use-instanceRoot-event-bubbling.xhtml: * svg/custom/use-instanceRoot-event-listeners.xhtml: * svg/custom/window-named-item-lookup.html: * svg/dom/SVGAngle.html: * svg/dom/SVGAnimatedAngle.html: * svg/dom/SVGAnimatedBoolean.html: * svg/dom/SVGAnimatedEnumeration-SVGClipPathElement.html: * svg/dom/SVGAnimatedEnumeration-SVGComponentTransferFunctionElement.html: * svg/dom/SVGAnimatedEnumeration-SVGFEBlendElement.html: * svg/dom/SVGAnimatedEnumeration-SVGFEColorMatrixElement.html: * svg/dom/SVGAnimatedEnumeration-SVGFECompositeElement.html: * svg/dom/SVGAnimatedEnumeration-SVGFEConvolveMatrixElement.html: * svg/dom/SVGAnimatedEnumeration-SVGFEDisplacementMapElement.html: * svg/dom/SVGAnimatedEnumeration-SVGFEMorphologyElement.html: * svg/dom/SVGAnimatedEnumeration-SVGFETurbulenceElement.html: * svg/dom/SVGAnimatedEnumeration-SVGFilterElement.html: * svg/dom/SVGAnimatedEnumeration-SVGGradientElement.html: * svg/dom/SVGAnimatedEnumeration-SVGMarkerElement.html: * svg/dom/SVGAnimatedEnumeration-SVGMaskElement.html: * svg/dom/SVGAnimatedEnumeration-SVGPatternElement.html: * svg/dom/SVGAnimatedEnumeration-SVGTextContentElement.html: * svg/dom/SVGAnimatedEnumeration-SVGTextPathElement.html: * svg/dom/SVGAnimatedEnumeration.html: * svg/dom/SVGAnimatedInteger.html: * svg/dom/SVGAnimatedLength.html: * svg/dom/SVGAnimatedLengthList.html: * svg/dom/SVGAnimatedNumber.html: * svg/dom/SVGAnimatedNumberList.html: * svg/dom/SVGAnimatedPreserveAspectRatio.html: * svg/dom/SVGAnimatedRect.html: * svg/dom/SVGColor.html: * svg/dom/SVGLength-px-with-context.html: * svg/dom/SVGLength-px.html: * svg/dom/SVGLength.html: * svg/dom/SVGLengthList-appendItem.xhtml: * svg/dom/SVGLengthList-basics.xhtml: * svg/dom/SVGLengthList-getItem.xhtml: * svg/dom/SVGLengthList-initialize.xhtml: * svg/dom/SVGLengthList-insertItemBefore.xhtml: * svg/dom/SVGLengthList-removeItem.xhtml: * svg/dom/SVGLengthList-replaceItem.xhtml: * svg/dom/SVGLengthList-xml-dom-modifications.xhtml: * svg/dom/SVGLocatable-getCTM-svg-root.html: * svg/dom/SVGMatrix-interface.xhtml: * svg/dom/SVGMatrix.html: * svg/dom/SVGNumber.html: * svg/dom/SVGNumberList-basics.xhtml: * svg/dom/SVGPaint.html: * svg/dom/SVGPathSegList-appendItem.xhtml: * svg/dom/SVGPathSegList-clear-and-initialize.xhtml: * svg/dom/SVGPathSegList-insertItemBefore.xhtml: * svg/dom/SVGPathSegList-removeItem.xhtml: * svg/dom/SVGPathSegList-replaceItem.xhtml: * svg/dom/SVGPathSegList-xml-dom-synchronization.xhtml: * svg/dom/SVGPoint.html: * svg/dom/SVGPointList-basics.xhtml: * svg/dom/SVGPreserveAspectRatio.html: * svg/dom/SVGRect.html: * svg/dom/SVGStringList-basics.xhtml: * svg/dom/SVGStringList.html: * svg/dom/SVGStyleElement/disable-svg-style-element.html: * svg/dom/SVGStyleElement/script-tests/TEMPLATE.html: * svg/dom/SVGStyleElement/style-langspace.html: * svg/dom/SVGTransform.html: * svg/dom/SVGTransformList-basics.xhtml: * svg/dom/SVGTransformList.html: * svg/dom/SVGViewSpec-defaults.html: * svg/dom/SVGViewSpec-invalid-ref-crash.html: * svg/dom/SVGViewSpec.html: * svg/dom/altGlyph-dom.xhtml: * svg/dom/baseVal-animVal-crash.html: * svg/dom/css-transforms.xhtml: * svg/dom/feFlood-no-in1.html: * svg/dom/font-face-elements.html: * svg/dom/fuzz-path-parser.html: * svg/dom/getElementsByTagName-localName-matching.html: * svg/dom/id-reflect.html: * svg/dom/length-list-parser.html: * svg/dom/operatorAttribute.html: * svg/dom/path-parser.html: * svg/dom/path-pointAtLength.html: * svg/dom/path-segments.html: * svg/dom/path-totalLength.html: * svg/dom/points-parser.html: * svg/dom/preserve-aspect-ratio-parser.html: * svg/dom/resources/viewspec-parser.js: (continueFuzzing): * svg/dom/rgb-color-parser.html: * svg/dom/script-tests/SVGViewSpec.js: (completeTest): * svg/dom/script-tests/TEMPLATE.html: * svg/dom/string-list-parser.html: * svg/dom/style-reflect.html: * svg/dom/svg2-inheritance.html: * svg/dom/svglist-exception-on-out-bounds-error.html: * svg/dom/svglist-insertItemBefore-appends.html: * svg/dom/svgpath-getPathSegAtLength.html: * svg/dom/svgpath-out-of-bounds-getPathSeg.html: * svg/dom/text-rotate-live.html: * svg/dom/transform-parser.html: * svg/dom/viewspec-parser-1.html: * svg/dom/viewspec-parser-2.html: * svg/dom/viewspec-parser-3.html: * svg/dom/viewspec-parser-4.html: * svg/dom/viewspec-parser-5.html: * svg/dom/viewspec-parser-6.html: * svg/dom/viewspec-parser-7.html: * svg/dynamic-updates/SVG-dynamic-css-transform.html: * svg/dynamic-updates/SVGAElement-dom-href-attr.html: * svg/dynamic-updates/SVGAElement-dom-target-attr.html: * svg/dynamic-updates/SVGAElement-svgdom-href-prop.html: * svg/dynamic-updates/SVGAElement-svgdom-target-prop.html: * svg/dynamic-updates/SVGCircleElement-dom-cx-attr.html: * svg/dynamic-updates/SVGCircleElement-dom-cy-attr.html: * svg/dynamic-updates/SVGCircleElement-dom-r-attr.html: * svg/dynamic-updates/SVGCircleElement-dom-requiredFeatures.html: * svg/dynamic-updates/SVGCircleElement-svgdom-cx-prop.html: * svg/dynamic-updates/SVGCircleElement-svgdom-cy-prop.html: * svg/dynamic-updates/SVGCircleElement-svgdom-r-prop.html: * svg/dynamic-updates/SVGCircleElement-svgdom-requiredFeatures.html: * svg/dynamic-updates/SVGClipPath-influences-hitTesting.html: * svg/dynamic-updates/SVGClipPathElement-css-transform-influences-hitTesting.html: * svg/dynamic-updates/SVGClipPathElement-dom-clipPathUnits-attr.html: * svg/dynamic-updates/SVGClipPathElement-svgdom-clipPathUnits-prop.html: * svg/dynamic-updates/SVGClipPathElement-transform-influences-hitTesting.html: * svg/dynamic-updates/SVGCursorElement-dom-x-attr.html: * svg/dynamic-updates/SVGCursorElement-dom-y-attr.html: * svg/dynamic-updates/SVGCursorElement-svgdom-x-prop.html: * svg/dynamic-updates/SVGCursorElement-svgdom-y-prop.html: * svg/dynamic-updates/SVGEllipseElement-dom-cx-attr.html: * svg/dynamic-updates/SVGEllipseElement-dom-cy-attr.html: * svg/dynamic-updates/SVGEllipseElement-dom-requiredFeatures.html: * svg/dynamic-updates/SVGEllipseElement-dom-rx-attr.html: * svg/dynamic-updates/SVGEllipseElement-dom-ry-attr.html: * svg/dynamic-updates/SVGEllipseElement-svgdom-cx-prop.html: * svg/dynamic-updates/SVGEllipseElement-svgdom-cy-prop.html: * svg/dynamic-updates/SVGEllipseElement-svgdom-requiredFeatures.html: * svg/dynamic-updates/SVGEllipseElement-svgdom-rx-prop.html: * svg/dynamic-updates/SVGEllipseElement-svgdom-ry-prop.html: * svg/dynamic-updates/SVGFEBlendElement-dom-in-attr.html: * svg/dynamic-updates/SVGFEBlendElement-dom-in2-attr.html: * svg/dynamic-updates/SVGFEBlendElement-dom-mode-attr.html: * svg/dynamic-updates/SVGFEBlendElement-svgdom-in-prop.html: * svg/dynamic-updates/SVGFEBlendElement-svgdom-in2-prop.html: * svg/dynamic-updates/SVGFEBlendElement-svgdom-mode-prop.html: * svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr.html: * svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr.html: * svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr.html: * svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop.html: * svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop.html: * svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop.html: * svg/dynamic-updates/SVGFEComponentTransferElement-dom-amplitude-attr.html: * svg/dynamic-updates/SVGFEComponentTransferElement-dom-exponent-attr.html: * svg/dynamic-updates/SVGFEComponentTransferElement-dom-intercept-attr.html: * svg/dynamic-updates/SVGFEComponentTransferElement-dom-offset-attr.html: * svg/dynamic-updates/SVGFEComponentTransferElement-dom-slope-attr.html: * svg/dynamic-updates/SVGFEComponentTransferElement-dom-tableValues-attr.html: * svg/dynamic-updates/SVGFEComponentTransferElement-dom-type-attr.html: * svg/dynamic-updates/SVGFEComponentTransferElement-svgdom-amplitude-prop.html: * svg/dynamic-updates/SVGFEComponentTransferElement-svgdom-exponent-prop.html: * svg/dynamic-updates/SVGFEComponentTransferElement-svgdom-intercept-prop.html: * svg/dynamic-updates/SVGFEComponentTransferElement-svgdom-offset-prop.html: * svg/dynamic-updates/SVGFEComponentTransferElement-svgdom-slope-prop.html: * svg/dynamic-updates/SVGFEComponentTransferElement-svgdom-tableValues-prop.html: * svg/dynamic-updates/SVGFEComponentTransferElement-svgdom-type-prop.html: * svg/dynamic-updates/SVGFECompositeElement-dom-in-attr.html: * svg/dynamic-updates/SVGFECompositeElement-dom-in2-attr.html: * svg/dynamic-updates/SVGFECompositeElement-dom-k1-attr.html: * svg/dynamic-updates/SVGFECompositeElement-dom-k2-attr.html: * svg/dynamic-updates/SVGFECompositeElement-dom-k3-attr.html: * svg/dynamic-updates/SVGFECompositeElement-dom-k4-attr.html: * svg/dynamic-updates/SVGFECompositeElement-dom-operator-attr.html: * svg/dynamic-updates/SVGFECompositeElement-svgdom-in-prop.html: * svg/dynamic-updates/SVGFECompositeElement-svgdom-in2-prop.html: * svg/dynamic-updates/SVGFECompositeElement-svgdom-k1-prop.html: * svg/dynamic-updates/SVGFECompositeElement-svgdom-k2-prop.html: * svg/dynamic-updates/SVGFECompositeElement-svgdom-k3-prop.html: * svg/dynamic-updates/SVGFECompositeElement-svgdom-k4-prop.html: * svg/dynamic-updates/SVGFECompositeElement-svgdom-operator-prop.html: * svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-bias-attr.html: * svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-divisor-attr.html: * svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-edgeMode-attr.html: * svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-in-attr.html: * svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-kernelMatrix-attr.html: * svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-kernelUnitLength-attr.html: * svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-order-attr.html: * svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-preserveAlpha-attr.html: * svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-targetX-attr.html: * svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-targetY-attr.html: * svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-bias-prop.html: * svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-divisor-prop.html: * svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-edgeMode-prop.html: * svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-in-prop.html: * svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-kernelMatrix-prop.html: * svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-kernelUnitLength-prop.html: * svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-order-prop.html: * svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-preserveAlpha-prop.html: * svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-targetX-prop.html: * svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-targetY-prop.html: * svg/dynamic-updates/SVGFEDiffuseLightingElement-dom-diffuseConstant-attr.html: * svg/dynamic-updates/SVGFEDiffuseLightingElement-dom-in-attr.html: * svg/dynamic-updates/SVGFEDiffuseLightingElement-dom-lighting-color-attr.html: * svg/dynamic-updates/SVGFEDiffuseLightingElement-dom-surfaceScale-attr.html: * svg/dynamic-updates/SVGFEDiffuseLightingElement-inherit-lighting-color-css-prop.html: * svg/dynamic-updates/SVGFEDiffuseLightingElement-lighting-color-css-prop.html: * svg/dynamic-updates/SVGFEDiffuseLightingElement-svgdom-diffuseConstant-prop.html: * svg/dynamic-updates/SVGFEDiffuseLightingElement-svgdom-in-prop.html: * svg/dynamic-updates/SVGFEDiffuseLightingElement-svgdom-surfaceScale-prop.html: * svg/dynamic-updates/SVGFEDisplacementMapElement-dom-in-attr.html: * svg/dynamic-updates/SVGFEDisplacementMapElement-dom-in2-attr.html: * svg/dynamic-updates/SVGFEDisplacementMapElement-dom-scale-attr.html: * svg/dynamic-updates/SVGFEDisplacementMapElement-dom-xChannelSelector-attr.html: * svg/dynamic-updates/SVGFEDisplacementMapElement-dom-yChannelSelector-attr.html: * svg/dynamic-updates/SVGFEDisplacementMapElement-svgdom-in-prop.html: * svg/dynamic-updates/SVGFEDisplacementMapElement-svgdom-in2-prop.html: * svg/dynamic-updates/SVGFEDisplacementMapElement-svgdom-scale-prop.html: * svg/dynamic-updates/SVGFEDisplacementMapElement-svgdom-xChannelSelector-prop.html: * svg/dynamic-updates/SVGFEDisplacementMapElement-svgdom-yChannelSelector-prop.html: * svg/dynamic-updates/SVGFEDistantLightElement-dom-azimuth-attr.html: * svg/dynamic-updates/SVGFEDistantLightElement-dom-elevation-attr.html: * svg/dynamic-updates/SVGFEDistantLightElement-svgdom-azimuth-prop.html: * svg/dynamic-updates/SVGFEDistantLightElement-svgdom-elevation-prop.html: * svg/dynamic-updates/SVGFEDropShadowElement-dom-dx-attr.html: * svg/dynamic-updates/SVGFEDropShadowElement-dom-dy-attr.html: * svg/dynamic-updates/SVGFEDropShadowElement-dom-in-attr.html: * svg/dynamic-updates/SVGFEDropShadowElement-dom-shadow-color-attr.html: * svg/dynamic-updates/SVGFEDropShadowElement-dom-shadow-opacity-attr.html: * svg/dynamic-updates/SVGFEDropShadowElement-dom-stdDeviation-attr.html: * svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dx-prop.html: * svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dy-prop.html: * svg/dynamic-updates/SVGFEDropShadowElement-svgdom-in-prop.html: * svg/dynamic-updates/SVGFEDropShadowElement-svgdom-shadow-color-prop.html: * svg/dynamic-updates/SVGFEDropShadowElement-svgdom-shadow-opacity-prop.html: * svg/dynamic-updates/SVGFEDropShadowElement-svgdom-stdDeviation-prop.html: * svg/dynamic-updates/SVGFEFloodElement-dom-flood-color-attr.html: * svg/dynamic-updates/SVGFEFloodElement-dom-flood-opacity-attr.html: * svg/dynamic-updates/SVGFEFloodElement-inherit-flood-color.html: * svg/dynamic-updates/SVGFEFloodElement-svgdom-flood-color-prop.html: * svg/dynamic-updates/SVGFEFloodElement-svgdom-flood-opacity-prop.html: * svg/dynamic-updates/SVGFEGaussianBlurElement-dom-edgeMode-attr.html: * svg/dynamic-updates/SVGFEGaussianBlurElement-dom-in-attr.html: * svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-attr.html: * svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-call.html: * svg/dynamic-updates/SVGFEGaussianBlurElement-svgdom-edgeMode-prop.html: * svg/dynamic-updates/SVGFEGaussianBlurElement-svgdom-in-prop.html: * svg/dynamic-updates/SVGFEImageElement-dom-preserveAspectRatio-attr.html: * svg/dynamic-updates/SVGFEImageElement-svgdom-preserveAspectRatio-prop.html: * svg/dynamic-updates/SVGFEMergeNodeElement-dom-in-attr.html: * svg/dynamic-updates/SVGFEMergeNodeElement-svgdom-in-prop.html: * svg/dynamic-updates/SVGFEMorphologyElement-dom-in-attr.html: * svg/dynamic-updates/SVGFEMorphologyElement-dom-operator-attr.html: * svg/dynamic-updates/SVGFEMorphologyElement-dom-radius-attr.html: * svg/dynamic-updates/SVGFEMorphologyElement-svgdom-in-prop.html: * svg/dynamic-updates/SVGFEMorphologyElement-svgdom-operator-prop.html: * svg/dynamic-updates/SVGFEMorphologyElement-svgdom-radius-call.html: * svg/dynamic-updates/SVGFEOffsetElement-dom-dx-attr.html: * svg/dynamic-updates/SVGFEOffsetElement-dom-dy-attr.html: * svg/dynamic-updates/SVGFEOffsetElement-dom-in-attr.html: * svg/dynamic-updates/SVGFEOffsetElement-svgdom-dx-prop.html: * svg/dynamic-updates/SVGFEOffsetElement-svgdom-dy-prop.html: * svg/dynamic-updates/SVGFEOffsetElement-svgdom-in-prop.html: * svg/dynamic-updates/SVGFEPointLightElement-dom-x-attr.html: * svg/dynamic-updates/SVGFEPointLightElement-dom-y-attr.html: * svg/dynamic-updates/SVGFEPointLightElement-dom-z-attr.html: * svg/dynamic-updates/SVGFEPointLightElement-svgdom-x-prop.html: * svg/dynamic-updates/SVGFEPointLightElement-svgdom-y-prop.html: * svg/dynamic-updates/SVGFEPointLightElement-svgdom-z-prop.html: * svg/dynamic-updates/SVGFESpecularLightingElement-dom-in-attr.html: * svg/dynamic-updates/SVGFESpecularLightingElement-dom-specularConstant-attr.html: * svg/dynamic-updates/SVGFESpecularLightingElement-dom-specularExponent-attr.html: * svg/dynamic-updates/SVGFESpecularLightingElement-dom-suraceScale-attr.html: * svg/dynamic-updates/SVGFESpecularLightingElement-inherit-lighting-color-css-prop.html: * svg/dynamic-updates/SVGFESpecularLightingElement-lighting-color-css-prop.html: * svg/dynamic-updates/SVGFESpecularLightingElement-remove-lightSource.html: * svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-in-prop.html: * svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-specularConstant-prop.html: * svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-specularExponent-prop.html: * svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-suraceScale-prop.html: * svg/dynamic-updates/SVGFESpotLightElement-dom-limitingConeAngle-attr.html: * svg/dynamic-updates/SVGFESpotLightElement-dom-pointsAtX-attr.html: * svg/dynamic-updates/SVGFESpotLightElement-dom-pointsAtY-attr.html: * svg/dynamic-updates/SVGFESpotLightElement-dom-pointsAtZ-attr.html: * svg/dynamic-updates/SVGFESpotLightElement-dom-specularExponent-attr.html: * svg/dynamic-updates/SVGFESpotLightElement-dom-x-attr.html: * svg/dynamic-updates/SVGFESpotLightElement-dom-y-attr.html: * svg/dynamic-updates/SVGFESpotLightElement-dom-z-attr.html: * svg/dynamic-updates/SVGFESpotLightElement-svgdom-limitingConeAngle-prop.html: * svg/dynamic-updates/SVGFESpotLightElement-svgdom-pointsAtX-prop.html: * svg/dynamic-updates/SVGFESpotLightElement-svgdom-pointsAtY-prop.html: * svg/dynamic-updates/SVGFESpotLightElement-svgdom-pointsAtZ-prop.html: * svg/dynamic-updates/SVGFESpotLightElement-svgdom-specularExponent-prop.html: * svg/dynamic-updates/SVGFESpotLightElement-svgdom-x-prop.html: * svg/dynamic-updates/SVGFESpotLightElement-svgdom-y-prop.html: * svg/dynamic-updates/SVGFESpotLightElement-svgdom-z-prop.html: * svg/dynamic-updates/SVGFETileElement-dom-in-attr.html: * svg/dynamic-updates/SVGFETileElement-svgdom-in-prop.html: * svg/dynamic-updates/SVGFETurbulenceElement-dom-baseFrequency-attr.html: * svg/dynamic-updates/SVGFETurbulenceElement-dom-numOctaves-attr.html: * svg/dynamic-updates/SVGFETurbulenceElement-dom-seed-attr.html: * svg/dynamic-updates/SVGFETurbulenceElement-dom-stitchTiles-attr.html: * svg/dynamic-updates/SVGFETurbulenceElement-dom-type-attr.html: * svg/dynamic-updates/SVGFETurbulenceElement-svgdom-baseFrequency-prop.html: * svg/dynamic-updates/SVGFETurbulenceElement-svgdom-numOctaves-prop.html: * svg/dynamic-updates/SVGFETurbulenceElement-svgdom-seed-prop.html: * svg/dynamic-updates/SVGFETurbulenceElement-svgdom-stitchTiles-prop.html: * svg/dynamic-updates/SVGFETurbulenceElement-svgdom-type-prop.html: * svg/dynamic-updates/SVGFilterElement-dom-filterRes-attr.html: * svg/dynamic-updates/SVGFilterElement-dom-filterUnits-attr.html: * svg/dynamic-updates/SVGFilterElement-dom-height-attr.html: * svg/dynamic-updates/SVGFilterElement-dom-primitiveUnits-attr.html: * svg/dynamic-updates/SVGFilterElement-dom-width-attr.html: * svg/dynamic-updates/SVGFilterElement-dom-x-attr.html: * svg/dynamic-updates/SVGFilterElement-dom-y-attr.html: * svg/dynamic-updates/SVGFilterElement-svgdom-filterRes-call.html: * svg/dynamic-updates/SVGFilterElement-svgdom-filterResX-prop.html: * svg/dynamic-updates/SVGFilterElement-svgdom-filterResY-prop.html: * svg/dynamic-updates/SVGFilterElement-svgdom-filterUnits-prop.html: * svg/dynamic-updates/SVGFilterElement-svgdom-height-prop.html: * svg/dynamic-updates/SVGFilterElement-svgdom-primitiveUnits-prop.html: * svg/dynamic-updates/SVGFilterElement-svgdom-width-prop.html: * svg/dynamic-updates/SVGFilterElement-svgdom-x-prop.html: * svg/dynamic-updates/SVGFilterElement-svgdom-y-prop.html: * svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-dom-height-attr.html: * svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-dom-result-attr.html: * svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-dom-width-attr.html: * svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-dom-x-attr.html: * svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-dom-y-attr.html: * svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-svgdom-height-prop.html: * svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-svgdom-result-prop.html: * svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-svgdom-width-prop.html: * svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-svgdom-x-prop.html: * svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-svgdom-y-prop.html: * svg/dynamic-updates/SVGForeignObjectElement-dom-height-attr.html: * svg/dynamic-updates/SVGForeignObjectElement-dom-requiredFeatures.html: * svg/dynamic-updates/SVGForeignObjectElement-dom-width-attr.html: * svg/dynamic-updates/SVGForeignObjectElement-dom-x-attr.html: * svg/dynamic-updates/SVGForeignObjectElement-dom-y-attr.html: * svg/dynamic-updates/SVGForeignObjectElement-svgdom-height-prop.html: * svg/dynamic-updates/SVGForeignObjectElement-svgdom-requiredFeatures.html: * svg/dynamic-updates/SVGForeignObjectElement-svgdom-width-prop.html: * svg/dynamic-updates/SVGForeignObjectElement-svgdom-x-prop.html: * svg/dynamic-updates/SVGForeignObjectElement-svgdom-y-prop.html: * svg/dynamic-updates/SVGGElement-dom-requiredFeatures.html: * svg/dynamic-updates/SVGGElement-svgdom-requiredFeatures.html: * svg/dynamic-updates/SVGImageElement-dom-height-attr.html: * svg/dynamic-updates/SVGImageElement-dom-preserveAspectRatio-attr.html: * svg/dynamic-updates/SVGImageElement-dom-requiredFeatures.html: * svg/dynamic-updates/SVGImageElement-dom-width-attr.html: * svg/dynamic-updates/SVGImageElement-dom-x-attr.html: * svg/dynamic-updates/SVGImageElement-dom-y-attr.html: * svg/dynamic-updates/SVGImageElement-svgdom-height-prop.html: * svg/dynamic-updates/SVGImageElement-svgdom-preserveAspectRatio-prop.html: * svg/dynamic-updates/SVGImageElement-svgdom-requiredFeatures.html: * svg/dynamic-updates/SVGImageElement-svgdom-width-prop.html: * svg/dynamic-updates/SVGImageElement-svgdom-x-prop.html: * svg/dynamic-updates/SVGImageElement-svgdom-y-prop.html: * svg/dynamic-updates/SVGLineElement-dom-requiredFeatures.html: * svg/dynamic-updates/SVGLineElement-dom-x1-attr.html: * svg/dynamic-updates/SVGLineElement-dom-x2-attr.html: * svg/dynamic-updates/SVGLineElement-dom-y1-attr.html: * svg/dynamic-updates/SVGLineElement-dom-y2-attr.html: * svg/dynamic-updates/SVGLineElement-svgdom-requiredFeatures.html: * svg/dynamic-updates/SVGLineElement-svgdom-x1-prop.html: * svg/dynamic-updates/SVGLineElement-svgdom-x2-prop.html: * svg/dynamic-updates/SVGLineElement-svgdom-y1-prop.html: * svg/dynamic-updates/SVGLineElement-svgdom-y2-prop.html: * svg/dynamic-updates/SVGLinearGradientElement-dom-gradientTransform-attr.html: * svg/dynamic-updates/SVGLinearGradientElement-dom-gradientUnits-attr.html: * svg/dynamic-updates/SVGLinearGradientElement-dom-x1-attr.html: * svg/dynamic-updates/SVGLinearGradientElement-dom-x2-attr.html: * svg/dynamic-updates/SVGLinearGradientElement-dom-y1-attr.html: * svg/dynamic-updates/SVGLinearGradientElement-dom-y2-attr.html: * svg/dynamic-updates/SVGLinearGradientElement-svgdom-gradientTransform-prop.html: * svg/dynamic-updates/SVGLinearGradientElement-svgdom-gradientUnits-prop.html: * svg/dynamic-updates/SVGLinearGradientElement-svgdom-x1-prop.html: * svg/dynamic-updates/SVGLinearGradientElement-svgdom-x2-prop.html: * svg/dynamic-updates/SVGLinearGradientElement-svgdom-y1-prop.html: * svg/dynamic-updates/SVGLinearGradientElement-svgdom-y2-prop.html: * svg/dynamic-updates/SVGMarkerElement-dom-markerHeight-attr.html: * svg/dynamic-updates/SVGMarkerElement-dom-markerUnits-attr.html: * svg/dynamic-updates/SVGMarkerElement-dom-markerWidth-attr.html: * svg/dynamic-updates/SVGMarkerElement-dom-orient-attr.html: * svg/dynamic-updates/SVGMarkerElement-dom-refX-attr.html: * svg/dynamic-updates/SVGMarkerElement-dom-refY-attr.html: * svg/dynamic-updates/SVGMarkerElement-svgdom-markerHeight-prop.html: * svg/dynamic-updates/SVGMarkerElement-svgdom-markerUnits-prop.html: * svg/dynamic-updates/SVGMarkerElement-svgdom-markerWidth-prop.html: * svg/dynamic-updates/SVGMarkerElement-svgdom-orientAngle-prop.html: * svg/dynamic-updates/SVGMarkerElement-svgdom-orientType-prop.html: * svg/dynamic-updates/SVGMarkerElement-svgdom-refX-prop.html: * svg/dynamic-updates/SVGMarkerElement-svgdom-refY-prop.html: * svg/dynamic-updates/SVGMarkerElement-svgdom-setOrientToAngle-call.html: * svg/dynamic-updates/SVGMarkerElement-svgdom-setOrientToAuto-call.html: * svg/dynamic-updates/SVGMaskElement-dom-height-attr.html: * svg/dynamic-updates/SVGMaskElement-dom-maskContentUnits-attr.html: * svg/dynamic-updates/SVGMaskElement-dom-maskUnits-attr.html: * svg/dynamic-updates/SVGMaskElement-dom-width-attr.html: * svg/dynamic-updates/SVGMaskElement-dom-x-attr.html: * svg/dynamic-updates/SVGMaskElement-dom-y-attr.html: * svg/dynamic-updates/SVGMaskElement-svgdom-height-prop.html: * svg/dynamic-updates/SVGMaskElement-svgdom-maskContentUnits-prop.html: * svg/dynamic-updates/SVGMaskElement-svgdom-maskUnits-prop.html: * svg/dynamic-updates/SVGMaskElement-svgdom-width-prop.html: * svg/dynamic-updates/SVGMaskElement-svgdom-x-prop.html: * svg/dynamic-updates/SVGMaskElement-svgdom-y-prop.html: * svg/dynamic-updates/SVGPathElement-dom-requiredFeatures.html: * svg/dynamic-updates/SVGPathElement-svgdom-requiredFeatures.html: * svg/dynamic-updates/SVGPatternElement-dom-height-attr.html: * svg/dynamic-updates/SVGPatternElement-dom-patternContentUnits-attr.html: * svg/dynamic-updates/SVGPatternElement-dom-patternTransform-attr.html: * svg/dynamic-updates/SVGPatternElement-dom-patternUnits-attr.html: * svg/dynamic-updates/SVGPatternElement-dom-width-attr.html: * svg/dynamic-updates/SVGPatternElement-dom-x-attr.html: * svg/dynamic-updates/SVGPatternElement-dom-y-attr.html: * svg/dynamic-updates/SVGPatternElement-svgdom-height-prop.html: * svg/dynamic-updates/SVGPatternElement-svgdom-patternContentUnits-prop.html: * svg/dynamic-updates/SVGPatternElement-svgdom-patternTransform-prop.html: * svg/dynamic-updates/SVGPatternElement-svgdom-patternUnits-prop.html: * svg/dynamic-updates/SVGPatternElement-svgdom-width-prop.html: * svg/dynamic-updates/SVGPatternElement-svgdom-x-prop.html: * svg/dynamic-updates/SVGPatternElement-svgdom-y-prop.html: * svg/dynamic-updates/SVGPolygonElement-dom-requiredFeatures.html: * svg/dynamic-updates/SVGPolygonElement-svgdom-requiredFeatures.html: * svg/dynamic-updates/SVGPolylineElement-dom-requiredFeatures.html: * svg/dynamic-updates/SVGPolylineElement-svgdom-requiredFeatures.html: * svg/dynamic-updates/SVGRadialGradientElement-dom-cx-attr.html: * svg/dynamic-updates/SVGRadialGradientElement-dom-cy-attr.html: * svg/dynamic-updates/SVGRadialGradientElement-dom-fx-attr.html: * svg/dynamic-updates/SVGRadialGradientElement-dom-fy-attr.html: * svg/dynamic-updates/SVGRadialGradientElement-dom-gradientTransform-attr.html: * svg/dynamic-updates/SVGRadialGradientElement-dom-gradientUnits-attr.html: * svg/dynamic-updates/SVGRadialGradientElement-dom-r-attr.html: * svg/dynamic-updates/SVGRadialGradientElement-svgdom-cx-prop.html: * svg/dynamic-updates/SVGRadialGradientElement-svgdom-cy-prop.html: * svg/dynamic-updates/SVGRadialGradientElement-svgdom-fx-prop.html: * svg/dynamic-updates/SVGRadialGradientElement-svgdom-fy-prop.html: * svg/dynamic-updates/SVGRadialGradientElement-svgdom-gradientTransform-prop.html: * svg/dynamic-updates/SVGRadialGradientElement-svgdom-gradientUnits-prop.html: * svg/dynamic-updates/SVGRadialGradientElement-svgdom-r-prop.html: * svg/dynamic-updates/SVGRectElement-dom-height-attr.html: * svg/dynamic-updates/SVGRectElement-dom-requiredFeatures.html: * svg/dynamic-updates/SVGRectElement-dom-width-attr.html: * svg/dynamic-updates/SVGRectElement-dom-x-attr.html: * svg/dynamic-updates/SVGRectElement-dom-y-attr.html: * svg/dynamic-updates/SVGRectElement-svgdom-height-prop.html: * svg/dynamic-updates/SVGRectElement-svgdom-requiredFeatures.html: * svg/dynamic-updates/SVGRectElement-svgdom-width-prop.html: * svg/dynamic-updates/SVGRectElement-svgdom-x-prop.html: * svg/dynamic-updates/SVGRectElement-svgdom-y-prop.html: * svg/dynamic-updates/SVGSVGElement-dom-requiredFeatures.html: * svg/dynamic-updates/SVGSVGElement-svgdom-requiredFeatures.html: * svg/dynamic-updates/SVGTRefElement-dom-href-attr.html: * svg/dynamic-updates/SVGTextElement-dom-dx-attr.html: * svg/dynamic-updates/SVGTextElement-dom-dy-attr.html: * svg/dynamic-updates/SVGTextElement-dom-lengthAdjust-attr.html: * svg/dynamic-updates/SVGTextElement-dom-requiredFeatures.html: * svg/dynamic-updates/SVGTextElement-dom-rotate-attr.html: * svg/dynamic-updates/SVGTextElement-dom-textLength-attr.html: * svg/dynamic-updates/SVGTextElement-dom-transform-attr.html: * svg/dynamic-updates/SVGTextElement-dom-x-attr.html: * svg/dynamic-updates/SVGTextElement-dom-y-attr.html: * svg/dynamic-updates/SVGTextElement-svgdom-dx-prop.html: * svg/dynamic-updates/SVGTextElement-svgdom-dy-prop.html: * svg/dynamic-updates/SVGTextElement-svgdom-lengthAdjust-prop.html: * svg/dynamic-updates/SVGTextElement-svgdom-requiredFeatures.html: * svg/dynamic-updates/SVGTextElement-svgdom-rotate-prop.html: * svg/dynamic-updates/SVGTextElement-svgdom-textLength-prop.html: * svg/dynamic-updates/SVGTextElement-svgdom-transform-prop.html: * svg/dynamic-updates/SVGTextElement-svgdom-x-prop.html: * svg/dynamic-updates/SVGTextElement-svgdom-y-prop.html: * svg/dynamic-updates/SVGUseElement-dom-href1-attr.html: * svg/dynamic-updates/SVGUseElement-dom-href2-attr.html: * svg/dynamic-updates/SVGUseElement-dom-requiredFeatures.html: * svg/dynamic-updates/SVGUseElement-svgdom-href1-prop.html: * svg/dynamic-updates/SVGUseElement-svgdom-href2-prop.html: * svg/dynamic-updates/SVGUseElement-svgdom-requiredFeatures.html: * svg/dynamic-updates/resources/SVGTestCase.js: (completeTest): * svg/foreignObject/absolute-position-foreign-object-child-crash.html: * svg/in-html/script-external.html: * svg/in-html/script-nested.html: * svg/in-html/script-write.html: * svg/in-html/script.html: * svg/text/lengthAdjust-text-metrics.html: * svg/text/script-tests/TEMPLATE.html: * svg/text/text-rect-precision.html: * svg/zoom/page/zoom-get-screen-ctm.html: * svg/zoom/page/zoom-getBoundingClientRect.xhtml: * svg/zoom/page/zoom-zoom-coords.xhtml: * svg/zoom/resources/testPageZoom.js: (completeDynamicTest): Canonical link: https://commits.webkit.org/138888@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@155284 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-09-08 05:29:22 +00:00
<script src="../../resources/js-test-pre.js"></script>
2011-06-13 Dirk Schulze <krit@webkit.org> Reviewed by Nikolas Zimmermann. SVGAnimation should use direct unit animation for SVGLength https://bugs.webkit.org/show_bug.cgi?id=61368 Added new tests to check correct behavior of SVGLength animations. * svg/animations/script-tests/svglength-animation-LengthModeHeight.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-LengthModeOther.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-LengthModeWidth.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-invalid-value-1.js: Added. (sample1): (sample2): (executeTest): * svg/animations/script-tests/svglength-animation-invalid-value-2.js: Added. (sample1): (sample2): (executeTest): * svg/animations/script-tests/svglength-animation-invalid-value-3.js: Added. (sample1): (sample2): (executeTest): * svg/animations/script-tests/svglength-animation-number-to-number.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-cm.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-ems.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-exs.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-in.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-number.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-pc.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-percentage.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-pt.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-px.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-values.js: Added. (sample1): (sample2): (sample3): (sample4): (sample5): (executeTest): * svg/animations/svglength-animation-LengthModeHeight-expected.txt: Added. * svg/animations/svglength-animation-LengthModeHeight.html: Added. * svg/animations/svglength-animation-LengthModeOther-expected.txt: Added. * svg/animations/svglength-animation-LengthModeOther.html: Added. * svg/animations/svglength-animation-LengthModeWidth-expected.txt: Added. * svg/animations/svglength-animation-LengthModeWidth.html: Added. * svg/animations/svglength-animation-invalid-value-1-expected.txt: Added. * svg/animations/svglength-animation-invalid-value-1.html: Added. * svg/animations/svglength-animation-invalid-value-2-expected.txt: Added. * svg/animations/svglength-animation-invalid-value-2.html: Added. * svg/animations/svglength-animation-invalid-value-3-expected.txt: Added. * svg/animations/svglength-animation-invalid-value-3.html: Added. * svg/animations/svglength-animation-number-to-number-expected.txt: Added. * svg/animations/svglength-animation-number-to-number.html: Added. * svg/animations/svglength-animation-px-to-cm-expected.txt: Added. * svg/animations/svglength-animation-px-to-cm.html: Added. * svg/animations/svglength-animation-px-to-ems-expected.txt: Added. * svg/animations/svglength-animation-px-to-ems.html: Added. * svg/animations/svglength-animation-px-to-exs-expected.txt: Added. * svg/animations/svglength-animation-px-to-exs.html: Added. * svg/animations/svglength-animation-px-to-in-expected.txt: Added. * svg/animations/svglength-animation-px-to-in.html: Added. * svg/animations/svglength-animation-px-to-number-expected.txt: Added. * svg/animations/svglength-animation-px-to-number.html: Added. * svg/animations/svglength-animation-px-to-pc-expected.txt: Added. * svg/animations/svglength-animation-px-to-pc.html: Added. * svg/animations/svglength-animation-px-to-percentage-expected.txt: Added. * svg/animations/svglength-animation-px-to-percentage.html: Added. * svg/animations/svglength-animation-px-to-pt-expected.txt: Added. * svg/animations/svglength-animation-px-to-pt.html: Added. * svg/animations/svglength-animation-px-to-px-expected.txt: Added. * svg/animations/svglength-animation-px-to-px.html: Added. * svg/animations/svglength-animation-values-expected.txt: Added. * svg/animations/svglength-animation-values.html: Added. 2011-06-13 Dirk Schulze <krit@webkit.org> Reviewed by Nikolas Zimmermann. SVGAnimation should use direct unit animation for SVGLength https://bugs.webkit.org/show_bug.cgi?id=61368 When running SMIL animations within SVG, we unnecessarily transform the underlying SVG primitive datatype to strings, number+units, and back. As first step the target element gets asked for its current value. This value gets transformed to a string. In SVGAnimateElement we try to parse this string again and split it into a number and its unit. In the further steps we just animate the number. This number gets transformed back to a string together with the parsed unit. The string gets passed back to the target element, which is responsible for parsing the passed string back to a value as a SVG primitive datatype (like SVGLength, SVGNumber, SVGAngle, SVGColor, ...), relayout and rerendering. In short: SVG primitive datatype -> string -> number + unit animation -> string -> SVG primitive datatype. This patch does not attempt to change the string transformations, but addresses the parsing of the string back to a number and unit in the SVG animation code. There's no need to write a new parser in SVGAnimateElement to parse SVG primitive datatypes, we can instead reuse the existing ones. Also the current parser of SVGAnimateElement does not handle most unit types, nor is it possible to animate lists like SVGLengthList with the parsed content. An animation of values with different unit types is not possible: <rect width="20" height="20"> <animate animateAttribute="width" from="20px" to="10%" dur="4s"/> </rect> For the example above we would animate the rect width from 20px to 10px in 4 seconds and jump to the 10% of the viewport at the end of the animation. With using the parsers of SVG primitive datatypes we will also use the SVG primitive datatypes in the animation code itself. And that makes it possible to do such animations. In short: SVG primitive datatype -> string -> SVG primitive datatype animation -> string -> SVG primitive datatype. It will be easier to avoid the string transformation once all SVG primitive datatypes are supported. To hide the complexity of the animation code, the actual calculations of SVG animation specific values was moved to the corresponding SVGAnimated* files (SVGAnimatedLength.cpp for SVGLength). SVGAnimateElement itself just works with the new added generic datatype SVGAnimationType. SVGAnimatorFactory creates the SVG primitive datatype specific animators. This makes the main animation code a lot more readable and maintainable. With this patch I add the SVGAnimatorFactory and convert SVGLength animation to the new concept. Tests: svg/animations/svglength-animation-LengthModeHeight.html svg/animations/svglength-animation-LengthModeOther.html svg/animations/svglength-animation-LengthModeWidth.html svg/animations/svglength-animation-invalid-value-1.html svg/animations/svglength-animation-invalid-value-2.html svg/animations/svglength-animation-invalid-value-3.html svg/animations/svglength-animation-number-to-number.html svg/animations/svglength-animation-px-to-cm.html svg/animations/svglength-animation-px-to-ems.html svg/animations/svglength-animation-px-to-exs.html svg/animations/svglength-animation-px-to-in.html svg/animations/svglength-animation-px-to-number.html svg/animations/svglength-animation-px-to-pc.html svg/animations/svglength-animation-px-to-percentage.html svg/animations/svglength-animation-px-to-pt.html svg/animations/svglength-animation-px-to-px.html svg/animations/svglength-animation-values.html * CMakeLists.txt: Added new files to build system. * GNUmakefile.list.am: Ditto. * WebCore.gypi: Ditto. * WebCore.pro: Ditto. * WebCore.vcproj/WebCore.vcproj: Ditto. * WebCore.xcodeproj/project.pbxproj: Ditto. * svg/SVGAllInOne.cpp: Added SVGAnimatedLength.cpp for Win and other build systems. * svg/SVGAnimateElement.cpp: (WebCore::parseNumberValueAndUnit): Remove parsing code for SVGLength. Use SVGLength parser directly. (WebCore::SVGAnimateElement::adjustForCurrentColor): Made adjustForCurrentColor public as preperation for SVGAnimatedColor. (WebCore::getPropertyValue): Inline function to get computedStyle of CSS property. (WebCore::SVGAnimateElement::adjustForInheritance): Made adjustForInheritance as preperation for SVGAnimated* files. (WebCore::SVGAnimateElement::determineAnimatedAttributeType): SVGLength need special handling via SVGAnimator now. (WebCore::SVGAnimateElement::calculateAnimatedValue): Cleanup. Make use of SVGAnimator for SVGLength. (WebCore::SVGAnimateElement::calculateFromAndToValues): Ditto. (WebCore::SVGAnimateElement::calculateFromAndByValues): Ditto. (WebCore::SVGAnimateElement::resetToBaseValue): Ditto. (WebCore::SVGAnimateElement::applyResultsToTarget): Ditto. (WebCore::SVGAnimateElement::calculateDistance): Ditto. * svg/SVGAnimateElement.h: * svg/SVGAnimatedLength.cpp: Added. (WebCore::SVGAnimatedLengthAnimator::SVGAnimatedLengthAnimator): (WebCore::sharedSVGLength): (WebCore::SVGAnimatedLengthAnimator::constructFromString): (WebCore::SVGAnimatedLengthAnimator::calculateFromAndToValues): (WebCore::SVGAnimatedLengthAnimator::calculateFromAndByValues): (WebCore::SVGAnimatedLengthAnimator::calculateAnimatedValue): (WebCore::SVGAnimatedLengthAnimator::calculateDistance): * svg/SVGAnimatedLength.h: Added new class SVGAnimatedLengthAnimator which is responsible for the actual animation. (WebCore::SVGAnimatedLengthAnimator::~SVGAnimatedLengthAnimator): * svg/SVGAnimatedType.h: Added. Generic SVG unit type for animations in SVGAnimateElement. (WebCore::SVGAnimatedType::createLength): (WebCore::SVGAnimatedType::~SVGAnimatedType): (WebCore::SVGAnimatedType::type): (WebCore::SVGAnimatedType::length): (WebCore::SVGAnimatedType::SVGAnimatedType): * svg/SVGAnimatedTypeAnimator.h: Added. Base class for SVGAnimatedLengthAnimator and future SVG unit animators. (WebCore::SVGAnimatedTypeAnimator::~SVGAnimatedTypeAnimator): (WebCore::SVGAnimatedTypeAnimator::setContextElement): (WebCore::SVGAnimatedTypeAnimator::SVGAnimatedTypeAnimator): * svg/SVGAnimationElement.cpp: (WebCore::SVGAnimationElement::parseMappedAttribute): We do not use parseNumberValueAndUnit for SVGLength now. Have to strip white spaces here. Whitespaces shouldn't be stripped on the following attributes: 'from', 'to' and 'by'. This is not the case for SVGLength anymore. Added new tests to check this behavior. (WebCore::SVGAnimationElement::animationMode): Enum is accessible in WebCore namespace now. (WebCore::SVGAnimationElement::calcMode): Ditto. * svg/SVGAnimationElement.h: * svg/SVGAnimatorFactory.h: Added. (WebCore::SVGAnimatorFactory::create): * svg/SVGLength.cpp: (WebCore::SVGLength::setValueAsString): New setter with string and SVGLengthMode. (WebCore::SVGLength::lengthModeForAnimatedLengthAttribute): Get LengthMode for SVGLength depending on the attribute name. * svg/SVGLength.h: Canonical link: https://commits.webkit.org/78067@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@88663 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-06-13 18:48:36 +00:00
<script src="../dynamic-updates/resources/SVGTestCase.js"></script>
<script src="resources/SVGAnimationTestCase.js"></script>
</head>
Convert svg/animations to use SMIL methods for driving the timeline https://bugs.webkit.org/show_bug.cgi?id=78422 Reviewed by Dirk Schulze. Source/WebCore: Switch the svg/animations tests to use SVGSVGElement.setCurrentTime to drive the animation timeline. This should fix all flakiness we previously had with these tests - and as nice side-effect we're now using the standard SVG methods to drive the timeline, and thus have more coverage for these methods. It already exposed several SMIL bugs, that had to be fixed, before this worked: - beginElement()/endElement() modify the begin/end times of a SVGSMILElement. When beginElement() is called a new begin time is added to the list - and the same happens for endElement() with the end list. Unfortunately the begin/end times never get removed again, leading to incorrect instance time resolving when begin/endElement is called repeatedly, combined with moving the timeline through setCurrentTime. SMIL3 specifically demands that all 'dynamic' times in the begin/endTimes list, such that got inserted via beginElement/endElement - get removed if the begin/endTimes list is updated. Why? When calling beginElement, then endElement, then beginElement again, the begin/endTimes lists should be identical, w/o leftovers from any previous begin/endElement call. To keep track of that introduce SMILTimeWithOrigin, which holds a SMILTime and an Origin enum, which determines whether this SMILTime was created by the parser or dynamically created via beginElement/endElement. - SMILTimeContainer::setElapsed() (called by SVGSVGElement::setCurrentTime) forgot to update the animation state, when it was not paused. - document.getElementsByTagName('animateMotion')[0], always returned 'object SVGElement', instead of SVGAnimateMotion element making it impossible to query the animation start time, as the interfaces from SVGAnimationElement were not available. Fix that by removing the last hacks from svgtags.in, now that all IDLs are available. Now that we use SVGSVGElement::setCurrentTime to drive the animation testing, we can remove the DRT specific sampleSVGAnimationAtTime functionality, and its code springled all over WebCore. Covered by all existing tests in svg/animations. * WebCore.exp.in: Remove sampleAnimationAtTime() symbols. * WebCore.order: Ditto. * svg/SVGAnimationElement.cpp: Add a flag to begin/endElement, SMILTimeWithOrigin::ScriptOrigin, to indicate that these are dynamic SMILTimes, added by a script. (WebCore::SVGAnimationElement::beginElementAt): (WebCore::SVGAnimationElement::endElementAt): * svg/SVGDocumentExtensions.cpp: Remove sampleAnimationAtTime. * svg/SVGDocumentExtensions.h: Ditto. * svg/animation/SMILTime.h: Add SMILTimeWithOrigin helper. (SMILTimeWithOrigin): Needs a SMILTime and an Origin enum entry. (WebCore::SMILTimeWithOrigin::SMILTimeWithOrigin): (WebCore::SMILTimeWithOrigin::time): Returns the SMILTime. (WebCore::SMILTimeWithOrigin::originIsScript): Determines if this SMILTime got added by a script. (WebCore::operator<): Used by std::sort. * svg/animation/SMILTimeContainer.cpp: (WebCore::SMILTimeContainer::setElapsed): Always call updateAnimations, even if the animation is not paused. Use the right elpased time value, to seek precisely to the desired position. (WebCore::SMILTimeContainer::timerFired): Cleanup code, no need for a local variable 'elapsed'. (WebCore::SMILTimeContainer::updateAnimations): Remove DRT specific sampling code, which is no longer needed. * svg/animation/SMILTimeContainer.h: Remove sampleAnimationAtTime. * svg/animation/SVGSMILElement.cpp: (WebCore::SVGSMILElement::SVGSMILElement): Only call resolveFirstInterval, not reset, from the constructor - it wastes unnecessary time, as everything is already initialized. (WebCore::clearTimesWithDynamicOrigins): Helper function to clear all SMILTimes from the begin/endTimes list, that are dynamic. (WebCore::SVGSMILElement::reset): Clear begin/endTimes lists, on any reset() call (when driving the animation timeline through setElapsed). (WebCore::SVGSMILElement::insertedIntoDocument): m_beginTimes now stores SMILTimeWithOrigins, adapt the code. (WebCore::sortTimeList): Ditto. (WebCore::SVGSMILElement::parseBeginOrEnd): Ditto. (WebCore::SVGSMILElement::addBeginTime): Ditto. (WebCore::SVGSMILElement::addEndTime): Ditto. (WebCore::extractTimeFromVector): Ditto. (WebCore::SVGSMILElement::findInstanceTime): Ditto. * svg/animation/SVGSMILElement.h: * svg/svgtags.in: Enable animateMotion/hkern/mpath JS interfaces, which were not enabled, despite their IDLs existed. Source/WebKit/chromium: Remove SVG animation sampling functionality provided for DRT, which no longer uses it. Instead we switched the svg/animations tests to use SVGSVGElement.setCurrentTime. * public/WebFrame.h: (WebFrame): * src/WebFrameImpl.cpp: * src/WebFrameImpl.h: (WebFrameImpl): Source/WebKit/efl: Remove SVG animation sampling functionality provided for DRT, which no longer uses it. Instead we switched the svg/animations tests to use SVGSVGElement.setCurrentTime. * WebCoreSupport/DumpRenderTreeSupportEfl.cpp: * WebCoreSupport/DumpRenderTreeSupportEfl.h: Source/WebKit/gtk: Remove SVG animation sampling functionality provided for DRT, which no longer uses it. Instead we switched the svg/animations tests to use SVGSVGElement.setCurrentTime. * WebCoreSupport/DumpRenderTreeSupportGtk.cpp: * WebCoreSupport/DumpRenderTreeSupportGtk.h: (DumpRenderTreeSupportGtk): Source/WebKit/mac: Remove SVG animation sampling functionality provided for DRT, which no longer uses it. Instead we switched the svg/animations tests to use SVGSVGElement.setCurrentTime. * WebKit.order: * WebView/WebFrame.mm: * WebView/WebFramePrivate.h: Source/WebKit/qt: Remove SVG animation sampling functionality provided for DRT, which no longer uses it. Instead we switched the svg/animations tests to use SVGSVGElement.setCurrentTime. * WebCoreSupport/DumpRenderTreeSupportQt.cpp: * WebCoreSupport/DumpRenderTreeSupportQt.h: Source/WebKit/win: Remove SVG animation sampling functionality provided for DRT, which no longer uses it. Instead we switched the svg/animations tests to use SVGSVGElement.setCurrentTime. * Interfaces/IWebFramePrivate.idl: * WebFrame.cpp: * WebFrame.h: Tools: Remove no longer needed SVG specific animation sampling functionality from DRT. Instead we switched the svg/animations tests to use SVGSVGElement.setCurrentTime. * DumpRenderTree/LayoutTestController.cpp: (LayoutTestController::staticFunctions): * DumpRenderTree/LayoutTestController.h: (LayoutTestController): * DumpRenderTree/blackberry/LayoutTestControllerBlackBerry.cpp: * DumpRenderTree/chromium/LayoutTestController.cpp: (LayoutTestController::LayoutTestController): * DumpRenderTree/chromium/LayoutTestController.h: (LayoutTestController): * DumpRenderTree/efl/LayoutTestControllerEfl.cpp: * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: * DumpRenderTree/mac/LayoutTestControllerMac.mm: * DumpRenderTree/qt/LayoutTestControllerQt.cpp: * DumpRenderTree/qt/LayoutTestControllerQt.h: (LayoutTestController): * DumpRenderTree/win/LayoutTestControllerWin.cpp: * DumpRenderTree/wx/LayoutTestControllerWx.cpp: LayoutTests: Switch the svg/animations tests to use SVGSVGElement.setCurrentTime to drive the animation timeline. This should fix all flakiness we previously had with these tests - and as nice side-effect we're now using the standard SVG methods to drive the timeline, and thus have more coverage for these methods. It already exposed several SMIL bugs, that had to be fixed, before this worked. This also unifies & cleans up the tests, to use the same formatting and the same shouldBeCloseEnough helpers. * svg/animations/animVal-basics-expected.txt: * svg/animations/animVal-basics.html: * svg/animations/animate-calcMode-spline-by-expected.txt: * svg/animations/animate-calcMode-spline-by.html: * svg/animations/animate-calcMode-spline-from-by-expected.txt: * svg/animations/animate-calcMode-spline-from-by.html: * svg/animations/animate-calcMode-spline-from-to-expected.txt: * svg/animations/animate-calcMode-spline-from-to.html: * svg/animations/animate-calcMode-spline-to-expected.txt: * svg/animations/animate-calcMode-spline-to.html: * svg/animations/animate-calcMode-spline-values-expected.txt: * svg/animations/animate-calcMode-spline-values.html: * svg/animations/animate-color-calcMode-discrete.html: * svg/animations/animate-color-fill-currentColor.html: * svg/animations/animate-color-fill-from-by.html: * svg/animations/animate-color-rgba-calcMode-discrete.html: * svg/animations/animate-color-transparent.html: * svg/animations/animate-currentColor.html: * svg/animations/animate-dynamic-update-attributeName.html: * svg/animations/animate-end-attribute-expected.txt: * svg/animations/animate-end-attribute.html: * svg/animations/animate-endElement-beginElement.html: * svg/animations/animate-from-to-keyTimes.html: * svg/animations/animate-gradient-transform.html: * svg/animations/animate-inherit-css-property.html: * svg/animations/animate-insert-begin.html: * svg/animations/animate-insert-no-begin.html: * svg/animations/animate-keySplines.html: * svg/animations/animate-mpath-insert.html: * svg/animations/animate-number-calcMode-discrete-expected.txt: * svg/animations/animate-number-calcMode-discrete-keyTimes.html: * svg/animations/animate-number-calcMode-discrete.html: * svg/animations/animate-path-animation-Cc-Ss-expected.txt: * svg/animations/animate-path-animation-Cc-Ss.html: * svg/animations/animate-path-animation-Ll-Vv-Hh-expected.txt: * svg/animations/animate-path-animation-Ll-Vv-Hh.html: * svg/animations/animate-path-animation-Qq-Tt.html: * svg/animations/animate-path-animation-cC-sS-inverse-expected.txt: * svg/animations/animate-path-animation-cC-sS-inverse.html: * svg/animations/animate-path-animation-lL-vV-hH-inverse-expected.txt: * svg/animations/animate-path-animation-lL-vV-hH-inverse.html: * svg/animations/animate-path-animation-qQ-tT-inverse.html: * svg/animations/animate-path-nested-transforms-expected.txt: * svg/animations/animate-path-nested-transforms.html: * svg/animations/animate-path-to-animation-expected.txt: * svg/animations/animate-path-to-animation.html: * svg/animations/animate-text-nested-transforms-expected.txt: * svg/animations/animate-text-nested-transforms.html: * svg/animations/animateTransform-pattern-transform.html: * svg/animations/resources/SVGAnimationTestCase.js: (isCloseEnough): (shouldBeCloseEnough): (moveAnimationTimelineAndSample): (sampleAnimation): (runSMILTest): (runAnimationTest): * svg/animations/script-tests/TEMPLATE.html: Removed. * svg/animations/script-tests/animVal-basics.js: (sample3): (executeTest): * svg/animations/script-tests/animate-calcMode-spline-by.js: (sample2): (sample3): (executeTest): * svg/animations/script-tests/animate-calcMode-spline-from-by.js: (sample2): (sample3): (executeTest): * svg/animations/script-tests/animate-calcMode-spline-from-to.js: (sample2): (sample3): (executeTest): * svg/animations/script-tests/animate-calcMode-spline-to.js: (sample2): (sample3): (executeTest): * svg/animations/script-tests/animate-calcMode-spline-values.js: (sample2): (sample3): (executeTest): * svg/animations/script-tests/animate-color-calcMode-discrete.js: (executeTest): * svg/animations/script-tests/animate-color-fill-currentColor.js: (executeTest): * svg/animations/script-tests/animate-color-fill-from-by.js: (executeTest): * svg/animations/script-tests/animate-color-rgba-calcMode-discrete.js: (executeTest): * svg/animations/script-tests/animate-color-transparent.js: (executeTest): * svg/animations/script-tests/animate-currentColor.js: (executeTest): * svg/animations/script-tests/animate-dynamic-update-attributeName.js: (executeTest): * svg/animations/script-tests/animate-end-attribute.js: (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/animate-endElement-beginElement.js: (executeTest): (end): (begin): * svg/animations/script-tests/animate-from-to-keyTimes.js: (executeTest): * svg/animations/script-tests/animate-gradient-transform.js: (executeTest): * svg/animations/script-tests/animate-inherit-css-property.js: (executeTest): * svg/animations/script-tests/animate-insert-begin.js: (executeTest): * svg/animations/script-tests/animate-insert-no-begin.js: (executeTest): * svg/animations/script-tests/animate-keySplines.js: (executeTest): * svg/animations/script-tests/animate-mpath-insert.js: (executeTest): * svg/animations/script-tests/animate-number-calcMode-discrete-keyTimes.js: (executeTest): * svg/animations/script-tests/animate-number-calcMode-discrete.js: (sample1): (sample2): (executeTest): * svg/animations/script-tests/animate-path-animation-Cc-Ss.js: (sample4): (executeTest): * svg/animations/script-tests/animate-path-animation-Ll-Vv-Hh.js: (sample4): (executeTest): * svg/animations/script-tests/animate-path-animation-Qq-Tt.js: (executeTest): * svg/animations/script-tests/animate-path-animation-cC-sS-inverse.js: (sample4): (executeTest): * svg/animations/script-tests/animate-path-animation-lL-vV-hH-inverse.js: (sample4): (executeTest): * svg/animations/script-tests/animate-path-animation-qQ-tT-inverse.js: (executeTest): * svg/animations/script-tests/animate-path-nested-transforms.js: (g.setAttribute.rect.createSVGElement.rect.setAttribute.rect.setAttribute.rect.setAttribute.rect.setAttribute.rect.setAttribute.g.appendChild.animateMotion.createSVGElement.animateMotion.setAttribute.animateMotion.setAttribute.animateMotion.setAttribute.animateMotion.setAttribute.animateMotion.setAttribute.animateMotion.setAttribute.g.appendChild.rootSVGElement.appendChild.startSample): (endSample): (executeTest): * svg/animations/script-tests/animate-path-to-animation.js: (sample2): (sample3): (executeTest): * svg/animations/script-tests/animate-text-nested-transforms.js: (rootSVGElement.setAttribute.text.createSVGElement.text.setAttribute.text.textContent.string_appeared_here.text.setAttribute.animateMotion.createSVGElement.animateMotion.setAttribute.animateMotion.setAttribute.animateMotion.setAttribute.animateMotion.setAttribute.animateMotion.setAttribute.animateMotion.setAttribute.text.appendChild.rootSVGElement.appendChild.startSample): (endSample): (executeTest): * svg/animations/script-tests/animateTransform-pattern-transform.js: (executeTest): * svg/animations/script-tests/svgPreserveAspectRatio-animation-1.js: (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svgangle-animation-deg-to-grad.js: (sample2): (sample3): (executeTest): * svg/animations/script-tests/svgangle-animation-deg-to-rad.js: (sample2): (sample3): (executeTest): * svg/animations/script-tests/svgangle-animation-grad-to-deg.js: (sample2): (sample3): (executeTest): * svg/animations/script-tests/svgangle-animation-grad-to-rad.js: (sample2): (sample3): (executeTest): * svg/animations/script-tests/svgangle-animation-rad-to-deg.js: (sample2): (sample3): (executeTest): * svg/animations/script-tests/svgangle-animation-rad-to-grad.js: (sample2): (sample3): (executeTest): * svg/animations/script-tests/svgboolean-animation-1.js: (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svginteger-animation-1.js: (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-LengthModeHeight.js: (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-LengthModeOther.js: (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-LengthModeWidth.js: (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-invalid-value-1.js: (executeTest): * svg/animations/script-tests/svglength-animation-invalid-value-2.js: (executeTest): * svg/animations/script-tests/svglength-animation-invalid-value-3.js: (executeTest): * svg/animations/script-tests/svglength-animation-number-to-number.js: (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-cm.js: (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-ems.js: (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-exs.js: (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-in.js: (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-number.js: (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-pc.js: (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-percentage.js: (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-pt.js: (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-px.js: (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-unitType.js: (executeTest): * svg/animations/script-tests/svglength-animation-values.js: (sample5): (executeTest): * svg/animations/script-tests/svglengthlist-animation-1.js: (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglengthlist-animation-2.js: (sample3): (executeTest): * svg/animations/script-tests/svglengthlist-animation-3.js: (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglengthlist-animation-4.js: (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglengthlist-animation-5.js: (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svgnumber-animation-1.js: (executeTest): * svg/animations/script-tests/svgnumber-animation-2.js: (executeTest): * svg/animations/script-tests/svgnumber-animation-3.js: (executeTest): * svg/animations/script-tests/svgnumberlist-animation-1.js: (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svgnumberlist-animation-2.js: (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svgnumberoptionalnumber-animation-1.js: (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svgnumberoptionalnumber-animation-2.js: (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svgnumberoptionalnumber-animation-3.js: (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svgnumberoptionalnumber-animation-4.js: (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svgpath-animation-1.js: (sample3): (executeTest): * svg/animations/script-tests/svgpointlist-animation-1.js: (sample3): (executeTest): * svg/animations/script-tests/svgpointlist-animation-2.js: (sample3): (executeTest): * svg/animations/script-tests/svgrect-animation-1.js: (sample3): (executeTest): * svg/animations/script-tests/svgrect-animation-2.js: (sample3): (executeTest): * svg/animations/script-tests/svgstring-animation-fallback-to-discrete.js: (executeTest): * svg/animations/script-tests/svgtransform-animation-1.js: (executeTest): * svg/animations/script-tests/svgtransform-animation-discrete.js: (executeTest): * svg/animations/smil-element-not-removed-crash.html: * svg/animations/svgPreserveAspectRatio-animation-1.html: * svg/animations/svgangle-animation-deg-to-grad-expected.txt: * svg/animations/svgangle-animation-deg-to-grad.html: * svg/animations/svgangle-animation-deg-to-rad-expected.txt: * svg/animations/svgangle-animation-deg-to-rad.html: * svg/animations/svgangle-animation-grad-to-deg-expected.txt: * svg/animations/svgangle-animation-grad-to-deg.html: * svg/animations/svgangle-animation-grad-to-rad-expected.txt: * svg/animations/svgangle-animation-grad-to-rad.html: * svg/animations/svgangle-animation-rad-to-deg-expected.txt: * svg/animations/svgangle-animation-rad-to-deg.html: * svg/animations/svgangle-animation-rad-to-grad-expected.txt: * svg/animations/svgangle-animation-rad-to-grad.html: * svg/animations/svgboolean-animation-1.html: * svg/animations/svginteger-animation-1.html: * svg/animations/svglength-animation-LengthModeHeight-expected.txt: * svg/animations/svglength-animation-LengthModeHeight.html: * svg/animations/svglength-animation-LengthModeOther-expected.txt: * svg/animations/svglength-animation-LengthModeOther.html: * svg/animations/svglength-animation-LengthModeWidth-expected.txt: * svg/animations/svglength-animation-LengthModeWidth.html: * svg/animations/svglength-animation-invalid-value-1.html: * svg/animations/svglength-animation-invalid-value-2.html: * svg/animations/svglength-animation-invalid-value-3.html: * svg/animations/svglength-animation-number-to-number-expected.txt: * svg/animations/svglength-animation-number-to-number.html: * svg/animations/svglength-animation-px-to-cm-expected.txt: * svg/animations/svglength-animation-px-to-cm.html: * svg/animations/svglength-animation-px-to-ems-expected.txt: * svg/animations/svglength-animation-px-to-ems.html: * svg/animations/svglength-animation-px-to-exs-expected.txt: * svg/animations/svglength-animation-px-to-exs.html: * svg/animations/svglength-animation-px-to-in-expected.txt: * svg/animations/svglength-animation-px-to-in.html: * svg/animations/svglength-animation-px-to-number-expected.txt: * svg/animations/svglength-animation-px-to-number.html: * svg/animations/svglength-animation-px-to-pc-expected.txt: * svg/animations/svglength-animation-px-to-pc.html: * svg/animations/svglength-animation-px-to-percentage-expected.txt: * svg/animations/svglength-animation-px-to-percentage.html: * svg/animations/svglength-animation-px-to-pt-expected.txt: * svg/animations/svglength-animation-px-to-pt.html: * svg/animations/svglength-animation-px-to-px-expected.txt: * svg/animations/svglength-animation-px-to-px.html: * svg/animations/svglength-animation-unitType.html: * svg/animations/svglength-animation-values-expected.txt: * svg/animations/svglength-animation-values.html: * svg/animations/svglengthlist-animation-1.html: * svg/animations/svglengthlist-animation-2-expected.txt: * svg/animations/svglengthlist-animation-2.html: * svg/animations/svglengthlist-animation-3.html: * svg/animations/svglengthlist-animation-4.html: * svg/animations/svglengthlist-animation-5.html: * svg/animations/svgnumber-animation-1.html: * svg/animations/svgnumber-animation-2.html: * svg/animations/svgnumber-animation-3.html: * svg/animations/svgnumberlist-animation-1-expected.txt: * svg/animations/svgnumberlist-animation-1.html: * svg/animations/svgnumberlist-animation-2-expected.txt: * svg/animations/svgnumberlist-animation-2.html: * svg/animations/svgnumberoptionalnumber-animation-1.html: * svg/animations/svgnumberoptionalnumber-animation-2.html: * svg/animations/svgnumberoptionalnumber-animation-3.html: * svg/animations/svgnumberoptionalnumber-animation-4.html: * svg/animations/svgpath-animation-1-expected.txt: * svg/animations/svgpath-animation-1.html: * svg/animations/svgpointlist-animation-1-expected.txt: * svg/animations/svgpointlist-animation-1.html: * svg/animations/svgpointlist-animation-2-expected.txt: * svg/animations/svgpointlist-animation-2.html: * svg/animations/svgrect-animation-1-expected.txt: * svg/animations/svgrect-animation-1.html: * svg/animations/svgrect-animation-2-expected.txt: * svg/animations/svgrect-animation-2.html: * svg/animations/svgstring-animation-fallback-to-discrete-expected.txt: * svg/animations/svgstring-animation-fallback-to-discrete.html: * svg/animations/svgtransform-animation-1.html: * svg/animations/svgtransform-animation-discrete-expected.txt: * svg/animations/svgtransform-animation-discrete.html: Canonical link: https://commits.webkit.org/95529@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@107682 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2012-02-14 08:41:30 +00:00
<body onload="runSMILTest()">
2011-06-13 Dirk Schulze <krit@webkit.org> Reviewed by Nikolas Zimmermann. SVGAnimation should use direct unit animation for SVGLength https://bugs.webkit.org/show_bug.cgi?id=61368 Added new tests to check correct behavior of SVGLength animations. * svg/animations/script-tests/svglength-animation-LengthModeHeight.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-LengthModeOther.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-LengthModeWidth.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-invalid-value-1.js: Added. (sample1): (sample2): (executeTest): * svg/animations/script-tests/svglength-animation-invalid-value-2.js: Added. (sample1): (sample2): (executeTest): * svg/animations/script-tests/svglength-animation-invalid-value-3.js: Added. (sample1): (sample2): (executeTest): * svg/animations/script-tests/svglength-animation-number-to-number.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-cm.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-ems.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-exs.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-in.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-number.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-pc.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-percentage.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-pt.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-px.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-values.js: Added. (sample1): (sample2): (sample3): (sample4): (sample5): (executeTest): * svg/animations/svglength-animation-LengthModeHeight-expected.txt: Added. * svg/animations/svglength-animation-LengthModeHeight.html: Added. * svg/animations/svglength-animation-LengthModeOther-expected.txt: Added. * svg/animations/svglength-animation-LengthModeOther.html: Added. * svg/animations/svglength-animation-LengthModeWidth-expected.txt: Added. * svg/animations/svglength-animation-LengthModeWidth.html: Added. * svg/animations/svglength-animation-invalid-value-1-expected.txt: Added. * svg/animations/svglength-animation-invalid-value-1.html: Added. * svg/animations/svglength-animation-invalid-value-2-expected.txt: Added. * svg/animations/svglength-animation-invalid-value-2.html: Added. * svg/animations/svglength-animation-invalid-value-3-expected.txt: Added. * svg/animations/svglength-animation-invalid-value-3.html: Added. * svg/animations/svglength-animation-number-to-number-expected.txt: Added. * svg/animations/svglength-animation-number-to-number.html: Added. * svg/animations/svglength-animation-px-to-cm-expected.txt: Added. * svg/animations/svglength-animation-px-to-cm.html: Added. * svg/animations/svglength-animation-px-to-ems-expected.txt: Added. * svg/animations/svglength-animation-px-to-ems.html: Added. * svg/animations/svglength-animation-px-to-exs-expected.txt: Added. * svg/animations/svglength-animation-px-to-exs.html: Added. * svg/animations/svglength-animation-px-to-in-expected.txt: Added. * svg/animations/svglength-animation-px-to-in.html: Added. * svg/animations/svglength-animation-px-to-number-expected.txt: Added. * svg/animations/svglength-animation-px-to-number.html: Added. * svg/animations/svglength-animation-px-to-pc-expected.txt: Added. * svg/animations/svglength-animation-px-to-pc.html: Added. * svg/animations/svglength-animation-px-to-percentage-expected.txt: Added. * svg/animations/svglength-animation-px-to-percentage.html: Added. * svg/animations/svglength-animation-px-to-pt-expected.txt: Added. * svg/animations/svglength-animation-px-to-pt.html: Added. * svg/animations/svglength-animation-px-to-px-expected.txt: Added. * svg/animations/svglength-animation-px-to-px.html: Added. * svg/animations/svglength-animation-values-expected.txt: Added. * svg/animations/svglength-animation-values.html: Added. 2011-06-13 Dirk Schulze <krit@webkit.org> Reviewed by Nikolas Zimmermann. SVGAnimation should use direct unit animation for SVGLength https://bugs.webkit.org/show_bug.cgi?id=61368 When running SMIL animations within SVG, we unnecessarily transform the underlying SVG primitive datatype to strings, number+units, and back. As first step the target element gets asked for its current value. This value gets transformed to a string. In SVGAnimateElement we try to parse this string again and split it into a number and its unit. In the further steps we just animate the number. This number gets transformed back to a string together with the parsed unit. The string gets passed back to the target element, which is responsible for parsing the passed string back to a value as a SVG primitive datatype (like SVGLength, SVGNumber, SVGAngle, SVGColor, ...), relayout and rerendering. In short: SVG primitive datatype -> string -> number + unit animation -> string -> SVG primitive datatype. This patch does not attempt to change the string transformations, but addresses the parsing of the string back to a number and unit in the SVG animation code. There's no need to write a new parser in SVGAnimateElement to parse SVG primitive datatypes, we can instead reuse the existing ones. Also the current parser of SVGAnimateElement does not handle most unit types, nor is it possible to animate lists like SVGLengthList with the parsed content. An animation of values with different unit types is not possible: <rect width="20" height="20"> <animate animateAttribute="width" from="20px" to="10%" dur="4s"/> </rect> For the example above we would animate the rect width from 20px to 10px in 4 seconds and jump to the 10% of the viewport at the end of the animation. With using the parsers of SVG primitive datatypes we will also use the SVG primitive datatypes in the animation code itself. And that makes it possible to do such animations. In short: SVG primitive datatype -> string -> SVG primitive datatype animation -> string -> SVG primitive datatype. It will be easier to avoid the string transformation once all SVG primitive datatypes are supported. To hide the complexity of the animation code, the actual calculations of SVG animation specific values was moved to the corresponding SVGAnimated* files (SVGAnimatedLength.cpp for SVGLength). SVGAnimateElement itself just works with the new added generic datatype SVGAnimationType. SVGAnimatorFactory creates the SVG primitive datatype specific animators. This makes the main animation code a lot more readable and maintainable. With this patch I add the SVGAnimatorFactory and convert SVGLength animation to the new concept. Tests: svg/animations/svglength-animation-LengthModeHeight.html svg/animations/svglength-animation-LengthModeOther.html svg/animations/svglength-animation-LengthModeWidth.html svg/animations/svglength-animation-invalid-value-1.html svg/animations/svglength-animation-invalid-value-2.html svg/animations/svglength-animation-invalid-value-3.html svg/animations/svglength-animation-number-to-number.html svg/animations/svglength-animation-px-to-cm.html svg/animations/svglength-animation-px-to-ems.html svg/animations/svglength-animation-px-to-exs.html svg/animations/svglength-animation-px-to-in.html svg/animations/svglength-animation-px-to-number.html svg/animations/svglength-animation-px-to-pc.html svg/animations/svglength-animation-px-to-percentage.html svg/animations/svglength-animation-px-to-pt.html svg/animations/svglength-animation-px-to-px.html svg/animations/svglength-animation-values.html * CMakeLists.txt: Added new files to build system. * GNUmakefile.list.am: Ditto. * WebCore.gypi: Ditto. * WebCore.pro: Ditto. * WebCore.vcproj/WebCore.vcproj: Ditto. * WebCore.xcodeproj/project.pbxproj: Ditto. * svg/SVGAllInOne.cpp: Added SVGAnimatedLength.cpp for Win and other build systems. * svg/SVGAnimateElement.cpp: (WebCore::parseNumberValueAndUnit): Remove parsing code for SVGLength. Use SVGLength parser directly. (WebCore::SVGAnimateElement::adjustForCurrentColor): Made adjustForCurrentColor public as preperation for SVGAnimatedColor. (WebCore::getPropertyValue): Inline function to get computedStyle of CSS property. (WebCore::SVGAnimateElement::adjustForInheritance): Made adjustForInheritance as preperation for SVGAnimated* files. (WebCore::SVGAnimateElement::determineAnimatedAttributeType): SVGLength need special handling via SVGAnimator now. (WebCore::SVGAnimateElement::calculateAnimatedValue): Cleanup. Make use of SVGAnimator for SVGLength. (WebCore::SVGAnimateElement::calculateFromAndToValues): Ditto. (WebCore::SVGAnimateElement::calculateFromAndByValues): Ditto. (WebCore::SVGAnimateElement::resetToBaseValue): Ditto. (WebCore::SVGAnimateElement::applyResultsToTarget): Ditto. (WebCore::SVGAnimateElement::calculateDistance): Ditto. * svg/SVGAnimateElement.h: * svg/SVGAnimatedLength.cpp: Added. (WebCore::SVGAnimatedLengthAnimator::SVGAnimatedLengthAnimator): (WebCore::sharedSVGLength): (WebCore::SVGAnimatedLengthAnimator::constructFromString): (WebCore::SVGAnimatedLengthAnimator::calculateFromAndToValues): (WebCore::SVGAnimatedLengthAnimator::calculateFromAndByValues): (WebCore::SVGAnimatedLengthAnimator::calculateAnimatedValue): (WebCore::SVGAnimatedLengthAnimator::calculateDistance): * svg/SVGAnimatedLength.h: Added new class SVGAnimatedLengthAnimator which is responsible for the actual animation. (WebCore::SVGAnimatedLengthAnimator::~SVGAnimatedLengthAnimator): * svg/SVGAnimatedType.h: Added. Generic SVG unit type for animations in SVGAnimateElement. (WebCore::SVGAnimatedType::createLength): (WebCore::SVGAnimatedType::~SVGAnimatedType): (WebCore::SVGAnimatedType::type): (WebCore::SVGAnimatedType::length): (WebCore::SVGAnimatedType::SVGAnimatedType): * svg/SVGAnimatedTypeAnimator.h: Added. Base class for SVGAnimatedLengthAnimator and future SVG unit animators. (WebCore::SVGAnimatedTypeAnimator::~SVGAnimatedTypeAnimator): (WebCore::SVGAnimatedTypeAnimator::setContextElement): (WebCore::SVGAnimatedTypeAnimator::SVGAnimatedTypeAnimator): * svg/SVGAnimationElement.cpp: (WebCore::SVGAnimationElement::parseMappedAttribute): We do not use parseNumberValueAndUnit for SVGLength now. Have to strip white spaces here. Whitespaces shouldn't be stripped on the following attributes: 'from', 'to' and 'by'. This is not the case for SVGLength anymore. Added new tests to check this behavior. (WebCore::SVGAnimationElement::animationMode): Enum is accessible in WebCore namespace now. (WebCore::SVGAnimationElement::calcMode): Ditto. * svg/SVGAnimationElement.h: * svg/SVGAnimatorFactory.h: Added. (WebCore::SVGAnimatorFactory::create): * svg/SVGLength.cpp: (WebCore::SVGLength::setValueAsString): New setter with string and SVGLengthMode. (WebCore::SVGLength::lengthModeForAnimatedLengthAttribute): Get LengthMode for SVGLength depending on the attribute name. * svg/SVGLength.h: Canonical link: https://commits.webkit.org/78067@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@88663 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-06-13 18:48:36 +00:00
<h1>SVG 1.1 dynamic animation tests</h1>
<p id="description"></p>
<div id="console"></div>
<script>
description("Test SVGLength animation on LengthModeOther.");
createSVGTestCase();
// Setup test document
rootSVGElement.setAttribute("width", "600");
rootSVGElement.setAttribute("height", "400");
// Setup test document
var circle = createSVGElement("circle");
circle.setAttribute("id", "circle");
circle.setAttribute("cx", "50");
circle.setAttribute("cy", "50");
circle.setAttribute("r", "10");
circle.setAttribute("fill", "green");
circle.setAttribute("onclick", "executeTest()");
var animate = createSVGElement("animate");
animate.setAttribute("id", "animation");
animate.setAttribute("attributeName", "r");
animate.setAttribute("begin", "click");
animate.setAttribute("dur", "4s");
animate.setAttribute("from", "10");
animate.setAttribute("to", "50%");
circle.appendChild(animate);
rootSVGElement.appendChild(circle);
// Setup animation test
function sample1() {
// Check initial/end conditions
shouldBeCloseEnough("circle.r.animVal.value", "10");
shouldBe("circle.r.baseVal.value", "10");
}
function sample2() {
shouldBeCloseEnough("circle.r.animVal.value", "132.5");
shouldBe("circle.r.baseVal.value", "10");
}
function sample3() {
shouldBeCloseEnough("circle.r.animVal.value", "254.9");
shouldBe("circle.r.baseVal.value", "10");
}
function executeTest() {
const expectedValues = [
// [animationId, time, sampleCallback]
["animation", 0.0, sample1],
["animation", 2.0, sample2],
["animation", 3.999, sample3],
["animation", 4.001, sample1]
];
runAnimationTest(expectedValues);
}
var successfullyParsed = true;
</script>
2011-06-13 Dirk Schulze <krit@webkit.org> Reviewed by Nikolas Zimmermann. SVGAnimation should use direct unit animation for SVGLength https://bugs.webkit.org/show_bug.cgi?id=61368 Added new tests to check correct behavior of SVGLength animations. * svg/animations/script-tests/svglength-animation-LengthModeHeight.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-LengthModeOther.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-LengthModeWidth.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-invalid-value-1.js: Added. (sample1): (sample2): (executeTest): * svg/animations/script-tests/svglength-animation-invalid-value-2.js: Added. (sample1): (sample2): (executeTest): * svg/animations/script-tests/svglength-animation-invalid-value-3.js: Added. (sample1): (sample2): (executeTest): * svg/animations/script-tests/svglength-animation-number-to-number.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-cm.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-ems.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-exs.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-in.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-number.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-pc.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-percentage.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-pt.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-px-to-px.js: Added. (sample1): (sample2): (sample3): (executeTest): * svg/animations/script-tests/svglength-animation-values.js: Added. (sample1): (sample2): (sample3): (sample4): (sample5): (executeTest): * svg/animations/svglength-animation-LengthModeHeight-expected.txt: Added. * svg/animations/svglength-animation-LengthModeHeight.html: Added. * svg/animations/svglength-animation-LengthModeOther-expected.txt: Added. * svg/animations/svglength-animation-LengthModeOther.html: Added. * svg/animations/svglength-animation-LengthModeWidth-expected.txt: Added. * svg/animations/svglength-animation-LengthModeWidth.html: Added. * svg/animations/svglength-animation-invalid-value-1-expected.txt: Added. * svg/animations/svglength-animation-invalid-value-1.html: Added. * svg/animations/svglength-animation-invalid-value-2-expected.txt: Added. * svg/animations/svglength-animation-invalid-value-2.html: Added. * svg/animations/svglength-animation-invalid-value-3-expected.txt: Added. * svg/animations/svglength-animation-invalid-value-3.html: Added. * svg/animations/svglength-animation-number-to-number-expected.txt: Added. * svg/animations/svglength-animation-number-to-number.html: Added. * svg/animations/svglength-animation-px-to-cm-expected.txt: Added. * svg/animations/svglength-animation-px-to-cm.html: Added. * svg/animations/svglength-animation-px-to-ems-expected.txt: Added. * svg/animations/svglength-animation-px-to-ems.html: Added. * svg/animations/svglength-animation-px-to-exs-expected.txt: Added. * svg/animations/svglength-animation-px-to-exs.html: Added. * svg/animations/svglength-animation-px-to-in-expected.txt: Added. * svg/animations/svglength-animation-px-to-in.html: Added. * svg/animations/svglength-animation-px-to-number-expected.txt: Added. * svg/animations/svglength-animation-px-to-number.html: Added. * svg/animations/svglength-animation-px-to-pc-expected.txt: Added. * svg/animations/svglength-animation-px-to-pc.html: Added. * svg/animations/svglength-animation-px-to-percentage-expected.txt: Added. * svg/animations/svglength-animation-px-to-percentage.html: Added. * svg/animations/svglength-animation-px-to-pt-expected.txt: Added. * svg/animations/svglength-animation-px-to-pt.html: Added. * svg/animations/svglength-animation-px-to-px-expected.txt: Added. * svg/animations/svglength-animation-px-to-px.html: Added. * svg/animations/svglength-animation-values-expected.txt: Added. * svg/animations/svglength-animation-values.html: Added. 2011-06-13 Dirk Schulze <krit@webkit.org> Reviewed by Nikolas Zimmermann. SVGAnimation should use direct unit animation for SVGLength https://bugs.webkit.org/show_bug.cgi?id=61368 When running SMIL animations within SVG, we unnecessarily transform the underlying SVG primitive datatype to strings, number+units, and back. As first step the target element gets asked for its current value. This value gets transformed to a string. In SVGAnimateElement we try to parse this string again and split it into a number and its unit. In the further steps we just animate the number. This number gets transformed back to a string together with the parsed unit. The string gets passed back to the target element, which is responsible for parsing the passed string back to a value as a SVG primitive datatype (like SVGLength, SVGNumber, SVGAngle, SVGColor, ...), relayout and rerendering. In short: SVG primitive datatype -> string -> number + unit animation -> string -> SVG primitive datatype. This patch does not attempt to change the string transformations, but addresses the parsing of the string back to a number and unit in the SVG animation code. There's no need to write a new parser in SVGAnimateElement to parse SVG primitive datatypes, we can instead reuse the existing ones. Also the current parser of SVGAnimateElement does not handle most unit types, nor is it possible to animate lists like SVGLengthList with the parsed content. An animation of values with different unit types is not possible: <rect width="20" height="20"> <animate animateAttribute="width" from="20px" to="10%" dur="4s"/> </rect> For the example above we would animate the rect width from 20px to 10px in 4 seconds and jump to the 10% of the viewport at the end of the animation. With using the parsers of SVG primitive datatypes we will also use the SVG primitive datatypes in the animation code itself. And that makes it possible to do such animations. In short: SVG primitive datatype -> string -> SVG primitive datatype animation -> string -> SVG primitive datatype. It will be easier to avoid the string transformation once all SVG primitive datatypes are supported. To hide the complexity of the animation code, the actual calculations of SVG animation specific values was moved to the corresponding SVGAnimated* files (SVGAnimatedLength.cpp for SVGLength). SVGAnimateElement itself just works with the new added generic datatype SVGAnimationType. SVGAnimatorFactory creates the SVG primitive datatype specific animators. This makes the main animation code a lot more readable and maintainable. With this patch I add the SVGAnimatorFactory and convert SVGLength animation to the new concept. Tests: svg/animations/svglength-animation-LengthModeHeight.html svg/animations/svglength-animation-LengthModeOther.html svg/animations/svglength-animation-LengthModeWidth.html svg/animations/svglength-animation-invalid-value-1.html svg/animations/svglength-animation-invalid-value-2.html svg/animations/svglength-animation-invalid-value-3.html svg/animations/svglength-animation-number-to-number.html svg/animations/svglength-animation-px-to-cm.html svg/animations/svglength-animation-px-to-ems.html svg/animations/svglength-animation-px-to-exs.html svg/animations/svglength-animation-px-to-in.html svg/animations/svglength-animation-px-to-number.html svg/animations/svglength-animation-px-to-pc.html svg/animations/svglength-animation-px-to-percentage.html svg/animations/svglength-animation-px-to-pt.html svg/animations/svglength-animation-px-to-px.html svg/animations/svglength-animation-values.html * CMakeLists.txt: Added new files to build system. * GNUmakefile.list.am: Ditto. * WebCore.gypi: Ditto. * WebCore.pro: Ditto. * WebCore.vcproj/WebCore.vcproj: Ditto. * WebCore.xcodeproj/project.pbxproj: Ditto. * svg/SVGAllInOne.cpp: Added SVGAnimatedLength.cpp for Win and other build systems. * svg/SVGAnimateElement.cpp: (WebCore::parseNumberValueAndUnit): Remove parsing code for SVGLength. Use SVGLength parser directly. (WebCore::SVGAnimateElement::adjustForCurrentColor): Made adjustForCurrentColor public as preperation for SVGAnimatedColor. (WebCore::getPropertyValue): Inline function to get computedStyle of CSS property. (WebCore::SVGAnimateElement::adjustForInheritance): Made adjustForInheritance as preperation for SVGAnimated* files. (WebCore::SVGAnimateElement::determineAnimatedAttributeType): SVGLength need special handling via SVGAnimator now. (WebCore::SVGAnimateElement::calculateAnimatedValue): Cleanup. Make use of SVGAnimator for SVGLength. (WebCore::SVGAnimateElement::calculateFromAndToValues): Ditto. (WebCore::SVGAnimateElement::calculateFromAndByValues): Ditto. (WebCore::SVGAnimateElement::resetToBaseValue): Ditto. (WebCore::SVGAnimateElement::applyResultsToTarget): Ditto. (WebCore::SVGAnimateElement::calculateDistance): Ditto. * svg/SVGAnimateElement.h: * svg/SVGAnimatedLength.cpp: Added. (WebCore::SVGAnimatedLengthAnimator::SVGAnimatedLengthAnimator): (WebCore::sharedSVGLength): (WebCore::SVGAnimatedLengthAnimator::constructFromString): (WebCore::SVGAnimatedLengthAnimator::calculateFromAndToValues): (WebCore::SVGAnimatedLengthAnimator::calculateFromAndByValues): (WebCore::SVGAnimatedLengthAnimator::calculateAnimatedValue): (WebCore::SVGAnimatedLengthAnimator::calculateDistance): * svg/SVGAnimatedLength.h: Added new class SVGAnimatedLengthAnimator which is responsible for the actual animation. (WebCore::SVGAnimatedLengthAnimator::~SVGAnimatedLengthAnimator): * svg/SVGAnimatedType.h: Added. Generic SVG unit type for animations in SVGAnimateElement. (WebCore::SVGAnimatedType::createLength): (WebCore::SVGAnimatedType::~SVGAnimatedType): (WebCore::SVGAnimatedType::type): (WebCore::SVGAnimatedType::length): (WebCore::SVGAnimatedType::SVGAnimatedType): * svg/SVGAnimatedTypeAnimator.h: Added. Base class for SVGAnimatedLengthAnimator and future SVG unit animators. (WebCore::SVGAnimatedTypeAnimator::~SVGAnimatedTypeAnimator): (WebCore::SVGAnimatedTypeAnimator::setContextElement): (WebCore::SVGAnimatedTypeAnimator::SVGAnimatedTypeAnimator): * svg/SVGAnimationElement.cpp: (WebCore::SVGAnimationElement::parseMappedAttribute): We do not use parseNumberValueAndUnit for SVGLength now. Have to strip white spaces here. Whitespaces shouldn't be stripped on the following attributes: 'from', 'to' and 'by'. This is not the case for SVGLength anymore. Added new tests to check this behavior. (WebCore::SVGAnimationElement::animationMode): Enum is accessible in WebCore namespace now. (WebCore::SVGAnimationElement::calcMode): Ditto. * svg/SVGAnimationElement.h: * svg/SVGAnimatorFactory.h: Added. (WebCore::SVGAnimatorFactory::create): * svg/SVGLength.cpp: (WebCore::SVGLength::setValueAsString): New setter with string and SVGLengthMode. (WebCore::SVGLength::lengthModeForAnimatedLengthAttribute): Get LengthMode for SVGLength depending on the attribute name. * svg/SVGLength.h: Canonical link: https://commits.webkit.org/78067@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@88663 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2011-06-13 18:48:36 +00:00
</body>
</html>