<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[208705] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/208705">208705</a></dd>
<dt>Author</dt> <dd>weinig@apple.com</dd>
<dt>Date</dt> <dd>2016-11-14 13:18:41 -0800 (Mon, 14 Nov 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>[SVG] Moving more special casing of SVG out of the bindings - SVGNumber/SVGPoint/SVGRect/SVGLength/SVGTransform/SVGMatrix
https://bugs.webkit.org/show_bug.cgi?id=164696

Reviewed by Darin Adler.

- Make SVGNumber, SVGPoint, SVGRect, SVGLength, SVGTransform and SVGMatrix
  real classes and stop special casing them in the bindings generator. This 
  removes the remaining non-list SVG specializations from the bindings generator.
- Renamed existing SVGLength, SVGTransform and SVGMatrix to SVGLengthValue, 
  SVGTransformValue and SVGMatrixValue. There are no SVNumberValue, SVGPointValue 
  and SVGRectValue classes, as float, FloatPoint and FloatRect can be used 
  directly. Going forward, we can get rid of SVGMatrixValue as well, and just
  use AffineTransform, but that will be done in a separate change.

* WebCore.xcodeproj/project.pbxproj:
* CMakeLists.txt:
Add new files.

* bindings/js/JSSVGLengthCustom.cpp:
(WebCore::JSSVGLength::value): Deleted.
(WebCore::JSSVGLength::setValue): Deleted.
(WebCore::JSSVGLength::convertToSpecifiedUnits): Deleted.
Removed. This can now be generated completely.

* bindings/scripts/CodeGenerator.pm:
(SkipIncludeHeader):
Remove special casing of SVGNumber. A header for it now exists.

(GetSVGWrappedTypeNeedingTearOff):
Remove special casing SVGPropertyTearOffs. None remain.

(ShouldPassWrapperByReference):
Allow all tear off types to be passed by reference.

(IsSVGTypeWithWritablePropertiesNeedingTearOff):
Remove now unused function.

* bindings/scripts/CodeGeneratorJS.pm:
(GetImplClassName):
(GenerateHeader):
(GenerateImplementation):
(GenerateParametersCheck):
(GenerateImplementationFunctionCall):
(GetSVGPropertyTypes):
(NativeToJSValue):
(GenerateConstructorDefinition):
Remove non-property tear off specific code. 
        
(IsNativeType): 
Remove unused function.

* css/CSSPropertyNames.in:
* css/SVGCSSComputedStyleDeclaration.cpp:
(WebCore::strokeDashArrayToCSSValueList):
(WebCore::ComputedStyleExtractor::svgPropertyValue):
* css/StyleBuilderConverter.h:
(WebCore::StyleBuilderConverter::convertSVGLengthValue):
(WebCore::StyleBuilderConverter::convertSVGLengthVector):
(WebCore::StyleBuilderConverter::convertStrokeDashArray):
* css/StyleBuilderCustom.h:
(WebCore::StyleBuilderCustom::applyValueBaselineShift):
* page/animation/CSSPropertyAnimation.cpp:
(WebCore::blendFunc):
(WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
* rendering/style/RenderStyle.h:
(WebCore::RenderStyle::strokeDashArray):
(WebCore::RenderStyle::setStrokeDashArray):
(WebCore::RenderStyle::baselineShiftValue):
(WebCore::RenderStyle::setBaselineShiftValue):
(WebCore::RenderStyle::kerning):
(WebCore::RenderStyle::setKerning):
* rendering/style/SVGRenderStyle.h:
(WebCore::SVGRenderStyle::initialStrokeDashArray):
(WebCore::SVGRenderStyle::initialBaselineShiftValue):
(WebCore::SVGRenderStyle::initialKerning):
(WebCore::SVGRenderStyle::setStrokeDashArray):
(WebCore::SVGRenderStyle::setKerning):
(WebCore::SVGRenderStyle::setBaselineShiftValue):
(WebCore::SVGRenderStyle::strokeDashArray):
(WebCore::SVGRenderStyle::kerning):
(WebCore::SVGRenderStyle::baselineShiftValue):
* rendering/style/SVGRenderStyleDefs.h:
Update for name change of SVGLength to SVGLengthValue.

* rendering/svg/RenderSVGImage.cpp:
Remove unused include.

* html/canvas/DOMPath.h:
Add an overload that takes a DOMMatrix, now that it is distinct from
AffineTransform.

* rendering/svg/RenderSVGRoot.cpp:
(WebCore::RenderSVGRoot::buildLocalToBorderBoxTransform):
Update for name change of SVGPoint to FloatPoint.

* rendering/svg/SVGRenderSupport.cpp:
(WebCore::SVGRenderSupport::applyStrokeStyleToContext):
* rendering/svg/SVGRenderTreeAsText.cpp:
(WebCore::writeStyle):
* rendering/svg/SVGTextLayoutEngineBaseline.cpp:
(WebCore::SVGTextLayoutEngineBaseline::calculateBaselineShift):
* rendering/svg/SVGTextLayoutEngineSpacing.cpp:
(WebCore::SVGTextLayoutEngineSpacing::calculateCSSKerningAndSpacing):
Update for name change of SVGLength to SVGLengthValue.

* rendering/svg/SVGTextQuery.cpp:
(WebCore::SVGTextQuery::startPositionOfCharacter):
(WebCore::SVGTextQuery::endPositionOfCharacter):
(WebCore::SVGTextQuery::characterNumberAtPosition):
* rendering/svg/SVGTextQuery.h:
Update for name change of SVGPoint to FloatPoint.

* svg/LinearGradientAttributes.h:
* svg/PatternAttributes.h:
* svg/RadialGradientAttributes.h:
Update for name change of SVGLength to SVGLengthValue.

* svg/SVGAllInOne.cpp:
Remove SVGLength.cpp

* svg/SVGAngle.h:
Add missing newline.

* svg/SVGAnimateTransformElement.cpp:
(WebCore::SVGAnimateTransformElement::SVGAnimateTransformElement):
(WebCore::SVGAnimateTransformElement::parseAttribute):
* svg/SVGAnimateTransformElement.h:
Update for name change of SVGTransform to SVGTransformValue.
        
* svg/SVGAnimatedLength.cpp:
(WebCore::SVGAnimatedLengthAnimator::SVGAnimatedLengthAnimator):
(WebCore::SVGAnimatedLengthAnimator::constructFromString):
(WebCore::SVGAnimatedLengthAnimator::addAnimatedTypes):
(WebCore::parseLengthFromString):
(WebCore::SVGAnimatedLengthAnimator::calculateAnimatedValue):
(WebCore::SVGAnimatedLengthAnimator::calculateDistance):
* svg/SVGAnimatedLength.h:
* svg/SVGAnimatedLengthList.cpp:
(WebCore::SVGAnimatedLengthListAnimator::SVGAnimatedLengthListAnimator):
(WebCore::SVGAnimatedLengthListAnimator::addAnimatedTypes):
(WebCore::parseLengthListFromString):
(WebCore::SVGAnimatedLengthListAnimator::calculateAnimatedValue):
* svg/SVGAnimatedLengthList.h:
Update for name change of SVGLength to SVGLengthValue.

* svg/SVGAnimatedNumberList.h:
Include the new SVGNumber.h and switch typedef to type alias.

* svg/SVGAnimatedPointList.cpp:
Add now necessary include of SVGPoint.h

* svg/SVGAnimatedRect.h:
Update for name change of SVGPropertyTearOff&lt;FloatRect&gt; to SVGRect.
    
* svg/SVGAnimatedTransformList.cpp:
(WebCore::SVGAnimatedTransformListAnimator::SVGAnimatedTransformListAnimator):
(WebCore::SVGAnimatedTransformListAnimator::addAnimatedTypes):
(WebCore::SVGAnimatedTransformListAnimator::calculateAnimatedValue):
(WebCore::SVGAnimatedTransformListAnimator::calculateDistance):
Update for name change of SVGTransform to SVGTransformValue.

* svg/SVGAnimatedType.cpp:
(WebCore::SVGAnimatedType::createLength):
(WebCore::SVGAnimatedType::setValueAsString):
* svg/SVGAnimatedType.h:
(WebCore::SVGAnimatedType::length):
* svg/SVGCircleElement.cpp:
(WebCore::SVGCircleElement::parseAttribute):
* svg/SVGCursorElement.cpp:
(WebCore::SVGCursorElement::parseAttribute):
* svg/SVGDocument.cpp:
(WebCore::SVGDocument::startPan):
* svg/SVGEllipseElement.cpp:
(WebCore::SVGEllipseElement::parseAttribute):
* svg/SVGFilterElement.cpp:
(WebCore::SVGFilterElement::parseAttribute):
* svg/SVGFilterPrimitiveStandardAttributes.cpp:
(WebCore::SVGFilterPrimitiveStandardAttributes::parseAttribute):
* svg/SVGForeignObjectElement.cpp:
(WebCore::SVGForeignObjectElement::parseAttribute):
* svg/SVGImageElement.cpp:
(WebCore::SVGImageElement::parseAttribute):
* svg/SVGLengthContext.cpp:
(WebCore::SVGLengthContext::resolveRectangle):
(WebCore::SVGLengthContext::resolvePoint):
(WebCore::SVGLengthContext::resolveLength):
* svg/SVGLengthContext.h:
* svg/SVGLengthList.cpp:
(WebCore::SVGLengthList::parse):
* svg/SVGLengthList.h:
(WebCore::SVGPropertyTraits&lt;SVGLengthList&gt;::initialValue):
* svg/SVGLineElement.cpp:
(WebCore::SVGLineElement::parseAttribute):
* svg/SVGLinearGradientElement.cpp:
(WebCore::SVGLinearGradientElement::parseAttribute):
* svg/SVGMarkerElement.cpp:
(WebCore::SVGMarkerElement::parseAttribute):
* svg/SVGMaskElement.cpp:
(WebCore::SVGMaskElement::parseAttribute):
* svg/SVGPatternElement.cpp:
(WebCore::SVGPatternElement::parseAttribute):
* svg/SVGRadialGradientElement.cpp:
(WebCore::SVGRadialGradientElement::parseAttribute):
* svg/SVGRectElement.cpp:
(WebCore::SVGRectElement::parseAttribute):
* svg/SVGTextPathElement.cpp:
(WebCore::SVGTextPathElement::parseAttribute):
Update for name change of SVGLength to SVGLengthValue.

* svg/SVGLength.cpp: Removed.
* svg/SVGLength.h:
(WebCore::SVGLength::create):
(WebCore::SVGLength::unitType):
(WebCore::SVGLength::valueForBindings):
(WebCore::SVGLength::setValueForBindings):
(WebCore::SVGLength::valueInSpecifiedUnits):
(WebCore::SVGLength::setValueInSpecifiedUnits):
(WebCore::SVGLength::valueAsString):
(WebCore::SVGLength::setValueAsString):
(WebCore::SVGLength::newValueSpecifiedUnits):
(WebCore::SVGLength::convertToSpecifiedUnits):
(WebCore::SVGLength::SVGLength):
Implement the SVGLength interface as a tear off.

* svg/SVGLength.idl:
Add annotations for exceptions, custom naming, and remove now unnecessary
custom binding annotation.

* svg/SVGLengthValue.cpp: Copied from Source/WebCore/svg/SVGLength.cpp.
* svg/SVGLengthValue.h: Copied from Source/WebCore/svg/SVGLength.h.

* svg/SVGGraphicsElement.cpp:
(WebCore::SVGGraphicsElement::getCTMForBindings):
(WebCore::SVGGraphicsElement::getScreenCTMForBindings):
(WebCore::SVGGraphicsElement::getBBoxForBindings):
* svg/SVGGraphicsElement.h:
Add bindings specific versions of transformation access functions that return
tear offs.

* svg/SVGGraphicsElement.idl:
Annotate tear off returning functions with NewObject and ImplementedAs as necessary.

* svg/SVGLocatable.cpp:
(WebCore::SVGLocatable::getTransformToElement):
* svg/SVGLocatable.h:
Change getTransformToElement to return a Ref&lt;SVGMatrix&gt; as that is what the binding
wants.

* svg/SVGMatrix.h:
Implement the SVGMatrix interface as a tear off.
        
* svg/SVGMatrix.idl:
Add annotations for exceptions. Remove meaningless Immutable annotation.

* svg/SVGMatrixValue.h: Copied from Source/WebCore/svg/SVGMatrix.h.

* svg/SVGNumber.h: Added.
(WebCore::SVGNumber::create):
(WebCore::SVGNumber::valueForBindings):
(WebCore::SVGNumber::setValueForBindings):
(WebCore::SVGNumber::SVGNumber):
Implement the SVGNumber interface as a tear off.

* svg/SVGNumber.idl:
Add exception annotation and custom naming annotations.

* svg/SVGNumberList.h:
Update for name change of SVGPropertyTearOff&lt;float&gt; to SVGNumber.

* svg/SVGPathElement.cpp:
(WebCore::SVGPathElement::getPointAtLength):
* svg/SVGPathElement.h:
Make getPointAtLength return a Ref&lt;SVGPoint&gt; to match the bindings.

* svg/SVGPathElement.idl:
Annotate getPointAtLength with [NewObject].

* svg/SVGPathTraversalStateBuilder.cpp:
(WebCore::SVGPathTraversalStateBuilder::currentPoint):
* svg/SVGPathTraversalStateBuilder.h:
* svg/SVGPathUtilities.cpp:
(WebCore::getPointAtLengthOfSVGPathByteStream):
* svg/SVGPathUtilities.h:
* svg/SVGPointList.cpp:
(WebCore::SVGPointList::valueAsString):
* svg/SVGPointList.h:
* svg/SVGPolyElement.cpp:
Update for name change of SVGPoint to FloatPoint.
        
* svg/SVGPoint.h:
(WebCore::SVGPoint::create):
(WebCore::SVGPoint::x):
(WebCore::SVGPoint::setX):
(WebCore::SVGPoint::y):
(WebCore::SVGPoint::setY):
(WebCore::SVGPoint::matrixTransform):
(WebCore::SVGPoint::SVGPoint):
Implement the SVGPoint interface as a tear off. Remove typedef of FloatPoint
to SVGPoint.

* svg/SVGPoint.idl:
Add exception and NewObject annotations.

* svg/SVGRect.h:
(WebCore::SVGRect::create):
(WebCore::SVGRect::x):
(WebCore::SVGRect::setX):
(WebCore::SVGRect::y):
(WebCore::SVGRect::setY):
(WebCore::SVGRect::width):
(WebCore::SVGRect::setWidth):
(WebCore::SVGRect::height):
(WebCore::SVGRect::setHeight):
Implement the SVGRect interface as a tear off. FloatRect SVGPropertyTraits have 
been moved to SVGRectTraits.h.

* svg/SVGRect.idl:
Add exception annotations.

* svg/SVGRectTraits.h: Copied from Source/WebCore/svg/SVGRect.cpp.
        
* svg/SVGSVGElement.cpp:
(WebCore::SVGSVGElement::viewport):
(WebCore::SVGSVGElement::currentTranslate):
(WebCore::SVGSVGElement::parseAttribute):
(WebCore::SVGSVGElement::collectIntersectionOrEnclosureList):
(WebCore::SVGSVGElement::getIntersectionList):
(WebCore::SVGSVGElement::getEnclosureList):
(WebCore::SVGSVGElement::checkIntersection):
(WebCore::SVGSVGElement::checkEnclosure):
(WebCore::SVGSVGElement::createSVGNumber):
(WebCore::SVGSVGElement::createSVGLength):
(WebCore::SVGSVGElement::createSVGPoint):
(WebCore::SVGSVGElement::createSVGMatrix):
(WebCore::SVGSVGElement::createSVGRect):
(WebCore::SVGSVGElement::createSVGTransform):
(WebCore::SVGSVGElement::createSVGTransformFromMatrix):
* svg/SVGSVGElement.h:
(WebCore::SVGSVGElement::currentTranslateValue):
(WebCore::SVGSVGElement::currentTranslate): Deleted.
(WebCore::SVGSVGElement::createSVGNumber): Deleted.
Update functions taking tear off values to take the wrappers, and update
the factory functions returning tear offs, to return the wrappers.
        
* svg/SVGSVGElement.idl:
Annotate functions/properties returning tear offs with [NewObject].

* svg/SVGTextContentElement.cpp:
(WebCore::SVGTextContentElement::synchronizeTextLength):
(WebCore::SVGTextContentElement::lookupOrCreateTextLengthWrapper):
(WebCore::SVGTextContentElement::textLengthAnimated):
(WebCore::SVGTextContentElement::getStartPositionOfChar):
(WebCore::SVGTextContentElement::getEndPositionOfChar):
(WebCore::SVGTextContentElement::getExtentOfChar):
(WebCore::SVGTextContentElement::getCharNumAtPosition):
(WebCore::SVGTextContentElement::parseAttribute):
* svg/SVGTextContentElement.h:
(WebCore::SVGTextContentElement::specifiedTextLength):
Update functions returning tear off values to return the wrappers
and ones taking the values to take the wrappers.

* svg/SVGTextContentElement.idl:
Annotate functions/properties returning tear offs with [NewObject].

* svg/SVGTransform.cpp:
(WebCore::SVGTransform::matrix):
* svg/SVGTransform.h:
(WebCore::SVGTransform::create):
(WebCore::SVGTransform::type):
(WebCore::SVGTransform::angle):
(WebCore::SVGTransform::setMatrix):
(WebCore::SVGTransform::setTranslate):
(WebCore::SVGTransform::setScale):
(WebCore::SVGTransform::setRotate):
(WebCore::SVGTransform::setSkewX):
(WebCore::SVGTransform::setSkewY):
Implement the SVGTransform interface as a tear off.

* svg/SVGTransform.idl:
Add ConstantsScope annotation to allow the constants to be defined on 
SVGTransformValue. Add exception and NewObject annotations.

* svg/SVGTransformDistance.cpp:
(WebCore::SVGTransformDistance::SVGTransformDistance):
(WebCore::SVGTransformDistance::scaledDistance):
(WebCore::SVGTransformDistance::addSVGTransforms):
(WebCore::SVGTransformDistance::addToSVGTransform):
(WebCore::SVGTransformDistance::distance):
* svg/SVGTransformDistance.h:
* svg/SVGTransformList.cpp:
(WebCore::SVGTransformList::createSVGTransformFromMatrix):
(WebCore::SVGTransformList::consolidate):
* svg/SVGTransformList.h:
(WebCore::SVGPropertyTraits&lt;SVGTransformList&gt;::initialValue):
* svg/SVGTransformable.cpp:
(WebCore::SVGTransformable::parseTransformValue):
(WebCore::parseAndSkipType):
(WebCore::SVGTransformable::parseTransformType):
(WebCore::SVGTransformable::parseTransformAttribute):
* svg/SVGTransformable.h:
* svg/SVGUseElement.cpp:
(WebCore::SVGUseElement::parseAttribute):
Update for name change of SVGTransform to SVGTransformValue.

* svg/SVGTransformList.idl:
Annotate functions returning tear offs with NewObject.

* svg/SVGTransformValue.cpp: Copied from Source/WebCore/svg/SVGTransform.cpp.
* svg/SVGTransformValue.h: Copied from Source/WebCore/svg/SVGTransform.h.

* svg/SVGZoomEvent.cpp:
(WebCore::SVGZoomEvent::zoomRectScreen):
(WebCore::SVGZoomEvent::previousTranslate):
(WebCore::SVGZoomEvent::newTranslate):
* svg/SVGZoomEvent.h:
Update for change to SVGPoint/SVGRect. SVGPoint values become FloatPoints. Functions
returning SVGPoint/SVGRect now return Ref&lt;SVGPoint&gt;/Ref&lt;SVGRect&gt;.

* svg/SVGZoomEvent.idl:
Annotate function returning tear off with NewObject.

* svg/properties/SVGAnimatedListPropertyTearOff.h:
(WebCore::SVGAnimatedListPropertyTearOff::findItem):
Switch typedefs to type aliases. Define ListItemTearOff using SVGPropertyTraits
to get the correct tear off type (as we do for the other list property tear off 
classes.)
 
* svg/properties/SVGListProperty.h:
(WebCore::SVGListProperty::clearValues):
(WebCore::SVGListProperty::clearValuesAndWrappers):
(WebCore::SVGListProperty::initializeValues):
(WebCore::SVGListProperty::initializeValuesAndWrappers):
(WebCore::SVGListProperty::getItemValues):
(WebCore::SVGListProperty::getItemValuesAndWrappers):
(WebCore::SVGListProperty::insertItemBeforeValues):
(WebCore::SVGListProperty::insertItemBeforeValuesAndWrappers):
(WebCore::SVGListProperty::canReplaceItem):
(WebCore::SVGListProperty::replaceItemValues):
(WebCore::SVGListProperty::replaceItemValuesAndWrappers):
(WebCore::SVGListProperty::canRemoveItem):
(WebCore::SVGListProperty::removeItemValues):
(WebCore::SVGListProperty::removeItemValuesAndWrappers):
(WebCore::SVGListProperty::appendItemValues):
(WebCore::SVGListProperty::appendItemValuesAndWrappers):
* svg/properties/SVGListPropertyTearOff.h:
(WebCore::SVGListPropertyTearOff::initialize):
(WebCore::SVGListPropertyTearOff::getItem):
(WebCore::SVGListPropertyTearOff::insertItemBefore):
(WebCore::SVGListPropertyTearOff::replaceItem):
(WebCore::SVGListPropertyTearOff::removeItem):
(WebCore::SVGListPropertyTearOff::appendItem):
* svg/properties/SVGPathSegListPropertyTearOff.h:
* svg/properties/SVGStaticListPropertyTearOff.h:
* svg/properties/SVGTransformListPropertyTearOff.h:
Change functions returning PtrListItemTearOff, to instead return
Ref&lt;ListItemTearOff&gt;. To accomplish this, remove unreachable conditions
that were returning nullptr, and replace them with a assertions (these
were cases where a function like canGetItem() was called, and it only
did one of two things, returning an exception, or returned true).

* svg/properties/SVGMatrixTearOff.h:
Update for SVGMatrix's addition, this can now inherit from SVGMatrix. Remove
incorrect comment and update some SVGMatrix types to SVGMatrixValues.

* svg/properties/SVGStaticPropertyTearOff.h:
Require the use of SVGStaticPropertyTearOff to pass in the tear off type, rather
than the value type, so it can be directly inherited from. This allow the one user 
of this class, SVGSVGElement::currentTranslate, to specialize on SVGPoint directly. 

* bindings/scripts/test/JS/JSTestObj.cpp:
* bindings/scripts/test/JS/JSTestTypedefs.cpp:
Update test results now that svg property tear offs are not handled specially.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreCMakeListstxt">trunk/Source/WebCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSBindingsAllInOnecpp">trunk/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorpm">trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSPropertyNamesin">trunk/Source/WebCore/css/CSSPropertyNames.in</a></li>
<li><a href="#trunkSourceWebCorecssSVGCSSComputedStyleDeclarationcpp">trunk/Source/WebCore/css/SVGCSSComputedStyleDeclaration.cpp</a></li>
<li><a href="#trunkSourceWebCorecssStyleBuilderConverterh">trunk/Source/WebCore/css/StyleBuilderConverter.h</a></li>
<li><a href="#trunkSourceWebCorecssStyleBuilderCustomh">trunk/Source/WebCore/css/StyleBuilderCustom.h</a></li>
<li><a href="#trunkSourceWebCorehtmlcanvasDOMPathh">trunk/Source/WebCore/html/canvas/DOMPath.h</a></li>
<li><a href="#trunkSourceWebCorepageanimationCSSPropertyAnimationcpp">trunk/Source/WebCore/page/animation/CSSPropertyAnimation.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleRenderStyleh">trunk/Source/WebCore/rendering/style/RenderStyle.h</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleSVGRenderStyleh">trunk/Source/WebCore/rendering/style/SVGRenderStyle.h</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleSVGRenderStyleDefsh">trunk/Source/WebCore/rendering/style/SVGRenderStyleDefs.h</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGImagecpp">trunk/Source/WebCore/rendering/svg/RenderSVGImage.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGRootcpp">trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgSVGPathDatacpp">trunk/Source/WebCore/rendering/svg/SVGPathData.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgSVGRenderSupportcpp">trunk/Source/WebCore/rendering/svg/SVGRenderSupport.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgSVGRenderTreeAsTextcpp">trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgSVGTextLayoutEngineBaselinecpp">trunk/Source/WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgSVGTextLayoutEngineSpacingcpp">trunk/Source/WebCore/rendering/svg/SVGTextLayoutEngineSpacing.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgSVGTextQuerycpp">trunk/Source/WebCore/rendering/svg/SVGTextQuery.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgSVGTextQueryh">trunk/Source/WebCore/rendering/svg/SVGTextQuery.h</a></li>
<li><a href="#trunkSourceWebCoresvgLinearGradientAttributesh">trunk/Source/WebCore/svg/LinearGradientAttributes.h</a></li>
<li><a href="#trunkSourceWebCoresvgPatternAttributesh">trunk/Source/WebCore/svg/PatternAttributes.h</a></li>
<li><a href="#trunkSourceWebCoresvgRadialGradientAttributesh">trunk/Source/WebCore/svg/RadialGradientAttributes.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAllInOnecpp">trunk/Source/WebCore/svg/SVGAllInOne.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAngleh">trunk/Source/WebCore/svg/SVGAngle.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateTransformElementcpp">trunk/Source/WebCore/svg/SVGAnimateTransformElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimateTransformElementh">trunk/Source/WebCore/svg/SVGAnimateTransformElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedLengthcpp">trunk/Source/WebCore/svg/SVGAnimatedLength.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedLengthh">trunk/Source/WebCore/svg/SVGAnimatedLength.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedLengthListcpp">trunk/Source/WebCore/svg/SVGAnimatedLengthList.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedLengthListh">trunk/Source/WebCore/svg/SVGAnimatedLengthList.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedNumberListh">trunk/Source/WebCore/svg/SVGAnimatedNumberList.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedPointListcpp">trunk/Source/WebCore/svg/SVGAnimatedPointList.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedRecth">trunk/Source/WebCore/svg/SVGAnimatedRect.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedTransformListcpp">trunk/Source/WebCore/svg/SVGAnimatedTransformList.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedTypecpp">trunk/Source/WebCore/svg/SVGAnimatedType.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGAnimatedTypeh">trunk/Source/WebCore/svg/SVGAnimatedType.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGCircleElementcpp">trunk/Source/WebCore/svg/SVGCircleElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGCursorElementcpp">trunk/Source/WebCore/svg/SVGCursorElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGDocumentcpp">trunk/Source/WebCore/svg/SVGDocument.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGEllipseElementcpp">trunk/Source/WebCore/svg/SVGEllipseElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFilterElementcpp">trunk/Source/WebCore/svg/SVGFilterElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFilterPrimitiveStandardAttributescpp">trunk/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGForeignObjectElementcpp">trunk/Source/WebCore/svg/SVGForeignObjectElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGGraphicsElementcpp">trunk/Source/WebCore/svg/SVGGraphicsElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGGraphicsElementh">trunk/Source/WebCore/svg/SVGGraphicsElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGGraphicsElementidl">trunk/Source/WebCore/svg/SVGGraphicsElement.idl</a></li>
<li><a href="#trunkSourceWebCoresvgSVGImageElementcpp">trunk/Source/WebCore/svg/SVGImageElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGLengthh">trunk/Source/WebCore/svg/SVGLength.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGLengthidl">trunk/Source/WebCore/svg/SVGLength.idl</a></li>
<li><a href="#trunkSourceWebCoresvgSVGLengthContextcpp">trunk/Source/WebCore/svg/SVGLengthContext.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGLengthContexth">trunk/Source/WebCore/svg/SVGLengthContext.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGLengthListcpp">trunk/Source/WebCore/svg/SVGLengthList.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGLengthListh">trunk/Source/WebCore/svg/SVGLengthList.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGLineElementcpp">trunk/Source/WebCore/svg/SVGLineElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGLinearGradientElementcpp">trunk/Source/WebCore/svg/SVGLinearGradientElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGLocatablecpp">trunk/Source/WebCore/svg/SVGLocatable.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGLocatableh">trunk/Source/WebCore/svg/SVGLocatable.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGMarkerElementcpp">trunk/Source/WebCore/svg/SVGMarkerElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGMaskElementcpp">trunk/Source/WebCore/svg/SVGMaskElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGMatrixh">trunk/Source/WebCore/svg/SVGMatrix.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGMatrixidl">trunk/Source/WebCore/svg/SVGMatrix.idl</a></li>
<li><a href="#trunkSourceWebCoresvgSVGNumberidl">trunk/Source/WebCore/svg/SVGNumber.idl</a></li>
<li><a href="#trunkSourceWebCoresvgSVGNumberListh">trunk/Source/WebCore/svg/SVGNumberList.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathElementcpp">trunk/Source/WebCore/svg/SVGPathElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathElementh">trunk/Source/WebCore/svg/SVGPathElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathElementidl">trunk/Source/WebCore/svg/SVGPathElement.idl</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathTraversalStateBuildercpp">trunk/Source/WebCore/svg/SVGPathTraversalStateBuilder.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathTraversalStateBuilderh">trunk/Source/WebCore/svg/SVGPathTraversalStateBuilder.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathUtilitiescpp">trunk/Source/WebCore/svg/SVGPathUtilities.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPathUtilitiesh">trunk/Source/WebCore/svg/SVGPathUtilities.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPatternElementcpp">trunk/Source/WebCore/svg/SVGPatternElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPointh">trunk/Source/WebCore/svg/SVGPoint.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPointidl">trunk/Source/WebCore/svg/SVGPoint.idl</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPointListcpp">trunk/Source/WebCore/svg/SVGPointList.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPointListh">trunk/Source/WebCore/svg/SVGPointList.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGPolyElementcpp">trunk/Source/WebCore/svg/SVGPolyElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGRadialGradientElementcpp">trunk/Source/WebCore/svg/SVGRadialGradientElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGRecth">trunk/Source/WebCore/svg/SVGRect.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGRectidl">trunk/Source/WebCore/svg/SVGRect.idl</a></li>
<li><a href="#trunkSourceWebCoresvgSVGRectElementcpp">trunk/Source/WebCore/svg/SVGRectElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGSVGElementcpp">trunk/Source/WebCore/svg/SVGSVGElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGSVGElementh">trunk/Source/WebCore/svg/SVGSVGElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGSVGElementidl">trunk/Source/WebCore/svg/SVGSVGElement.idl</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTextContentElementcpp">trunk/Source/WebCore/svg/SVGTextContentElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTextContentElementh">trunk/Source/WebCore/svg/SVGTextContentElement.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTextContentElementidl">trunk/Source/WebCore/svg/SVGTextContentElement.idl</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTextPathElementcpp">trunk/Source/WebCore/svg/SVGTextPathElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTransformcpp">trunk/Source/WebCore/svg/SVGTransform.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTransformh">trunk/Source/WebCore/svg/SVGTransform.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTransformidl">trunk/Source/WebCore/svg/SVGTransform.idl</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTransformDistancecpp">trunk/Source/WebCore/svg/SVGTransformDistance.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTransformDistanceh">trunk/Source/WebCore/svg/SVGTransformDistance.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTransformListcpp">trunk/Source/WebCore/svg/SVGTransformList.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTransformListh">trunk/Source/WebCore/svg/SVGTransformList.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTransformListidl">trunk/Source/WebCore/svg/SVGTransformList.idl</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTransformablecpp">trunk/Source/WebCore/svg/SVGTransformable.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTransformableh">trunk/Source/WebCore/svg/SVGTransformable.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGUseElementcpp">trunk/Source/WebCore/svg/SVGUseElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGZoomEventcpp">trunk/Source/WebCore/svg/SVGZoomEvent.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGZoomEventh">trunk/Source/WebCore/svg/SVGZoomEvent.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGZoomEventidl">trunk/Source/WebCore/svg/SVGZoomEvent.idl</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGAnimatedListPropertyTearOffh">trunk/Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGListPropertyh">trunk/Source/WebCore/svg/properties/SVGListProperty.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGListPropertyTearOffh">trunk/Source/WebCore/svg/properties/SVGListPropertyTearOff.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGMatrixTearOffh">trunk/Source/WebCore/svg/properties/SVGMatrixTearOff.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGPathSegListPropertyTearOffh">trunk/Source/WebCore/svg/properties/SVGPathSegListPropertyTearOff.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGStaticListPropertyTearOffh">trunk/Source/WebCore/svg/properties/SVGStaticListPropertyTearOff.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGStaticPropertyTearOffh">trunk/Source/WebCore/svg/properties/SVGStaticPropertyTearOff.h</a></li>
<li><a href="#trunkSourceWebCoresvgpropertiesSVGTransformListPropertyTearOffh">trunk/Source/WebCore/svg/properties/SVGTransformListPropertyTearOff.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoresvgSVGLengthValuecpp">trunk/Source/WebCore/svg/SVGLengthValue.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGLengthValueh">trunk/Source/WebCore/svg/SVGLengthValue.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGMatrixValueh">trunk/Source/WebCore/svg/SVGMatrixValue.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGNumberh">trunk/Source/WebCore/svg/SVGNumber.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGRectTraitsh">trunk/Source/WebCore/svg/SVGRectTraits.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTransformValuecpp">trunk/Source/WebCore/svg/SVGTransformValue.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGTransformValueh">trunk/Source/WebCore/svg/SVGTransformValue.h</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceWebCorebindingsjsJSSVGLengthCustomcpp">trunk/Source/WebCore/bindings/js/JSSVGLengthCustom.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGLengthcpp">trunk/Source/WebCore/svg/SVGLength.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/CMakeLists.txt        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -1185,7 +1185,6 @@
</span><span class="cx">     bindings/js/JSRTCStatsResponseCustom.cpp
</span><span class="cx">     bindings/js/JSSQLResultSetRowListCustom.cpp
</span><span class="cx">     bindings/js/JSSQLTransactionCustom.cpp
</span><del>-    bindings/js/JSSVGLengthCustom.cpp
</del><span class="cx">     bindings/js/JSSVGPathSegCustom.cpp
</span><span class="cx">     bindings/js/JSStorageCustom.cpp
</span><span class="cx">     bindings/js/JSStyleSheetCustom.cpp
</span><span class="lines">@@ -2768,9 +2767,9 @@
</span><span class="cx">     svg/SVGImageElement.cpp
</span><span class="cx">     svg/SVGImageLoader.cpp
</span><span class="cx">     svg/SVGLangSpace.cpp
</span><del>-    svg/SVGLength.cpp
</del><span class="cx">     svg/SVGLengthContext.cpp
</span><span class="cx">     svg/SVGLengthList.cpp
</span><ins>+    svg/SVGLengthValue.cpp
</ins><span class="cx">     svg/SVGLineElement.cpp
</span><span class="cx">     svg/SVGLinearGradientElement.cpp
</span><span class="cx">     svg/SVGLocatable.cpp
</span><span class="lines">@@ -2823,6 +2822,7 @@
</span><span class="cx">     svg/SVGTransform.cpp
</span><span class="cx">     svg/SVGTransformDistance.cpp
</span><span class="cx">     svg/SVGTransformList.cpp
</span><ins>+    svg/SVGTransformValue.cpp
</ins><span class="cx">     svg/SVGTransformable.cpp
</span><span class="cx">     svg/SVGURIReference.cpp
</span><span class="cx">     svg/SVGUseElement.cpp
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/ChangeLog        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -1,3 +1,478 @@
</span><ins>+2016-11-12  Sam Weinig  &lt;sam@webkit.org&gt;
+
+        [SVG] Moving more special casing of SVG out of the bindings - SVGNumber/SVGPoint/SVGRect/SVGLength/SVGTransform/SVGMatrix
+        https://bugs.webkit.org/show_bug.cgi?id=164696
+
+        Reviewed by Darin Adler.
+
+        - Make SVGNumber, SVGPoint, SVGRect, SVGLength, SVGTransform and SVGMatrix
+          real classes and stop special casing them in the bindings generator. This 
+          removes the remaining non-list SVG specializations from the bindings generator.
+        - Renamed existing SVGLength, SVGTransform and SVGMatrix to SVGLengthValue, 
+          SVGTransformValue and SVGMatrixValue. There are no SVNumberValue, SVGPointValue 
+          and SVGRectValue classes, as float, FloatPoint and FloatRect can be used 
+          directly. Going forward, we can get rid of SVGMatrixValue as well, and just
+          use AffineTransform, but that will be done in a separate change.
+
+        * WebCore.xcodeproj/project.pbxproj:
+        * CMakeLists.txt:
+        Add new files.
+
+        * bindings/js/JSSVGLengthCustom.cpp:
+        (WebCore::JSSVGLength::value): Deleted.
+        (WebCore::JSSVGLength::setValue): Deleted.
+        (WebCore::JSSVGLength::convertToSpecifiedUnits): Deleted.
+        Removed. This can now be generated completely.
+
+        * bindings/scripts/CodeGenerator.pm:
+        (SkipIncludeHeader):
+        Remove special casing of SVGNumber. A header for it now exists.
+
+        (GetSVGWrappedTypeNeedingTearOff):
+        Remove special casing SVGPropertyTearOffs. None remain.
+
+        (ShouldPassWrapperByReference):
+        Allow all tear off types to be passed by reference.
+
+        (IsSVGTypeWithWritablePropertiesNeedingTearOff):
+        Remove now unused function.
+
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GetImplClassName):
+        (GenerateHeader):
+        (GenerateImplementation):
+        (GenerateParametersCheck):
+        (GenerateImplementationFunctionCall):
+        (GetSVGPropertyTypes):
+        (NativeToJSValue):
+        (GenerateConstructorDefinition):
+        Remove non-property tear off specific code. 
+        
+        (IsNativeType): 
+        Remove unused function.
+
+        * css/CSSPropertyNames.in:
+        * css/SVGCSSComputedStyleDeclaration.cpp:
+        (WebCore::strokeDashArrayToCSSValueList):
+        (WebCore::ComputedStyleExtractor::svgPropertyValue):
+        * css/StyleBuilderConverter.h:
+        (WebCore::StyleBuilderConverter::convertSVGLengthValue):
+        (WebCore::StyleBuilderConverter::convertSVGLengthVector):
+        (WebCore::StyleBuilderConverter::convertStrokeDashArray):
+        * css/StyleBuilderCustom.h:
+        (WebCore::StyleBuilderCustom::applyValueBaselineShift):
+        * page/animation/CSSPropertyAnimation.cpp:
+        (WebCore::blendFunc):
+        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
+        * rendering/style/RenderStyle.h:
+        (WebCore::RenderStyle::strokeDashArray):
+        (WebCore::RenderStyle::setStrokeDashArray):
+        (WebCore::RenderStyle::baselineShiftValue):
+        (WebCore::RenderStyle::setBaselineShiftValue):
+        (WebCore::RenderStyle::kerning):
+        (WebCore::RenderStyle::setKerning):
+        * rendering/style/SVGRenderStyle.h:
+        (WebCore::SVGRenderStyle::initialStrokeDashArray):
+        (WebCore::SVGRenderStyle::initialBaselineShiftValue):
+        (WebCore::SVGRenderStyle::initialKerning):
+        (WebCore::SVGRenderStyle::setStrokeDashArray):
+        (WebCore::SVGRenderStyle::setKerning):
+        (WebCore::SVGRenderStyle::setBaselineShiftValue):
+        (WebCore::SVGRenderStyle::strokeDashArray):
+        (WebCore::SVGRenderStyle::kerning):
+        (WebCore::SVGRenderStyle::baselineShiftValue):
+        * rendering/style/SVGRenderStyleDefs.h:
+        Update for name change of SVGLength to SVGLengthValue.
+
+        * rendering/svg/RenderSVGImage.cpp:
+        Remove unused include.
+
+        * html/canvas/DOMPath.h:
+        Add an overload that takes a DOMMatrix, now that it is distinct from
+        AffineTransform.
+
+        * rendering/svg/RenderSVGRoot.cpp:
+        (WebCore::RenderSVGRoot::buildLocalToBorderBoxTransform):
+        Update for name change of SVGPoint to FloatPoint.
+
+        * rendering/svg/SVGRenderSupport.cpp:
+        (WebCore::SVGRenderSupport::applyStrokeStyleToContext):
+        * rendering/svg/SVGRenderTreeAsText.cpp:
+        (WebCore::writeStyle):
+        * rendering/svg/SVGTextLayoutEngineBaseline.cpp:
+        (WebCore::SVGTextLayoutEngineBaseline::calculateBaselineShift):
+        * rendering/svg/SVGTextLayoutEngineSpacing.cpp:
+        (WebCore::SVGTextLayoutEngineSpacing::calculateCSSKerningAndSpacing):
+        Update for name change of SVGLength to SVGLengthValue.
+
+        * rendering/svg/SVGTextQuery.cpp:
+        (WebCore::SVGTextQuery::startPositionOfCharacter):
+        (WebCore::SVGTextQuery::endPositionOfCharacter):
+        (WebCore::SVGTextQuery::characterNumberAtPosition):
+        * rendering/svg/SVGTextQuery.h:
+        Update for name change of SVGPoint to FloatPoint.
+
+        * svg/LinearGradientAttributes.h:
+        * svg/PatternAttributes.h:
+        * svg/RadialGradientAttributes.h:
+        Update for name change of SVGLength to SVGLengthValue.
+
+        * svg/SVGAllInOne.cpp:
+        Remove SVGLength.cpp
+
+        * svg/SVGAngle.h:
+        Add missing newline.
+
+        * svg/SVGAnimateTransformElement.cpp:
+        (WebCore::SVGAnimateTransformElement::SVGAnimateTransformElement):
+        (WebCore::SVGAnimateTransformElement::parseAttribute):
+        * svg/SVGAnimateTransformElement.h:
+        Update for name change of SVGTransform to SVGTransformValue.
+        
+        * svg/SVGAnimatedLength.cpp:
+        (WebCore::SVGAnimatedLengthAnimator::SVGAnimatedLengthAnimator):
+        (WebCore::SVGAnimatedLengthAnimator::constructFromString):
+        (WebCore::SVGAnimatedLengthAnimator::addAnimatedTypes):
+        (WebCore::parseLengthFromString):
+        (WebCore::SVGAnimatedLengthAnimator::calculateAnimatedValue):
+        (WebCore::SVGAnimatedLengthAnimator::calculateDistance):
+        * svg/SVGAnimatedLength.h:
+        * svg/SVGAnimatedLengthList.cpp:
+        (WebCore::SVGAnimatedLengthListAnimator::SVGAnimatedLengthListAnimator):
+        (WebCore::SVGAnimatedLengthListAnimator::addAnimatedTypes):
+        (WebCore::parseLengthListFromString):
+        (WebCore::SVGAnimatedLengthListAnimator::calculateAnimatedValue):
+        * svg/SVGAnimatedLengthList.h:
+        Update for name change of SVGLength to SVGLengthValue.
+
+        * svg/SVGAnimatedNumberList.h:
+        Include the new SVGNumber.h and switch typedef to type alias.
+
+        * svg/SVGAnimatedPointList.cpp:
+        Add now necessary include of SVGPoint.h
+
+        * svg/SVGAnimatedRect.h:
+        Update for name change of SVGPropertyTearOff&lt;FloatRect&gt; to SVGRect.
+    
+        * svg/SVGAnimatedTransformList.cpp:
+        (WebCore::SVGAnimatedTransformListAnimator::SVGAnimatedTransformListAnimator):
+        (WebCore::SVGAnimatedTransformListAnimator::addAnimatedTypes):
+        (WebCore::SVGAnimatedTransformListAnimator::calculateAnimatedValue):
+        (WebCore::SVGAnimatedTransformListAnimator::calculateDistance):
+        Update for name change of SVGTransform to SVGTransformValue.
+
+        * svg/SVGAnimatedType.cpp:
+        (WebCore::SVGAnimatedType::createLength):
+        (WebCore::SVGAnimatedType::setValueAsString):
+        * svg/SVGAnimatedType.h:
+        (WebCore::SVGAnimatedType::length):
+        * svg/SVGCircleElement.cpp:
+        (WebCore::SVGCircleElement::parseAttribute):
+        * svg/SVGCursorElement.cpp:
+        (WebCore::SVGCursorElement::parseAttribute):
+        * svg/SVGDocument.cpp:
+        (WebCore::SVGDocument::startPan):
+        * svg/SVGEllipseElement.cpp:
+        (WebCore::SVGEllipseElement::parseAttribute):
+        * svg/SVGFilterElement.cpp:
+        (WebCore::SVGFilterElement::parseAttribute):
+        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
+        (WebCore::SVGFilterPrimitiveStandardAttributes::parseAttribute):
+        * svg/SVGForeignObjectElement.cpp:
+        (WebCore::SVGForeignObjectElement::parseAttribute):
+        * svg/SVGImageElement.cpp:
+        (WebCore::SVGImageElement::parseAttribute):
+        * svg/SVGLengthContext.cpp:
+        (WebCore::SVGLengthContext::resolveRectangle):
+        (WebCore::SVGLengthContext::resolvePoint):
+        (WebCore::SVGLengthContext::resolveLength):
+        * svg/SVGLengthContext.h:
+        * svg/SVGLengthList.cpp:
+        (WebCore::SVGLengthList::parse):
+        * svg/SVGLengthList.h:
+        (WebCore::SVGPropertyTraits&lt;SVGLengthList&gt;::initialValue):
+        * svg/SVGLineElement.cpp:
+        (WebCore::SVGLineElement::parseAttribute):
+        * svg/SVGLinearGradientElement.cpp:
+        (WebCore::SVGLinearGradientElement::parseAttribute):
+        * svg/SVGMarkerElement.cpp:
+        (WebCore::SVGMarkerElement::parseAttribute):
+        * svg/SVGMaskElement.cpp:
+        (WebCore::SVGMaskElement::parseAttribute):
+        * svg/SVGPatternElement.cpp:
+        (WebCore::SVGPatternElement::parseAttribute):
+        * svg/SVGRadialGradientElement.cpp:
+        (WebCore::SVGRadialGradientElement::parseAttribute):
+        * svg/SVGRectElement.cpp:
+        (WebCore::SVGRectElement::parseAttribute):
+        * svg/SVGTextPathElement.cpp:
+        (WebCore::SVGTextPathElement::parseAttribute):
+        Update for name change of SVGLength to SVGLengthValue.
+
+        * svg/SVGLength.cpp: Removed.
+        * svg/SVGLength.h:
+        (WebCore::SVGLength::create):
+        (WebCore::SVGLength::unitType):
+        (WebCore::SVGLength::valueForBindings):
+        (WebCore::SVGLength::setValueForBindings):
+        (WebCore::SVGLength::valueInSpecifiedUnits):
+        (WebCore::SVGLength::setValueInSpecifiedUnits):
+        (WebCore::SVGLength::valueAsString):
+        (WebCore::SVGLength::setValueAsString):
+        (WebCore::SVGLength::newValueSpecifiedUnits):
+        (WebCore::SVGLength::convertToSpecifiedUnits):
+        (WebCore::SVGLength::SVGLength):
+        Implement the SVGLength interface as a tear off.
+
+        * svg/SVGLength.idl:
+        Add annotations for exceptions, custom naming, and remove now unnecessary
+        custom binding annotation.
+
+        * svg/SVGLengthValue.cpp: Copied from Source/WebCore/svg/SVGLength.cpp.
+        * svg/SVGLengthValue.h: Copied from Source/WebCore/svg/SVGLength.h.
+
+        * svg/SVGGraphicsElement.cpp:
+        (WebCore::SVGGraphicsElement::getCTMForBindings):
+        (WebCore::SVGGraphicsElement::getScreenCTMForBindings):
+        (WebCore::SVGGraphicsElement::getBBoxForBindings):
+        * svg/SVGGraphicsElement.h:
+        Add bindings specific versions of transformation access functions that return
+        tear offs.
+
+        * svg/SVGGraphicsElement.idl:
+        Annotate tear off returning functions with NewObject and ImplementedAs as necessary.
+
+        * svg/SVGLocatable.cpp:
+        (WebCore::SVGLocatable::getTransformToElement):
+        * svg/SVGLocatable.h:
+        Change getTransformToElement to return a Ref&lt;SVGMatrix&gt; as that is what the binding
+        wants.
+
+        * svg/SVGMatrix.h:
+        Implement the SVGMatrix interface as a tear off.
+        
+        * svg/SVGMatrix.idl:
+        Add annotations for exceptions. Remove meaningless Immutable annotation.
+
+        * svg/SVGMatrixValue.h: Copied from Source/WebCore/svg/SVGMatrix.h.
+
+        * svg/SVGNumber.h: Added.
+        (WebCore::SVGNumber::create):
+        (WebCore::SVGNumber::valueForBindings):
+        (WebCore::SVGNumber::setValueForBindings):
+        (WebCore::SVGNumber::SVGNumber):
+        Implement the SVGNumber interface as a tear off.
+
+        * svg/SVGNumber.idl:
+        Add exception annotation and custom naming annotations.
+
+        * svg/SVGNumberList.h:
+        Update for name change of SVGPropertyTearOff&lt;float&gt; to SVGNumber.
+
+        * svg/SVGPathElement.cpp:
+        (WebCore::SVGPathElement::getPointAtLength):
+        * svg/SVGPathElement.h:
+        Make getPointAtLength return a Ref&lt;SVGPoint&gt; to match the bindings.
+
+        * svg/SVGPathElement.idl:
+        Annotate getPointAtLength with [NewObject].
+
+        * svg/SVGPathTraversalStateBuilder.cpp:
+        (WebCore::SVGPathTraversalStateBuilder::currentPoint):
+        * svg/SVGPathTraversalStateBuilder.h:
+        * svg/SVGPathUtilities.cpp:
+        (WebCore::getPointAtLengthOfSVGPathByteStream):
+        * svg/SVGPathUtilities.h:
+        * svg/SVGPointList.cpp:
+        (WebCore::SVGPointList::valueAsString):
+        * svg/SVGPointList.h:
+        * svg/SVGPolyElement.cpp:
+        Update for name change of SVGPoint to FloatPoint.
+        
+        * svg/SVGPoint.h:
+        (WebCore::SVGPoint::create):
+        (WebCore::SVGPoint::x):
+        (WebCore::SVGPoint::setX):
+        (WebCore::SVGPoint::y):
+        (WebCore::SVGPoint::setY):
+        (WebCore::SVGPoint::matrixTransform):
+        (WebCore::SVGPoint::SVGPoint):
+        Implement the SVGPoint interface as a tear off. Remove typedef of FloatPoint
+        to SVGPoint.
+
+        * svg/SVGPoint.idl:
+        Add exception and NewObject annotations.
+
+        * svg/SVGRect.h:
+        (WebCore::SVGRect::create):
+        (WebCore::SVGRect::x):
+        (WebCore::SVGRect::setX):
+        (WebCore::SVGRect::y):
+        (WebCore::SVGRect::setY):
+        (WebCore::SVGRect::width):
+        (WebCore::SVGRect::setWidth):
+        (WebCore::SVGRect::height):
+        (WebCore::SVGRect::setHeight):
+        Implement the SVGRect interface as a tear off. FloatRect SVGPropertyTraits have 
+        been moved to SVGRectTraits.h.
+
+        * svg/SVGRect.idl:
+        Add exception annotations.
+
+        * svg/SVGRectTraits.h: Copied from Source/WebCore/svg/SVGRect.cpp.
+        
+        * svg/SVGSVGElement.cpp:
+        (WebCore::SVGSVGElement::viewport):
+        (WebCore::SVGSVGElement::currentTranslate):
+        (WebCore::SVGSVGElement::parseAttribute):
+        (WebCore::SVGSVGElement::collectIntersectionOrEnclosureList):
+        (WebCore::SVGSVGElement::getIntersectionList):
+        (WebCore::SVGSVGElement::getEnclosureList):
+        (WebCore::SVGSVGElement::checkIntersection):
+        (WebCore::SVGSVGElement::checkEnclosure):
+        (WebCore::SVGSVGElement::createSVGNumber):
+        (WebCore::SVGSVGElement::createSVGLength):
+        (WebCore::SVGSVGElement::createSVGPoint):
+        (WebCore::SVGSVGElement::createSVGMatrix):
+        (WebCore::SVGSVGElement::createSVGRect):
+        (WebCore::SVGSVGElement::createSVGTransform):
+        (WebCore::SVGSVGElement::createSVGTransformFromMatrix):
+        * svg/SVGSVGElement.h:
+        (WebCore::SVGSVGElement::currentTranslateValue):
+        (WebCore::SVGSVGElement::currentTranslate): Deleted.
+        (WebCore::SVGSVGElement::createSVGNumber): Deleted.
+        Update functions taking tear off values to take the wrappers, and update
+        the factory functions returning tear offs, to return the wrappers.
+        
+        * svg/SVGSVGElement.idl:
+        Annotate functions/properties returning tear offs with [NewObject].
+
+        * svg/SVGTextContentElement.cpp:
+        (WebCore::SVGTextContentElement::synchronizeTextLength):
+        (WebCore::SVGTextContentElement::lookupOrCreateTextLengthWrapper):
+        (WebCore::SVGTextContentElement::textLengthAnimated):
+        (WebCore::SVGTextContentElement::getStartPositionOfChar):
+        (WebCore::SVGTextContentElement::getEndPositionOfChar):
+        (WebCore::SVGTextContentElement::getExtentOfChar):
+        (WebCore::SVGTextContentElement::getCharNumAtPosition):
+        (WebCore::SVGTextContentElement::parseAttribute):
+        * svg/SVGTextContentElement.h:
+        (WebCore::SVGTextContentElement::specifiedTextLength):
+        Update functions returning tear off values to return the wrappers
+        and ones taking the values to take the wrappers.
+
+        * svg/SVGTextContentElement.idl:
+        Annotate functions/properties returning tear offs with [NewObject].
+
+        * svg/SVGTransform.cpp:
+        (WebCore::SVGTransform::matrix):
+        * svg/SVGTransform.h:
+        (WebCore::SVGTransform::create):
+        (WebCore::SVGTransform::type):
+        (WebCore::SVGTransform::angle):
+        (WebCore::SVGTransform::setMatrix):
+        (WebCore::SVGTransform::setTranslate):
+        (WebCore::SVGTransform::setScale):
+        (WebCore::SVGTransform::setRotate):
+        (WebCore::SVGTransform::setSkewX):
+        (WebCore::SVGTransform::setSkewY):
+        Implement the SVGTransform interface as a tear off.
+
+        * svg/SVGTransform.idl:
+        Add ConstantsScope annotation to allow the constants to be defined on 
+        SVGTransformValue. Add exception and NewObject annotations.
+
+        * svg/SVGTransformDistance.cpp:
+        (WebCore::SVGTransformDistance::SVGTransformDistance):
+        (WebCore::SVGTransformDistance::scaledDistance):
+        (WebCore::SVGTransformDistance::addSVGTransforms):
+        (WebCore::SVGTransformDistance::addToSVGTransform):
+        (WebCore::SVGTransformDistance::distance):
+        * svg/SVGTransformDistance.h:
+        * svg/SVGTransformList.cpp:
+        (WebCore::SVGTransformList::createSVGTransformFromMatrix):
+        (WebCore::SVGTransformList::consolidate):
+        * svg/SVGTransformList.h:
+        (WebCore::SVGPropertyTraits&lt;SVGTransformList&gt;::initialValue):
+        * svg/SVGTransformable.cpp:
+        (WebCore::SVGTransformable::parseTransformValue):
+        (WebCore::parseAndSkipType):
+        (WebCore::SVGTransformable::parseTransformType):
+        (WebCore::SVGTransformable::parseTransformAttribute):
+        * svg/SVGTransformable.h:
+        * svg/SVGUseElement.cpp:
+        (WebCore::SVGUseElement::parseAttribute):
+        Update for name change of SVGTransform to SVGTransformValue.
+
+        * svg/SVGTransformList.idl:
+        Annotate functions returning tear offs with NewObject.
+
+        * svg/SVGTransformValue.cpp: Copied from Source/WebCore/svg/SVGTransform.cpp.
+        * svg/SVGTransformValue.h: Copied from Source/WebCore/svg/SVGTransform.h.
+
+        * svg/SVGZoomEvent.cpp:
+        (WebCore::SVGZoomEvent::zoomRectScreen):
+        (WebCore::SVGZoomEvent::previousTranslate):
+        (WebCore::SVGZoomEvent::newTranslate):
+        * svg/SVGZoomEvent.h:
+        Update for change to SVGPoint/SVGRect. SVGPoint values become FloatPoints. Functions
+        returning SVGPoint/SVGRect now return Ref&lt;SVGPoint&gt;/Ref&lt;SVGRect&gt;.
+
+        * svg/SVGZoomEvent.idl:
+        Annotate function returning tear off with NewObject.
+
+        * svg/properties/SVGAnimatedListPropertyTearOff.h:
+        (WebCore::SVGAnimatedListPropertyTearOff::findItem):
+        Switch typedefs to type aliases. Define ListItemTearOff using SVGPropertyTraits
+        to get the correct tear off type (as we do for the other list property tear off 
+        classes.)

+        * svg/properties/SVGListProperty.h:
+        (WebCore::SVGListProperty::clearValues):
+        (WebCore::SVGListProperty::clearValuesAndWrappers):
+        (WebCore::SVGListProperty::initializeValues):
+        (WebCore::SVGListProperty::initializeValuesAndWrappers):
+        (WebCore::SVGListProperty::getItemValues):
+        (WebCore::SVGListProperty::getItemValuesAndWrappers):
+        (WebCore::SVGListProperty::insertItemBeforeValues):
+        (WebCore::SVGListProperty::insertItemBeforeValuesAndWrappers):
+        (WebCore::SVGListProperty::canReplaceItem):
+        (WebCore::SVGListProperty::replaceItemValues):
+        (WebCore::SVGListProperty::replaceItemValuesAndWrappers):
+        (WebCore::SVGListProperty::canRemoveItem):
+        (WebCore::SVGListProperty::removeItemValues):
+        (WebCore::SVGListProperty::removeItemValuesAndWrappers):
+        (WebCore::SVGListProperty::appendItemValues):
+        (WebCore::SVGListProperty::appendItemValuesAndWrappers):
+        * svg/properties/SVGListPropertyTearOff.h:
+        (WebCore::SVGListPropertyTearOff::initialize):
+        (WebCore::SVGListPropertyTearOff::getItem):
+        (WebCore::SVGListPropertyTearOff::insertItemBefore):
+        (WebCore::SVGListPropertyTearOff::replaceItem):
+        (WebCore::SVGListPropertyTearOff::removeItem):
+        (WebCore::SVGListPropertyTearOff::appendItem):
+        * svg/properties/SVGPathSegListPropertyTearOff.h:
+        * svg/properties/SVGStaticListPropertyTearOff.h:
+        * svg/properties/SVGTransformListPropertyTearOff.h:
+        Change functions returning PtrListItemTearOff, to instead return
+        Ref&lt;ListItemTearOff&gt;. To accomplish this, remove unreachable conditions
+        that were returning nullptr, and replace them with a assertions (these
+        were cases where a function like canGetItem() was called, and it only
+        did one of two things, returning an exception, or returned true).
+
+        * svg/properties/SVGMatrixTearOff.h:
+        Update for SVGMatrix's addition, this can now inherit from SVGMatrix. Remove
+        incorrect comment and update some SVGMatrix types to SVGMatrixValues.
+
+        * svg/properties/SVGStaticPropertyTearOff.h:
+        Require the use of SVGStaticPropertyTearOff to pass in the tear off type, rather
+        than the value type, so it can be directly inherited from. This allow the one user 
+        of this class, SVGSVGElement::currentTranslate, to specialize on SVGPoint directly. 
+
+        * bindings/scripts/test/JS/JSTestObj.cpp:
+        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
+        Update test results now that svg property tear offs are not handled specially.
+
</ins><span class="cx"> 2016-11-14  Youenn Fablet  &lt;youenn@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Move updateSignalingState to PeerConnectionBackend
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -406,7 +406,6 @@
</span><span class="cx">                 08C9251A0FCC7C4A00480DEC /* FilterEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C925180FCC7C4A00480DEC /* FilterEffect.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 08CA3D4412894A3800FFF260 /* SVGMatrixTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 08CA3D4312894A3800FFF260 /* SVGMatrixTearOff.h */; };
</span><span class="cx">                 08D46CE3127AD5FC0089694B /* SVGAnimatedEnumeration.h in Headers */ = {isa = PBXBuildFile; fileRef = 08D46CE2127AD5FC0089694B /* SVGAnimatedEnumeration.h */; };
</span><del>-                08E4FE460E2BD41400F4CAE0 /* JSSVGLengthCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08E4FE450E2BD41400F4CAE0 /* JSSVGLengthCustom.cpp */; };
</del><span class="cx">                 08EDE19F12A50B8E00B95797 /* SVGRect.h in Headers */ = {isa = PBXBuildFile; fileRef = 08EDE19E12A50B8E00B95797 /* SVGRect.h */; };
</span><span class="cx">                 08F0BFC31255C53C00075185 /* SVGTextChunk.h in Headers */ = {isa = PBXBuildFile; fileRef = 08F0BFBE1255C53C00075185 /* SVGTextChunk.h */; };
</span><span class="cx">                 08F0BFC41255C53C00075185 /* SVGTextFragment.h in Headers */ = {isa = PBXBuildFile; fileRef = 08F0BFBF1255C53C00075185 /* SVGTextFragment.h */; };
</span><span class="lines">@@ -2893,10 +2892,19 @@
</span><span class="cx">                 7CC69940191EC5F500AF2270 /* JSWebKitNamespace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC6993E191EC5F500AF2270 /* JSWebKitNamespace.cpp */; };
</span><span class="cx">                 7CC69941191EC5F500AF2270 /* JSWebKitNamespace.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CC6993F191EC5F500AF2270 /* JSWebKitNamespace.h */; };
</span><span class="cx">                 7CC7E3D717208C0F003C5277 /* IDNScriptWhiteList.txt in Resources */ = {isa = PBXBuildFile; fileRef = 7CC7E3D617208C0F003C5277 /* IDNScriptWhiteList.txt */; };
</span><ins>+                7CCEBFC01DD8F6AB002C40B8 /* SVGLengthValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CE58D531DD7B09300128552 /* SVGLengthValue.h */; settings = {ATTRIBUTES = (Private, ); }; };
</ins><span class="cx">                 7CD0BA041B8F79C9005CEBBE /* ActiveDOMCallbackMicrotask.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CD0BA021B8F79C9005CEBBE /* ActiveDOMCallbackMicrotask.cpp */; };
</span><span class="cx">                 7CD0BA051B8F79C9005CEBBE /* ActiveDOMCallbackMicrotask.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CD0BA031B8F79C9005CEBBE /* ActiveDOMCallbackMicrotask.h */; };
</span><span class="cx">                 7CD494CC1A86EB1D000A87EC /* RenderAttachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CD494CA1A86EB1D000A87EC /* RenderAttachment.cpp */; };
</span><span class="cx">                 7CD494CD1A86EB1D000A87EC /* RenderAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CD494CB1A86EB1D000A87EC /* RenderAttachment.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><ins>+                7CE58D4A1DD64A5B00128552 /* SVGPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CE58D491DD64A5B00128552 /* SVGPoint.h */; };
+                7CE58D4E1DD694FE00128552 /* SVGRectTraits.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CE58D4D1DD694FE00128552 /* SVGRectTraits.h */; };
+                7CE58D501DD69A1E00128552 /* SVGNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CE58D4F1DD69A1E00128552 /* SVGNumber.h */; };
+                7CE58D541DD7D6E200128552 /* SVGLengthValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CE58D521DD7B09300128552 /* SVGLengthValue.cpp */; };
+                7CE58D571DD7D96D00128552 /* SVGTransformValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CE58D551DD7D96D00128552 /* SVGTransformValue.cpp */; };
+                7CE58D581DD7D96D00128552 /* SVGTransformValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CE58D561DD7D96D00128552 /* SVGTransformValue.h */; };
+                7CE58D5A1DD7DE5200128552 /* SVGTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CE58D591DD7DE5200128552 /* SVGTransform.cpp */; };
+                7CE58D5C1DD7EC9C00128552 /* SVGMatrixValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CE58D5B1DD7EC9C00128552 /* SVGMatrixValue.h */; };
</ins><span class="cx">                 7CE68344192143A800F4D928 /* UserMessageHandlerDescriptor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CE68342192143A800F4D928 /* UserMessageHandlerDescriptor.cpp */; };
</span><span class="cx">                 7CE68345192143A800F4D928 /* UserMessageHandlerDescriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CE68343192143A800F4D928 /* UserMessageHandlerDescriptor.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 7CE683471921821500F4D928 /* UserMessageHandlerDescriptorTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CE683461921821500F4D928 /* UserMessageHandlerDescriptorTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -4615,8 +4623,6 @@
</span><span class="cx">                 B2227A2D0D00BF220071B782 /* SVGImageElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278970D00BF200071B782 /* SVGImageElement.h */; };
</span><span class="cx">                 B2227A2F0D00BF220071B782 /* SVGLangSpace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22278990D00BF200071B782 /* SVGLangSpace.cpp */; };
</span><span class="cx">                 B2227A300D00BF220071B782 /* SVGLangSpace.h in Headers */ = {isa = PBXBuildFile; fileRef = B222789A0D00BF200071B782 /* SVGLangSpace.h */; };
</span><del>-                B2227A320D00BF220071B782 /* SVGLength.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B222789C0D00BF200071B782 /* SVGLength.cpp */; };
-                B2227A330D00BF220071B782 /* SVGLength.h in Headers */ = {isa = PBXBuildFile; fileRef = B222789D0D00BF200071B782 /* SVGLength.h */; settings = {ATTRIBUTES = (Private, ); }; };
</del><span class="cx">                 B2227A350D00BF220071B782 /* SVGLengthList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B222789F0D00BF200071B782 /* SVGLengthList.cpp */; };
</span><span class="cx">                 B2227A360D00BF220071B782 /* SVGLengthList.h in Headers */ = {isa = PBXBuildFile; fileRef = B22278A00D00BF200071B782 /* SVGLengthList.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 B2227A380D00BF220071B782 /* SVGLinearGradientElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22278A20D00BF200071B782 /* SVGLinearGradientElement.cpp */; };
</span><span class="lines">@@ -4697,7 +4703,6 @@
</span><span class="cx">                 B2227AD10D00BF220071B782 /* SVGTextPositioningElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B222793B0D00BF210071B782 /* SVGTextPositioningElement.h */; };
</span><span class="cx">                 B2227AD30D00BF220071B782 /* SVGTitleElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B222793D0D00BF210071B782 /* SVGTitleElement.cpp */; };
</span><span class="cx">                 B2227AD40D00BF220071B782 /* SVGTitleElement.h in Headers */ = {isa = PBXBuildFile; fileRef = B222793E0D00BF210071B782 /* SVGTitleElement.h */; };
</span><del>-                B2227AD60D00BF220071B782 /* SVGTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22279400D00BF210071B782 /* SVGTransform.cpp */; };
</del><span class="cx">                 B2227AD70D00BF220071B782 /* SVGTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = B22279410D00BF210071B782 /* SVGTransform.h */; };
</span><span class="cx">                 B2227AD90D00BF220071B782 /* SVGTransformable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B22279430D00BF210071B782 /* SVGTransformable.cpp */; };
</span><span class="cx">                 B2227ADA0D00BF220071B782 /* SVGTransformable.h in Headers */ = {isa = PBXBuildFile; fileRef = B22279440D00BF210071B782 /* SVGTransformable.h */; };
</span><span class="lines">@@ -7362,7 +7367,6 @@
</span><span class="cx">                 08C925180FCC7C4A00480DEC /* FilterEffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FilterEffect.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 08CA3D4312894A3800FFF260 /* SVGMatrixTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGMatrixTearOff.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 08D46CE2127AD5FC0089694B /* SVGAnimatedEnumeration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedEnumeration.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                08E4FE450E2BD41400F4CAE0 /* JSSVGLengthCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGLengthCustom.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 08EDE19E12A50B8E00B95797 /* SVGRect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGRect.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 08F0BFBD1255C53C00075185 /* SVGTextChunk.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGTextChunk.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 08F0BFBE1255C53C00075185 /* SVGTextChunk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGTextChunk.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -10331,6 +10335,16 @@
</span><span class="cx">                 7CD0BA031B8F79C9005CEBBE /* ActiveDOMCallbackMicrotask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ActiveDOMCallbackMicrotask.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 7CD494CA1A86EB1D000A87EC /* RenderAttachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderAttachment.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 7CD494CB1A86EB1D000A87EC /* RenderAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderAttachment.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                7CE58D491DD64A5B00128552 /* SVGPoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPoint.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                7CE58D4D1DD694FE00128552 /* SVGRectTraits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGRectTraits.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                7CE58D4F1DD69A1E00128552 /* SVGNumber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGNumber.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                7CE58D511DD7B09300128552 /* SVGLength.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGLength.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                7CE58D521DD7B09300128552 /* SVGLengthValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGLengthValue.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
+                7CE58D531DD7B09300128552 /* SVGLengthValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGLengthValue.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                7CE58D551DD7D96D00128552 /* SVGTransformValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGTransformValue.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
+                7CE58D561DD7D96D00128552 /* SVGTransformValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGTransformValue.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                7CE58D591DD7DE5200128552 /* SVGTransform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGTransform.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
+                7CE58D5B1DD7EC9C00128552 /* SVGMatrixValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGMatrixValue.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 7CE68342192143A800F4D928 /* UserMessageHandlerDescriptor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserMessageHandlerDescriptor.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 7CE68343192143A800F4D928 /* UserMessageHandlerDescriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserMessageHandlerDescriptor.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 7CE683461921821500F4D928 /* UserMessageHandlerDescriptorTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserMessageHandlerDescriptorTypes.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -12335,8 +12349,6 @@
</span><span class="cx">                 B22278980D00BF200071B782 /* SVGImageElement.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGImageElement.idl; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B22278990D00BF200071B782 /* SVGLangSpace.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGLangSpace.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B222789A0D00BF200071B782 /* SVGLangSpace.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGLangSpace.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                B222789C0D00BF200071B782 /* SVGLength.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGLength.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
-                B222789D0D00BF200071B782 /* SVGLength.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGLength.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 B222789E0D00BF200071B782 /* SVGLength.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGLength.idl; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B222789F0D00BF200071B782 /* SVGLengthList.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGLengthList.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B22278A00D00BF200071B782 /* SVGLengthList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGLengthList.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -12475,7 +12487,6 @@
</span><span class="cx">                 B222793D0D00BF210071B782 /* SVGTitleElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGTitleElement.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B222793E0D00BF210071B782 /* SVGTitleElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGTitleElement.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B222793F0D00BF210071B782 /* SVGTitleElement.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGTitleElement.idl; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                B22279400D00BF210071B782 /* SVGTransform.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGTransform.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 B22279410D00BF210071B782 /* SVGTransform.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGTransform.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B22279420D00BF210071B782 /* SVGTransform.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGTransform.idl; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B22279430D00BF210071B782 /* SVGTransformable.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGTransformable.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -21032,14 +21043,15 @@
</span><span class="cx">                                 B28C6A210D00C44800334AA4 /* SVGImageLoader.h */,
</span><span class="cx">                                 B22278990D00BF200071B782 /* SVGLangSpace.cpp */,
</span><span class="cx">                                 B222789A0D00BF200071B782 /* SVGLangSpace.h */,
</span><del>-                                B222789C0D00BF200071B782 /* SVGLength.cpp */,
-                                B222789D0D00BF200071B782 /* SVGLength.h */,
</del><span class="cx">                                 B222789E0D00BF200071B782 /* SVGLength.idl */,
</span><ins>+                                7CE58D511DD7B09300128552 /* SVGLength.h */,
</ins><span class="cx">                                 7134496B146941B300720312 /* SVGLengthContext.cpp */,
</span><span class="cx">                                 7134496C146941B300720312 /* SVGLengthContext.h */,
</span><span class="cx">                                 B222789F0D00BF200071B782 /* SVGLengthList.cpp */,
</span><span class="cx">                                 B22278A00D00BF200071B782 /* SVGLengthList.h */,
</span><span class="cx">                                 B22278A10D00BF200071B782 /* SVGLengthList.idl */,
</span><ins>+                                7CE58D521DD7B09300128552 /* SVGLengthValue.cpp */,
+                                7CE58D531DD7B09300128552 /* SVGLengthValue.h */,
</ins><span class="cx">                                 B22278A20D00BF200071B782 /* SVGLinearGradientElement.cpp */,
</span><span class="cx">                                 B22278A30D00BF200071B782 /* SVGLinearGradientElement.h */,
</span><span class="cx">                                 B22278A40D00BF200071B782 /* SVGLinearGradientElement.idl */,
</span><span class="lines">@@ -21056,6 +21068,7 @@
</span><span class="cx">                                 B22278B20D00BF200071B782 /* SVGMaskElement.idl */,
</span><span class="cx">                                 0806E57912893045007CED32 /* SVGMatrix.h */,
</span><span class="cx">                                 B22278B30D00BF200071B782 /* SVGMatrix.idl */,
</span><ins>+                                7CE58D5B1DD7EC9C00128552 /* SVGMatrixValue.h */,
</ins><span class="cx">                                 B22278B40D00BF200071B782 /* SVGMetadataElement.cpp */,
</span><span class="cx">                                 B22278B50D00BF200071B782 /* SVGMetadataElement.h */,
</span><span class="cx">                                 B22278B60D00BF200071B782 /* SVGMetadataElement.idl */,
</span><span class="lines">@@ -21065,6 +21078,7 @@
</span><span class="cx">                                 B22278B70D00BF200071B782 /* SVGMPathElement.cpp */,
</span><span class="cx">                                 B22278B80D00BF200071B782 /* SVGMPathElement.h */,
</span><span class="cx">                                 44D8DA98139545BE00337B75 /* SVGMPathElement.idl */,
</span><ins>+                                7CE58D4F1DD69A1E00128552 /* SVGNumber.h */,
</ins><span class="cx">                                 B22278B90D00BF200071B782 /* SVGNumber.idl */,
</span><span class="cx">                                 B22278BA0D00BF200071B782 /* SVGNumberList.cpp */,
</span><span class="cx">                                 B22278BB0D00BF200071B782 /* SVGNumberList.h */,
</span><span class="lines">@@ -21157,6 +21171,7 @@
</span><span class="cx">                                 B22278F20D00BF210071B782 /* SVGPatternElement.h */,
</span><span class="cx">                                 B22278F30D00BF210071B782 /* SVGPatternElement.idl */,
</span><span class="cx">                                 B22278F40D00BF210071B782 /* SVGPoint.idl */,
</span><ins>+                                7CE58D491DD64A5B00128552 /* SVGPoint.h */,
</ins><span class="cx">                                 B22278F50D00BF210071B782 /* SVGPointList.cpp */,
</span><span class="cx">                                 B22278F60D00BF210071B782 /* SVGPointList.h */,
</span><span class="cx">                                 B22278F70D00BF210071B782 /* SVGPointList.idl */,
</span><span class="lines">@@ -21177,6 +21192,7 @@
</span><span class="cx">                                 B22279050D00BF210071B782 /* SVGRadialGradientElement.idl */,
</span><span class="cx">                                 08EDE19E12A50B8E00B95797 /* SVGRect.h */,
</span><span class="cx">                                 B22279060D00BF210071B782 /* SVGRect.idl */,
</span><ins>+                                7CE58D4D1DD694FE00128552 /* SVGRectTraits.h */,
</ins><span class="cx">                                 B22279070D00BF210071B782 /* SVGRectElement.cpp */,
</span><span class="cx">                                 B22279080D00BF210071B782 /* SVGRectElement.h */,
</span><span class="cx">                                 B22279090D00BF210071B782 /* SVGRectElement.idl */,
</span><span class="lines">@@ -21227,7 +21243,7 @@
</span><span class="cx">                                 B222793F0D00BF210071B782 /* SVGTitleElement.idl */,
</span><span class="cx">                                 1CCDF5BB1990332400BCEBAD /* SVGToOTFFontConversion.cpp */,
</span><span class="cx">                                 1CCDF5BC1990332400BCEBAD /* SVGToOTFFontConversion.h */,
</span><del>-                                B22279400D00BF210071B782 /* SVGTransform.cpp */,
</del><ins>+                                7CE58D591DD7DE5200128552 /* SVGTransform.cpp */,
</ins><span class="cx">                                 B22279410D00BF210071B782 /* SVGTransform.h */,
</span><span class="cx">                                 B22279420D00BF210071B782 /* SVGTransform.idl */,
</span><span class="cx">                                 B22279430D00BF210071B782 /* SVGTransformable.cpp */,
</span><span class="lines">@@ -21237,6 +21253,8 @@
</span><span class="cx">                                 B22279480D00BF210071B782 /* SVGTransformList.cpp */,
</span><span class="cx">                                 B22279490D00BF210071B782 /* SVGTransformList.h */,
</span><span class="cx">                                 B222794A0D00BF210071B782 /* SVGTransformList.idl */,
</span><ins>+                                7CE58D551DD7D96D00128552 /* SVGTransformValue.cpp */,
+                                7CE58D561DD7D96D00128552 /* SVGTransformValue.h */,
</ins><span class="cx">                                 B222794B0D00BF210071B782 /* SVGTRefElement.cpp */,
</span><span class="cx">                                 B222794C0D00BF210071B782 /* SVGTRefElement.h */,
</span><span class="cx">                                 B222794D0D00BF210071B782 /* SVGTRefElement.idl */,
</span><span class="lines">@@ -21967,7 +21985,6 @@
</span><span class="cx">                                 AD726FEC16D9F4B9003A4E6D /* JSStyleSheetCustom.h */,
</span><span class="cx">                                 A84EBD770CB8C89200079609 /* JSStyleSheetListCustom.cpp */,
</span><span class="cx">                                 57A9C88D1DA70BF800BC7305 /* JSSubtleCryptoCustom.cpp */,
</span><del>-                                08E4FE450E2BD41400F4CAE0 /* JSSVGLengthCustom.cpp */,
</del><span class="cx">                                 B2C96D8C0B3AF2B7005E80EC /* JSSVGPathSegCustom.cpp */,
</span><span class="cx">                                 838869EB1CE81E9E00D16A9E /* JSTextCustom.cpp */,
</span><span class="cx">                                 07E117061489EBEB00EC5ACE /* JSTextTrackCueCustom.cpp */,
</span><span class="lines">@@ -25442,6 +25459,7 @@
</span><span class="cx">                                 D05CED2A0A40BB2C00C5AF38 /* FormatBlockCommand.h in Headers */,
</span><span class="cx">                                 7CE6CBFB187F370700D46BF5 /* FormatConverter.h in Headers */,
</span><span class="cx">                                 F50664F8157F52DC00AC226F /* FormController.h in Headers */,
</span><ins>+                                7CCEBFC01DD8F6AB002C40B8 /* SVGLengthValue.h in Headers */,
</ins><span class="cx">                                 514C76700CE923A1007EF3CD /* FormData.h in Headers */,
</span><span class="cx">                                 085B92BB0EFDE73D00E6123C /* FormDataBuilder.h in Headers */,
</span><span class="cx">                                 A8136D380973A8E700D74463 /* FormDataList.h in Headers */,
</span><span class="lines">@@ -25751,6 +25769,7 @@
</span><span class="cx">                                 BE16C59317CFE17200852C04 /* InbandGenericTextTrack.h in Headers */,
</span><span class="cx">                                 07E9E12E18F5E2760011A3A4 /* InbandMetadataTextTrackPrivateAVF.h in Headers */,
</span><span class="cx">                                 07941792166E855F009416C2 /* InbandTextTrack.h in Headers */,
</span><ins>+                                7CE58D581DD7D96D00128552 /* SVGTransformValue.h in Headers */,
</ins><span class="cx">                                 07941794166EA04E009416C2 /* InbandTextTrackPrivate.h in Headers */,
</span><span class="cx">                                 07B442D7166C70B000556CAD /* InbandTextTrackPrivateAVF.h in Headers */,
</span><span class="cx">                                 07AA6B6C166D2C1300D45671 /* InbandTextTrackPrivateAVFObjC.h in Headers */,
</span><span class="lines">@@ -26506,6 +26525,7 @@
</span><span class="cx">                                 512DD8F50D91E6AF000F89EE /* LegacyWebArchive.h in Headers */,
</span><span class="cx">                                 BCE65BEB0EACDF16007E4533 /* Length.h in Headers */,
</span><span class="cx">                                 BCFF64910EAD15C200C1D6F7 /* LengthBox.h in Headers */,
</span><ins>+                                7CE58D4A1DD64A5B00128552 /* SVGPoint.h in Headers */,
</ins><span class="cx">                                 E5BA7D63151437CA00FE1E3F /* LengthFunctions.h in Headers */,
</span><span class="cx">                                 0F8716701C869D83004FF0DE /* LengthPoint.h in Headers */,
</span><span class="cx">                                 F42FFB461984B71600F6837F /* LengthRepeat.h in Headers */,
</span><span class="lines">@@ -26850,6 +26870,7 @@
</span><span class="cx">                                 CDCD41E81C3DDB0A00965D99 /* ParsedContentRange.h in Headers */,
</span><span class="cx">                                 447958041643B49A001E0A7F /* ParsedContentType.h in Headers */,
</span><span class="cx">                                 BC76AC130DD7AD5C00415F34 /* ParserUtilities.h in Headers */,
</span><ins>+                                7CE58D5C1DD7EC9C00128552 /* SVGMatrixValue.h in Headers */,
</ins><span class="cx">                                 536D5A23193E8E0C00CE4CAB /* ParsingUtilities.h in Headers */,
</span><span class="cx">                                 1AED3BDA1D3D5F260099FD78 /* PassKitSPI.h in Headers */,
</span><span class="cx">                                 F55B3DCA1251F12D003EF269 /* PasswordInputType.h in Headers */,
</span><span class="lines">@@ -27616,7 +27637,6 @@
</span><span class="cx">                                 0854B01F1255E4E600B9CDD0 /* SVGInlineFlowBox.h in Headers */,
</span><span class="cx">                                 0854B0211255E4E600B9CDD0 /* SVGInlineTextBox.h in Headers */,
</span><span class="cx">                                 B2227A300D00BF220071B782 /* SVGLangSpace.h in Headers */,
</span><del>-                                B2227A330D00BF220071B782 /* SVGLength.h in Headers */,
</del><span class="cx">                                 7134496E146941B300720312 /* SVGLengthContext.h in Headers */,
</span><span class="cx">                                 B2227A360D00BF220071B782 /* SVGLengthList.h in Headers */,
</span><span class="cx">                                 B2227A390D00BF220071B782 /* SVGLinearGradientElement.h in Headers */,
</span><span class="lines">@@ -27630,6 +27650,7 @@
</span><span class="cx">                                 0806E57A12893045007CED32 /* SVGMatrix.h in Headers */,
</span><span class="cx">                                 08CA3D4412894A3800FFF260 /* SVGMatrixTearOff.h in Headers */,
</span><span class="cx">                                 B2227A4B0D00BF220071B782 /* SVGMetadataElement.h in Headers */,
</span><ins>+                                7CE58D4E1DD694FE00128552 /* SVGRectTraits.h in Headers */,
</ins><span class="cx">                                 B2A1F2B10CEF0ABF00442F6A /* SVGMissingGlyphElement.h in Headers */,
</span><span class="cx">                                 B2227A4E0D00BF220071B782 /* SVGMPathElement.h in Headers */,
</span><span class="cx">                                 B2227A510D00BF220071B782 /* SVGNumberList.h in Headers */,
</span><span class="lines">@@ -28156,6 +28177,7 @@
</span><span class="cx">                                 A833C80D0A2CF25600D57664 /* XMLNames.h in Headers */,
</span><span class="cx">                                 E15A36D71104572000B7B639 /* XMLNSNames.h in Headers */,
</span><span class="cx">                                 1ACE53EB0A8D18E70022947D /* XMLSerializer.h in Headers */,
</span><ins>+                                7CE58D501DD69A1E00128552 /* SVGNumber.h in Headers */,
</ins><span class="cx">                                 5905ADC01302F3CE00F116DF /* XMLTreeViewer.h in Headers */,
</span><span class="cx">                                 1AB7FC690A8B92EC00D9D37B /* XPathEvaluator.h in Headers */,
</span><span class="cx">                                 BC60DA5B0D2A31F700B9918F /* XPathException.h in Headers */,
</span><span class="lines">@@ -29066,6 +29088,7 @@
</span><span class="cx">                                 A8C4A80809D563270003AC8D /* Element.cpp in Sources */,
</span><span class="cx">                                 B5B7A17017C10AA800E4AA0A /* ElementData.cpp in Sources */,
</span><span class="cx">                                 4FFC022D1643B726004E1638 /* ElementRareData.cpp in Sources */,
</span><ins>+                                7CE58D541DD7D6E200128552 /* SVGLengthValue.cpp in Sources */,
</ins><span class="cx">                                 FBDB619B16D6032A00BB3394 /* ElementRuleCollector.cpp in Sources */,
</span><span class="cx">                                 A8CFF6CB0A1561CD000A4234 /* EllipsisBox.cpp in Sources */,
</span><span class="cx">                                 F55B3DBB1251F12D003EF269 /* EmailInputType.cpp in Sources */,
</span><span class="lines">@@ -30103,7 +30126,6 @@
</span><span class="cx">                                 8485227B1190162C006EDC7F /* JSSVGHKernElement.cpp in Sources */,
</span><span class="cx">                                 B2FA3D9E0AB75A6F000E5AC4 /* JSSVGImageElement.cpp in Sources */,
</span><span class="cx">                                 B2FA3DA00AB75A6F000E5AC4 /* JSSVGLength.cpp in Sources */,
</span><del>-                                08E4FE460E2BD41400F4CAE0 /* JSSVGLengthCustom.cpp in Sources */,
</del><span class="cx">                                 B2FA3DA20AB75A6F000E5AC4 /* JSSVGLengthList.cpp in Sources */,
</span><span class="cx">                                 B2FA3DA40AB75A6F000E5AC4 /* JSSVGLinearGradientElement.cpp in Sources */,
</span><span class="cx">                                 B2FA3DA60AB75A6F000E5AC4 /* JSSVGLineElement.cpp in Sources */,
</span><span class="lines">@@ -30385,6 +30407,7 @@
</span><span class="cx">                                 1F3C3BEA135CAF3C00B8C1AC /* MediaControls.cpp in Sources */,
</span><span class="cx">                                 4157AF8112F1FB0400A8C6F5 /* MediaControlsApple.cpp in Sources */,
</span><span class="cx">                                 CDAB6D2817C7DE6C00C60B34 /* MediaControlsHost.cpp in Sources */,
</span><ins>+                                7CE58D5A1DD7DE5200128552 /* SVGTransform.cpp in Sources */,
</ins><span class="cx">                                 159AE82B1B3A402F0037478B /* MediaDeviceInfo.cpp in Sources */,
</span><span class="cx">                                 5EA725D21ACABD4700EAD17B /* MediaDevices.cpp in Sources */,
</span><span class="cx">                                 07ABEF6C1D8A1C5800F21972 /* MediaDevicesEnumerationRequest.cpp in Sources */,
</span><span class="lines">@@ -30437,6 +30460,7 @@
</span><span class="cx">                                 07EDC3EE1AACB75D00983EB5 /* MediaSessionManagerMac.mm in Sources */,
</span><span class="cx">                                 CD3A495E17A9D01B00274E42 /* MediaSource.cpp in Sources */,
</span><span class="cx">                                 CDC8B5A6180474F70016E685 /* MediaSourcePrivateAVFObjC.mm in Sources */,
</span><ins>+                                7CE58D571DD7D96D00128552 /* SVGTransformValue.cpp in Sources */,
</ins><span class="cx">                                 CD61FE671794AADB004101EB /* MediaSourceRegistry.cpp in Sources */,
</span><span class="cx">                                 07C59B6817F784BA000FBCBB /* MediaSourceSettings.cpp in Sources */,
</span><span class="cx">                                 078E08FF17D14CEE00420AA1 /* MediaStream.cpp in Sources */,
</span><span class="lines">@@ -31215,7 +31239,6 @@
</span><span class="cx">                                 08F859D41463F9CD0067D934 /* SVGImageForContainer.cpp in Sources */,
</span><span class="cx">                                 B28C6A290D00C44800334AA4 /* SVGImageLoader.cpp in Sources */,
</span><span class="cx">                                 B2227A2F0D00BF220071B782 /* SVGLangSpace.cpp in Sources */,
</span><del>-                                B2227A320D00BF220071B782 /* SVGLength.cpp in Sources */,
</del><span class="cx">                                 7134496D146941B300720312 /* SVGLengthContext.cpp in Sources */,
</span><span class="cx">                                 B2227A350D00BF220071B782 /* SVGLengthList.cpp in Sources */,
</span><span class="cx">                                 B2227A380D00BF220071B782 /* SVGLinearGradientElement.cpp in Sources */,
</span><span class="lines">@@ -31270,7 +31293,6 @@
</span><span class="cx">                                 B2227AD00D00BF220071B782 /* SVGTextPositioningElement.cpp in Sources */,
</span><span class="cx">                                 B2227AD30D00BF220071B782 /* SVGTitleElement.cpp in Sources */,
</span><span class="cx">                                 1CCDF5BD1990332400BCEBAD /* SVGToOTFFontConversion.cpp in Sources */,
</span><del>-                                B2227AD60D00BF220071B782 /* SVGTransform.cpp in Sources */,
</del><span class="cx">                                 B2227AD90D00BF220071B782 /* SVGTransformable.cpp in Sources */,
</span><span class="cx">                                 B2227ADC0D00BF220071B782 /* SVGTransformDistance.cpp in Sources */,
</span><span class="cx">                                 B2227ADE0D00BF220071B782 /* SVGTransformList.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSBindingsAllInOnecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -116,7 +116,6 @@
</span><span class="cx"> #include &quot;JSReadableStreamPrivateConstructors.cpp&quot;
</span><span class="cx"> #include &quot;JSSQLResultSetRowListCustom.cpp&quot;
</span><span class="cx"> #include &quot;JSSQLTransactionCustom.cpp&quot;
</span><del>-#include &quot;JSSVGLengthCustom.cpp&quot;
</del><span class="cx"> #include &quot;JSSVGPathSegCustom.cpp&quot;
</span><span class="cx"> #include &quot;JSStorageCustom.cpp&quot;
</span><span class="cx"> #include &quot;JSStyleSheetCustom.cpp&quot;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSSVGLengthCustomcpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/bindings/js/JSSVGLengthCustom.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSSVGLengthCustom.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/bindings/js/JSSVGLengthCustom.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -1,95 +0,0 @@
</span><del>-/*
-    Copyright (C) 2008 Nikolas Zimmermann &lt;zimmermann@kde.org&gt;
-    Copyright (C) 2016 Apple Inc. All rights reserved.
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License as published by the Free Software Foundation; either
-    version 2 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include &quot;config.h&quot;
-#include &quot;JSSVGLength.h&quot;
-
-#include &quot;ExceptionCode.h&quot;
-#include &quot;JSDOMConvert.h&quot;
-#include &quot;SVGAnimatedProperty.h&quot;
-#include &quot;SVGException.h&quot;
-#include &quot;SVGLengthContext.h&quot;
-#include &lt;runtime/Error.h&gt;
-
-using namespace JSC;
-
-namespace WebCore {
-
-JSValue JSSVGLength::value(ExecState&amp; state) const
-{
-    VM&amp; vm = state.vm();
-    auto scope = DECLARE_THROW_SCOPE(vm);
-    return toJS&lt;IDLUnrestrictedFloat&gt;(state, scope, wrapped().propertyReference().valueForBindings(SVGLengthContext { wrapped().contextElement() }));
-}
-
-void JSSVGLength::setValue(ExecState&amp; state, JSValue value)
-{
-    VM&amp; vm = state.vm();
-    auto scope = DECLARE_THROW_SCOPE(vm);
-
-    if (wrapped().isReadOnly()) {
-        setDOMException(&amp;state, NO_MODIFICATION_ALLOWED_ERR);
-        return;
-    }
-
-    if (!value.isUndefinedOrNull() &amp;&amp; !value.isNumber() &amp;&amp; !value.isBoolean()) {
-        throwVMTypeError(&amp;state, scope);
-        return;
-    }
-
-    auto floatValue = value.toFloat(&amp;state);
-    RETURN_IF_EXCEPTION(scope, void());
-
-    auto result = wrapped().propertyReference().setValue(floatValue, SVGLengthContext { wrapped().contextElement() });
-    if (result.hasException()) {
-        propagateException(state, scope, result.releaseException());
-        return;
-    }
-
-    wrapped().commitChange();
-}
-
-JSValue JSSVGLength::convertToSpecifiedUnits(ExecState&amp; state)
-{
-    VM&amp; vm = state.vm();
-    auto scope = DECLARE_THROW_SCOPE(vm);
-
-    if (wrapped().isReadOnly()) {
-        setDOMException(&amp;state, NO_MODIFICATION_ALLOWED_ERR);
-        return { };
-    }
-
-    if (state.argumentCount() &lt; 1)
-        return throwException(&amp;state, scope, createNotEnoughArgumentsError(&amp;state));
-
-    unsigned short unitType = state.uncheckedArgument(0).toUInt32(&amp;state);
-    RETURN_IF_EXCEPTION(scope, JSValue());
-
-    auto result = wrapped().propertyReference().convertToSpecifiedUnits(unitType, SVGLengthContext { wrapped().contextElement() });
-    if (result.hasException()) {
-        propagateException(state, scope, result.releaseException());
-        return { };
-    }
-
-    wrapped().commitChange();
-    return jsUndefined();
-}
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -119,25 +119,14 @@
</span><span class="cx"> );
</span><span class="cx"> 
</span><span class="cx"> my %svgTypeNeedingTearOff = (
</span><del>-    &quot;SVGLength&quot; =&gt; &quot;SVGPropertyTearOff&lt;SVGLength&gt;&quot;,
</del><span class="cx">     &quot;SVGLengthList&quot; =&gt; &quot;SVGListPropertyTearOff&lt;SVGLengthList&gt;&quot;,
</span><del>-    &quot;SVGMatrix&quot; =&gt; &quot;SVGPropertyTearOff&lt;SVGMatrix&gt;&quot;,
-    &quot;SVGNumber&quot; =&gt; &quot;SVGPropertyTearOff&lt;float&gt;&quot;,
</del><span class="cx">     &quot;SVGNumberList&quot; =&gt; &quot;SVGListPropertyTearOff&lt;SVGNumberList&gt;&quot;,
</span><del>-    &quot;SVGPathSegList&quot; =&gt; &quot;SVGPathSegListPropertyTearOff&quot;,
-    &quot;SVGPoint&quot; =&gt; &quot;SVGPropertyTearOff&lt;SVGPoint&gt;&quot;,
</del><span class="cx">     &quot;SVGPointList&quot; =&gt; &quot;SVGListPropertyTearOff&lt;SVGPointList&gt;&quot;,
</span><del>-    &quot;SVGRect&quot; =&gt; &quot;SVGPropertyTearOff&lt;FloatRect&gt;&quot;,
</del><span class="cx">     &quot;SVGStringList&quot; =&gt; &quot;SVGStaticListPropertyTearOff&lt;SVGStringList&gt;&quot;,
</span><del>-    &quot;SVGTransform&quot; =&gt; &quot;SVGPropertyTearOff&lt;SVGTransform&gt;&quot;,
</del><ins>+    &quot;SVGPathSegList&quot; =&gt; &quot;SVGPathSegListPropertyTearOff&quot;,
</ins><span class="cx">     &quot;SVGTransformList&quot; =&gt; &quot;SVGTransformListPropertyTearOff&quot;
</span><span class="cx"> );
</span><span class="cx"> 
</span><del>-my %svgTypeWithWritablePropertiesNeedingTearOff = (
-    &quot;SVGPoint&quot; =&gt; 1,
-    &quot;SVGMatrix&quot; =&gt; 1
-);
-
</del><span class="cx"> # Cache of IDL file pathnames.
</span><span class="cx"> my $idlFiles;
</span><span class="cx"> my $cachedInterfaces = {};
</span><span class="lines">@@ -383,7 +372,6 @@
</span><span class="cx">     return 1 if $typedArrayTypes{$typeName};
</span><span class="cx">     return 1 if $stringTypeHash{$typeName};
</span><span class="cx">     return 1 if $typeName eq &quot;BufferSource&quot;;
</span><del>-    return 1 if $typeName eq &quot;SVGNumber&quot;;
</del><span class="cx">     return 1 if $typeName eq &quot;any&quot;;
</span><span class="cx"> 
</span><span class="cx">     return 0;
</span><span class="lines">@@ -626,16 +614,6 @@
</span><span class="cx">     return 0;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-sub IsSVGTypeWithWritablePropertiesNeedingTearOff
-{
-    my ($object, $type) = @_;
-
-    assert(&quot;Not a type&quot;) if ref($type) ne &quot;IDLType&quot;;
-
-    return 1 if $svgTypeWithWritablePropertiesNeedingTearOff{$type-&gt;name};
-    return 0;
-}
-
</del><span class="cx"> sub IsTypedArrayType
</span><span class="cx"> {
</span><span class="cx">     my ($object, $type) = @_;
</span><span class="lines">@@ -681,9 +659,7 @@
</span><span class="cx">     my $svgTypeNeedingTearOff = $object-&gt;GetSVGTypeNeedingTearOff($type);
</span><span class="cx">     return $svgTypeNeedingTearOff if not $svgTypeNeedingTearOff;
</span><span class="cx"> 
</span><del>-    if ($svgTypeNeedingTearOff =~ /SVGPropertyTearOff/) {
-        $svgTypeNeedingTearOff =~ s/SVGPropertyTearOff&lt;//;
-    } elsif ($svgTypeNeedingTearOff =~ /SVGListPropertyTearOff/) {
</del><ins>+    if ($svgTypeNeedingTearOff =~ /SVGListPropertyTearOff/) {
</ins><span class="cx">         $svgTypeNeedingTearOff =~ s/SVGListPropertyTearOff&lt;//;
</span><span class="cx">     } elsif ($svgTypeNeedingTearOff =~ /SVGStaticListPropertyTearOff/) {
</span><span class="cx">         $svgTypeNeedingTearOff =~ s/SVGStaticListPropertyTearOff&lt;//;
</span><span class="lines">@@ -1205,7 +1181,6 @@
</span><span class="cx"> 
</span><span class="cx">     return 0 if $argument-&gt;type-&gt;isNullable;
</span><span class="cx">     return 0 if !$object-&gt;IsWrapperType($argument-&gt;type) &amp;&amp; !$object-&gt;IsTypedArrayType($argument-&gt;type);
</span><del>-    return 0 if $object-&gt;IsSVGTypeNeedingTearOff($argument-&gt;type);
</del><span class="cx"> 
</span><span class="cx">     return 1;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -842,7 +842,7 @@
</span><span class="cx"> {
</span><span class="cx">     my $interface = shift;
</span><span class="cx"> 
</span><del>-    my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($interface);
</del><ins>+    my ($svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($interface);
</ins><span class="cx">     return $svgNativeType if $svgNativeType;
</span><span class="cx"> 
</span><span class="cx">     return $interface-&gt;type-&gt;name;
</span><span class="lines">@@ -1342,10 +1342,7 @@
</span><span class="cx">     $headerIncludes{&quot;SVGElement.h&quot;} = 1 if $className =~ /^JSSVG/;
</span><span class="cx"> 
</span><span class="cx">     my $implType = GetImplClassName($interface);
</span><del>-    my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($interface);
-    my $svgPropertyOrListPropertyType;
-    $svgPropertyOrListPropertyType = $svgPropertyType if $svgPropertyType;
-    $svgPropertyOrListPropertyType = $svgListPropertyType if $svgListPropertyType;
</del><ins>+    my ($svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($interface);
</ins><span class="cx"> 
</span><span class="cx">     my $numConstants = @{$interface-&gt;constants};
</span><span class="cx">     my $numAttributes = @{$interface-&gt;attributes};
</span><span class="lines">@@ -1358,7 +1355,7 @@
</span><span class="cx">     } else {
</span><span class="cx">         # Implementation class forward declaration
</span><span class="cx">         if (IsDOMGlobalObject($interface)) {
</span><del>-            AddClassForwardIfNeeded($interface-&gt;type) unless $svgPropertyOrListPropertyType;
</del><ins>+            AddClassForwardIfNeeded($interface-&gt;type) unless $svgListPropertyType;
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -1391,7 +1388,7 @@
</span><span class="cx">         push(@headerContent, &quot;        return ptr;\n&quot;);
</span><span class="cx">         push(@headerContent, &quot;    }\n\n&quot;);
</span><span class="cx">     } elsif ($interface-&gt;extendedAttributes-&gt;{MasqueradesAsUndefined}) {
</span><del>-        AddIncludesForImplementationTypeInHeader($implType) unless $svgPropertyOrListPropertyType;
</del><ins>+        AddIncludesForImplementationTypeInHeader($implType) unless $svgListPropertyType;
</ins><span class="cx">         push(@headerContent, &quot;    static $className* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;$implType&gt;&amp;&amp; impl)\n&quot;);
</span><span class="cx">         push(@headerContent, &quot;    {\n&quot;);
</span><span class="cx">         push(@headerContent, &quot;        globalObject-&gt;masqueradesAsUndefinedWatchpoint()-&gt;fireAll(globalObject-&gt;vm(), \&quot;Allocated masquerading object\&quot;);\n&quot;);
</span><span class="lines">@@ -1407,7 +1404,7 @@
</span><span class="cx">         push(@headerContent, &quot;        return ptr;\n&quot;);
</span><span class="cx">         push(@headerContent, &quot;    }\n\n&quot;);  
</span><span class="cx">     } else {
</span><del>-        AddIncludesForImplementationTypeInHeader($implType) unless $svgPropertyOrListPropertyType;
</del><ins>+        AddIncludesForImplementationTypeInHeader($implType) unless $svgListPropertyType;
</ins><span class="cx">         push(@headerContent, &quot;    static $className* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;$implType&gt;&amp;&amp; impl)\n&quot;);
</span><span class="cx">         push(@headerContent, &quot;    {\n&quot;);
</span><span class="cx">         push(@headerContent, &quot;        $className* ptr = new (NotNull, JSC::allocateCell&lt;$className&gt;(globalObject-&gt;vm().heap)) $className(structure, *globalObject, WTFMove(impl));\n&quot;);
</span><span class="lines">@@ -2969,10 +2966,7 @@
</span><span class="cx">     }
</span><span class="cx">     push(@implContent, &quot;, CREATE_METHOD_TABLE($className) };\n\n&quot;);
</span><span class="cx"> 
</span><del>-    my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($interface);
-    my $svgPropertyOrListPropertyType;
-    $svgPropertyOrListPropertyType = $svgPropertyType if $svgPropertyType;
-    $svgPropertyOrListPropertyType = $svgListPropertyType if $svgListPropertyType;
</del><ins>+    my ($svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($interface);
</ins><span class="cx"> 
</span><span class="cx">     # Constructor
</span><span class="cx">     if ($interfaceName eq &quot;DOMWindow&quot;) {
</span><span class="lines">@@ -3342,14 +3336,6 @@
</span><span class="cx"> 
</span><span class="cx">                 if ($svgListPropertyType) {
</span><span class="cx">                     push(@implContent, &quot;    JSValue result =  &quot; . NativeToJSValueUsingReferences($attribute, 0, $interface, &quot;thisObject.wrapped().$implGetterFunctionName(&quot; . (join &quot;, &quot;, @callWithArgs) . &quot;)&quot;, &quot;thisObject&quot;) . &quot;;\n&quot;);
</span><del>-                } elsif ($svgPropertyOrListPropertyType) {
-                    push(@implContent, &quot;    $svgPropertyOrListPropertyType&amp; impl = thisObject.wrapped().propertyReference();\n&quot;);
-                    if ($svgPropertyOrListPropertyType eq &quot;float&quot;) { # Special case for JSSVGNumber
-                        push(@implContent, &quot;    JSValue result = &quot; . NativeToJSValueUsingReferences($attribute, 0, $interface, &quot;impl&quot;, &quot;thisObject&quot;) . &quot;;\n&quot;);
-                    } else {
-                        push(@implContent, &quot;    JSValue result = &quot; . NativeToJSValueUsingReferences($attribute, 0, $interface, &quot;impl.$implGetterFunctionName(&quot; . (join &quot;, &quot;, @callWithArgs) . &quot;)&quot;, &quot;thisObject&quot;) . &quot;;\n&quot;);
-
-                    }
</del><span class="cx">                 } else {
</span><span class="cx">                     my ($functionName, @arguments) = $codeGenerator-&gt;GetterExpression(\%implIncludes, $interfaceName, $attribute);
</span><span class="cx">                     my $implementedBy = $attribute-&gt;extendedAttributes-&gt;{ImplementedBy};
</span><span class="lines">@@ -3618,23 +3604,11 @@
</span><span class="cx">                     push (@implContent, &quot;        return false;\n&quot;);
</span><span class="cx">                 }
</span><span class="cx"> 
</span><del>-                if ($svgPropertyOrListPropertyType) {
-                    if ($svgPropertyType) {
-                        push(@implContent, &quot;    if (impl.isReadOnly()) {\n&quot;);
-                        push(@implContent, &quot;        setDOMException(&amp;state, throwScope, NO_MODIFICATION_ALLOWED_ERR);\n&quot;);
-                        push(@implContent, &quot;        return false;\n&quot;);
-                        push(@implContent, &quot;    }\n&quot;);
-                        $implIncludes{&quot;ExceptionCode.h&quot;} = 1;
-                    }
-                    push(@implContent, &quot;    $svgPropertyOrListPropertyType&amp; podImpl = impl.propertyReference();\n&quot;);
-                    if ($svgPropertyOrListPropertyType eq &quot;float&quot;) { # Special case for JSSVGNumber
-                        push(@implContent, &quot;    podImpl = nativeValue;\n&quot;);
-                    } else {
-                        my $functionString = &quot;podImpl.set$implSetterFunctionName(nativeValue)&quot;;
-                        $functionString = &quot;propagateException(state, throwScope, $functionString)&quot; if $attribute-&gt;extendedAttributes-&gt;{SetterMayThrowException};
-                        push(@implContent, &quot;    $functionString;\n&quot;);
-                    }
-                    push(@implContent, &quot;    impl.commitChange();\n&quot;) if $svgPropertyType;
</del><ins>+                if ($svgListPropertyType) {
+                    push(@implContent, &quot;    ${svgListPropertyType}&amp; podImpl = impl.propertyReference();\n&quot;);
+                    my $functionString = &quot;podImpl.set$implSetterFunctionName(nativeValue)&quot;;
+                    $functionString = &quot;propagateException(state, throwScope, $functionString)&quot; if $attribute-&gt;extendedAttributes-&gt;{SetterMayThrowException};
+                    push(@implContent, &quot;    $functionString;\n&quot;);
</ins><span class="cx">                     push(@implContent, &quot;    return true;\n&quot;);
</span><span class="cx">                 } else {
</span><span class="cx">                     my ($functionName, @arguments) = $codeGenerator-&gt;SetterExpression(\%implIncludes, $interfaceName, $attribute);
</span><span class="lines">@@ -3791,8 +3765,8 @@
</span><span class="cx"> 
</span><span class="cx">                     GenerateArgumentsCountCheck(\@implContent, $function, $interface);
</span><span class="cx"> 
</span><del>-                    my ($functionString, $dummy) = GenerateParametersCheck(\@implContent, $function, $interface, $functionImplementationName, $svgPropertyType, $svgPropertyOrListPropertyType, $svgListPropertyType);
-                    GenerateImplementationFunctionCall($function, $functionString, &quot;    &quot;, $svgPropertyType, $interface);
</del><ins>+                    my ($functionString, $dummy) = GenerateParametersCheck(\@implContent, $function, $interface, $functionImplementationName);
+                    GenerateImplementationFunctionCall($function, $functionString, &quot;    &quot;, $interface);
</ins><span class="cx">                 }
</span><span class="cx">             } else {
</span><span class="cx">                 my $methodName = $function-&gt;name;
</span><span class="lines">@@ -3837,19 +3811,11 @@
</span><span class="cx">                     push(@implContent, &quot;    return JSValue::encode(castedThis-&gt;&quot; . $functionImplementationName . &quot;(*state));\n&quot;);
</span><span class="cx">                 } else {
</span><span class="cx">                     push(@implContent, &quot;    auto&amp; impl = castedThis-&gt;wrapped();\n&quot;);
</span><del>-                    if ($svgPropertyType) {
-                        push(@implContent, &quot;    if (impl.isReadOnly()) {\n&quot;);
-                        push(@implContent, &quot;        setDOMException(state, throwScope, NO_MODIFICATION_ALLOWED_ERR);\n&quot;);
-                        push(@implContent, &quot;        return JSValue::encode(jsUndefined());\n&quot;);
-                        push(@implContent, &quot;    }\n&quot;);
-                        push(@implContent, &quot;    $svgPropertyType&amp; podImpl = impl.propertyReference();\n&quot;);
-                        $implIncludes{&quot;ExceptionCode.h&quot;} = 1;
-                    }
</del><span class="cx"> 
</span><span class="cx">                     GenerateArgumentsCountCheck(\@implContent, $function, $interface);
</span><span class="cx"> 
</span><del>-                    my ($functionString, $dummy) = GenerateParametersCheck(\@implContent, $function, $interface, $functionImplementationName, $svgPropertyType, $svgPropertyOrListPropertyType, $svgListPropertyType);
-                    GenerateImplementationFunctionCall($function, $functionString, &quot;    &quot;, $svgPropertyType, $interface);
</del><ins>+                    my ($functionString, $dummy) = GenerateParametersCheck(\@implContent, $function, $interface, $functionImplementationName);
+                    GenerateImplementationFunctionCall($function, $functionString, &quot;    &quot;, $interface);
</ins><span class="cx">                 }
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="lines">@@ -3884,8 +3850,6 @@
</span><span class="cx">                     $implFunctionName = &quot;WebCore::${implementedBy}::${functionImplementationName}&quot;;
</span><span class="cx">                 } elsif ($function-&gt;isStatic) {
</span><span class="cx">                     $implFunctionName = &quot;${interfaceName}::${functionImplementationName}&quot;;
</span><del>-                } elsif ($svgPropertyOrListPropertyType and !$svgListPropertyType) {
-                    $implFunctionName = &quot;podImpl.${functionImplementationName}&quot;;
</del><span class="cx">                 } else {
</span><span class="cx">                     $implFunctionName = &quot;impl.${functionImplementationName}&quot;;
</span><span class="cx">                 }
</span><span class="lines">@@ -4358,7 +4322,7 @@
</span><span class="cx"> 
</span><span class="cx"> sub GenerateParametersCheck
</span><span class="cx"> {
</span><del>-    my ($outputArray, $function, $interface, $functionImplementationName, $svgPropertyType, $svgPropertyOrListPropertyType, $svgListPropertyType) = @_;
</del><ins>+    my ($outputArray, $function, $interface, $functionImplementationName) = @_;
</ins><span class="cx"> 
</span><span class="cx">     my $interfaceName = $interface-&gt;type-&gt;name;
</span><span class="cx">     my $visibleInterfaceName = $codeGenerator-&gt;GetVisibleInterfaceName($interface);
</span><span class="lines">@@ -4373,8 +4337,6 @@
</span><span class="cx">         $functionName = &quot;WebCore::${implementedBy}::${functionImplementationName}&quot;;
</span><span class="cx">     } elsif ($function-&gt;isStatic) {
</span><span class="cx">         $functionName = &quot;${interfaceName}::${functionImplementationName}&quot;;
</span><del>-    } elsif ($svgPropertyOrListPropertyType and !$svgListPropertyType) {
-        $functionName = &quot;podImpl.${functionImplementationName}&quot;;
</del><span class="cx">     } else {
</span><span class="cx">         $functionName = &quot;impl.${functionImplementationName}&quot;;
</span><span class="cx">     }
</span><span class="lines">@@ -4943,7 +4905,7 @@
</span><span class="cx"> 
</span><span class="cx"> sub GenerateImplementationFunctionCall()
</span><span class="cx"> {
</span><del>-    my ($function, $functionString, $indent, $svgPropertyType, $interface) = @_;
</del><ins>+    my ($function, $functionString, $indent, $interface) = @_;
</ins><span class="cx"> 
</span><span class="cx">     my $nondeterministic = $function-&gt;extendedAttributes-&gt;{Nondeterministic};
</span><span class="cx"> 
</span><span class="lines">@@ -4960,7 +4922,6 @@
</span><span class="cx">         } else {
</span><span class="cx">             push(@implContent, $indent . &quot;$functionString;\n&quot;);
</span><span class="cx">         }
</span><del>-        push(@implContent, $indent . &quot;impl.commitChange();\n&quot;) if $svgPropertyType and !$function-&gt;isStatic;
</del><span class="cx">         push(@implContent, $indent . &quot;return JSValue::encode(jsUndefined());\n&quot;);
</span><span class="cx">     } else {
</span><span class="cx">         my $thisObject = $function-&gt;isStatic ? 0 : &quot;castedThis&quot;;
</span><span class="lines">@@ -5308,21 +5269,16 @@
</span><span class="cx"> 
</span><span class="cx">     my $interfaceName = $interface-&gt;type-&gt;name;
</span><span class="cx"> 
</span><del>-    my $svgPropertyType;
</del><span class="cx">     my $svgListPropertyType;
</span><span class="cx">     my $svgNativeType;
</span><span class="cx"> 
</span><del>-    return ($svgPropertyType, $svgListPropertyType, $svgNativeType) if not $interfaceName =~ /SVG/;
</del><ins>+    return ($svgListPropertyType, $svgNativeType) if not $interfaceName =~ /SVG/;
</ins><span class="cx"> 
</span><span class="cx">     $svgNativeType = $codeGenerator-&gt;GetSVGTypeNeedingTearOff($interface-&gt;type);
</span><del>-    return ($svgPropertyType, $svgListPropertyType, $svgNativeType) if not $svgNativeType;
</del><ins>+    return ($svgListPropertyType, $svgNativeType) if not $svgNativeType;
</ins><span class="cx"> 
</span><span class="cx">     my $svgWrappedNativeType = $codeGenerator-&gt;GetSVGWrappedTypeNeedingTearOff($interface-&gt;type);
</span><del>-    if ($svgNativeType =~ /SVGPropertyTearOff/) {
-        $svgPropertyType = $svgWrappedNativeType;
-        $headerIncludes{&quot;$svgWrappedNativeType.h&quot;} = 1;
-        $headerIncludes{&quot;SVGAnimatedPropertyTearOff.h&quot;} = 1;
-    } elsif ($svgNativeType =~ /SVGListPropertyTearOff/ or $svgNativeType =~ /SVGStaticListPropertyTearOff/) {
</del><ins>+    if ($svgNativeType =~ /SVGListPropertyTearOff/ or $svgNativeType =~ /SVGStaticListPropertyTearOff/) {
</ins><span class="cx">         $svgListPropertyType = $svgWrappedNativeType;
</span><span class="cx">         $headerIncludes{&quot;$svgWrappedNativeType.h&quot;} = 1;
</span><span class="cx">         $headerIncludes{&quot;SVGAnimatedListPropertyTearOff.h&quot;} = 1;
</span><span class="lines">@@ -5338,16 +5294,9 @@
</span><span class="cx">         $headerIncludes{&quot;SVGPathSegListPropertyTearOff.h&quot;} = 1;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    return ($svgPropertyType, $svgListPropertyType, $svgNativeType);
</del><ins>+    return ($svgListPropertyType, $svgNativeType);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-sub IsNativeType
-{
-    my $type = shift;
-
-    return exists $nativeType{$type-&gt;name};
-}
-
</del><span class="cx"> sub GetIntegerConversionConfiguration
</span><span class="cx"> {
</span><span class="cx">     my $context = shift;
</span><span class="lines">@@ -5570,25 +5519,7 @@
</span><span class="cx">             $value = &quot;static_cast&lt;&quot; . GetNativeType($interface, $type) . &quot;&gt;($value)&quot;;
</span><span class="cx">         } elsif ($codeGenerator-&gt;IsSVGTypeNeedingTearOff($type) and not $interface-&gt;type-&gt;name =~ /List$/) {
</span><span class="cx">             my $tearOffType = $codeGenerator-&gt;GetSVGTypeNeedingTearOff($type);
</span><del>-            if ($codeGenerator-&gt;IsSVGTypeWithWritablePropertiesNeedingTearOff($type) and !$inFunctionCall and not defined $context-&gt;extendedAttributes-&gt;{Immutable}) {
-                my $getter = $value;
-                $getter =~ s/impl\.//;
-                $getter =~ s/impl-&gt;//;
-                $getter =~ s/\(\)//;
-                my $updateMethod = &quot;&amp;&quot; . $interface-&gt;type-&gt;name . &quot;::update&quot; . $codeGenerator-&gt;WK_ucfirst($getter);
-
-                my $selfIsTearOffType = $codeGenerator-&gt;IsSVGTypeNeedingTearOff($interface-&gt;type);
-                if ($selfIsTearOffType) {
-                    # FIXME: Why SVGMatrix specifically?
-                    AddToImplIncludes(&quot;SVGMatrixTearOff.h&quot;, $conditional);
-                    $value = &quot;SVGMatrixTearOff::create($wrapped, $value)&quot;;
-                } else {
-                    AddToImplIncludes(&quot;SVGStaticPropertyTearOff.h&quot;, $conditional);
-                    my $interfaceName = $interface-&gt;type-&gt;name;
-                    $tearOffType =~ s/SVGPropertyTearOff&lt;/SVGStaticPropertyTearOff&lt;$interfaceName, /;
-                    $value = &quot;${tearOffType}::create(impl, $value, $updateMethod)&quot;;
-                }
-            } elsif ($tearOffType =~ /SVGStaticListPropertyTearOff/) {
</del><ins>+            if ($tearOffType =~ /SVGStaticListPropertyTearOff/) {
</ins><span class="cx">                 $value = &quot;${tearOffType}::create(impl, $value)&quot;;
</span><span class="cx">             } elsif (not $tearOffType =~ /SVG(Point|PathSeg)List/) {
</span><span class="cx">                 $value = &quot;${tearOffType}::create($value)&quot;;
</span><span class="lines">@@ -6024,7 +5955,7 @@
</span><span class="cx"> 
</span><span class="cx">             # FIXME: For now, we do not support SVG constructors.
</span><span class="cx">             # FIXME: Currently [Constructor(...)] does not yet support optional arguments without [Default=...]
</span><del>-            my ($dummy, $paramIndex) = GenerateParametersCheck($outputArray, $function, $interface, &quot;constructorCallback&quot;, undef, undef, undef);
</del><ins>+            my ($dummy, $paramIndex) = GenerateParametersCheck($outputArray, $function, $interface, &quot;constructorCallback&quot;);
</ins><span class="cx"> 
</span><span class="cx">             push(@constructorArgList, &quot;*state&quot;) if $codeGenerator-&gt;ExtendedAttributeContains($interface-&gt;extendedAttributes-&gt;{ConstructorCallWith}, &quot;ScriptState&quot;);;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -53,7 +53,6 @@
</span><span class="cx"> #include &quot;JSTestSubObj.h&quot;
</span><span class="cx"> #include &quot;JSXPathNSResolver.h&quot;
</span><span class="cx"> #include &quot;RuntimeEnabledFeatures.h&quot;
</span><del>-#include &quot;SVGStaticPropertyTearOff.h&quot;
</del><span class="cx"> #include &quot;SerializedScriptValue.h&quot;
</span><span class="cx"> #include &quot;Settings.h&quot;
</span><span class="cx"> #include &quot;URL.h&quot;
</span><span class="lines">@@ -2925,7 +2924,7 @@
</span><span class="cx">     UNUSED_PARAM(throwScope);
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     auto&amp; impl = thisObject.wrapped();
</span><del>-    JSValue result = toJS&lt;IDLInterface&lt;SVGPropertyTearOff&lt;SVGPoint&gt;&gt;&gt;(state, *thisObject.globalObject(), SVGStaticPropertyTearOff&lt;TestObj, SVGPoint&gt;::create(impl, impl.mutablePoint(), &amp;TestObj::updateMutablePoint));
</del><ins>+    JSValue result = toJS&lt;IDLInterface&lt;SVGPoint&gt;&gt;(state, *thisObject.globalObject(), impl.mutablePoint());
</ins><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -2941,7 +2940,7 @@
</span><span class="cx">     UNUSED_PARAM(throwScope);
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     auto&amp; impl = thisObject.wrapped();
</span><del>-    JSValue result = toJS&lt;IDLInterface&lt;SVGPropertyTearOff&lt;SVGPoint&gt;&gt;&gt;(state, *thisObject.globalObject(), SVGPropertyTearOff&lt;SVGPoint&gt;::create(impl.immutablePoint()));
</del><ins>+    JSValue result = toJS&lt;IDLInterface&lt;SVGPoint&gt;&gt;(state, *thisObject.globalObject(), impl.immutablePoint());
</ins><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -4393,9 +4392,9 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(throwScope);
</span><span class="cx">     auto&amp; impl = thisObject.wrapped();
</span><del>-    auto nativeValue = convert&lt;IDLInterface&lt;SVGPropertyTearOff&lt;SVGPoint&gt;&gt;&gt;(state, value, [](JSC::ExecState&amp; state, JSC::ThrowScope&amp; scope) { throwAttributeTypeError(state, scope, &quot;TestObject&quot;, &quot;mutablePoint&quot;, &quot;SVGPoint&quot;); });
</del><ins>+    auto nativeValue = convert&lt;IDLInterface&lt;SVGPoint&gt;&gt;(state, value, [](JSC::ExecState&amp; state, JSC::ThrowScope&amp; scope) { throwAttributeTypeError(state, scope, &quot;TestObject&quot;, &quot;mutablePoint&quot;, &quot;SVGPoint&quot;); });
</ins><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><del>-    impl.setMutablePoint(WTFMove(nativeValue));
</del><ins>+    impl.setMutablePoint(*nativeValue);
</ins><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -4412,9 +4411,9 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(throwScope);
</span><span class="cx">     auto&amp; impl = thisObject.wrapped();
</span><del>-    auto nativeValue = convert&lt;IDLInterface&lt;SVGPropertyTearOff&lt;SVGPoint&gt;&gt;&gt;(state, value, [](JSC::ExecState&amp; state, JSC::ThrowScope&amp; scope) { throwAttributeTypeError(state, scope, &quot;TestObject&quot;, &quot;immutablePoint&quot;, &quot;SVGPoint&quot;); });
</del><ins>+    auto nativeValue = convert&lt;IDLInterface&lt;SVGPoint&gt;&gt;(state, value, [](JSC::ExecState&amp; state, JSC::ThrowScope&amp; scope) { throwAttributeTypeError(state, scope, &quot;TestObject&quot;, &quot;immutablePoint&quot;, &quot;SVGPoint&quot;); });
</ins><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><del>-    impl.setImmutablePoint(WTFMove(nativeValue));
</del><ins>+    impl.setImmutablePoint(*nativeValue);
</ins><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -7419,7 +7418,7 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(throwScope);
</span><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><del>-    return JSValue::encode(toJS&lt;IDLInterface&lt;SVGPropertyTearOff&lt;SVGPoint&gt;&gt;&gt;(*state, *castedThis-&gt;globalObject(), SVGPropertyTearOff&lt;SVGPoint&gt;::create(impl.mutablePointFunction())));
</del><ins>+    return JSValue::encode(toJS&lt;IDLInterface&lt;SVGPoint&gt;&gt;(*state, *castedThis-&gt;globalObject(), impl.mutablePointFunction()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionImmutablePointFunctionCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
</span><span class="lines">@@ -7434,7 +7433,7 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(throwScope);
</span><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><del>-    return JSValue::encode(toJS&lt;IDLInterface&lt;SVGPropertyTearOff&lt;SVGPoint&gt;&gt;&gt;(*state, *castedThis-&gt;globalObject(), SVGPropertyTearOff&lt;SVGPoint&gt;::create(impl.immutablePointFunction())));
</del><ins>+    return JSValue::encode(toJS&lt;IDLInterface&lt;SVGPoint&gt;&gt;(*state, *castedThis-&gt;globalObject(), impl.immutablePointFunction()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOrangeCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -687,7 +687,7 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(throwScope);
</span><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><del>-    return JSValue::encode(toJS&lt;IDLInterface&lt;SVGPropertyTearOff&lt;SVGPoint&gt;&gt;&gt;(*state, *castedThis-&gt;globalObject(), SVGPropertyTearOff&lt;SVGPoint&gt;::create(impl.immutablePointFunction())));
</del><ins>+    return JSValue::encode(toJS&lt;IDLInterface&lt;SVGPoint&gt;&gt;(*state, *castedThis-&gt;globalObject(), impl.immutablePointFunction()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionStringSequenceFunctionCaller(JSC::ExecState*, JSTestTypedefs*, JSC::ThrowScope&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSPropertyNamesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSPropertyNames.in (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSPropertyNames.in        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/css/CSSPropertyNames.in        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -249,7 +249,7 @@
</span><span class="cx"> #if defined(ENABLE_CSS_IMAGE_RESOLUTION) &amp;&amp; ENABLE_CSS_IMAGE_RESOLUTION
</span><span class="cx"> image-resolution [Inherited, Custom=All]
</span><span class="cx"> #endif
</span><del>-kerning [Inherited, SVG, Converter=SVGLength]
</del><ins>+kerning [Inherited, SVG, Converter=SVGLengthValue]
</ins><span class="cx"> left [Initial=initialOffset, Converter=LengthOrAuto]
</span><span class="cx"> letter-spacing [Inherited, Converter=Spacing]
</span><span class="cx"> lighting-color [SVG, Converter=SVGColor]
</span></span></pre></div>
<a id="trunkSourceWebCorecssSVGCSSComputedStyleDeclarationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/SVGCSSComputedStyleDeclaration.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/SVGCSSComputedStyleDeclaration.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/css/SVGCSSComputedStyleDeclaration.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -81,17 +81,16 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static RefPtr&lt;CSSValue&gt; strokeDashArrayToCSSValueList(const Vector&lt;SVGLength&gt;&amp; dashes)
</del><ins>+static RefPtr&lt;CSSValue&gt; strokeDashArrayToCSSValueList(const Vector&lt;SVGLengthValue&gt;&amp; dashes)
</ins><span class="cx"> {
</span><span class="cx">     if (dashes.isEmpty())
</span><span class="cx">         return CSSPrimitiveValue::createIdentifier(CSSValueNone);
</span><span class="cx"> 
</span><del>-    RefPtr&lt;CSSValueList&gt; list = CSSValueList::createCommaSeparated();
-    const Vector&lt;SVGLength&gt;::const_iterator end = dashes.end();
-    for (Vector&lt;SVGLength&gt;::const_iterator it = dashes.begin(); it != end; ++it)
-        list-&gt;append(SVGLength::toCSSPrimitiveValue(*it));
</del><ins>+    auto list = CSSValueList::createCommaSeparated();
+    for (auto&amp; length : dashes)
+        list-&gt;append(SVGLengthValue::toCSSPrimitiveValue(length));
</ins><span class="cx"> 
</span><del>-    return list;
</del><ins>+    return WTFMove(list);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RefPtr&lt;SVGPaint&gt; ComputedStyleExtractor::adjustSVGPaintForCurrentColor(RefPtr&lt;SVGPaint&gt;&amp;&amp; paint, const RenderStyle* style) const
</span><span class="lines">@@ -166,7 +165,7 @@
</span><span class="cx">         case CSSPropertyFill:
</span><span class="cx">             return adjustSVGPaintForCurrentColor(SVGPaint::create(svgStyle.fillPaintType(), svgStyle.fillPaintUri(), svgStyle.fillPaintColor()), style);
</span><span class="cx">         case CSSPropertyKerning:
</span><del>-            return SVGLength::toCSSPrimitiveValue(svgStyle.kerning());
</del><ins>+            return SVGLengthValue::toCSSPrimitiveValue(svgStyle.kerning());
</ins><span class="cx">         case CSSPropertyMarkerEnd:
</span><span class="cx">             if (!svgStyle.markerEndResource().isEmpty())
</span><span class="cx">                 return CSSPrimitiveValue::create(svgStyle.markerEndResource(), CSSPrimitiveValue::CSS_URI);
</span><span class="lines">@@ -192,7 +191,7 @@
</span><span class="cx">                 case BS_SUB:
</span><span class="cx">                     return CSSPrimitiveValue::createIdentifier(CSSValueSub);
</span><span class="cx">                 case BS_LENGTH:
</span><del>-                    return SVGLength::toCSSPrimitiveValue(svgStyle.baselineShiftValue());
</del><ins>+                    return SVGLengthValue::toCSSPrimitiveValue(svgStyle.baselineShiftValue());
</ins><span class="cx">             }
</span><span class="cx">             ASSERT_NOT_REACHED();
</span><span class="cx">             return nullptr;
</span></span></pre></div>
<a id="trunkSourceWebCorecssStyleBuilderConverterh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleBuilderConverter.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleBuilderConverter.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/css/StyleBuilderConverter.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -121,9 +121,9 @@
</span><span class="cx"> #if ENABLE(VARIATION_FONTS)
</span><span class="cx">     static FontVariationSettings convertFontVariationSettings(StyleResolver&amp;, const CSSValue&amp;);
</span><span class="cx"> #endif
</span><del>-    static SVGLength convertSVGLength(StyleResolver&amp;, const CSSValue&amp;);
-    static Vector&lt;SVGLength&gt; convertSVGLengthVector(StyleResolver&amp;, const CSSValue&amp;);
-    static Vector&lt;SVGLength&gt; convertStrokeDashArray(StyleResolver&amp;, const CSSValue&amp;);
</del><ins>+    static SVGLengthValue convertSVGLengthValue(StyleResolver&amp;, const CSSValue&amp;);
+    static Vector&lt;SVGLengthValue&gt; convertSVGLengthVector(StyleResolver&amp;, const CSSValue&amp;);
+    static Vector&lt;SVGLengthValue&gt; convertStrokeDashArray(StyleResolver&amp;, const CSSValue&amp;);
</ins><span class="cx">     static PaintOrder convertPaintOrder(StyleResolver&amp;, const CSSValue&amp;);
</span><span class="cx">     static float convertOpacity(StyleResolver&amp;, const CSSValue&amp;);
</span><span class="cx">     static String convertSVGURIReference(StyleResolver&amp;, const CSSValue&amp;);
</span><span class="lines">@@ -1257,24 +1257,24 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-inline SVGLength StyleBuilderConverter::convertSVGLength(StyleResolver&amp;, const CSSValue&amp; value)
</del><ins>+inline SVGLengthValue StyleBuilderConverter::convertSVGLengthValue(StyleResolver&amp;, const CSSValue&amp; value)
</ins><span class="cx"> {
</span><del>-    return SVGLength::fromCSSPrimitiveValue(downcast&lt;CSSPrimitiveValue&gt;(value));
</del><ins>+    return SVGLengthValue::fromCSSPrimitiveValue(downcast&lt;CSSPrimitiveValue&gt;(value));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline Vector&lt;SVGLength&gt; StyleBuilderConverter::convertSVGLengthVector(StyleResolver&amp; styleResolver, const CSSValue&amp; value)
</del><ins>+inline Vector&lt;SVGLengthValue&gt; StyleBuilderConverter::convertSVGLengthVector(StyleResolver&amp; styleResolver, const CSSValue&amp; value)
</ins><span class="cx"> {
</span><span class="cx">     auto&amp; valueList = downcast&lt;CSSValueList&gt;(value);
</span><span class="cx"> 
</span><del>-    Vector&lt;SVGLength&gt; svgLengths;
</del><ins>+    Vector&lt;SVGLengthValue&gt; svgLengths;
</ins><span class="cx">     svgLengths.reserveInitialCapacity(valueList.length());
</span><span class="cx">     for (auto&amp; item : valueList)
</span><del>-        svgLengths.uncheckedAppend(convertSVGLength(styleResolver, item));
</del><ins>+        svgLengths.uncheckedAppend(convertSVGLengthValue(styleResolver, item));
</ins><span class="cx"> 
</span><span class="cx">     return svgLengths;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline Vector&lt;SVGLength&gt; StyleBuilderConverter::convertStrokeDashArray(StyleResolver&amp; styleResolver, const CSSValue&amp; value)
</del><ins>+inline Vector&lt;SVGLengthValue&gt; StyleBuilderConverter::convertStrokeDashArray(StyleResolver&amp; styleResolver, const CSSValue&amp; value)
</ins><span class="cx"> {
</span><span class="cx">     if (is&lt;CSSPrimitiveValue&gt;(value)) {
</span><span class="cx">         ASSERT(downcast&lt;CSSPrimitiveValue&gt;(value).valueID() == CSSValueNone);
</span></span></pre></div>
<a id="trunkSourceWebCorecssStyleBuilderCustomh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleBuilderCustom.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleBuilderCustom.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/css/StyleBuilderCustom.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -962,7 +962,7 @@
</span><span class="cx">         }
</span><span class="cx">     } else {
</span><span class="cx">         svgStyle.setBaselineShift(BS_LENGTH);
</span><del>-        svgStyle.setBaselineShiftValue(SVGLength::fromCSSPrimitiveValue(primitiveValue));
</del><ins>+        svgStyle.setBaselineShiftValue(SVGLengthValue::fromCSSPrimitiveValue(primitiveValue));
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlcanvasDOMPathh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/canvas/DOMPath.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/canvas/DOMPath.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/html/canvas/DOMPath.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -52,6 +52,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CANVAS_PATH)
</span><span class="cx">     void addPath(const DOMPath* path) { addPath(path, AffineTransform()); }
</span><ins>+    void addPath(const DOMPath* path, SVGMatrix&amp; matrix) { addPath(path, matrix.propertyReference()); }
</ins><span class="cx">     void addPath(const DOMPath* path, const AffineTransform&amp; transform)
</span><span class="cx">     {
</span><span class="cx">         if (!path || !transform.isInvertible())
</span></span></pre></div>
<a id="trunkSourceWebCorepageanimationCSSPropertyAnimationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/animation/CSSPropertyAnimation.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/animation/CSSPropertyAnimation.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/page/animation/CSSPropertyAnimation.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -253,12 +253,12 @@
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static inline SVGLength blendFunc(const AnimationBase*, const SVGLength&amp; from, const SVGLength&amp; to, double progress)
</del><ins>+static inline SVGLengthValue blendFunc(const AnimationBase*, const SVGLengthValue&amp; from, const SVGLengthValue&amp; to, double progress)
</ins><span class="cx"> {
</span><span class="cx">     return to.blend(from, narrowPrecisionToFloat(progress));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static inline Vector&lt;SVGLength&gt; blendFunc(const AnimationBase*, const Vector&lt;SVGLength&gt;&amp; from, const Vector&lt;SVGLength&gt;&amp; to, double progress)
</del><ins>+static inline Vector&lt;SVGLengthValue&gt; blendFunc(const AnimationBase*, const Vector&lt;SVGLengthValue&gt;&amp; from, const Vector&lt;SVGLengthValue&gt;&amp; to, double progress)
</ins><span class="cx"> {
</span><span class="cx">     size_t fromLength = from.size();
</span><span class="cx">     size_t toLength = to.size();
</span><span class="lines">@@ -273,7 +273,7 @@
</span><span class="cx">         else
</span><span class="cx">             resultLength = fromLength * toLength;
</span><span class="cx">     }
</span><del>-    Vector&lt;SVGLength&gt; result(resultLength);
</del><ins>+    Vector&lt;SVGLengthValue&gt; result(resultLength);
</ins><span class="cx">     for (size_t i = 0; i &lt; resultLength; ++i)
</span><span class="cx">         result[i] = to[i % toLength].blend(from[i % fromLength], narrowPrecisionToFloat(progress));
</span><span class="cx">     return result;
</span><span class="lines">@@ -1451,7 +1451,7 @@
</span><span class="cx"> 
</span><span class="cx">         new PropertyWrapperSVGPaint(CSSPropertyStroke, &amp;RenderStyle::strokePaintType, &amp;RenderStyle::strokePaintColor, &amp;RenderStyle::setStrokePaintColor),
</span><span class="cx">         new PropertyWrapper&lt;float&gt;(CSSPropertyStrokeOpacity, &amp;RenderStyle::strokeOpacity, &amp;RenderStyle::setStrokeOpacity),
</span><del>-        new PropertyWrapper&lt; Vector&lt;SVGLength&gt;&gt;(CSSPropertyStrokeDasharray, &amp;RenderStyle::strokeDashArray, &amp;RenderStyle::setStrokeDashArray),
</del><ins>+        new PropertyWrapper&lt;Vector&lt;SVGLengthValue&gt;&gt;(CSSPropertyStrokeDasharray, &amp;RenderStyle::strokeDashArray, &amp;RenderStyle::setStrokeDashArray),
</ins><span class="cx">         new PropertyWrapper&lt;float&gt;(CSSPropertyStrokeMiterlimit, &amp;RenderStyle::strokeMiterLimit, &amp;RenderStyle::setStrokeMiterLimit),
</span><span class="cx"> 
</span><span class="cx">         new LengthPropertyWrapper&lt;Length&gt;(CSSPropertyCx, &amp;RenderStyle::cx, &amp;RenderStyle::setCx),
</span><span class="lines">@@ -1472,8 +1472,8 @@
</span><span class="cx"> 
</span><span class="cx">         new PropertyWrapperMaybeInvalidColor(CSSPropertyLightingColor, &amp;RenderStyle::lightingColor, &amp;RenderStyle::setLightingColor),
</span><span class="cx"> 
</span><del>-        new PropertyWrapper&lt;SVGLength&gt;(CSSPropertyBaselineShift, &amp;RenderStyle::baselineShiftValue, &amp;RenderStyle::setBaselineShiftValue),
-        new PropertyWrapper&lt;SVGLength&gt;(CSSPropertyKerning, &amp;RenderStyle::kerning, &amp;RenderStyle::setKerning),
</del><ins>+        new PropertyWrapper&lt;SVGLengthValue&gt;(CSSPropertyBaselineShift, &amp;RenderStyle::baselineShiftValue, &amp;RenderStyle::setBaselineShiftValue),
+        new PropertyWrapper&lt;SVGLengthValue&gt;(CSSPropertyKerning, &amp;RenderStyle::kerning, &amp;RenderStyle::setKerning),
</ins><span class="cx"> #if ENABLE(VARIATION_FONTS)
</span><span class="cx">         new PropertyWrapperFontVariationSettings(CSSPropertyFontVariationSettings, &amp;RenderStyle::fontVariationSettings, &amp;RenderStyle::setFontVariationSettings),
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleRenderStyleh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/RenderStyle.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/RenderStyle.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -1751,8 +1751,8 @@
</span><span class="cx">     void setStrokeOpacity(float f) { accessSVGStyle().setStrokeOpacity(f); }
</span><span class="cx">     const Length&amp; strokeWidth() const { return svgStyle().strokeWidth(); }
</span><span class="cx">     void setStrokeWidth(Length w) { accessSVGStyle().setStrokeWidth(w); }
</span><del>-    Vector&lt;SVGLength&gt; strokeDashArray() const { return svgStyle().strokeDashArray(); }
-    void setStrokeDashArray(Vector&lt;SVGLength&gt; array) { accessSVGStyle().setStrokeDashArray(array); }
</del><ins>+    Vector&lt;SVGLengthValue&gt; strokeDashArray() const { return svgStyle().strokeDashArray(); }
+    void setStrokeDashArray(Vector&lt;SVGLengthValue&gt; array) { accessSVGStyle().setStrokeDashArray(array); }
</ins><span class="cx">     const Length&amp; strokeDashOffset() const { return svgStyle().strokeDashOffset(); }
</span><span class="cx">     void setStrokeDashOffset(Length d) { accessSVGStyle().setStrokeDashOffset(d); }
</span><span class="cx">     float strokeMiterLimit() const { return svgStyle().strokeMiterLimit(); }
</span><span class="lines">@@ -1783,10 +1783,10 @@
</span><span class="cx">     void setFloodColor(const Color&amp; c) { accessSVGStyle().setFloodColor(c); }
</span><span class="cx">     void setLightingColor(const Color&amp; c) { accessSVGStyle().setLightingColor(c); }
</span><span class="cx"> 
</span><del>-    SVGLength baselineShiftValue() const { return svgStyle().baselineShiftValue(); }
-    void setBaselineShiftValue(SVGLength s) { accessSVGStyle().setBaselineShiftValue(s); }
-    SVGLength kerning() const { return svgStyle().kerning(); }
-    void setKerning(SVGLength k) { accessSVGStyle().setKerning(k); }
</del><ins>+    SVGLengthValue baselineShiftValue() const { return svgStyle().baselineShiftValue(); }
+    void setBaselineShiftValue(SVGLengthValue s) { accessSVGStyle().setBaselineShiftValue(s); }
+    SVGLengthValue kerning() const { return svgStyle().kerning(); }
+    void setKerning(SVGLengthValue k) { accessSVGStyle().setKerning(k); }
</ins><span class="cx"> 
</span><span class="cx">     void setShapeOutside(RefPtr&lt;ShapeValue&gt;&amp;&amp; value)
</span><span class="cx">     {
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleSVGRenderStyleh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/SVGRenderStyle.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/SVGRenderStyle.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/rendering/style/SVGRenderStyle.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -78,7 +78,7 @@
</span><span class="cx">     static SVGPaint::SVGPaintType initialStrokePaintType() { return SVGPaint::SVG_PAINTTYPE_NONE; }
</span><span class="cx">     static Color initialStrokePaintColor() { return Color(); }
</span><span class="cx">     static String initialStrokePaintUri() { return String(); }
</span><del>-    static Vector&lt;SVGLength&gt; initialStrokeDashArray() { return Vector&lt;SVGLength&gt;(); }
</del><ins>+    static Vector&lt;SVGLengthValue&gt; initialStrokeDashArray() { return { }; }
</ins><span class="cx">     static float initialStrokeMiterLimit() { return 4; }
</span><span class="cx">     static float initialStopOpacity() { return 1; }
</span><span class="cx">     static Color initialStopColor() { return Color(0, 0, 0); }
</span><span class="lines">@@ -94,16 +94,16 @@
</span><span class="cx">     static EMaskType initialMaskType() { return MT_LUMINANCE; }
</span><span class="cx">     static PaintOrder initialPaintOrder() { return PaintOrderNormal; }
</span><span class="cx"> 
</span><del>-    static SVGLength initialBaselineShiftValue()
</del><ins>+    static SVGLengthValue initialBaselineShiftValue()
</ins><span class="cx">     {
</span><del>-        SVGLength length;
</del><ins>+        SVGLengthValue length;
</ins><span class="cx">         length.newValueSpecifiedUnits(LengthTypeNumber, 0);
</span><span class="cx">         return length;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    static SVGLength initialKerning()
</del><ins>+    static SVGLengthValue initialKerning()
</ins><span class="cx">     {
</span><del>-        SVGLength length;
</del><ins>+        SVGLengthValue length;
</ins><span class="cx">         length.newValueSpecifiedUnits(LengthTypeNumber, 0);
</span><span class="cx">         return length;
</span><span class="cx">     }
</span><span class="lines">@@ -215,7 +215,7 @@
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void setStrokeDashArray(const Vector&lt;SVGLength&gt;&amp; obj)
</del><ins>+    void setStrokeDashArray(const Vector&lt;SVGLengthValue&gt;&amp; obj)
</ins><span class="cx">     {
</span><span class="cx">         if (!(stroke-&gt;dashArray == obj))
</span><span class="cx">             stroke.access()-&gt;dashArray = obj;
</span><span class="lines">@@ -239,7 +239,7 @@
</span><span class="cx">             stroke.access()-&gt;dashOffset = obj;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void setKerning(const SVGLength&amp; obj)
</del><ins>+    void setKerning(const SVGLengthValue&amp; obj)
</ins><span class="cx">     {
</span><span class="cx">         if (!(text-&gt;kerning == obj))
</span><span class="cx">             text.access()-&gt;kerning = obj;
</span><span class="lines">@@ -275,7 +275,7 @@
</span><span class="cx">             misc.access()-&gt;lightingColor = obj;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void setBaselineShiftValue(const SVGLength&amp; obj)
</del><ins>+    void setBaselineShiftValue(const SVGLengthValue&amp; obj)
</ins><span class="cx">     {
</span><span class="cx">         if (!(misc-&gt;baselineShiftValue == obj))
</span><span class="cx">             misc.access()-&gt;baselineShiftValue = obj;
</span><span class="lines">@@ -340,17 +340,17 @@
</span><span class="cx">     const SVGPaint::SVGPaintType&amp; strokePaintType() const { return stroke-&gt;paintType; }
</span><span class="cx">     const Color&amp; strokePaintColor() const { return stroke-&gt;paintColor; }
</span><span class="cx">     const String&amp; strokePaintUri() const { return stroke-&gt;paintUri; }
</span><del>-    Vector&lt;SVGLength&gt; strokeDashArray() const { return stroke-&gt;dashArray; }
</del><ins>+    Vector&lt;SVGLengthValue&gt; strokeDashArray() const { return stroke-&gt;dashArray; }
</ins><span class="cx">     float strokeMiterLimit() const { return stroke-&gt;miterLimit; }
</span><span class="cx">     const Length&amp; strokeWidth() const { return stroke-&gt;width; }
</span><span class="cx">     const Length&amp; strokeDashOffset() const { return stroke-&gt;dashOffset; }
</span><del>-    SVGLength kerning() const { return text-&gt;kerning; }
</del><ins>+    SVGLengthValue kerning() const { return text-&gt;kerning; }
</ins><span class="cx">     float stopOpacity() const { return stops-&gt;opacity; }
</span><span class="cx">     const Color&amp; stopColor() const { return stops-&gt;color; }
</span><span class="cx">     float floodOpacity() const { return misc-&gt;floodOpacity; }
</span><span class="cx">     const Color&amp; floodColor() const { return misc-&gt;floodColor; }
</span><span class="cx">     const Color&amp; lightingColor() const { return misc-&gt;lightingColor; }
</span><del>-    SVGLength baselineShiftValue() const { return misc-&gt;baselineShiftValue; }
</del><ins>+    SVGLengthValue baselineShiftValue() const { return misc-&gt;baselineShiftValue; }
</ins><span class="cx">     ShadowData* shadow() const { return shadowSVG-&gt;shadow.get(); }
</span><span class="cx">     const Length&amp; cx() const { return layout-&gt;cx; }
</span><span class="cx">     const Length&amp; cy() const { return layout-&gt;cy; }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleSVGRenderStyleDefsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/SVGRenderStyleDefs.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/SVGRenderStyleDefs.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/rendering/style/SVGRenderStyleDefs.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -29,7 +29,7 @@
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><span class="cx"> #include &quot;Length.h&quot;
</span><del>-#include &quot;SVGLength.h&quot;
</del><ins>+#include &quot;SVGLengthValue.h&quot;
</ins><span class="cx"> #include &quot;SVGPaint.h&quot;
</span><span class="cx"> #include &quot;ShadowData.h&quot;
</span><span class="cx"> #include &lt;wtf/RefCounted.h&gt;
</span><span class="lines">@@ -150,7 +150,7 @@
</span><span class="cx"> 
</span><span class="cx">         Length width;
</span><span class="cx">         Length dashOffset;
</span><del>-        Vector&lt;SVGLength&gt; dashArray;
</del><ins>+        Vector&lt;SVGLengthValue&gt; dashArray;
</ins><span class="cx"> 
</span><span class="cx">         SVGPaint::SVGPaintType paintType;
</span><span class="cx">         Color paintColor;
</span><span class="lines">@@ -194,7 +194,7 @@
</span><span class="cx">             return !(*this == other);
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        SVGLength kerning;
</del><ins>+        SVGLengthValue kerning;
</ins><span class="cx"> 
</span><span class="cx">     private:
</span><span class="cx">         StyleTextData();
</span><span class="lines">@@ -218,7 +218,7 @@
</span><span class="cx">         Color lightingColor;
</span><span class="cx"> 
</span><span class="cx">         // non-inherited text stuff lives here not in StyleTextData.
</span><del>-        SVGLength baselineShiftValue;
</del><ins>+        SVGLengthValue baselineShiftValue;
</ins><span class="cx"> 
</span><span class="cx">     private:
</span><span class="cx">         StyleMiscData();
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGImagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGImage.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGImage.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGImage.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -35,7 +35,6 @@
</span><span class="cx"> #include &quot;RenderSVGResource.h&quot;
</span><span class="cx"> #include &quot;RenderSVGResourceFilter.h&quot;
</span><span class="cx"> #include &quot;SVGImageElement.h&quot;
</span><del>-#include &quot;SVGLength.h&quot;
</del><span class="cx"> #include &quot;SVGRenderingContext.h&quot;
</span><span class="cx"> #include &quot;SVGResources.h&quot;
</span><span class="cx"> #include &quot;SVGResourcesCache.h&quot;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGRootcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -39,7 +39,6 @@
</span><span class="cx"> #include &quot;RenderSVGResourceFilter.h&quot;
</span><span class="cx"> #include &quot;RenderView.h&quot;
</span><span class="cx"> #include &quot;SVGImage.h&quot;
</span><del>-#include &quot;SVGLength.h&quot;
</del><span class="cx"> #include &quot;SVGRenderingContext.h&quot;
</span><span class="cx"> #include &quot;SVGResources.h&quot;
</span><span class="cx"> #include &quot;SVGResourcesCache.h&quot;
</span><span class="lines">@@ -340,10 +339,10 @@
</span><span class="cx"> void RenderSVGRoot::buildLocalToBorderBoxTransform()
</span><span class="cx"> {
</span><span class="cx">     float scale = style().effectiveZoom();
</span><del>-    SVGPoint translate = svgSVGElement().currentTranslate();
</del><ins>+    FloatPoint translate = svgSVGElement().currentTranslateValue();
</ins><span class="cx">     LayoutSize borderAndPadding(borderLeft() + paddingLeft(), borderTop() + paddingTop());
</span><span class="cx">     m_localToBorderBoxTransform = svgSVGElement().viewBoxToViewTransform(contentWidth() / scale, contentHeight() / scale);
</span><del>-    if (borderAndPadding.isZero() &amp;&amp; scale == 1 &amp;&amp; translate == SVGPoint::zero())
</del><ins>+    if (borderAndPadding.isZero() &amp;&amp; scale == 1 &amp;&amp; translate == FloatPoint::zero())
</ins><span class="cx">         return;
</span><span class="cx">     m_localToBorderBoxTransform = AffineTransform(scale, 0, 0, scale, borderAndPadding.width() + translate.x(), borderAndPadding.height() + translate.y()) * m_localToBorderBoxTransform;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgSVGPathDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/SVGPathData.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/SVGPathData.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/rendering/svg/SVGPathData.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -30,6 +30,7 @@
</span><span class="cx"> #include &quot;SVGNames.h&quot;
</span><span class="cx"> #include &quot;SVGPathElement.h&quot;
</span><span class="cx"> #include &quot;SVGPathUtilities.h&quot;
</span><ins>+#include &quot;SVGPoint.h&quot;
</ins><span class="cx"> #include &quot;SVGPolygonElement.h&quot;
</span><span class="cx"> #include &quot;SVGPolylineElement.h&quot;
</span><span class="cx"> #include &quot;SVGRectElement.h&quot;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgSVGRenderSupportcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/SVGRenderSupport.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/SVGRenderSupport.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/rendering/svg/SVGRenderSupport.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -433,7 +433,7 @@
</span><span class="cx">     if (svgStyle.joinStyle() == MiterJoin)
</span><span class="cx">         context-&gt;setMiterLimit(svgStyle.strokeMiterLimit());
</span><span class="cx"> 
</span><del>-    const Vector&lt;SVGLength&gt;&amp; dashes = svgStyle.strokeDashArray();
</del><ins>+    const Vector&lt;SVGLengthValue&gt;&amp; dashes = svgStyle.strokeDashArray();
</ins><span class="cx">     if (dashes.isEmpty())
</span><span class="cx">         context-&gt;setStrokeStyle(SolidStroke);
</span><span class="cx">     else {
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgSVGRenderTreeAsTextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -191,12 +191,11 @@
</span><span class="cx">             SVGLengthContext lengthContext(&amp;shape.graphicsElement());
</span><span class="cx">             double dashOffset = lengthContext.valueForLength(svgStyle.strokeDashOffset());
</span><span class="cx">             double strokeWidth = lengthContext.valueForLength(svgStyle.strokeWidth());
</span><del>-            const Vector&lt;SVGLength&gt;&amp; dashes = svgStyle.strokeDashArray();
</del><ins>+            const auto&amp; dashes = svgStyle.strokeDashArray();
</ins><span class="cx"> 
</span><span class="cx">             DashArray dashArray;
</span><del>-            const Vector&lt;SVGLength&gt;::const_iterator end = dashes.end();
-            for (Vector&lt;SVGLength&gt;::const_iterator it = dashes.begin(); it != end; ++it)
-                dashArray.append((*it).value(lengthContext));
</del><ins>+            for (auto&amp; length : dashes)
+                dashArray.append(length.value(lengthContext));
</ins><span class="cx"> 
</span><span class="cx">             writeIfNotDefault(ts, &quot;opacity&quot;, svgStyle.strokeOpacity(), 1.0f);
</span><span class="cx">             writeIfNotDefault(ts, &quot;stroke width&quot;, strokeWidth, 1.0);
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgSVGTextLayoutEngineBaselinecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -36,7 +36,7 @@
</span><span class="cx"> float SVGTextLayoutEngineBaseline::calculateBaselineShift(const SVGRenderStyle&amp; style, SVGElement* context) const
</span><span class="cx"> {
</span><span class="cx">     if (style.baselineShift() == BS_LENGTH) {
</span><del>-        SVGLength baselineShiftValueLength = style.baselineShiftValue();
</del><ins>+        auto baselineShiftValueLength = style.baselineShiftValue();
</ins><span class="cx">         if (baselineShiftValueLength.unitType() == LengthTypePercentage)
</span><span class="cx">             return baselineShiftValueLength.valueAsPercentage() * m_font.pixelSize();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgSVGTextLayoutEngineSpacingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/SVGTextLayoutEngineSpacing.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/SVGTextLayoutEngineSpacing.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/rendering/svg/SVGTextLayoutEngineSpacing.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -40,7 +40,7 @@
</span><span class="cx"> float SVGTextLayoutEngineSpacing::calculateCSSKerningAndSpacing(const SVGRenderStyle* style, SVGElement* contextElement, const UChar* currentCharacter)
</span><span class="cx"> {
</span><span class="cx">     float kerning = 0;
</span><del>-    SVGLength kerningLength = style-&gt;kerning();
</del><ins>+    auto kerningLength = style-&gt;kerning();
</ins><span class="cx">     if (kerningLength.unitType() == LengthTypePercentage)
</span><span class="cx">         kerning = kerningLength.valueAsPercentage() * m_font.pixelSize();
</span><span class="cx">     else {
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgSVGTextQuerycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/SVGTextQuery.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/SVGTextQuery.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/rendering/svg/SVGTextQuery.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -345,10 +345,10 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGPoint SVGTextQuery::startPositionOfCharacter(unsigned position) const
</del><ins>+FloatPoint SVGTextQuery::startPositionOfCharacter(unsigned position) const
</ins><span class="cx"> {
</span><span class="cx">     if (m_textBoxes.isEmpty())
</span><del>-        return SVGPoint();
</del><ins>+        return { };
</ins><span class="cx"> 
</span><span class="cx">     StartPositionOfCharacterData data(position);
</span><span class="cx">     executeQuery(&amp;data, &amp;SVGTextQuery::startPositionOfCharacterCallback);
</span><span class="lines">@@ -392,10 +392,10 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGPoint SVGTextQuery::endPositionOfCharacter(unsigned position) const
</del><ins>+FloatPoint SVGTextQuery::endPositionOfCharacter(unsigned position) const
</ins><span class="cx"> {
</span><span class="cx">     if (m_textBoxes.isEmpty())
</span><del>-        return SVGPoint();
</del><ins>+        return { };
</ins><span class="cx"> 
</span><span class="cx">     EndPositionOfCharacterData data(position);
</span><span class="cx">     executeQuery(&amp;data, &amp;SVGTextQuery::endPositionOfCharacterCallback);
</span><span class="lines">@@ -536,7 +536,7 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-int SVGTextQuery::characterNumberAtPosition(const SVGPoint&amp; position) const
</del><ins>+int SVGTextQuery::characterNumberAtPosition(const FloatPoint&amp; position) const
</ins><span class="cx"> {
</span><span class="cx">     if (m_textBoxes.isEmpty())
</span><span class="cx">         return -1;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgSVGTextQueryh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/SVGTextQuery.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/SVGTextQuery.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/rendering/svg/SVGTextQuery.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -20,7 +20,6 @@
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><span class="cx"> #include &quot;FloatRect.h&quot;
</span><del>-#include &quot;SVGPoint.h&quot;
</del><span class="cx"> #include &quot;SVGTextFragment.h&quot;
</span><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -37,11 +36,11 @@
</span><span class="cx">     unsigned numberOfCharacters() const;
</span><span class="cx">     float textLength() const;
</span><span class="cx">     float subStringLength(unsigned startPosition, unsigned length) const;
</span><del>-    SVGPoint startPositionOfCharacter(unsigned position) const;
-    SVGPoint endPositionOfCharacter(unsigned position) const;
</del><ins>+    FloatPoint startPositionOfCharacter(unsigned position) const;
+    FloatPoint endPositionOfCharacter(unsigned position) const;
</ins><span class="cx">     float rotationOfCharacter(unsigned position) const;
</span><span class="cx">     FloatRect extentOfCharacter(unsigned position) const;
</span><del>-    int characterNumberAtPosition(const SVGPoint&amp;) const;
</del><ins>+    int characterNumberAtPosition(const FloatPoint&amp;) const;
</ins><span class="cx"> 
</span><span class="cx">     // Public helper struct. Private classes in SVGTextQuery inherit from it.
</span><span class="cx">     struct Data;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgLinearGradientAttributesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/LinearGradientAttributes.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/LinearGradientAttributes.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/LinearGradientAttributes.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -35,15 +35,15 @@
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    SVGLength x1() const { return m_x1; }
-    SVGLength y1() const { return m_y1; }
-    SVGLength x2() const { return m_x2; }
-    SVGLength y2() const { return m_y2; }
</del><ins>+    SVGLengthValue x1() const { return m_x1; }
+    SVGLengthValue y1() const { return m_y1; }
+    SVGLengthValue x2() const { return m_x2; }
+    SVGLengthValue y2() const { return m_y2; }
</ins><span class="cx"> 
</span><del>-    void setX1(const SVGLength&amp; value) { m_x1 = value; m_x1Set = true; }
-    void setY1(const SVGLength&amp; value) { m_y1 = value; m_y1Set = true; }
-    void setX2(const SVGLength&amp; value) { m_x2 = value; m_x2Set = true; }
-    void setY2(const SVGLength&amp; value) { m_y2 = value; m_y2Set = true; }
</del><ins>+    void setX1(SVGLengthValue value) { m_x1 = value; m_x1Set = true; }
+    void setY1(SVGLengthValue value) { m_y1 = value; m_y1Set = true; }
+    void setX2(SVGLengthValue value) { m_x2 = value; m_x2Set = true; }
+    void setY2(SVGLengthValue value) { m_y2 = value; m_y2Set = true; }
</ins><span class="cx"> 
</span><span class="cx">     bool hasX1() const { return m_x1Set; }
</span><span class="cx">     bool hasY1() const { return m_y1Set; }
</span><span class="lines">@@ -52,10 +52,10 @@
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     // Properties
</span><del>-    SVGLength m_x1;
-    SVGLength m_y1;
-    SVGLength m_x2;
-    SVGLength m_y2;
</del><ins>+    SVGLengthValue m_x1;
+    SVGLengthValue m_y1;
+    SVGLengthValue m_x2;
+    SVGLengthValue m_y2;
</ins><span class="cx"> 
</span><span class="cx">     // Property states
</span><span class="cx">     bool m_x1Set : 1;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgPatternAttributesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/PatternAttributes.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/PatternAttributes.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/PatternAttributes.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -19,8 +19,8 @@
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><del>-#include &quot;SVGLength.h&quot;
-#include &quot;SVGPreserveAspectRatio.h&quot;
</del><ins>+#include &quot;SVGLengthValue.h&quot;
+#include &quot;SVGPreserveAspectRatioValue.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="lines">@@ -50,10 +50,10 @@
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    SVGLength x() const { return m_x; }
-    SVGLength y() const { return m_y; }
-    SVGLength width() const { return m_width; }
-    SVGLength height() const { return m_height; }
</del><ins>+    SVGLengthValue x() const { return m_x; }
+    SVGLengthValue y() const { return m_y; }
+    SVGLengthValue width() const { return m_width; }
+    SVGLengthValue height() const { return m_height; }
</ins><span class="cx">     FloatRect viewBox() const { return m_viewBox; }
</span><span class="cx">     SVGPreserveAspectRatioValue preserveAspectRatio() const { return m_preserveAspectRatio; }
</span><span class="cx">     SVGUnitTypes::SVGUnitType patternUnits() const { return m_patternUnits; }
</span><span class="lines">@@ -61,25 +61,25 @@
</span><span class="cx">     AffineTransform patternTransform() const { return m_patternTransform; }
</span><span class="cx">     const SVGPatternElement* patternContentElement() const { return m_patternContentElement; }
</span><span class="cx"> 
</span><del>-    void setX(const SVGLength&amp; value)
</del><ins>+    void setX(SVGLengthValue value)
</ins><span class="cx">     {
</span><span class="cx">         m_x = value;
</span><span class="cx">         m_xSet = true;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void setY(const SVGLength&amp; value)
</del><ins>+    void setY(SVGLengthValue value)
</ins><span class="cx">     {
</span><span class="cx">         m_y = value;
</span><span class="cx">         m_ySet = true;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void setWidth(const SVGLength&amp; value)
</del><ins>+    void setWidth(SVGLengthValue value)
</ins><span class="cx">     {
</span><span class="cx">         m_width = value;
</span><span class="cx">         m_widthSet = true;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void setHeight(const SVGLength&amp; value)
</del><ins>+    void setHeight(SVGLengthValue value)
</ins><span class="cx">     {
</span><span class="cx">         m_height = value;
</span><span class="cx">         m_heightSet = true;
</span><span class="lines">@@ -91,7 +91,7 @@
</span><span class="cx">         m_viewBoxSet = true;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    void setPreserveAspectRatio(const SVGPreserveAspectRatioValue&amp; value)
</del><ins>+    void setPreserveAspectRatio(SVGPreserveAspectRatioValue value)
</ins><span class="cx">     {
</span><span class="cx">         m_preserveAspectRatio = value;
</span><span class="cx">         m_preserveAspectRatioSet = true;
</span><span class="lines">@@ -134,10 +134,10 @@
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     // Properties
</span><del>-    SVGLength m_x;
-    SVGLength m_y;
-    SVGLength m_width;
-    SVGLength m_height;
</del><ins>+    SVGLengthValue m_x;
+    SVGLengthValue m_y;
+    SVGLengthValue m_width;
+    SVGLengthValue m_height;
</ins><span class="cx">     FloatRect m_viewBox;
</span><span class="cx">     SVGPreserveAspectRatioValue m_preserveAspectRatio;
</span><span class="cx">     SVGUnitTypes::SVGUnitType m_patternUnits;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgRadialGradientAttributesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/RadialGradientAttributes.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/RadialGradientAttributes.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/RadialGradientAttributes.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -37,19 +37,19 @@
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    SVGLength cx() const { return m_cx; }
-    SVGLength cy() const { return m_cy; }
-    SVGLength r() const { return m_r; }
-    SVGLength fx() const { return m_fx; }
-    SVGLength fy() const { return m_fy; }
-    SVGLength fr() const { return m_fr; }
</del><ins>+    SVGLengthValue cx() const { return m_cx; }
+    SVGLengthValue cy() const { return m_cy; }
+    SVGLengthValue r() const { return m_r; }
+    SVGLengthValue fx() const { return m_fx; }
+    SVGLengthValue fy() const { return m_fy; }
+    SVGLengthValue fr() const { return m_fr; }
</ins><span class="cx"> 
</span><del>-    void setCx(const SVGLength&amp; value) { m_cx = value; m_cxSet = true; }
-    void setCy(const SVGLength&amp; value) { m_cy = value; m_cySet = true; }
-    void setR(const SVGLength&amp; value) { m_r = value; m_rSet = true; }
-    void setFx(const SVGLength&amp; value) { m_fx = value; m_fxSet = true; }
-    void setFy(const SVGLength&amp; value) { m_fy = value; m_fySet = true; }
-    void setFr(const SVGLength&amp; value) { m_fr = value; m_frSet = true; }
</del><ins>+    void setCx(SVGLengthValue value) { m_cx = value; m_cxSet = true; }
+    void setCy(SVGLengthValue value) { m_cy = value; m_cySet = true; }
+    void setR(SVGLengthValue value) { m_r = value; m_rSet = true; }
+    void setFx(SVGLengthValue value) { m_fx = value; m_fxSet = true; }
+    void setFy(SVGLengthValue value) { m_fy = value; m_fySet = true; }
+    void setFr(SVGLengthValue value) { m_fr = value; m_frSet = true; }
</ins><span class="cx"> 
</span><span class="cx">     bool hasCx() const { return m_cxSet; }
</span><span class="cx">     bool hasCy() const { return m_cySet; }
</span><span class="lines">@@ -60,12 +60,12 @@
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     // Properties
</span><del>-    SVGLength m_cx;
-    SVGLength m_cy;
-    SVGLength m_r;
-    SVGLength m_fx;
-    SVGLength m_fy;
-    SVGLength m_fr;
</del><ins>+    SVGLengthValue m_cx;
+    SVGLengthValue m_cy;
+    SVGLengthValue m_r;
+    SVGLengthValue m_fx;
+    SVGLengthValue m_fy;
+    SVGLengthValue m_fr;
</ins><span class="cx"> 
</span><span class="cx">     // Property states
</span><span class="cx">     bool m_cxSet : 1;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAllInOnecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAllInOne.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAllInOne.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGAllInOne.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -112,7 +112,6 @@
</span><span class="cx"> #include &quot;SVGImageElement.cpp&quot;
</span><span class="cx"> #include &quot;SVGImageLoader.cpp&quot;
</span><span class="cx"> #include &quot;SVGLangSpace.cpp&quot;
</span><del>-#include &quot;SVGLength.cpp&quot;
</del><span class="cx"> #include &quot;SVGLengthContext.cpp&quot;
</span><span class="cx"> #include &quot;SVGLengthList.cpp&quot;
</span><span class="cx"> #include &quot;SVGLineElement.cpp&quot;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAngleh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAngle.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAngle.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGAngle.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -22,6 +22,7 @@
</span><span class="cx">  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><ins>+
</ins><span class="cx"> #pragma once
</span><span class="cx"> 
</span><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateTransformElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimateTransformElement.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateTransformElement.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGAnimateTransformElement.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -30,7 +30,7 @@
</span><span class="cx"> 
</span><span class="cx"> inline SVGAnimateTransformElement::SVGAnimateTransformElement(const QualifiedName&amp; tagName, Document&amp; document)
</span><span class="cx">     : SVGAnimateElementBase(tagName, document)
</span><del>-    , m_type(SVGTransform::SVG_TRANSFORM_UNKNOWN)
</del><ins>+    , m_type(SVGTransformValue::SVG_TRANSFORM_UNKNOWN)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(hasTagName(SVGNames::animateTransformTag));
</span><span class="cx"> }
</span><span class="lines">@@ -56,8 +56,8 @@
</span><span class="cx"> {
</span><span class="cx">     if (name == SVGNames::typeAttr) {
</span><span class="cx">         m_type = SVGTransformable::parseTransformType(value);
</span><del>-        if (m_type == SVGTransform::SVG_TRANSFORM_MATRIX)
-            m_type = SVGTransform::SVG_TRANSFORM_UNKNOWN;
</del><ins>+        if (m_type == SVGTransformValue::SVG_TRANSFORM_MATRIX)
+            m_type = SVGTransformValue::SVG_TRANSFORM_UNKNOWN;
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimateTransformElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimateTransformElement.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimateTransformElement.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGAnimateTransformElement.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -23,7 +23,7 @@
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><span class="cx"> #include &quot;SVGAnimateElementBase.h&quot;
</span><del>-#include &quot;SVGTransform.h&quot;
</del><ins>+#include &quot;SVGTransformValue.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="lines">@@ -33,7 +33,7 @@
</span><span class="cx"> public:
</span><span class="cx">     static Ref&lt;SVGAnimateTransformElement&gt; create(const QualifiedName&amp;, Document&amp;);
</span><span class="cx"> 
</span><del>-    SVGTransform::SVGTransformType transformType() const { return m_type; }
</del><ins>+    SVGTransformValue::SVGTransformType transformType() const { return m_type; }
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     SVGAnimateTransformElement(const QualifiedName&amp;, Document&amp;);
</span><span class="lines">@@ -41,7 +41,7 @@
</span><span class="cx">     bool hasValidAttributeType() final;
</span><span class="cx">     void parseAttribute(const QualifiedName&amp;, const AtomicString&amp;) final;
</span><span class="cx"> 
</span><del>-    SVGTransform::SVGTransformType m_type;
</del><ins>+    SVGTransformValue::SVGTransformType m_type;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedLengthcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedLength.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedLength.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGAnimatedLength.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -28,13 +28,13 @@
</span><span class="cx"> 
</span><span class="cx"> SVGAnimatedLengthAnimator::SVGAnimatedLengthAnimator(SVGAnimationElement* animationElement, SVGElement* contextElement)
</span><span class="cx">     : SVGAnimatedTypeAnimator(AnimatedLength, animationElement, contextElement)
</span><del>-    , m_lengthMode(SVGLength::lengthModeForAnimatedLengthAttribute(animationElement-&gt;attributeName()))
</del><ins>+    , m_lengthMode(SVGLengthValue::lengthModeForAnimatedLengthAttribute(animationElement-&gt;attributeName()))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> std::unique_ptr&lt;SVGAnimatedType&gt; SVGAnimatedLengthAnimator::constructFromString(const String&amp; string)
</span><span class="cx"> {
</span><del>-    return SVGAnimatedType::createLength(std::make_unique&lt;SVGLength&gt;(m_lengthMode, string));
</del><ins>+    return SVGAnimatedType::createLength(std::make_unique&lt;SVGLengthValue&gt;(m_lengthMode, string));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> std::unique_ptr&lt;SVGAnimatedType&gt; SVGAnimatedLengthAnimator::startAnimValAnimation(const SVGElementAnimatedPropertyList&amp; animatedTypes)
</span><span class="lines">@@ -68,16 +68,16 @@
</span><span class="cx">     ASSERT(from-&gt;type() == to-&gt;type());
</span><span class="cx"> 
</span><span class="cx">     SVGLengthContext lengthContext(m_contextElement);
</span><del>-    const SVGLength&amp; fromLength = from-&gt;length();
-    SVGLength&amp; toLength = to-&gt;length();
</del><ins>+    const auto&amp; fromLength = from-&gt;length();
+    auto&amp; toLength = to-&gt;length();
</ins><span class="cx"> 
</span><span class="cx">     toLength.setValue(toLength.value(lengthContext) + fromLength.value(lengthContext), lengthContext);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static SVGLength parseLengthFromString(SVGAnimationElement* animationElement, const String&amp; string)
</del><ins>+static SVGLengthValue parseLengthFromString(SVGAnimationElement* animationElement, const String&amp; string)
</ins><span class="cx"> {
</span><del>-    SVGLength length;
-    length.setValueAsString(string, SVGLength::lengthModeForAnimatedLengthAttribute(animationElement-&gt;attributeName()));
</del><ins>+    SVGLengthValue length;
+    length.setValueAsString(string, SVGLengthValue::lengthModeForAnimatedLengthAttribute(animationElement-&gt;attributeName()));
</ins><span class="cx">     return length;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -86,14 +86,14 @@
</span><span class="cx">     ASSERT(m_animationElement);
</span><span class="cx">     ASSERT(m_contextElement);
</span><span class="cx"> 
</span><del>-    SVGLength fromSVGLength = m_animationElement-&gt;animationMode() == ToAnimation ? animated-&gt;length() : from-&gt;length();
-    SVGLength toSVGLength = to-&gt;length();
-    const SVGLength&amp; toAtEndOfDurationSVGLength = toAtEndOfDuration-&gt;length();
-    SVGLength&amp; animatedSVGLength = animated-&gt;length();
</del><ins>+    auto fromSVGLength = m_animationElement-&gt;animationMode() == ToAnimation ? animated-&gt;length() : from-&gt;length();
+    auto toSVGLength = to-&gt;length();
+    const auto&amp; toAtEndOfDurationSVGLength = toAtEndOfDuration-&gt;length();
+    auto&amp; animatedSVGLength = animated-&gt;length();
</ins><span class="cx"> 
</span><span class="cx">     // Apply CSS inheritance rules.
</span><del>-    m_animationElement-&gt;adjustForInheritance&lt;SVGLength&gt;(parseLengthFromString, m_animationElement-&gt;fromPropertyValueType(), fromSVGLength, m_contextElement);
-    m_animationElement-&gt;adjustForInheritance&lt;SVGLength&gt;(parseLengthFromString, m_animationElement-&gt;toPropertyValueType(), toSVGLength, m_contextElement);
</del><ins>+    m_animationElement-&gt;adjustForInheritance&lt;SVGLengthValue&gt;(parseLengthFromString, m_animationElement-&gt;fromPropertyValueType(), fromSVGLength, m_contextElement);
+    m_animationElement-&gt;adjustForInheritance&lt;SVGLengthValue&gt;(parseLengthFromString, m_animationElement-&gt;toPropertyValueType(), toSVGLength, m_contextElement);
</ins><span class="cx"> 
</span><span class="cx">     SVGLengthContext lengthContext(m_contextElement);
</span><span class="cx">     float animatedNumber = animatedSVGLength.value(lengthContext);
</span><span class="lines">@@ -107,9 +107,9 @@
</span><span class="cx"> {
</span><span class="cx">     ASSERT(m_animationElement);
</span><span class="cx">     ASSERT(m_contextElement);
</span><del>-    SVGLengthMode lengthMode = SVGLength::lengthModeForAnimatedLengthAttribute(m_animationElement-&gt;attributeName());
-    SVGLength from = SVGLength(lengthMode, fromString);
-    SVGLength to = SVGLength(lengthMode, toString);
</del><ins>+    auto lengthMode = SVGLengthValue::lengthModeForAnimatedLengthAttribute(m_animationElement-&gt;attributeName());
+    auto from = SVGLengthValue(lengthMode, fromString);
+    auto to = SVGLengthValue(lengthMode, toString);
</ins><span class="cx">     SVGLengthContext lengthContext(m_contextElement);
</span><span class="cx">     return fabsf(to.value(lengthContext) - from.value(lengthContext));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedLengthh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedLength.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedLength.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGAnimatedLength.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -25,14 +25,11 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-template&lt;typename T&gt; 
-class SVGPropertyTearOff;
</del><ins>+using SVGAnimatedLength = SVGAnimatedPropertyTearOff&lt;SVGLength&gt;;
</ins><span class="cx"> 
</span><del>-using SVGAnimatedLength = SVGAnimatedPropertyTearOff&lt;SVGPropertyTearOff&lt;SVGLength&gt;&gt;;
-
</del><span class="cx"> // Helper macros to declare/define a SVGAnimatedLength object
</span><span class="cx"> #define DECLARE_ANIMATED_LENGTH(UpperProperty, LowerProperty) \
</span><del>-DECLARE_ANIMATED_PROPERTY(SVGAnimatedLength, SVGLength, UpperProperty, LowerProperty, )
</del><ins>+DECLARE_ANIMATED_PROPERTY(SVGAnimatedLength, SVGLengthValue, UpperProperty, LowerProperty, )
</ins><span class="cx"> 
</span><span class="cx"> #define DEFINE_ANIMATED_LENGTH(OwnerType, DOMAttribute, UpperProperty, LowerProperty) \
</span><span class="cx"> DEFINE_ANIMATED_PROPERTY(AnimatedLength, OwnerType, DOMAttribute, DOMAttribute.localName(), UpperProperty, LowerProperty)
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedLengthListcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedLengthList.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedLengthList.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGAnimatedLengthList.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -27,7 +27,7 @@
</span><span class="cx"> 
</span><span class="cx"> SVGAnimatedLengthListAnimator::SVGAnimatedLengthListAnimator(SVGAnimationElement* animationElement, SVGElement* contextElement)
</span><span class="cx">     : SVGAnimatedTypeAnimator(AnimatedLengthList, animationElement, contextElement)
</span><del>-    , m_lengthMode(SVGLength::lengthModeForAnimatedLengthAttribute(animationElement-&gt;attributeName()))
</del><ins>+    , m_lengthMode(SVGLengthValue::lengthModeForAnimatedLengthAttribute(animationElement-&gt;attributeName()))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -68,8 +68,8 @@
</span><span class="cx">     ASSERT(from-&gt;type() == AnimatedLengthList);
</span><span class="cx">     ASSERT(from-&gt;type() == to-&gt;type());
</span><span class="cx"> 
</span><del>-    const SVGLengthList&amp; fromLengthList = from-&gt;lengthList();
-    SVGLengthList&amp; toLengthList = to-&gt;lengthList();
</del><ins>+    const auto&amp; fromLengthList = from-&gt;lengthList();
+    auto&amp; toLengthList = to-&gt;lengthList();
</ins><span class="cx"> 
</span><span class="cx">     unsigned fromLengthListSize = fromLengthList.size();
</span><span class="cx">     if (!fromLengthListSize || fromLengthListSize != toLengthList.size())
</span><span class="lines">@@ -83,7 +83,7 @@
</span><span class="cx"> static SVGLengthList parseLengthListFromString(SVGAnimationElement* animationElement, const String&amp; string)
</span><span class="cx"> {
</span><span class="cx">     SVGLengthList lengthList;
</span><del>-    lengthList.parse(string, SVGLength::lengthModeForAnimatedLengthAttribute(animationElement-&gt;attributeName()));
</del><ins>+    lengthList.parse(string, SVGLengthValue::lengthModeForAnimatedLengthAttribute(animationElement-&gt;attributeName()));
</ins><span class="cx">     return lengthList;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -92,10 +92,10 @@
</span><span class="cx">     ASSERT(m_animationElement);
</span><span class="cx">     ASSERT(m_contextElement);
</span><span class="cx"> 
</span><del>-    SVGLengthList fromLengthList = m_animationElement-&gt;animationMode() == ToAnimation ? animated-&gt;lengthList() : from-&gt;lengthList();
-    SVGLengthList toLengthList = to-&gt;lengthList();
-    const SVGLengthList&amp; toAtEndOfDurationLengthList = toAtEndOfDuration-&gt;lengthList();
-    SVGLengthList&amp; animatedLengthList = animated-&gt;lengthList();
</del><ins>+    auto fromLengthList = m_animationElement-&gt;animationMode() == ToAnimation ? animated-&gt;lengthList() : from-&gt;lengthList();
+    auto toLengthList = to-&gt;lengthList();
+    const auto&amp; toAtEndOfDurationLengthList = toAtEndOfDuration-&gt;lengthList();
+    auto&amp; animatedLengthList = animated-&gt;lengthList();
</ins><span class="cx"> 
</span><span class="cx">     // Apply CSS inheritance rules.
</span><span class="cx">     m_animationElement-&gt;adjustForInheritance&lt;SVGLengthList&gt;(parseLengthListFromString, m_animationElement-&gt;fromPropertyValueType(), fromLengthList, m_contextElement);
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedLengthListh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedLengthList.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedLengthList.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGAnimatedLengthList.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -21,7 +21,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;SVGAnimatedListPropertyTearOff.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedTypeAnimator.h&quot;
</span><del>-#include &quot;SVGLengthList.h&quot;
</del><ins>+#include &quot;SVGLength.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedNumberListh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedNumberList.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedNumberList.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGAnimatedNumberList.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -21,11 +21,12 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;SVGAnimatedListPropertyTearOff.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedTypeAnimator.h&quot;
</span><ins>+#include &quot;SVGNumber.h&quot;
</ins><span class="cx"> #include &quot;SVGNumberList.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-typedef SVGAnimatedListPropertyTearOff&lt;SVGNumberList&gt; SVGAnimatedNumberList;
</del><ins>+using SVGAnimatedNumberList = SVGAnimatedListPropertyTearOff&lt;SVGNumberList&gt;;
</ins><span class="cx"> 
</span><span class="cx"> // Helper macros to declare/define a SVGAnimatedNumberList object
</span><span class="cx"> #define DECLARE_ANIMATED_NUMBER_LIST(UpperProperty, LowerProperty) \
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedPointListcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedPointList.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedPointList.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGAnimatedPointList.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -22,6 +22,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;SVGAnimateElementBase.h&quot;
</span><span class="cx"> #include &quot;SVGParserUtilities.h&quot;
</span><ins>+#include &quot;SVGPoint.h&quot;
</ins><span class="cx"> #include &quot;SVGPointList.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedRecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedRect.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedRect.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGAnimatedRect.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -26,10 +26,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-template&lt;typename T&gt; 
-class SVGPropertyTearOff;
</del><ins>+class SVGRect;
</ins><span class="cx"> 
</span><del>-using SVGAnimatedRect = SVGAnimatedPropertyTearOff&lt;SVGPropertyTearOff&lt;FloatRect&gt;&gt;;
</del><ins>+using SVGAnimatedRect = SVGAnimatedPropertyTearOff&lt;SVGRect&gt;;
</ins><span class="cx"> 
</span><span class="cx"> // Helper macros to declare/define a SVGAnimatedRect object
</span><span class="cx"> #define DECLARE_ANIMATED_RECT(UpperProperty, LowerProperty) \
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedTransformListcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedTransformList.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedTransformList.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGAnimatedTransformList.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -33,7 +33,7 @@
</span><span class="cx"> 
</span><span class="cx"> SVGAnimatedTransformListAnimator::SVGAnimatedTransformListAnimator(SVGAnimationElement* animationElement, SVGElement* contextElement)
</span><span class="cx">     : SVGAnimatedTypeAnimator(AnimatedTransformList, animationElement, contextElement)
</span><del>-    , m_transformTypeString(SVGTransform::transformTypePrefixForParsing(downcast&lt;SVGAnimateTransformElement&gt;(animationElement)-&gt;transformType()))
</del><ins>+    , m_transformTypeString(SVGTransformValue::transformTypePrefixForParsing(downcast&lt;SVGAnimateTransformElement&gt;(animationElement)-&gt;transformType()))
</ins><span class="cx"> {
</span><span class="cx">     // Only &lt;animateTransform&gt; uses this animator, as &lt;animate&gt; doesn't allow to animate transform lists directly.
</span><span class="cx">     ASSERT(animationElement-&gt;hasTagName(SVGNames::animateTransformTag));
</span><span class="lines">@@ -77,15 +77,15 @@
</span><span class="cx">     ASSERT(from-&gt;type() == AnimatedTransformList);
</span><span class="cx">     ASSERT(from-&gt;type() == to-&gt;type());
</span><span class="cx"> 
</span><del>-    const SVGTransformList&amp; fromTransformList = from-&gt;transformList();
-    SVGTransformList&amp; toTransformList = to-&gt;transformList();
-    unsigned fromTransformListSize = fromTransformList.size();
</del><ins>+    const auto&amp; fromTransformList = from-&gt;transformList();
+    auto&amp; toTransformList = to-&gt;transformList();
+    auto fromTransformListSize = fromTransformList.size();
</ins><span class="cx">     if (!fromTransformListSize || fromTransformListSize != toTransformList.size())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     ASSERT(fromTransformListSize == 1);
</span><del>-    const SVGTransform&amp; fromTransform = fromTransformList[0];
-    SVGTransform&amp; toTransform = toTransformList[0];
</del><ins>+    const auto&amp; fromTransform = fromTransformList[0];
+    auto&amp; toTransform = toTransformList[0];
</ins><span class="cx"> 
</span><span class="cx">     ASSERT(fromTransform.type() == toTransform.type());
</span><span class="cx">     toTransform = SVGTransformDistance::addSVGTransforms(fromTransform, toTransform);
</span><span class="lines">@@ -98,10 +98,10 @@
</span><span class="cx">     // Spec: To animations provide specific functionality to get a smooth change from the underlying value to the
</span><span class="cx">     // â€˜to’ attribute value, which conflicts mathematically with the requirement for additive transform animations
</span><span class="cx">     // to be post-multiplied. As a consequence, in SVG 1.1 the behavior of to animations for â€˜animateTransform’ is undefined.
</span><del>-    const SVGTransformList&amp; fromTransformList = from-&gt;transformList();
-    const SVGTransformList&amp; toTransformList = to-&gt;transformList();
-    const SVGTransformList&amp; toAtEndOfDurationTransformList = toAtEndOfDuration-&gt;transformList();
-    SVGTransformList&amp; animatedTransformList = animated-&gt;transformList();
</del><ins>+    const auto&amp; fromTransformList = from-&gt;transformList();
+    const auto&amp; toTransformList = to-&gt;transformList();
+    const auto&amp; toAtEndOfDurationTransformList = toAtEndOfDuration-&gt;transformList();
+    auto&amp; animatedTransformList = animated-&gt;transformList();
</ins><span class="cx"> 
</span><span class="cx">     // Pass false to 'resizeAnimatedListIfNeeded' here, as the special post-multiplication behavior of &lt;animateTransform&gt; needs to be respected below.
</span><span class="cx">     if (!m_animationElement-&gt;adjustFromToListValues&lt;SVGTransformList&gt;(fromTransformList, toTransformList, animatedTransformList, percentage, false))
</span><span class="lines">@@ -111,12 +111,12 @@
</span><span class="cx">     if (!animatedTransformList.isEmpty() &amp;&amp; (!m_animationElement-&gt;isAdditive() || m_animationElement-&gt;animationMode() == ToAnimation))
</span><span class="cx">         animatedTransformList.clear();
</span><span class="cx"> 
</span><del>-    unsigned fromTransformListSize = fromTransformList.size();
-    const SVGTransform&amp; toTransform = toTransformList[0];
-    const SVGTransform effectiveFrom = fromTransformListSize ? fromTransformList[0] : SVGTransform(toTransform.type(), SVGTransform::ConstructZeroTransform);
-    SVGTransform currentTransform = SVGTransformDistance(effectiveFrom, toTransform).scaledDistance(percentage).addToSVGTransform(effectiveFrom);
</del><ins>+    auto fromTransformListSize = fromTransformList.size();
+    const auto&amp; toTransform = toTransformList[0];
+    const auto effectiveFrom = fromTransformListSize ? fromTransformList[0] : SVGTransformValue(toTransform.type(), SVGTransformValue::ConstructZeroTransform);
+    auto currentTransform = SVGTransformDistance(effectiveFrom, toTransform).scaledDistance(percentage).addToSVGTransform(effectiveFrom);
</ins><span class="cx">     if (m_animationElement-&gt;isAccumulated() &amp;&amp; repeatCount) {
</span><del>-        const SVGTransform effectiveToAtEnd = toAtEndOfDurationTransformList.size() ? toAtEndOfDurationTransformList[0] : SVGTransform(toTransform.type(), SVGTransform::ConstructZeroTransform);
</del><ins>+        const auto effectiveToAtEnd = toAtEndOfDurationTransformList.size() ? toAtEndOfDurationTransformList[0] : SVGTransformValue(toTransform.type(), SVGTransformValue::ConstructZeroTransform);
</ins><span class="cx">         animatedTransformList.append(SVGTransformDistance::addSVGTransforms(currentTransform, effectiveToAtEnd, repeatCount));
</span><span class="cx">     } else
</span><span class="cx">         animatedTransformList.append(currentTransform);
</span><span class="lines">@@ -128,11 +128,11 @@
</span><span class="cx"> 
</span><span class="cx">     // FIXME: This is not correct in all cases. The spec demands that each component (translate x and y for example)
</span><span class="cx">     // is paced separately. To implement this we need to treat each component as individual animation everywhere.
</span><del>-    std::unique_ptr&lt;SVGAnimatedType&gt; from = constructFromString(fromString);
-    std::unique_ptr&lt;SVGAnimatedType&gt; to = constructFromString(toString);
</del><ins>+    auto from = constructFromString(fromString);
+    auto to = constructFromString(toString);
</ins><span class="cx"> 
</span><del>-    SVGTransformList&amp; fromTransformList = from-&gt;transformList();
-    SVGTransformList&amp; toTransformList = to-&gt;transformList();
</del><ins>+    auto&amp; fromTransformList = from-&gt;transformList();
+    auto&amp; toTransformList = to-&gt;transformList();
</ins><span class="cx">     unsigned itemsCount = fromTransformList.size();
</span><span class="cx">     if (!itemsCount || itemsCount != toTransformList.size())
</span><span class="cx">         return -1;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedTypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedType.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedType.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGAnimatedType.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -138,7 +138,7 @@
</span><span class="cx">     return animatedType;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-std::unique_ptr&lt;SVGAnimatedType&gt; SVGAnimatedType::createLength(std::unique_ptr&lt;SVGLength&gt; length)
</del><ins>+std::unique_ptr&lt;SVGAnimatedType&gt; SVGAnimatedType::createLength(std::unique_ptr&lt;SVGLengthValue&gt; length)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(length);
</span><span class="cx">     auto animatedType = std::make_unique&lt;SVGAnimatedType&gt;(AnimatedLength);
</span><span class="lines">@@ -279,10 +279,10 @@
</span><span class="cx">         return true;
</span><span class="cx">     case AnimatedLength:
</span><span class="cx">         ASSERT(m_data.length);
</span><del>-        return !m_data.length-&gt;setValueAsString(value, SVGLength::lengthModeForAnimatedLengthAttribute(attrName)).hasException();
</del><ins>+        return !m_data.length-&gt;setValueAsString(value, SVGLengthValue::lengthModeForAnimatedLengthAttribute(attrName)).hasException();
</ins><span class="cx">     case AnimatedLengthList:
</span><span class="cx">         ASSERT(m_data.lengthList);
</span><del>-        m_data.lengthList-&gt;parse(value, SVGLength::lengthModeForAnimatedLengthAttribute(attrName));
</del><ins>+        m_data.lengthList-&gt;parse(value, SVGLengthValue::lengthModeForAnimatedLengthAttribute(attrName));
</ins><span class="cx">         return true;
</span><span class="cx">     case AnimatedNumber:
</span><span class="cx">         ASSERT(m_data.number);
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGAnimatedTypeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGAnimatedType.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGAnimatedType.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGAnimatedType.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -22,8 +22,8 @@
</span><span class="cx"> #include &quot;FloatRect.h&quot;
</span><span class="cx"> #include &quot;SVGAngleValue.h&quot;
</span><span class="cx"> #include &quot;SVGColor.h&quot;
</span><del>-#include &quot;SVGLength.h&quot;
</del><span class="cx"> #include &quot;SVGLengthList.h&quot;
</span><ins>+#include &quot;SVGLengthValue.h&quot;
</ins><span class="cx"> #include &quot;SVGNumberList.h&quot;
</span><span class="cx"> #include &quot;SVGPointList.h&quot;
</span><span class="cx"> #include &quot;SVGPreserveAspectRatioValue.h&quot;
</span><span class="lines">@@ -46,7 +46,7 @@
</span><span class="cx">     static std::unique_ptr&lt;SVGAnimatedType&gt; createEnumeration(std::unique_ptr&lt;unsigned&gt;);
</span><span class="cx">     static std::unique_ptr&lt;SVGAnimatedType&gt; createInteger(std::unique_ptr&lt;int&gt;);
</span><span class="cx">     static std::unique_ptr&lt;SVGAnimatedType&gt; createIntegerOptionalInteger(std::unique_ptr&lt;std::pair&lt;int, int&gt;&gt;);
</span><del>-    static std::unique_ptr&lt;SVGAnimatedType&gt; createLength(std::unique_ptr&lt;SVGLength&gt;);
</del><ins>+    static std::unique_ptr&lt;SVGAnimatedType&gt; createLength(std::unique_ptr&lt;SVGLengthValue&gt;);
</ins><span class="cx">     static std::unique_ptr&lt;SVGAnimatedType&gt; createLengthList(std::unique_ptr&lt;SVGLengthList&gt;);
</span><span class="cx">     static std::unique_ptr&lt;SVGAnimatedType&gt; createNumber(std::unique_ptr&lt;float&gt;);
</span><span class="cx">     static std::unique_ptr&lt;SVGAnimatedType&gt; createNumberList(std::unique_ptr&lt;SVGNumberList&gt;);
</span><span class="lines">@@ -98,7 +98,7 @@
</span><span class="cx">         return *m_data.integerOptionalInteger;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    const SVGLength&amp; length() const
</del><ins>+    const SVGLengthValue&amp; length() const
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(m_type == AnimatedLength);
</span><span class="cx">         return *m_data.length;
</span><span class="lines">@@ -201,7 +201,7 @@
</span><span class="cx">         return *m_data.integerOptionalInteger;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    SVGLength&amp; length()
</del><ins>+    SVGLengthValue&amp; length()
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(m_type == AnimatedLength);
</span><span class="cx">         return *m_data.length;
</span><span class="lines">@@ -285,7 +285,7 @@
</span><span class="cx">         unsigned* enumeration;
</span><span class="cx">         int* integer;
</span><span class="cx">         std::pair&lt;int, int&gt;* integerOptionalInteger;
</span><del>-        SVGLength* length;
</del><ins>+        SVGLengthValue* length;
</ins><span class="cx">         SVGLengthList* lengthList;
</span><span class="cx">         float* number;
</span><span class="cx">         SVGNumberList* numberList;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGCircleElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGCircleElement.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGCircleElement.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGCircleElement.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -26,7 +26,7 @@
</span><span class="cx"> #include &quot;RenderSVGPath.h&quot;
</span><span class="cx"> #include &quot;RenderSVGResource.h&quot;
</span><span class="cx"> #include &quot;SVGException.h&quot;
</span><del>-#include &quot;SVGLength.h&quot;
</del><ins>+#include &quot;SVGLengthValue.h&quot;
</ins><span class="cx"> #include &quot;SVGNames.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -65,11 +65,11 @@
</span><span class="cx">     SVGParsingError parseError = NoError;
</span><span class="cx"> 
</span><span class="cx">     if (name == SVGNames::cxAttr)
</span><del>-        setCxBaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setCxBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::cyAttr)
</span><del>-        setCyBaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setCyBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::rAttr)
</span><del>-        setRBaseValue(SVGLength::construct(LengthModeOther, value, parseError, ForbidNegativeLengths));
</del><ins>+        setRBaseValue(SVGLengthValue::construct(LengthModeOther, value, parseError, ForbidNegativeLengths));
</ins><span class="cx"> 
</span><span class="cx">     reportAttributeParsingError(parseError, name, value);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGCursorElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGCursorElement.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGCursorElement.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGCursorElement.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -81,9 +81,9 @@
</span><span class="cx">     SVGParsingError parseError = NoError;
</span><span class="cx"> 
</span><span class="cx">     if (name == SVGNames::xAttr)
</span><del>-        setXBaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setXBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::yAttr)
</span><del>-        setYBaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setYBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx"> 
</span><span class="cx">     reportAttributeParsingError(parseError, name, value);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGDocumentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGDocument.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGDocument.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGDocument.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -53,7 +53,7 @@
</span><span class="cx">     auto* element = rootElement(*this);
</span><span class="cx">     if (!element)
</span><span class="cx">         return;
</span><del>-    m_panningOffset = start - element-&gt;currentTranslate();
</del><ins>+    m_panningOffset = start - element-&gt;currentTranslateValue();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SVGDocument::updatePan(const FloatPoint&amp; position) const
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGEllipseElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGEllipseElement.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGEllipseElement.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGEllipseElement.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -25,7 +25,7 @@
</span><span class="cx"> #include &quot;RenderSVGEllipse.h&quot;
</span><span class="cx"> #include &quot;RenderSVGPath.h&quot;
</span><span class="cx"> #include &quot;RenderSVGResource.h&quot;
</span><del>-#include &quot;SVGLength.h&quot;
</del><ins>+#include &quot;SVGLengthValue.h&quot;
</ins><span class="cx"> #include &quot;SVGNames.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -67,13 +67,13 @@
</span><span class="cx">     SVGParsingError parseError = NoError;
</span><span class="cx"> 
</span><span class="cx">     if (name == SVGNames::cxAttr)
</span><del>-        setCxBaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setCxBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::cyAttr)
</span><del>-        setCyBaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setCyBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::rxAttr)
</span><del>-        setRxBaseValue(SVGLength::construct(LengthModeWidth, value, parseError, ForbidNegativeLengths));
</del><ins>+        setRxBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError, ForbidNegativeLengths));
</ins><span class="cx">     else if (name == SVGNames::ryAttr)
</span><del>-        setRyBaseValue(SVGLength::construct(LengthModeHeight, value, parseError, ForbidNegativeLengths));
</del><ins>+        setRyBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError, ForbidNegativeLengths));
</ins><span class="cx"> 
</span><span class="cx">     reportAttributeParsingError(parseError, name, value);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFilterElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFilterElement.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFilterElement.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGFilterElement.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -132,13 +132,13 @@
</span><span class="cx">         if (propertyValue &gt; 0)
</span><span class="cx">             setPrimitiveUnitsBaseValue(propertyValue);
</span><span class="cx">     } else if (name == SVGNames::xAttr)
</span><del>-        setXBaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setXBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::yAttr)
</span><del>-        setYBaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setYBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::widthAttr)
</span><del>-        setWidthBaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setWidthBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::heightAttr)
</span><del>-        setHeightBaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setHeightBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::filterResAttr) {
</span><span class="cx">         float x, y;
</span><span class="cx">         if (parseNumberOptionalNumber(value, x, y)) {
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFilterPrimitiveStandardAttributescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -26,7 +26,7 @@
</span><span class="cx"> #include &quot;RenderSVGResourceFilterPrimitive.h&quot;
</span><span class="cx"> #include &quot;SVGElement.h&quot;
</span><span class="cx"> #include &quot;SVGFilterBuilder.h&quot;
</span><del>-#include &quot;SVGLength.h&quot;
</del><ins>+#include &quot;SVGLengthValue.h&quot;
</ins><span class="cx"> #include &quot;SVGNames.h&quot;
</span><span class="cx"> #include &quot;SVGUnitTypes.h&quot;
</span><span class="cx"> #include &lt;wtf/NeverDestroyed.h&gt;
</span><span class="lines">@@ -79,13 +79,13 @@
</span><span class="cx">     SVGParsingError parseError = NoError;
</span><span class="cx"> 
</span><span class="cx">     if (name == SVGNames::xAttr)
</span><del>-        setXBaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setXBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::yAttr)
</span><del>-        setYBaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setYBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::widthAttr)
</span><del>-        setWidthBaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setWidthBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::heightAttr)
</span><del>-        setHeightBaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setHeightBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::resultAttr)
</span><span class="cx">         setResultBaseValue(value);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGForeignObjectElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGForeignObjectElement.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGForeignObjectElement.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGForeignObjectElement.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -25,7 +25,7 @@
</span><span class="cx"> #include &quot;CSSPropertyNames.h&quot;
</span><span class="cx"> #include &quot;RenderSVGForeignObject.h&quot;
</span><span class="cx"> #include &quot;RenderSVGResource.h&quot;
</span><del>-#include &quot;SVGLength.h&quot;
</del><ins>+#include &quot;SVGLengthValue.h&quot;
</ins><span class="cx"> #include &quot;SVGNames.h&quot;
</span><span class="cx"> #include &quot;XLinkNames.h&quot;
</span><span class="cx"> #include &lt;wtf/Assertions.h&gt;
</span><span class="lines">@@ -86,13 +86,13 @@
</span><span class="cx">     SVGParsingError parseError = NoError;
</span><span class="cx"> 
</span><span class="cx">     if (name == SVGNames::xAttr)
</span><del>-        setXBaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setXBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::yAttr)
</span><del>-        setYBaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setYBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::widthAttr)
</span><del>-        setWidthBaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setWidthBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::heightAttr)
</span><del>-        setHeightBaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setHeightBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx"> 
</span><span class="cx">     reportAttributeParsingError(parseError, name, value);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGGraphicsElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGGraphicsElement.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGGraphicsElement.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGGraphicsElement.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -21,11 +21,12 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;SVGGraphicsElement.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;AffineTransform.h&quot;
</del><span class="cx"> #include &quot;RenderSVGPath.h&quot;
</span><span class="cx"> #include &quot;RenderSVGResource.h&quot;
</span><ins>+#include &quot;SVGMatrix.h&quot;
</ins><span class="cx"> #include &quot;SVGNames.h&quot;
</span><span class="cx"> #include &quot;SVGPathData.h&quot;
</span><ins>+#include &quot;SVGRect.h&quot;
</ins><span class="cx"> #include &lt;wtf/NeverDestroyed.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -50,11 +51,21 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+Ref&lt;SVGMatrix&gt; SVGGraphicsElement::getCTMForBindings()
+{
+    return SVGMatrix::create(getCTM());
+}
+
</ins><span class="cx"> AffineTransform SVGGraphicsElement::getCTM(StyleUpdateStrategy styleUpdateStrategy)
</span><span class="cx"> {
</span><span class="cx">     return SVGLocatable::computeCTM(this, SVGLocatable::NearestViewportScope, styleUpdateStrategy);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+Ref&lt;SVGMatrix&gt; SVGGraphicsElement::getScreenCTMForBindings()
+{
+    return SVGMatrix::create(getScreenCTM());
+}
+
</ins><span class="cx"> AffineTransform SVGGraphicsElement::getScreenCTM(StyleUpdateStrategy styleUpdateStrategy)
</span><span class="cx"> {
</span><span class="cx">     return SVGLocatable::computeCTM(this, SVGLocatable::ScreenScope, styleUpdateStrategy);
</span><span class="lines">@@ -156,6 +167,11 @@
</span><span class="cx">     return SVGTransformable::farthestViewportElement(this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+Ref&lt;SVGRect&gt; SVGGraphicsElement::getBBoxForBindings()
+{
+    return SVGRect::create(getBBox());
+}
+
</ins><span class="cx"> FloatRect SVGGraphicsElement::getBBox(StyleUpdateStrategy styleUpdateStrategy)
</span><span class="cx"> {
</span><span class="cx">     return SVGTransformable::getBBox(this, styleUpdateStrategy);
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGGraphicsElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGGraphicsElement.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGGraphicsElement.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGGraphicsElement.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -29,13 +29,19 @@
</span><span class="cx"> 
</span><span class="cx"> class AffineTransform;
</span><span class="cx"> class Path;
</span><ins>+class SVGRect;
+class SVGMatrix;
</ins><span class="cx"> 
</span><span class="cx"> class SVGGraphicsElement : public SVGElement, public SVGTransformable, public SVGTests {
</span><span class="cx"> public:
</span><span class="cx">     virtual ~SVGGraphicsElement();
</span><span class="cx"> 
</span><ins>+    Ref&lt;SVGMatrix&gt; getCTMForBindings();
</ins><span class="cx">     AffineTransform getCTM(StyleUpdateStrategy = AllowStyleUpdate) override;
</span><ins>+
+    Ref&lt;SVGMatrix&gt; getScreenCTMForBindings();
</ins><span class="cx">     AffineTransform getScreenCTM(StyleUpdateStrategy = AllowStyleUpdate) override;
</span><ins>+
</ins><span class="cx">     SVGElement* nearestViewportElement() const override;
</span><span class="cx">     SVGElement* farthestViewportElement() const override;
</span><span class="cx"> 
</span><span class="lines">@@ -43,6 +49,7 @@
</span><span class="cx">     AffineTransform animatedLocalTransform() const override;
</span><span class="cx">     AffineTransform* supplementalTransform() override;
</span><span class="cx"> 
</span><ins>+    Ref&lt;SVGRect&gt; getBBoxForBindings();
</ins><span class="cx">     FloatRect getBBox(StyleUpdateStrategy = AllowStyleUpdate) override;
</span><span class="cx"> 
</span><span class="cx">     bool shouldIsolateBlending() const { return m_shouldIsolateBlending; }
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGGraphicsElementidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGGraphicsElement.idl (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGGraphicsElement.idl        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGGraphicsElement.idl        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -29,10 +29,10 @@
</span><span class="cx">     readonly attribute SVGElement nearestViewportElement;
</span><span class="cx">     readonly attribute SVGElement farthestViewportElement;
</span><span class="cx"> 
</span><del>-    SVGRect getBBox();
-    SVGMatrix getCTM();
-    SVGMatrix getScreenCTM();
-    [MayThrowException] SVGMatrix getTransformToElement(optional SVGElement? element = null);
</del><ins>+    [ImplementedAs=getBBoxForBindings, NewObject] SVGRect getBBox();
+    [ImplementedAs=getCTMForBindings, NewObject] SVGMatrix getCTM();
+    [ImplementedAs=getScreenCTMForBindings, NewObject] SVGMatrix getScreenCTM();
+    [MayThrowException, NewObject] SVGMatrix getTransformToElement(optional SVGElement? element = null);
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> SVGGraphicsElement implements SVGTests;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGImageElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGImageElement.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGImageElement.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGImageElement.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -106,13 +106,13 @@
</span><span class="cx">     SVGParsingError parseError = NoError;
</span><span class="cx"> 
</span><span class="cx">     if (name == SVGNames::xAttr)
</span><del>-        setXBaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setXBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::yAttr)
</span><del>-        setYBaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setYBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::widthAttr)
</span><del>-        setWidthBaseValue(SVGLength::construct(LengthModeWidth, value, parseError, ForbidNegativeLengths));
</del><ins>+        setWidthBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError, ForbidNegativeLengths));
</ins><span class="cx">     else if (name == SVGNames::heightAttr)
</span><del>-        setHeightBaseValue(SVGLength::construct(LengthModeHeight, value, parseError, ForbidNegativeLengths));
</del><ins>+        setHeightBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError, ForbidNegativeLengths));
</ins><span class="cx"> 
</span><span class="cx">     reportAttributeParsingError(parseError, name, value);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGLengthcpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/svg/SVGLength.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGLength.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGLength.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -1,411 +0,0 @@
</span><del>-/*
- * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann &lt;zimmermann@kde.org&gt;
- * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis &lt;buis@kde.org&gt;
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include &quot;config.h&quot;
-#include &quot;SVGLength.h&quot;
-
-#include &quot;CSSHelper.h&quot;
-#include &quot;CSSPrimitiveValue.h&quot;
-#include &quot;ExceptionCode.h&quot;
-#include &quot;FloatConversion.h&quot;
-#include &quot;SVGNames.h&quot;
-#include &quot;SVGParserUtilities.h&quot;
-#include &quot;TextStream.h&quot;
-#include &lt;wtf/MathExtras.h&gt;
-#include &lt;wtf/NeverDestroyed.h&gt;
-#include &lt;wtf/text/StringView.h&gt;
-
-namespace WebCore {
-
-// Helper functions
-static inline unsigned int storeUnit(SVGLengthMode mode, SVGLengthType type)
-{
-    return (mode &lt;&lt; 4) | type;
-}
-
-static inline SVGLengthMode extractMode(unsigned int unit)
-{
-    unsigned int mode = unit &gt;&gt; 4;    
-    return static_cast&lt;SVGLengthMode&gt;(mode);
-}
-
-static inline SVGLengthType extractType(unsigned int unit)
-{
-    unsigned int mode = unit &gt;&gt; 4;
-    unsigned int type = unit ^ (mode &lt;&lt; 4);
-    return static_cast&lt;SVGLengthType&gt;(type);
-}
-
-static inline const char* lengthTypeToString(SVGLengthType type)
-{
-    switch (type) {
-    case LengthTypeUnknown:
-    case LengthTypeNumber:
-        return &quot;&quot;;    
-    case LengthTypePercentage:
-        return &quot;%&quot;;
-    case LengthTypeEMS:
-        return &quot;em&quot;;
-    case LengthTypeEXS:
-        return &quot;ex&quot;;
-    case LengthTypePX:
-        return &quot;px&quot;;
-    case LengthTypeCM:
-        return &quot;cm&quot;;
-    case LengthTypeMM:
-        return &quot;mm&quot;;
-    case LengthTypeIN:
-        return &quot;in&quot;;
-    case LengthTypePT:
-        return &quot;pt&quot;;
-    case LengthTypePC:
-        return &quot;pc&quot;;
-    }
-
-    ASSERT_NOT_REACHED();
-    return &quot;&quot;;
-}
-
-inline SVGLengthType parseLengthType(const UChar* ptr, const UChar* end)
-{
-    if (ptr == end)
-        return LengthTypeNumber;
-
-    const UChar firstChar = *ptr;
-
-    if (++ptr == end)
-        return firstChar == '%' ? LengthTypePercentage : LengthTypeUnknown;
-
-    const UChar secondChar = *ptr;
-
-    if (++ptr != end)
-        return LengthTypeUnknown;
-
-    if (firstChar == 'e' &amp;&amp; secondChar == 'm')
-        return LengthTypeEMS;
-    if (firstChar == 'e' &amp;&amp; secondChar == 'x')
-        return LengthTypeEXS;
-    if (firstChar == 'p' &amp;&amp; secondChar == 'x')
-        return LengthTypePX;
-    if (firstChar == 'c' &amp;&amp; secondChar == 'm')
-        return LengthTypeCM;
-    if (firstChar == 'm' &amp;&amp; secondChar == 'm')
-        return LengthTypeMM;
-    if (firstChar == 'i' &amp;&amp; secondChar == 'n')
-        return LengthTypeIN;
-    if (firstChar == 'p' &amp;&amp; secondChar == 't')
-        return LengthTypePT;
-    if (firstChar == 'p' &amp;&amp; secondChar == 'c')
-        return LengthTypePC;
-
-    return LengthTypeUnknown;
-}
-
-SVGLength::SVGLength(SVGLengthMode mode, const String&amp; valueAsString)
-    : m_valueInSpecifiedUnits(0)
-    , m_unit(storeUnit(mode, LengthTypeNumber))
-{
-    setValueAsString(valueAsString);
-}
-
-SVGLength::SVGLength(const SVGLengthContext&amp; context, float value, SVGLengthMode mode, SVGLengthType unitType)
-    : m_valueInSpecifiedUnits(0)
-    , m_unit(storeUnit(mode, unitType))
-{
-    setValue(value, context);
-}
-
-ExceptionOr&lt;void&gt; SVGLength::setValueAsString(const String&amp; valueAsString, SVGLengthMode mode)
-{
-    m_valueInSpecifiedUnits = 0;
-    m_unit = storeUnit(mode, LengthTypeNumber);
-    return setValueAsString(valueAsString);
-}
-
-bool SVGLength::operator==(const SVGLength&amp; other) const
-{
-    return m_unit == other.m_unit
-        &amp;&amp; m_valueInSpecifiedUnits == other.m_valueInSpecifiedUnits;
-}
-
-bool SVGLength::operator!=(const SVGLength&amp; other) const
-{
-    return !operator==(other);
-}
-
-SVGLength SVGLength::construct(SVGLengthMode mode, const String&amp; valueAsString, SVGParsingError&amp; parseError, SVGLengthNegativeValuesMode negativeValuesMode)
-{
-    SVGLength length(mode);
-
-    if (length.setValueAsString(valueAsString).hasException())
-        parseError = ParsingAttributeFailedError;
-    else if (negativeValuesMode == ForbidNegativeLengths &amp;&amp; length.valueInSpecifiedUnits() &lt; 0)
-        parseError = NegativeValueForbiddenError;
-
-    return length;
-}
-
-SVGLengthType SVGLength::unitType() const
-{
-    return extractType(m_unit);
-}
-
-SVGLengthMode SVGLength::unitMode() const
-{
-    return extractMode(m_unit);
-}
-
-float SVGLength::value(const SVGLengthContext&amp; context) const
-{
-    auto result = valueForBindings(context);
-    if (result.hasException())
-        return 0;
-    return result.releaseReturnValue();
-}
-
-ExceptionOr&lt;float&gt; SVGLength::valueForBindings(const SVGLengthContext&amp; context) const
-{
-    return context.convertValueToUserUnits(m_valueInSpecifiedUnits, extractMode(m_unit), extractType(m_unit));
-}
-
-ExceptionOr&lt;void&gt; SVGLength::setValue(const SVGLengthContext&amp; context, float value, SVGLengthMode mode, SVGLengthType unitType)
-{
-    // FIXME: Seems like a bug that we change the value of m_unit even if setValue throws an exception.
-    m_unit = storeUnit(mode, unitType);
-    return setValue(value, context);
-}
-
-ExceptionOr&lt;void&gt; SVGLength::setValue(float value, const SVGLengthContext&amp; context)
-{
-    // 100% = 100.0 instead of 1.0 for historical reasons, this could eventually be changed
-    if (extractType(m_unit) == LengthTypePercentage)
-        value = value / 100;
-
-    auto convertedValue = context.convertValueFromUserUnits(value, extractMode(m_unit), extractType(m_unit));
-    if (convertedValue.hasException())
-        return convertedValue.releaseException();
-    m_valueInSpecifiedUnits = convertedValue.releaseReturnValue();
-    return { };
-}
-float SVGLength::valueAsPercentage() const
-{
-    // 100% = 100.0 instead of 1.0 for historical reasons, this could eventually be changed
-    if (extractType(m_unit) == LengthTypePercentage)
-        return m_valueInSpecifiedUnits / 100;
-
-    return m_valueInSpecifiedUnits;
-}
-
-ExceptionOr&lt;void&gt; SVGLength::setValueAsString(const String&amp; string)
-{
-    if (string.isEmpty())
-        return { };
-
-    float convertedNumber = 0;
-    auto upconvertedCharacters = StringView(string).upconvertedCharacters();
-    const UChar* ptr = upconvertedCharacters;
-    const UChar* end = ptr + string.length();
-
-    if (!parseNumber(ptr, end, convertedNumber, false))
-        return Exception { SYNTAX_ERR };
-
-    auto type = parseLengthType(ptr, end);
-    if (type == LengthTypeUnknown)
-        return Exception { SYNTAX_ERR };
-
-    m_unit = storeUnit(extractMode(m_unit), type);
-    m_valueInSpecifiedUnits = convertedNumber;
-    return { };
-}
-
-String SVGLength::valueAsString() const
-{
-    return String::number(m_valueInSpecifiedUnits) + lengthTypeToString(extractType(m_unit));
-}
-
-ExceptionOr&lt;void&gt; SVGLength::newValueSpecifiedUnits(unsigned short type, float value)
-{
-    if (type == LengthTypeUnknown || type &gt; LengthTypePC)
-        return Exception { NOT_SUPPORTED_ERR };
-
-    m_unit = storeUnit(extractMode(m_unit), static_cast&lt;SVGLengthType&gt;(type));
-    m_valueInSpecifiedUnits = value;
-    return { };
-}
-
-ExceptionOr&lt;void&gt; SVGLength::convertToSpecifiedUnits(unsigned short type, const SVGLengthContext&amp; context)
-{
-    if (type == LengthTypeUnknown || type &gt; LengthTypePC)
-        return Exception { NOT_SUPPORTED_ERR };
-
-    auto valueInUserUnits = valueForBindings(context);
-    if (valueInUserUnits.hasException())
-        return valueInUserUnits.releaseException();
-
-    auto originalUnitAndType = m_unit;
-    m_unit = storeUnit(extractMode(m_unit), static_cast&lt;SVGLengthType&gt;(type));
-    auto result = setValue(valueInUserUnits.releaseReturnValue(), context);
-    if (result.hasException()) {
-        m_unit = originalUnitAndType;
-        return result.releaseException();
-    }
-
-    return { };
-}
-
-SVGLength SVGLength::fromCSSPrimitiveValue(const CSSPrimitiveValue&amp; value)
-{
-    SVGLengthType svgType;
-    switch (value.primitiveType()) {
-    case CSSPrimitiveValue::CSS_NUMBER:
-        svgType = LengthTypeNumber;
-        break;
-    case CSSPrimitiveValue::CSS_PERCENTAGE:
-        svgType = LengthTypePercentage;
-        break;
-    case CSSPrimitiveValue::CSS_EMS:
-        svgType = LengthTypeEMS;
-        break;
-    case CSSPrimitiveValue::CSS_EXS:
-        svgType = LengthTypeEXS;
-        break;
-    case CSSPrimitiveValue::CSS_PX:
-        svgType = LengthTypePX;
-        break;
-    case CSSPrimitiveValue::CSS_CM:
-        svgType = LengthTypeCM;
-        break;
-    case CSSPrimitiveValue::CSS_MM:
-        svgType = LengthTypeMM;
-        break;
-    case CSSPrimitiveValue::CSS_IN:
-        svgType = LengthTypeIN;
-        break;
-    case CSSPrimitiveValue::CSS_PT:
-        svgType = LengthTypePT;
-        break;
-    case CSSPrimitiveValue::CSS_PC:
-        svgType = LengthTypePC;
-        break;
-    case CSSPrimitiveValue::CSS_UNKNOWN:
-    default:
-        svgType = LengthTypeUnknown;
-        break;
-    };
-
-    if (svgType == LengthTypeUnknown)
-        return SVGLength();
-
-    SVGLength length;
-    length.newValueSpecifiedUnits(svgType, value.floatValue());
-    return length;
-}
-
-Ref&lt;CSSPrimitiveValue&gt; SVGLength::toCSSPrimitiveValue(const SVGLength&amp; length)
-{
-    CSSPrimitiveValue::UnitTypes cssType = CSSPrimitiveValue::CSS_UNKNOWN;
-    switch (length.unitType()) {
-    case LengthTypeUnknown:
-        break;
-    case LengthTypeNumber:
-        cssType = CSSPrimitiveValue::CSS_NUMBER;
-        break;
-    case LengthTypePercentage:
-        cssType = CSSPrimitiveValue::CSS_PERCENTAGE;
-        break;
-    case LengthTypeEMS:
-        cssType = CSSPrimitiveValue::CSS_EMS;
-        break;
-    case LengthTypeEXS:
-        cssType = CSSPrimitiveValue::CSS_EXS;
-        break;
-    case LengthTypePX:
-        cssType = CSSPrimitiveValue::CSS_PX;
-        break;
-    case LengthTypeCM:
-        cssType = CSSPrimitiveValue::CSS_CM;
-        break;
-    case LengthTypeMM:
-        cssType = CSSPrimitiveValue::CSS_MM;
-        break;
-    case LengthTypeIN:
-        cssType = CSSPrimitiveValue::CSS_IN;
-        break;
-    case LengthTypePT:
-        cssType = CSSPrimitiveValue::CSS_PT;
-        break;
-    case LengthTypePC:
-        cssType = CSSPrimitiveValue::CSS_PC;
-        break;
-    };
-
-    return CSSPrimitiveValue::create(length.valueInSpecifiedUnits(), cssType);
-}
-
-SVGLengthMode SVGLength::lengthModeForAnimatedLengthAttribute(const QualifiedName&amp; attrName)
-{
-    using Map = HashMap&lt;QualifiedName, SVGLengthMode&gt;;
-    static NeverDestroyed&lt;Map&gt; map = [] {
-        struct Mode {
-            const QualifiedName&amp; name;
-            SVGLengthMode mode;
-        };
-        static const Mode modes[] = {
-            { SVGNames::xAttr, LengthModeWidth },
-            { SVGNames::yAttr, LengthModeHeight },
-            { SVGNames::cxAttr, LengthModeWidth },
-            { SVGNames::cyAttr, LengthModeHeight },
-            { SVGNames::dxAttr, LengthModeWidth },
-            { SVGNames::dyAttr, LengthModeHeight },
-            { SVGNames::fxAttr, LengthModeWidth },
-            { SVGNames::fyAttr, LengthModeHeight },
-            { SVGNames::widthAttr, LengthModeWidth },
-            { SVGNames::heightAttr, LengthModeHeight },
-            { SVGNames::x1Attr, LengthModeWidth },
-            { SVGNames::x2Attr, LengthModeWidth },
-            { SVGNames::y1Attr, LengthModeHeight },
-            { SVGNames::y2Attr, LengthModeHeight },
-            { SVGNames::refXAttr, LengthModeWidth },
-            { SVGNames::refYAttr, LengthModeHeight },
-            { SVGNames::markerWidthAttr, LengthModeWidth },
-            { SVGNames::markerHeightAttr, LengthModeHeight },
-            { SVGNames::textLengthAttr, LengthModeWidth },
-            { SVGNames::startOffsetAttr, LengthModeWidth },
-        };
-        Map map;
-        for (auto&amp; mode : modes)
-            map.add(mode.name, mode.mode);
-        return map;
-    }();
-    
-    auto result = map.get().find(attrName);
-    if (result == map.get().end())
-        return LengthModeOther;
-    return result-&gt;value;
-}
-
-TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const SVGLength&amp; length)
-{
-    ts &lt;&lt; length.valueAsString();
-    return ts;
-}
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCoresvgSVGLengthh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGLength.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGLength.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGLength.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -1,42 +1,37 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2004, 2005, 2006, 2008 Nikolas Zimmermann &lt;zimmermann@kde.org&gt;
- * Copyright (C) 2004, 2005, 2006 Rob Buis &lt;buis@kde.org&gt;
</del><ins>+ * Copyright (C) 2016 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><del>- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
</del><ins>+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
</ins><span class="cx">  *
</span><del>- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
</del><ins>+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><del>-#include &quot;AnimationUtilities.h&quot;
-#include &quot;SVGLengthContext.h&quot;
-#include &quot;SVGParsingError.h&quot;
-#include &quot;SVGPropertyTraits.h&quot;
</del><ins>+#include &quot;ExceptionCode.h&quot;
+#include &quot;SVGLengthValue.h&quot;
+#include &quot;SVGPropertyTearOff.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class CSSPrimitiveValue;
-class QualifiedName;
-
-enum SVGLengthNegativeValuesMode {
-    AllowNegativeLengths,
-    ForbidNegativeLengths
-};
-
-class SVGLength {
-    WTF_MAKE_FAST_ALLOCATED;
</del><ins>+class SVGLength : public SVGPropertyTearOff&lt;SVGLengthValue&gt; {
</ins><span class="cx"> public:
</span><span class="cx">     // Forward declare these enums in the w3c naming scheme, for IDL generation
</span><span class="cx">     enum {
</span><span class="lines">@@ -53,118 +48,127 @@
</span><span class="cx">         SVG_LENGTHTYPE_PC = LengthTypePC
</span><span class="cx">     };
</span><span class="cx"> 
</span><del>-    // FIXME: Once all SVGLength users use Length internally, we make this a wrapper for Length.
-    SVGLength(SVGLengthMode = LengthModeOther, const String&amp; valueAsString = String());
-    SVGLength(const SVGLengthContext&amp;, float, SVGLengthMode = LengthModeOther, SVGLengthType = LengthTypeNumber);
</del><ins>+    static Ref&lt;SVGLength&gt; create(SVGAnimatedProperty* animatedProperty, SVGPropertyRole role, SVGLengthValue&amp; value)
+    {
+        ASSERT(animatedProperty);
+        return adoptRef(*new SVGLength(animatedProperty, role, value));
+    }
</ins><span class="cx"> 
</span><del>-    SVGLengthType unitType() const;
-    SVGLengthMode unitMode() const;
</del><ins>+    static Ref&lt;SVGLength&gt; create(const SVGLengthValue&amp; initialValue = { })
+    {
+        return adoptRef(*new SVGLength(initialValue));
+    }
</ins><span class="cx"> 
</span><del>-    bool operator==(const SVGLength&amp;) const;
-    bool operator!=(const SVGLength&amp;) const;
</del><ins>+    static Ref&lt;SVGLength&gt; create(const SVGLengthValue* initialValue)
+    {
+        return adoptRef(*new SVGLength(initialValue));
+    }
</ins><span class="cx"> 
</span><del>-    static SVGLength construct(SVGLengthMode, const String&amp;, SVGParsingError&amp;, SVGLengthNegativeValuesMode = AllowNegativeLengths);
</del><ins>+    template&lt;typename T&gt; static ExceptionOr&lt;Ref&lt;SVGLength&gt;&gt; create(ExceptionOr&lt;T&gt;&amp;&amp; initialValue)
+    {
+        if (initialValue.hasException())
+            return initialValue.releaseException();
+        return create(initialValue.releaseReturnValue());
+    }
</ins><span class="cx"> 
</span><del>-    float value(const SVGLengthContext&amp;) const;
-    ExceptionOr&lt;float&gt; valueForBindings(const SVGLengthContext&amp;) const;
-    ExceptionOr&lt;void&gt; setValue(float, const SVGLengthContext&amp;);
-    ExceptionOr&lt;void&gt; setValue(const SVGLengthContext&amp;, float, SVGLengthMode, SVGLengthType);
</del><ins>+    unsigned short unitType()
+    {
+        return propertyReference().unitType();
+    }
</ins><span class="cx"> 
</span><del>-    float valueInSpecifiedUnits() const { return m_valueInSpecifiedUnits; }
-    void setValueInSpecifiedUnits(float value) { m_valueInSpecifiedUnits = value; }
</del><ins>+    ExceptionOr&lt;float&gt; valueForBindings()
+    {
+        return propertyReference().valueForBindings(SVGLengthContext { contextElement() });
+    }
</ins><span class="cx"> 
</span><del>-    float valueAsPercentage() const;
</del><ins>+    ExceptionOr&lt;void&gt; setValueForBindings(float value)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
</ins><span class="cx"> 
</span><del>-    String valueAsString() const;
-    ExceptionOr&lt;void&gt; setValueAsString(const String&amp;);
-    ExceptionOr&lt;void&gt; setValueAsString(const String&amp;, SVGLengthMode);
</del><ins>+        auto result = propertyReference().setValue(value, SVGLengthContext { contextElement() });
+        if (result.hasException())
+            return result;
+        
+        commitChange();
+        return result;
+    }
</ins><span class="cx">     
</span><del>-    ExceptionOr&lt;void&gt; newValueSpecifiedUnits(unsigned short, float valueInSpecifiedUnits);
-    ExceptionOr&lt;void&gt; convertToSpecifiedUnits(unsigned short, const SVGLengthContext&amp;);
-
-    // Helper functions
-    bool isRelative() const
</del><ins>+    float valueInSpecifiedUnits()
</ins><span class="cx">     {
</span><del>-        SVGLengthType type = unitType();
-        return type == LengthTypePercentage || type == LengthTypeEMS || type == LengthTypeEXS;
</del><ins>+        return propertyReference().valueInSpecifiedUnits();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    bool isZero() const 
</del><ins>+    ExceptionOr&lt;void&gt; setValueInSpecifiedUnits(float valueInSpecifiedUnits)
</ins><span class="cx">     {
</span><del>-        return !m_valueInSpecifiedUnits;
</del><ins>+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        propertyReference().setValueInSpecifiedUnits(valueInSpecifiedUnits);
+        commitChange();
+        
+        return { };
</ins><span class="cx">     }
</span><ins>+    
+    String valueAsString()
+    {
+        return propertyReference().valueAsString();
+    }
</ins><span class="cx"> 
</span><del>-    static SVGLength fromCSSPrimitiveValue(const CSSPrimitiveValue&amp;);
-    static Ref&lt;CSSPrimitiveValue&gt; toCSSPrimitiveValue(const SVGLength&amp;);
-    static SVGLengthMode lengthModeForAnimatedLengthAttribute(const QualifiedName&amp;);
-
-    SVGLength blend(const SVGLength&amp; from, float progress) const
</del><ins>+    ExceptionOr&lt;void&gt; setValueAsString(const String&amp; value)
</ins><span class="cx">     {
</span><del>-        SVGLengthType toType = unitType();
-        SVGLengthType fromType = from.unitType();
-        if ((from.isZero() &amp;&amp; isZero())
-            || fromType == LengthTypeUnknown
-            || toType == LengthTypeUnknown
-            || (!from.isZero() &amp;&amp; fromType != LengthTypePercentage &amp;&amp; toType == LengthTypePercentage)
-            || (!isZero() &amp;&amp; fromType == LengthTypePercentage &amp;&amp; toType != LengthTypePercentage)
-            || (!from.isZero() &amp;&amp; !isZero() &amp;&amp; (fromType == LengthTypeEMS || fromType == LengthTypeEXS) &amp;&amp; fromType != toType))
-            return *this;
</del><ins>+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
</ins><span class="cx"> 
</span><del>-        SVGLength length;
</del><ins>+        auto result = propertyReference().setValueAsString(value);
+        if (result.hasException())
+            return result;
+        
+        commitChange();
+        return result;
+    }
</ins><span class="cx"> 
</span><del>-        if (fromType == LengthTypePercentage || toType == LengthTypePercentage) {
-            float fromPercent = from.valueAsPercentage() * 100;
-            float toPercent = valueAsPercentage() * 100;
-            auto result = length.newValueSpecifiedUnits(LengthTypePercentage, WebCore::blend(fromPercent, toPercent, progress));
-            if (result.hasException())
-                return SVGLength();
-            return length;
-        }
</del><ins>+    ExceptionOr&lt;void&gt; newValueSpecifiedUnits(unsigned short unitType, float valueInSpecifiedUnits)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
</ins><span class="cx"> 
</span><del>-        if (fromType == toType || from.isZero() || isZero() || fromType == LengthTypeEMS || fromType == LengthTypeEXS) {
-            float fromValue = from.valueInSpecifiedUnits();
-            float toValue = valueInSpecifiedUnits();
-            if (isZero()) {
-                auto result = length.newValueSpecifiedUnits(fromType, WebCore::blend(fromValue, toValue, progress));
-                if (result.hasException())
-                    return SVGLength();
-            } else {
-                auto result = length.newValueSpecifiedUnits(toType, WebCore::blend(fromValue, toValue, progress));
-                if (result.hasException())
-                    return SVGLength();
-            }
-            return length;
-        }
</del><ins>+        auto result = propertyReference().newValueSpecifiedUnits(unitType, valueInSpecifiedUnits);
+        if (result.hasException())
+            return result;
+        
+        commitChange();
+        return result;
+    }
+    
+    ExceptionOr&lt;void&gt; convertToSpecifiedUnits(unsigned short unitType)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
</ins><span class="cx"> 
</span><del>-        ASSERT(!isRelative());
-        ASSERT(!from.isRelative());
-
-        SVGLengthContext nonRelativeLengthContext(nullptr);
-        auto fromValueInUserUnits = nonRelativeLengthContext.convertValueToUserUnits(from.valueInSpecifiedUnits(), from.unitMode(), fromType);
-        if (fromValueInUserUnits.hasException())
-            return SVGLength();
-
-        auto fromValue = nonRelativeLengthContext.convertValueFromUserUnits(fromValueInUserUnits.releaseReturnValue(), unitMode(), toType);
-        if (fromValue.hasException())
-            return SVGLength();
-
-        float toValue = valueInSpecifiedUnits();
-        auto result = length.newValueSpecifiedUnits(toType, WebCore::blend(fromValue.releaseReturnValue(), toValue, progress));
</del><ins>+        auto result = propertyReference().convertToSpecifiedUnits(unitType, SVGLengthContext { contextElement() });
</ins><span class="cx">         if (result.hasException())
</span><del>-            return SVGLength();
-        return length;
</del><ins>+            return result;
+        
+        commitChange();
+        return result;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    float m_valueInSpecifiedUnits;
-    unsigned m_unit;
-};
</del><ins>+    SVGLength(SVGAnimatedProperty* animatedProperty, SVGPropertyRole role, SVGLengthValue&amp; value)
+        : SVGPropertyTearOff&lt;SVGLengthValue&gt;(animatedProperty, role, value)
+    {
+    }
</ins><span class="cx"> 
</span><del>-template&lt;&gt; struct SVGPropertyTraits&lt;SVGLength&gt; {
-    static SVGLength initialValue() { return SVGLength(); }
-    static String toString(const SVGLength&amp; type) { return type.valueAsString(); }
</del><ins>+    explicit SVGLength(const SVGLengthValue&amp; initialValue)
+        : SVGPropertyTearOff&lt;SVGLengthValue&gt;(initialValue)
+    {
+    }
+
+    explicit SVGLength(const SVGLengthValue* initialValue)
+        : SVGPropertyTearOff&lt;SVGLengthValue&gt;(initialValue)
+    {
+    }
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-TextStream&amp; operator&lt;&lt;(TextStream&amp;, const SVGLength&amp;);
-
</del><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGLengthidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGLength.idl (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGLength.idl        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGLength.idl        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -35,11 +35,11 @@
</span><span class="cx">     const unsigned short SVG_LENGTHTYPE_PC = 10;
</span><span class="cx"> 
</span><span class="cx">     readonly attribute unsigned short unitType;
</span><del>-    [Custom, GetterMayThrowException, SetterMayThrowException] attribute unrestricted float value;
</del><ins>+    [GetterMayThrowException, SetterMayThrowException, ImplementedAs=valueForBindings] attribute unrestricted float value;
</ins><span class="cx"> 
</span><del>-    attribute unrestricted float valueInSpecifiedUnits;
</del><ins>+    [SetterMayThrowException] attribute unrestricted float valueInSpecifiedUnits;
</ins><span class="cx">     [SetterMayThrowException] attribute DOMString valueAsString;
</span><span class="cx"> 
</span><span class="cx">     [MayThrowException] void newValueSpecifiedUnits(unsigned short unitType, unrestricted float valueInSpecifiedUnits);
</span><del>-    [Custom, MayThrowException] void convertToSpecifiedUnits(unsigned short unitType);
</del><ins>+    [MayThrowException] void convertToSpecifiedUnits(unsigned short unitType);
</ins><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGLengthContextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGLengthContext.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGLengthContext.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGLengthContext.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-FloatRect SVGLengthContext::resolveRectangle(const SVGElement* context, SVGUnitTypes::SVGUnitType type, const FloatRect&amp; viewport, const SVGLength&amp; x, const SVGLength&amp; y, const SVGLength&amp; width, const SVGLength&amp; height)
</del><ins>+FloatRect SVGLengthContext::resolveRectangle(const SVGElement* context, SVGUnitTypes::SVGUnitType type, const FloatRect&amp; viewport, const SVGLengthValue&amp; x, const SVGLengthValue&amp; y, const SVGLengthValue&amp; width, const SVGLengthValue&amp; height)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(type != SVGUnitTypes::SVG_UNIT_TYPE_UNKNOWN);
</span><span class="cx">     if (type == SVGUnitTypes::SVG_UNIT_TYPE_USERSPACEONUSE) {
</span><span class="lines">@@ -63,7 +63,7 @@
</span><span class="cx">                      height.value(lengthContext));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-FloatPoint SVGLengthContext::resolvePoint(const SVGElement* context, SVGUnitTypes::SVGUnitType type, const SVGLength&amp; x, const SVGLength&amp; y)
</del><ins>+FloatPoint SVGLengthContext::resolvePoint(const SVGElement* context, SVGUnitTypes::SVGUnitType type, const SVGLengthValue&amp; x, const SVGLengthValue&amp; y)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(type != SVGUnitTypes::SVG_UNIT_TYPE_UNKNOWN);
</span><span class="cx">     if (type == SVGUnitTypes::SVG_UNIT_TYPE_USERSPACEONUSE) {
</span><span class="lines">@@ -75,7 +75,7 @@
</span><span class="cx">     return FloatPoint(x.valueAsPercentage(), y.valueAsPercentage());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-float SVGLengthContext::resolveLength(const SVGElement* context, SVGUnitTypes::SVGUnitType type, const SVGLength&amp; x)
</del><ins>+float SVGLengthContext::resolveLength(const SVGElement* context, SVGUnitTypes::SVGUnitType type, const SVGLengthValue&amp; x)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(type != SVGUnitTypes::SVG_UNIT_TYPE_UNKNOWN);
</span><span class="cx">     if (type == SVGUnitTypes::SVG_UNIT_TYPE_USERSPACEONUSE) {
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGLengthContexth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGLengthContext.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGLengthContext.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGLengthContext.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -26,7 +26,7 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> class SVGElement;
</span><del>-class SVGLength;
</del><ins>+class SVGLengthValue;
</ins><span class="cx"> 
</span><span class="cx"> struct Length;
</span><span class="cx"> 
</span><span class="lines">@@ -60,9 +60,9 @@
</span><span class="cx">         return SVGLengthContext::resolveRectangle(context, type, viewport, context-&gt;x(), context-&gt;y(), context-&gt;width(), context-&gt;height());
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    static FloatRect resolveRectangle(const SVGElement*, SVGUnitTypes::SVGUnitType, const FloatRect&amp; viewport, const SVGLength&amp; x, const SVGLength&amp; y, const SVGLength&amp; width, const SVGLength&amp; height);
-    static FloatPoint resolvePoint(const SVGElement*, SVGUnitTypes::SVGUnitType, const SVGLength&amp; x, const SVGLength&amp; y);
-    static float resolveLength(const SVGElement*, SVGUnitTypes::SVGUnitType, const SVGLength&amp;);
</del><ins>+    static FloatRect resolveRectangle(const SVGElement*, SVGUnitTypes::SVGUnitType, const FloatRect&amp; viewport, const SVGLengthValue&amp; x, const SVGLengthValue&amp; y, const SVGLengthValue&amp; width, const SVGLengthValue&amp; height);
+    static FloatPoint resolvePoint(const SVGElement*, SVGUnitTypes::SVGUnitType, const SVGLengthValue&amp; x, const SVGLengthValue&amp; y);
+    static float resolveLength(const SVGElement*, SVGUnitTypes::SVGUnitType, const SVGLengthValue&amp;);
</ins><span class="cx"> 
</span><span class="cx">     float valueForLength(const Length&amp;, SVGLengthMode = LengthModeOther);
</span><span class="cx">     ExceptionOr&lt;float&gt; convertValueToUserUnits(float, SVGLengthMode, SVGLengthType fromUnit) const;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGLengthListcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGLengthList.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGLengthList.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGLengthList.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -40,7 +40,7 @@
</span><span class="cx">         if (ptr == start)
</span><span class="cx">             break;
</span><span class="cx"> 
</span><del>-        SVGLength length(mode);
</del><ins>+        SVGLengthValue length(mode);
</ins><span class="cx">         String valueString(start, ptr - start);
</span><span class="cx">         if (valueString.isEmpty())
</span><span class="cx">             return;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGLengthListh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGLengthList.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGLengthList.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGLengthList.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -20,15 +20,14 @@
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><del>-#include &quot;SVGLength.h&quot;
</del><ins>+#include &quot;SVGLengthValue.h&quot;
</ins><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-template&lt;typename T&gt; 
-class SVGPropertyTearOff;
</del><ins>+class SVGLength;
</ins><span class="cx"> 
</span><del>-class SVGLengthList final : public Vector&lt;SVGLength&gt; {
</del><ins>+class SVGLengthList final : public Vector&lt;SVGLengthValue&gt; {
</ins><span class="cx"> public:
</span><span class="cx">     void parse(const String&amp; value, SVGLengthMode);
</span><span class="cx">     String valueAsString() const;
</span><span class="lines">@@ -35,10 +34,10 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> template&lt;&gt; struct SVGPropertyTraits&lt;SVGLengthList&gt; {
</span><del>-    using ListItemType = SVGLength;
-    using ListItemTearOff = SVGPropertyTearOff&lt;SVGLength&gt;;
</del><ins>+    using ListItemType = SVGLengthValue;
+    using ListItemTearOff = SVGLength;
</ins><span class="cx"> 
</span><del>-    static SVGLengthList initialValue() { return SVGLengthList(); }
</del><ins>+    static SVGLengthList initialValue() { return  { }; }
</ins><span class="cx">     static String toString(const SVGLengthList&amp; type) { return type.valueAsString(); }
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGLengthValuecpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/svg/SVGLengthValue.cpp (0 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGLengthValue.cpp                                (rev 0)
+++ trunk/Source/WebCore/svg/SVGLengthValue.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -0,0 +1,402 @@
</span><ins>+/*
+ * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann &lt;zimmermann@kde.org&gt;
+ * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis &lt;buis@kde.org&gt;
+ * Copyright (C) 2007 Apple Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include &quot;config.h&quot;
+#include &quot;SVGLengthValue.h&quot;
+
+#include &quot;CSSHelper.h&quot;
+#include &quot;CSSPrimitiveValue.h&quot;
+#include &quot;ExceptionCode.h&quot;
+#include &quot;FloatConversion.h&quot;
+#include &quot;SVGNames.h&quot;
+#include &quot;SVGParserUtilities.h&quot;
+#include &quot;TextStream.h&quot;
+#include &lt;wtf/MathExtras.h&gt;
+#include &lt;wtf/NeverDestroyed.h&gt;
+#include &lt;wtf/text/StringView.h&gt;
+
+namespace WebCore {
+
+// Helper functions
+static inline unsigned storeUnit(SVGLengthMode mode, SVGLengthType type)
+{
+    return (mode &lt;&lt; 4) | type;
+}
+
+static inline SVGLengthMode extractMode(unsigned unit)
+{
+    unsigned mode = unit &gt;&gt; 4;    
+    return static_cast&lt;SVGLengthMode&gt;(mode);
+}
+
+static inline SVGLengthType extractType(unsigned unit)
+{
+    return static_cast&lt;SVGLengthType&gt;(unit &amp; ((1 &lt;&lt; 4) - 1));
+}
+
+static inline const char* lengthTypeToString(SVGLengthType type)
+{
+    switch (type) {
+    case LengthTypeUnknown:
+    case LengthTypeNumber:
+        return &quot;&quot;;    
+    case LengthTypePercentage:
+        return &quot;%&quot;;
+    case LengthTypeEMS:
+        return &quot;em&quot;;
+    case LengthTypeEXS:
+        return &quot;ex&quot;;
+    case LengthTypePX:
+        return &quot;px&quot;;
+    case LengthTypeCM:
+        return &quot;cm&quot;;
+    case LengthTypeMM:
+        return &quot;mm&quot;;
+    case LengthTypeIN:
+        return &quot;in&quot;;
+    case LengthTypePT:
+        return &quot;pt&quot;;
+    case LengthTypePC:
+        return &quot;pc&quot;;
+    }
+
+    ASSERT_NOT_REACHED();
+    return &quot;&quot;;
+}
+
+inline SVGLengthType parseLengthType(const UChar* ptr, const UChar* end)
+{
+    if (ptr == end)
+        return LengthTypeNumber;
+
+    const UChar firstChar = *ptr;
+
+    if (++ptr == end)
+        return firstChar == '%' ? LengthTypePercentage : LengthTypeUnknown;
+
+    const UChar secondChar = *ptr;
+
+    if (++ptr != end)
+        return LengthTypeUnknown;
+
+    if (firstChar == 'e' &amp;&amp; secondChar == 'm')
+        return LengthTypeEMS;
+    if (firstChar == 'e' &amp;&amp; secondChar == 'x')
+        return LengthTypeEXS;
+    if (firstChar == 'p' &amp;&amp; secondChar == 'x')
+        return LengthTypePX;
+    if (firstChar == 'c' &amp;&amp; secondChar == 'm')
+        return LengthTypeCM;
+    if (firstChar == 'm' &amp;&amp; secondChar == 'm')
+        return LengthTypeMM;
+    if (firstChar == 'i' &amp;&amp; secondChar == 'n')
+        return LengthTypeIN;
+    if (firstChar == 'p' &amp;&amp; secondChar == 't')
+        return LengthTypePT;
+    if (firstChar == 'p' &amp;&amp; secondChar == 'c')
+        return LengthTypePC;
+
+    return LengthTypeUnknown;
+}
+
+SVGLengthValue::SVGLengthValue(SVGLengthMode mode, const String&amp; valueAsString)
+    : m_unit(storeUnit(mode, LengthTypeNumber))
+{
+    setValueAsString(valueAsString);
+}
+
+SVGLengthValue::SVGLengthValue(const SVGLengthContext&amp; context, float value, SVGLengthMode mode, SVGLengthType unitType)
+    : m_unit(storeUnit(mode, unitType))
+{
+    setValue(value, context);
+}
+
+ExceptionOr&lt;void&gt; SVGLengthValue::setValueAsString(const String&amp; valueAsString, SVGLengthMode mode)
+{
+    m_valueInSpecifiedUnits = 0;
+    m_unit = storeUnit(mode, LengthTypeNumber);
+    return setValueAsString(valueAsString);
+}
+
+bool SVGLengthValue::operator==(const SVGLengthValue&amp; other) const
+{
+    return m_unit == other.m_unit &amp;&amp; m_valueInSpecifiedUnits == other.m_valueInSpecifiedUnits;
+}
+
+bool SVGLengthValue::operator!=(const SVGLengthValue&amp; other) const
+{
+    return !operator==(other);
+}
+
+SVGLengthValue SVGLengthValue::construct(SVGLengthMode mode, const String&amp; valueAsString, SVGParsingError&amp; parseError, SVGLengthNegativeValuesMode negativeValuesMode)
+{
+    SVGLengthValue length(mode);
+
+    if (length.setValueAsString(valueAsString).hasException())
+        parseError = ParsingAttributeFailedError;
+    else if (negativeValuesMode == ForbidNegativeLengths &amp;&amp; length.valueInSpecifiedUnits() &lt; 0)
+        parseError = NegativeValueForbiddenError;
+
+    return length;
+}
+
+SVGLengthType SVGLengthValue::unitType() const
+{
+    return extractType(m_unit);
+}
+
+SVGLengthMode SVGLengthValue::unitMode() const
+{
+    return extractMode(m_unit);
+}
+
+float SVGLengthValue::value(const SVGLengthContext&amp; context) const
+{
+    auto result = valueForBindings(context);
+    if (result.hasException())
+        return 0;
+    return result.releaseReturnValue();
+}
+
+ExceptionOr&lt;float&gt; SVGLengthValue::valueForBindings(const SVGLengthContext&amp; context) const
+{
+    return context.convertValueToUserUnits(m_valueInSpecifiedUnits, extractMode(m_unit), extractType(m_unit));
+}
+
+ExceptionOr&lt;void&gt; SVGLengthValue::setValue(const SVGLengthContext&amp; context, float value, SVGLengthMode mode, SVGLengthType unitType)
+{
+    // FIXME: Seems like a bug that we change the value of m_unit even if setValue throws an exception.
+    m_unit = storeUnit(mode, unitType);
+    return setValue(value, context);
+}
+
+ExceptionOr&lt;void&gt; SVGLengthValue::setValue(float value, const SVGLengthContext&amp; context)
+{
+    // 100% = 100.0 instead of 1.0 for historical reasons, this could eventually be changed
+    if (extractType(m_unit) == LengthTypePercentage)
+        value = value / 100;
+
+    auto convertedValue = context.convertValueFromUserUnits(value, extractMode(m_unit), extractType(m_unit));
+    if (convertedValue.hasException())
+        return convertedValue.releaseException();
+    m_valueInSpecifiedUnits = convertedValue.releaseReturnValue();
+    return { };
+}
+float SVGLengthValue::valueAsPercentage() const
+{
+    // 100% = 100.0 instead of 1.0 for historical reasons, this could eventually be changed
+    if (extractType(m_unit) == LengthTypePercentage)
+        return m_valueInSpecifiedUnits / 100;
+
+    return m_valueInSpecifiedUnits;
+}
+
+ExceptionOr&lt;void&gt; SVGLengthValue::setValueAsString(const String&amp; string)
+{
+    if (string.isEmpty())
+        return { };
+
+    float convertedNumber = 0;
+    auto upconvertedCharacters = StringView(string).upconvertedCharacters();
+    const UChar* ptr = upconvertedCharacters;
+    const UChar* end = ptr + string.length();
+
+    if (!parseNumber(ptr, end, convertedNumber, false))
+        return Exception { SYNTAX_ERR };
+
+    auto type = parseLengthType(ptr, end);
+    if (type == LengthTypeUnknown)
+        return Exception { SYNTAX_ERR };
+
+    m_unit = storeUnit(extractMode(m_unit), type);
+    m_valueInSpecifiedUnits = convertedNumber;
+    return { };
+}
+
+String SVGLengthValue::valueAsString() const
+{
+    return String::number(m_valueInSpecifiedUnits) + lengthTypeToString(extractType(m_unit));
+}
+
+ExceptionOr&lt;void&gt; SVGLengthValue::newValueSpecifiedUnits(unsigned short type, float value)
+{
+    if (type == LengthTypeUnknown || type &gt; LengthTypePC)
+        return Exception { NOT_SUPPORTED_ERR };
+
+    m_unit = storeUnit(extractMode(m_unit), static_cast&lt;SVGLengthType&gt;(type));
+    m_valueInSpecifiedUnits = value;
+    return { };
+}
+
+ExceptionOr&lt;void&gt; SVGLengthValue::convertToSpecifiedUnits(unsigned short type, const SVGLengthContext&amp; context)
+{
+    if (type == LengthTypeUnknown || type &gt; LengthTypePC)
+        return Exception { NOT_SUPPORTED_ERR };
+
+    auto valueInUserUnits = valueForBindings(context);
+    if (valueInUserUnits.hasException())
+        return valueInUserUnits.releaseException();
+
+    auto originalUnitAndType = m_unit;
+    m_unit = storeUnit(extractMode(m_unit), static_cast&lt;SVGLengthType&gt;(type));
+    auto result = setValue(valueInUserUnits.releaseReturnValue(), context);
+    if (result.hasException()) {
+        m_unit = originalUnitAndType;
+        return result.releaseException();
+    }
+
+    return { };
+}
+
+SVGLengthValue SVGLengthValue::fromCSSPrimitiveValue(const CSSPrimitiveValue&amp; value)
+{
+    SVGLengthType type;
+    switch (value.primitiveType()) {
+    case CSSPrimitiveValue::CSS_NUMBER:
+        type = LengthTypeNumber;
+        break;
+    case CSSPrimitiveValue::CSS_PERCENTAGE:
+        type = LengthTypePercentage;
+        break;
+    case CSSPrimitiveValue::CSS_EMS:
+        type = LengthTypeEMS;
+        break;
+    case CSSPrimitiveValue::CSS_EXS:
+        type = LengthTypeEXS;
+        break;
+    case CSSPrimitiveValue::CSS_PX:
+        type = LengthTypePX;
+        break;
+    case CSSPrimitiveValue::CSS_CM:
+        type = LengthTypeCM;
+        break;
+    case CSSPrimitiveValue::CSS_MM:
+        type = LengthTypeMM;
+        break;
+    case CSSPrimitiveValue::CSS_IN:
+        type = LengthTypeIN;
+        break;
+    case CSSPrimitiveValue::CSS_PT:
+        type = LengthTypePT;
+        break;
+    case CSSPrimitiveValue::CSS_PC:
+        type = LengthTypePC;
+        break;
+    case CSSPrimitiveValue::CSS_UNKNOWN:
+    default:
+        return { };
+    };
+
+    SVGLengthValue length;
+    length.newValueSpecifiedUnits(type, value.floatValue());
+    return length;
+}
+
+Ref&lt;CSSPrimitiveValue&gt; SVGLengthValue::toCSSPrimitiveValue(const SVGLengthValue&amp; length)
+{
+    CSSPrimitiveValue::UnitTypes cssType = CSSPrimitiveValue::CSS_UNKNOWN;
+    switch (length.unitType()) {
+    case LengthTypeUnknown:
+        break;
+    case LengthTypeNumber:
+        cssType = CSSPrimitiveValue::CSS_NUMBER;
+        break;
+    case LengthTypePercentage:
+        cssType = CSSPrimitiveValue::CSS_PERCENTAGE;
+        break;
+    case LengthTypeEMS:
+        cssType = CSSPrimitiveValue::CSS_EMS;
+        break;
+    case LengthTypeEXS:
+        cssType = CSSPrimitiveValue::CSS_EXS;
+        break;
+    case LengthTypePX:
+        cssType = CSSPrimitiveValue::CSS_PX;
+        break;
+    case LengthTypeCM:
+        cssType = CSSPrimitiveValue::CSS_CM;
+        break;
+    case LengthTypeMM:
+        cssType = CSSPrimitiveValue::CSS_MM;
+        break;
+    case LengthTypeIN:
+        cssType = CSSPrimitiveValue::CSS_IN;
+        break;
+    case LengthTypePT:
+        cssType = CSSPrimitiveValue::CSS_PT;
+        break;
+    case LengthTypePC:
+        cssType = CSSPrimitiveValue::CSS_PC;
+        break;
+    };
+
+    return CSSPrimitiveValue::create(length.valueInSpecifiedUnits(), cssType);
+}
+
+SVGLengthMode SVGLengthValue::lengthModeForAnimatedLengthAttribute(const QualifiedName&amp; attrName)
+{
+    using Map = HashMap&lt;QualifiedName, SVGLengthMode&gt;;
+    static NeverDestroyed&lt;Map&gt; map = [] {
+        struct Mode {
+            const QualifiedName&amp; name;
+            SVGLengthMode mode;
+        };
+        static const Mode modes[] = {
+            { SVGNames::xAttr, LengthModeWidth },
+            { SVGNames::yAttr, LengthModeHeight },
+            { SVGNames::cxAttr, LengthModeWidth },
+            { SVGNames::cyAttr, LengthModeHeight },
+            { SVGNames::dxAttr, LengthModeWidth },
+            { SVGNames::dyAttr, LengthModeHeight },
+            { SVGNames::fxAttr, LengthModeWidth },
+            { SVGNames::fyAttr, LengthModeHeight },
+            { SVGNames::widthAttr, LengthModeWidth },
+            { SVGNames::heightAttr, LengthModeHeight },
+            { SVGNames::x1Attr, LengthModeWidth },
+            { SVGNames::x2Attr, LengthModeWidth },
+            { SVGNames::y1Attr, LengthModeHeight },
+            { SVGNames::y2Attr, LengthModeHeight },
+            { SVGNames::refXAttr, LengthModeWidth },
+            { SVGNames::refYAttr, LengthModeHeight },
+            { SVGNames::markerWidthAttr, LengthModeWidth },
+            { SVGNames::markerHeightAttr, LengthModeHeight },
+            { SVGNames::textLengthAttr, LengthModeWidth },
+            { SVGNames::startOffsetAttr, LengthModeWidth },
+        };
+        Map map;
+        for (auto&amp; mode : modes)
+            map.add(mode.name, mode.mode);
+        return map;
+    }();
+    
+    auto result = map.get().find(attrName);
+    if (result == map.get().end())
+        return LengthModeOther;
+    return result-&gt;value;
+}
+
+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const SVGLengthValue&amp; length)
+{
+    ts &lt;&lt; length.valueAsString();
+    return ts;
+}
+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCoresvgSVGLengthValueh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/svg/SVGLengthValue.h (0 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGLengthValue.h                                (rev 0)
+++ trunk/Source/WebCore/svg/SVGLengthValue.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -0,0 +1,155 @@
</span><ins>+/*
+ * Copyright (C) 2004, 2005, 2006, 2008 Nikolas Zimmermann &lt;zimmermann@kde.org&gt;
+ * Copyright (C) 2004, 2005, 2006 Rob Buis &lt;buis@kde.org&gt;
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#pragma once
+
+#include &quot;AnimationUtilities.h&quot;
+#include &quot;SVGLengthContext.h&quot;
+#include &quot;SVGParsingError.h&quot;
+#include &quot;SVGPropertyTraits.h&quot;
+
+namespace WebCore {
+
+class CSSPrimitiveValue;
+class QualifiedName;
+
+enum SVGLengthNegativeValuesMode {
+    AllowNegativeLengths,
+    ForbidNegativeLengths
+};
+
+class SVGLengthValue {
+    WTF_MAKE_FAST_ALLOCATED;
+public:
+    // FIXME: Once all SVGLengthValue users use Length internally, we make this a wrapper for Length.
+    SVGLengthValue(SVGLengthMode = LengthModeOther, const String&amp; valueAsString = String());
+    SVGLengthValue(const SVGLengthContext&amp;, float, SVGLengthMode = LengthModeOther, SVGLengthType = LengthTypeNumber);
+
+    SVGLengthType unitType() const;
+    SVGLengthMode unitMode() const;
+
+    bool operator==(const SVGLengthValue&amp;) const;
+    bool operator!=(const SVGLengthValue&amp;) const;
+
+    static SVGLengthValue construct(SVGLengthMode, const String&amp;, SVGParsingError&amp;, SVGLengthNegativeValuesMode = AllowNegativeLengths);
+
+    float value(const SVGLengthContext&amp;) const;
+    ExceptionOr&lt;float&gt; valueForBindings(const SVGLengthContext&amp;) const;
+    ExceptionOr&lt;void&gt; setValue(float, const SVGLengthContext&amp;);
+    ExceptionOr&lt;void&gt; setValue(const SVGLengthContext&amp;, float, SVGLengthMode, SVGLengthType);
+
+    float valueInSpecifiedUnits() const { return m_valueInSpecifiedUnits; }
+    void setValueInSpecifiedUnits(float value) { m_valueInSpecifiedUnits = value; }
+
+    float valueAsPercentage() const;
+
+    String valueAsString() const;
+    ExceptionOr&lt;void&gt; setValueAsString(const String&amp;);
+    ExceptionOr&lt;void&gt; setValueAsString(const String&amp;, SVGLengthMode);
+    
+    ExceptionOr&lt;void&gt; newValueSpecifiedUnits(unsigned short, float valueInSpecifiedUnits);
+    ExceptionOr&lt;void&gt; convertToSpecifiedUnits(unsigned short, const SVGLengthContext&amp;);
+
+    // Helper functions
+    bool isRelative() const
+    {
+        auto type = unitType();
+        return type == LengthTypePercentage || type == LengthTypeEMS || type == LengthTypeEXS;
+    }
+
+    bool isZero() const 
+    {
+        return !m_valueInSpecifiedUnits;
+    }
+
+    static SVGLengthValue fromCSSPrimitiveValue(const CSSPrimitiveValue&amp;);
+    static Ref&lt;CSSPrimitiveValue&gt; toCSSPrimitiveValue(const SVGLengthValue&amp;);
+    static SVGLengthMode lengthModeForAnimatedLengthAttribute(const QualifiedName&amp;);
+
+    SVGLengthValue blend(const SVGLengthValue&amp; from, float progress) const
+    {
+        auto toType = unitType();
+        auto fromType = from.unitType();
+        if ((from.isZero() &amp;&amp; isZero())
+            || fromType == LengthTypeUnknown
+            || toType == LengthTypeUnknown
+            || (!from.isZero() &amp;&amp; fromType != LengthTypePercentage &amp;&amp; toType == LengthTypePercentage)
+            || (!isZero() &amp;&amp; fromType == LengthTypePercentage &amp;&amp; toType != LengthTypePercentage)
+            || (!from.isZero() &amp;&amp; !isZero() &amp;&amp; (fromType == LengthTypeEMS || fromType == LengthTypeEXS) &amp;&amp; fromType != toType))
+            return *this;
+
+        SVGLengthValue length;
+
+        if (fromType == LengthTypePercentage || toType == LengthTypePercentage) {
+            auto fromPercent = from.valueAsPercentage() * 100;
+            auto toPercent = valueAsPercentage() * 100;
+            auto result = length.newValueSpecifiedUnits(LengthTypePercentage, WebCore::blend(fromPercent, toPercent, progress));
+            if (result.hasException())
+                return { };
+            return length;
+        }
+
+        if (fromType == toType || from.isZero() || isZero() || fromType == LengthTypeEMS || fromType == LengthTypeEXS) {
+            auto fromValue = from.valueInSpecifiedUnits();
+            auto toValue = valueInSpecifiedUnits();
+            if (isZero()) {
+                auto result = length.newValueSpecifiedUnits(fromType, WebCore::blend(fromValue, toValue, progress));
+                if (result.hasException())
+                    return { };
+            } else {
+                auto result = length.newValueSpecifiedUnits(toType, WebCore::blend(fromValue, toValue, progress));
+                if (result.hasException())
+                    return { };
+            }
+            return length;
+        }
+
+        ASSERT(!isRelative());
+        ASSERT(!from.isRelative());
+
+        SVGLengthContext nonRelativeLengthContext(nullptr);
+        auto fromValueInUserUnits = nonRelativeLengthContext.convertValueToUserUnits(from.valueInSpecifiedUnits(), from.unitMode(), fromType);
+        if (fromValueInUserUnits.hasException())
+            return { };
+
+        auto fromValue = nonRelativeLengthContext.convertValueFromUserUnits(fromValueInUserUnits.releaseReturnValue(), unitMode(), toType);
+        if (fromValue.hasException())
+            return { };
+
+        float toValue = valueInSpecifiedUnits();
+        auto result = length.newValueSpecifiedUnits(toType, WebCore::blend(fromValue.releaseReturnValue(), toValue, progress));
+        if (result.hasException())
+            return { };
+        return length;
+    }
+
+private:
+    float m_valueInSpecifiedUnits { 0 };
+    unsigned m_unit;
+};
+
+template&lt;&gt; struct SVGPropertyTraits&lt;SVGLengthValue&gt; {
+    static SVGLengthValue initialValue() { return { }; }
+    static String toString(const SVGLengthValue&amp; type) { return type.valueAsString(); }
+};
+
+TextStream&amp; operator&lt;&lt;(TextStream&amp;, const SVGLengthValue&amp;);
+
+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCoresvgSVGLineElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGLineElement.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGLineElement.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGLineElement.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -24,7 +24,7 @@
</span><span class="cx"> #include &quot;FloatPoint.h&quot;
</span><span class="cx"> #include &quot;RenderSVGPath.h&quot;
</span><span class="cx"> #include &quot;RenderSVGResource.h&quot;
</span><del>-#include &quot;SVGLength.h&quot;
</del><ins>+#include &quot;SVGLengthValue.h&quot;
</ins><span class="cx"> #include &quot;SVGNames.h&quot;
</span><span class="cx"> #include &lt;wtf/NeverDestroyed.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -81,13 +81,13 @@
</span><span class="cx">     SVGParsingError parseError = NoError;
</span><span class="cx"> 
</span><span class="cx">     if (name == SVGNames::x1Attr)
</span><del>-        setX1BaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setX1BaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::y1Attr)
</span><del>-        setY1BaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setY1BaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::x2Attr)
</span><del>-        setX2BaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setX2BaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::y2Attr)
</span><del>-        setY2BaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setY2BaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx"> 
</span><span class="cx">     reportAttributeParsingError(parseError, name, value);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGLinearGradientElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGLinearGradientElement.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGLinearGradientElement.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGLinearGradientElement.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -28,9 +28,8 @@
</span><span class="cx"> #include &quot;FloatPoint.h&quot;
</span><span class="cx"> #include &quot;LinearGradientAttributes.h&quot;
</span><span class="cx"> #include &quot;RenderSVGResourceLinearGradient.h&quot;
</span><del>-#include &quot;SVGLength.h&quot;
</del><ins>+#include &quot;SVGLengthValue.h&quot;
</ins><span class="cx"> #include &quot;SVGNames.h&quot;
</span><del>-#include &quot;SVGTransform.h&quot;
</del><span class="cx"> #include &quot;SVGTransformList.h&quot;
</span><span class="cx"> #include &quot;SVGUnitTypes.h&quot;
</span><span class="cx"> #include &lt;wtf/NeverDestroyed.h&gt;
</span><span class="lines">@@ -85,13 +84,13 @@
</span><span class="cx">     SVGParsingError parseError = NoError;
</span><span class="cx"> 
</span><span class="cx">     if (name == SVGNames::x1Attr)
</span><del>-        setX1BaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setX1BaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::y1Attr)
</span><del>-        setY1BaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setY1BaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::x2Attr)
</span><del>-        setX2BaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setX2BaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::y2Attr)
</span><del>-        setY2BaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setY2BaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx"> 
</span><span class="cx">     reportAttributeParsingError(parseError, name, value);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGLocatablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGLocatable.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGLocatable.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGLocatable.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -27,6 +27,7 @@
</span><span class="cx"> #include &quot;SVGException.h&quot;
</span><span class="cx"> #include &quot;SVGGraphicsElement.h&quot;
</span><span class="cx"> #include &quot;SVGImageElement.h&quot;
</span><ins>+#include &quot;SVGMatrix.h&quot;
</ins><span class="cx"> #include &quot;SVGNames.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -97,7 +98,7 @@
</span><span class="cx">     return ctm;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ExceptionOr&lt;AffineTransform&gt; SVGLocatable::getTransformToElement(SVGElement* target, StyleUpdateStrategy styleUpdateStrategy)
</del><ins>+ExceptionOr&lt;Ref&lt;SVGMatrix&gt;&gt; SVGLocatable::getTransformToElement(SVGElement* target, StyleUpdateStrategy styleUpdateStrategy)
</ins><span class="cx"> {
</span><span class="cx">     AffineTransform ctm = getCTM(styleUpdateStrategy);
</span><span class="cx"> 
</span><span class="lines">@@ -109,7 +110,7 @@
</span><span class="cx">             return Exception { SVGException::SVG_MATRIX_NOT_INVERTABLE };
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    return WTFMove(ctm);
</del><ins>+    return SVGMatrix::create(ctm);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGLocatableh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGLocatable.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGLocatable.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGLocatable.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx"> 
</span><span class="cx"> class FloatRect;
</span><span class="cx"> class SVGElement;
</span><ins>+class SVGMatrix;
</ins><span class="cx"> 
</span><span class="cx"> class SVGLocatable {
</span><span class="cx"> public:
</span><span class="lines">@@ -42,8 +43,9 @@
</span><span class="cx">     virtual FloatRect getBBox(StyleUpdateStrategy) = 0;
</span><span class="cx">     virtual AffineTransform getCTM(StyleUpdateStrategy) = 0;
</span><span class="cx">     virtual AffineTransform getScreenCTM(StyleUpdateStrategy) = 0;
</span><del>-    ExceptionOr&lt;AffineTransform&gt; getTransformToElement(SVGElement*, StyleUpdateStrategy = AllowStyleUpdate);
</del><span class="cx"> 
</span><ins>+    ExceptionOr&lt;Ref&lt;SVGMatrix&gt;&gt; getTransformToElement(SVGElement*, StyleUpdateStrategy = AllowStyleUpdate);
+
</ins><span class="cx">     static SVGElement* nearestViewportElement(const SVGElement*);
</span><span class="cx">     static SVGElement* farthestViewportElement(const SVGElement*);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGMarkerElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGMarkerElement.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGMarkerElement.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGMarkerElement.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -144,13 +144,13 @@
</span><span class="cx">     SVGParsingError parseError = NoError;
</span><span class="cx"> 
</span><span class="cx">     if (name == SVGNames::refXAttr)
</span><del>-        setRefXBaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setRefXBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::refYAttr)
</span><del>-        setRefYBaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setRefYBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::markerWidthAttr)
</span><del>-        setMarkerWidthBaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setMarkerWidthBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::markerHeightAttr)
</span><del>-        setMarkerHeightBaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setMarkerHeightBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx"> 
</span><span class="cx">     reportAttributeParsingError(parseError, name, value);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGMaskElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGMaskElement.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGMaskElement.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGMaskElement.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -110,13 +110,13 @@
</span><span class="cx">     SVGParsingError parseError = NoError;
</span><span class="cx"> 
</span><span class="cx">     if (name == SVGNames::xAttr)
</span><del>-        setXBaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setXBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::yAttr)
</span><del>-        setYBaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setYBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::widthAttr)
</span><del>-        setWidthBaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setWidthBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::heightAttr)
</span><del>-        setHeightBaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setHeightBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx"> 
</span><span class="cx">     reportAttributeParsingError(parseError, name, value);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGMatrixh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGMatrix.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGMatrix.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGMatrix.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -1,124 +1,297 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) Research In Motion Limited 2010. All rights reserved.
</del><ins>+ * Copyright (C) 2016 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><del>- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
</del><ins>+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
</ins><span class="cx">  *
</span><del>- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
</del><ins>+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><del>-#include &quot;AffineTransform.h&quot;
-#include &quot;ExceptionOr.h&quot;
-#include &quot;SVGException.h&quot;
</del><ins>+#include &quot;ExceptionCode.h&quot;
+#include &quot;SVGMatrixValue.h&quot;
+#include &quot;SVGPropertyTearOff.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class SVGMatrix final : public AffineTransform {
</del><ins>+class SVGMatrix : public SVGPropertyTearOff&lt;SVGMatrixValue&gt; {
</ins><span class="cx"> public:
</span><del>-    SVGMatrix() { }
-    SVGMatrix(const AffineTransform&amp; other)
-        : AffineTransform(other)
</del><ins>+    static Ref&lt;SVGMatrix&gt; create(SVGAnimatedProperty* animatedProperty, SVGPropertyRole role, SVGMatrixValue&amp; value)
</ins><span class="cx">     {
</span><ins>+        ASSERT(animatedProperty);
+        return adoptRef(*new SVGMatrix(animatedProperty, role, value));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    SVGMatrix(double a, double b, double c, double d, double e, double f)
-        : AffineTransform(a, b, c, d, e, f)
</del><ins>+    static Ref&lt;SVGMatrix&gt; create(const SVGMatrixValue&amp; initialValue = { })
</ins><span class="cx">     {
</span><ins>+        return adoptRef(*new SVGMatrix(initialValue));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    SVGMatrix translate(double tx, double ty)
</del><ins>+    static Ref&lt;SVGMatrix&gt; create(const SVGMatrixValue* initialValue)
</ins><span class="cx">     {
</span><del>-        AffineTransform copy { *this };
-        copy.translate(tx, ty);
-        return SVGMatrix { copy };
</del><ins>+        return adoptRef(*new SVGMatrix(initialValue));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    SVGMatrix scale(double s)
</del><ins>+    template&lt;typename T&gt; static ExceptionOr&lt;Ref&lt;SVGMatrix&gt;&gt; create(ExceptionOr&lt;T&gt;&amp;&amp; initialValue)
</ins><span class="cx">     {
</span><del>-        AffineTransform copy { *this };
-        copy.scale(s, s);
-        return SVGMatrix { copy };
</del><ins>+        if (initialValue.hasException())
+            return initialValue.releaseException();
+        return create(initialValue.releaseReturnValue());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    SVGMatrix scaleNonUniform(double sx, double sy)
</del><ins>+    double a()
</ins><span class="cx">     {
</span><del>-        AffineTransform copy { *this };
-        copy.scale(sx, sy);
-        return SVGMatrix { copy };
</del><ins>+        return propertyReference().a();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    SVGMatrix rotate(double d)
</del><ins>+    ExceptionOr&lt;void&gt; setA(double value)
</ins><span class="cx">     {
</span><del>-        AffineTransform copy { *this };
-        copy.rotate(d);
-        return SVGMatrix { copy };
</del><ins>+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        propertyReference().setA(value);
+        commitChange();
+
+        return { };
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    SVGMatrix flipX()
</del><ins>+    double b()
</ins><span class="cx">     {
</span><del>-        AffineTransform copy { *this };
-        copy.flipX();
-        return SVGMatrix { copy };
</del><ins>+        return propertyReference().b();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    SVGMatrix flipY()
</del><ins>+    ExceptionOr&lt;void&gt; setB(double value)
</ins><span class="cx">     {
</span><del>-        AffineTransform copy { *this };
-        copy.flipY();
-        return SVGMatrix { copy };
</del><ins>+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        propertyReference().setB(value);
+        commitChange();
+
+        return { };
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    SVGMatrix skewX(double angle)
</del><ins>+    double c()
</ins><span class="cx">     {
</span><del>-        AffineTransform copy { *this };
-        copy.skewX(angle);
-        return SVGMatrix { copy };
</del><ins>+        return propertyReference().c();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    SVGMatrix skewY(double angle)
</del><ins>+    ExceptionOr&lt;void&gt; setC(double value)
</ins><span class="cx">     {
</span><del>-        AffineTransform copy { *this };
-        copy.skewY(angle);
-        return SVGMatrix { copy };
</del><ins>+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        propertyReference().setC(value);
+        commitChange();
+
+        return { };
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    SVGMatrix multiply(const SVGMatrix&amp; other)
</del><ins>+    double d()
</ins><span class="cx">     {
</span><del>-        AffineTransform copy { *this };
-        copy *= static_cast&lt;const AffineTransform&amp;&gt;(other);
-        return SVGMatrix { copy };
</del><ins>+        return propertyReference().d();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ExceptionOr&lt;SVGMatrix&gt; inverse() const
</del><ins>+    ExceptionOr&lt;void&gt; setD(double value)
</ins><span class="cx">     {
</span><del>-        if (auto inverse = AffineTransform::inverse())
-            return SVGMatrix { inverse.value() };
</del><ins>+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        propertyReference().setD(value);
+        commitChange();
+
+        return { };
+    }
+
+    double e()
+    {
+        return propertyReference().e();
+    }
+
+    ExceptionOr&lt;void&gt; setE(double value)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        propertyReference().setE(value);
+        commitChange();
+
+        return { };
+    }
+
+    double f()
+    {
+        return propertyReference().f();
+    }
+
+    ExceptionOr&lt;void&gt; setF(double value)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        propertyReference().setF(value);
+        commitChange();
+
+        return { };
+    }
+
+    ExceptionOr&lt;Ref&lt;SVGMatrix&gt;&gt; multiply(SVGMatrix&amp; secondMatrix)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        auto result = propertyReference().multiply(secondMatrix.propertyReference());
+        commitChange();
+
+        return SVGMatrix::create(result);
+    }
+
+    ExceptionOr&lt;Ref&lt;SVGMatrix&gt;&gt; inverse()
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        auto result = propertyReference().inverse();
+        if (result.hasException())
+            return result.releaseException();
</ins><span class="cx">         
</span><del>-        return Exception { SVGException::SVG_MATRIX_NOT_INVERTABLE };
</del><ins>+        commitChange();
+        return SVGMatrix::create(result.releaseReturnValue());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ExceptionOr&lt;SVGMatrix&gt; rotateFromVector(double x, double y)
</del><ins>+    ExceptionOr&lt;Ref&lt;SVGMatrix&gt;&gt; translate(float x, float y)
</ins><span class="cx">     {
</span><del>-        if (!x || !y)
-            return Exception { SVGException::SVG_INVALID_VALUE_ERR };
</del><ins>+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
</ins><span class="cx"> 
</span><del>-        AffineTransform copy { *this };
-        copy.rotateFromVector(x, y);
-        return SVGMatrix { copy };
</del><ins>+        auto result = propertyReference().translate(x, y);        
+        commitChange();
+
+        return SVGMatrix::create(result);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    ExceptionOr&lt;Ref&lt;SVGMatrix&gt;&gt; scale(float scaleFactor)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        auto result = propertyReference().scale(scaleFactor);        
+        commitChange();
+
+        return SVGMatrix::create(result);
+    }
+
+    ExceptionOr&lt;Ref&lt;SVGMatrix&gt;&gt; scaleNonUniform(float scaleFactorX, float scaleFactorY)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        auto result = propertyReference().scaleNonUniform(scaleFactorX, scaleFactorY);        
+        commitChange();
+
+        return SVGMatrix::create(result);
+    }
+
+    ExceptionOr&lt;Ref&lt;SVGMatrix&gt;&gt; rotate(float angle)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        auto result = propertyReference().rotate(angle);        
+        commitChange();
+
+        return SVGMatrix::create(result);
+    }
+
+    ExceptionOr&lt;Ref&lt;SVGMatrix&gt;&gt; rotateFromVector(float x, float y)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        auto result = propertyReference().rotateFromVector(x, y);        
+        if (result.hasException())
+            return result.releaseException();
+        
+        commitChange();
+        return SVGMatrix::create(result.releaseReturnValue());
+    }
+
+    ExceptionOr&lt;Ref&lt;SVGMatrix&gt;&gt; flipX()
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        auto result = propertyReference().flipX();        
+        commitChange();
+
+        return SVGMatrix::create(result);
+    }
+
+    ExceptionOr&lt;Ref&lt;SVGMatrix&gt;&gt; flipY()
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        auto result = propertyReference().flipY();        
+        commitChange();
+
+        return SVGMatrix::create(result);
+    }
+
+    ExceptionOr&lt;Ref&lt;SVGMatrix&gt;&gt; skewX(float angle)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        auto result = propertyReference().skewX(angle);        
+        commitChange();
+
+        return SVGMatrix::create(result);
+    }
+
+    ExceptionOr&lt;Ref&lt;SVGMatrix&gt;&gt; skewY(float angle)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        auto result = propertyReference().skewY(angle);        
+        commitChange();
+
+        return SVGMatrix::create(result);
+    }
+
+protected:
+    SVGMatrix(SVGAnimatedProperty* animatedProperty, SVGPropertyRole role, SVGMatrixValue&amp; value)
+        : SVGPropertyTearOff&lt;SVGMatrixValue&gt;(animatedProperty, role, value)
+    {
+    }
+
+    explicit SVGMatrix(const SVGMatrixValue&amp; initialValue)
+        : SVGPropertyTearOff&lt;SVGMatrixValue&gt;(initialValue)
+    {
+    }
+
+    explicit SVGMatrix(const SVGMatrixValue* initialValue)
+        : SVGPropertyTearOff&lt;SVGMatrixValue&gt;(initialValue)
+    {
+    }
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGMatrixidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGMatrix.idl (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGMatrix.idl        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGMatrix.idl        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -20,25 +20,27 @@
</span><span class="cx">  * Boston, MA 02110-1301, USA.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-interface SVGMatrix {
</del><ins>+[
+    SkipVTableValidation
+] interface SVGMatrix {
</ins><span class="cx">     // FIXME: these attributes should all be floats but since we implement
</span><span class="cx">     // AffineTransform with doubles setting these as doubles makes more sense.
</span><del>-    attribute unrestricted double a;
-    attribute unrestricted double b;
-    attribute unrestricted double c;
-    attribute unrestricted double d;
-    attribute unrestricted double e;
-    attribute unrestricted double f;
</del><ins>+    [SetterMayThrowException] attribute unrestricted double a;
+    [SetterMayThrowException] attribute unrestricted double b;
+    [SetterMayThrowException] attribute unrestricted double c;
+    [SetterMayThrowException] attribute unrestricted double d;
+    [SetterMayThrowException] attribute unrestricted double e;
+    [SetterMayThrowException] attribute unrestricted double f;
</ins><span class="cx"> 
</span><del>-    SVGMatrix multiply(SVGMatrix secondMatrix);
</del><ins>+    [MayThrowException] SVGMatrix multiply(SVGMatrix secondMatrix);
</ins><span class="cx">     [MayThrowException] SVGMatrix inverse();
</span><del>-    [Immutable] SVGMatrix translate(unrestricted float x, unrestricted float y);
-    [Immutable] SVGMatrix scale(unrestricted float scaleFactor);
-    [Immutable] SVGMatrix scaleNonUniform(unrestricted float scaleFactorX, unrestricted float scaleFactorY);
-    [Immutable] SVGMatrix rotate(unrestricted float angle);
</del><ins>+    [MayThrowException] SVGMatrix translate(unrestricted float x, unrestricted float y);
+    [MayThrowException] SVGMatrix scale(unrestricted float scaleFactor);
+    [MayThrowException] SVGMatrix scaleNonUniform(unrestricted float scaleFactorX, unrestricted float scaleFactorY);
+    [MayThrowException] SVGMatrix rotate(unrestricted float angle);
</ins><span class="cx">     [MayThrowException] SVGMatrix rotateFromVector(unrestricted float x, unrestricted float y);
</span><del>-    [Immutable] SVGMatrix flipX();
-    [Immutable] SVGMatrix flipY();
-    [Immutable] SVGMatrix skewX(unrestricted float angle);
-    [Immutable] SVGMatrix skewY(unrestricted float angle);
</del><ins>+    [MayThrowException] SVGMatrix flipX();
+    [MayThrowException] SVGMatrix flipY();
+    [MayThrowException] SVGMatrix skewX(unrestricted float angle);
+    [MayThrowException] SVGMatrix skewY(unrestricted float angle);
</ins><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGMatrixValueh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/svg/SVGMatrixValue.h (0 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGMatrixValue.h                                (rev 0)
+++ trunk/Source/WebCore/svg/SVGMatrixValue.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -0,0 +1,125 @@
</span><ins>+/*
+ * Copyright (C) Research In Motion Limited 2010. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#pragma once
+
+#include &quot;AffineTransform.h&quot;
+#include &quot;ExceptionOr.h&quot;
+#include &quot;SVGException.h&quot;
+
+namespace WebCore {
+
+class SVGMatrixValue final : public AffineTransform {
+public:
+    SVGMatrixValue() = default;
+
+    SVGMatrixValue(const AffineTransform&amp; other)
+        : AffineTransform(other)
+    {
+    }
+
+    SVGMatrixValue(double a, double b, double c, double d, double e, double f)
+        : AffineTransform(a, b, c, d, e, f)
+    {
+    }
+
+    SVGMatrixValue translate(double tx, double ty)
+    {
+        AffineTransform copy { *this };
+        copy.translate(tx, ty);
+        return SVGMatrixValue { copy };
+    }
+
+    SVGMatrixValue scale(double s)
+    {
+        AffineTransform copy { *this };
+        copy.scale(s, s);
+        return SVGMatrixValue { copy };
+    }
+
+    SVGMatrixValue scaleNonUniform(double sx, double sy)
+    {
+        AffineTransform copy { *this };
+        copy.scale(sx, sy);
+        return SVGMatrixValue { copy };
+    }
+
+    SVGMatrixValue rotate(double d)
+    {
+        AffineTransform copy { *this };
+        copy.rotate(d);
+        return SVGMatrixValue { copy };
+    }
+
+    SVGMatrixValue flipX()
+    {
+        AffineTransform copy { *this };
+        copy.flipX();
+        return SVGMatrixValue { copy };
+    }
+
+    SVGMatrixValue flipY()
+    {
+        AffineTransform copy { *this };
+        copy.flipY();
+        return SVGMatrixValue { copy };
+    }
+
+    SVGMatrixValue skewX(double angle)
+    {
+        AffineTransform copy { *this };
+        copy.skewX(angle);
+        return SVGMatrixValue { copy };
+    }
+
+    SVGMatrixValue skewY(double angle)
+    {
+        AffineTransform copy { *this };
+        copy.skewY(angle);
+        return SVGMatrixValue { copy };
+    }
+
+    SVGMatrixValue multiply(const SVGMatrixValue&amp; other)
+    {
+        AffineTransform copy { *this };
+        copy *= static_cast&lt;const AffineTransform&amp;&gt;(other);
+        return SVGMatrixValue { copy };
+    }
+
+    ExceptionOr&lt;SVGMatrixValue&gt; inverse() const
+    {
+        if (auto inverse = AffineTransform::inverse())
+            return SVGMatrixValue { inverse.value() };
+        
+        return Exception { SVGException::SVG_MATRIX_NOT_INVERTABLE };
+    }
+
+    ExceptionOr&lt;SVGMatrixValue&gt; rotateFromVector(double x, double y)
+    {
+        if (!x || !y)
+            return Exception { SVGException::SVG_INVALID_VALUE_ERR };
+
+        AffineTransform copy { *this };
+        copy.rotateFromVector(x, y);
+        return SVGMatrixValue { copy };
+    }
+
+};
+
+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCoresvgSVGNumberh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/svg/SVGNumber.h (0 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGNumber.h                                (rev 0)
+++ trunk/Source/WebCore/svg/SVGNumber.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -0,0 +1,91 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include &quot;ExceptionCode.h&quot;
+#include &quot;SVGPropertyTearOff.h&quot;
+
+namespace WebCore {
+
+class SVGNumber : public SVGPropertyTearOff&lt;float&gt; {
+public:
+    static Ref&lt;SVGNumber&gt; create(SVGAnimatedProperty* animatedProperty, SVGPropertyRole role, float&amp; value)
+    {
+        ASSERT(animatedProperty);
+        return adoptRef(*new SVGNumber(animatedProperty, role, value));
+    }
+
+    static Ref&lt;SVGNumber&gt; create(const float&amp; initialValue = { })
+    {
+        return adoptRef(*new SVGNumber(initialValue));
+    }
+
+    static Ref&lt;SVGNumber&gt; create(const float* initialValue)
+    {
+        return adoptRef(*new SVGNumber(initialValue));
+    }
+
+    template&lt;typename T&gt; static ExceptionOr&lt;Ref&lt;SVGNumber&gt;&gt; create(ExceptionOr&lt;T&gt;&amp;&amp; initialValue)
+    {
+        if (initialValue.hasException())
+            return initialValue.releaseException();
+        return create(initialValue.releaseReturnValue());
+    }
+
+    float valueForBindings()
+    {
+        return propertyReference();
+    }
+
+    ExceptionOr&lt;void&gt; setValueForBindings(float value)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        propertyReference() = value;
+        commitChange();
+
+        return { };
+    }
+
+private:
+    SVGNumber(SVGAnimatedProperty* animatedProperty, SVGPropertyRole role, float&amp; value)
+        : SVGPropertyTearOff&lt;float&gt;(animatedProperty, role, value)
+    {
+    }
+
+    explicit SVGNumber(const float&amp; initialValue)
+        : SVGPropertyTearOff&lt;float&gt;(initialValue)
+    {
+    }
+
+    explicit SVGNumber(const float* initialValue)
+        : SVGPropertyTearOff&lt;float&gt;(initialValue)
+    {
+    }
+};
+
+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCoresvgSVGNumberidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGNumber.idl (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGNumber.idl        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGNumber.idl        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -21,6 +21,6 @@
</span><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> interface SVGNumber {
</span><del>-    attribute unrestricted float value;
</del><ins>+    [SetterMayThrowException, ImplementedAs=valueForBindings] attribute unrestricted float value;
</ins><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGNumberListh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGNumberList.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGNumberList.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGNumberList.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -25,8 +25,7 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-template&lt;typename T&gt; 
-class SVGPropertyTearOff;
</del><ins>+class SVGNumber;
</ins><span class="cx"> 
</span><span class="cx"> class SVGNumberList final : public Vector&lt;float&gt; {
</span><span class="cx"> public:
</span><span class="lines">@@ -39,7 +38,7 @@
</span><span class="cx">     static String toString(const SVGNumberList&amp; type) { return type.valueAsString(); }
</span><span class="cx"> 
</span><span class="cx">     using ListItemType = float;
</span><del>-    using ListItemTearOff = SVGPropertyTearOff&lt;float&gt;;
</del><ins>+    using ListItemTearOff = SVGNumber;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPathElement.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathElement.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGPathElement.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -47,6 +47,7 @@
</span><span class="cx"> #include &quot;SVGPathSegMovetoAbs.h&quot;
</span><span class="cx"> #include &quot;SVGPathSegMovetoRel.h&quot;
</span><span class="cx"> #include &quot;SVGPathUtilities.h&quot;
</span><ins>+#include &quot;SVGPoint.h&quot;
</ins><span class="cx"> #include &lt;wtf/NeverDestroyed.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -99,11 +100,11 @@
</span><span class="cx">     return totalLength;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGPoint SVGPathElement::getPointAtLength(float length) const
</del><ins>+Ref&lt;SVGPoint&gt; SVGPathElement::getPointAtLength(float length) const
</ins><span class="cx"> {
</span><del>-    SVGPoint point;
</del><ins>+    FloatPoint point;
</ins><span class="cx">     getPointAtLengthOfSVGPathByteStream(pathByteStream(), length, point);
</span><del>-    return point;
</del><ins>+    return SVGPoint::create(point);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> unsigned SVGPathElement::getPathSegAtLength(float length) const
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPathElement.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathElement.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGPathElement.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -50,6 +50,7 @@
</span><span class="cx"> class SVGPathSegCurvetoQuadraticSmoothAbs;
</span><span class="cx"> class SVGPathSegCurvetoQuadraticSmoothRel;
</span><span class="cx"> class SVGPathSegListPropertyTearOff;
</span><ins>+class SVGPoint;
</ins><span class="cx"> 
</span><span class="cx"> class SVGPathElement final : public SVGGraphicsElement,
</span><span class="cx">                              public SVGExternalResourcesRequired {
</span><span class="lines">@@ -57,7 +58,7 @@
</span><span class="cx">     static Ref&lt;SVGPathElement&gt; create(const QualifiedName&amp;, Document&amp;);
</span><span class="cx">     
</span><span class="cx">     float getTotalLength() const;
</span><del>-    SVGPoint getPointAtLength(float distance) const;
</del><ins>+    Ref&lt;SVGPoint&gt; getPointAtLength(float distance) const;
</ins><span class="cx">     unsigned getPathSegAtLength(float distance) const;
</span><span class="cx"> 
</span><span class="cx">     Ref&lt;SVGPathSegClosePath&gt; createSVGPathSegClosePath(SVGPathSegRole = PathSegUndefinedRole);
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathElementidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPathElement.idl (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathElement.idl        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGPathElement.idl        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -28,7 +28,7 @@
</span><span class="cx">     readonly attribute SVGAnimatedNumber pathLength;
</span><span class="cx"> 
</span><span class="cx">     unrestricted float getTotalLength();
</span><del>-    SVGPoint getPointAtLength(optional unrestricted float distance = NaN);
</del><ins>+    [NewObject] SVGPoint getPointAtLength(optional unrestricted float distance = NaN);
</ins><span class="cx">     unsigned long getPathSegAtLength(optional unrestricted float distance = NaN);
</span><span class="cx"> 
</span><span class="cx">     SVGPathSegClosePath createSVGPathSegClosePath();
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathTraversalStateBuildercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPathTraversalStateBuilder.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathTraversalStateBuilder.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGPathTraversalStateBuilder.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -66,7 +66,7 @@
</span><span class="cx">     return m_traversalState.totalLength();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGPoint SVGPathTraversalStateBuilder::currentPoint() const
</del><ins>+FloatPoint SVGPathTraversalStateBuilder::currentPoint() const
</ins><span class="cx"> {
</span><span class="cx">     return m_traversalState.current();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathTraversalStateBuilderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPathTraversalStateBuilder.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathTraversalStateBuilder.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGPathTraversalStateBuilder.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -22,10 +22,10 @@
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><span class="cx"> #include &quot;SVGPathConsumer.h&quot;
</span><del>-#include &quot;SVGPoint.h&quot;
</del><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+class FloatPoint;
</ins><span class="cx"> class PathTraversalState;
</span><span class="cx"> 
</span><span class="cx"> class SVGPathTraversalStateBuilder final : public SVGPathConsumer {
</span><span class="lines">@@ -34,7 +34,7 @@
</span><span class="cx"> 
</span><span class="cx">     unsigned pathSegmentIndex() const { return m_segmentIndex; }
</span><span class="cx">     float totalLength() const;
</span><del>-    SVGPoint currentPoint() const;
</del><ins>+    FloatPoint currentPoint() const;
</ins><span class="cx"> 
</span><span class="cx">     void incrementPathSegmentCount() final { ++m_segmentIndex; }
</span><span class="cx">     bool continueConsuming() final;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathUtilitiescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPathUtilities.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathUtilities.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGPathUtilities.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -21,6 +21,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;SVGPathUtilities.h&quot;
</span><span class="cx"> 
</span><ins>+#include &quot;FloatPoint.h&quot;
</ins><span class="cx"> #include &quot;Path.h&quot;
</span><span class="cx"> #include &quot;PathTraversalState.h&quot;
</span><span class="cx"> #include &quot;SVGPathBlender.h&quot;
</span><span class="lines">@@ -192,7 +193,7 @@
</span><span class="cx">     return ok;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool getPointAtLengthOfSVGPathByteStream(const SVGPathByteStream&amp; stream, float length, SVGPoint&amp; point)
</del><ins>+bool getPointAtLengthOfSVGPathByteStream(const SVGPathByteStream&amp; stream, float length, FloatPoint&amp; point)
</ins><span class="cx"> {
</span><span class="cx">     if (stream.isEmpty())
</span><span class="cx">         return false;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPathUtilitiesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPathUtilities.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPathUtilities.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGPathUtilities.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -21,11 +21,11 @@
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><span class="cx"> #include &quot;SVGPathConsumer.h&quot;
</span><del>-#include &quot;SVGPoint.h&quot;
</del><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+class FloatPoint;
</ins><span class="cx"> class Path;
</span><span class="cx"> class SVGPathByteStream;
</span><span class="cx"> class SVGPathElement;
</span><span class="lines">@@ -55,6 +55,6 @@
</span><span class="cx"> 
</span><span class="cx"> bool getSVGPathSegAtLengthFromSVGPathByteStream(const SVGPathByteStream&amp;, float length, unsigned&amp; pathSeg);
</span><span class="cx"> bool getTotalLengthOfSVGPathByteStream(const SVGPathByteStream&amp;, float&amp; totalLength);
</span><del>-bool getPointAtLengthOfSVGPathByteStream(const SVGPathByteStream&amp;, float length, SVGPoint&amp;);
</del><ins>+bool getPointAtLengthOfSVGPathByteStream(const SVGPathByteStream&amp;, float length, FloatPoint&amp;);
</ins><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPatternElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPatternElement.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPatternElement.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGPatternElement.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -133,13 +133,13 @@
</span><span class="cx">     SVGParsingError parseError = NoError;
</span><span class="cx"> 
</span><span class="cx">     if (name == SVGNames::xAttr)
</span><del>-        setXBaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setXBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::yAttr)
</span><del>-        setYBaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setYBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::widthAttr)
</span><del>-        setWidthBaseValue(SVGLength::construct(LengthModeWidth, value, parseError, ForbidNegativeLengths));
</del><ins>+        setWidthBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError, ForbidNegativeLengths));
</ins><span class="cx">     else if (name == SVGNames::heightAttr)
</span><del>-        setHeightBaseValue(SVGLength::construct(LengthModeHeight, value, parseError, ForbidNegativeLengths));
</del><ins>+        setHeightBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError, ForbidNegativeLengths));
</ins><span class="cx"> 
</span><span class="cx">     reportAttributeParsingError(parseError, name, value);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPointh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPoint.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPoint.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGPoint.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -25,10 +25,96 @@
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><ins>+#include &quot;ExceptionCode.h&quot;
</ins><span class="cx"> #include &quot;FloatPoint.h&quot;
</span><ins>+#include &quot;SVGMatrix.h&quot;
+#include &quot;SVGPropertyTearOff.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-typedef FloatPoint SVGPoint;
</del><ins>+class SVGPoint : public SVGPropertyTearOff&lt;FloatPoint&gt; {
+public:
+    static Ref&lt;SVGPoint&gt; create(SVGAnimatedProperty* animatedProperty, SVGPropertyRole role, FloatPoint&amp; value)
+    {
+        ASSERT(animatedProperty);
+        return adoptRef(*new SVGPoint(animatedProperty, role, value));
+    }
</ins><span class="cx"> 
</span><ins>+    static Ref&lt;SVGPoint&gt; create(const FloatPoint&amp; initialValue = { })
+    {
+        return adoptRef(*new SVGPoint(initialValue));
+    }
+
+    static Ref&lt;SVGPoint&gt; create(const FloatPoint* initialValue)
+    {
+        return adoptRef(*new SVGPoint(initialValue));
+    }
+
+    template&lt;typename T&gt; static ExceptionOr&lt;Ref&lt;SVGPoint&gt;&gt; create(ExceptionOr&lt;T&gt;&amp;&amp; initialValue)
+    {
+        if (initialValue.hasException())
+            return initialValue.releaseException();
+        return create(initialValue.releaseReturnValue());
+    }
+
+    float x()
+    {
+        return propertyReference().x();
+    }
+
+    ExceptionOr&lt;void&gt; setX(float xValue)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        propertyReference().setX(xValue);
+        commitChange();
+
+        return { };
+    }
+
+    float y()
+    {
+        return propertyReference().y();
+    }
+
+    ExceptionOr&lt;void&gt; setY(float xValue)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        propertyReference().setY(xValue);
+        commitChange();
+
+        return { };
+    }
+
+    ExceptionOr&lt;Ref&lt;SVGPoint&gt;&gt; matrixTransform(SVGMatrix&amp; matrix)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        auto newPoint = propertyReference().matrixTransform(matrix.propertyReference());
+        commitChange();
+
+        return SVGPoint::create(newPoint);
+    }
+
+protected:
+    SVGPoint(SVGAnimatedProperty* animatedProperty, SVGPropertyRole role, FloatPoint&amp; value)
+        : SVGPropertyTearOff&lt;FloatPoint&gt;(animatedProperty, role, value)
+    {
+    }
+
+    explicit SVGPoint(const FloatPoint&amp; initialValue)
+        : SVGPropertyTearOff&lt;FloatPoint&gt;(initialValue)
+    {
+    }
+
+    explicit SVGPoint(const FloatPoint* initialValue)
+        : SVGPropertyTearOff&lt;FloatPoint&gt;(initialValue)
+    {
+    }
+};
+
</ins><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPointidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPoint.idl (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPoint.idl        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGPoint.idl        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -19,11 +19,12 @@
</span><span class="cx">  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
</span><span class="cx">  * Boston, MA 02110-1301, USA.
</span><span class="cx">  */
</span><ins>+[
+    SkipVTableValidation
+] interface SVGPoint {
+    [SetterMayThrowException] attribute unrestricted float x;
+    [SetterMayThrowException] attribute unrestricted float y;
</ins><span class="cx"> 
</span><del>-interface SVGPoint {
-    attribute unrestricted float x;
-    attribute unrestricted float y;
-
-    SVGPoint matrixTransform(SVGMatrix matrix);
</del><ins>+    [MayThrowException, NewObject] SVGPoint matrixTransform(SVGMatrix matrix);
</ins><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPointListcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPointList.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPointList.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGPointList.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -35,7 +35,7 @@
</span><span class="cx">         if (i &gt; 0)
</span><span class="cx">             builder.append(' '); // FIXME: Shouldn't we use commas to seperate?
</span><span class="cx"> 
</span><del>-        const SVGPoint&amp; point = at(i);
</del><ins>+        const auto&amp; point = at(i);
</ins><span class="cx">         builder.appendNumber(point.x());
</span><span class="cx">         builder.append(' ');
</span><span class="cx">         builder.appendNumber(point.y());
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPointListh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPointList.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPointList.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGPointList.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -20,16 +20,15 @@
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><del>-#include &quot;SVGPoint.h&quot;
</del><ins>+#include &quot;FloatPoint.h&quot;
</ins><span class="cx"> #include &quot;SVGPropertyTraits.h&quot;
</span><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-template&lt;typename T&gt; 
-class SVGPropertyTearOff;
</del><ins>+class SVGPoint;
</ins><span class="cx"> 
</span><del>-class SVGPointList final : public Vector&lt;SVGPoint&gt; {
</del><ins>+class SVGPointList final : public Vector&lt;FloatPoint&gt; {
</ins><span class="cx"> public:
</span><span class="cx">     String valueAsString() const;
</span><span class="cx"> };
</span><span class="lines">@@ -37,8 +36,8 @@
</span><span class="cx"> template&lt;&gt; struct SVGPropertyTraits&lt;SVGPointList&gt; {
</span><span class="cx">     static SVGPointList initialValue() { return SVGPointList(); }
</span><span class="cx"> 
</span><del>-    using ListItemType = SVGPoint;
-    using ListItemTearOff = SVGPropertyTearOff&lt;SVGPoint&gt;;
</del><ins>+    using ListItemType = FloatPoint;
+    using ListItemTearOff = SVGPoint;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGPolyElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGPolyElement.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGPolyElement.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGPolyElement.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -22,12 +22,12 @@
</span><span class="cx"> #include &quot;SVGPolyElement.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;Document.h&quot;
</span><del>-#include &quot;FloatPoint.h&quot;
</del><span class="cx"> #include &quot;RenderSVGPath.h&quot;
</span><span class="cx"> #include &quot;RenderSVGResource.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedPointList.h&quot;
</span><span class="cx"> #include &quot;SVGNames.h&quot;
</span><span class="cx"> #include &quot;SVGParserUtilities.h&quot;
</span><ins>+#include &quot;SVGPoint.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGRadialGradientElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGRadialGradientElement.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGRadialGradientElement.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGRadialGradientElement.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -30,7 +30,6 @@
</span><span class="cx"> #include &quot;RenderSVGResourceRadialGradient.h&quot;
</span><span class="cx"> #include &quot;SVGNames.h&quot;
</span><span class="cx"> #include &quot;SVGStopElement.h&quot;
</span><del>-#include &quot;SVGTransform.h&quot;
</del><span class="cx"> #include &quot;SVGTransformList.h&quot;
</span><span class="cx"> #include &quot;SVGUnitTypes.h&quot;
</span><span class="cx"> #include &lt;wtf/NeverDestroyed.h&gt;
</span><span class="lines">@@ -93,17 +92,17 @@
</span><span class="cx">     SVGParsingError parseError = NoError;
</span><span class="cx"> 
</span><span class="cx">     if (name == SVGNames::cxAttr)
</span><del>-        setCxBaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setCxBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::cyAttr)
</span><del>-        setCyBaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setCyBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::rAttr)
</span><del>-        setRBaseValue(SVGLength::construct(LengthModeOther, value, parseError, ForbidNegativeLengths));
</del><ins>+        setRBaseValue(SVGLengthValue::construct(LengthModeOther, value, parseError, ForbidNegativeLengths));
</ins><span class="cx">     else if (name == SVGNames::fxAttr)
</span><del>-        setFxBaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setFxBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::fyAttr)
</span><del>-        setFyBaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setFyBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::frAttr)
</span><del>-        setFrBaseValue(SVGLength::construct(LengthModeOther, value, parseError, ForbidNegativeLengths));
</del><ins>+        setFrBaseValue(SVGLengthValue::construct(LengthModeOther, value, parseError, ForbidNegativeLengths));
</ins><span class="cx"> 
</span><span class="cx">     reportAttributeParsingError(parseError, name, value);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGRecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGRect.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGRect.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGRect.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -19,27 +19,116 @@
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><del>-#include &quot;FloatRect.h&quot;
-#include &quot;SVGPropertyTraits.h&quot;
-#include &lt;wtf/text/StringBuilder.h&gt;
</del><ins>+#include &quot;SVGPropertyTearOff.h&quot;
+#include &quot;SVGRectTraits.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-template&lt;&gt;
-struct SVGPropertyTraits&lt;FloatRect&gt; {
-    static FloatRect initialValue() { return FloatRect(); }
-    static String toString(const FloatRect&amp; type)
</del><ins>+class SVGRect : public SVGPropertyTearOff&lt;FloatRect&gt; {
+public:
+    static Ref&lt;SVGRect&gt; create(SVGAnimatedProperty* animatedProperty, SVGPropertyRole role, FloatRect&amp; value)
</ins><span class="cx">     {
</span><del>-        StringBuilder builder;
-        builder.appendNumber(type.x());
-        builder.append(' ');
-        builder.appendNumber(type.y());
-        builder.append(' ');
-        builder.appendNumber(type.width());
-        builder.append(' ');
-        builder.appendNumber(type.height());
-        return builder.toString();
</del><ins>+        ASSERT(animatedProperty);
+        return adoptRef(*new SVGRect(animatedProperty, role, value));
</ins><span class="cx">     }
</span><ins>+
+    static Ref&lt;SVGRect&gt; create(const FloatRect&amp; initialValue = { })
+    {
+        return adoptRef(*new SVGRect(initialValue));
+    }
+
+    static Ref&lt;SVGRect&gt; create(const FloatRect* initialValue)
+    {
+        return adoptRef(*new SVGRect(initialValue));
+    }
+
+    template&lt;typename T&gt; static ExceptionOr&lt;Ref&lt;SVGRect&gt;&gt; create(ExceptionOr&lt;T&gt;&amp;&amp; initialValue)
+    {
+        if (initialValue.hasException())
+            return initialValue.releaseException();
+        return create(initialValue.releaseReturnValue());
+    }
+
+    float x()
+    {
+        return propertyReference().x();
+    }
+
+    ExceptionOr&lt;void&gt; setX(float xValue)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        propertyReference().setX(xValue);
+        commitChange();
+
+        return { };
+    }
+
+    float y()
+    {
+        return propertyReference().y();
+    }
+
+    ExceptionOr&lt;void&gt; setY(float xValue)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        propertyReference().setY(xValue);
+        commitChange();
+
+        return { };
+    }
+
+    float width()
+    {
+        return propertyReference().width();
+    }
+
+    ExceptionOr&lt;void&gt; setWidth(float widthValue)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        propertyReference().setWidth(widthValue);
+        commitChange();
+
+        return { };
+    }
+
+    float height()
+    {
+        return propertyReference().height();
+    }
+
+    ExceptionOr&lt;void&gt; setHeight(float heightValue)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        propertyReference().setHeight(heightValue);
+        commitChange();
+
+        return { };
+    }
+
+private:
+    SVGRect(SVGAnimatedProperty* animatedProperty, SVGPropertyRole role, FloatRect&amp; value)
+        : SVGPropertyTearOff&lt;FloatRect&gt;(animatedProperty, role, value)
+    {
+    }
+
+    explicit SVGRect(const FloatRect&amp; initialValue)
+        : SVGPropertyTearOff&lt;FloatRect&gt;(initialValue)
+    {
+    }
+
+    explicit SVGRect(const FloatRect* initialValue)
+        : SVGPropertyTearOff&lt;FloatRect&gt;(initialValue)
+    {
+    }
</ins><span class="cx"> };
</span><span class="cx"> 
</span><ins>+
</ins><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGRectidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGRect.idl (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGRect.idl        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGRect.idl        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -21,9 +21,9 @@
</span><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> interface SVGRect {
</span><del>-    attribute unrestricted float x;
-    attribute unrestricted float y;
-    attribute unrestricted float width;
-    attribute unrestricted float height;
</del><ins>+    [SetterMayThrowException] attribute unrestricted float x;
+    [SetterMayThrowException] attribute unrestricted float y;
+    [SetterMayThrowException] attribute unrestricted float width;
+    [SetterMayThrowException] attribute unrestricted float height;
</ins><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGRectElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGRectElement.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGRectElement.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGRectElement.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -25,7 +25,7 @@
</span><span class="cx"> #include &quot;RenderSVGPath.h&quot;
</span><span class="cx"> #include &quot;RenderSVGRect.h&quot;
</span><span class="cx"> #include &quot;RenderSVGResource.h&quot;
</span><del>-#include &quot;SVGLength.h&quot;
</del><ins>+#include &quot;SVGLengthValue.h&quot;
</ins><span class="cx"> #include &quot;SVGNames.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -73,17 +73,17 @@
</span><span class="cx">     SVGParsingError parseError = NoError;
</span><span class="cx"> 
</span><span class="cx">     if (name == SVGNames::xAttr)
</span><del>-        setXBaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setXBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::yAttr)
</span><del>-        setYBaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setYBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::rxAttr)
</span><del>-        setRxBaseValue(SVGLength::construct(LengthModeWidth, value, parseError, ForbidNegativeLengths));
</del><ins>+        setRxBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError, ForbidNegativeLengths));
</ins><span class="cx">     else if (name == SVGNames::ryAttr)
</span><del>-        setRyBaseValue(SVGLength::construct(LengthModeHeight, value, parseError, ForbidNegativeLengths));
</del><ins>+        setRyBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError, ForbidNegativeLengths));
</ins><span class="cx">     else if (name == SVGNames::widthAttr)
</span><del>-        setWidthBaseValue(SVGLength::construct(LengthModeWidth, value, parseError, ForbidNegativeLengths));
</del><ins>+        setWidthBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError, ForbidNegativeLengths));
</ins><span class="cx">     else if (name == SVGNames::heightAttr)
</span><del>-        setHeightBaseValue(SVGLength::construct(LengthModeHeight, value, parseError, ForbidNegativeLengths));
</del><ins>+        setHeightBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError, ForbidNegativeLengths));
</ins><span class="cx"> 
</span><span class="cx">     reportAttributeParsingError(parseError, name, value);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGRectTraitsh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/svg/SVGRectTraits.h (0 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGRectTraits.h                                (rev 0)
+++ trunk/Source/WebCore/svg/SVGRectTraits.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -0,0 +1,51 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include &quot;FloatRect.h&quot;
+#include &quot;SVGPropertyTraits.h&quot;
+#include &lt;wtf/text/StringBuilder.h&gt;
+
+namespace WebCore {
+
+template&lt;&gt;
+struct SVGPropertyTraits&lt;FloatRect&gt; {
+    static FloatRect initialValue() { return { }; }
+    static String toString(const FloatRect&amp; type)
+    {
+        StringBuilder builder;
+        builder.appendNumber(type.x());
+        builder.append(' ');
+        builder.appendNumber(type.y());
+        builder.append(' ');
+        builder.appendNumber(type.width());
+        builder.append(' ');
+        builder.appendNumber(type.height());
+        return builder.toString();
+    }
+};
+
+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCoresvgSVGSVGElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGSVGElement.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGSVGElement.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGSVGElement.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -34,6 +34,13 @@
</span><span class="cx"> #include &quot;RenderView.h&quot;
</span><span class="cx"> #include &quot;SMILTimeContainer.h&quot;
</span><span class="cx"> #include &quot;SVGAngle.h&quot;
</span><ins>+#include &quot;SVGLength.h&quot;
+#include &quot;SVGMatrix.h&quot;
+#include &quot;SVGNumber.h&quot;
+#include &quot;SVGPoint.h&quot;
+#include &quot;SVGRect.h&quot;
+#include &quot;SVGStaticPropertyTearOff.h&quot;
+#include &quot;SVGTransform.h&quot;
</ins><span class="cx"> #include &quot;SVGViewElement.h&quot;
</span><span class="cx"> #include &quot;SVGViewSpec.h&quot;
</span><span class="cx"> #include &quot;StaticNodeList.h&quot;
</span><span class="lines">@@ -123,10 +130,10 @@
</span><span class="cx">     setAttributeWithoutSynchronization(SVGNames::contentStyleTypeAttr, type);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-FloatRect SVGSVGElement::viewport() const
</del><ins>+Ref&lt;SVGRect&gt; SVGSVGElement::viewport() const
</ins><span class="cx"> {
</span><span class="cx">     // FIXME: Not implemented.
</span><del>-    return { };
</del><ins>+    return SVGRect::create();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> float SVGSVGElement::pixelUnitToMillimeterX() const
</span><span class="lines">@@ -182,6 +189,11 @@
</span><span class="cx">         frame-&gt;setPageZoomFactor(scale);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+Ref&lt;SVGPoint&gt; SVGSVGElement::currentTranslate()
+{
+    return SVGStaticPropertyTearOff&lt;SVGSVGElement, SVGPoint&gt;::create(*this, m_currentTranslate, &amp;SVGSVGElement::updateCurrentTranslate);
+}
+
</ins><span class="cx"> void SVGSVGElement::setCurrentTranslate(const FloatPoint&amp; translation)
</span><span class="cx"> {
</span><span class="cx">     if (m_currentTranslate == translation)
</span><span class="lines">@@ -236,23 +248,23 @@
</span><span class="cx">     SVGParsingError parseError = NoError;
</span><span class="cx"> 
</span><span class="cx">     if (name == SVGNames::xAttr)
</span><del>-        setXBaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setXBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::yAttr)
</span><del>-        setYBaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setYBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::widthAttr) {
</span><del>-        SVGLength length = SVGLength::construct(LengthModeWidth, value, parseError, ForbidNegativeLengths);
</del><ins>+        auto length = SVGLengthValue::construct(LengthModeWidth, value, parseError, ForbidNegativeLengths);
</ins><span class="cx">         if (parseError != NoError || value.isEmpty()) {
</span><span class="cx">             // FIXME: This is definitely the correct behavior for a missing/removed attribute.
</span><span class="cx">             // Not sure it's correct for the empty string or for something that can't be parsed.
</span><del>-            length = SVGLength(LengthModeWidth, ASCIILiteral(&quot;100%&quot;));
</del><ins>+            length = SVGLengthValue(LengthModeWidth, ASCIILiteral(&quot;100%&quot;));
</ins><span class="cx">         }
</span><span class="cx">         setWidthBaseValue(length);
</span><span class="cx">     } else if (name == SVGNames::heightAttr) {
</span><del>-        SVGLength length = SVGLength::construct(LengthModeHeight, value, parseError, ForbidNegativeLengths);
</del><ins>+        auto length = SVGLengthValue::construct(LengthModeHeight, value, parseError, ForbidNegativeLengths);
</ins><span class="cx">         if (parseError != NoError || value.isEmpty()) {
</span><span class="cx">             // FIXME: This is definitely the correct behavior for a removed attribute.
</span><span class="cx">             // Not sure it's correct for the empty string or for something that can't be parsed.
</span><del>-            length = SVGLength(LengthModeHeight, ASCIILiteral(&quot;100%&quot;));
</del><ins>+            length = SVGLengthValue(LengthModeHeight, ASCIILiteral(&quot;100%&quot;));
</ins><span class="cx">         }
</span><span class="cx">         setHeightBaseValue(length);
</span><span class="cx">     }
</span><span class="lines">@@ -310,7 +322,7 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-Ref&lt;NodeList&gt; SVGSVGElement::collectIntersectionOrEnclosureList(const FloatRect&amp; rect, SVGElement* referenceElement, bool (*checkFunction)(const SVGElement*, const FloatRect&amp;))
</del><ins>+Ref&lt;NodeList&gt; SVGSVGElement::collectIntersectionOrEnclosureList(SVGRect&amp; rect, SVGElement* referenceElement, bool (*checkFunction)(const SVGElement*, SVGRect&amp;))
</ins><span class="cx"> {
</span><span class="cx">     Vector&lt;Ref&lt;Element&gt;&gt; elements;
</span><span class="cx">     for (auto&amp; element : descendantsOfType&lt;SVGElement&gt;(referenceElement ? *referenceElement : *this)) {
</span><span class="lines">@@ -320,24 +332,24 @@
</span><span class="cx">     return StaticElementList::create(WTFMove(elements));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-Ref&lt;NodeList&gt; SVGSVGElement::getIntersectionList(const FloatRect&amp; rect, SVGElement* referenceElement)
</del><ins>+Ref&lt;NodeList&gt; SVGSVGElement::getIntersectionList(SVGRect&amp; rect, SVGElement* referenceElement)
</ins><span class="cx"> {
</span><span class="cx">     return collectIntersectionOrEnclosureList(rect, referenceElement, checkIntersection);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-Ref&lt;NodeList&gt; SVGSVGElement::getEnclosureList(const FloatRect&amp; rect, SVGElement* referenceElement)
</del><ins>+Ref&lt;NodeList&gt; SVGSVGElement::getEnclosureList(SVGRect&amp; rect, SVGElement* referenceElement)
</ins><span class="cx"> {
</span><span class="cx">     return collectIntersectionOrEnclosureList(rect, referenceElement, checkEnclosure);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool SVGSVGElement::checkIntersection(const SVGElement* element, const FloatRect&amp; rect)
</del><ins>+bool SVGSVGElement::checkIntersection(const SVGElement* element, SVGRect&amp; rect)
</ins><span class="cx"> {
</span><del>-    return element &amp;&amp; RenderSVGModelObject::checkIntersection(element-&gt;renderer(), rect);
</del><ins>+    return element &amp;&amp; RenderSVGModelObject::checkIntersection(element-&gt;renderer(), rect.propertyReference());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool SVGSVGElement::checkEnclosure(const SVGElement* element, const FloatRect&amp; rect)
</del><ins>+bool SVGSVGElement::checkEnclosure(const SVGElement* element, SVGRect&amp; rect)
</ins><span class="cx"> {
</span><del>-    return element &amp;&amp; RenderSVGModelObject::checkEnclosure(element-&gt;renderer(), rect);
</del><ins>+    return element &amp;&amp; RenderSVGModelObject::checkEnclosure(element-&gt;renderer(), rect.propertyReference());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SVGSVGElement::deselectAll()
</span><span class="lines">@@ -346,39 +358,44 @@
</span><span class="cx">         frame-&gt;selection().clear();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGLength SVGSVGElement::createSVGLength()
</del><ins>+Ref&lt;SVGNumber&gt; SVGSVGElement::createSVGNumber()
</ins><span class="cx"> {
</span><del>-    return { };
</del><ins>+    return SVGNumber::create();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+Ref&lt;SVGLength&gt; SVGSVGElement::createSVGLength()
+{
+    return SVGLength::create();
+}
+
</ins><span class="cx"> Ref&lt;SVGAngle&gt; SVGSVGElement::createSVGAngle()
</span><span class="cx"> {
</span><span class="cx">     return SVGAngle::create();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGPoint SVGSVGElement::createSVGPoint()
</del><ins>+Ref&lt;SVGPoint&gt; SVGSVGElement::createSVGPoint()
</ins><span class="cx"> {
</span><del>-    return { };
</del><ins>+    return SVGPoint::create();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGMatrix SVGSVGElement::createSVGMatrix()
</del><ins>+Ref&lt;SVGMatrix&gt; SVGSVGElement::createSVGMatrix()
</ins><span class="cx"> {
</span><del>-    return { };
</del><ins>+    return SVGMatrix::create();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-FloatRect SVGSVGElement::createSVGRect()
</del><ins>+Ref&lt;SVGRect&gt; SVGSVGElement::createSVGRect()
</ins><span class="cx"> {
</span><del>-    return { };
</del><ins>+    return SVGRect::create();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGTransform SVGSVGElement::createSVGTransform()
</del><ins>+Ref&lt;SVGTransform&gt; SVGSVGElement::createSVGTransform()
</ins><span class="cx"> {
</span><del>-    return SVGTransform::SVG_TRANSFORM_MATRIX;
</del><ins>+    return SVGTransform::create(SVGTransformValue { SVGTransformValue::SVG_TRANSFORM_MATRIX });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGTransform SVGSVGElement::createSVGTransformFromMatrix(const SVGMatrix&amp; matrix)
</del><ins>+Ref&lt;SVGTransform&gt; SVGSVGElement::createSVGTransformFromMatrix(SVGMatrix&amp; matrix)
</ins><span class="cx"> {
</span><del>-    return SVGTransform { matrix };
</del><ins>+    return SVGTransform::create(SVGTransformValue { matrix.propertyReference() });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> AffineTransform SVGSVGElement::localCoordinateSpaceTransform(SVGLocatable::CTMScope mode) const
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGSVGElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGSVGElement.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGSVGElement.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGSVGElement.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -21,6 +21,7 @@
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><ins>+#include &quot;FloatPoint.h&quot;
</ins><span class="cx"> #include &quot;SVGAnimatedBoolean.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedLength.h&quot;
</span><span class="cx"> #include &quot;SVGAnimatedPreserveAspectRatio.h&quot;
</span><span class="lines">@@ -32,9 +33,14 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+class SMILTimeContainer;
</ins><span class="cx"> class SVGAngle;
</span><ins>+class SVGLength;
+class SVGMatrix;
+class SVGNumber;
+class SVGRect;
+class SVGTransform;
</ins><span class="cx"> class SVGViewSpec;
</span><del>-class SMILTimeContainer;
</del><span class="cx"> 
</span><span class="cx"> class SVGSVGElement final : public SVGGraphicsElement, public SVGExternalResourcesRequired, public SVGFitToViewBox, public SVGZoomAndPan {
</span><span class="cx"> 
</span><span class="lines">@@ -55,7 +61,7 @@
</span><span class="cx">     const AtomicString&amp; contentStyleType() const;
</span><span class="cx">     void setContentStyleType(const AtomicString&amp;);
</span><span class="cx"> 
</span><del>-    FloatRect viewport() const;
</del><ins>+    Ref&lt;SVGRect&gt; viewport() const;
</ins><span class="cx"> 
</span><span class="cx">     float pixelUnitToMillimeterX() const;
</span><span class="cx">     float pixelUnitToMillimeterY() const;
</span><span class="lines">@@ -68,7 +74,8 @@
</span><span class="cx">     float currentScale() const;
</span><span class="cx">     void setCurrentScale(float);
</span><span class="cx"> 
</span><del>-    SVGPoint&amp; currentTranslate();
</del><ins>+    Ref&lt;SVGPoint&gt; currentTranslate();
+    FloatPoint currentTranslateValue();
</ins><span class="cx"> 
</span><span class="cx">     unsigned suspendRedraw(unsigned maxWaitMilliseconds);
</span><span class="cx">     void unsuspendRedraw(unsigned suspendHandleId);
</span><span class="lines">@@ -82,20 +89,20 @@
</span><span class="cx">     float getCurrentTime() const;
</span><span class="cx">     void setCurrentTime(float);
</span><span class="cx"> 
</span><del>-    Ref&lt;NodeList&gt; getIntersectionList(const FloatRect&amp;, SVGElement* referenceElement);
-    Ref&lt;NodeList&gt; getEnclosureList(const FloatRect&amp;, SVGElement* referenceElement);
-    static bool checkIntersection(const SVGElement*, const FloatRect&amp;);
-    static bool checkEnclosure(const SVGElement*, const FloatRect&amp;);
</del><ins>+    Ref&lt;NodeList&gt; getIntersectionList(SVGRect&amp;, SVGElement* referenceElement);
+    Ref&lt;NodeList&gt; getEnclosureList(SVGRect&amp;, SVGElement* referenceElement);
+    static bool checkIntersection(const SVGElement*, SVGRect&amp;);
+    static bool checkEnclosure(const SVGElement*, SVGRect&amp;);
</ins><span class="cx">     void deselectAll();
</span><span class="cx"> 
</span><del>-    static float createSVGNumber();
-    static SVGLength createSVGLength();
</del><ins>+    static Ref&lt;SVGNumber&gt; createSVGNumber();
+    static Ref&lt;SVGLength&gt; createSVGLength();
</ins><span class="cx">     static Ref&lt;SVGAngle&gt; createSVGAngle();
</span><del>-    static SVGPoint createSVGPoint();
-    static SVGMatrix createSVGMatrix();
-    static FloatRect createSVGRect();
-    static SVGTransform createSVGTransform();
-    static SVGTransform createSVGTransformFromMatrix(const SVGMatrix&amp;);
</del><ins>+    static Ref&lt;SVGPoint&gt; createSVGPoint();
+    static Ref&lt;SVGMatrix&gt; createSVGMatrix();
+    static Ref&lt;SVGRect&gt; createSVGRect();
+    static Ref&lt;SVGTransform&gt; createSVGTransform();
+    static Ref&lt;SVGTransform&gt; createSVGTransformFromMatrix(SVGMatrix&amp;);
</ins><span class="cx"> 
</span><span class="cx">     Element* getElementById(const AtomicString&amp;);
</span><span class="cx"> 
</span><span class="lines">@@ -145,12 +152,12 @@
</span><span class="cx"> 
</span><span class="cx">     Frame* frameForCurrentScale() const;
</span><span class="cx">     void inheritViewAttributes(const SVGViewElement&amp;);
</span><del>-    Ref&lt;NodeList&gt; collectIntersectionOrEnclosureList(const FloatRect&amp;, SVGElement*, bool (*checkFunction)(const SVGElement*, const FloatRect&amp;));
</del><ins>+    Ref&lt;NodeList&gt; collectIntersectionOrEnclosureList(SVGRect&amp;, SVGElement*, bool (*checkFunction)(const SVGElement*, SVGRect&amp;));
</ins><span class="cx"> 
</span><span class="cx">     bool m_useCurrentView { false };
</span><span class="cx">     SVGZoomAndPanType m_zoomAndPan { SVGZoomAndPanMagnify };
</span><span class="cx">     Ref&lt;SMILTimeContainer&gt; m_timeContainer;
</span><del>-    SVGPoint m_currentTranslate;
</del><ins>+    FloatPoint m_currentTranslate;
</ins><span class="cx">     RefPtr&lt;SVGViewSpec&gt; m_viewSpec;
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -159,7 +166,7 @@
</span><span class="cx">     return m_useCurrentView;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline SVGPoint&amp; SVGSVGElement::currentTranslate()
</del><ins>+inline FloatPoint SVGSVGElement::currentTranslateValue()
</ins><span class="cx"> {
</span><span class="cx">     return m_currentTranslate;
</span><span class="cx"> }
</span><span class="lines">@@ -184,9 +191,4 @@
</span><span class="cx">     return viewBoxIsValid() &amp;&amp; viewBox().isEmpty();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline float SVGSVGElement::createSVGNumber()
-{
-    return 0;
-}
-
</del><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGSVGElementidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGSVGElement.idl (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGSVGElement.idl        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGSVGElement.idl        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -31,7 +31,7 @@
</span><span class="cx">     readonly attribute SVGAnimatedLength height;
</span><span class="cx">     attribute DOMString contentScriptType;
</span><span class="cx">     attribute DOMString contentStyleType;
</span><del>-    readonly attribute SVGRect viewport;
</del><ins>+    [NewObject] readonly attribute SVGRect viewport;
</ins><span class="cx">     readonly attribute unrestricted float pixelUnitToMillimeterX;
</span><span class="cx">     readonly attribute unrestricted float pixelUnitToMillimeterY;
</span><span class="cx">     readonly attribute unrestricted float screenPixelToMillimeterX;
</span><span class="lines">@@ -39,7 +39,7 @@
</span><span class="cx">     readonly attribute boolean useCurrentView;
</span><span class="cx">     readonly attribute SVGViewSpec currentView;
</span><span class="cx">     attribute unrestricted float currentScale;
</span><del>-    readonly attribute SVGPoint currentTranslate;
</del><ins>+    [NewObject] readonly attribute SVGPoint currentTranslate;
</ins><span class="cx"> 
</span><span class="cx">     unsigned long suspendRedraw(optional unsigned long maxWaitMilliseconds = 0);
</span><span class="cx">     void unsuspendRedraw(optional unsigned long suspendHandleId = 0);
</span><span class="lines">@@ -62,14 +62,14 @@
</span><span class="cx"> 
</span><span class="cx">     void deselectAll();
</span><span class="cx"> 
</span><del>-    SVGNumber createSVGNumber();
-    SVGLength createSVGLength();
</del><ins>+    [NewObject] SVGNumber createSVGNumber();
+    [NewObject] SVGLength createSVGLength();
</ins><span class="cx">     [NewObject] SVGAngle createSVGAngle();
</span><del>-    SVGPoint createSVGPoint();
-    SVGMatrix createSVGMatrix();
-    SVGRect createSVGRect();
-    SVGTransform createSVGTransform();
-    SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix);
</del><ins>+    [NewObject] SVGPoint createSVGPoint();
+    [NewObject] SVGMatrix createSVGMatrix();
+    [NewObject] SVGRect createSVGRect();
+    [NewObject] SVGTransform createSVGTransform();
+    [NewObject] SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix);
</ins><span class="cx"> 
</span><span class="cx">     Element getElementById([RequiresExistingAtomicString] DOMString elementId);
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTextContentElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTextContentElement.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTextContentElement.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGTextContentElement.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -30,6 +30,8 @@
</span><span class="cx"> #include &quot;RenderSVGText.h&quot;
</span><span class="cx"> #include &quot;SVGDocumentExtensions.h&quot;
</span><span class="cx"> #include &quot;SVGNames.h&quot;
</span><ins>+#include &quot;SVGPoint.h&quot;
+#include &quot;SVGRect.h&quot;
</ins><span class="cx"> #include &quot;SVGTextQuery.h&quot;
</span><span class="cx"> #include &quot;XMLNames.h&quot;
</span><span class="cx"> #include &lt;wtf/NeverDestroyed.h&gt;
</span><span class="lines">@@ -77,7 +79,7 @@
</span><span class="cx">     SVGTextContentElement&amp; ownerType = downcast&lt;SVGTextContentElement&gt;(*contextElement);
</span><span class="cx">     if (!ownerType.m_textLength.shouldSynchronize)
</span><span class="cx">         return;
</span><del>-    AtomicString value(SVGPropertyTraits&lt;SVGLength&gt;::toString(ownerType.m_specifiedTextLength));
</del><ins>+    AtomicString value(SVGPropertyTraits&lt;SVGLengthValue&gt;::toString(ownerType.m_specifiedTextLength));
</ins><span class="cx">     ownerType.m_textLength.synchronize(&amp;ownerType, textLengthPropertyInfo()-&gt;attributeName, value);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -85,13 +87,13 @@
</span><span class="cx"> {
</span><span class="cx">     ASSERT(contextElement);
</span><span class="cx">     SVGTextContentElement&amp; ownerType = downcast&lt;SVGTextContentElement&gt;(*contextElement);
</span><del>-    return SVGAnimatedProperty::lookupOrCreateWrapper&lt;SVGTextContentElement, SVGAnimatedLength, SVGLength&gt;
</del><ins>+    return SVGAnimatedProperty::lookupOrCreateWrapper&lt;SVGTextContentElement, SVGAnimatedLength, SVGLengthValue&gt;
</ins><span class="cx">         (&amp;ownerType, textLengthPropertyInfo(), ownerType.m_textLength.value);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> Ref&lt;SVGAnimatedLength&gt; SVGTextContentElement::textLengthAnimated()
</span><span class="cx"> {
</span><del>-    static NeverDestroyed&lt;SVGLength&gt; defaultTextLength(LengthModeOther);
</del><ins>+    static NeverDestroyed&lt;SVGLengthValue&gt; defaultTextLength(LengthModeOther);
</ins><span class="cx">     if (m_specifiedTextLength == defaultTextLength)
</span><span class="cx">         m_textLength.value.newValueSpecifiedUnits(LengthTypeNumber, getComputedTextLength());
</span><span class="cx"> 
</span><span class="lines">@@ -121,28 +123,28 @@
</span><span class="cx">     return SVGTextQuery(renderer()).subStringLength(charnum, nchars);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ExceptionOr&lt;SVGPoint&gt; SVGTextContentElement::getStartPositionOfChar(unsigned charnum)
</del><ins>+ExceptionOr&lt;Ref&lt;SVGPoint&gt;&gt; SVGTextContentElement::getStartPositionOfChar(unsigned charnum)
</ins><span class="cx"> {
</span><span class="cx">     if (charnum &gt; getNumberOfChars())
</span><span class="cx">         return Exception { INDEX_SIZE_ERR };
</span><span class="cx"> 
</span><del>-    return SVGTextQuery(renderer()).startPositionOfCharacter(charnum);
</del><ins>+    return SVGPoint::create(SVGTextQuery(renderer()).startPositionOfCharacter(charnum));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-ExceptionOr&lt;SVGPoint&gt; SVGTextContentElement::getEndPositionOfChar(unsigned charnum)
</del><ins>+ExceptionOr&lt;Ref&lt;SVGPoint&gt;&gt; SVGTextContentElement::getEndPositionOfChar(unsigned charnum)
</ins><span class="cx"> {
</span><span class="cx">     if (charnum &gt; getNumberOfChars())
</span><span class="cx">         return Exception { INDEX_SIZE_ERR };
</span><span class="cx"> 
</span><del>-    return SVGTextQuery(renderer()).endPositionOfCharacter(charnum);
</del><ins>+    return SVGPoint::create(SVGTextQuery(renderer()).endPositionOfCharacter(charnum));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-ExceptionOr&lt;FloatRect&gt; SVGTextContentElement::getExtentOfChar(unsigned charnum)
</del><ins>+ExceptionOr&lt;Ref&lt;SVGRect&gt;&gt; SVGTextContentElement::getExtentOfChar(unsigned charnum)
</ins><span class="cx"> {
</span><span class="cx">     if (charnum &gt; getNumberOfChars())
</span><span class="cx">         return Exception { INDEX_SIZE_ERR };
</span><span class="cx"> 
</span><del>-    return SVGTextQuery(renderer()).extentOfCharacter(charnum);
</del><ins>+    return SVGRect::create(SVGTextQuery(renderer()).extentOfCharacter(charnum));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ExceptionOr&lt;float&gt; SVGTextContentElement::getRotationOfChar(unsigned charnum)
</span><span class="lines">@@ -153,10 +155,10 @@
</span><span class="cx">     return SVGTextQuery(renderer()).rotationOfCharacter(charnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-int SVGTextContentElement::getCharNumAtPosition(const SVGPoint&amp; point)
</del><ins>+int SVGTextContentElement::getCharNumAtPosition(SVGPoint&amp; point)
</ins><span class="cx"> {
</span><span class="cx">     document().updateLayoutIgnorePendingStylesheets();
</span><del>-    return SVGTextQuery(renderer()).characterNumberAtPosition(point);
</del><ins>+    return SVGTextQuery(renderer()).characterNumberAtPosition(point.propertyReference());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ExceptionOr&lt;void&gt; SVGTextContentElement::selectSubString(unsigned charnum, unsigned nchars)
</span><span class="lines">@@ -227,7 +229,7 @@
</span><span class="cx">         if (propertyValue &gt; 0)
</span><span class="cx">             setLengthAdjustBaseValue(propertyValue);
</span><span class="cx">     } else if (name == SVGNames::textLengthAttr)
</span><del>-        m_textLength.value = SVGLength::construct(LengthModeOther, value, parseError, ForbidNegativeLengths);
</del><ins>+        m_textLength.value = SVGLengthValue::construct(LengthModeOther, value, parseError, ForbidNegativeLengths);
</ins><span class="cx"> 
</span><span class="cx">     reportAttributeParsingError(parseError, name, value);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTextContentElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTextContentElement.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTextContentElement.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGTextContentElement.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -73,11 +73,11 @@
</span><span class="cx">     unsigned getNumberOfChars();
</span><span class="cx">     float getComputedTextLength();
</span><span class="cx">     ExceptionOr&lt;float&gt; getSubStringLength(unsigned charnum, unsigned nchars);
</span><del>-    ExceptionOr&lt;SVGPoint&gt; getStartPositionOfChar(unsigned charnum);
-    ExceptionOr&lt;SVGPoint&gt; getEndPositionOfChar(unsigned charnum);
-    ExceptionOr&lt;FloatRect&gt; getExtentOfChar(unsigned charnum);
</del><ins>+    ExceptionOr&lt;Ref&lt;SVGPoint&gt;&gt; getStartPositionOfChar(unsigned charnum);
+    ExceptionOr&lt;Ref&lt;SVGPoint&gt;&gt; getEndPositionOfChar(unsigned charnum);
+    ExceptionOr&lt;Ref&lt;SVGRect&gt;&gt; getExtentOfChar(unsigned charnum);
</ins><span class="cx">     ExceptionOr&lt;float&gt; getRotationOfChar(unsigned charnum);
</span><del>-    int getCharNumAtPosition(const SVGPoint&amp;);
</del><ins>+    int getCharNumAtPosition(SVGPoint&amp;);
</ins><span class="cx">     ExceptionOr&lt;void&gt; selectSubString(unsigned charnum, unsigned nchars);
</span><span class="cx"> 
</span><span class="cx">     static SVGTextContentElement* elementFromRenderer(RenderObject*);
</span><span class="lines">@@ -84,7 +84,7 @@
</span><span class="cx"> 
</span><span class="cx">     // textLength is not declared using the standard DECLARE_ANIMATED_LENGTH macro
</span><span class="cx">     // as its getter needs special handling (return getComputedTextLength(), instead of m_textLength).
</span><del>-    SVGLength&amp; specifiedTextLength() { return m_specifiedTextLength; }
</del><ins>+    SVGLengthValue&amp; specifiedTextLength() { return m_specifiedTextLength; }
</ins><span class="cx">     Ref&lt;SVGAnimatedLength&gt; textLengthAnimated();
</span><span class="cx">     static const SVGPropertyInfo* textLengthPropertyInfo();
</span><span class="cx"> 
</span><span class="lines">@@ -108,8 +108,8 @@
</span><span class="cx">     // Custom 'textLength' property
</span><span class="cx">     static void synchronizeTextLength(SVGElement* contextElement);
</span><span class="cx">     static Ref&lt;SVGAnimatedProperty&gt; lookupOrCreateTextLengthWrapper(SVGElement* contextElement);
</span><del>-    mutable SVGSynchronizableAnimatedProperty&lt;SVGLength&gt; m_textLength;
-    SVGLength m_specifiedTextLength;
</del><ins>+    mutable SVGSynchronizableAnimatedProperty&lt;SVGLengthValue&gt; m_textLength;
+    SVGLengthValue m_specifiedTextLength;
</ins><span class="cx">   
</span><span class="cx">     BEGIN_DECLARE_ANIMATED_PROPERTIES(SVGTextContentElement)
</span><span class="cx">         DECLARE_ANIMATED_ENUMERATION(LengthAdjust, lengthAdjust, SVGLengthAdjustType)
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTextContentElementidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTextContentElement.idl (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTextContentElement.idl        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGTextContentElement.idl        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -35,9 +35,9 @@
</span><span class="cx">     long getNumberOfChars();
</span><span class="cx">     unrestricted float getComputedTextLength();
</span><span class="cx">     [MayThrowException] unrestricted float getSubStringLength(optional unsigned long offset = 0, optional unsigned long length = 0);
</span><del>-    [MayThrowException] SVGPoint getStartPositionOfChar(optional unsigned long offset = 0);
-    [MayThrowException] SVGPoint getEndPositionOfChar(optional unsigned long offset = 0);
-    [MayThrowException] SVGRect getExtentOfChar(optional unsigned long offset = 0);
</del><ins>+    [MayThrowException, NewObject] SVGPoint getStartPositionOfChar(optional unsigned long offset = 0);
+    [MayThrowException, NewObject] SVGPoint getEndPositionOfChar(optional unsigned long offset = 0);
+    [MayThrowException, NewObject] SVGRect getExtentOfChar(optional unsigned long offset = 0);
</ins><span class="cx">     [MayThrowException] unrestricted float getRotationOfChar(optional unsigned long offset = 0);
</span><span class="cx">     long getCharNumAtPosition(SVGPoint point);
</span><span class="cx">     [MayThrowException] void selectSubString(optional unsigned long offset = 0, optional unsigned long length = 0);
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTextPathElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTextPathElement.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTextPathElement.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGTextPathElement.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -85,7 +85,7 @@
</span><span class="cx">     SVGParsingError parseError = NoError;
</span><span class="cx"> 
</span><span class="cx">     if (name == SVGNames::startOffsetAttr)
</span><del>-        setStartOffsetBaseValue(SVGLength::construct(LengthModeOther, value, parseError));
</del><ins>+        setStartOffsetBaseValue(SVGLengthValue::construct(LengthModeOther, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::methodAttr) {
</span><span class="cx">         SVGTextPathMethodType propertyValue = SVGPropertyTraits&lt;SVGTextPathMethodType&gt;::fromString(value);
</span><span class="cx">         if (propertyValue &gt; 0)
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTransformcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTransform.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTransform.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGTransform.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -1,239 +1,38 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2004, 2005 Nikolas Zimmermann &lt;zimmermann@kde.org&gt;
- * Copyright (C) 2004, 2005 Rob Buis &lt;buis@kde.org&gt;
</del><ins>+ * Copyright (C) 2016 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><del>- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
</del><ins>+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
</ins><span class="cx">  *
</span><del>- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
</del><ins>+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;SVGTransform.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;FloatConversion.h&quot;
-#include &quot;FloatPoint.h&quot;
-#include &quot;FloatSize.h&quot;
-#include &lt;wtf/MathExtras.h&gt;
-#include &lt;wtf/NeverDestroyed.h&gt;
-#include &lt;wtf/text/StringBuilder.h&gt;
-#include &lt;wtf/text/WTFString.h&gt;
</del><ins>+#include &quot;SVGMatrixTearOff.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-SVGTransform::SVGTransform()
-    : m_type(SVG_TRANSFORM_UNKNOWN)
-    , m_angle(0)
</del><ins>+Ref&lt;SVGMatrix&gt; SVGTransform::matrix()
</ins><span class="cx"> {
</span><ins>+    return SVGMatrixTearOff::create(*this, propertyReference().svgMatrix());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGTransform::SVGTransform(SVGTransformType type, ConstructionMode mode)
-    : m_type(type)
-    , m_angle(0)
-{
-    if (mode == ConstructZeroTransform)
-        m_matrix = AffineTransform(0, 0, 0, 0, 0, 0);
-}
-
-SVGTransform::SVGTransform(const AffineTransform&amp; matrix)
-    : m_type(SVG_TRANSFORM_MATRIX)
-    , m_angle(0)
-    , m_matrix(matrix)
-{
-}
-
-void SVGTransform::setMatrix(const AffineTransform&amp; matrix)
-{
-    m_type = SVG_TRANSFORM_MATRIX;
-    m_angle = 0;
-    m_matrix = matrix;
-}
-
-void SVGTransform::updateSVGMatrix()
-{
-    // The underlying matrix has been changed, alter the transformation type.
-    // Spec: In case the matrix object is changed directly (i.e., without using the methods on the SVGTransform interface itself)
-    // then the type of the SVGTransform changes to SVG_TRANSFORM_MATRIX.
-    m_type = SVG_TRANSFORM_MATRIX;
-    m_angle = 0;
-}
-
-void SVGTransform::setTranslate(float tx, float ty)
-{
-    m_type = SVG_TRANSFORM_TRANSLATE;
-    m_angle = 0;
-
-    m_matrix.makeIdentity();
-    m_matrix.translate(tx, ty);
-}
-
-FloatPoint SVGTransform::translate() const
-{
-    return FloatPoint::narrowPrecision(m_matrix.e(), m_matrix.f());
-}
-
-void SVGTransform::setScale(float sx, float sy)
-{
-    m_type = SVG_TRANSFORM_SCALE;
-    m_angle = 0;
-    m_center = FloatPoint();
-
-    m_matrix.makeIdentity();
-    m_matrix.scaleNonUniform(sx, sy);
-}
-
-FloatSize SVGTransform::scale() const
-{
-    return FloatSize::narrowPrecision(m_matrix.a(), m_matrix.d());
-}
-
-void SVGTransform::setRotate(float angle, float cx, float cy)
-{
-    m_type = SVG_TRANSFORM_ROTATE;
-    m_angle = angle;
-    m_center = FloatPoint(cx, cy);
-
-    // TODO: toString() implementation, which can show cx, cy (need to be stored?)
-    m_matrix.makeIdentity();
-    m_matrix.translate(cx, cy);
-    m_matrix.rotate(angle);
-    m_matrix.translate(-cx, -cy);
-}
-
-void SVGTransform::setSkewX(float angle)
-{
-    m_type = SVG_TRANSFORM_SKEWX;
-    m_angle = angle;
-
-    m_matrix.makeIdentity();
-    m_matrix.skewX(angle);
-}
-
-void SVGTransform::setSkewY(float angle)
-{
-    m_type = SVG_TRANSFORM_SKEWY;
-    m_angle = angle;
-
-    m_matrix.makeIdentity();
-    m_matrix.skewY(angle);
-}
-
-const String&amp; SVGTransform::transformTypePrefixForParsing(SVGTransformType type)
-{
-    switch (type) {
-    case SVG_TRANSFORM_UNKNOWN:
-        return emptyString();
-    case SVG_TRANSFORM_MATRIX: {
-        static NeverDestroyed&lt;String&gt; matrixString(ASCIILiteral(&quot;matrix(&quot;));
-        return matrixString;
-    }
-    case SVG_TRANSFORM_TRANSLATE: {
-        static NeverDestroyed&lt;String&gt; translateString(ASCIILiteral(&quot;translate(&quot;));
-        return translateString;
-    }
-    case SVG_TRANSFORM_SCALE: {
-        static NeverDestroyed&lt;String&gt; scaleString(ASCIILiteral(&quot;scale(&quot;));
-        return scaleString;
-    }
-    case SVG_TRANSFORM_ROTATE: {
-        static NeverDestroyed&lt;String&gt; rotateString(ASCIILiteral(&quot;rotate(&quot;));
-        return rotateString;
-    }    
-    case SVG_TRANSFORM_SKEWX: {
-        static NeverDestroyed&lt;String&gt; skewXString(ASCIILiteral(&quot;skewX(&quot;));
-        return skewXString;
-    }
-    case SVG_TRANSFORM_SKEWY: {
-        static NeverDestroyed&lt;String&gt; skewYString(ASCIILiteral(&quot;skewY(&quot;));
-        return skewYString;
-    }
-    }
-
-    ASSERT_NOT_REACHED();
-    return emptyString();
-}
-
-String SVGTransform::valueAsString() const
-{
-    const String&amp; prefix = transformTypePrefixForParsing(m_type);
-    switch (m_type) {
-    case SVG_TRANSFORM_UNKNOWN:
-        return prefix;
-    case SVG_TRANSFORM_MATRIX: {
-        StringBuilder builder;
-        builder.append(prefix);
-        builder.appendNumber(m_matrix.a());
-        builder.append(' ');
-        builder.appendNumber(m_matrix.b());
-        builder.append(' ');
-        builder.appendNumber(m_matrix.c());
-        builder.append(' ');
-        builder.appendNumber(m_matrix.d());
-        builder.append(' ');
-        builder.appendNumber(m_matrix.e());
-        builder.append(' ');
-        builder.appendNumber(m_matrix.f());
-        builder.append(')');
-        return builder.toString();
-    }
-    case SVG_TRANSFORM_TRANSLATE: {
-        StringBuilder builder;
-        builder.append(prefix);
-        builder.appendNumber(m_matrix.e());
-        builder.append(' ');
-        builder.appendNumber(m_matrix.f());
-        builder.append(')');
-        return builder.toString();
-    }
-    case SVG_TRANSFORM_SCALE: {
-        StringBuilder builder;
-        builder.append(prefix);
-        builder.appendNumber(m_matrix.xScale());
-        builder.append(' ');
-        builder.appendNumber(m_matrix.yScale());
-        builder.append(')');
-        return builder.toString();
-    }
-    case SVG_TRANSFORM_ROTATE: {
-        double angleInRad = deg2rad(m_angle);
-        double cosAngle = cos(angleInRad);
-        double sinAngle = sin(angleInRad);
-        float cx = narrowPrecisionToFloat(cosAngle != 1 ? (m_matrix.e() * (1 - cosAngle) - m_matrix.f() * sinAngle) / (1 - cosAngle) / 2 : 0);
-        float cy = narrowPrecisionToFloat(cosAngle != 1 ? (m_matrix.e() * sinAngle / (1 - cosAngle) + m_matrix.f()) / 2 : 0);
-        StringBuilder builder;
-        builder.append(prefix);
-        builder.appendNumber(m_angle);
-        if (cx || cy) {
-            builder.append(' ');
-            builder.appendNumber(cx);
-            builder.append(' ');
-            builder.appendNumber(cy);
-        }
-        builder.append(')');
-        return builder.toString();
-    }
-    case SVG_TRANSFORM_SKEWX:
-    case SVG_TRANSFORM_SKEWY: {
-        StringBuilder builder;
-        builder.append(prefix);
-        builder.appendNumber(m_angle);
-        builder.append(')');
-        return builder.toString();
-    }
-    }
-
-    ASSERT_NOT_REACHED();
-    return emptyString();
-}
-
</del><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTransformh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTransform.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTransform.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGTransform.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -1,95 +1,155 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2004, 2005, 2008 Nikolas Zimmermann &lt;zimmermann@kde.org&gt;
- * Copyright (C) 2004, 2005 Rob Buis &lt;buis@kde.org&gt;
</del><ins>+ * Copyright (C) 2016 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><del>- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
</del><ins>+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
</ins><span class="cx">  *
</span><del>- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
</del><ins>+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><del>-#include &quot;FloatPoint.h&quot;
</del><ins>+#include &quot;ExceptionCode.h&quot;
</ins><span class="cx"> #include &quot;SVGMatrix.h&quot;
</span><ins>+#include &quot;SVGPropertyTearOff.h&quot;
+#include &quot;SVGTransformValue.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class FloatSize;
-
-class SVGTransform {
</del><ins>+class SVGTransform : public SVGPropertyTearOff&lt;SVGTransformValue&gt; {
</ins><span class="cx"> public:
</span><del>-    enum SVGTransformType {
-        SVG_TRANSFORM_UNKNOWN = 0,
-        SVG_TRANSFORM_MATRIX = 1,
-        SVG_TRANSFORM_TRANSLATE = 2,
-        SVG_TRANSFORM_SCALE = 3,
-        SVG_TRANSFORM_ROTATE = 4,
-        SVG_TRANSFORM_SKEWX = 5,
-        SVG_TRANSFORM_SKEWY = 6
-    };
</del><ins>+    static Ref&lt;SVGTransform&gt; create(SVGAnimatedProperty* animatedProperty, SVGPropertyRole role, SVGTransformValue&amp; value)
+    {
+        ASSERT(animatedProperty);
+        return adoptRef(*new SVGTransform(animatedProperty, role, value));
+    }
</ins><span class="cx"> 
</span><del>-    enum ConstructionMode {
-        ConstructIdentityTransform,
-        ConstructZeroTransform
-    };
</del><ins>+    static Ref&lt;SVGTransform&gt; create(const SVGTransformValue&amp; initialValue = { })
+    {
+        return adoptRef(*new SVGTransform(initialValue));
+    }
</ins><span class="cx"> 
</span><del>-    SVGTransform();
-    SVGTransform(SVGTransformType, ConstructionMode = ConstructIdentityTransform);
-    explicit SVGTransform(const AffineTransform&amp;);
</del><ins>+    static Ref&lt;SVGTransform&gt; create(const SVGTransformValue* initialValue)
+    {
+        return adoptRef(*new SVGTransform(initialValue));
+    }
</ins><span class="cx"> 
</span><del>-    SVGTransformType type() const { return m_type; }
</del><ins>+    template&lt;typename T&gt; static ExceptionOr&lt;Ref&lt;SVGTransform&gt;&gt; create(ExceptionOr&lt;T&gt;&amp;&amp; initialValue)
+    {
+        if (initialValue.hasException())
+            return initialValue.releaseException();
+        return create(initialValue.releaseReturnValue());
+    }
</ins><span class="cx"> 
</span><del>-    SVGMatrix&amp; svgMatrix() { return static_cast&lt;SVGMatrix&amp;&gt;(m_matrix); }
-    AffineTransform matrix() const { return m_matrix; }
-    void updateSVGMatrix();
</del><ins>+    unsigned short type()
+    {
+        return propertyReference().type();
+    }
</ins><span class="cx"> 
</span><del>-    float angle() const { return m_angle; }
-    FloatPoint rotationCenter() const { return m_center; }
</del><ins>+    Ref&lt;SVGMatrix&gt; matrix();
</ins><span class="cx"> 
</span><del>-    void setMatrix(const AffineTransform&amp;);
-    void setTranslate(float tx, float ty);
-    void setScale(float sx, float sy);
-    void setRotate(float angle, float cx, float cy);
-    void setSkewX(float angle);
-    void setSkewY(float angle);
-    
-    // Internal use only (animation system)
-    FloatPoint translate() const;
-    FloatSize scale() const;
</del><ins>+    float angle()
+    {
+        return propertyReference().angle();
+    }
</ins><span class="cx"> 
</span><del>-    bool isValid() const { return m_type != SVG_TRANSFORM_UNKNOWN; }
-    String valueAsString() const;
</del><ins>+    ExceptionOr&lt;void&gt; setMatrix(SVGMatrix&amp; matrix)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
</ins><span class="cx"> 
</span><del>-    static const String&amp; transformTypePrefixForParsing(SVGTransformType);
</del><ins>+        propertyReference().setMatrix(matrix.propertyReference());
+        commitChange();
</ins><span class="cx"> 
</span><ins>+        return { };
+    }
+
+    ExceptionOr&lt;void&gt; setTranslate(float tx, float ty)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        propertyReference().setTranslate(tx, ty);
+        commitChange();
+
+        return { };
+    }
+
+    ExceptionOr&lt;void&gt; setScale(float sx, float sy)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        propertyReference().setScale(sx, sy);
+        commitChange();
+
+        return { };
+    }
+
+    ExceptionOr&lt;void&gt; setRotate(float angle, float cx, float cy)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        propertyReference().setRotate(angle, cx, cy);
+        commitChange();
+
+        return { };
+    }
+
+    ExceptionOr&lt;void&gt; setSkewX(float angle)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        propertyReference().setSkewX(angle);
+        commitChange();
+
+        return { };
+    }
+
+    ExceptionOr&lt;void&gt; setSkewY(float angle)
+    {
+        if (isReadOnly())
+            return Exception { NO_MODIFICATION_ALLOWED_ERR };
+
+        propertyReference().setSkewY(angle);
+        commitChange();
+
+        return { };
+    }
+
</ins><span class="cx"> private:
</span><del>-    friend bool operator==(const SVGTransform&amp; a, const SVGTransform&amp; b);
</del><ins>+    SVGTransform(SVGAnimatedProperty* animatedProperty, SVGPropertyRole role, SVGTransformValue&amp; value)
+        : SVGPropertyTearOff&lt;SVGTransformValue&gt;(animatedProperty, role, value)
+    {
+    }
</ins><span class="cx"> 
</span><del>-    SVGTransformType m_type;
-    float m_angle;
-    FloatPoint m_center;
-    AffineTransform m_matrix;
</del><ins>+    explicit SVGTransform(const SVGTransformValue&amp; initialValue)
+        : SVGPropertyTearOff&lt;SVGTransformValue&gt;(initialValue)
+    {
+    }
+
+    explicit SVGTransform(const SVGTransformValue* initialValue)
+        : SVGPropertyTearOff&lt;SVGTransformValue&gt;(initialValue)
+    {
+    }
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-inline bool operator==(const SVGTransform&amp; a, const SVGTransform&amp; b)
-{
-    return a.m_type == b.m_type &amp;&amp; a.m_angle == b.m_angle &amp;&amp; a.m_matrix == b.m_matrix;
-}
-
-inline bool operator!=(const SVGTransform&amp; a, const SVGTransform&amp; b)
-{
-    return !(a == b);
-}
-
</del><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTransformidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTransform.idl (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTransform.idl        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGTransform.idl        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -19,7 +19,9 @@
</span><span class="cx">  * Boston, MA 02110-1301, USA.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-interface SVGTransform { 
</del><ins>+[
+    ConstantsScope=SVGTransformValue
+] interface SVGTransform { 
</ins><span class="cx">     // Transform Types
</span><span class="cx">     const unsigned short SVG_TRANSFORM_UNKNOWN = 0;
</span><span class="cx">     const unsigned short SVG_TRANSFORM_MATRIX = 1;
</span><span class="lines">@@ -30,14 +32,14 @@
</span><span class="cx">     const unsigned short SVG_TRANSFORM_SKEWY = 6;
</span><span class="cx"> 
</span><span class="cx">     readonly attribute unsigned short type;
</span><del>-    [ImplementedAs=svgMatrix] readonly attribute SVGMatrix matrix;
</del><ins>+    [NewObject] readonly attribute SVGMatrix matrix;
</ins><span class="cx">     readonly attribute unrestricted float angle;
</span><span class="cx"> 
</span><del>-    void setMatrix(SVGMatrix matrix);
-    void setTranslate(unrestricted float tx, unrestricted float ty);
-    void setScale(unrestricted float sx, unrestricted float sy);
-    void setRotate(unrestricted float angle, unrestricted float cx, unrestricted float cy);
-    void setSkewX(unrestricted float angle);
-    void setSkewY(unrestricted float angle);
</del><ins>+    [MayThrowException] void setMatrix(SVGMatrix matrix);
+    [MayThrowException] void setTranslate(unrestricted float tx, unrestricted float ty);
+    [MayThrowException] void setScale(unrestricted float sx, unrestricted float sy);
+    [MayThrowException] void setRotate(unrestricted float angle, unrestricted float cx, unrestricted float cy);
+    [MayThrowException] void setSkewX(unrestricted float angle);
+    [MayThrowException] void setSkewY(unrestricted float angle);
</ins><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTransformDistancecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTransformDistance.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTransformDistance.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGTransformDistance.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -23,7 +23,7 @@
</span><span class="cx"> #include &quot;FloatConversion.h&quot;
</span><span class="cx"> #include &quot;FloatPoint.h&quot;
</span><span class="cx"> #include &quot;FloatSize.h&quot;
</span><del>-#include &quot;SVGTransform.h&quot;
</del><ins>+#include &quot;SVGTransformValue.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> #include &lt;math.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -30,7 +30,7 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx">     
</span><span class="cx"> SVGTransformDistance::SVGTransformDistance()
</span><del>-    : m_type(SVGTransform::SVG_TRANSFORM_UNKNOWN)
</del><ins>+    : m_type(SVGTransformValue::SVG_TRANSFORM_UNKNOWN)
</ins><span class="cx">     , m_angle(0)
</span><span class="cx">     , m_cx(0)
</span><span class="cx">     , m_cy(0)
</span><span class="lines">@@ -37,7 +37,7 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGTransformDistance::SVGTransformDistance(SVGTransform::SVGTransformType type, float angle, float cx, float cy, const AffineTransform&amp; transform)
</del><ins>+SVGTransformDistance::SVGTransformDistance(SVGTransformValue::SVGTransformType type, float angle, float cx, float cy, const AffineTransform&amp; transform)
</ins><span class="cx">     : m_type(type)
</span><span class="cx">     , m_angle(angle)
</span><span class="cx">     , m_cx(cx)
</span><span class="lines">@@ -46,7 +46,7 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGTransformDistance::SVGTransformDistance(const SVGTransform&amp; fromSVGTransform, const SVGTransform&amp; toSVGTransform)
</del><ins>+SVGTransformDistance::SVGTransformDistance(const SVGTransformValue&amp; fromSVGTransform, const SVGTransformValue&amp; toSVGTransform)
</ins><span class="cx">     : m_type(fromSVGTransform.type())
</span><span class="cx">     , m_angle(0)
</span><span class="cx">     , m_cx(0)
</span><span class="lines">@@ -55,14 +55,14 @@
</span><span class="cx">     ASSERT(m_type == toSVGTransform.type());
</span><span class="cx">     
</span><span class="cx">     switch (m_type) {
</span><del>-    case SVGTransform::SVG_TRANSFORM_MATRIX:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_MATRIX:
</ins><span class="cx">         ASSERT_NOT_REACHED();
</span><span class="cx"> #if ASSERT_DISABLED
</span><span class="cx">         FALLTHROUGH;
</span><span class="cx"> #endif
</span><del>-    case SVGTransform::SVG_TRANSFORM_UNKNOWN:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_UNKNOWN:
</ins><span class="cx">         break;
</span><del>-    case SVGTransform::SVG_TRANSFORM_ROTATE: {
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_ROTATE: {
</ins><span class="cx">         FloatSize centerDistance = toSVGTransform.rotationCenter() - fromSVGTransform.rotationCenter();
</span><span class="cx">         m_angle = toSVGTransform.angle() - fromSVGTransform.angle();
</span><span class="cx">         m_cx = centerDistance.width();
</span><span class="lines">@@ -69,19 +69,19 @@
</span><span class="cx">         m_cy = centerDistance.height();
</span><span class="cx">         break;
</span><span class="cx">     }
</span><del>-    case SVGTransform::SVG_TRANSFORM_TRANSLATE: {
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_TRANSLATE: {
</ins><span class="cx">         FloatSize translationDistance = toSVGTransform.translate() - fromSVGTransform.translate();
</span><span class="cx">         m_transform.translate(translationDistance.width(), translationDistance.height());
</span><span class="cx">         break;
</span><span class="cx">     }
</span><del>-    case SVGTransform::SVG_TRANSFORM_SCALE: {
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_SCALE: {
</ins><span class="cx">         float scaleX = toSVGTransform.scale().width() - fromSVGTransform.scale().width();        
</span><span class="cx">         float scaleY = toSVGTransform.scale().height() - fromSVGTransform.scale().height();
</span><span class="cx">         m_transform.scaleNonUniform(scaleX, scaleY);
</span><span class="cx">         break;
</span><span class="cx">     }
</span><del>-    case SVGTransform::SVG_TRANSFORM_SKEWX:
-    case SVGTransform::SVG_TRANSFORM_SKEWY:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_SKEWX:
+    case SVGTransformValue::SVG_TRANSFORM_SKEWY:
</ins><span class="cx">         m_angle = toSVGTransform.angle() - fromSVGTransform.angle();
</span><span class="cx">         break;
</span><span class="cx">     }
</span><span class="lines">@@ -90,25 +90,25 @@
</span><span class="cx"> SVGTransformDistance SVGTransformDistance::scaledDistance(float scaleFactor) const
</span><span class="cx"> {
</span><span class="cx">     switch (m_type) {
</span><del>-    case SVGTransform::SVG_TRANSFORM_MATRIX:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_MATRIX:
</ins><span class="cx">         ASSERT_NOT_REACHED();
</span><span class="cx"> #if ASSERT_DISABLED
</span><span class="cx">         FALLTHROUGH;
</span><span class="cx"> #endif
</span><del>-    case SVGTransform::SVG_TRANSFORM_UNKNOWN:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_UNKNOWN:
</ins><span class="cx">         return SVGTransformDistance();
</span><del>-    case SVGTransform::SVG_TRANSFORM_ROTATE:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_ROTATE:
</ins><span class="cx">         return SVGTransformDistance(m_type, m_angle * scaleFactor, m_cx * scaleFactor, m_cy * scaleFactor, AffineTransform());
</span><del>-    case SVGTransform::SVG_TRANSFORM_SCALE:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_SCALE:
</ins><span class="cx">         return SVGTransformDistance(m_type, m_angle * scaleFactor, m_cx * scaleFactor, m_cy * scaleFactor, AffineTransform(m_transform).scale(scaleFactor));
</span><del>-    case SVGTransform::SVG_TRANSFORM_TRANSLATE: {
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_TRANSLATE: {
</ins><span class="cx">         AffineTransform newTransform(m_transform);
</span><span class="cx">         newTransform.setE(m_transform.e() * scaleFactor);
</span><span class="cx">         newTransform.setF(m_transform.f() * scaleFactor);
</span><span class="cx">         return SVGTransformDistance(m_type, 0, 0, 0, newTransform);
</span><span class="cx">     }
</span><del>-    case SVGTransform::SVG_TRANSFORM_SKEWX:
-    case SVGTransform::SVG_TRANSFORM_SKEWY:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_SKEWX:
+    case SVGTransformValue::SVG_TRANSFORM_SKEWY:
</ins><span class="cx">         return SVGTransformDistance(m_type, m_angle * scaleFactor, m_cx * scaleFactor, m_cy * scaleFactor, AffineTransform());
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -116,31 +116,31 @@
</span><span class="cx">     return SVGTransformDistance();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGTransform SVGTransformDistance::addSVGTransforms(const SVGTransform&amp; first, const SVGTransform&amp; second, unsigned repeatCount)
</del><ins>+SVGTransformValue SVGTransformDistance::addSVGTransforms(const SVGTransformValue&amp; first, const SVGTransformValue&amp; second, unsigned repeatCount)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(first.type() == second.type());
</span><span class="cx">     
</span><del>-    SVGTransform transform;
</del><ins>+    SVGTransformValue transform;
</ins><span class="cx">     
</span><span class="cx">     switch (first.type()) {
</span><del>-    case SVGTransform::SVG_TRANSFORM_MATRIX:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_MATRIX:
</ins><span class="cx">         ASSERT_NOT_REACHED();
</span><span class="cx"> #if ASSERT_DISABLED
</span><span class="cx">         FALLTHROUGH;
</span><span class="cx"> #endif
</span><del>-    case SVGTransform::SVG_TRANSFORM_UNKNOWN:
-        return SVGTransform();
-    case SVGTransform::SVG_TRANSFORM_ROTATE: {
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_UNKNOWN:
+        return { };
+    case SVGTransformValue::SVG_TRANSFORM_ROTATE: {
</ins><span class="cx">         transform.setRotate(first.angle() + second.angle() * repeatCount, first.rotationCenter().x() + second.rotationCenter().x() * repeatCount, first.rotationCenter().y() + second.rotationCenter().y() * repeatCount);
</span><span class="cx">         return transform;
</span><span class="cx">     }
</span><del>-    case SVGTransform::SVG_TRANSFORM_TRANSLATE: {
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_TRANSLATE: {
</ins><span class="cx">         float dx = first.translate().x() + second.translate().x() * repeatCount;
</span><span class="cx">         float dy = first.translate().y() + second.translate().y() * repeatCount;
</span><span class="cx">         transform.setTranslate(dx, dy);
</span><span class="cx">         return transform;
</span><span class="cx">     }
</span><del>-    case SVGTransform::SVG_TRANSFORM_SCALE: {
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_SCALE: {
</ins><span class="cx">         FloatSize scale = second.scale();
</span><span class="cx">         scale.scale(repeatCount);
</span><span class="cx">         scale += first.scale();
</span><span class="lines">@@ -147,58 +147,58 @@
</span><span class="cx">         transform.setScale(scale.width(), scale.height());
</span><span class="cx">         return transform;
</span><span class="cx">     }
</span><del>-    case SVGTransform::SVG_TRANSFORM_SKEWX:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_SKEWX:
</ins><span class="cx">         transform.setSkewX(first.angle() + second.angle() * repeatCount);
</span><span class="cx">         return transform;
</span><del>-    case SVGTransform::SVG_TRANSFORM_SKEWY:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_SKEWY:
</ins><span class="cx">         transform.setSkewY(first.angle() + second.angle() * repeatCount);
</span><span class="cx">         return transform;
</span><span class="cx">     }
</span><span class="cx">     ASSERT_NOT_REACHED();
</span><del>-    return SVGTransform();
</del><ins>+    return { };
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGTransform SVGTransformDistance::addToSVGTransform(const SVGTransform&amp; transform) const
</del><ins>+SVGTransformValue SVGTransformDistance::addToSVGTransform(const SVGTransformValue&amp; transform) const
</ins><span class="cx"> {
</span><del>-    ASSERT(m_type == transform.type() || transform == SVGTransform());
</del><ins>+    ASSERT(m_type == transform.type() || transform == SVGTransformValue());
</ins><span class="cx">     
</span><del>-    SVGTransform newTransform(transform);
</del><ins>+    SVGTransformValue newTransform(transform);
</ins><span class="cx">     
</span><span class="cx">     switch (m_type) {
</span><del>-    case SVGTransform::SVG_TRANSFORM_MATRIX:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_MATRIX:
</ins><span class="cx">         ASSERT_NOT_REACHED();
</span><span class="cx"> #if ASSERT_DISABLED
</span><span class="cx">         FALLTHROUGH;
</span><span class="cx"> #endif
</span><del>-    case SVGTransform::SVG_TRANSFORM_UNKNOWN:
-        return SVGTransform();
-    case SVGTransform::SVG_TRANSFORM_TRANSLATE: {
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_UNKNOWN:
+        return { };
+    case SVGTransformValue::SVG_TRANSFORM_TRANSLATE: {
</ins><span class="cx">         FloatPoint translation = transform.translate();
</span><span class="cx">         translation += FloatSize::narrowPrecision(m_transform.e(), m_transform.f());
</span><span class="cx">         newTransform.setTranslate(translation.x(), translation.y());
</span><span class="cx">         return newTransform;
</span><span class="cx">     }
</span><del>-    case SVGTransform::SVG_TRANSFORM_SCALE: {
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_SCALE: {
</ins><span class="cx">         FloatSize scale = transform.scale();
</span><span class="cx">         scale += FloatSize::narrowPrecision(m_transform.a(), m_transform.d());
</span><span class="cx">         newTransform.setScale(scale.width(), scale.height());
</span><span class="cx">         return newTransform;
</span><span class="cx">     }
</span><del>-    case SVGTransform::SVG_TRANSFORM_ROTATE: {
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_ROTATE: {
</ins><span class="cx">         FloatPoint center = transform.rotationCenter();
</span><span class="cx">         newTransform.setRotate(transform.angle() + m_angle, center.x() + m_cx, center.y() + m_cy);
</span><span class="cx">         return newTransform;
</span><span class="cx">     }
</span><del>-    case SVGTransform::SVG_TRANSFORM_SKEWX:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_SKEWX:
</ins><span class="cx">         newTransform.setSkewX(transform.angle() + m_angle);
</span><span class="cx">         return newTransform;
</span><del>-    case SVGTransform::SVG_TRANSFORM_SKEWY:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_SKEWY:
</ins><span class="cx">         newTransform.setSkewY(transform.angle() + m_angle);
</span><span class="cx">         return newTransform;
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     ASSERT_NOT_REACHED();
</span><del>-    return SVGTransform();
</del><ins>+    return { };
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool SVGTransformDistance::isZero() const
</span><span class="lines">@@ -209,21 +209,21 @@
</span><span class="cx"> float SVGTransformDistance::distance() const
</span><span class="cx"> {
</span><span class="cx">     switch (m_type) {
</span><del>-    case SVGTransform::SVG_TRANSFORM_MATRIX:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_MATRIX:
</ins><span class="cx">         ASSERT_NOT_REACHED();
</span><span class="cx"> #if ASSERT_DISABLED
</span><span class="cx">         FALLTHROUGH;
</span><span class="cx"> #endif
</span><del>-    case SVGTransform::SVG_TRANSFORM_UNKNOWN:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_UNKNOWN:
</ins><span class="cx">         return 0;
</span><del>-    case SVGTransform::SVG_TRANSFORM_ROTATE:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_ROTATE:
</ins><span class="cx">         return sqrtf(m_angle * m_angle + m_cx * m_cx + m_cy * m_cy);
</span><del>-    case SVGTransform::SVG_TRANSFORM_SCALE:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_SCALE:
</ins><span class="cx">         return static_cast&lt;float&gt;(sqrt(m_transform.a() * m_transform.a() + m_transform.d() * m_transform.d()));
</span><del>-    case SVGTransform::SVG_TRANSFORM_TRANSLATE:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_TRANSLATE:
</ins><span class="cx">         return static_cast&lt;float&gt;(sqrt(m_transform.e() * m_transform.e() + m_transform.f() * m_transform.f()));
</span><del>-    case SVGTransform::SVG_TRANSFORM_SKEWX:
-    case SVGTransform::SVG_TRANSFORM_SKEWY:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_SKEWX:
+    case SVGTransformValue::SVG_TRANSFORM_SKEWY:
</ins><span class="cx">         return m_angle;
</span><span class="cx">     }
</span><span class="cx">     ASSERT_NOT_REACHED();
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTransformDistanceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTransformDistance.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTransformDistance.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGTransformDistance.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -19,7 +19,7 @@
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><del>-#include &quot;SVGTransform.h&quot;
</del><ins>+#include &quot;SVGTransformValue.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx">     
</span><span class="lines">@@ -28,20 +28,20 @@
</span><span class="cx"> class SVGTransformDistance {
</span><span class="cx"> public:
</span><span class="cx">     SVGTransformDistance();
</span><del>-    SVGTransformDistance(const SVGTransform&amp; fromTransform, const SVGTransform&amp; toTransform);
</del><ins>+    SVGTransformDistance(const SVGTransformValue&amp; fromTransform, const SVGTransformValue&amp; toTransform);
</ins><span class="cx">     
</span><span class="cx">     SVGTransformDistance scaledDistance(float scaleFactor) const;
</span><del>-    SVGTransform addToSVGTransform(const SVGTransform&amp;) const;
</del><ins>+    SVGTransformValue addToSVGTransform(const SVGTransformValue&amp;) const;
</ins><span class="cx"> 
</span><del>-    static SVGTransform addSVGTransforms(const SVGTransform&amp;, const SVGTransform&amp;, unsigned repeatCount = 1);
</del><ins>+    static SVGTransformValue addSVGTransforms(const SVGTransformValue&amp;, const SVGTransformValue&amp;, unsigned repeatCount = 1);
</ins><span class="cx">     
</span><span class="cx">     bool isZero() const;
</span><span class="cx">     
</span><span class="cx">     float distance() const;
</span><span class="cx"> private:
</span><del>-    SVGTransformDistance(SVGTransform::SVGTransformType, float angle, float cx, float cy, const AffineTransform&amp;);
</del><ins>+    SVGTransformDistance(SVGTransformValue::SVGTransformType, float angle, float cx, float cy, const AffineTransform&amp;);
</ins><span class="cx">         
</span><del>-    SVGTransform::SVGTransformType m_type;
</del><ins>+    SVGTransformValue::SVGTransformType m_type;
</ins><span class="cx">     float m_angle;
</span><span class="cx">     float m_cx;
</span><span class="cx">     float m_cy;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTransformListcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTransformList.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTransformList.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGTransformList.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -23,27 +23,26 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;AffineTransform.h&quot;
</span><span class="cx"> #include &quot;SVGSVGElement.h&quot;
</span><del>-#include &quot;SVGTransform.h&quot;
</del><span class="cx"> #include &quot;SVGTransformable.h&quot;
</span><span class="cx"> #include &lt;wtf/text/StringBuilder.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-SVGTransform SVGTransformList::createSVGTransformFromMatrix(const SVGMatrix&amp; matrix) const
</del><ins>+Ref&lt;SVGTransform&gt; SVGTransformList::createSVGTransformFromMatrix(SVGMatrix&amp; matrix) const
</ins><span class="cx"> {
</span><span class="cx">     return SVGSVGElement::createSVGTransformFromMatrix(matrix);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGTransform SVGTransformList::consolidate()
</del><ins>+Ref&lt;SVGTransform&gt; SVGTransformList::consolidate()
</ins><span class="cx"> {
</span><span class="cx">     AffineTransform matrix;
</span><span class="cx">     if (!concatenate(matrix))
</span><del>-        return SVGTransform();
</del><ins>+        return SVGTransform::create();
</ins><span class="cx"> 
</span><del>-    SVGTransform transform(matrix);
</del><ins>+    SVGTransformValue transform(matrix);
</ins><span class="cx">     clear();
</span><span class="cx">     append(transform);
</span><del>-    return transform;
</del><ins>+    return SVGTransform::create(transform);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool SVGTransformList::concatenate(AffineTransform&amp; result) const
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTransformListh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTransformList.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTransformList.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGTransformList.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -26,13 +26,10 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-template&lt;typename T&gt; 
-class SVGPropertyTearOff;
-
-class SVGTransformList final : public Vector&lt;SVGTransform, 1&gt; {
</del><ins>+class SVGTransformList final : public Vector&lt;SVGTransformValue, 1&gt; {
</ins><span class="cx"> public:
</span><del>-    SVGTransform createSVGTransformFromMatrix(const SVGMatrix&amp;) const;
-    SVGTransform consolidate();
</del><ins>+    Ref&lt;SVGTransform&gt; createSVGTransformFromMatrix(SVGMatrix&amp;) const;
+    Ref&lt;SVGTransform&gt; consolidate();
</ins><span class="cx"> 
</span><span class="cx">     bool concatenate(AffineTransform&amp; result) const;
</span><span class="cx">  
</span><span class="lines">@@ -41,11 +38,11 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> template&lt;&gt; struct SVGPropertyTraits&lt;SVGTransformList&gt; {
</span><del>-    static SVGTransformList initialValue() { return SVGTransformList(); }
</del><ins>+    static SVGTransformList initialValue() { return { }; }
</ins><span class="cx">     static String toString(const SVGTransformList&amp; type) { return type.valueAsString(); }
</span><span class="cx"> 
</span><del>-    using ListItemType = SVGTransform;
-    using ListItemTearOff = SVGPropertyTearOff&lt;SVGTransform&gt;;
</del><ins>+    using ListItemType = SVGTransformValue;
+    using ListItemTearOff = SVGTransform;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTransformListidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTransformList.idl (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTransformList.idl        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGTransformList.idl        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -35,7 +35,6 @@
</span><span class="cx">     [MayThrowException] SVGTransform removeItem(unsigned long index);
</span><span class="cx">     [MayThrowException] SVGTransform appendItem(SVGTransform item);
</span><span class="cx"> 
</span><del>-    [MayThrowException] SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix);
-
-    [MayThrowException] SVGTransform consolidate();
</del><ins>+    [MayThrowException, NewObject] SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix);
+    [MayThrowException, NewObject] SVGTransform consolidate();
</ins><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTransformValuecpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/svg/SVGTransformValue.cpp (0 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTransformValue.cpp                                (rev 0)
+++ trunk/Source/WebCore/svg/SVGTransformValue.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -0,0 +1,235 @@
</span><ins>+/*
+ * Copyright (C) 2004, 2005 Nikolas Zimmermann &lt;zimmermann@kde.org&gt;
+ * Copyright (C) 2004, 2005 Rob Buis &lt;buis@kde.org&gt;
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include &quot;config.h&quot;
+#include &quot;SVGTransformValue.h&quot;
+
+#include &quot;FloatConversion.h&quot;
+#include &quot;FloatPoint.h&quot;
+#include &quot;FloatSize.h&quot;
+#include &lt;wtf/MathExtras.h&gt;
+#include &lt;wtf/NeverDestroyed.h&gt;
+#include &lt;wtf/text/StringBuilder.h&gt;
+#include &lt;wtf/text/WTFString.h&gt;
+
+namespace WebCore {
+
+SVGTransformValue::SVGTransformValue()
+{
+}
+
+SVGTransformValue::SVGTransformValue(SVGTransformType type, ConstructionMode mode)
+    : m_type(type)
+{
+    if (mode == ConstructZeroTransform)
+        m_matrix = AffineTransform(0, 0, 0, 0, 0, 0);
+}
+
+SVGTransformValue::SVGTransformValue(const AffineTransform&amp; matrix)
+    : m_type(SVG_TRANSFORM_MATRIX)
+    , m_matrix(matrix)
+{
+}
+
+void SVGTransformValue::setMatrix(const AffineTransform&amp; matrix)
+{
+    m_type = SVG_TRANSFORM_MATRIX;
+    m_angle = 0;
+    m_matrix = matrix;
+}
+
+void SVGTransformValue::updateSVGMatrix()
+{
+    // The underlying matrix has been changed, alter the transformation type.
+    // Spec: In case the matrix object is changed directly (i.e., without using the methods on the SVGTransform interface itself)
+    // then the type of the SVGTransform changes to SVG_TRANSFORM_MATRIX.
+    m_type = SVG_TRANSFORM_MATRIX;
+    m_angle = 0;
+}
+
+void SVGTransformValue::setTranslate(float tx, float ty)
+{
+    m_type = SVG_TRANSFORM_TRANSLATE;
+    m_angle = 0;
+
+    m_matrix.makeIdentity();
+    m_matrix.translate(tx, ty);
+}
+
+FloatPoint SVGTransformValue::translate() const
+{
+    return FloatPoint::narrowPrecision(m_matrix.e(), m_matrix.f());
+}
+
+void SVGTransformValue::setScale(float sx, float sy)
+{
+    m_type = SVG_TRANSFORM_SCALE;
+    m_angle = 0;
+    m_center = FloatPoint();
+
+    m_matrix.makeIdentity();
+    m_matrix.scaleNonUniform(sx, sy);
+}
+
+FloatSize SVGTransformValue::scale() const
+{
+    return FloatSize::narrowPrecision(m_matrix.a(), m_matrix.d());
+}
+
+void SVGTransformValue::setRotate(float angle, float cx, float cy)
+{
+    m_type = SVG_TRANSFORM_ROTATE;
+    m_angle = angle;
+    m_center = FloatPoint(cx, cy);
+
+    // TODO: toString() implementation, which can show cx, cy (need to be stored?)
+    m_matrix.makeIdentity();
+    m_matrix.translate(cx, cy);
+    m_matrix.rotate(angle);
+    m_matrix.translate(-cx, -cy);
+}
+
+void SVGTransformValue::setSkewX(float angle)
+{
+    m_type = SVG_TRANSFORM_SKEWX;
+    m_angle = angle;
+
+    m_matrix.makeIdentity();
+    m_matrix.skewX(angle);
+}
+
+void SVGTransformValue::setSkewY(float angle)
+{
+    m_type = SVG_TRANSFORM_SKEWY;
+    m_angle = angle;
+
+    m_matrix.makeIdentity();
+    m_matrix.skewY(angle);
+}
+
+const String&amp; SVGTransformValue::transformTypePrefixForParsing(SVGTransformType type)
+{
+    switch (type) {
+    case SVG_TRANSFORM_UNKNOWN:
+        return emptyString();
+    case SVG_TRANSFORM_MATRIX: {
+        static NeverDestroyed&lt;String&gt; matrixString(ASCIILiteral(&quot;matrix(&quot;));
+        return matrixString;
+    }
+    case SVG_TRANSFORM_TRANSLATE: {
+        static NeverDestroyed&lt;String&gt; translateString(ASCIILiteral(&quot;translate(&quot;));
+        return translateString;
+    }
+    case SVG_TRANSFORM_SCALE: {
+        static NeverDestroyed&lt;String&gt; scaleString(ASCIILiteral(&quot;scale(&quot;));
+        return scaleString;
+    }
+    case SVG_TRANSFORM_ROTATE: {
+        static NeverDestroyed&lt;String&gt; rotateString(ASCIILiteral(&quot;rotate(&quot;));
+        return rotateString;
+    }    
+    case SVG_TRANSFORM_SKEWX: {
+        static NeverDestroyed&lt;String&gt; skewXString(ASCIILiteral(&quot;skewX(&quot;));
+        return skewXString;
+    }
+    case SVG_TRANSFORM_SKEWY: {
+        static NeverDestroyed&lt;String&gt; skewYString(ASCIILiteral(&quot;skewY(&quot;));
+        return skewYString;
+    }
+    }
+
+    ASSERT_NOT_REACHED();
+    return emptyString();
+}
+
+String SVGTransformValue::valueAsString() const
+{
+    const String&amp; prefix = transformTypePrefixForParsing(m_type);
+    switch (m_type) {
+    case SVG_TRANSFORM_UNKNOWN:
+        return prefix;
+    case SVG_TRANSFORM_MATRIX: {
+        StringBuilder builder;
+        builder.append(prefix);
+        builder.appendNumber(m_matrix.a());
+        builder.append(' ');
+        builder.appendNumber(m_matrix.b());
+        builder.append(' ');
+        builder.appendNumber(m_matrix.c());
+        builder.append(' ');
+        builder.appendNumber(m_matrix.d());
+        builder.append(' ');
+        builder.appendNumber(m_matrix.e());
+        builder.append(' ');
+        builder.appendNumber(m_matrix.f());
+        builder.append(')');
+        return builder.toString();
+    }
+    case SVG_TRANSFORM_TRANSLATE: {
+        StringBuilder builder;
+        builder.append(prefix);
+        builder.appendNumber(m_matrix.e());
+        builder.append(' ');
+        builder.appendNumber(m_matrix.f());
+        builder.append(')');
+        return builder.toString();
+    }
+    case SVG_TRANSFORM_SCALE: {
+        StringBuilder builder;
+        builder.append(prefix);
+        builder.appendNumber(m_matrix.xScale());
+        builder.append(' ');
+        builder.appendNumber(m_matrix.yScale());
+        builder.append(')');
+        return builder.toString();
+    }
+    case SVG_TRANSFORM_ROTATE: {
+        double angleInRad = deg2rad(m_angle);
+        double cosAngle = std::cos(angleInRad);
+        double sinAngle = std::sin(angleInRad);
+        float cx = narrowPrecisionToFloat(cosAngle != 1 ? (m_matrix.e() * (1 - cosAngle) - m_matrix.f() * sinAngle) / (1 - cosAngle) / 2 : 0);
+        float cy = narrowPrecisionToFloat(cosAngle != 1 ? (m_matrix.e() * sinAngle / (1 - cosAngle) + m_matrix.f()) / 2 : 0);
+        StringBuilder builder;
+        builder.append(prefix);
+        builder.appendNumber(m_angle);
+        if (cx || cy) {
+            builder.append(' ');
+            builder.appendNumber(cx);
+            builder.append(' ');
+            builder.appendNumber(cy);
+        }
+        builder.append(')');
+        return builder.toString();
+    }
+    case SVG_TRANSFORM_SKEWX:
+    case SVG_TRANSFORM_SKEWY: {
+        StringBuilder builder;
+        builder.append(prefix);
+        builder.appendNumber(m_angle);
+        builder.append(')');
+        return builder.toString();
+    }
+    }
+
+    ASSERT_NOT_REACHED();
+    return emptyString();
+}
+
+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTransformValueh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/svg/SVGTransformValue.h (0 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTransformValue.h                                (rev 0)
+++ trunk/Source/WebCore/svg/SVGTransformValue.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -0,0 +1,94 @@
</span><ins>+/*
+ * Copyright (C) 2004, 2005, 2008 Nikolas Zimmermann &lt;zimmermann@kde.org&gt;
+ * Copyright (C) 2004, 2005 Rob Buis &lt;buis@kde.org&gt;
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#pragma once
+
+#include &quot;FloatPoint.h&quot;
+#include &quot;SVGMatrixValue.h&quot;
+
+namespace WebCore {
+
+class FloatSize;
+
+class SVGTransformValue {
+public:
+    enum SVGTransformType {
+        SVG_TRANSFORM_UNKNOWN = 0,
+        SVG_TRANSFORM_MATRIX = 1,
+        SVG_TRANSFORM_TRANSLATE = 2,
+        SVG_TRANSFORM_SCALE = 3,
+        SVG_TRANSFORM_ROTATE = 4,
+        SVG_TRANSFORM_SKEWX = 5,
+        SVG_TRANSFORM_SKEWY = 6
+    };
+
+    enum ConstructionMode {
+        ConstructIdentityTransform,
+        ConstructZeroTransform
+    };
+
+    SVGTransformValue();
+    SVGTransformValue(SVGTransformType, ConstructionMode = ConstructIdentityTransform);
+    explicit SVGTransformValue(const AffineTransform&amp;);
+
+    SVGTransformType type() const { return m_type; }
+
+    SVGMatrixValue&amp; svgMatrix() { return static_cast&lt;SVGMatrixValue&amp;&gt;(m_matrix); }
+    AffineTransform matrix() const { return m_matrix; }
+    void updateSVGMatrix();
+
+    float angle() const { return m_angle; }
+    FloatPoint rotationCenter() const { return m_center; }
+
+    void setMatrix(const AffineTransform&amp;);
+    void setTranslate(float tx, float ty);
+    void setScale(float sx, float sy);
+    void setRotate(float angle, float cx, float cy);
+    void setSkewX(float angle);
+    void setSkewY(float angle);
+    
+    FloatPoint translate() const;
+    FloatSize scale() const;
+
+    bool isValid() const { return m_type != SVG_TRANSFORM_UNKNOWN; }
+    String valueAsString() const;
+
+    static const String&amp; transformTypePrefixForParsing(SVGTransformType);
+
+private:
+    friend bool operator==(const SVGTransformValue&amp;, const SVGTransformValue&amp;);
+
+    SVGTransformType m_type { SVG_TRANSFORM_UNKNOWN };
+    float m_angle { 0 };
+    FloatPoint m_center;
+    AffineTransform m_matrix;
+};
+
+inline bool operator==(const SVGTransformValue&amp; a, const SVGTransformValue&amp; b)
+{
+    return a.m_type == b.m_type &amp;&amp; a.m_angle == b.m_angle &amp;&amp; a.m_matrix == b.m_matrix;
+}
+
+inline bool operator!=(const SVGTransformValue&amp; a, const SVGTransformValue&amp; b)
+{
+    return !(a == b);
+}
+
+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTransformablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTransformable.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTransformable.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGTransformable.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -93,9 +93,9 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool SVGTransformable::parseTransformValue(SVGTransform::SVGTransformType type, const UChar*&amp; ptr, const UChar* end, SVGTransform&amp; transform)
</del><ins>+bool SVGTransformable::parseTransformValue(SVGTransformValue::SVGTransformType type, const UChar*&amp; ptr, const UChar* end, SVGTransformValue&amp; transform)
</ins><span class="cx"> {
</span><del>-    if (type == SVGTransform::SVG_TRANSFORM_UNKNOWN)
</del><ins>+    if (type == SVGTransformValue::SVG_TRANSFORM_UNKNOWN)
</ins><span class="cx">         return false;
</span><span class="cx"> 
</span><span class="cx">     int valueCount = 0;
</span><span class="lines">@@ -104,34 +104,34 @@
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><span class="cx">     switch (type) {
</span><del>-    case SVGTransform::SVG_TRANSFORM_UNKNOWN:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_UNKNOWN:
</ins><span class="cx">         ASSERT_NOT_REACHED();
</span><span class="cx">         break;
</span><del>-    case SVGTransform::SVG_TRANSFORM_SKEWX:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_SKEWX:
</ins><span class="cx">         transform.setSkewX(values[0]);
</span><span class="cx">         break;
</span><del>-    case SVGTransform::SVG_TRANSFORM_SKEWY:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_SKEWY:
</ins><span class="cx">         transform.setSkewY(values[0]);
</span><span class="cx">         break;
</span><del>-    case SVGTransform::SVG_TRANSFORM_SCALE:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_SCALE:
</ins><span class="cx">         if (valueCount == 1) // Spec: if only one param given, assume uniform scaling
</span><span class="cx">             transform.setScale(values[0], values[0]);
</span><span class="cx">         else
</span><span class="cx">             transform.setScale(values[0], values[1]);
</span><span class="cx">         break;
</span><del>-    case SVGTransform::SVG_TRANSFORM_TRANSLATE:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_TRANSLATE:
</ins><span class="cx">         if (valueCount == 1) // Spec: if only one param given, assume 2nd param to be 0
</span><span class="cx">             transform.setTranslate(values[0], 0);
</span><span class="cx">         else
</span><span class="cx">             transform.setTranslate(values[0], values[1]);
</span><span class="cx">         break;
</span><del>-    case SVGTransform::SVG_TRANSFORM_ROTATE:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_ROTATE:
</ins><span class="cx">         if (valueCount == 1)
</span><span class="cx">             transform.setRotate(values[0], 0, 0);
</span><span class="cx">         else
</span><span class="cx">             transform.setRotate(values[0], values[1], values[2]);
</span><span class="cx">         break;
</span><del>-    case SVGTransform::SVG_TRANSFORM_MATRIX:
</del><ins>+    case SVGTransformValue::SVG_TRANSFORM_MATRIX:
</ins><span class="cx">         transform.setMatrix(AffineTransform(values[0], values[1], values[2], values[3], values[4], values[5]));
</span><span class="cx">         break;
</span><span class="cx">     }
</span><span class="lines">@@ -146,7 +146,7 @@
</span><span class="cx"> static const UChar rotateDesc[] =  {'r', 'o', 't', 'a', 't', 'e'};
</span><span class="cx"> static const UChar matrixDesc[] =  {'m', 'a', 't', 'r', 'i', 'x'};
</span><span class="cx"> 
</span><del>-static inline bool parseAndSkipType(const UChar*&amp; currTransform, const UChar* end, SVGTransform::SVGTransformType&amp; type)
</del><ins>+static inline bool parseAndSkipType(const UChar*&amp; currTransform, const UChar* end, SVGTransformValue::SVGTransformType&amp; type)
</ins><span class="cx"> {
</span><span class="cx">     if (currTransform &gt;= end)
</span><span class="cx">         return false;
</span><span class="lines">@@ -153,19 +153,19 @@
</span><span class="cx"> 
</span><span class="cx">     if (*currTransform == 's') {
</span><span class="cx">         if (skipString(currTransform, end, skewXDesc, WTF_ARRAY_LENGTH(skewXDesc)))
</span><del>-            type = SVGTransform::SVG_TRANSFORM_SKEWX;
</del><ins>+            type = SVGTransformValue::SVG_TRANSFORM_SKEWX;
</ins><span class="cx">         else if (skipString(currTransform, end, skewYDesc, WTF_ARRAY_LENGTH(skewYDesc)))
</span><del>-            type = SVGTransform::SVG_TRANSFORM_SKEWY;
</del><ins>+            type = SVGTransformValue::SVG_TRANSFORM_SKEWY;
</ins><span class="cx">         else if (skipString(currTransform, end, scaleDesc, WTF_ARRAY_LENGTH(scaleDesc)))
</span><del>-            type = SVGTransform::SVG_TRANSFORM_SCALE;
</del><ins>+            type = SVGTransformValue::SVG_TRANSFORM_SCALE;
</ins><span class="cx">         else
</span><span class="cx">             return false;
</span><span class="cx">     } else if (skipString(currTransform, end, translateDesc, WTF_ARRAY_LENGTH(translateDesc)))
</span><del>-        type = SVGTransform::SVG_TRANSFORM_TRANSLATE;
</del><ins>+        type = SVGTransformValue::SVG_TRANSFORM_TRANSLATE;
</ins><span class="cx">     else if (skipString(currTransform, end, rotateDesc, WTF_ARRAY_LENGTH(rotateDesc)))
</span><del>-        type = SVGTransform::SVG_TRANSFORM_ROTATE;
</del><ins>+        type = SVGTransformValue::SVG_TRANSFORM_ROTATE;
</ins><span class="cx">     else if (skipString(currTransform, end, matrixDesc, WTF_ARRAY_LENGTH(matrixDesc)))
</span><del>-        type = SVGTransform::SVG_TRANSFORM_MATRIX;
</del><ins>+        type = SVGTransformValue::SVG_TRANSFORM_MATRIX;
</ins><span class="cx">     else
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><span class="lines">@@ -172,13 +172,13 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGTransform::SVGTransformType SVGTransformable::parseTransformType(const String&amp; typeString)
</del><ins>+SVGTransformValue::SVGTransformType SVGTransformable::parseTransformType(const String&amp; typeString)
</ins><span class="cx"> {
</span><del>-    SVGTransform::SVGTransformType type = SVGTransform::SVG_TRANSFORM_UNKNOWN;
</del><ins>+    SVGTransformValue::SVGTransformType type = SVGTransformValue::SVG_TRANSFORM_UNKNOWN;
</ins><span class="cx">     auto upconvertedCharacters = StringView(typeString).upconvertedCharacters();
</span><span class="cx">     const UChar* characters = upconvertedCharacters;
</span><span class="cx">     parseAndSkipType(characters, characters + typeString.length(), type);
</span><del>-    return static_cast&lt;SVGTransform::SVGTransformType&gt;(type);
</del><ins>+    return type;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool SVGTransformable::parseTransformAttribute(SVGTransformList&amp; list, const UChar*&amp; currTransform, const UChar* end, TransformParsingMode mode)
</span><span class="lines">@@ -189,13 +189,13 @@
</span><span class="cx">     bool delimParsed = false;
</span><span class="cx">     while (currTransform &lt; end) {
</span><span class="cx">         delimParsed = false;
</span><del>-        SVGTransform::SVGTransformType type = SVGTransform::SVG_TRANSFORM_UNKNOWN;
</del><ins>+        SVGTransformValue::SVGTransformType type = SVGTransformValue::SVG_TRANSFORM_UNKNOWN;
</ins><span class="cx">         skipOptionalSVGSpaces(currTransform, end);
</span><span class="cx"> 
</span><span class="cx">         if (!parseAndSkipType(currTransform, end, type))
</span><span class="cx">             return false;
</span><span class="cx"> 
</span><del>-        SVGTransform transform;
</del><ins>+        SVGTransformValue transform;
</ins><span class="cx">         if (!parseTransformValue(type, currTransform, end, transform))
</span><span class="cx">             return false;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGTransformableh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGTransformable.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGTransformable.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGTransformable.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -21,7 +21,7 @@
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><span class="cx"> #include &quot;SVGLocatable.h&quot;
</span><del>-#include &quot;SVGTransform.h&quot;
</del><ins>+#include &quot;SVGTransformValue.h&quot;
</ins><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -39,8 +39,8 @@
</span><span class="cx">     virtual ~SVGTransformable();
</span><span class="cx"> 
</span><span class="cx">     static bool parseTransformAttribute(SVGTransformList&amp;, const UChar*&amp; ptr, const UChar* end, TransformParsingMode mode = ClearList);
</span><del>-    static bool parseTransformValue(SVGTransform::SVGTransformType, const UChar*&amp; ptr, const UChar* end, SVGTransform&amp;);
-    static SVGTransform::SVGTransformType parseTransformType(const String&amp;);
</del><ins>+    static bool parseTransformValue(SVGTransformValue::SVGTransformType, const UChar*&amp; ptr, const UChar* end, SVGTransformValue&amp;);
+    static SVGTransformValue::SVGTransformType parseTransformType(const String&amp;);
</ins><span class="cx"> 
</span><span class="cx">     AffineTransform localCoordinateSpaceTransform(SVGLocatable::CTMScope) const override { return animatedLocalTransform(); }
</span><span class="cx">     virtual AffineTransform animatedLocalTransform() const = 0;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGUseElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGUseElement.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGUseElement.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGUseElement.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -87,13 +87,13 @@
</span><span class="cx">     SVGParsingError parseError = NoError;
</span><span class="cx"> 
</span><span class="cx">     if (name == SVGNames::xAttr)
</span><del>-        setXBaseValue(SVGLength::construct(LengthModeWidth, value, parseError));
</del><ins>+        setXBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::yAttr)
</span><del>-        setYBaseValue(SVGLength::construct(LengthModeHeight, value, parseError));
</del><ins>+        setYBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError));
</ins><span class="cx">     else if (name == SVGNames::widthAttr)
</span><del>-        setWidthBaseValue(SVGLength::construct(LengthModeWidth, value, parseError, ForbidNegativeLengths));
</del><ins>+        setWidthBaseValue(SVGLengthValue::construct(LengthModeWidth, value, parseError, ForbidNegativeLengths));
</ins><span class="cx">     else if (name == SVGNames::heightAttr)
</span><del>-        setHeightBaseValue(SVGLength::construct(LengthModeHeight, value, parseError, ForbidNegativeLengths));
</del><ins>+        setHeightBaseValue(SVGLengthValue::construct(LengthModeHeight, value, parseError, ForbidNegativeLengths));
</ins><span class="cx"> 
</span><span class="cx">     reportAttributeParsingError(parseError, name, value);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGZoomEventcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGZoomEvent.cpp (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGZoomEvent.cpp        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGZoomEvent.cpp        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -20,9 +20,11 @@
</span><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #include &quot;config.h&quot;
</span><ins>+#include &quot;SVGZoomEvent.h&quot;
</ins><span class="cx"> 
</span><del>-#include &quot;SVGZoomEvent.h&quot;
</del><span class="cx"> #include &quot;EventNames.h&quot;
</span><ins>+#include &quot;SVGPoint.h&quot;
+#include &quot;SVGRect.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="lines">@@ -32,9 +34,9 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-FloatRect SVGZoomEvent::zoomRectScreen() const
</del><ins>+Ref&lt;SVGRect&gt; SVGZoomEvent::zoomRectScreen() const
</ins><span class="cx"> {
</span><del>-    return m_zoomRectScreen;
</del><ins>+    return SVGRect::create(m_zoomRectScreen);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> float SVGZoomEvent::previousScale() const
</span><span class="lines">@@ -47,9 +49,9 @@
</span><span class="cx">     m_previousScale = scale;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGPoint SVGZoomEvent::previousTranslate() const
</del><ins>+Ref&lt;SVGPoint&gt; SVGZoomEvent::previousTranslate() const
</ins><span class="cx"> {
</span><del>-    return m_previousTranslate;
</del><ins>+    return SVGPoint::create(m_previousTranslate);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> float SVGZoomEvent::newScale() const
</span><span class="lines">@@ -62,9 +64,9 @@
</span><span class="cx">     m_newScale = scale;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SVGPoint SVGZoomEvent::newTranslate() const
</del><ins>+Ref&lt;SVGPoint&gt; SVGZoomEvent::newTranslate() const
</ins><span class="cx"> {
</span><del>-    return m_newTranslate;
</del><ins>+    return SVGPoint::create(m_newTranslate);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> EventInterface SVGZoomEvent::eventInterface() const
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGZoomEventh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGZoomEvent.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGZoomEvent.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGZoomEvent.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -22,27 +22,29 @@
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><span class="cx"> #include &quot;FloatRect.h&quot;
</span><del>-#include &quot;SVGPoint.h&quot;
</del><span class="cx"> #include &quot;UIEvent.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+class SVGPoint;
+class SVGRect;
+
</ins><span class="cx"> class SVGZoomEvent final : public UIEvent {
</span><span class="cx"> public:
</span><span class="cx">     static Ref&lt;SVGZoomEvent&gt; createForBindings() { return adoptRef(*new SVGZoomEvent); }
</span><span class="cx"> 
</span><span class="cx">     // 'SVGZoomEvent' functions
</span><del>-    FloatRect zoomRectScreen() const;
</del><ins>+    Ref&lt;SVGRect&gt; zoomRectScreen() const;
</ins><span class="cx"> 
</span><span class="cx">     float previousScale() const;
</span><span class="cx">     void setPreviousScale(float);
</span><span class="cx"> 
</span><del>-    SVGPoint previousTranslate() const;
</del><ins>+    Ref&lt;SVGPoint&gt; previousTranslate() const;
</ins><span class="cx"> 
</span><span class="cx">     float newScale() const;
</span><span class="cx">     void setNewScale(float);
</span><span class="cx"> 
</span><del>-    SVGPoint newTranslate() const;
</del><ins>+    Ref&lt;SVGPoint&gt; newTranslate() const;
</ins><span class="cx"> 
</span><span class="cx">     EventInterface eventInterface() const final;
</span><span class="cx"> 
</span><span class="lines">@@ -54,8 +56,8 @@
</span><span class="cx"> 
</span><span class="cx">     FloatRect m_zoomRectScreen;
</span><span class="cx"> 
</span><del>-    SVGPoint m_newTranslate;
-    SVGPoint m_previousTranslate;
</del><ins>+    FloatPoint m_newTranslate;
+    FloatPoint m_previousTranslate;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGZoomEventidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGZoomEvent.idl (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGZoomEvent.idl        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/SVGZoomEvent.idl        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -24,7 +24,7 @@
</span><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> interface SVGZoomEvent : UIEvent { 
</span><del>-    readonly attribute SVGRect zoomRectScreen;
</del><ins>+    [NewObject] readonly attribute SVGRect zoomRectScreen;
</ins><span class="cx">     readonly attribute unrestricted float previousScale;
</span><span class="cx">     [Immutable] readonly attribute SVGPoint previousTranslate;
</span><span class="cx">     readonly attribute unrestricted float newScale;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGAnimatedListPropertyTearOffh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/properties/SVGAnimatedListPropertyTearOff.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -32,12 +32,12 @@
</span><span class="cx"> template&lt;typename PropertyType&gt;
</span><span class="cx"> class SVGAnimatedListPropertyTearOff : public SVGAnimatedProperty {
</span><span class="cx"> public:
</span><del>-    typedef typename SVGPropertyTraits&lt;PropertyType&gt;::ListItemType ListItemType;
-    typedef SVGPropertyTearOff&lt;ListItemType&gt; ListItemTearOff;
-    typedef Vector&lt;RefPtr&lt;ListItemTearOff&gt;&gt; ListWrapperCache;
-    typedef SVGListProperty&lt;PropertyType&gt; ListProperty;
-    typedef SVGListPropertyTearOff&lt;PropertyType&gt; ListPropertyTearOff;
-    typedef PropertyType ContentType;
</del><ins>+    using ListItemType = typename SVGPropertyTraits&lt;PropertyType&gt;::ListItemType;
+    using ListItemTearOff = typename SVGPropertyTraits&lt;PropertyType&gt;::ListItemTearOff;
+    using ListWrapperCache = Vector&lt;RefPtr&lt;ListItemTearOff&gt;&gt;;
+    using ListProperty = SVGListProperty&lt;PropertyType&gt;;
+    using ListPropertyTearOff = SVGListPropertyTearOff&lt;PropertyType&gt;;
+    using ContentType = PropertyType;
</ins><span class="cx"> 
</span><span class="cx">     virtual RefPtr&lt;ListProperty&gt; baseVal()
</span><span class="cx">     {
</span><span class="lines">@@ -73,7 +73,6 @@
</span><span class="cx">     {
</span><span class="cx">         // This should ever be called for our baseVal, as animVal can't modify the list.
</span><span class="cx">         // It's safe to cast to ListPropertyTearOff here as all classes inheriting from us supply their own removeItemFromList() method.
</span><del>-        typedef SVGPropertyTearOff&lt;typename SVGPropertyTraits&lt;PropertyType&gt;::ListItemType&gt; ListItemTearOff;
</del><span class="cx">         return static_pointer_cast&lt;ListPropertyTearOff&gt;(baseVal())-&gt;findItem(static_cast&lt;ListItemTearOff*&gt;(property));
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGListPropertyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGListProperty.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGListProperty.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/properties/SVGListProperty.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -23,6 +23,7 @@
</span><span class="cx"> #include &quot;SVGException.h&quot;
</span><span class="cx"> #include &quot;SVGPropertyTearOff.h&quot;
</span><span class="cx"> #include &quot;SVGPropertyTraits.h&quot;
</span><ins>+#include &lt;wtf/Ref.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="lines">@@ -44,7 +45,6 @@
</span><span class="cx"> 
</span><span class="cx">     using ListItemType = typename SVGPropertyTraits&lt;PropertyType&gt;::ListItemType;
</span><span class="cx">     using ListItemTearOff = typename SVGPropertyTraits&lt;PropertyType&gt;::ListItemTearOff;
</span><del>-    using PtrListItemTearOff = RefPtr&lt;ListItemTearOff&gt;;
</del><span class="cx">     using AnimatedListPropertyTearOff = SVGAnimatedListPropertyTearOff&lt;PropertyType&gt;;
</span><span class="cx">     using ListWrapperCache = typename AnimatedListPropertyTearOff::ListWrapperCache;
</span><span class="cx"> 
</span><span class="lines">@@ -98,8 +98,7 @@
</span><span class="cx">         auto result = canAlterList();
</span><span class="cx">         if (result.hasException())
</span><span class="cx">             return result.releaseException();
</span><del>-        if (!result.releaseReturnValue())
-            return { };
</del><ins>+        ASSERT(result.releaseReturnValue());
</ins><span class="cx"> 
</span><span class="cx">         m_values-&gt;clear();
</span><span class="cx">         commitChange();
</span><span class="lines">@@ -111,8 +110,7 @@
</span><span class="cx">         auto result = canAlterList();
</span><span class="cx">         if (result.hasException())
</span><span class="cx">             return result.releaseException();
</span><del>-        if (!result.releaseReturnValue())
-            return { };
</del><ins>+        ASSERT(result.releaseReturnValue());
</ins><span class="cx"> 
</span><span class="cx">         detachListWrappers(0);
</span><span class="cx">         m_values-&gt;clear();
</span><span class="lines">@@ -132,8 +130,7 @@
</span><span class="cx">         auto result = canAlterList();
</span><span class="cx">         if (result.hasException())
</span><span class="cx">             return result.releaseException();
</span><del>-        if (!result.releaseReturnValue())
-            return ListItemType { };
</del><ins>+        ASSERT(result.releaseReturnValue());
</ins><span class="cx"> 
</span><span class="cx">         // Spec: If the inserted item is already in a list, it is removed from its previous list before it is inserted into this list.
</span><span class="cx">         processIncomingListItemValue(newItem, 0);
</span><span class="lines">@@ -146,7 +143,7 @@
</span><span class="cx">         return ListItemType { newItem };
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ExceptionOr&lt;PtrListItemTearOff&gt; initializeValuesAndWrappers(PtrListItemTearOff newItem)
</del><ins>+    ExceptionOr&lt;Ref&lt;ListItemTearOff&gt;&gt; initializeValuesAndWrappers(ListItemTearOff&amp; item)
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(m_wrappers);
</span><span class="cx"> 
</span><span class="lines">@@ -153,15 +150,12 @@
</span><span class="cx">         auto result = canAlterList();
</span><span class="cx">         if (result.hasException())
</span><span class="cx">             return result.releaseException();
</span><del>-        if (!result.releaseReturnValue())
-            return nullptr;
</del><ins>+        ASSERT(result.releaseReturnValue());
</ins><span class="cx"> 
</span><del>-        // Not specified, but FF/Opera do it this way, and it's just sane.
-        if (!newItem)
-            return Exception { SVGException::SVG_WRONG_TYPE_ERR };
-
</del><span class="cx">         ASSERT(m_values-&gt;size() == m_wrappers-&gt;size());
</span><span class="cx"> 
</span><ins>+        Ref&lt;ListItemTearOff&gt; newItem(item);
+
</ins><span class="cx">         // Spec: If the inserted item is already in a list, it is removed from its previous list before it is inserted into this list.
</span><span class="cx">         processIncomingListItemWrapper(newItem, 0);
</span><span class="cx"> 
</span><span class="lines">@@ -170,7 +164,7 @@
</span><span class="cx">         m_values-&gt;clear();
</span><span class="cx"> 
</span><span class="cx">         m_values-&gt;append(newItem-&gt;propertyReference());
</span><del>-        m_wrappers-&gt;append(newItem);
</del><ins>+        m_wrappers-&gt;append(newItem.ptr());
</ins><span class="cx"> 
</span><span class="cx">         commitChange();
</span><span class="cx">         return WTFMove(newItem);
</span><span class="lines">@@ -190,14 +184,13 @@
</span><span class="cx">         auto result = canGetItem(index);
</span><span class="cx">         if (result.hasException())
</span><span class="cx">             return result.releaseException();
</span><del>-        if (!result.releaseReturnValue())
-            return ListItemType { };
</del><ins>+        ASSERT(result.releaseReturnValue());
</ins><span class="cx"> 
</span><span class="cx">         // Spec: Returns the specified item from the list. The returned item is the item itself and not a copy.
</span><span class="cx">         return ListItemType { m_values-&gt;at(index) };
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ExceptionOr&lt;PtrListItemTearOff&gt; getItemValuesAndWrappers(AnimatedListPropertyTearOff* animatedList, unsigned index)
</del><ins>+    ExceptionOr&lt;Ref&lt;ListItemTearOff&gt;&gt; getItemValuesAndWrappers(AnimatedListPropertyTearOff* animatedList, unsigned index)
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(m_wrappers);
</span><span class="cx"> 
</span><span class="lines">@@ -204,8 +197,7 @@
</span><span class="cx">         auto result = canGetItem(index);
</span><span class="cx">         if (result.hasException())
</span><span class="cx">             return result.releaseException();
</span><del>-        if (!result.releaseReturnValue())
-            return nullptr;
</del><ins>+        ASSERT(result.releaseReturnValue());
</ins><span class="cx"> 
</span><span class="cx">         // Spec: Returns the specified item from the list. The returned item is the item itself and not a copy.
</span><span class="cx">         // Any changes made to the item are immediately reflected in the list.
</span><span class="lines">@@ -219,7 +211,7 @@
</span><span class="cx">             m_wrappers-&gt;at(index) = wrapper;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        return WTFMove(wrapper);
</del><ins>+        return wrapper.releaseNonNull();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // SVGList::insertItemBefore()
</span><span class="lines">@@ -228,8 +220,7 @@
</span><span class="cx">         auto result = canAlterList();
</span><span class="cx">         if (result.hasException())
</span><span class="cx">             return result.releaseException();
</span><del>-        if (!result.releaseReturnValue())
-            return ListItemType { };
</del><ins>+        ASSERT(result.releaseReturnValue());
</ins><span class="cx"> 
</span><span class="cx">         // Spec: If the index is greater than or equal to numberOfItems, then the new item is appended to the end of the list.
</span><span class="cx">         if (index &gt; m_values-&gt;size())
</span><span class="lines">@@ -249,7 +240,7 @@
</span><span class="cx">         return ListItemType { newItem };
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ExceptionOr&lt;PtrListItemTearOff&gt; insertItemBeforeValuesAndWrappers(PtrListItemTearOff newItem, unsigned index)
</del><ins>+    ExceptionOr&lt;Ref&lt;ListItemTearOff&gt;&gt; insertItemBeforeValuesAndWrappers(ListItemTearOff&amp; item, unsigned index)
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(m_wrappers);
</span><span class="cx"> 
</span><span class="lines">@@ -256,13 +247,8 @@
</span><span class="cx">         auto result = canAlterList();
</span><span class="cx">         if (result.hasException())
</span><span class="cx">             return result.releaseException();
</span><del>-        if (!result.releaseReturnValue())
-            return nullptr;
</del><ins>+        ASSERT(result.releaseReturnValue());
</ins><span class="cx"> 
</span><del>-        // Not specified, but FF/Opera do it this way, and it's just sane.
-        if (!newItem)
-            return Exception { SVGException::SVG_WRONG_TYPE_ERR };
-
</del><span class="cx">         // Spec: If the index is greater than or equal to numberOfItems, then the new item is appended to the end of the list.
</span><span class="cx">         if (index &gt; m_values-&gt;size())
</span><span class="cx">             index = m_values-&gt;size();
</span><span class="lines">@@ -269,6 +255,8 @@
</span><span class="cx"> 
</span><span class="cx">         ASSERT(m_values-&gt;size() == m_wrappers-&gt;size());
</span><span class="cx"> 
</span><ins>+        Ref&lt;ListItemTearOff&gt; newItem(item);
+
</ins><span class="cx">         // Spec: If newItem is already in a list, it is removed from its previous list before it is inserted into this list.
</span><span class="cx">         if (!processIncomingListItemWrapper(newItem, &amp;index))
</span><span class="cx">             return WTFMove(newItem);
</span><span class="lines">@@ -278,7 +266,7 @@
</span><span class="cx">         m_values-&gt;insert(index, newItem-&gt;propertyReference());
</span><span class="cx"> 
</span><span class="cx">         // Store new wrapper at position 'index', change its underlying value, so mutations of newItem, directly affect the item in the list.
</span><del>-        m_wrappers-&gt;insert(index, newItem);
</del><ins>+        m_wrappers-&gt;insert(index, newItem.ptr());
</ins><span class="cx"> 
</span><span class="cx">         commitChange();
</span><span class="cx">         return WTFMove(newItem);
</span><span class="lines">@@ -290,8 +278,7 @@
</span><span class="cx">         auto result = canAlterList();
</span><span class="cx">         if (result.hasException())
</span><span class="cx">             return result.releaseException();
</span><del>-        if (!result.releaseReturnValue())
-            return false;
</del><ins>+        ASSERT(result.releaseReturnValue());
</ins><span class="cx"> 
</span><span class="cx">         if (index &gt;= m_values-&gt;size())
</span><span class="cx">             return Exception { INDEX_SIZE_ERR };
</span><span class="lines">@@ -304,8 +291,7 @@
</span><span class="cx">         auto result = canReplaceItem(index);
</span><span class="cx">         if (result.hasException())
</span><span class="cx">             return result.releaseException();
</span><del>-        if (!result.releaseReturnValue())
-            return ListItemType { };
</del><ins>+        ASSERT(result.releaseReturnValue());
</ins><span class="cx"> 
</span><span class="cx">         // Spec: If newItem is already in a list, it is removed from its previous list before it is inserted into this list.
</span><span class="cx">         // Spec: If the item is already in this list, note that the index of the item to replace is before the removal of the item.
</span><span class="lines">@@ -326,7 +312,7 @@
</span><span class="cx">         return ListItemType { newItem };
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ExceptionOr&lt;PtrListItemTearOff&gt; replaceItemValuesAndWrappers(PtrListItemTearOff newItem, unsigned index)
</del><ins>+    ExceptionOr&lt;Ref&lt;ListItemTearOff&gt;&gt; replaceItemValuesAndWrappers(ListItemTearOff&amp; item, unsigned index)
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(m_wrappers);
</span><span class="cx"> 
</span><span class="lines">@@ -333,15 +319,12 @@
</span><span class="cx">         auto result = canReplaceItem(index);
</span><span class="cx">         if (result.hasException())
</span><span class="cx">             return result.releaseException();
</span><del>-        if (!result.releaseReturnValue())
-            return nullptr;
</del><ins>+        ASSERT(result.releaseReturnValue());
</ins><span class="cx"> 
</span><del>-        // Not specified, but FF/Opera do it this way, and it's just sane.
-        if (!newItem)
-            return Exception { SVGException::SVG_WRONG_TYPE_ERR };
-
</del><span class="cx">         ASSERT(m_values-&gt;size() == m_wrappers-&gt;size());
</span><span class="cx"> 
</span><ins>+        Ref&lt;ListItemTearOff&gt; newItem(item);
+
</ins><span class="cx">         // Spec: If newItem is already in a list, it is removed from its previous list before it is inserted into this list.
</span><span class="cx">         // Spec: If the item is already in this list, note that the index of the item to replace is before the removal of the item.
</span><span class="cx">         if (!processIncomingListItemWrapper(newItem, &amp;index))
</span><span class="lines">@@ -360,7 +343,7 @@
</span><span class="cx"> 
</span><span class="cx">         // Update the value and the wrapper at the desired position 'index'. 
</span><span class="cx">         m_values-&gt;at(index) = newItem-&gt;propertyReference();
</span><del>-        m_wrappers-&gt;at(index) = newItem;
</del><ins>+        m_wrappers-&gt;at(index) = newItem.ptr();
</ins><span class="cx"> 
</span><span class="cx">         commitChange();
</span><span class="cx">         return WTFMove(newItem);
</span><span class="lines">@@ -372,8 +355,7 @@
</span><span class="cx">         auto result = canAlterList();
</span><span class="cx">         if (result.hasException())
</span><span class="cx">             return result.releaseException();
</span><del>-        if (!result.releaseReturnValue())
-            return false;
</del><ins>+        ASSERT(result.releaseReturnValue());
</ins><span class="cx"> 
</span><span class="cx">         if (index &gt;= m_values-&gt;size())
</span><span class="cx">             return Exception { INDEX_SIZE_ERR };
</span><span class="lines">@@ -386,8 +368,7 @@
</span><span class="cx">         auto result = canRemoveItem(index);
</span><span class="cx">         if (result.hasException())
</span><span class="cx">             return result.releaseException();
</span><del>-        if (!result.releaseReturnValue())
-            return ListItemType { };
</del><ins>+        ASSERT(result.releaseReturnValue());
</ins><span class="cx"> 
</span><span class="cx">         ListItemType oldItem = m_values-&gt;at(index);
</span><span class="cx">         m_values-&gt;remove(index);
</span><span class="lines">@@ -396,7 +377,7 @@
</span><span class="cx">         return WTFMove(oldItem);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ExceptionOr&lt;PtrListItemTearOff&gt; removeItemValuesAndWrappers(AnimatedListPropertyTearOff* animatedList, unsigned index)
</del><ins>+    ExceptionOr&lt;Ref&lt;ListItemTearOff&gt;&gt; removeItemValuesAndWrappers(AnimatedListPropertyTearOff* animatedList, unsigned index)
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(m_wrappers);
</span><span class="cx"> 
</span><span class="lines">@@ -403,8 +384,7 @@
</span><span class="cx">         auto result = canRemoveItem(index);
</span><span class="cx">         if (result.hasException())
</span><span class="cx">             return result.releaseException();
</span><del>-        if (!result.releaseReturnValue())
-            return nullptr;
</del><ins>+        ASSERT(result.releaseReturnValue());
</ins><span class="cx"> 
</span><span class="cx">         ASSERT(m_values-&gt;size() == m_wrappers-&gt;size());
</span><span class="cx"> 
</span><span class="lines">@@ -418,7 +398,7 @@
</span><span class="cx">         m_values-&gt;remove(index);
</span><span class="cx"> 
</span><span class="cx">         commitChange();
</span><del>-        return WTFMove(oldItem);
</del><ins>+        return oldItem.releaseNonNull();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // SVGList::appendItem()
</span><span class="lines">@@ -427,8 +407,7 @@
</span><span class="cx">         auto result = canAlterList();
</span><span class="cx">         if (result.hasException())
</span><span class="cx">             return result.releaseException();
</span><del>-        if (!result.releaseReturnValue())
-            return ListItemType { };
</del><ins>+        ASSERT(result.releaseReturnValue());
</ins><span class="cx"> 
</span><span class="cx">         // Spec: If newItem is already in a list, it is removed from its previous list before it is inserted into this list.
</span><span class="cx">         processIncomingListItemValue(newItem, 0);
</span><span class="lines">@@ -440,7 +419,7 @@
</span><span class="cx">         return ListItemType { newItem };
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ExceptionOr&lt;PtrListItemTearOff&gt; appendItemValuesAndWrappers(PtrListItemTearOff newItem)
</del><ins>+    ExceptionOr&lt;Ref&lt;ListItemTearOff&gt;&gt; appendItemValuesAndWrappers(ListItemTearOff&amp; item)
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(m_wrappers);
</span><span class="cx"> 
</span><span class="lines">@@ -447,21 +426,18 @@
</span><span class="cx">         auto result = canAlterList();
</span><span class="cx">         if (result.hasException())
</span><span class="cx">             return result.releaseException();
</span><del>-        if (!result.releaseReturnValue())
-            return nullptr;
</del><ins>+        ASSERT(result.releaseReturnValue());
</ins><span class="cx"> 
</span><del>-        // Not specified, but FF/Opera do it this way, and it's just sane.
-        if (!newItem)
-            return Exception { SVGException::SVG_WRONG_TYPE_ERR };
-
</del><span class="cx">         ASSERT(m_values-&gt;size() == m_wrappers-&gt;size());
</span><span class="cx"> 
</span><ins>+        Ref&lt;ListItemTearOff&gt; newItem(item);
+
</ins><span class="cx">         // Spec: If newItem is already in a list, it is removed from its previous list before it is inserted into this list.
</span><span class="cx">         processIncomingListItemWrapper(newItem, 0);
</span><span class="cx"> 
</span><span class="cx">         // Append the value and wrapper at the end of the list.
</span><span class="cx">         m_values-&gt;append(newItem-&gt;propertyReference());
</span><del>-        m_wrappers-&gt;append(newItem);
</del><ins>+        m_wrappers-&gt;append(newItem.ptr());
</ins><span class="cx"> 
</span><span class="cx">         commitChange(ListModificationAppend);
</span><span class="cx">         return WTFMove(newItem);
</span><span class="lines">@@ -501,7 +477,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     virtual bool processIncomingListItemValue(const ListItemType&amp; newItem, unsigned* indexToModify) = 0;
</span><del>-    virtual bool processIncomingListItemWrapper(RefPtr&lt;ListItemTearOff&gt;&amp; newItem, unsigned* indexToModify) = 0;
</del><ins>+    virtual bool processIncomingListItemWrapper(Ref&lt;ListItemTearOff&gt;&amp; newItem, unsigned* indexToModify) = 0;
</ins><span class="cx"> 
</span><span class="cx">     SVGPropertyRole m_role;
</span><span class="cx">     bool m_ownsValues;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGListPropertyTearOffh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGListPropertyTearOff.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGListPropertyTearOff.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/properties/SVGListPropertyTearOff.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -82,32 +82,32 @@
</span><span class="cx">         return Base::clearValuesAndWrappers();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ExceptionOr&lt;PtrListItemTearOff&gt; initialize(PtrListItemTearOff newItem)
</del><ins>+    ExceptionOr&lt;Ref&lt;ListItemTearOff&gt;&gt; initialize(ListItemTearOff&amp; newItem)
</ins><span class="cx">     {
</span><span class="cx">         return Base::initializeValuesAndWrappers(newItem);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ExceptionOr&lt;PtrListItemTearOff&gt; getItem(unsigned index)
</del><ins>+    ExceptionOr&lt;Ref&lt;ListItemTearOff&gt;&gt; getItem(unsigned index)
</ins><span class="cx">     {
</span><span class="cx">         return Base::getItemValuesAndWrappers(m_animatedProperty.get(), index);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ExceptionOr&lt;PtrListItemTearOff&gt; insertItemBefore(PtrListItemTearOff newItem, unsigned index)
</del><ins>+    ExceptionOr&lt;Ref&lt;ListItemTearOff&gt;&gt; insertItemBefore(ListItemTearOff&amp; newItem, unsigned index)
</ins><span class="cx">     {
</span><span class="cx">         return Base::insertItemBeforeValuesAndWrappers(newItem, index);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ExceptionOr&lt;PtrListItemTearOff&gt; replaceItem(PtrListItemTearOff newItem, unsigned index)
</del><ins>+    ExceptionOr&lt;Ref&lt;ListItemTearOff&gt;&gt; replaceItem(ListItemTearOff&amp; newItem, unsigned index)
</ins><span class="cx">     {
</span><span class="cx">         return Base::replaceItemValuesAndWrappers(newItem, index);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ExceptionOr&lt;PtrListItemTearOff&gt; removeItem(unsigned index)
</del><ins>+    ExceptionOr&lt;Ref&lt;ListItemTearOff&gt;&gt; removeItem(unsigned index)
</ins><span class="cx">     {
</span><span class="cx">         return Base::removeItemValuesAndWrappers(m_animatedProperty.get(), index);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ExceptionOr&lt;PtrListItemTearOff&gt; appendItem(PtrListItemTearOff newItem)
</del><ins>+    ExceptionOr&lt;Ref&lt;ListItemTearOff&gt;&gt; appendItem(ListItemTearOff&amp; newItem)
</ins><span class="cx">     {
</span><span class="cx">         return Base::appendItemValuesAndWrappers(newItem);
</span><span class="cx">     }
</span><span class="lines">@@ -159,7 +159,7 @@
</span><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    bool processIncomingListItemWrapper(RefPtr&lt;ListItemTearOff&gt;&amp; newItem, unsigned* indexToModify) override
</del><ins>+    bool processIncomingListItemWrapper(Ref&lt;ListItemTearOff&gt;&amp; newItem, unsigned* indexToModify) override
</ins><span class="cx">     {
</span><span class="cx">         SVGAnimatedProperty* animatedPropertyOfItem = newItem-&gt;animatedProperty();
</span><span class="cx"> 
</span><span class="lines">@@ -184,7 +184,7 @@
</span><span class="cx">         // 'newItem' is already living in another list. If it's not our list, synchronize the other lists wrappers after the removal.
</span><span class="cx">         bool livesInOtherList = animatedPropertyOfItem != m_animatedProperty;
</span><span class="cx">         AnimatedListPropertyTearOff* propertyTearOff = static_cast&lt;AnimatedListPropertyTearOff*&gt;(animatedPropertyOfItem);
</span><del>-        int indexToRemove = propertyTearOff-&gt;findItem(newItem.get());
</del><ins>+        int indexToRemove = propertyTearOff-&gt;findItem(newItem.ptr());
</ins><span class="cx">         ASSERT(indexToRemove != -1);
</span><span class="cx"> 
</span><span class="cx">         // Do not remove newItem if already in this list at the target index.
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGMatrixTearOffh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGMatrixTearOff.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGMatrixTearOff.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/properties/SVGMatrixTearOff.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -19,27 +19,24 @@
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><del>-#include &quot;SVGPropertyTearOff.h&quot;
</del><ins>+#include &quot;SVGMatrix.h&quot;
</ins><span class="cx"> #include &quot;SVGTransform.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class SVGMatrixTearOff final : public SVGPropertyTearOff&lt;SVGMatrix&gt; {
</del><ins>+class SVGMatrixTearOff final : public SVGMatrix {
</ins><span class="cx"> public:
</span><del>-    // Used for non-animated POD types that are not associated with a SVGAnimatedProperty object, nor with a XML DOM attribute
-    // and that contain a parent type that's exposed to the bindings via a SVGStaticPropertyTearOff object
-    // (for example: SVGTransform::matrix).
-    static Ref&lt;SVGMatrixTearOff&gt; create(SVGPropertyTearOff&lt;SVGTransform&gt;&amp; parent, SVGMatrix&amp; value)
</del><ins>+    static Ref&lt;SVGMatrixTearOff&gt; create(SVGTransform&amp; parent, SVGMatrixValue&amp; value)
</ins><span class="cx">     {
</span><span class="cx">         ASSERT_UNUSED(value, &amp;parent.propertyReference().svgMatrix() == &amp;value);
</span><del>-        Ref&lt;SVGMatrixTearOff&gt; result = adoptRef(*new SVGMatrixTearOff(&amp;parent));
</del><ins>+        Ref&lt;SVGMatrixTearOff&gt; result = adoptRef(*new SVGMatrixTearOff(parent));
</ins><span class="cx">         parent.addChild(result-&gt;m_weakFactory.createWeakPtr());
</span><span class="cx">         return result;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    SVGMatrix&amp; propertyReference() final { return m_parent-&gt;propertyReference().svgMatrix(); }
</del><ins>+    SVGMatrixValue&amp; propertyReference() final { return m_parent-&gt;propertyReference().svgMatrix(); }
</ins><span class="cx"> 
</span><del>-    void setValue(SVGMatrix&amp; value) final { m_parent-&gt;propertyReference().setMatrix(value); }
</del><ins>+    void setValue(SVGMatrixValue&amp; value) final { m_parent-&gt;propertyReference().setMatrix(value); }
</ins><span class="cx"> 
</span><span class="cx">     void commitChange() final
</span><span class="cx">     {
</span><span class="lines">@@ -48,14 +45,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    SVGMatrixTearOff(SVGPropertyTearOff&lt;SVGTransform&gt;* parent)
-        : SVGPropertyTearOff&lt;SVGMatrix&gt;(nullptr)
-        , m_parent(parent)
</del><ins>+    SVGMatrixTearOff(SVGTransform&amp; parent)
+        : SVGMatrix(nullptr)
+        , m_parent(&amp;parent)
</ins><span class="cx">         , m_weakFactory(this)
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    RefPtr&lt;SVGPropertyTearOff&lt;SVGTransform&gt;&gt; m_parent;
</del><ins>+    RefPtr&lt;SVGTransform&gt; m_parent;
</ins><span class="cx">     WeakPtrFactory&lt;SVGPropertyTearOffBase&gt; m_weakFactory;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGPathSegListPropertyTearOffh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGPathSegListPropertyTearOff.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGPathSegListPropertyTearOff.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/properties/SVGPathSegListPropertyTearOff.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -142,7 +142,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     bool processIncomingListItemValue(const ListItemType&amp; newItem, unsigned* indexToModify) final;
</span><del>-    bool processIncomingListItemWrapper(RefPtr&lt;ListItemTearOff&gt;&amp;, unsigned*) final
</del><ins>+    bool processIncomingListItemWrapper(Ref&lt;ListItemTearOff&gt;&amp;, unsigned*) final
</ins><span class="cx">     {
</span><span class="cx">         ASSERT_NOT_REACHED();
</span><span class="cx">         return true;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGStaticListPropertyTearOffh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGStaticListPropertyTearOff.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGStaticListPropertyTearOff.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/properties/SVGStaticListPropertyTearOff.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -27,7 +27,7 @@
</span><span class="cx"> public:
</span><span class="cx">     using Base = SVGListProperty&lt;PropertyType&gt;;
</span><span class="cx">     using ListItemType = typename SVGPropertyTraits&lt;PropertyType&gt;::ListItemType;
</span><del>-    using ListItemTearOff = SVGPropertyTearOff&lt;ListItemType&gt;;
</del><ins>+    using ListItemTearOff = typename SVGPropertyTraits&lt;PropertyType&gt;::ListItemTearOff;
</ins><span class="cx"> 
</span><span class="cx">     using Base::m_role;
</span><span class="cx">     using Base::m_values;
</span><span class="lines">@@ -96,7 +96,7 @@
</span><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    virtual bool processIncomingListItemWrapper(RefPtr&lt;ListItemTearOff&gt;&amp;, unsigned*)
</del><ins>+    virtual bool processIncomingListItemWrapper(Ref&lt;ListItemTearOff&gt;&amp;, unsigned*)
</ins><span class="cx">     {
</span><span class="cx">         ASSERT_NOT_REACHED();
</span><span class="cx">         return true;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGStaticPropertyTearOffh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGStaticPropertyTearOff.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGStaticPropertyTearOff.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/properties/SVGStaticPropertyTearOff.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -19,8 +19,6 @@
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><del>-#include &quot;SVGPropertyTearOff.h&quot;
-
</del><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> #if COMPILER(MSVC)
</span><span class="lines">@@ -28,10 +26,12 @@
</span><span class="cx"> // alignment warning (C4121). 16 is the next-largest size allowed for packing, so we use that.
</span><span class="cx"> #pragma pack(push, 16)
</span><span class="cx"> #endif
</span><del>-template&lt;typename ContextElement, typename PropertyType&gt;
-class SVGStaticPropertyTearOff final : public SVGPropertyTearOff&lt;PropertyType&gt; {
</del><ins>+template&lt;typename ContextElement, typename PropertyTearOff&gt;
+class SVGStaticPropertyTearOff final : public PropertyTearOff {
</ins><span class="cx"> public:
</span><del>-    typedef SVGStaticPropertyTearOff&lt;ContextElement, PropertyType&gt; Self;
</del><ins>+    using Self = SVGStaticPropertyTearOff&lt;ContextElement, PropertyTearOff&gt;;
+    using PropertyType = typename PropertyTearOff::PropertyType;
+
</ins><span class="cx">     typedef void (ContextElement::*UpdateMethod)();
</span><span class="cx"> 
</span><span class="cx">     // Used for non-animated POD types that are not associated with a SVGAnimatedProperty object, nor with a XML DOM attribute
</span><span class="lines">@@ -45,7 +45,7 @@
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     SVGStaticPropertyTearOff(ContextElement* contextElement, PropertyType&amp; value, UpdateMethod update)
</span><del>-        : SVGPropertyTearOff&lt;PropertyType&gt;(0, UndefinedRole, value)
</del><ins>+        : PropertyTearOff(0, UndefinedRole, value)
</ins><span class="cx">         , m_update(update)
</span><span class="cx">         , m_contextElement(contextElement)
</span><span class="cx">     {
</span></span></pre></div>
<a id="trunkSourceWebCoresvgpropertiesSVGTransformListPropertyTearOffh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/properties/SVGTransformListPropertyTearOff.h (208704 => 208705)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/properties/SVGTransformListPropertyTearOff.h        2016-11-14 21:14:15 UTC (rev 208704)
+++ trunk/Source/WebCore/svg/properties/SVGTransformListPropertyTearOff.h        2016-11-14 21:18:41 UTC (rev 208705)
</span><span class="lines">@@ -35,15 +35,13 @@
</span><span class="cx">         return adoptRef(*new SVGTransformListPropertyTearOff(animatedProperty, role, values, wrappers));
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ExceptionOr&lt;Ref&lt;SVGPropertyTearOff&lt;SVGTransform&gt;&gt;&gt; createSVGTransformFromMatrix(SVGPropertyTearOff&lt;SVGMatrix&gt;* matrix)
</del><ins>+    ExceptionOr&lt;Ref&lt;SVGTransform&gt;&gt; createSVGTransformFromMatrix(SVGMatrix&amp; matrix)
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(m_values);
</span><del>-        if (!matrix)
-            return Exception { TYPE_MISMATCH_ERR };
-        return SVGPropertyTearOff&lt;SVGTransform&gt;::create(m_values-&gt;createSVGTransformFromMatrix(matrix-&gt;propertyReference()));
</del><ins>+        return m_values-&gt;createSVGTransformFromMatrix(matrix);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    ExceptionOr&lt;RefPtr&lt;SVGPropertyTearOff&lt;SVGTransform&gt;&gt;&gt; consolidate()
</del><ins>+    ExceptionOr&lt;RefPtr&lt;SVGTransform&gt;&gt; consolidate()
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(m_values);
</span><span class="cx">         ASSERT(m_wrappers);
</span><span class="lines">@@ -51,8 +49,7 @@
</span><span class="cx">         auto result = canAlterList();
</span><span class="cx">         if (result.hasException())
</span><span class="cx">             return result.releaseException();
</span><del>-        if (!result.releaseReturnValue())
-            return nullptr;
</del><ins>+        ASSERT(result.releaseReturnValue());
</ins><span class="cx"> 
</span><span class="cx">         ASSERT(m_values-&gt;size() == m_wrappers-&gt;size());
</span><span class="cx"> 
</span><span class="lines">@@ -61,8 +58,9 @@
</span><span class="cx">             return nullptr;
</span><span class="cx"> 
</span><span class="cx">         detachListWrappers(0);
</span><del>-        RefPtr&lt;SVGPropertyTearOff&lt;SVGTransform&gt;&gt; wrapper = SVGPropertyTearOff&lt;SVGTransform&gt;::create(m_values-&gt;consolidate());
-        m_wrappers-&gt;append(wrapper);
</del><ins>+        
+        RefPtr&lt;SVGTransform&gt; wrapper = m_values-&gt;consolidate();
+        m_wrappers-&gt;append(wrapper.get());
</ins><span class="cx"> 
</span><span class="cx">         ASSERT(m_values-&gt;size() == m_wrappers-&gt;size());
</span><span class="cx">         return WTFMove(wrapper);
</span></span></pre>
</div>
</div>

</body>
</html>