SVGViewSpec DOM bindings aka SVGSVGElement.currentView is unimplemented
https://bugs.webkit.org/show_bug.cgi?id=15495
Reviewed by Rob Buis.
Source/WebCore:
Finish SVGViewSpec implementation and expose it to the Web. Numerous smaller bugs are fixed:
- SVGViewSpec and all of its contents should be read-only. Enforce that and test it.
Add a new enum to SVGPropertyInfo so that each SVGAnimatedProperty knows if its content is supposed to be read-write or read-only.
- Make the 'transform' attribute of SVGViewSpec exposable by switching to a SVGTransformListProperty - it can now be accessed from JS.
- Assure that following XXXString methods are in sync with the corresponding SVG DOM interfaces
readonly attribute DOMString viewBoxString;
readonly attribute DOMString preserveAspectRatioString;
readonly attribute DOMString transformString;
readonly attribute DOMString viewTargetString;
- Cleanup code in svg/properties that was intended to handle SVGViewSpec. Turns out lot of the complexity was unncessary, and can be removed.
- Move SVGFitToViewBox to the same pattern SVGZoomAndPan uses since two days, that avoids any virtual function calls for attribute parsing.
- Create/expose ObjectiveC/JS bindings for SVGViewSpec.
- Enable SVGViewSpec constructor.
Tests: svg/custom/linking-a-03-b-all-expected.svg
svg/dom/SVGViewSpec-defaults.html
svg/dom/SVGViewSpec.html
svg/dom/complex-svgView-specification.html
svg/dom/viewspec-parser.html
* CMakeLists.txt:
* DerivedSources.cpp:
* DerivedSources.make:
* DerivedSources.pri:
* GNUmakefile.list.am:
* Target.pri:
* WebCore.gyp/WebCore.gyp:
* WebCore.gypi:
* WebCore.order:
* WebCore.vcproj/WebCore.vcproj:
* WebCore.xcodeproj/project.pbxproj:
* bindings/js/JSSVGLengthCustom.cpp:
(WebCore::JSSVGLength::setValue):
(WebCore::JSSVGLength::convertToSpecifiedUnits):
* bindings/objc/DOMSVG.h:
* bindings/scripts/CodeGeneratorJS.pm:
(GenerateImplementation):
(NativeToJSValue):
* bindings/scripts/CodeGeneratorObjC.pm:
(GenerateImplementation):
* bindings/scripts/CodeGeneratorV8.pm:
(GenerateNormalAttrGetter):
(GenerateNormalAttrSetter):
(GenerateFunctionCallback):
* bindings/v8/custom/V8SVGLengthCustom.cpp:
(WebCore::V8SVGLength::valueAccessorSetter):
(WebCore::V8SVGLength::convertToSpecifiedUnitsCallback):
* page/DOMWindow.idl:
* rendering/svg/RenderSVGResourcePattern.cpp:
(WebCore::RenderSVGResourcePattern::buildTileImageTransform):
* svg/SVGFitToViewBox.cpp:
* svg/SVGFitToViewBox.h:
(SVGFitToViewBox):
(WebCore::SVGFitToViewBox::parseAttribute):
* svg/SVGMarkerElement.cpp:
(WebCore::SVGMarkerElement::orientTypePropertyInfo):
(WebCore::SVGMarkerElement::parseAttribute):
(WebCore::SVGMarkerElement::synchronizeOrientType):
(WebCore::SVGMarkerElement::lookupOrCreateOrientTypeWrapper):
* svg/SVGPathElement.cpp:
(WebCore::SVGPathElement::dPropertyInfo):
(WebCore::SVGPathElement::svgAttributeChanged):
(WebCore::SVGPathElement::pathByteStream):
(WebCore::SVGPathElement::lookupOrCreateDWrapper):
(WebCore::SVGPathElement::synchronizeD):
* svg/SVGPathSegWithContext.h:
(WebCore::SVGPathSegWithContext::animatedProperty):
* svg/SVGPatternElement.cpp:
(WebCore::SVGPatternElement::parseAttribute):
* svg/SVGPolyElement.cpp:
(WebCore::SVGPolyElement::pointsPropertyInfo):
(WebCore::SVGPolyElement::parseAttribute):
(WebCore::SVGPolyElement::synchronizePoints):
(WebCore::SVGPolyElement::lookupOrCreatePointsWrapper):
* svg/SVGRect.h:
* svg/SVGSVGElement.cpp:
(WebCore::SVGSVGElement::~SVGSVGElement):
(WebCore::SVGSVGElement::currentView):
(WebCore::SVGSVGElement::parseAttribute):
(WebCore::SVGSVGElement::currentViewBoxRect):
(WebCore::SVGSVGElement::viewBoxToViewTransform):
(WebCore::SVGSVGElement::setupInitialView):
(WebCore::SVGSVGElement::inheritViewAttributes):
* svg/SVGSVGElement.h:
(SVGSVGElement):
* svg/SVGSVGElement.idl:
* svg/SVGSymbolElement.cpp:
(WebCore::SVGSymbolElement::parseAttribute):
* svg/SVGTests.cpp:
(WebCore::SVGTests::requiredFeaturesPropertyInfo):
(WebCore::SVGTests::requiredExtensionsPropertyInfo):
(WebCore::SVGTests::systemLanguagePropertyInfo):
(WebCore::SVGTests::synchronizeRequiredFeatures):
(WebCore::SVGTests::synchronizeRequiredExtensions):
(WebCore::SVGTests::synchronizeSystemLanguage):
* svg/SVGTextContentElement.cpp:
(WebCore::SVGTextContentElement::textLengthPropertyInfo):
(WebCore::SVGTextContentElement::synchronizeTextLength):
(WebCore::SVGTextContentElement::lookupOrCreateTextLengthWrapper):
* svg/SVGViewElement.cpp:
(WebCore::SVGViewElement::parseAttribute):
* svg/SVGViewElement.h:
* svg/SVGViewSpec.cpp:
(WebCore::SVGViewSpec::viewBoxPropertyInfo):
(WebCore::SVGViewSpec::preserveAspectRatioPropertyInfo):
(WebCore::SVGViewSpec::transformPropertyInfo):
(WebCore::SVGViewSpec::SVGViewSpec):
(WebCore::SVGViewSpec::viewBoxIdentifier):
(WebCore::SVGViewSpec::preserveAspectRatioIdentifier):
(WebCore::SVGViewSpec::transformIdentifier):
(WebCore::SVGViewSpec::setZoomAndPan):
(WebCore::SVGViewSpec::setTransformString):
(WebCore::SVGViewSpec::transformString):
(WebCore::SVGViewSpec::viewBoxString):
(WebCore::SVGViewSpec::preserveAspectRatioString):
(WebCore::SVGViewSpec::viewTarget):
(WebCore::SVGViewSpec::transform):
(WebCore::SVGViewSpec::lookupOrCreateViewBoxWrapper):
(WebCore::SVGViewSpec::lookupOrCreatePreserveAspectRatioWrapper):
(WebCore::SVGViewSpec::lookupOrCreateTransformWrapper):
(WebCore::SVGViewSpec::reset):
(WebCore::SVGViewSpec::parseViewSpec):
* svg/SVGViewSpec.h:
(WebCore::SVGViewSpec::~SVGViewSpec):
(SVGViewSpec):
(WebCore::SVGViewSpec::create):
(WebCore::SVGViewSpec::setViewTargetString):
(WebCore::SVGViewSpec::setZoomAndPan):
(WebCore::SVGViewSpec::contextElement):
(WebCore::SVGViewSpec::resetContextElement):
(WebCore::SVGViewSpec::transformBaseValue):
(WebCore::SVGViewSpec::viewBoxAnimated):
(WebCore::SVGViewSpec::viewBox):
(WebCore::SVGViewSpec::viewBoxBaseValue):
(WebCore::SVGViewSpec::setViewBoxBaseValue):
(WebCore::SVGViewSpec::preserveAspectRatioAnimated):
(WebCore::SVGViewSpec::preserveAspectRatio):
(WebCore::SVGViewSpec::preserveAspectRatioBaseValue):
(WebCore::SVGViewSpec::setPreserveAspectRatioBaseValue):
* svg/SVGViewSpec.idl:
* svg/properties/SVGAnimatedProperty.h:
(WebCore::SVGAnimatedProperty::isReadOnly):
(WebCore::SVGAnimatedProperty::setIsReadOnly):
(SVGAnimatedProperty):
(WebCore::SVGAnimatedProperty::lookupOrCreateWrapper):
(WebCore::SVGAnimatedProperty::lookupWrapper):
(WebCore::SVGAnimatedProperty::SVGAnimatedProperty):
* svg/properties/SVGAnimatedPropertyMacros.h:
(WebCore::SVGSynchronizableAnimatedProperty::synchronize):
(SVGSynchronizableAnimatedProperty):
* svg/properties/SVGAnimatedPropertySynchronizer.h: Removed.
* svg/properties/SVGAttributeToPropertyMap.h:
* svg/properties/SVGListProperty.h:
* svg/properties/SVGListPropertyTearOff.h:
(SVGListPropertyTearOff):
(WebCore::SVGListPropertyTearOff::isReadOnly):
* svg/properties/SVGPathSegListPropertyTearOff.h:
(SVGPathSegListPropertyTearOff):
(WebCore::SVGPathSegListPropertyTearOff::isReadOnly):
* svg/properties/SVGProperty.h:
(SVGProperty):
* svg/properties/SVGPropertyInfo.h:
(WebCore::SVGPropertyInfo::SVGPropertyInfo):
(SVGPropertyInfo):
* svg/properties/SVGPropertyTearOff.h:
(WebCore::SVGPropertyTearOff::isReadOnly):
* svg/properties/SVGStaticListPropertyTearOff.h:
(SVGStaticListPropertyTearOff):
(WebCore::SVGStaticListPropertyTearOff::isReadOnly):
Source/WebKit/mac:
* MigrateHeaders.make: Copy DOMSVGViewSpec*.h headers.
LayoutTests:
Re-enable a long disabled test for SVGViewSpec, and make it actually work.
Extend SVGViewSpec test coverage, and rebaseline results that changed due the SVGViewSpec constructor addition.
Make linking-a-03-b-all.svg a reftest, to avoid rebaselines on all platforms.
* platform/chromium-linux/svg/custom/linking-a-03-b-all-expected.png: Removed.
* platform/chromium-mac/svg/custom/linking-a-03-b-all-expected.png: Removed.
* platform/chromium-win/fast/js/global-constructors-expected.txt:
* platform/chromium-win/svg/custom/linking-a-03-b-all-expected.png: Removed.
* platform/chromium-win/svg/custom/linking-a-03-b-all-expected.txt: Removed.
* platform/gtk/fast/js/global-constructors-expected.txt:
* platform/gtk/svg/custom/linking-a-03-b-all-expected.png: Removed.
* platform/gtk/svg/custom/linking-a-03-b-all-expected.txt: Removed.
* platform/mac/fast/js/global-constructors-expected.txt:
* platform/mac/svg/custom/linking-a-03-b-all-expected.png: Removed.
* platform/mac/svg/custom/linking-a-03-b-all-expected.txt: Removed.
* platform/qt/fast/js/global-constructors-expected.txt:
* platform/qt/svg/custom/linking-a-03-b-all-expected.png: Removed.
* platform/qt/svg/custom/linking-a-03-b-all-expected.txt: Removed.
* platform/win/fast/js/global-constructors-expected.txt:
* svg/custom/global-constructors-expected.txt:
* svg/custom/linking-a-03-b-all-expected.svg: Added.
* svg/dom/SVGViewSpec-defaults-expected.txt: Added.
* svg/dom/SVGViewSpec-defaults.html: Added.
* svg/dom/SVGViewSpec-expected.txt: Added.
* svg/dom/SVGViewSpec.html: Added.
* svg/dom/complex-svgView-specification-expected.html: Added.
* svg/dom/complex-svgView-specification.html: Added.
* svg/dom/resources/viewspec-target.svg: Added.
* svg/dom/script-tests/SVGViewSpec-defaults.js: Added.
* svg/dom/script-tests/SVGViewSpec.js: Added.
(completeTest.script.onload):
(completeTest):
(testFragment):
(matrixToString):
(continueTesting):
* svg/dom/viewspec-parser-expected.txt: Added.
* svg/dom/viewspec-parser.html: Renamed from LayoutTests/svg/dom/viewspec-parser.html-disabled.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@118735 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 59d5135..8dd0e4c 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,49 @@
+2012-05-29 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ SVGViewSpec DOM bindings aka SVGSVGElement.currentView is unimplemented
+ https://bugs.webkit.org/show_bug.cgi?id=15495
+
+ Reviewed by Rob Buis.
+
+ Re-enable a long disabled test for SVGViewSpec, and make it actually work.
+ Extend SVGViewSpec test coverage, and rebaseline results that changed due the SVGViewSpec constructor addition.
+
+ Make linking-a-03-b-all.svg a reftest, to avoid rebaselines on all platforms.
+
+ * platform/chromium-linux/svg/custom/linking-a-03-b-all-expected.png: Removed.
+ * platform/chromium-mac/svg/custom/linking-a-03-b-all-expected.png: Removed.
+ * platform/chromium-win/fast/js/global-constructors-expected.txt:
+ * platform/chromium-win/svg/custom/linking-a-03-b-all-expected.png: Removed.
+ * platform/chromium-win/svg/custom/linking-a-03-b-all-expected.txt: Removed.
+ * platform/gtk/fast/js/global-constructors-expected.txt:
+ * platform/gtk/svg/custom/linking-a-03-b-all-expected.png: Removed.
+ * platform/gtk/svg/custom/linking-a-03-b-all-expected.txt: Removed.
+ * platform/mac/fast/js/global-constructors-expected.txt:
+ * platform/mac/svg/custom/linking-a-03-b-all-expected.png: Removed.
+ * platform/mac/svg/custom/linking-a-03-b-all-expected.txt: Removed.
+ * platform/qt/fast/js/global-constructors-expected.txt:
+ * platform/qt/svg/custom/linking-a-03-b-all-expected.png: Removed.
+ * platform/qt/svg/custom/linking-a-03-b-all-expected.txt: Removed.
+ * platform/win/fast/js/global-constructors-expected.txt:
+ * svg/custom/global-constructors-expected.txt:
+ * svg/custom/linking-a-03-b-all-expected.svg: Added.
+ * svg/dom/SVGViewSpec-defaults-expected.txt: Added.
+ * svg/dom/SVGViewSpec-defaults.html: Added.
+ * svg/dom/SVGViewSpec-expected.txt: Added.
+ * svg/dom/SVGViewSpec.html: Added.
+ * svg/dom/complex-svgView-specification-expected.html: Added.
+ * svg/dom/complex-svgView-specification.html: Added.
+ * svg/dom/resources/viewspec-target.svg: Added.
+ * svg/dom/script-tests/SVGViewSpec-defaults.js: Added.
+ * svg/dom/script-tests/SVGViewSpec.js: Added.
+ (completeTest.script.onload):
+ (completeTest):
+ (testFragment):
+ (matrixToString):
+ (continueTesting):
+ * svg/dom/viewspec-parser-expected.txt: Added.
+ * svg/dom/viewspec-parser.html: Renamed from LayoutTests/svg/dom/viewspec-parser.html-disabled.
+
2012-05-29 Marcus Bulach <bulach@chromium.org>
[chromium] Adjust expectations for fast/layers/clip-rects-assertion-expected.txt
diff --git a/LayoutTests/platform/chromium-linux/svg/custom/linking-a-03-b-all-expected.png b/LayoutTests/platform/chromium-linux/svg/custom/linking-a-03-b-all-expected.png
deleted file mode 100644
index 9e45d1f..0000000
--- a/LayoutTests/platform/chromium-linux/svg/custom/linking-a-03-b-all-expected.png
+++ /dev/null
Binary files differ
diff --git a/LayoutTests/platform/chromium-mac/svg/custom/linking-a-03-b-all-expected.png b/LayoutTests/platform/chromium-mac/svg/custom/linking-a-03-b-all-expected.png
deleted file mode 100644
index d9ad3cb..0000000
--- a/LayoutTests/platform/chromium-mac/svg/custom/linking-a-03-b-all-expected.png
+++ /dev/null
Binary files differ
diff --git a/LayoutTests/platform/chromium-win/fast/js/global-constructors-expected.txt b/LayoutTests/platform/chromium-win/fast/js/global-constructors-expected.txt
index af44696..85e5988 100644
--- a/LayoutTests/platform/chromium-win/fast/js/global-constructors-expected.txt
+++ b/LayoutTests/platform/chromium-win/fast/js/global-constructors-expected.txt
@@ -291,6 +291,8 @@
PASS SVGUseElement.toString() is '[object SVGUseElementConstructor]'
PASS SVGVKernElement.toString() is '[object SVGVKernElementConstructor]'
PASS SVGViewElement.toString() is '[object SVGViewElementConstructor]'
+PASS SVGViewSpec.toString() is '[object SVGViewSpecConstructor]'
+PASS SVGZoomAndPan.toString() is '[object SVGZoomAndPanConstructor]'
PASS SVGZoomEvent.toString() is '[object SVGZoomEventConstructor]'
PASS SharedWorker.toString() is '[object SharedWorkerConstructor]'
PASS Storage.toString() is '[object StorageConstructor]'
diff --git a/LayoutTests/platform/chromium-win/svg/custom/linking-a-03-b-all-expected.png b/LayoutTests/platform/chromium-win/svg/custom/linking-a-03-b-all-expected.png
deleted file mode 100644
index 6dccc5f..0000000
--- a/LayoutTests/platform/chromium-win/svg/custom/linking-a-03-b-all-expected.png
+++ /dev/null
Binary files differ
diff --git a/LayoutTests/platform/chromium-win/svg/custom/linking-a-03-b-all-expected.txt b/LayoutTests/platform/chromium-win/svg/custom/linking-a-03-b-all-expected.txt
deleted file mode 100644
index 76e5b30..0000000
--- a/LayoutTests/platform/chromium-win/svg/custom/linking-a-03-b-all-expected.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-layer at (0,0) size 800x600
- RenderView at (0,0) size 800x600
-layer at (0,0) size 480x360
- RenderSVGRoot {svg} at (0,0) size 480x360
- RenderSVGContainer {g} at (0,0) size 480x360
- RenderSVGText {text} at (100,9) size 188x14 contains 1 chunk(s)
- RenderSVGInlineText {#text} at (0,0) size 188x14
- chunk 1 text run 1 at (100.00,20.00) startOffset 0 endOffset 41 width 187.80: "Some circles with ids, for linking tests."
- RenderSVGEllipse {circle} at (0,0) size 0x0 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#FF0000]}] [cx=220.00] [cy=140.00] [r=35.00]
- RenderSVGText {text} at (203,88) size 39x14 contains 1 chunk(s)
- RenderSVGInlineText {#text} at (0,0) size 39x14
- chunk 1 text run 1 at (203.00,99.00) startOffset 0 endOffset 8 width 38.40: "circle-1"
- RenderSVGEllipse {circle} at (5,84) size 239x239 [stroke={[type=SOLID] [color=#00FF00] [stroke width=4.00]}] [fill={[type=SOLID] [color=#FFFF00]}] [cx=100.00] [cy=260.00] [r=20.00]
- RenderSVGText {text} at (80,284) size 39x14 contains 1 chunk(s)
- RenderSVGInlineText {#text} at (0,0) size 39x14
- chunk 1 text run 1 at (80.00,295.00) startOffset 0 endOffset 8 width 38.40: "circle-2"
- RenderSVGRect {rect} at (0,20) size 322x340 [stroke={[type=SOLID] [color=#000000]}] [x=64.00] [y=227.00] [width=72.00] [height=72.00]
- RenderSVGEllipse {circle} at (0,0) size 0x0 [stroke={[type=SOLID] [color=#0000FF] [stroke width=10.00]}] [cx=340.00] [cy=260.00] [r=50.00]
- RenderSVGText {text} at (320,321) size 39x14 contains 1 chunk(s)
- RenderSVGInlineText {#text} at (0,0) size 39x14
- chunk 1 text run 1 at (320.00,332.00) startOffset 0 endOffset 8 width 38.40: "circle-3"
- RenderSVGContainer {g} at (0,0) size 480x360
- RenderSVGRect {rect} at (0,0) size 480x360 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00]
diff --git a/LayoutTests/platform/gtk/fast/js/global-constructors-expected.txt b/LayoutTests/platform/gtk/fast/js/global-constructors-expected.txt
index 8a6c33d..55088a9 100644
--- a/LayoutTests/platform/gtk/fast/js/global-constructors-expected.txt
+++ b/LayoutTests/platform/gtk/fast/js/global-constructors-expected.txt
@@ -295,6 +295,7 @@
PASS SVGUseElement.toString() is '[object SVGUseElementConstructor]'
PASS SVGVKernElement.toString() is '[object SVGVKernElementConstructor]'
PASS SVGViewElement.toString() is '[object SVGViewElementConstructor]'
+PASS SVGViewSpec.toString() is '[object SVGViewSpecConstructor]'
PASS SVGZoomAndPan.toString() is '[object SVGZoomAndPanConstructor]'
PASS SVGZoomEvent.toString() is '[object SVGZoomEventConstructor]'
PASS Selection.toString() is '[object SelectionConstructor]'
diff --git a/LayoutTests/platform/gtk/svg/custom/linking-a-03-b-all-expected.png b/LayoutTests/platform/gtk/svg/custom/linking-a-03-b-all-expected.png
deleted file mode 100644
index caf5bbd..0000000
--- a/LayoutTests/platform/gtk/svg/custom/linking-a-03-b-all-expected.png
+++ /dev/null
Binary files differ
diff --git a/LayoutTests/platform/gtk/svg/custom/linking-a-03-b-all-expected.txt b/LayoutTests/platform/gtk/svg/custom/linking-a-03-b-all-expected.txt
deleted file mode 100644
index f3c1da4..0000000
--- a/LayoutTests/platform/gtk/svg/custom/linking-a-03-b-all-expected.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-layer at (0,0) size 800x600
- RenderView at (0,0) size 800x600
-layer at (0,0) size 480x360
- RenderSVGRoot {svg} at (0,0) size 480x360
- RenderSVGContainer {g} at (0,0) size 480x360
- RenderSVGText {text} at (100,9) size 188x14 contains 1 chunk(s)
- RenderSVGInlineText {#text} at (0,0) size 188x14
- chunk 1 text run 1 at (100.00,20.00) startOffset 0 endOffset 41 width 188.00: "Some circles with ids, for linking tests."
- RenderSVGEllipse {circle} at (0,0) size 0x0 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#FF0000]}] [cx=220.00] [cy=140.00] [r=35.00]
- RenderSVGText {text} at (203,88) size 39x14 contains 1 chunk(s)
- RenderSVGInlineText {#text} at (0,0) size 39x14
- chunk 1 text run 1 at (203.00,99.00) startOffset 0 endOffset 8 width 38.40: "circle-1"
- RenderSVGEllipse {circle} at (5,84) size 239x239 [stroke={[type=SOLID] [color=#00FF00] [stroke width=4.00]}] [fill={[type=SOLID] [color=#FFFF00]}] [cx=100.00] [cy=260.00] [r=20.00]
- RenderSVGText {text} at (80,284) size 39x14 contains 1 chunk(s)
- RenderSVGInlineText {#text} at (0,0) size 39x14
- chunk 1 text run 1 at (80.00,295.00) startOffset 0 endOffset 8 width 38.40: "circle-2"
- RenderSVGRect {rect} at (0,20) size 322x340 [stroke={[type=SOLID] [color=#000000]}] [x=64.00] [y=227.00] [width=72.00] [height=72.00]
- RenderSVGEllipse {circle} at (0,0) size 0x0 [stroke={[type=SOLID] [color=#0000FF] [stroke width=10.00]}] [cx=340.00] [cy=260.00] [r=50.00]
- RenderSVGText {text} at (320,321) size 39x14 contains 1 chunk(s)
- RenderSVGInlineText {#text} at (0,0) size 39x14
- chunk 1 text run 1 at (320.00,332.00) startOffset 0 endOffset 8 width 38.40: "circle-3"
- RenderSVGContainer {g} at (0,0) size 480x360
- RenderSVGRect {rect} at (0,0) size 480x360 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00]
diff --git a/LayoutTests/platform/mac/fast/js/global-constructors-expected.txt b/LayoutTests/platform/mac/fast/js/global-constructors-expected.txt
index 84e6c15..be67f6d 100644
--- a/LayoutTests/platform/mac/fast/js/global-constructors-expected.txt
+++ b/LayoutTests/platform/mac/fast/js/global-constructors-expected.txt
@@ -295,6 +295,7 @@
PASS SVGUseElement.toString() is '[object SVGUseElementConstructor]'
PASS SVGVKernElement.toString() is '[object SVGVKernElementConstructor]'
PASS SVGViewElement.toString() is '[object SVGViewElementConstructor]'
+PASS SVGViewSpec.toString() is '[object SVGViewSpecConstructor]'
PASS SVGZoomAndPan.toString() is '[object SVGZoomAndPanConstructor]'
PASS SVGZoomEvent.toString() is '[object SVGZoomEventConstructor]'
PASS Selection.toString() is '[object SelectionConstructor]'
diff --git a/LayoutTests/platform/mac/svg/custom/linking-a-03-b-all-expected.png b/LayoutTests/platform/mac/svg/custom/linking-a-03-b-all-expected.png
deleted file mode 100644
index 10f7e20..0000000
--- a/LayoutTests/platform/mac/svg/custom/linking-a-03-b-all-expected.png
+++ /dev/null
Binary files differ
diff --git a/LayoutTests/platform/mac/svg/custom/linking-a-03-b-all-expected.txt b/LayoutTests/platform/mac/svg/custom/linking-a-03-b-all-expected.txt
deleted file mode 100644
index 7aae6f3..0000000
--- a/LayoutTests/platform/mac/svg/custom/linking-a-03-b-all-expected.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-layer at (0,0) size 800x600
- RenderView at (0,0) size 800x600
-layer at (0,0) size 480x360
- RenderSVGRoot {svg} at (0,0) size 480x360
- RenderSVGContainer {g} at (0,0) size 480x360
- RenderSVGText {text} at (100,9) size 188x14 contains 1 chunk(s)
- RenderSVGInlineText {#text} at (0,0) size 188x14
- chunk 1 text run 1 at (100.00,20.00) startOffset 0 endOffset 41 width 188.00: "Some circles with ids, for linking tests."
- RenderSVGEllipse {circle} at (0,0) size 0x0 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#FF0000]}] [cx=220.00] [cy=140.00] [r=35.00]
- RenderSVGText {text} at (203,87) size 39x14 contains 1 chunk(s)
- RenderSVGInlineText {#text} at (0,0) size 39x14
- chunk 1 text run 1 at (203.00,99.00) startOffset 0 endOffset 8 width 38.40: "circle-1"
- RenderSVGEllipse {circle} at (5,84) size 239x239 [stroke={[type=SOLID] [color=#00FF00] [stroke width=4.00]}] [fill={[type=SOLID] [color=#FFFF00]}] [cx=100.00] [cy=260.00] [r=20.00]
- RenderSVGText {text} at (80,283) size 39x14 contains 1 chunk(s)
- RenderSVGInlineText {#text} at (0,0) size 39x14
- chunk 1 text run 1 at (80.00,295.00) startOffset 0 endOffset 8 width 38.40: "circle-2"
- RenderSVGRect {rect} at (0,20) size 322x340 [stroke={[type=SOLID] [color=#000000]}] [x=64.00] [y=227.00] [width=72.00] [height=72.00]
- RenderSVGEllipse {circle} at (0,0) size 0x0 [stroke={[type=SOLID] [color=#0000FF] [stroke width=10.00]}] [cx=340.00] [cy=260.00] [r=50.00]
- RenderSVGText {text} at (320,320) size 39x14 contains 1 chunk(s)
- RenderSVGInlineText {#text} at (0,0) size 39x14
- chunk 1 text run 1 at (320.00,332.00) startOffset 0 endOffset 8 width 38.40: "circle-3"
- RenderSVGContainer {g} at (0,0) size 480x360
- RenderSVGRect {rect} at (0,0) size 480x360 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00]
diff --git a/LayoutTests/platform/qt/fast/js/global-constructors-expected.txt b/LayoutTests/platform/qt/fast/js/global-constructors-expected.txt
index e0f97c5..b45e956 100644
--- a/LayoutTests/platform/qt/fast/js/global-constructors-expected.txt
+++ b/LayoutTests/platform/qt/fast/js/global-constructors-expected.txt
@@ -282,6 +282,7 @@
PASS SVGUnitTypes.toString() is '[object SVGUnitTypesConstructor]'
PASS SVGUseElement.toString() is '[object SVGUseElementConstructor]'
PASS SVGViewElement.toString() is '[object SVGViewElementConstructor]'
+PASS SVGViewSpec.toString() is '[object SVGViewSpecConstructor]'
PASS SVGZoomAndPan.toString() is '[object SVGZoomAndPanConstructor]'
PASS SVGZoomEvent.toString() is '[object SVGZoomEventConstructor]'
PASS Selection.toString() is '[object SelectionConstructor]'
diff --git a/LayoutTests/platform/qt/svg/custom/linking-a-03-b-all-expected.png b/LayoutTests/platform/qt/svg/custom/linking-a-03-b-all-expected.png
deleted file mode 100644
index c133210..0000000
--- a/LayoutTests/platform/qt/svg/custom/linking-a-03-b-all-expected.png
+++ /dev/null
Binary files differ
diff --git a/LayoutTests/platform/qt/svg/custom/linking-a-03-b-all-expected.txt b/LayoutTests/platform/qt/svg/custom/linking-a-03-b-all-expected.txt
deleted file mode 100644
index bf06d61..0000000
--- a/LayoutTests/platform/qt/svg/custom/linking-a-03-b-all-expected.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-layer at (0,0) size 800x600
- RenderView at (0,0) size 800x600
-layer at (0,0) size 480x360
- RenderSVGRoot {svg} at (0,0) size 480x360
- RenderSVGContainer {g} at (0,0) size 480x360
- RenderSVGText {text} at (100,8) size 202x16 contains 1 chunk(s)
- RenderSVGInlineText {#text} at (0,0) size 202x16
- chunk 1 text run 1 at (100.00,20.00) startOffset 0 endOffset 41 width 201.60: "Some circles with ids, for linking tests."
- RenderSVGEllipse {circle} at (0,0) size 0x0 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#FF0000]}] [cx=220.00] [cy=140.00] [r=35.00]
- RenderSVGText {text} at (203,87) size 39x16 contains 1 chunk(s)
- RenderSVGInlineText {#text} at (0,0) size 39x16
- chunk 1 text run 1 at (203.00,99.00) startOffset 0 endOffset 8 width 38.40: "circle-1"
- RenderSVGEllipse {circle} at (5,84) size 239x239 [stroke={[type=SOLID] [color=#00FF00] [stroke width=4.00]}] [fill={[type=SOLID] [color=#FFFF00]}] [cx=100.00] [cy=260.00] [r=20.00]
- RenderSVGText {text} at (80,283) size 39x16 contains 1 chunk(s)
- RenderSVGInlineText {#text} at (0,0) size 39x16
- chunk 1 text run 1 at (80.00,295.00) startOffset 0 endOffset 8 width 38.40: "circle-2"
- RenderSVGRect {rect} at (0,20) size 322x340 [stroke={[type=SOLID] [color=#000000]}] [x=64.00] [y=227.00] [width=72.00] [height=72.00]
- RenderSVGEllipse {circle} at (0,0) size 0x0 [stroke={[type=SOLID] [color=#0000FF] [stroke width=10.00]}] [cx=340.00] [cy=260.00] [r=50.00]
- RenderSVGText {text} at (320,320) size 39x16 contains 1 chunk(s)
- RenderSVGInlineText {#text} at (0,0) size 39x16
- chunk 1 text run 1 at (320.00,332.00) startOffset 0 endOffset 8 width 38.40: "circle-3"
- RenderSVGContainer {g} at (0,0) size 480x360
- RenderSVGRect {rect} at (0,0) size 480x360 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00]
diff --git a/LayoutTests/platform/win/fast/js/global-constructors-expected.txt b/LayoutTests/platform/win/fast/js/global-constructors-expected.txt
index af44696..85e5988 100644
--- a/LayoutTests/platform/win/fast/js/global-constructors-expected.txt
+++ b/LayoutTests/platform/win/fast/js/global-constructors-expected.txt
@@ -291,6 +291,8 @@
PASS SVGUseElement.toString() is '[object SVGUseElementConstructor]'
PASS SVGVKernElement.toString() is '[object SVGVKernElementConstructor]'
PASS SVGViewElement.toString() is '[object SVGViewElementConstructor]'
+PASS SVGViewSpec.toString() is '[object SVGViewSpecConstructor]'
+PASS SVGZoomAndPan.toString() is '[object SVGZoomAndPanConstructor]'
PASS SVGZoomEvent.toString() is '[object SVGZoomEventConstructor]'
PASS SharedWorker.toString() is '[object SharedWorkerConstructor]'
PASS Storage.toString() is '[object StorageConstructor]'
diff --git a/LayoutTests/svg/custom/global-constructors-expected.txt b/LayoutTests/svg/custom/global-constructors-expected.txt
index 72deff5..6cfd0d1 100644
--- a/LayoutTests/svg/custom/global-constructors-expected.txt
+++ b/LayoutTests/svg/custom/global-constructors-expected.txt
@@ -32,7 +32,7 @@
FAIL SVGExternalResourcesRequired.toString() should be [object SVGExternalResourcesRequiredConstructor]. Threw exception ReferenceError: Can't find variable: SVGExternalResourcesRequired
FAIL SVGFitToViewBox.toString() should be [object SVGFitToViewBoxConstructor]. Threw exception ReferenceError: Can't find variable: SVGFitToViewBox
PASS SVGZoomAndPan.toString() is '[object SVGZoomAndPanConstructor]'
-FAIL SVGViewSpec.toString() should be [object SVGViewSpecConstructor]. Threw exception ReferenceError: Can't find variable: SVGViewSpec
+PASS SVGViewSpec.toString() is '[object SVGViewSpecConstructor]'
FAIL SVGURIReference.toString() should be [object SVGURIReferenceConstructor]. Threw exception ReferenceError: Can't find variable: SVGURIReference
FAIL SVGCSSRule.toString() should be [object SVGCSSRuleConstructor]. Threw exception ReferenceError: Can't find variable: SVGCSSRule
PASS SVGDocument.toString() is '[object SVGDocumentConstructor]'
diff --git a/LayoutTests/svg/custom/linking-a-03-b-all-expected.svg b/LayoutTests/svg/custom/linking-a-03-b-all-expected.svg
new file mode 100644
index 0000000..852c24a
--- /dev/null
+++ b/LayoutTests/svg/custom/linking-a-03-b-all-expected.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Basic//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-basic.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="480" height="360" viewBox="64 227 72 72" preserveAspectRatio="none">
+ <g id="test-body-content" transform="rotate(5)">
+ <text x="100" y="20" style="font-size:12">Some circles with ids, for linking tests.</text>
+ <circle id="circle-1" cx="220" cy="140" r="35" style="fill:red; stroke:black"/>
+ <text style="font-family:Helvetica;font-size:12" x="203" y="99">circle-1</text>
+ <circle id="circle-2" cx="100" cy="260" r="20" style="stroke:lime; fill:yellow; stroke-width:4"/>
+ <text style="font-family:Helvetica;font-size:12" x="80" y="295">circle-2</text>
+ <!-- Framing rect for circle-2 -->
+ <rect x="64" y="227" width="72" height="72" style="fill:none; stroke:black"/>
+ <circle id="circle-3" cx="340" cy="260" r="50" style="stroke:blue; fill:none; stroke-width:10"/>
+ <text style="font-family:Helvetica;font-size:12" x="320" y="332">circle-3</text>
+ </g>
+ <g id="test-legend" transform="rotate(5)">
+ <!-- Test-framing rectangle, drawn just inside viewport boundary. -->
+ <rect id="test-frame" x="1" y="1" width="478" height="358" style="fill:none; stroke:#000000"/>
+ </g>
+</svg>
diff --git a/LayoutTests/svg/dom/SVGViewSpec-defaults-expected.txt b/LayoutTests/svg/dom/SVGViewSpec-defaults-expected.txt
new file mode 100644
index 0000000..0f74bf1
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGViewSpec-defaults-expected.txt
@@ -0,0 +1,70 @@
+This test checks the SVGViewSpec API
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Check initial SVGSVGElement.currentView values on a SVGSVGElement
+PASS currentView.transform.numberOfItems is 0
+PASS currentView.viewTarget is null
+PASS currentView.zoomAndPan is SVGZoomAndPan.SVG_ZOOMANDPAN_MAGNIFY
+PASS currentView.viewBox.baseVal.x is 0
+PASS currentView.viewBox.baseVal.y is 0
+PASS currentView.viewBox.baseVal.width is 0
+PASS currentView.viewBox.baseVal.height is 0
+PASS currentView.preserveAspectRatio.baseVal.align is SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMID
+PASS currentView.preserveAspectRatio.baseVal.meetOrSlice is SVGPreserveAspectRatio.SVG_MEETORSLICE_MEET
+PASS currentView.viewBoxString is "0 0 0 0"
+PASS currentView.preserveAspectRatioString is "xMidYMid meet"
+PASS currentView.transformString is ""
+PASS currentView.viewTargetString is ""
+PASS currentView.zoomAndPan is SVGZoomAndPan.SVG_ZOOMANDPAN_MAGNIFY
+
+Try changing zoomAndPan - none of these will work, as SVGViewSpec is fully readonly - even the animated properties it inherits from parent classes like SVGZoomAndPan/SVGFitToViewBox
+PASS currentView.zoomAndPan = SVGZoomAndPan.SVG_ZOOMANDPAN_DISABLE threw exception Error: NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7.
+PASS currentView.zoomAndPan is SVGZoomAndPan.SVG_ZOOMANDPAN_MAGNIFY
+
+Try changing viewBox - this has no affect on the SVGSVGElement the viewSpec belongs to - it exposed all its properties as read-only
+PASS currentView.viewBox.baseVal.x = 10 threw exception Error: NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7.
+PASS currentView.viewBox.baseVal.x is 0
+PASS currentView.viewBox.baseVal.y = 20 threw exception Error: NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7.
+PASS currentView.viewBox.baseVal.y is 0
+PASS currentView.viewBox.baseVal.width = 50 threw exception Error: NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7.
+PASS currentView.viewBox.baseVal.width is 0
+PASS currentView.viewBox.baseVal.height = 100 threw exception Error: NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7.
+PASS currentView.viewBox.baseVal.height is 0
+PASS currentView.viewBoxString is "0 0 0 0"
+
+Try changing viewBoxString
+PASS currentView.viewBoxString = '1 2 3 4' is "1 2 3 4"
+PASS currentView.viewBoxString is "0 0 0 0"
+
+Try changing preserveAspectRatio
+PASS currentView.preserveAspectRatio.baseVal.align = SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMIN threw exception Error: NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7.
+PASS currentView.preserveAspectRatio.baseVal.align is SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMID
+PASS currentView.preserveAspectRatio.baseVal.meetOrSlice = SVGPreserveAspectRatio.SVG_MEETORSLICE_SLICE threw exception Error: NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7.
+PASS currentView.preserveAspectRatio.baseVal.meetOrSlice is SVGPreserveAspectRatio.SVG_MEETORSLICE_MEET
+
+Try changing preserveAspectRatioString
+PASS currentView.preserveAspectRatioString = 'xMinYMin slice' is "xMinYMin slice"
+PASS currentView.preserveAspectRatioString is "xMidYMid meet"
+
+Try changing transformString
+PASS currentView.transformString = 'rotate(90)' is "rotate(90)"
+PASS currentView.transformString is ""
+
+Try changing viewTarget
+PASS currentView.viewTarget = svgElement is svgElement
+PASS currentView.viewTarget is null
+
+Try changing viewTargetString
+PASS currentView.viewTargetString = '#test' is "#test"
+PASS currentView.viewTargetString is ""
+
+Try changing transform
+PASS currentView.transform.clear() threw exception Error: NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7.
+PASS currentView.transform.numberOfItems is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dom/SVGViewSpec-defaults.html b/LayoutTests/svg/dom/SVGViewSpec-defaults.html
new file mode 100644
index 0000000..8cd9131
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGViewSpec-defaults.html
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGViewSpec-defaults.js"></script>
+<script src="../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dom/SVGViewSpec-expected.txt b/LayoutTests/svg/dom/SVGViewSpec-expected.txt
new file mode 100644
index 0000000..d10231a
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGViewSpec-expected.txt
@@ -0,0 +1,51 @@
+This test checks the SVGViewSpec API, operating on a parsed viewSpec
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Loading external SVG resources/viewspec-target.svg
+Passing SVGViewSpec: svgView(viewBox(0,0,100,50);preserveAspectRatio(xMinYMid slice);transform(translate(0 10) translate(25 25) rotate(45) translate(-25 -25) scale(0.7 0.7));viewTarget(blub);zoomAndPan(disable))
+
+
+Check transform value
+PASS currentView.transformString is "translate(0 10) translate(25 25) rotate(45) translate(-25 -25) scale(0.7 0.7)"
+PASS currentView.transform.numberOfItems is 5
+PASS currentView.transform.getItem(0).type is SVGTransform.SVG_TRANSFORM_TRANSLATE
+PASS currentView.transform.getItem(0).angle is 0
+PASS matrixToString(currentView.transform.getItem(0).matrix) is "[1.00 0.00 0.00 1.00 0.00 10.00]"
+PASS currentView.transform.getItem(1).type is SVGTransform.SVG_TRANSFORM_TRANSLATE
+PASS currentView.transform.getItem(1).angle is 0
+PASS matrixToString(currentView.transform.getItem(1).matrix) is "[1.00 0.00 0.00 1.00 25.00 25.00]"
+PASS currentView.transform.getItem(2).type is SVGTransform.SVG_TRANSFORM_ROTATE
+PASS currentView.transform.getItem(2).angle is 45
+PASS matrixToString(currentView.transform.getItem(2).matrix) is "[0.71 0.71 -0.71 0.71 0.00 0.00]"
+PASS currentView.transform.getItem(3).type is SVGTransform.SVG_TRANSFORM_TRANSLATE
+PASS currentView.transform.getItem(3).angle is 0
+PASS matrixToString(currentView.transform.getItem(3).matrix) is "[1.00 0.00 0.00 1.00 -25.00 -25.00]"
+PASS currentView.transform.getItem(4).type is SVGTransform.SVG_TRANSFORM_SCALE
+PASS currentView.transform.getItem(4).angle is 0
+PASS matrixToString(currentView.transform.getItem(4).matrix) is "[0.70 0.00 0.00 0.70 0.00 0.00]"
+
+Check viewTarget value
+PASS currentView.viewTargetString is "blub"
+PASS currentView.viewTarget is null
+
+Check zoomAndPan value
+PASS currentView.zoomAndPan is SVGZoomAndPan.SVG_ZOOMANDPAN_DISABLE
+
+Check viewBox value
+PASS currentView.viewBox.baseVal.x is 0
+PASS currentView.viewBox.baseVal.y is 0
+PASS currentView.viewBox.baseVal.width is 100
+PASS currentView.viewBox.baseVal.height is 50
+PASS currentView.viewBoxString is "0 0 100 50"
+
+Check preserveAspectRatio value
+PASS currentView.preserveAspectRatioString is "xMinYMid slice"
+PASS currentView.preserveAspectRatio.baseVal.align is SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMID
+PASS currentView.preserveAspectRatio.baseVal.meetOrSlice is SVGPreserveAspectRatio.SVG_MEETORSLICE_SLICE
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dom/SVGViewSpec.html b/LayoutTests/svg/dom/SVGViewSpec.html
new file mode 100644
index 0000000..a1f9992
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGViewSpec.html
@@ -0,0 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/SVGViewSpec.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/svg/dom/complex-svgView-specification-expected.html b/LayoutTests/svg/dom/complex-svgView-specification-expected.html
new file mode 100644
index 0000000..59ee67f
--- /dev/null
+++ b/LayoutTests/svg/dom/complex-svgView-specification-expected.html
@@ -0,0 +1,7 @@
+<!DOCTYPE html>
+<html>
+<body style="margin: 0">
+<svg style="display:block" width="120" height="120" viewBox="0 0 100 50" preserveAspectRatio="xMinYMid slice">
+ <rect fill="green" width="50" height="50" transform="translate(0 10) translate(25 25) rotate(45) translate(-25 -25) scale(0.7 0.7)"/>
+</svg>
+</body>
diff --git a/LayoutTests/svg/dom/complex-svgView-specification.html b/LayoutTests/svg/dom/complex-svgView-specification.html
new file mode 100644
index 0000000..0e38cc4
--- /dev/null
+++ b/LayoutTests/svg/dom/complex-svgView-specification.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<html>
+<body style="margin: 0">
+ <iframe style="border: 0; display: block" width="120" height="120" src="resources/viewspec-target.svg#svgView(viewBox(0,0,100,50);preserveAspectRatio(xMinYMid slice);transform(translate(0 10) translate(25 25) rotate(45) translate(-25 -25) scale(0.7 0.7)))"/>
+</body>
diff --git a/LayoutTests/svg/dom/resources/viewspec-target.svg b/LayoutTests/svg/dom/resources/viewspec-target.svg
new file mode 100644
index 0000000..a7b5dc3
--- /dev/null
+++ b/LayoutTests/svg/dom/resources/viewspec-target.svg
@@ -0,0 +1,4 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+ <rect width="50" height="50" fill="green"/>
+ <rect y="60" x="60" width="50" height="50" fill="red"/>
+</svg>
diff --git a/LayoutTests/svg/dom/script-tests/SVGViewSpec-defaults.js b/LayoutTests/svg/dom/script-tests/SVGViewSpec-defaults.js
new file mode 100644
index 0000000..243b56d
--- /dev/null
+++ b/LayoutTests/svg/dom/script-tests/SVGViewSpec-defaults.js
@@ -0,0 +1,84 @@
+description("This test checks the SVGViewSpec API");
+
+var svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg");
+var currentView = svgElement.currentView;
+svgElement.setAttribute("id", "test");
+svgElement.setAttribute("width", "150");
+svgElement.setAttribute("height", "50");
+svgElement.setAttribute("display", "block");
+
+debug("");
+debug("Check initial SVGSVGElement.currentView values on a SVGSVGElement");
+shouldBe("currentView.transform.numberOfItems", "0");
+shouldBeNull("currentView.viewTarget");
+shouldBe("currentView.zoomAndPan", "SVGZoomAndPan.SVG_ZOOMANDPAN_MAGNIFY");
+shouldBe("currentView.viewBox.baseVal.x", "0");
+shouldBe("currentView.viewBox.baseVal.y", "0");
+shouldBe("currentView.viewBox.baseVal.width", "0");
+shouldBe("currentView.viewBox.baseVal.height", "0");
+shouldBe("currentView.preserveAspectRatio.baseVal.align", "SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMID");
+shouldBe("currentView.preserveAspectRatio.baseVal.meetOrSlice", "SVGPreserveAspectRatio.SVG_MEETORSLICE_MEET");
+shouldBeEqualToString("currentView.viewBoxString", "0 0 0 0");
+shouldBeEqualToString("currentView.preserveAspectRatioString", "xMidYMid meet");
+shouldBeEqualToString("currentView.transformString", "");
+shouldBeEqualToString("currentView.viewTargetString", "");
+shouldBe("currentView.zoomAndPan", "SVGZoomAndPan.SVG_ZOOMANDPAN_MAGNIFY");
+
+debug("");
+debug("Try changing zoomAndPan - none of these will work, as SVGViewSpec is fully readonly - even the animated properties it inherits from parent classes like SVGZoomAndPan/SVGFitToViewBox");
+shouldThrow("currentView.zoomAndPan = SVGZoomAndPan.SVG_ZOOMANDPAN_DISABLE");
+shouldBe("currentView.zoomAndPan", "SVGZoomAndPan.SVG_ZOOMANDPAN_MAGNIFY");
+
+debug("");
+debug("Try changing viewBox - this has no affect on the SVGSVGElement the viewSpec belongs to - it exposed all its properties as read-only");
+shouldThrow("currentView.viewBox.baseVal.x = 10");
+shouldBe("currentView.viewBox.baseVal.x", "0");
+shouldThrow("currentView.viewBox.baseVal.y = 20");
+shouldBe("currentView.viewBox.baseVal.y", "0");
+shouldThrow("currentView.viewBox.baseVal.width = 50");
+shouldBe("currentView.viewBox.baseVal.width", "0");
+shouldThrow("currentView.viewBox.baseVal.height = 100");
+shouldBe("currentView.viewBox.baseVal.height", "0");
+shouldBeEqualToString("currentView.viewBoxString", "0 0 0 0");
+
+debug("");
+debug("Try changing viewBoxString");
+shouldBeEqualToString("currentView.viewBoxString = '1 2 3 4'", "1 2 3 4");
+shouldBeEqualToString("currentView.viewBoxString", "0 0 0 0");
+
+debug("");
+debug("Try changing preserveAspectRatio");
+shouldThrow("currentView.preserveAspectRatio.baseVal.align = SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMIN");
+shouldBe("currentView.preserveAspectRatio.baseVal.align", "SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMIDYMID");
+shouldThrow("currentView.preserveAspectRatio.baseVal.meetOrSlice = SVGPreserveAspectRatio.SVG_MEETORSLICE_SLICE");
+shouldBe("currentView.preserveAspectRatio.baseVal.meetOrSlice", "SVGPreserveAspectRatio.SVG_MEETORSLICE_MEET");
+
+debug("");
+debug("Try changing preserveAspectRatioString");
+shouldBeEqualToString("currentView.preserveAspectRatioString = 'xMinYMin slice'", "xMinYMin slice");
+shouldBeEqualToString("currentView.preserveAspectRatioString", "xMidYMid meet");
+
+
+debug("");
+debug("Try changing transformString");
+shouldBeEqualToString("currentView.transformString = 'rotate(90)'", "rotate(90)");
+shouldBeEqualToString("currentView.transformString", "");
+
+
+debug("");
+debug("Try changing viewTarget");
+shouldBe("currentView.viewTarget = svgElement", "svgElement");
+shouldBeNull("currentView.viewTarget");
+
+
+debug("");
+debug("Try changing viewTargetString");
+shouldBeEqualToString("currentView.viewTargetString = '#test'", "#test");
+shouldBeEqualToString("currentView.viewTargetString", "");
+
+debug("");
+debug("Try changing transform");
+shouldThrow("currentView.transform.clear()");
+shouldBe("currentView.transform.numberOfItems", "0");
+
+successfullyParsed = true;
diff --git a/LayoutTests/svg/dom/script-tests/SVGViewSpec.js b/LayoutTests/svg/dom/script-tests/SVGViewSpec.js
new file mode 100644
index 0000000..f6c85c1
--- /dev/null
+++ b/LayoutTests/svg/dom/script-tests/SVGViewSpec.js
@@ -0,0 +1,94 @@
+description("This test checks the SVGViewSpec API, operating on a parsed viewSpec");
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+
+function completeTest() {
+ var script = document.createElement("script");
+
+ script.onload = function() {
+ if (window.layoutTestController)
+ layoutTestController.notifyDone();
+ };
+
+ script.src = "../../fast/js/resources/js-test-post.js";
+ document.body.appendChild(script);
+}
+
+// Load an external file to test svgView() handling.
+function testFragment(string) {
+ debug("");
+ debug("Loading external SVG resources/viewspec-target.svg");
+ debug("Passing SVGViewSpec: " + string);
+ debug("");
+ var iframeElement = document.createElement("iframe");
+ iframeElement.setAttribute("id", "iframe");
+ iframeElement.setAttribute("style", "display: block");
+ iframeElement.setAttribute("width", "120px");
+ iframeElement.setAttribute("height", "120px");
+ iframeElement.setAttribute("onload", "setTimeout(continueTesting, 0)");
+ var newURL = "resources/viewspec-target.svg#" + string;
+ iframeElement.src = newURL;
+
+ document.getElementById("console").appendChild(iframeElement);
+}
+
+function matrixToString(matrix) {
+ return "[" + matrix.a.toFixed(2) + " " + matrix.b.toFixed(2) + " " + matrix.c.toFixed(2) + " " + matrix.d.toFixed(2) + " " + matrix.e.toFixed(2) + " " + matrix.f.toFixed(2) + "]";
+}
+
+function continueTesting() {
+ currentView = document.getElementById("iframe").contentDocument.documentElement.currentView;
+
+ debug("");
+ debug("Check transform value");
+ shouldBeEqualToString("currentView.transformString", "translate(0 10) translate(25 25) rotate(45) translate(-25 -25) scale(0.7 0.7)");
+ shouldBe("currentView.transform.numberOfItems", "5");
+
+ shouldBe("currentView.transform.getItem(0).type", "SVGTransform.SVG_TRANSFORM_TRANSLATE");
+ shouldBe("currentView.transform.getItem(0).angle", "0");
+ shouldBeEqualToString("matrixToString(currentView.transform.getItem(0).matrix)", "[1.00 0.00 0.00 1.00 0.00 10.00]");
+
+ shouldBe("currentView.transform.getItem(1).type", "SVGTransform.SVG_TRANSFORM_TRANSLATE");
+ shouldBe("currentView.transform.getItem(1).angle", "0");
+ shouldBeEqualToString("matrixToString(currentView.transform.getItem(1).matrix)", "[1.00 0.00 0.00 1.00 25.00 25.00]");
+
+ shouldBe("currentView.transform.getItem(2).type", "SVGTransform.SVG_TRANSFORM_ROTATE");
+ shouldBe("currentView.transform.getItem(2).angle", "45");
+ shouldBeEqualToString("matrixToString(currentView.transform.getItem(2).matrix)", "[0.71 0.71 -0.71 0.71 0.00 0.00]");
+
+ shouldBe("currentView.transform.getItem(3).type", "SVGTransform.SVG_TRANSFORM_TRANSLATE");
+ shouldBe("currentView.transform.getItem(3).angle", "0");
+ shouldBeEqualToString("matrixToString(currentView.transform.getItem(3).matrix)", "[1.00 0.00 0.00 1.00 -25.00 -25.00]");
+
+ shouldBe("currentView.transform.getItem(4).type", "SVGTransform.SVG_TRANSFORM_SCALE");
+ shouldBe("currentView.transform.getItem(4).angle", "0");
+ shouldBeEqualToString("matrixToString(currentView.transform.getItem(4).matrix)", "[0.70 0.00 0.00 0.70 0.00 0.00]");
+
+ debug("");
+ debug("Check viewTarget value");
+ shouldBeEqualToString("currentView.viewTargetString", "blub");
+ shouldBeNull("currentView.viewTarget"); // There's no element named 'blub' in the tree.
+
+ debug("");
+ debug("Check zoomAndPan value");
+ shouldBe("currentView.zoomAndPan", "SVGZoomAndPan.SVG_ZOOMANDPAN_DISABLE");
+
+ debug("");
+ debug("Check viewBox value");
+ shouldBe("currentView.viewBox.baseVal.x", "0");
+ shouldBe("currentView.viewBox.baseVal.y", "0");
+ shouldBe("currentView.viewBox.baseVal.width", "100");
+ shouldBe("currentView.viewBox.baseVal.height", "50");
+ shouldBeEqualToString("currentView.viewBoxString", "0 0 100 50");
+
+ debug("");
+ debug("Check preserveAspectRatio value");
+ shouldBeEqualToString("currentView.preserveAspectRatioString", "xMinYMid slice");
+ shouldBe("currentView.preserveAspectRatio.baseVal.align", "SVGPreserveAspectRatio.SVG_PRESERVEASPECTRATIO_XMINYMID");
+ shouldBe("currentView.preserveAspectRatio.baseVal.meetOrSlice", "SVGPreserveAspectRatio.SVG_MEETORSLICE_SLICE");
+
+ completeTest();
+}
+
+testFragment("svgView(viewBox(0,0,100,50);preserveAspectRatio(xMinYMid slice);transform(translate(0 10) translate(25 25) rotate(45) translate(-25 -25) scale(0.7 0.7));viewTarget(blub);zoomAndPan(disable))");
+successfullyParsed = true;
diff --git a/LayoutTests/svg/dom/viewspec-parser-expected.txt b/LayoutTests/svg/dom/viewspec-parser-expected.txt
new file mode 100644
index 0000000..3d5dade
--- /dev/null
+++ b/LayoutTests/svg/dom/viewspec-parser-expected.txt
@@ -0,0 +1,945 @@
+This test fuzzes the transform parser with semi-random attribute values and dumps the results of any values that parse successfully.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Loaded: resources/viewspec-target.svg#
+Parsed: [initial view] from: [initial view]
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(0,0,200,200)))
+Parsed: svgView(viewBox(0 0 200 200)) from: svgView(viewBox(0,0,200,200)))
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(xMaxYMin slice))
+Parsed: svgView(preserveAspectRatio(xMaxYMin slice)) from: svgView(preserveAspectRatio(xMaxYMin slice))
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(xMaxYMin))
+Parsed: svgView(preserveAspectRatio(xMaxYMin meet)) from: svgView(preserveAspectRatio(xMaxYMin))
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(1,2,3,4);preserveAspectRatio(xMaxYMin))
+Parsed: svgView(viewBox(1 2 3 4);preserveAspectRatio(xMaxYMin meet)) from: svgView(viewBox(1,2,3,4);preserveAspectRatio(xMaxYMin))
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(disable))
+Parsed: svgView(zoomAndPan(disable)) from: svgView(zoomAndPan(disable))
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(#myElementId))
+Parsed: svgView(viewTarget(#myElementId)) from: svgView(viewTarget(#myElementId))
+
+Loaded: resources/viewspec-target.svg#svgView
+Parsed: [initial view] from: svgView
+
+Loaded: resources/viewspec-target.svg#svgView(
+Parsed: [initial view] from: svgView(
+
+Loaded: resources/viewspec-target.svg#svgView()
+Parsed: [initial view] from: svgView()
+
+Loaded: resources/viewspec-target.svg#svgView(
+Parsed: [initial view] from: svgView(
+
+Loaded: resources/viewspec-target.svg#svgView(transform(scale(2));;)
+Parsed: [initial view] from: svgView(transform(scale(2));;)
+
+Loaded: resources/viewspec-target.svg#svgView(transform(scale(2));x
+Parsed: [initial view] from: svgView(transform(scale(2));x
+
+Loaded: resources/viewspec-target.svg#svgView(transform(scale(.5)))
+Parsed: svgView(transform(scale(0.5 0.5))) from: svgView(transform(scale(.5)))
+
+Loaded: resources/viewspec-target.svg#svgView(;transform(scale(.5)))
+Parsed: [initial view] from: svgView(;transform(scale(.5)))
+
+Loaded: resources/viewspec-target.svg#svgView(;;transform(scale(.5)))
+Parsed: [initial view] from: svgView(;;transform(scale(.5)))
+
+Loaded: resources/viewspec-target.svg#svgView(transform(scale(.5));transform(scale(2));transform(scale(2)))
+Parsed: svgView(transform(scale(0.5 0.5) scale(2 2) scale(2 2))) from: svgView(transform(scale(.5));transform(scale(2));transform(scale(2)))
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox())
+Parsed: [initial view] from: svgView(viewBox())
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(0))
+Parsed: [initial view] from: svgView(viewBox(0))
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(0,0))
+Parsed: [initial view] from: svgView(viewBox(0,0))
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(0,0,0))
+Parsed: [initial view] from: svgView(viewBox(0,0,0))
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(0,0,0,0))
+Parsed: [initial view] from: svgView(viewBox(0,0,0,0))
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox( 78)28
+Parsed: [initial view] from: svgView(viewBox( 78)2 8
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(e.
+Parsed: [initial view] from: svgView(viewBox(e.
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(7
+Parsed: [initial view] from: svgView(viewBox(7
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox((
+Parsed: [initial view] from: svgView(viewBox( (
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(
+Parsed: [initial view] from: svgView(viewBox(
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(.)29e0 7950,- e
+Parsed: [initial view] from: svgView(viewBox(.)2 9e0 795 0,- e
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(e,4(7- )+e(e8.
+Parsed: [initial view] from: svgView(viewBox(e,4(7- )+e(e8.
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(74- 9.(+ e.0e635
+Parsed: [initial view] from: svgView(viewBox(74- 9.(+ e.0e635
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(-9,).8e7e4e9ee
+Parsed: [initial view] from: svgView(viewBox(-9,).8e7e4e9ee
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(49-,,4)30378.052
+Parsed: [initial view] from: svgView(viewBox(49-,,4)30378.052
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(e7863e
+Parsed: [initial view] from: svgView(viewBox(e7863e
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(0
+Parsed: [initial view] from: svgView(viewBox( 0
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(e72(e,49.7.
+Parsed: [initial view] from: svgView(viewBox(e72( e ,49.7.
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(e55,
+Parsed: [initial view] from: svgView(viewBox(e55,
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(263,ee1)74-
+Parsed: [initial view] from: svgView(viewBox(263,ee1)74-
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(.64110,.+1.
+Parsed: [initial view] from: svgView(viewBox(.64110,.+1.
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(.59e3...725-
+Parsed: [initial view] from: svgView(viewBox(.59e3...725-
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(6-)2).180
+Parsed: [initial view] from: svgView(viewBox(6 -)2).180
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(,e 579++.
+Parsed: [initial view] from: svgView(viewBox(,e 579 ++.
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(-+
+Parsed: [initial view] from: svgView(viewBox(-+
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(74e-6-)297
+Parsed: [initial view] from: svgView(viewBox(74e - 6 -)29 7
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(221e..++77
+Parsed: [initial view] from: svgView(viewBox(221e..+ +77
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox())4e1e).-e8378.
+Parsed: [initial view] from: svgView(viewBox())4e 1e).-e8378.
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(4+01 e
+Parsed: [initial view] from: svgView(viewBox( 4+01 e
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(
+Parsed: [initial view] from: svgView(viewBox(
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(-6++9++ 9.3)6438
+Parsed: [initial view] from: svgView(viewBox(-6++9++ 9.3)6438
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(-,15e)(-+,- 6
+Parsed: [initial view] from: svgView(viewBox(-,15e)(-+,- 6
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(3e+)085932
+Parsed: [initial view] from: svgView(viewBox(3e+)085932
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(+
+Parsed: [initial view] from: svgView(viewBox(+
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(-
+Parsed: [initial view] from: svgView(viewBox(-
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(0944.6-
+Parsed: [initial view] from: svgView(viewBox( 0944.6-
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(.
+Parsed: [initial view] from: svgView(viewBox(.
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(5
+Parsed: [initial view] from: svgView(viewBox( 5
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(3e(-2e3e
+Parsed: [initial view] from: svgView(viewBox(3e(-2e3e
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(
+Parsed: [initial view] from: svgView(viewBox(
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(65e 3e(.1 6916
+Parsed: [initial view] from: svgView(viewBox(6 5e 3e (. 1 69 16
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(1ee5 56,(8.5e,3
+Parsed: [initial view] from: svgView(viewBox(1ee5 56,(8.5 e,3
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(e- e-
+Parsed: [initial view] from: svgView(viewBox(e- e-
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox()e0e)
+Parsed: [initial view] from: svgView(viewBox()e0e)
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(231293.16e
+Parsed: [initial view] from: svgView(viewBox(231293.16e
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(()2(37-888580(9e+
+Parsed: [initial view] from: svgView(viewBox(()2(37-888580(9e+
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(18e805
+Parsed: [initial view] from: svgView(viewBox(18e805
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(0
+Parsed: [initial view] from: svgView(viewBox(0
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(63) 693(
+Parsed: [initial view] from: svgView(viewBox(63) 693(
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(80,2)+ 4ee,
+Parsed: [initial view] from: svgView(viewBox(80,2)+ 4ee,
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(5e+59e2e5
+Parsed: [initial view] from: svgView(viewBox(5e+59e2e5
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(53e,9
+Parsed: [initial view] from: svgView(viewBox(5 3e,9
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(e7)((59
+Parsed: [initial view] from: svgView(viewBox(e7 )((59
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(963.+8-e73-e+)
+Parsed: [initial view] from: svgView(viewBox(963.+8-e73-e +)
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox(71(1(+-3382.3
+Parsed: [initial view] from: svgView(viewBox(71(1(+-3382.3
+
+Loaded: resources/viewspec-target.svg#svgView(viewBoxx(0, 0)
+Parsed: [initial view] from: svgView(viewBoxx(0, 0)
+
+Loaded: resources/viewspec-target.svg#svgView(viewBo(0, 0)
+Parsed: [initial view] from: svgView(viewBo(0, 0)
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox
+Parsed: [initial view] from: svgView(viewBox
+
+Loaded: resources/viewspec-target.svg#svgView(viewBox
+Parsed: [initial view] from: svgView(viewBox
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio())
+Parsed: [initial view] from: svgView(preserveAspectRatio())
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(0))
+Parsed: [initial view] from: svgView(preserveAspectRatio(0))
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(0,0))
+Parsed: [initial view] from: svgView(preserveAspectRatio(0,0))
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(0,0,0))
+Parsed: [initial view] from: svgView(preserveAspectRatio(0,0,0))
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(0,0,0,0))
+Parsed: [initial view] from: svgView(preserveAspectRatio(0,0,0,0))
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio( 27(
+Parsed: [initial view] from: svgView(preserveAspectRatio( 27(
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(
+Parsed: [initial view] from: svgView(preserveAspectRatio(
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(+
+Parsed: [initial view] from: svgView(preserveAspectRatio(+
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(88
+Parsed: [initial view] from: svgView(preserveAspectRatio(88
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(9 43,+6 87.)
+Parsed: [initial view] from: svgView(preserveAspectRatio(9 43,+6 87.)
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(- .5997
+Parsed: [initial view] from: svgView(preserveAspectRatio( - .5997
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(5.9)557
+Parsed: [initial view] from: svgView(preserveAspectRatio(5.9)557
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(+65)e)0,217
+Parsed: [initial view] from: svgView(preserveAspectRatio(+65)e)0, 217
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(.2
+Parsed: [initial view] from: svgView(preserveAspectRatio(.2
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(+
+Parsed: [initial view] from: svgView(preserveAspectRatio(+
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(e8+(++e52,. 73
+Parsed: [initial view] from: svgView(preserveAspectRatio(e8+(++ e52,. 73
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(,0+.
+Parsed: [initial view] from: svgView(preserveAspectRatio(,0+ .
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(-59-62159544,8,3
+Parsed: [initial view] from: svgView(preserveAspectRatio(-59-62159544,8, 3
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(0857) 5
+Parsed: [initial view] from: svgView(preserveAspectRatio(0857) 5
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(6,71+5e )e
+Parsed: [initial view] from: svgView(preserveAspectRatio(6,71+5e )e
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(2e5
+Parsed: [initial view] from: svgView(preserveAspectRatio(2e5
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(1e2)7e()90
+Parsed: [initial view] from: svgView(preserveAspectRatio(1e2)7e() 90
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(9.-)7
+Parsed: [initial view] from: svgView(preserveAspectRatio(9.-)7
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(8e759.6,
+Parsed: [initial view] from: svgView(preserveAspectRatio(8e759.6,
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(2(65.59e0+8-5
+Parsed: [initial view] from: svgView(preserveAspectRatio(2(65 .59e0+8-5
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(.0712
+Parsed: [initial view] from: svgView(preserveAspectRatio(.0712
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(e97,e33-)6,(e0-1+
+Parsed: [initial view] from: svgView(preserveAspectRatio(e97,e33-)6,(e0-1 +
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(. 3 6.e,)57e7.(6
+Parsed: [initial view] from: svgView(preserveAspectRatio(. 3 6.e,)57e7. (6
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(1-7.(e(8.e-)e.) 63
+Parsed: [initial view] from: svgView(preserveAspectRatio(1-7.(e(8.e-)e.) 63
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(6786- +8912e
+Parsed: [initial view] from: svgView(preserveAspectRatio(6786- +8912e
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio()ee8),-886().9--
+Parsed: [initial view] from: svgView(preserveAspectRatio()ee8),-886().9 --
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(.,e5732.
+Parsed: [initial view] from: svgView(preserveAspectRatio(.,e5732.
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(18-+
+Parsed: [initial view] from: svgView(preserveAspectRatio(18-+
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(3,(13e+711e9eee0.)
+Parsed: [initial view] from: svgView(preserveAspectRatio(3,(13e+711e9eee0.)
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(6
+Parsed: [initial view] from: svgView(preserveAspectRatio(6
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio()+69
+Parsed: [initial view] from: svgView(preserveAspectRatio() +69
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(, 19e)2)+0-(9)2
+Parsed: [initial view] from: svgView(preserveAspectRatio(, 19e )2)+0-(9)2
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(1e,--+810)5..e37
+Parsed: [initial view] from: svgView(preserveAspectRatio(1e,--+810)5..e37
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(35 )+e
+Parsed: [initial view] from: svgView(preserveAspectRatio(35 )+e
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(362020()8347081e78
+Parsed: [initial view] from: svgView(preserveAspectRatio(362020()8347081e78
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio()+
+Parsed: [initial view] from: svgView(preserveAspectRatio()+
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(e-.54(+0063141e
+Parsed: [initial view] from: svgView(preserveAspectRatio(e-.54(+006 3141e
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(e).1+9e.0)7
+Parsed: [initial view] from: svgView(preserveAspectRatio(e) .1+9e.0)7
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(61)2e.
+Parsed: [initial view] from: svgView(preserveAspectRatio(61)2e.
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(7075-5(e67)+(-7)7)
+Parsed: [initial view] from: svgView(preserveAspectRatio(7075-5(e67)+(-7)7)
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(e
+Parsed: [initial view] from: svgView(preserveAspectRatio(e
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(88)(3e21
+Parsed: [initial view] from: svgView(preserveAspectRatio(88)(3e21
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(3e-003(4
+Parsed: [initial view] from: svgView(preserveAspectRatio(3e-003(4
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(682- 19-0)4642
+Parsed: [initial view] from: svgView(preserveAspectRatio(682- 19-0)4642
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(6 7
+Parsed: [initial view] from: svgView(preserveAspectRatio(6 7
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(.9e1.e6+,e0-20e)9
+Parsed: [initial view] from: svgView(preserveAspectRatio(.9e1.e6+,e0- 20e )9
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(e+
+Parsed: [initial view] from: svgView(preserveAspectRatio(e+
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(96,e20 1e2-5)
+Parsed: [initial view] from: svgView(preserveAspectRatio(96,e2 0 1e2-5)
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio( 8-7(3.
+Parsed: [initial view] from: svgView(preserveAspectRatio( 8-7(3.
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio(
+Parsed: [initial view] from: svgView(preserveAspectRatio(
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatioo(0, 0)
+Parsed: [initial view] from: svgView(preserveAspectRatioo(0, 0)
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRati(0, 0)
+Parsed: [initial view] from: svgView(preserveAspectRati(0, 0)
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio
+Parsed: [initial view] from: svgView(preserveAspectRatio
+
+Loaded: resources/viewspec-target.svg#svgView(preserveAspectRatio
+Parsed: [initial view] from: svgView(preserveAspectRatio
+
+Loaded: resources/viewspec-target.svg#svgView(transform())
+Parsed: [initial view] from: svgView(transform())
+
+Loaded: resources/viewspec-target.svg#svgView(transform(0))
+Parsed: [initial view] from: svgView(transform(0))
+
+Loaded: resources/viewspec-target.svg#svgView(transform(0,0))
+Parsed: [initial view] from: svgView(transform(0,0))
+
+Loaded: resources/viewspec-target.svg#svgView(transform(0,0,0))
+Parsed: [initial view] from: svgView(transform(0,0,0))
+
+Loaded: resources/viewspec-target.svg#svgView(transform(0,0,0,0))
+Parsed: [initial view] from: svgView(transform(0,0,0,0))
+
+Loaded: resources/viewspec-target.svg#svgView(transform(8 78
+Parsed: [initial view] from: svgView(transform(8 78
+
+Loaded: resources/viewspec-target.svg#svgView(transform(282e.172(0 .)
+Parsed: [initial view] from: svgView(transform(2 8 2e.172 (0 .)
+
+Loaded: resources/viewspec-target.svg#svgView(transform(9
+Parsed: [initial view] from: svgView(transform( 9
+
+Loaded: resources/viewspec-target.svg#svgView(transform(0 7950,- eee,
+Parsed: [initial view] from: svgView(transform(0 795 0,- eee,
+
+Loaded: resources/viewspec-target.svg#svgView(transform((7-
+Parsed: [initial view] from: svgView(transform((7-
+
+Loaded: resources/viewspec-target.svg#svgView(transform(+e(e8.)74- 9.(+
+Parsed: [initial view] from: svgView(transform(+e(e8.)74- 9.(+
+
+Loaded: resources/viewspec-target.svg#svgView(transform(.0e635(-9,).8e
+Parsed: [initial view] from: svgView(transform(.0e635(-9,).8e
+
+Loaded: resources/viewspec-target.svg#svgView(transform(e4e9ee
+Parsed: [initial view] from: svgView(transform(e4e9ee
+
+Loaded: resources/viewspec-target.svg#svgView(transform(49-,,4)30378.052
+Parsed: [initial view] from: svgView(transform(49-,,4)30378.052
+
+Loaded: resources/viewspec-target.svg#svgView(transform(e7863e
+Parsed: [initial view] from: svgView(transform(e7863e
+
+Loaded: resources/viewspec-target.svg#svgView(transform(0
+Parsed: [initial view] from: svgView(transform( 0
+
+Loaded: resources/viewspec-target.svg#svgView(transform(e72(e,49.7.
+Parsed: [initial view] from: svgView(transform(e72( e ,49.7.
+
+Loaded: resources/viewspec-target.svg#svgView(transform(e55,
+Parsed: [initial view] from: svgView(transform(e55,
+
+Loaded: resources/viewspec-target.svg#svgView(transform(263,ee1)74-
+Parsed: [initial view] from: svgView(transform(263,ee1)74-
+
+Loaded: resources/viewspec-target.svg#svgView(transform(.64110,.+1.
+Parsed: [initial view] from: svgView(transform(.64110,.+1.
+
+Loaded: resources/viewspec-target.svg#svgView(transform(.59e3...725-
+Parsed: [initial view] from: svgView(transform(.59e3...725-
+
+Loaded: resources/viewspec-target.svg#svgView(transform(6-)2).180
+Parsed: [initial view] from: svgView(transform(6 -)2).180
+
+Loaded: resources/viewspec-target.svg#svgView(transform(,e 579++.
+Parsed: [initial view] from: svgView(transform(,e 579 ++.
+
+Loaded: resources/viewspec-target.svg#svgView(transform(-+
+Parsed: [initial view] from: svgView(transform(-+
+
+Loaded: resources/viewspec-target.svg#svgView(transform(74e-6-)297
+Parsed: [initial view] from: svgView(transform(74e - 6 -)29 7
+
+Loaded: resources/viewspec-target.svg#svgView(transform(221e..++77
+Parsed: [initial view] from: svgView(transform(221e..+ +77
+
+Loaded: resources/viewspec-target.svg#svgView(transform())4e1e).-e8378.
+Parsed: [initial view] from: svgView(transform())4e 1e).-e8378.
+
+Loaded: resources/viewspec-target.svg#svgView(transform(4+01 e
+Parsed: [initial view] from: svgView(transform( 4+01 e
+
+Loaded: resources/viewspec-target.svg#svgView(transform(
+Parsed: [initial view] from: svgView(transform(
+
+Loaded: resources/viewspec-target.svg#svgView(transform(-6++9++ 9.3)6438
+Parsed: [initial view] from: svgView(transform(-6++9++ 9.3)6438
+
+Loaded: resources/viewspec-target.svg#svgView(transform(-,15e)(-+,- 6
+Parsed: [initial view] from: svgView(transform(-,15e)(-+,- 6
+
+Loaded: resources/viewspec-target.svg#svgView(transform(3e+)085932
+Parsed: [initial view] from: svgView(transform(3e+)085932
+
+Loaded: resources/viewspec-target.svg#svgView(transform(+
+Parsed: [initial view] from: svgView(transform(+
+
+Loaded: resources/viewspec-target.svg#svgView(transform(-
+Parsed: [initial view] from: svgView(transform(-
+
+Loaded: resources/viewspec-target.svg#svgView(transform(0944.6-
+Parsed: [initial view] from: svgView(transform( 0944.6-
+
+Loaded: resources/viewspec-target.svg#svgView(transform(.
+Parsed: [initial view] from: svgView(transform(.
+
+Loaded: resources/viewspec-target.svg#svgView(transform(5
+Parsed: [initial view] from: svgView(transform( 5
+
+Loaded: resources/viewspec-target.svg#svgView(transform(3e(-2e3e
+Parsed: [initial view] from: svgView(transform(3e(-2e3e
+
+Loaded: resources/viewspec-target.svg#svgView(transform(
+Parsed: [initial view] from: svgView(transform(
+
+Loaded: resources/viewspec-target.svg#svgView(transform(65e 3e(.1 6916
+Parsed: [initial view] from: svgView(transform(6 5e 3e (. 1 69 16
+
+Loaded: resources/viewspec-target.svg#svgView(transform(1ee5 56,(8.5e,3
+Parsed: [initial view] from: svgView(transform(1ee5 56,(8.5 e,3
+
+Loaded: resources/viewspec-target.svg#svgView(transform(e- e-
+Parsed: [initial view] from: svgView(transform(e- e-
+
+Loaded: resources/viewspec-target.svg#svgView(transform()e0e)
+Parsed: [initial view] from: svgView(transform()e0e)
+
+Loaded: resources/viewspec-target.svg#svgView(transform(231293.16e
+Parsed: [initial view] from: svgView(transform(231293.16e
+
+Loaded: resources/viewspec-target.svg#svgView(transform(()2(37-888580(9e+
+Parsed: [initial view] from: svgView(transform(()2(37-888580(9e+
+
+Loaded: resources/viewspec-target.svg#svgView(transform(18e805
+Parsed: [initial view] from: svgView(transform(18e805
+
+Loaded: resources/viewspec-target.svg#svgView(transform(0
+Parsed: [initial view] from: svgView(transform(0
+
+Loaded: resources/viewspec-target.svg#svgView(transform(63) 693(
+Parsed: [initial view] from: svgView(transform(63) 693(
+
+Loaded: resources/viewspec-target.svg#svgView(transform(80,2)+ 4ee,
+Parsed: [initial view] from: svgView(transform(80,2)+ 4ee,
+
+Loaded: resources/viewspec-target.svg#svgView(transform(5e+59e2e5
+Parsed: [initial view] from: svgView(transform(5e+59e2e5
+
+Loaded: resources/viewspec-target.svg#svgView(transform(53e,9
+Parsed: [initial view] from: svgView(transform(5 3e,9
+
+Loaded: resources/viewspec-target.svg#svgView(transform(e7)((59
+Parsed: [initial view] from: svgView(transform(e7 )((59
+
+Loaded: resources/viewspec-target.svg#svgView(transform(963.+8-e73-e+)
+Parsed: [initial view] from: svgView(transform(963.+8-e73-e +)
+
+Loaded: resources/viewspec-target.svg#svgView(transform(71(1(+-3382.3
+Parsed: [initial view] from: svgView(transform(71(1(+-3382.3
+
+Loaded: resources/viewspec-target.svg#svgView(transform( 27(
+Parsed: [initial view] from: svgView(transform( 27(
+
+Loaded: resources/viewspec-target.svg#svgView(transformm(0, 0)
+Parsed: [initial view] from: svgView(transformm(0, 0)
+
+Loaded: resources/viewspec-target.svg#svgView(transfor(0, 0)
+Parsed: [initial view] from: svgView(transfor(0, 0)
+
+Loaded: resources/viewspec-target.svg#svgView(transform
+Parsed: [initial view] from: svgView(transform
+
+Loaded: resources/viewspec-target.svg#svgView(transform
+Parsed: [initial view] from: svgView(transform
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan())
+Parsed: [initial view] from: svgView(zoomAndPan())
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(0))
+Parsed: [initial view] from: svgView(zoomAndPan(0))
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(0,0))
+Parsed: [initial view] from: svgView(zoomAndPan(0,0))
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(0,0,0))
+Parsed: [initial view] from: svgView(zoomAndPan(0,0,0))
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(0,0,0,0))
+Parsed: [initial view] from: svgView(zoomAndPan(0,0,0,0))
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(
+Parsed: [initial view] from: svgView(zoomAndPan(
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(+
+Parsed: [initial view] from: svgView(zoomAndPan(+
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(88
+Parsed: [initial view] from: svgView(zoomAndPan(88
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(9 43,+6 87.)
+Parsed: [initial view] from: svgView(zoomAndPan(9 43,+6 87.)
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(- .5997
+Parsed: [initial view] from: svgView(zoomAndPan( - .5997
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(5.9)557
+Parsed: [initial view] from: svgView(zoomAndPan(5.9)557
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(+65)e)0,217
+Parsed: [initial view] from: svgView(zoomAndPan(+65)e)0, 217
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(.2
+Parsed: [initial view] from: svgView(zoomAndPan(.2
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(+
+Parsed: [initial view] from: svgView(zoomAndPan(+
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(e8+(++e52,. 73
+Parsed: [initial view] from: svgView(zoomAndPan(e8+(++ e52,. 73
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(,0+.
+Parsed: [initial view] from: svgView(zoomAndPan(,0+ .
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(-59-62159544,8,3
+Parsed: [initial view] from: svgView(zoomAndPan(-59-62159544,8, 3
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(0857) 5
+Parsed: [initial view] from: svgView(zoomAndPan(0857) 5
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(6,71+5e )e
+Parsed: [initial view] from: svgView(zoomAndPan(6,71+5e )e
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(2e5
+Parsed: [initial view] from: svgView(zoomAndPan(2e5
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(1e2)7e()90
+Parsed: [initial view] from: svgView(zoomAndPan(1e2)7e() 90
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(9.-)7
+Parsed: [initial view] from: svgView(zoomAndPan(9.-)7
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(8e759.6,
+Parsed: [initial view] from: svgView(zoomAndPan(8e759.6,
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(2(65.59e0+8-5
+Parsed: [initial view] from: svgView(zoomAndPan(2(65 .59e0+8-5
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(.0712
+Parsed: [initial view] from: svgView(zoomAndPan(.0712
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(e97,e33-)6,(e0-1+
+Parsed: [initial view] from: svgView(zoomAndPan(e97,e33-)6,(e0-1 +
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(. 3 6.e,)57e7.(6
+Parsed: [initial view] from: svgView(zoomAndPan(. 3 6.e,)57e7. (6
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(1-7.(e(8.e-)e.) 63
+Parsed: [initial view] from: svgView(zoomAndPan(1-7.(e(8.e-)e.) 63
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(6786- +8912e
+Parsed: [initial view] from: svgView(zoomAndPan(6786- +8912e
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan()ee8),-886().9--
+Parsed: [initial view] from: svgView(zoomAndPan()ee8),-886().9 --
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(.,e5732.
+Parsed: [initial view] from: svgView(zoomAndPan(.,e5732.
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(18-+
+Parsed: [initial view] from: svgView(zoomAndPan(18-+
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(3,(13e+711e9eee0.)
+Parsed: [initial view] from: svgView(zoomAndPan(3,(13e+711e9eee0.)
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(6
+Parsed: [initial view] from: svgView(zoomAndPan(6
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan()+69
+Parsed: [initial view] from: svgView(zoomAndPan() +69
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(, 19e)2)+0-(9)2
+Parsed: [initial view] from: svgView(zoomAndPan(, 19e )2)+0-(9)2
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(1e,--+810)5..e37
+Parsed: [initial view] from: svgView(zoomAndPan(1e,--+810)5..e37
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(35 )+e
+Parsed: [initial view] from: svgView(zoomAndPan(35 )+e
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(362020()8347081e78
+Parsed: [initial view] from: svgView(zoomAndPan(362020()8347081e78
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan()+
+Parsed: [initial view] from: svgView(zoomAndPan()+
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(e-.54(+0063141e
+Parsed: [initial view] from: svgView(zoomAndPan(e-.54(+006 3141e
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(e).1+9e.0)7
+Parsed: [initial view] from: svgView(zoomAndPan(e) .1+9e.0)7
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(61)2e.
+Parsed: [initial view] from: svgView(zoomAndPan(61)2e.
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(7075-5(e67)+(-7)7)
+Parsed: [initial view] from: svgView(zoomAndPan(7075-5(e67)+(-7)7)
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(e
+Parsed: [initial view] from: svgView(zoomAndPan(e
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(88)(3e21
+Parsed: [initial view] from: svgView(zoomAndPan(88)(3e21
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(3e-003(4
+Parsed: [initial view] from: svgView(zoomAndPan(3e-003(4
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(682- 19-0)4642
+Parsed: [initial view] from: svgView(zoomAndPan(682- 19-0)4642
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(6 7
+Parsed: [initial view] from: svgView(zoomAndPan(6 7
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(.9e1.e6+,e0-20e)9
+Parsed: [initial view] from: svgView(zoomAndPan(.9e1.e6+,e0- 20e )9
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(e+
+Parsed: [initial view] from: svgView(zoomAndPan(e+
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(96,e20 1e2-5)
+Parsed: [initial view] from: svgView(zoomAndPan(96,e2 0 1e2-5)
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan( 8-7(3.
+Parsed: [initial view] from: svgView(zoomAndPan( 8-7(3.
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(
+Parsed: [initial view] from: svgView(zoomAndPan(
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan(8 78
+Parsed: [initial view] from: svgView(zoomAndPan(8 78
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPann(0, 0)
+Parsed: [initial view] from: svgView(zoomAndPann(0, 0)
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPa(0, 0)
+Parsed: [initial view] from: svgView(zoomAndPa(0, 0)
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan
+Parsed: [initial view] from: svgView(zoomAndPan
+
+Loaded: resources/viewspec-target.svg#svgView(zoomAndPan
+Parsed: [initial view] from: svgView(zoomAndPan
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget())
+Parsed: [initial view] from: svgView(viewTarget())
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(0))
+Parsed: svgView(viewTarget(0)) from: svgView(viewTarget(0))
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(0,0))
+Parsed: svgView(viewTarget(0,0)) from: svgView(viewTarget(0,0))
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(0,0,0))
+Parsed: svgView(viewTarget(0,0,0)) from: svgView(viewTarget(0,0,0))
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(0,0,0,0))
+Parsed: svgView(viewTarget(0,0,0,0)) from: svgView(viewTarget(0,0,0,0))
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(282e.172(0 .)
+Parsed: [initial view] from: svgView(viewTarget(2 8 2e.172 (0 .)
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(9
+Parsed: [initial view] from: svgView(viewTarget( 9
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(0 7950,- eee,
+Parsed: [initial view] from: svgView(viewTarget(0 795 0,- eee,
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget((7-
+Parsed: [initial view] from: svgView(viewTarget((7-
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(+e(e8.)74- 9.(+
+Parsed: [initial view] from: svgView(viewTarget(+e(e8.)74- 9.(+
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(.0e635(-9,).8e
+Parsed: [initial view] from: svgView(viewTarget(.0e635(-9,).8e
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(e4e9ee
+Parsed: [initial view] from: svgView(viewTarget(e4e9ee
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(49-,,4)30378.052
+Parsed: [initial view] from: svgView(viewTarget(49-,,4)30378.052
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(e7863e
+Parsed: [initial view] from: svgView(viewTarget(e7863e
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(0
+Parsed: [initial view] from: svgView(viewTarget( 0
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(e72(e,49.7.
+Parsed: [initial view] from: svgView(viewTarget(e72( e ,49.7.
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(e55,
+Parsed: [initial view] from: svgView(viewTarget(e55,
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(263,ee1)74-
+Parsed: [initial view] from: svgView(viewTarget(263,ee1)74-
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(.64110,.+1.
+Parsed: [initial view] from: svgView(viewTarget(.64110,.+1.
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(.59e3...725-
+Parsed: [initial view] from: svgView(viewTarget(.59e3...725-
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(6-)2).180
+Parsed: [initial view] from: svgView(viewTarget(6 -)2).180
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(,e 579++.
+Parsed: [initial view] from: svgView(viewTarget(,e 579 ++.
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(-+
+Parsed: [initial view] from: svgView(viewTarget(-+
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(74e-6-)297
+Parsed: [initial view] from: svgView(viewTarget(74e - 6 -)29 7
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(221e..++77
+Parsed: [initial view] from: svgView(viewTarget(221e..+ +77
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget())4e1e).-e8378.
+Parsed: [initial view] from: svgView(viewTarget())4e 1e).-e8378.
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(4+01 e
+Parsed: [initial view] from: svgView(viewTarget( 4+01 e
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(
+Parsed: [initial view] from: svgView(viewTarget(
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(-6++9++ 9.3)6438
+Parsed: [initial view] from: svgView(viewTarget(-6++9++ 9.3)6438
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(-,15e)(-+,- 6
+Parsed: [initial view] from: svgView(viewTarget(-,15e)(-+,- 6
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(3e+)085932
+Parsed: [initial view] from: svgView(viewTarget(3e+)085932
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(+
+Parsed: [initial view] from: svgView(viewTarget(+
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(-
+Parsed: [initial view] from: svgView(viewTarget(-
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(0944.6-
+Parsed: [initial view] from: svgView(viewTarget( 0944.6-
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(.
+Parsed: [initial view] from: svgView(viewTarget(.
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(5
+Parsed: [initial view] from: svgView(viewTarget( 5
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(3e(-2e3e
+Parsed: [initial view] from: svgView(viewTarget(3e(-2e3e
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(
+Parsed: [initial view] from: svgView(viewTarget(
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(65e 3e(.1 6916
+Parsed: [initial view] from: svgView(viewTarget(6 5e 3e (. 1 69 16
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(1ee5 56,(8.5e,3
+Parsed: [initial view] from: svgView(viewTarget(1ee5 56,(8.5 e,3
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(e- e-
+Parsed: [initial view] from: svgView(viewTarget(e- e-
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget()e0e)
+Parsed: [initial view] from: svgView(viewTarget()e0e)
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(231293.16e
+Parsed: [initial view] from: svgView(viewTarget(231293.16e
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(()2(37-888580(9e+
+Parsed: [initial view] from: svgView(viewTarget(()2(37-888580(9e+
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(18e805
+Parsed: [initial view] from: svgView(viewTarget(18e805
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(0
+Parsed: [initial view] from: svgView(viewTarget(0
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(63) 693(
+Parsed: [initial view] from: svgView(viewTarget(63) 693(
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(80,2)+ 4ee,
+Parsed: [initial view] from: svgView(viewTarget(80,2)+ 4ee,
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(5e+59e2e5
+Parsed: [initial view] from: svgView(viewTarget(5e+59e2e5
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(53e,9
+Parsed: [initial view] from: svgView(viewTarget(5 3e,9
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(e7)((59
+Parsed: [initial view] from: svgView(viewTarget(e7 )((59
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(963.+8-e73-e+)
+Parsed: [initial view] from: svgView(viewTarget(963.+8-e73-e +)
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(71(1(+-3382.3
+Parsed: [initial view] from: svgView(viewTarget(71(1(+-3382.3
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget( 27(
+Parsed: [initial view] from: svgView(viewTarget( 27(
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget(
+Parsed: [initial view] from: svgView(viewTarget(
+
+Loaded: resources/viewspec-target.svg#svgView(viewTargett(0, 0)
+Parsed: [initial view] from: svgView(viewTargett(0, 0)
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarge(0, 0)
+Parsed: [initial view] from: svgView(viewTarge(0, 0)
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget
+Parsed: [initial view] from: svgView(viewTarget
+
+Loaded: resources/viewspec-target.svg#svgView(viewTarget
+Parsed: [initial view] from: svgView(viewTarget
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/svg/dom/viewspec-parser.html-disabled b/LayoutTests/svg/dom/viewspec-parser.html
similarity index 67%
rename from LayoutTests/svg/dom/viewspec-parser.html-disabled
rename to LayoutTests/svg/dom/viewspec-parser.html
index ace37bd..8382cf8 100644
--- a/LayoutTests/svg/dom/viewspec-parser.html-disabled
+++ b/LayoutTests/svg/dom/viewspec-parser.html
@@ -16,24 +16,29 @@
zoomAndPan: 1,
viewTarget: 1
};
-
+
var preserveAspectRatioValues = [ "Min", "Max", "Mid" ];
-
+
var testsToRun = [
+ "svgView(viewBox(0,0,200,200)))",
+ "svgView(preserveAspectRatio(xMaxYMin slice))",
+ "svgView(preserveAspectRatio(xMaxYMin))",
+ "svgView(viewBox(1,2,3,4);preserveAspectRatio(xMaxYMin))",
+ "svgView(zoomAndPan(disable))",
+ "svgView(viewTarget(#myElementId))",
"svgView",
"svgView(",
"svgView()",
"svgView(" + String.fromCharCode(0),
- "svgView(" + String.fromCharCode(0) + ")",
"svgView(transform(scale(2));;)",
"svgView(transform(scale(2));x", // used to hang
"svgView(transform(scale(.5)))",
"svgView(;transform(scale(.5)))",
"svgView(;;transform(scale(.5)))",
"svgView(transform(scale(.5));transform(scale(2));transform(scale(2)))",
+
];
-
-
+
var characters = [
"0",
"1",
@@ -56,12 +61,12 @@
"\t", // not a valid fragment char
","
];
-
+
function buildTestsToRun() {
for (var attribute in attributes) {
// Too few / too many arguments
- for (var i = 0; i < 20; i++) { //>
+ for (var i = 0; i < 5; i++) { //>
var attributeString = "svgView(" + attribute + "(";
for (var j = 0; j < i; j++) { //>
attributeString += "0";
@@ -73,7 +78,7 @@
}
// Random assortments of valid characters
- for (var i = 0; i < 100; i++) { //>
+ for (var i = 0; i < 50; i++) { //>
var attributeString = "svgView(" + attribute + "(";
var count = Math.scriptedRandomInt(20);
for (var j = 0; j < count; j++) { //>
@@ -81,43 +86,51 @@
}
testsToRun.push(attributeString);
}
-
+
// attribute names that are "off by one"
var extraChar = attribute.charAt(attribute.length - 1);
testsToRun.push("svgView(" + attribute + extraChar + "(0, 0)");
testsToRun.push("svgView(" + attribute.substring(0, attribute.length - 1) + "(0, 0)");
-
+
// Empty-ish attributes
testsToRun.push("svgView(" + attribute);
testsToRun.push("svgView(" + attribute + String.fromCharCode(0));
- testsToRun.push("svgView(" + attribute + "(" + String.fromCharCode(0) + ")");
}
-
}
-
+
+ function zoomAndPanToString(zoomAndPan)
+ {
+ if (zoomAndPan == SVGZoomAndPan.SVG_ZOOMANDPAN_MAGNIFY)
+ return "magnify";
+ if (zoomAndPan == SVGZoomAndPan.SVG_ZOOMANDPAN_DISABLE)
+ return "disable";
+ return "unknown";
+ }
+
function viewSpecToString(viewSpec)
{
if (!viewSpec)
- return viewSpec;
-
+ return undefined;
+
var attributes = [];
- if (viewSpec.transform)
- attributes.push("transform(" + viewSpec.transform + ")");
- if (viewSpec.viewBox)
- attributes.push("viewBox(" + viewSpec.viewBox + ")");
- if (viewSpec.preserveAspectRatio)
- attributes.push("preserveAspectRatio(" + viewSpec.preserveAspectRatio + ")");
- if (viewSpec.zoomAndPan)
- attributes.push("zoomAndPan(" + viewSpec.zoomAndPan + ")");
- if (viewSpec.viewTarget)
- attributes.push("viewTarget(" + viewSpac.viewTarget + ")");
-
+ if (viewSpec.transformString)
+ attributes.push("transform(" + viewSpec.transformString + ")");
+ if (viewSpec.viewBoxString && viewSpec.viewBoxString != "0 0 0 0")
+ attributes.push("viewBox(" + viewSpec.viewBoxString + ")");
+ if (viewSpec.preserveAspectRatioString && viewSpec.preserveAspectRatioString != "xMidYMid meet")
+ attributes.push("preserveAspectRatio(" + viewSpec.preserveAspectRatioString + ")");
+ if (viewSpec.zoomAndPan && viewSpec.zoomAndPan != SVGZoomAndPan.SVG_ZOOMANDPAN_MAGNIFY)
+ attributes.push("zoomAndPan(" + zoomAndPanToString(viewSpec.zoomAndPan) + ")");
+ if (viewSpec.viewTargetString)
+ attributes.push("viewTarget(" + viewSpec.viewTargetString + ")");
+ if (!attributes.length)
+ return "[initial view]";
return "svgView(" + attributes.join(";") + ")";
}
-
+
var testNumber = 0;
var testString = "[initial view]"
-
+
function makeURLRelative(url) {
return url.slice(url.indexOf("resources"));
}
@@ -131,10 +144,9 @@
embedElement.setAttribute("id", "object");
embedElement.setAttribute("width", "100");
embedElement.setAttribute("height", "100");
- embedElement.setAttribute("onload", "continueFuzzing(event)");
- var newURL = "resources/viewspec-parser.svg#" + string;
+ embedElement.setAttribute("onload", "setTimeout('continueFuzzing(event)', 0)");
+ var newURL = "resources/viewspec-target.svg#" + string;
embedElement.src = newURL;
- debug("Starting: " + makeURLRelative(embedElement.src));
document.body.appendChild(embedElement);
}
@@ -142,34 +154,38 @@
{
testFragment(testString);
}
-
+
function continueFuzzing(event)
{
var embedElement = document.getElementById("object");
if (embedElement.contentDocument) {
- debug("Loaded: " + makeURLRelative(embedElement.contentDocument.URL));
- debug("Parsed: " + viewSpecToString(embedElement.contentDocument.currentView) + " from: " + testString);
+ debug("Loaded: " + makeURLRelative(embedElement.contentDocument.URL));
+ debug("Parsed: " + viewSpecToString(embedElement.contentDocument.documentElement.currentView) + " from: " + testString + "\n");
} else
debug("no svgdocument");
-
+
if (testNumber < testsToRun.length)
testString = testsToRun[testNumber];
else {
- var scriptTag = document.createElement("script");
- scriptTag.src = "../../fast/js/resources/js-test-post.js";
- document.body.appendChild(scriptTag);
- if (window.layoutTestController)
- layoutTestController.notifyDone();
+ var script = document.createElement("script");
+
+ script.onload = function() {
+ if (window.layoutTestController)
+ layoutTestController.notifyDone();
+ };
+
+ script.src = "../../fast/js/resources/js-test-post.js";
+ document.body.appendChild(script);
return;
}
testNumber++;
-
+
// this lets us out of the onload handler so we don't overrun the stack
window.setTimeout(startNextTest, 0);
}
if (window.layoutTestController)
layoutTestController.waitUntilDone();
-
+
buildTestsToRun();
testFragment("");
</script>
diff --git a/Source/WebCore/CMakeLists.txt b/Source/WebCore/CMakeLists.txt
index 94ff7bc..1e07577 100644
--- a/Source/WebCore/CMakeLists.txt
+++ b/Source/WebCore/CMakeLists.txt
@@ -1976,8 +1976,8 @@
svg/SVGURIReference.cpp
svg/SVGUseElement.cpp
svg/SVGViewElement.cpp
- svg/SVGVKernElement.cpp
svg/SVGViewSpec.cpp
+ svg/SVGVKernElement.cpp
svg/SVGZoomAndPan.cpp
svg/SVGZoomEvent.cpp
svg/animation/SMILTime.cpp
@@ -2135,6 +2135,7 @@
svg/SVGUnitTypes.idl
svg/SVGUseElement.idl
svg/SVGViewElement.idl
+ svg/SVGViewSpec.idl
svg/SVGVKernElement.idl
svg/SVGZoomAndPan.idl
svg/SVGZoomEvent.idl
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index c051635..d57e753 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,180 @@
+2012-05-29 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ SVGViewSpec DOM bindings aka SVGSVGElement.currentView is unimplemented
+ https://bugs.webkit.org/show_bug.cgi?id=15495
+
+ Reviewed by Rob Buis.
+
+ Finish SVGViewSpec implementation and expose it to the Web. Numerous smaller bugs are fixed:
+ - SVGViewSpec and all of its contents should be read-only. Enforce that and test it.
+ Add a new enum to SVGPropertyInfo so that each SVGAnimatedProperty knows if its content is supposed to be read-write or read-only.
+ - Make the 'transform' attribute of SVGViewSpec exposable by switching to a SVGTransformListProperty - it can now be accessed from JS.
+ - Assure that following XXXString methods are in sync with the corresponding SVG DOM interfaces
+ readonly attribute DOMString viewBoxString;
+ readonly attribute DOMString preserveAspectRatioString;
+ readonly attribute DOMString transformString;
+ readonly attribute DOMString viewTargetString;
+ - Cleanup code in svg/properties that was intended to handle SVGViewSpec. Turns out lot of the complexity was unncessary, and can be removed.
+ - Move SVGFitToViewBox to the same pattern SVGZoomAndPan uses since two days, that avoids any virtual function calls for attribute parsing.
+ - Create/expose ObjectiveC/JS bindings for SVGViewSpec.
+ - Enable SVGViewSpec constructor.
+
+ Tests: svg/custom/linking-a-03-b-all-expected.svg
+ svg/dom/SVGViewSpec-defaults.html
+ svg/dom/SVGViewSpec.html
+ svg/dom/complex-svgView-specification.html
+ svg/dom/viewspec-parser.html
+
+ * CMakeLists.txt:
+ * DerivedSources.cpp:
+ * DerivedSources.make:
+ * DerivedSources.pri:
+ * GNUmakefile.list.am:
+ * Target.pri:
+ * WebCore.gyp/WebCore.gyp:
+ * WebCore.gypi:
+ * WebCore.order:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * bindings/js/JSSVGLengthCustom.cpp:
+ (WebCore::JSSVGLength::setValue):
+ (WebCore::JSSVGLength::convertToSpecifiedUnits):
+ * bindings/objc/DOMSVG.h:
+ * bindings/scripts/CodeGeneratorJS.pm:
+ (GenerateImplementation):
+ (NativeToJSValue):
+ * bindings/scripts/CodeGeneratorObjC.pm:
+ (GenerateImplementation):
+ * bindings/scripts/CodeGeneratorV8.pm:
+ (GenerateNormalAttrGetter):
+ (GenerateNormalAttrSetter):
+ (GenerateFunctionCallback):
+ * bindings/v8/custom/V8SVGLengthCustom.cpp:
+ (WebCore::V8SVGLength::valueAccessorSetter):
+ (WebCore::V8SVGLength::convertToSpecifiedUnitsCallback):
+ * page/DOMWindow.idl:
+ * rendering/svg/RenderSVGResourcePattern.cpp:
+ (WebCore::RenderSVGResourcePattern::buildTileImageTransform):
+ * svg/SVGFitToViewBox.cpp:
+ * svg/SVGFitToViewBox.h:
+ (SVGFitToViewBox):
+ (WebCore::SVGFitToViewBox::parseAttribute):
+ * svg/SVGMarkerElement.cpp:
+ (WebCore::SVGMarkerElement::orientTypePropertyInfo):
+ (WebCore::SVGMarkerElement::parseAttribute):
+ (WebCore::SVGMarkerElement::synchronizeOrientType):
+ (WebCore::SVGMarkerElement::lookupOrCreateOrientTypeWrapper):
+ * svg/SVGPathElement.cpp:
+ (WebCore::SVGPathElement::dPropertyInfo):
+ (WebCore::SVGPathElement::svgAttributeChanged):
+ (WebCore::SVGPathElement::pathByteStream):
+ (WebCore::SVGPathElement::lookupOrCreateDWrapper):
+ (WebCore::SVGPathElement::synchronizeD):
+ * svg/SVGPathSegWithContext.h:
+ (WebCore::SVGPathSegWithContext::animatedProperty):
+ * svg/SVGPatternElement.cpp:
+ (WebCore::SVGPatternElement::parseAttribute):
+ * svg/SVGPolyElement.cpp:
+ (WebCore::SVGPolyElement::pointsPropertyInfo):
+ (WebCore::SVGPolyElement::parseAttribute):
+ (WebCore::SVGPolyElement::synchronizePoints):
+ (WebCore::SVGPolyElement::lookupOrCreatePointsWrapper):
+ * svg/SVGRect.h:
+ * svg/SVGSVGElement.cpp:
+ (WebCore::SVGSVGElement::~SVGSVGElement):
+ (WebCore::SVGSVGElement::currentView):
+ (WebCore::SVGSVGElement::parseAttribute):
+ (WebCore::SVGSVGElement::currentViewBoxRect):
+ (WebCore::SVGSVGElement::viewBoxToViewTransform):
+ (WebCore::SVGSVGElement::setupInitialView):
+ (WebCore::SVGSVGElement::inheritViewAttributes):
+ * svg/SVGSVGElement.h:
+ (SVGSVGElement):
+ * svg/SVGSVGElement.idl:
+ * svg/SVGSymbolElement.cpp:
+ (WebCore::SVGSymbolElement::parseAttribute):
+ * svg/SVGTests.cpp:
+ (WebCore::SVGTests::requiredFeaturesPropertyInfo):
+ (WebCore::SVGTests::requiredExtensionsPropertyInfo):
+ (WebCore::SVGTests::systemLanguagePropertyInfo):
+ (WebCore::SVGTests::synchronizeRequiredFeatures):
+ (WebCore::SVGTests::synchronizeRequiredExtensions):
+ (WebCore::SVGTests::synchronizeSystemLanguage):
+ * svg/SVGTextContentElement.cpp:
+ (WebCore::SVGTextContentElement::textLengthPropertyInfo):
+ (WebCore::SVGTextContentElement::synchronizeTextLength):
+ (WebCore::SVGTextContentElement::lookupOrCreateTextLengthWrapper):
+ * svg/SVGViewElement.cpp:
+ (WebCore::SVGViewElement::parseAttribute):
+ * svg/SVGViewElement.h:
+ * svg/SVGViewSpec.cpp:
+ (WebCore::SVGViewSpec::viewBoxPropertyInfo):
+ (WebCore::SVGViewSpec::preserveAspectRatioPropertyInfo):
+ (WebCore::SVGViewSpec::transformPropertyInfo):
+ (WebCore::SVGViewSpec::SVGViewSpec):
+ (WebCore::SVGViewSpec::viewBoxIdentifier):
+ (WebCore::SVGViewSpec::preserveAspectRatioIdentifier):
+ (WebCore::SVGViewSpec::transformIdentifier):
+ (WebCore::SVGViewSpec::setZoomAndPan):
+ (WebCore::SVGViewSpec::setTransformString):
+ (WebCore::SVGViewSpec::transformString):
+ (WebCore::SVGViewSpec::viewBoxString):
+ (WebCore::SVGViewSpec::preserveAspectRatioString):
+ (WebCore::SVGViewSpec::viewTarget):
+ (WebCore::SVGViewSpec::transform):
+ (WebCore::SVGViewSpec::lookupOrCreateViewBoxWrapper):
+ (WebCore::SVGViewSpec::lookupOrCreatePreserveAspectRatioWrapper):
+ (WebCore::SVGViewSpec::lookupOrCreateTransformWrapper):
+ (WebCore::SVGViewSpec::reset):
+ (WebCore::SVGViewSpec::parseViewSpec):
+ * svg/SVGViewSpec.h:
+ (WebCore::SVGViewSpec::~SVGViewSpec):
+ (SVGViewSpec):
+ (WebCore::SVGViewSpec::create):
+ (WebCore::SVGViewSpec::setViewTargetString):
+ (WebCore::SVGViewSpec::setZoomAndPan):
+ (WebCore::SVGViewSpec::contextElement):
+ (WebCore::SVGViewSpec::resetContextElement):
+ (WebCore::SVGViewSpec::transformBaseValue):
+ (WebCore::SVGViewSpec::viewBoxAnimated):
+ (WebCore::SVGViewSpec::viewBox):
+ (WebCore::SVGViewSpec::viewBoxBaseValue):
+ (WebCore::SVGViewSpec::setViewBoxBaseValue):
+ (WebCore::SVGViewSpec::preserveAspectRatioAnimated):
+ (WebCore::SVGViewSpec::preserveAspectRatio):
+ (WebCore::SVGViewSpec::preserveAspectRatioBaseValue):
+ (WebCore::SVGViewSpec::setPreserveAspectRatioBaseValue):
+ * svg/SVGViewSpec.idl:
+ * svg/properties/SVGAnimatedProperty.h:
+ (WebCore::SVGAnimatedProperty::isReadOnly):
+ (WebCore::SVGAnimatedProperty::setIsReadOnly):
+ (SVGAnimatedProperty):
+ (WebCore::SVGAnimatedProperty::lookupOrCreateWrapper):
+ (WebCore::SVGAnimatedProperty::lookupWrapper):
+ (WebCore::SVGAnimatedProperty::SVGAnimatedProperty):
+ * svg/properties/SVGAnimatedPropertyMacros.h:
+ (WebCore::SVGSynchronizableAnimatedProperty::synchronize):
+ (SVGSynchronizableAnimatedProperty):
+ * svg/properties/SVGAnimatedPropertySynchronizer.h: Removed.
+ * svg/properties/SVGAttributeToPropertyMap.h:
+ * svg/properties/SVGListProperty.h:
+ * svg/properties/SVGListPropertyTearOff.h:
+ (SVGListPropertyTearOff):
+ (WebCore::SVGListPropertyTearOff::isReadOnly):
+ * svg/properties/SVGPathSegListPropertyTearOff.h:
+ (SVGPathSegListPropertyTearOff):
+ (WebCore::SVGPathSegListPropertyTearOff::isReadOnly):
+ * svg/properties/SVGProperty.h:
+ (SVGProperty):
+ * svg/properties/SVGPropertyInfo.h:
+ (WebCore::SVGPropertyInfo::SVGPropertyInfo):
+ (SVGPropertyInfo):
+ * svg/properties/SVGPropertyTearOff.h:
+ (WebCore::SVGPropertyTearOff::isReadOnly):
+ * svg/properties/SVGStaticListPropertyTearOff.h:
+ (SVGStaticListPropertyTearOff):
+ (WebCore::SVGStaticListPropertyTearOff::isReadOnly):
+
2012-05-29 Kent Tamura <tkent@chromium.org>
REGRESSION (r90971): the cursor is painted “behind” the placeholder text
diff --git a/Source/WebCore/DerivedSources.cpp b/Source/WebCore/DerivedSources.cpp
index 11ffbd9..8e46992 100644
--- a/Source/WebCore/DerivedSources.cpp
+++ b/Source/WebCore/DerivedSources.cpp
@@ -437,8 +437,9 @@
#include "JSSVGTSpanElement.cpp"
#include "JSSVGUnitTypes.cpp"
#include "JSSVGUseElement.cpp"
-#include "JSSVGViewElement.cpp"
#include "JSSVGVKernElement.cpp"
+#include "JSSVGViewElement.cpp"
+#include "JSSVGViewSpec.cpp"
#include "JSSVGZoomAndPan.cpp"
#include "JSSVGZoomEvent.cpp"
#include "JSText.cpp"
diff --git a/Source/WebCore/DerivedSources.make b/Source/WebCore/DerivedSources.make
index 9cd509a..c0b92859 100644
--- a/Source/WebCore/DerivedSources.make
+++ b/Source/WebCore/DerivedSources.make
@@ -575,6 +575,7 @@
$(WebCore)/svg/SVGUseElement.idl \
$(WebCore)/svg/SVGVKernElement.idl \
$(WebCore)/svg/SVGViewElement.idl \
+ $(WebCore)/svg/SVGViewSpec.idl \
$(WebCore)/svg/SVGZoomAndPan.idl \
$(WebCore)/svg/SVGZoomEvent.idl \
$(WebCore)/testing/Internals.idl \
diff --git a/Source/WebCore/DerivedSources.pri b/Source/WebCore/DerivedSources.pri
index 685da7e..2386799 100644
--- a/Source/WebCore/DerivedSources.pri
+++ b/Source/WebCore/DerivedSources.pri
@@ -606,6 +606,7 @@
$$PWD/svg/SVGUseElement.idl \
$$PWD/svg/SVGViewElement.idl \
$$PWD/svg/SVGVKernElement.idl \
+ $$PWD/svg/SVGViewSpec.idl \
$$PWD/svg/SVGZoomAndPan.idl \
$$PWD/svg/SVGZoomEvent.idl
}
diff --git a/Source/WebCore/GNUmakefile.list.am b/Source/WebCore/GNUmakefile.list.am
index f88e656..2aff39e 100644
--- a/Source/WebCore/GNUmakefile.list.am
+++ b/Source/WebCore/GNUmakefile.list.am
@@ -4202,7 +4202,6 @@
Source/WebCore/svg/properties/SVGAnimatedProperty.h \
Source/WebCore/svg/properties/SVGAnimatedPropertyDescription.h \
Source/WebCore/svg/properties/SVGAnimatedPropertyMacros.h \
- Source/WebCore/svg/properties/SVGAnimatedPropertySynchronizer.h \
Source/WebCore/svg/properties/SVGAnimatedPropertyTearOff.h \
Source/WebCore/svg/properties/SVGAnimatedStaticPropertyTearOff.h \
Source/WebCore/svg/properties/SVGAnimatedTransformListPropertyTearOff.h \
@@ -5392,6 +5391,7 @@
DerivedSources/WebCore/JSSVGUseElement.h \
DerivedSources/WebCore/JSSVGViewElement.cpp \
DerivedSources/WebCore/JSSVGViewElement.h \
+ DerivedSources/WebCore/JSSVGViewSpec.cpp \
DerivedSources/WebCore/JSSVGViewSpec.h \
DerivedSources/WebCore/JSSVGVKernElement.cpp \
DerivedSources/WebCore/JSSVGVKernElement.h \
@@ -5541,6 +5541,7 @@
$(WebCore)/svg/SVGUseElement.idl \
$(WebCore)/svg/SVGVKernElement.idl \
$(WebCore)/svg/SVGViewElement.idl \
+ $(WebCore)/svg/SVGViewSpec.idl \
$(WebCore)/svg/SVGZoomAndPan.idl \
$(WebCore)/svg/SVGZoomEvent.idl
endif # END ENABLE_SVG
diff --git a/Source/WebCore/Target.pri b/Source/WebCore/Target.pri
index d391afe..e7674fa 100644
--- a/Source/WebCore/Target.pri
+++ b/Source/WebCore/Target.pri
@@ -2634,7 +2634,6 @@
svg/properties/SVGAnimatedProperty.h \
svg/properties/SVGAnimatedPropertyDescription.h \
svg/properties/SVGAnimatedPropertyMacros.h \
- svg/properties/SVGAnimatedPropertySynchronizer.h \
svg/properties/SVGAnimatedPropertyTearOff.h \
svg/properties/SVGAnimatedStaticPropertyTearOff.h \
svg/properties/SVGAnimatedTransformListPropertyTearOff.h \
diff --git a/Source/WebCore/WebCore.gyp/WebCore.gyp b/Source/WebCore/WebCore.gyp/WebCore.gyp
index aafd471..8255884 100644
--- a/Source/WebCore/WebCore.gyp/WebCore.gyp
+++ b/Source/WebCore/WebCore.gyp/WebCore.gyp
@@ -173,7 +173,6 @@
'../svg/SVGStylable.idl',
'../svg/SVGTests.idl',
'../svg/SVGTransformable.idl',
- '../svg/SVGViewSpec.idl',
# FIXME: I don't know why these are excluded, either.
# Someone (me?) should figure it out and add appropriate comments.
diff --git a/Source/WebCore/WebCore.gypi b/Source/WebCore/WebCore.gypi
index 88e5c2d..cec1393 100644
--- a/Source/WebCore/WebCore.gypi
+++ b/Source/WebCore/WebCore.gypi
@@ -739,7 +739,6 @@
'svg/properties/SVGAnimatedProperty.h',
'svg/properties/SVGAnimatedPropertyDescription.h',
'svg/properties/SVGAnimatedPropertyMacros.h',
- 'svg/properties/SVGAnimatedPropertySynchronizer.h',
'svg/properties/SVGAnimatedPropertyTearOff.h',
'svg/properties/SVGAnimatedStaticPropertyTearOff.h',
'svg/properties/SVGAnimatedTransformListPropertyTearOff.h',
@@ -7168,6 +7167,8 @@
'<(PRODUCT_DIR)/DerivedSources/WebCore/DOMSVGVKernElement.h',
'<(PRODUCT_DIR)/DerivedSources/WebCore/DOMSVGVKernElement.mm',
'<(PRODUCT_DIR)/DerivedSources/WebCore/DOMSVGVKernElementInternal.h',
+ '<(PRODUCT_DIR)/DerivedSources/WebCore/DOMSVGViewSpec.dep',
+ '<(PRODUCT_DIR)/DerivedSources/WebCore/DOMSVGViewSpec.mm',
'<(PRODUCT_DIR)/DerivedSources/WebCore/DOMSVGViewElement.dep',
'<(PRODUCT_DIR)/DerivedSources/WebCore/DOMSVGViewElement.mm',
'<(PRODUCT_DIR)/DerivedSources/WebCore/DOMSVGZoomEvent.mm',
@@ -8132,6 +8133,9 @@
'<(PRODUCT_DIR)/DerivedSources/WebCore/JSSVGViewElement.cpp',
'<(PRODUCT_DIR)/DerivedSources/WebCore/JSSVGViewElement.dep',
'<(PRODUCT_DIR)/DerivedSources/WebCore/JSSVGViewElement.h',
+ '<(PRODUCT_DIR)/DerivedSources/WebCore/JSSVGViewSpec.cpp',
+ '<(PRODUCT_DIR)/DerivedSources/WebCore/JSSVGViewSpec.dep',
+ '<(PRODUCT_DIR)/DerivedSources/WebCore/JSSVGViewSpec.h',
'<(PRODUCT_DIR)/DerivedSources/WebCore/JSSVGZoomAndPan.cpp',
'<(PRODUCT_DIR)/DerivedSources/WebCore/JSSVGZoomAndPan.h',
'<(PRODUCT_DIR)/DerivedSources/WebCore/JSSVGZoomEvent.cpp',
diff --git a/Source/WebCore/WebCore.order b/Source/WebCore/WebCore.order
index 1af438b..28b7b7a 100644
--- a/Source/WebCore/WebCore.order
+++ b/Source/WebCore/WebCore.order
@@ -29345,7 +29345,6 @@
__ZN7WebCore8SVGTests21synchronizePropertiesEPNS_10SVGElementERKNS_13QualifiedNameE
__ZN7WebCore8SVGTests27synchronizeRequiredFeaturesEPNS_10SVGElementE
__ZNK7WebCore13SVGStringList13valueAsStringEv
-__ZN7WebCore31SVGAnimatedPropertySynchronizerILb1EE11synchronizeEPNS_10SVGElementERKNS_13QualifiedNameERKN3WTF12AtomicStringE
__ZN7WebCore8SVGTests29synchronizeRequiredExtensionsEPNS_10SVGElementE
__ZN7WebCore8SVGTests25synchronizeSystemLanguageEPNS_10SVGElementE
__ZN7WebCore37jsSVGNumberListPrototypeFunctionClearEPN3JSC9ExecStateE
diff --git a/Source/WebCore/WebCore.vcproj/WebCore.vcproj b/Source/WebCore/WebCore.vcproj/WebCore.vcproj
index 844b8d3..40fe09a 100755
--- a/Source/WebCore/WebCore.vcproj/WebCore.vcproj
+++ b/Source/WebCore/WebCore.vcproj/WebCore.vcproj
@@ -21834,6 +21834,62 @@
>
</File>
<File
+ RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSSVGViewSpec.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_Cairo_CFLite|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release_Cairo_CFLite|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug_All|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Production|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSSVGViewSpec.h"
+ >
+ </File>
+ <File
RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSSVGVKernElement.cpp"
>
<FileConfiguration
@@ -72182,10 +72238,6 @@
>
</File>
<File
- RelativePath="..\svg\properties\SVGAnimatedPropertySynchronizer.h"
- >
- </File>
- <File
RelativePath="..\svg\properties\SVGAnimatedPropertyTearOff.h"
>
</File>
diff --git a/Source/WebCore/WebCore.xcodeproj/project.pbxproj b/Source/WebCore/WebCore.xcodeproj/project.pbxproj
index 741bc73..2514f11 100644
--- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj
+++ b/Source/WebCore/WebCore.xcodeproj/project.pbxproj
@@ -137,7 +137,6 @@
081668D4125603BF006F25DE /* SVGTextChunkBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 081668D2125603BF006F25DE /* SVGTextChunkBuilder.h */; };
081668DA125603D5006F25DE /* SVGTextLayoutEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 081668D8125603D5006F25DE /* SVGTextLayoutEngine.h */; };
081AA8DA1111237E002AB06E /* SVGElementRareData.h in Headers */ = {isa = PBXBuildFile; fileRef = 081AA8D91111237E002AB06E /* SVGElementRareData.h */; };
- 081CDFBF126ECFE800D215CA /* SVGAnimatedPropertySynchronizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 081CDFBE126ECFE800D215CA /* SVGAnimatedPropertySynchronizer.h */; settings = {ATTRIBUTES = (Private, ); }; };
081DD49C13BA1A6000DC7627 /* SVGPropertyInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 081DD49B13BA1A6000DC7627 /* SVGPropertyInfo.h */; settings = {ATTRIBUTES = (Private, ); }; };
081EBF3A0FD34F4100DA7559 /* SVGFilterBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 081EBF380FD34F4100DA7559 /* SVGFilterBuilder.cpp */; };
081EBF3B0FD34F4100DA7559 /* SVGFilterBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 081EBF390FD34F4100DA7559 /* SVGFilterBuilder.h */; };
@@ -1804,10 +1803,15 @@
6EE8A77210F803F3005A4A24 /* JSWebGLContextAttributes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6EE8A77010F803F3005A4A24 /* JSWebGLContextAttributes.cpp */; };
6EE8A77310F803F3005A4A24 /* JSWebGLContextAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EE8A77110F803F3005A4A24 /* JSWebGLContextAttributes.h */; };
7117445914BC34EC00EE5FC8 /* SVGTextMetricsBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 7117445714BC34E200EE5FC8 /* SVGTextMetricsBuilder.h */; };
+ 7118FED415685CC60030B79A /* JSSVGViewSpec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7118FED215685CC60030B79A /* JSSVGViewSpec.cpp */; };
+ 7118FED515685CC60030B79A /* JSSVGViewSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 7118FED315685CC60030B79A /* JSSVGViewSpec.h */; };
7134496D146941B300720312 /* SVGLengthContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7134496B146941B300720312 /* SVGLengthContext.cpp */; };
7134496E146941B300720312 /* SVGLengthContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 7134496C146941B300720312 /* SVGLengthContext.h */; settings = {ATTRIBUTES = (Private, ); }; };
71537A01146BD9D7008BD615 /* SVGPathData.h in Headers */ = {isa = PBXBuildFile; fileRef = 715379FF146BD9D6008BD615 /* SVGPathData.h */; };
7157F062150B6564006EAABD /* SVGAnimatedTransformList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7157F061150B6564006EAABD /* SVGAnimatedTransformList.cpp */; };
+ 717A1981156A63BE00F9FE8C /* DOMSVGViewSpecInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 710867D51568644B00AA779B /* DOMSVGViewSpecInternal.h */; };
+ 71904DE8156A631C001E1BA5 /* DOMSVGViewSpec.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 71FE57EE156A620600ABEBD3 /* DOMSVGViewSpec.h */; };
+ 71904DEA156A633A001E1BA5 /* DOMSVGViewSpecInternal.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 718512331568649800C40967 /* DOMSVGViewSpecInternal.h */; };
71A57DF1154BE25C0009D120 /* SVGPathUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 71A57DEF154BE25C0009D120 /* SVGPathUtilities.cpp */; };
71A57DF2154BE25C0009D120 /* SVGPathUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 71A57DF0154BE25C0009D120 /* SVGPathUtilities.h */; };
71CC7A20152A0BFE009EEAF9 /* SVGAnimatedEnumeration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 71CC7A1F152A0BFE009EEAF9 /* SVGAnimatedEnumeration.cpp */; };
@@ -1815,6 +1819,8 @@
71DCB7021568197600862271 /* JSSVGZoomAndPan.h in Headers */ = {isa = PBXBuildFile; fileRef = 71DCB7001568197600862271 /* JSSVGZoomAndPan.h */; };
71E623D1151F72A60036E2F4 /* SVGAnimatedIntegerOptionalInteger.h in Headers */ = {isa = PBXBuildFile; fileRef = 71E623CF151F72A60036E2F4 /* SVGAnimatedIntegerOptionalInteger.h */; };
71FB967B1383D64600AC8A4C /* SVGAnimatedEnumerationPropertyTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 71FB967A1383D64600AC8A4C /* SVGAnimatedEnumerationPropertyTearOff.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 71FE57F0156A620600ABEBD3 /* DOMSVGViewSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 71FE57EE156A620600ABEBD3 /* DOMSVGViewSpec.h */; };
+ 71FE57F1156A620600ABEBD3 /* DOMSVGViewSpec.mm in Sources */ = {isa = PBXBuildFile; fileRef = 71FE57EF156A620600ABEBD3 /* DOMSVGViewSpec.mm */; };
72626E020EF022FE00A07E20 /* FontFastPath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 72626E010EF022FE00A07E20 /* FontFastPath.cpp */; };
750D029311D0E7F300BD1B27 /* RenderInputSpeech.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 750D029111D0E7F300BD1B27 /* RenderInputSpeech.cpp */; };
750D029411D0E7F300BD1B27 /* RenderInputSpeech.h in Headers */ = {isa = PBXBuildFile; fileRef = 750D029211D0E7F300BD1B27 /* RenderInputSpeech.h */; };
@@ -6875,7 +6881,9 @@
A80F3B7D0CCDCE24002DD990 /* DOMSVGUseElementInternal.h in Copy Generated Headers */,
A8F46A910CB20A9D003A9670 /* DOMSVGViewElement.h in Copy Generated Headers */,
A80F3B5F0CCDCE24002DD990 /* DOMSVGViewElementInternal.h in Copy Generated Headers */,
+ 71904DE8156A631C001E1BA5 /* DOMSVGViewSpec.h in Copy Generated Headers */,
A8F46AFD0CB20A9D003A9670 /* DOMSVGZoomAndPan.h in Copy Generated Headers */,
+ 71904DEA156A633A001E1BA5 /* DOMSVGViewSpecInternal.h in Copy Generated Headers */,
A8F46A930CB20A9D003A9670 /* DOMSVGZoomEvent.h in Copy Generated Headers */,
A80F3BB10CCDCE24002DD990 /* DOMSVGZoomEventInternal.h in Copy Generated Headers */,
1C11CCC20AA6093700DADB20 /* DOMText.h in Copy Generated Headers */,
@@ -7015,7 +7023,6 @@
081668D7125603D5006F25DE /* SVGTextLayoutEngine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGTextLayoutEngine.cpp; sourceTree = "<group>"; };
081668D8125603D5006F25DE /* SVGTextLayoutEngine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGTextLayoutEngine.h; sourceTree = "<group>"; };
081AA8D91111237E002AB06E /* SVGElementRareData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGElementRareData.h; sourceTree = "<group>"; };
- 081CDFBE126ECFE800D215CA /* SVGAnimatedPropertySynchronizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedPropertySynchronizer.h; sourceTree = "<group>"; };
081DD49B13BA1A6000DC7627 /* SVGPropertyInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPropertyInfo.h; sourceTree = "<group>"; };
081EBF380FD34F4100DA7559 /* SVGFilterBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGFilterBuilder.cpp; sourceTree = "<group>"; };
081EBF390FD34F4100DA7559 /* SVGFilterBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGFilterBuilder.h; sourceTree = "<group>"; };
@@ -8852,13 +8859,17 @@
6ED878C3147493F4004C3597 /* RenderTableCaption.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderTableCaption.h; sourceTree = "<group>"; };
6EE8A77010F803F3005A4A24 /* JSWebGLContextAttributes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSWebGLContextAttributes.cpp; sourceTree = "<group>"; };
6EE8A77110F803F3005A4A24 /* JSWebGLContextAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWebGLContextAttributes.h; sourceTree = "<group>"; };
+ 710867D51568644B00AA779B /* DOMSVGViewSpecInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMSVGViewSpecInternal.h; sourceTree = "<group>"; };
7117445614BC34E200EE5FC8 /* SVGTextMetricsBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGTextMetricsBuilder.cpp; sourceTree = "<group>"; };
7117445714BC34E200EE5FC8 /* SVGTextMetricsBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGTextMetricsBuilder.h; sourceTree = "<group>"; };
+ 7118FED215685CC60030B79A /* JSSVGViewSpec.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGViewSpec.cpp; sourceTree = "<group>"; };
+ 7118FED315685CC60030B79A /* JSSVGViewSpec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSSVGViewSpec.h; sourceTree = "<group>"; };
7134496B146941B300720312 /* SVGLengthContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGLengthContext.cpp; sourceTree = "<group>"; };
7134496C146941B300720312 /* SVGLengthContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGLengthContext.h; sourceTree = "<group>"; };
715379FE146BD9D6008BD615 /* SVGPathData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGPathData.cpp; sourceTree = "<group>"; };
715379FF146BD9D6008BD615 /* SVGPathData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathData.h; sourceTree = "<group>"; };
7157F061150B6564006EAABD /* SVGAnimatedTransformList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAnimatedTransformList.cpp; sourceTree = "<group>"; };
+ 718512331568649800C40967 /* DOMSVGViewSpecInternal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DOMSVGViewSpecInternal.h; sourceTree = "<group>"; };
71A57DEF154BE25C0009D120 /* SVGPathUtilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGPathUtilities.cpp; sourceTree = "<group>"; };
71A57DF0154BE25C0009D120 /* SVGPathUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathUtilities.h; sourceTree = "<group>"; };
71CC7A1F152A0BFE009EEAF9 /* SVGAnimatedEnumeration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAnimatedEnumeration.cpp; sourceTree = "<group>"; };
@@ -8867,6 +8878,8 @@
71E623CE151F72A60036E2F4 /* SVGAnimatedIntegerOptionalInteger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAnimatedIntegerOptionalInteger.cpp; sourceTree = "<group>"; };
71E623CF151F72A60036E2F4 /* SVGAnimatedIntegerOptionalInteger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedIntegerOptionalInteger.h; sourceTree = "<group>"; };
71FB967A1383D64600AC8A4C /* SVGAnimatedEnumerationPropertyTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedEnumerationPropertyTearOff.h; sourceTree = "<group>"; };
+ 71FE57EE156A620600ABEBD3 /* DOMSVGViewSpec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMSVGViewSpec.h; sourceTree = "<group>"; };
+ 71FE57EF156A620600ABEBD3 /* DOMSVGViewSpec.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMSVGViewSpec.mm; sourceTree = "<group>"; };
72626E010EF022FE00A07E20 /* FontFastPath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FontFastPath.cpp; sourceTree = "<group>"; };
750D029111D0E7F300BD1B27 /* RenderInputSpeech.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderInputSpeech.cpp; sourceTree = "<group>"; };
750D029211D0E7F300BD1B27 /* RenderInputSpeech.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderInputSpeech.h; sourceTree = "<group>"; };
@@ -13788,7 +13801,6 @@
088A0DFC126EF1DB00978F7A /* SVGAnimatedProperty.h */,
088A0DFD126EF1DB00978F7A /* SVGAnimatedPropertyDescription.h */,
088A0DFE126EF1DB00978F7A /* SVGAnimatedPropertyMacros.h */,
- 081CDFBE126ECFE800D215CA /* SVGAnimatedPropertySynchronizer.h */,
088A0DFF126EF1DB00978F7A /* SVGAnimatedPropertyTearOff.h */,
08525E621278C00100A84778 /* SVGAnimatedStaticPropertyTearOff.h */,
085A15921289A8DD002710E3 /* SVGAnimatedTransformListPropertyTearOff.h */,
@@ -16195,6 +16207,9 @@
859D62970AD888EF00012995 /* DOMSVGViewElement.h */,
859D62980AD888EF00012995 /* DOMSVGViewElement.mm */,
A8E543C90CA9D1C10097D09B /* DOMSVGViewElementInternal.h */,
+ 71FE57EE156A620600ABEBD3 /* DOMSVGViewSpec.h */,
+ 71FE57EF156A620600ABEBD3 /* DOMSVGViewSpec.mm */,
+ 718512331568649800C40967 /* DOMSVGViewSpecInternal.h */,
84852281119016A7006EDC7F /* DOMSVGVKernElement.h */,
84852282119016A7006EDC7F /* DOMSVGVKernElement.mm */,
859D62990AD888EF00012995 /* DOMSVGZoomAndPan.h */,
@@ -16652,6 +16667,7 @@
859D62D80AD8892700012995 /* DOMSVGUnitTypesInternal.h */,
859D62D90AD8892700012995 /* DOMSVGUseElementInternal.h */,
859D62DA0AD8892700012995 /* DOMSVGViewElementInternal.h */,
+ 710867D51568644B00AA779B /* DOMSVGViewSpecInternal.h */,
859D62DB0AD8892700012995 /* DOMSVGZoomEventInternal.h */,
4429AB070CB84F81007647C5 /* DOMTextEventInternal.h */,
85E7118A0AC5D5350053270F /* DOMTextInternal.h */,
@@ -18381,6 +18397,8 @@
B2FA3D2D0AB75A6F000E5AC4 /* JSSVGUseElement.h */,
B2FA3D2E0AB75A6F000E5AC4 /* JSSVGViewElement.cpp */,
B2FA3D2F0AB75A6F000E5AC4 /* JSSVGViewElement.h */,
+ 7118FED215685CC60030B79A /* JSSVGViewSpec.cpp */,
+ 7118FED315685CC60030B79A /* JSSVGViewSpec.h */,
848522791190162C006EDC7F /* JSSVGVKernElement.cpp */,
8485227A1190162C006EDC7F /* JSSVGVKernElement.h */,
71DCB6FF1568197600862271 /* JSSVGZoomAndPan.cpp */,
@@ -24465,7 +24483,6 @@
088A0E05126EF1DB00978F7A /* SVGAnimatedProperty.h in Headers */,
088A0E06126EF1DB00978F7A /* SVGAnimatedPropertyDescription.h in Headers */,
088A0E07126EF1DB00978F7A /* SVGAnimatedPropertyMacros.h in Headers */,
- 081CDFBF126ECFE800D215CA /* SVGAnimatedPropertySynchronizer.h in Headers */,
088A0E08126EF1DB00978F7A /* SVGAnimatedPropertyTearOff.h in Headers */,
08C859C01274575400A5728D /* SVGAnimatedRect.h in Headers */,
08525E631278C00100A84778 /* SVGAnimatedStaticPropertyTearOff.h in Headers */,
@@ -24957,6 +24974,9 @@
E4946EAF156E64DD00D3297F /* StyleRuleImport.h in Headers */,
71DCB7021568197600862271 /* JSSVGZoomAndPan.h in Headers */,
0F3F0E5A157030C3006DA57F /* RenderGeometryMap.h in Headers */,
+ 7118FED515685CC60030B79A /* JSSVGViewSpec.h in Headers */,
+ 71FE57F0156A620600ABEBD3 /* DOMSVGViewSpec.h in Headers */,
+ 717A1981156A63BE00F9FE8C /* DOMSVGViewSpecInternal.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -27989,6 +28009,8 @@
E4946EAE156E64DD00D3297F /* StyleRuleImport.cpp in Sources */,
71DCB7011568197600862271 /* JSSVGZoomAndPan.cpp in Sources */,
0F3F0E59157030C3006DA57F /* RenderGeometryMap.cpp in Sources */,
+ 7118FED415685CC60030B79A /* JSSVGViewSpec.cpp in Sources */,
+ 71FE57F1156A620600ABEBD3 /* DOMSVGViewSpec.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/Source/WebCore/bindings/js/JSSVGLengthCustom.cpp b/Source/WebCore/bindings/js/JSSVGLengthCustom.cpp
index 02ea9d6..dca4983 100644
--- a/Source/WebCore/bindings/js/JSSVGLengthCustom.cpp
+++ b/Source/WebCore/bindings/js/JSSVGLengthCustom.cpp
@@ -48,7 +48,7 @@
void JSSVGLength::setValue(ExecState* exec, JSValue value)
{
- if (impl()->role() == AnimValRole) {
+ if (impl()->isReadOnly()) {
setDOMException(exec, NO_MODIFICATION_ALLOWED_ERR);
return;
}
@@ -73,7 +73,7 @@
JSValue JSSVGLength::convertToSpecifiedUnits(ExecState* exec)
{
- if (impl()->role() == AnimValRole) {
+ if (impl()->isReadOnly()) {
setDOMException(exec, NO_MODIFICATION_ALLOWED_ERR);
return jsUndefined();
}
diff --git a/Source/WebCore/bindings/objc/DOMSVG.h b/Source/WebCore/bindings/objc/DOMSVG.h
index 86239da..4611ef7 100644
--- a/Source/WebCore/bindings/objc/DOMSVG.h
+++ b/Source/WebCore/bindings/objc/DOMSVG.h
@@ -169,5 +169,6 @@
#import <WebCore/DOMSVGUnitTypes.h>
#import <WebCore/DOMSVGUseElement.h>
#import <WebCore/DOMSVGViewElement.h>
+#import <WebCore/DOMSVGViewSpec.h>
#import <WebCore/DOMSVGZoomAndPan.h>
#import <WebCore/DOMSVGZoomEvent.h>
diff --git a/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm b/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
index ff8fb06..1434cb6 100644
--- a/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
+++ b/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
@@ -1956,7 +1956,7 @@
my $nativeValue = JSValueToNative($attribute->signature, "value");
if ($svgPropertyOrListPropertyType) {
if ($svgPropertyType) {
- push(@implContent, " if (impl->role() == AnimValRole) {\n");
+ push(@implContent, " if (impl->isReadOnly()) {\n");
push(@implContent, " setDOMException(exec, NO_MODIFICATION_ALLOWED_ERR);\n");
push(@implContent, " return;\n");
push(@implContent, " }\n");
@@ -2129,7 +2129,7 @@
} else {
push(@implContent, " $implType* impl = static_cast<$implType*>(castedThis->impl());\n");
if ($svgPropertyType) {
- push(@implContent, " if (impl->role() == AnimValRole) {\n");
+ push(@implContent, " if (impl->isReadOnly()) {\n");
push(@implContent, " setDOMException(exec, NO_MODIFICATION_ALLOWED_ERR);\n");
push(@implContent, " return JSValue::encode(jsUndefined());\n");
push(@implContent, " }\n");
@@ -3099,7 +3099,7 @@
return "toJSNewlyCreated(exec, $globalObject, WTF::getPtr($value))";
}
- if ($codeGenerator->IsSVGAnimatedType($implClassName)) {
+ if ($codeGenerator->IsSVGAnimatedType($implClassName) or $implClassName eq "SVGViewSpec") {
# Convert from abstract SVGProperty to real type, so the right toJS() method can be invoked.
$value = "static_cast<" . GetNativeType($type) . ">($value)";
} elsif ($codeGenerator->IsSVGTypeNeedingTearOff($type) and not $implClassName =~ /List$/) {
diff --git a/Source/WebCore/bindings/scripts/CodeGeneratorObjC.pm b/Source/WebCore/bindings/scripts/CodeGeneratorObjC.pm
index 0a96489..3087cbb 100644
--- a/Source/WebCore/bindings/scripts/CodeGeneratorObjC.pm
+++ b/Source/WebCore/bindings/scripts/CodeGeneratorObjC.pm
@@ -1328,7 +1328,7 @@
$getterContentTail = "))";
}
}
- } elsif ($codeGenerator->IsSVGAnimatedType($implClassName) and $codeGenerator->IsSVGTypeNeedingTearOff($idlType)) {
+ } elsif (($codeGenerator->IsSVGAnimatedType($implClassName) or $implClassName eq "SVGViewSpec") and $codeGenerator->IsSVGTypeNeedingTearOff($idlType)) {
my $idlTypeWithNamespace = GetSVGTypeWithNamespace($idlType);
$getterContentHead = "kit(static_cast<$idlTypeWithNamespace*>($getterContentHead)";
$getterContentTail .= ")";
@@ -1436,7 +1436,7 @@
if ($svgPropertyType) {
$implIncludes{"ExceptionCode.h"} = 1;
$getterContentHead = "$getterExpressionPrefix";
- push(@implContent, " if (IMPL->role() == WebCore::AnimValRole) {\n");
+ push(@implContent, " if (IMPL->isReadOnly()) {\n");
push(@implContent, " WebCore::raiseOnDOMError(WebCore::NO_MODIFICATION_ALLOWED_ERR);\n");
push(@implContent, " return;\n");
push(@implContent, " }\n");
@@ -1636,7 +1636,7 @@
$content = "${implementedBy}::" . $codeGenerator->WK_lcfirst($functionName) . "(" . join(", ", @parameterNames) . ")";
} elsif ($svgPropertyType) {
$implIncludes{"ExceptionCode.h"} = 1;
- push(@functionContent, " if (IMPL->role() == WebCore::AnimValRole) {\n");
+ push(@functionContent, " if (IMPL->isReadOnly()) {\n");
push(@functionContent, " WebCore::raiseOnDOMError(WebCore::NO_MODIFICATION_ALLOWED_ERR);\n");
if ($returnType eq "void") {
push(@functionContent, " return;\n");
diff --git a/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm b/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm
index bfcc98e..4ac8855 100644
--- a/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm
+++ b/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm
@@ -945,7 +945,7 @@
return;
}
- if ($codeGenerator->IsSVGAnimatedType($implClassName) and $codeGenerator->IsSVGTypeNeedingTearOff($attrType)) {
+ if (($codeGenerator->IsSVGAnimatedType($implClassName) or $implClassName eq "SVGViewSpec") and $codeGenerator->IsSVGTypeNeedingTearOff($attrType)) {
AddToImplIncludes("V8$attrType.h");
my $svgNativeType = $codeGenerator->GetSVGTypeNeedingTearOff($attrType);
# Convert from abstract SVGProperty to real type, so the right toJS() method can be invoked.
@@ -1061,7 +1061,7 @@
} else {
AddToImplIncludes("ExceptionCode.h");
push(@implContentDecls, " $svgNativeType* wrapper = V8${implClassName}::toNative(info.Holder());\n");
- push(@implContentDecls, " if (wrapper->role() == AnimValRole) {\n");
+ push(@implContentDecls, " if (wrapper->isReadOnly()) {\n");
push(@implContentDecls, " V8Proxy::setDOMException(NO_MODIFICATION_ALLOWED_ERR, info.GetIsolate());\n");
push(@implContentDecls, " return;\n");
push(@implContentDecls, " }\n");
@@ -1395,7 +1395,7 @@
} else {
AddToImplIncludes("ExceptionCode.h");
push(@implContentDecls, " $nativeClassName wrapper = V8${implClassName}::toNative(args.Holder());\n");
- push(@implContentDecls, " if (wrapper->role() == AnimValRole)\n");
+ push(@implContentDecls, " if (wrapper->isReadOnly())\n");
push(@implContentDecls, " return V8Proxy::setDOMException(NO_MODIFICATION_ALLOWED_ERR, args.GetIsolate());\n");
my $svgWrappedNativeType = $codeGenerator->GetSVGWrappedTypeNeedingTearOff($implClassName);
push(@implContentDecls, " $svgWrappedNativeType& impInstance = wrapper->propertyReference();\n");
diff --git a/Source/WebCore/bindings/v8/custom/V8SVGLengthCustom.cpp b/Source/WebCore/bindings/v8/custom/V8SVGLengthCustom.cpp
index fc7ade7..292bc0d 100644
--- a/Source/WebCore/bindings/v8/custom/V8SVGLengthCustom.cpp
+++ b/Source/WebCore/bindings/v8/custom/V8SVGLengthCustom.cpp
@@ -58,7 +58,7 @@
{
INC_STATS("DOM.SVGLength.value._set");
SVGPropertyTearOff<SVGLength>* wrapper = V8SVGLength::toNative(info.Holder());
- if (wrapper->role() == AnimValRole) {
+ if (wrapper->isReadOnly()) {
V8Proxy::setDOMException(NO_MODIFICATION_ALLOWED_ERR, info.GetIsolate());
return;
}
@@ -82,7 +82,7 @@
{
INC_STATS("DOM.SVGLength.convertToSpecifiedUnits");
SVGPropertyTearOff<SVGLength>* wrapper = V8SVGLength::toNative(args.Holder());
- if (wrapper->role() == AnimValRole)
+ if (wrapper->isReadOnly())
return V8Proxy::setDOMException(NO_MODIFICATION_ALLOWED_ERR, args.GetIsolate());
if (args.Length() < 1)
diff --git a/Source/WebCore/page/DOMWindow.idl b/Source/WebCore/page/DOMWindow.idl
index 3661c1b..56243fd 100644
--- a/Source/WebCore/page/DOMWindow.idl
+++ b/Source/WebCore/page/DOMWindow.idl
@@ -708,7 +708,7 @@
attribute SVGUnitTypesConstructor SVGUnitTypes;
attribute SVGUseElementConstructor SVGUseElement;
attribute SVGViewElementConstructor SVGViewElement;
-// attribute SVGViewSpecConstructor SVGViewSpec;
+ attribute SVGViewSpecConstructor SVGViewSpec;
attribute SVGZoomAndPanConstructor SVGZoomAndPan;
attribute SVGAnimateColorElementConstructor SVGAnimateColorElement;
diff --git a/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp b/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp
index 4dc501b..15d6476 100644
--- a/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp
+++ b/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp
@@ -27,6 +27,7 @@
#include "GraphicsContext.h"
#include "PatternAttributes.h"
#include "RenderSVGRoot.h"
+#include "SVGFitToViewBox.h"
#include "SVGRenderSupport.h"
#include "SVGRenderingContext.h"
@@ -215,7 +216,7 @@
if (patternBoundaries.width() <= 0 || patternBoundaries.height() <= 0)
return false;
- AffineTransform viewBoxCTM = patternElement->viewBoxToViewTransform(attributes.viewBox(), attributes.preserveAspectRatio(), patternBoundaries.width(), patternBoundaries.height());
+ AffineTransform viewBoxCTM = SVGFitToViewBox::viewBoxToViewTransform(attributes.viewBox(), attributes.preserveAspectRatio(), patternBoundaries.width(), patternBoundaries.height());
// Apply viewBox/objectBoundingBox transformations.
if (!viewBoxCTM.isIdentity())
diff --git a/Source/WebCore/svg/SVGFitToViewBox.cpp b/Source/WebCore/svg/SVGFitToViewBox.cpp
index e4df4ff..f1f6cf4 100644
--- a/Source/WebCore/svg/SVGFitToViewBox.cpp
+++ b/Source/WebCore/svg/SVGFitToViewBox.cpp
@@ -88,26 +88,6 @@
return preserveAspectRatio.getCTM(viewBoxRect.x(), viewBoxRect.y(), viewBoxRect.width(), viewBoxRect.height(), viewWidth, viewHeight);
}
-bool SVGFitToViewBox::parseAttribute(Document* document, const Attribute& attribute)
-{
- if (attribute.name() == SVGNames::viewBoxAttr) {
- FloatRect viewBox;
- if (!attribute.isNull())
- parseViewBox(document, attribute.value(), viewBox);
- setViewBoxBaseValue(viewBox);
- return true;
- }
-
- if (attribute.name() == SVGNames::preserveAspectRatioAttr) {
- SVGPreserveAspectRatio preserveAspectRatio;
- preserveAspectRatio.parse(attribute.value());
- setPreserveAspectRatioBaseValue(preserveAspectRatio);
- return true;
- }
-
- return false;
-}
-
bool SVGFitToViewBox::isKnownAttribute(const QualifiedName& attrName)
{
return attrName == SVGNames::viewBoxAttr || attrName == SVGNames::preserveAspectRatioAttr;
diff --git a/Source/WebCore/svg/SVGFitToViewBox.h b/Source/WebCore/svg/SVGFitToViewBox.h
index d771445..5145212 100644
--- a/Source/WebCore/svg/SVGFitToViewBox.h
+++ b/Source/WebCore/svg/SVGFitToViewBox.h
@@ -22,33 +22,52 @@
#define SVGFitToViewBox_h
#if ENABLE(SVG)
+#include "Attribute.h"
+#include "FloatRect.h"
#include "QualifiedName.h"
+#include "SVGNames.h"
+#include "SVGPreserveAspectRatio.h"
#include <wtf/HashSet.h>
namespace WebCore {
class AffineTransform;
-class Attribute;
class Document;
-class FloatRect;
-class SVGPreserveAspectRatio;
class SVGFitToViewBox {
public:
- virtual ~SVGFitToViewBox() { }
-
- bool parseViewBox(Document*, const UChar*& start, const UChar* end, FloatRect& viewBox, bool validate = true);
static AffineTransform viewBoxToViewTransform(const FloatRect& viewBoxRect, const SVGPreserveAspectRatio&, float viewWidth, float viewHeight);
- bool parseAttribute(Document*, const Attribute&);
- bool isKnownAttribute(const QualifiedName&);
- void addSupportedAttributes(HashSet<QualifiedName>&);
+ static bool isKnownAttribute(const QualifiedName&);
+ static void addSupportedAttributes(HashSet<QualifiedName>&);
- virtual void setViewBoxBaseValue(const FloatRect&) = 0;
- virtual void setPreserveAspectRatioBaseValue(const SVGPreserveAspectRatio&) = 0;
+ template<class SVGElementTarget>
+ static bool parseAttribute(SVGElementTarget* target, const Attribute& attribute)
+ {
+ ASSERT(target);
+ ASSERT(target->document());
+ if (attribute.name() == SVGNames::viewBoxAttr) {
+ FloatRect viewBox;
+ if (!attribute.isNull())
+ parseViewBox(target->document(), attribute.value(), viewBox);
+ target->setViewBoxBaseValue(viewBox);
+ return true;
+ }
+
+ if (attribute.name() == SVGNames::preserveAspectRatioAttr) {
+ SVGPreserveAspectRatio preserveAspectRatio;
+ preserveAspectRatio.parse(attribute.value());
+ target->setPreserveAspectRatioBaseValue(preserveAspectRatio);
+ return true;
+ }
+
+ return false;
+ }
+
+ static bool parseViewBox(Document*, const UChar*& start, const UChar* end, FloatRect& viewBox, bool validate = true);
private:
- bool parseViewBox(Document*, const String&, FloatRect&);
+ static bool parseViewBox(Document*, const String&, FloatRect&);
};
} // namespace WebCore
diff --git a/Source/WebCore/svg/SVGMarkerElement.cpp b/Source/WebCore/svg/SVGMarkerElement.cpp
index 9f9f197..2a6ebb1 100644
--- a/Source/WebCore/svg/SVGMarkerElement.cpp
+++ b/Source/WebCore/svg/SVGMarkerElement.cpp
@@ -39,6 +39,7 @@
static const SVGPropertyInfo* s_propertyInfo = 0;
if (!s_propertyInfo) {
s_propertyInfo = new SVGPropertyInfo(AnimatedEnumeration,
+ PropertyIsReadWrite,
SVGNames::orientAttr,
orientTypeIdentifier(),
&SVGMarkerElement::synchronizeOrientType,
@@ -153,7 +154,7 @@
setOrientAngleBaseValue(angle);
} else if (SVGLangSpace::parseAttribute(attribute)
|| SVGExternalResourcesRequired::parseAttribute(attribute)
- || SVGFitToViewBox::parseAttribute(document(), attribute)) {
+ || SVGFitToViewBox::parseAttribute(this, attribute)) {
} else
ASSERT_NOT_REACHED();
@@ -239,14 +240,14 @@
return;
DEFINE_STATIC_LOCAL(AtomicString, autoString, ("auto"));
- SVGAnimatedPropertySynchronizer<true>::synchronize(ownerType, orientTypePropertyInfo()->attributeName, autoString);
+ ownerType->m_orientType.synchronize(ownerType, orientTypePropertyInfo()->attributeName, autoString);
}
PassRefPtr<SVGAnimatedProperty> SVGMarkerElement::lookupOrCreateOrientTypeWrapper(void* contextElement)
{
ASSERT(contextElement);
SVGMarkerElement* ownerType = static_cast<SVGMarkerElement*>(contextElement);
- return SVGAnimatedProperty::lookupOrCreateWrapper<SVGMarkerElement, SVGAnimatedEnumerationPropertyTearOff<SVGMarkerOrientType>, SVGMarkerOrientType, true>
+ return SVGAnimatedProperty::lookupOrCreateWrapper<SVGMarkerElement, SVGAnimatedEnumerationPropertyTearOff<SVGMarkerOrientType>, SVGMarkerOrientType>
(ownerType, orientTypePropertyInfo(), ownerType->m_orientType.value);
}
diff --git a/Source/WebCore/svg/SVGPathElement.cpp b/Source/WebCore/svg/SVGPathElement.cpp
index f4c01f1..986f5fe 100644
--- a/Source/WebCore/svg/SVGPathElement.cpp
+++ b/Source/WebCore/svg/SVGPathElement.cpp
@@ -52,6 +52,7 @@
static const SVGPropertyInfo* s_propertyInfo = 0;
if (!s_propertyInfo) {
s_propertyInfo = new SVGPropertyInfo(AnimatedPath,
+ PropertyIsReadWrite,
SVGNames::dAttr,
SVGNames::dAttr.localName(),
&SVGPathElement::synchronizeD,
@@ -261,7 +262,7 @@
RenderSVGPath* renderer = static_cast<RenderSVGPath*>(this->renderer());
if (attrName == SVGNames::dAttr) {
- if (m_pathSegList.shouldSynchronize && !SVGAnimatedProperty::lookupWrapper<SVGPathElement, SVGAnimatedPathSegListPropertyTearOff, true>(this, dPropertyInfo())->isAnimating()) {
+ if (m_pathSegList.shouldSynchronize && !SVGAnimatedProperty::lookupWrapper<SVGPathElement, SVGAnimatedPathSegListPropertyTearOff>(this, dPropertyInfo())->isAnimating()) {
SVGPathSegList newList(PathSegUnalteredRole);
buildSVGPathSegListFromByteStream(m_pathByteStream.get(), this, newList, UnalteredParsing);
m_pathSegList.value = newList;
@@ -277,7 +278,7 @@
SVGPathByteStream* SVGPathElement::pathByteStream() const
{
- SVGAnimatedProperty* property = SVGAnimatedProperty::lookupWrapper<SVGPathElement, SVGAnimatedPathSegListPropertyTearOff, true>(this, dPropertyInfo());
+ SVGAnimatedProperty* property = SVGAnimatedProperty::lookupWrapper<SVGPathElement, SVGAnimatedPathSegListPropertyTearOff>(this, dPropertyInfo());
if (!property || !property->isAnimating())
return m_pathByteStream.get();
return static_cast<SVGAnimatedPathSegListPropertyTearOff*>(property)->animatedPathByteStream();
@@ -288,13 +289,13 @@
ASSERT(contextElement);
SVGPathElement* ownerType = static_cast<SVGPathElement*>(contextElement);
- if (SVGAnimatedProperty* property = SVGAnimatedProperty::lookupWrapper<SVGPathElement, SVGAnimatedPathSegListPropertyTearOff, true>(ownerType, dPropertyInfo()))
+ if (SVGAnimatedProperty* property = SVGAnimatedProperty::lookupWrapper<SVGPathElement, SVGAnimatedPathSegListPropertyTearOff>(ownerType, dPropertyInfo()))
return property;
// Build initial SVGPathSegList.
buildSVGPathSegListFromByteStream(ownerType->m_pathByteStream.get(), ownerType, ownerType->m_pathSegList.value, UnalteredParsing);
- return SVGAnimatedProperty::lookupOrCreateWrapper<SVGPathElement, SVGAnimatedPathSegListPropertyTearOff, SVGPathSegList, true>
+ return SVGAnimatedProperty::lookupOrCreateWrapper<SVGPathElement, SVGAnimatedPathSegListPropertyTearOff, SVGPathSegList>
(ownerType, dPropertyInfo(), ownerType->m_pathSegList.value);
}
@@ -304,7 +305,7 @@
SVGPathElement* ownerType = static_cast<SVGPathElement*>(contextElement);
if (!ownerType->m_pathSegList.shouldSynchronize)
return;
- SVGAnimatedPropertySynchronizer<true>::synchronize(ownerType, dPropertyInfo()->attributeName, ownerType->m_pathSegList.value.valueAsString());
+ ownerType->m_pathSegList.synchronize(ownerType, dPropertyInfo()->attributeName, ownerType->m_pathSegList.value.valueAsString());
}
SVGPathSegListPropertyTearOff* SVGPathElement::pathSegList()
diff --git a/Source/WebCore/svg/SVGPathSegWithContext.h b/Source/WebCore/svg/SVGPathSegWithContext.h
index fccfd6a..7010672 100644
--- a/Source/WebCore/svg/SVGPathSegWithContext.h
+++ b/Source/WebCore/svg/SVGPathSegWithContext.h
@@ -39,7 +39,7 @@
case PathSegUndefinedRole:
return 0;
case PathSegUnalteredRole:
- return SVGAnimatedProperty::lookupWrapper<SVGPathElement, SVGAnimatedPathSegListPropertyTearOff, true>(m_element.get(), SVGPathElement::dPropertyInfo());
+ return SVGAnimatedProperty::lookupWrapper<SVGPathElement, SVGAnimatedPathSegListPropertyTearOff>(m_element.get(), SVGPathElement::dPropertyInfo());
case PathSegNormalizedRole:
// FIXME: https://bugs.webkit.org/show_bug.cgi?id=15412 - Implement normalized path segment lists!
return 0;
diff --git a/Source/WebCore/svg/SVGPatternElement.cpp b/Source/WebCore/svg/SVGPatternElement.cpp
index b04f3b3..c39e288 100644
--- a/Source/WebCore/svg/SVGPatternElement.cpp
+++ b/Source/WebCore/svg/SVGPatternElement.cpp
@@ -34,6 +34,7 @@
#include "RenderSVGContainer.h"
#include "RenderSVGResourcePattern.h"
#include "SVGElementInstance.h"
+#include "SVGFitToViewBox.h"
#include "SVGNames.h"
#include "SVGRenderSupport.h"
#include "SVGSVGElement.h"
@@ -143,7 +144,7 @@
|| SVGTests::parseAttribute(attribute)
|| SVGLangSpace::parseAttribute(attribute)
|| SVGExternalResourcesRequired::parseAttribute(attribute)
- || SVGFitToViewBox::parseAttribute(document(), attribute)) {
+ || SVGFitToViewBox::parseAttribute(this, attribute)) {
} else
ASSERT_NOT_REACHED();
diff --git a/Source/WebCore/svg/SVGPolyElement.cpp b/Source/WebCore/svg/SVGPolyElement.cpp
index 57deccb..3ae5fe5 100644
--- a/Source/WebCore/svg/SVGPolyElement.cpp
+++ b/Source/WebCore/svg/SVGPolyElement.cpp
@@ -41,6 +41,7 @@
static const SVGPropertyInfo* s_propertyInfo = 0;
if (!s_propertyInfo) {
s_propertyInfo = new SVGPropertyInfo(AnimatedPoints,
+ PropertyIsReadWrite,
SVGNames::pointsAttr,
SVGNames::pointsAttr.localName(),
&SVGPolyElement::synchronizePoints,
@@ -90,7 +91,7 @@
if (!pointsListFromSVGData(newList, value))
document()->accessSVGExtensions()->reportError("Problem parsing points=\"" + value + "\"");
- if (SVGAnimatedProperty* wrapper = SVGAnimatedProperty::lookupWrapper<SVGPolyElement, SVGAnimatedPointList, true>(this, pointsPropertyInfo()))
+ if (SVGAnimatedProperty* wrapper = SVGAnimatedProperty::lookupWrapper<SVGPolyElement, SVGAnimatedPointList>(this, pointsPropertyInfo()))
static_cast<SVGAnimatedPointList*>(wrapper)->detachListWrappers(newList.size());
m_points.value = newList;
@@ -143,14 +144,14 @@
SVGPolyElement* ownerType = static_cast<SVGPolyElement*>(contextElement);
if (!ownerType->m_points.shouldSynchronize)
return;
- SVGAnimatedPropertySynchronizer<true>::synchronize(ownerType, pointsPropertyInfo()->attributeName, ownerType->m_points.value.valueAsString());
+ ownerType->m_points.synchronize(ownerType, pointsPropertyInfo()->attributeName, ownerType->m_points.value.valueAsString());
}
PassRefPtr<SVGAnimatedProperty> SVGPolyElement::lookupOrCreatePointsWrapper(void* contextElement)
{
ASSERT(contextElement);
SVGPolyElement* ownerType = static_cast<SVGPolyElement*>(contextElement);
- return SVGAnimatedProperty::lookupOrCreateWrapper<SVGPolyElement, SVGAnimatedPointList, SVGPointList, true>
+ return SVGAnimatedProperty::lookupOrCreateWrapper<SVGPolyElement, SVGAnimatedPointList, SVGPointList>
(ownerType, pointsPropertyInfo(), ownerType->m_points.value);
}
diff --git a/Source/WebCore/svg/SVGRect.h b/Source/WebCore/svg/SVGRect.h
index 379a5bf..27db378 100644
--- a/Source/WebCore/svg/SVGRect.h
+++ b/Source/WebCore/svg/SVGRect.h
@@ -40,7 +40,6 @@
builder.append(String::number(type.width()));
builder.append(' ');
builder.append(String::number(type.height()));
- builder.append(' ');
return builder.toString();
}
};
diff --git a/Source/WebCore/svg/SVGSVGElement.cpp b/Source/WebCore/svg/SVGSVGElement.cpp
index 0fbda9d..4b438f5 100644
--- a/Source/WebCore/svg/SVGSVGElement.cpp
+++ b/Source/WebCore/svg/SVGSVGElement.cpp
@@ -46,13 +46,13 @@
#include "SMILTimeContainer.h"
#include "SVGAngle.h"
#include "SVGElementInstance.h"
+#include "SVGFitToViewBox.h"
#include "SVGNames.h"
#include "SVGPreserveAspectRatio.h"
#include "SVGTransform.h"
#include "SVGTransformList.h"
#include "SVGViewElement.h"
#include "SVGViewSpec.h"
-#include "SVGZoomAndPan.h"
#include "SVGZoomEvent.h"
#include "ScriptEventListener.h"
#include "StaticNodeList.h"
@@ -103,6 +103,8 @@
SVGSVGElement::~SVGSVGElement()
{
+ if (m_viewSpec)
+ m_viewSpec->resetContextElement();
document()->unregisterForPageCacheSuspensionCallbacks(this);
// There are cases where removedFromDocument() is not called.
// see ContainerNode::removeAllChildren, called by its destructor.
@@ -170,10 +172,10 @@
return pixelUnitToMillimeterY();
}
-SVGViewSpec* SVGSVGElement::currentView() const
+SVGViewSpec* SVGSVGElement::currentView()
{
if (!m_viewSpec)
- m_viewSpec = adoptPtr(new SVGViewSpec(const_cast<SVGSVGElement*>(this)));
+ m_viewSpec = SVGViewSpec::create(this);
return m_viewSpec.get();
}
@@ -269,7 +271,7 @@
else if (SVGTests::parseAttribute(attribute)
|| SVGLangSpace::parseAttribute(attribute)
|| SVGExternalResourcesRequired::parseAttribute(attribute)
- || SVGFitToViewBox::parseAttribute(document(), attribute)
+ || SVGFitToViewBox::parseAttribute(this, attribute)
|| SVGZoomAndPan::parseAttribute(this, attribute)) {
} else
SVGStyledLocatableElement::parseAttribute(attribute);
@@ -525,11 +527,8 @@
FloatRect SVGSVGElement::currentViewBoxRect() const
{
- if (useCurrentView()) {
- if (SVGViewSpec* view = currentView()) // what if we should use it but it is not set?
- return view->viewBox();
- return FloatRect();
- }
+ if (m_useCurrentView)
+ return m_viewSpec ? m_viewSpec->viewBox() : FloatRect();
FloatRect useViewBox = viewBox();
if (!useViewBox.isEmpty())
@@ -646,71 +645,95 @@
AffineTransform SVGSVGElement::viewBoxToViewTransform(float viewWidth, float viewHeight) const
{
- AffineTransform ctm = SVGFitToViewBox::viewBoxToViewTransform(currentViewBoxRect(), preserveAspectRatio(), viewWidth, viewHeight);
- if (useCurrentView() && currentView()) {
- AffineTransform transform;
- if (currentView()->transformBaseValue().concatenate(transform))
- ctm *= transform;
- }
+ if (!m_useCurrentView || !m_viewSpec)
+ return SVGFitToViewBox::viewBoxToViewTransform(currentViewBoxRect(), preserveAspectRatio(), viewWidth, viewHeight);
+
+ AffineTransform ctm = SVGFitToViewBox::viewBoxToViewTransform(currentViewBoxRect(), m_viewSpec->preserveAspectRatio(), viewWidth, viewHeight);
+ const SVGTransformList& transformList = m_viewSpec->transformBaseValue();
+ if (transformList.isEmpty())
+ return ctm;
+
+ AffineTransform transform;
+ if (transformList.concatenate(transform))
+ ctm *= transform;
return ctm;
}
void SVGSVGElement::setupInitialView(const String& fragmentIdentifier, Element* anchorNode)
{
+ RenderObject* renderer = this->renderer();
+ SVGViewSpec* view = m_viewSpec.get();
+ if (view)
+ view->reset();
+
bool hadUseCurrentView = m_useCurrentView;
+ m_useCurrentView = false;
+
if (fragmentIdentifier.startsWith("xpointer(")) {
// FIXME: XPointer references are ignored (https://bugs.webkit.org/show_bug.cgi?id=17491)
- setUseCurrentView(false);
- } else if (fragmentIdentifier.startsWith("svgView(")) {
- if (currentView()->parseViewSpec(fragmentIdentifier))
- setUseCurrentView(true);
- } else if (anchorNode && anchorNode->hasTagName(SVGNames::viewTag)) {
+ if (renderer && hadUseCurrentView)
+ RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
+ return;
+ }
+
+ if (fragmentIdentifier.startsWith("svgView(")) {
+ if (!view)
+ view = currentView(); // Create the SVGViewSpec.
+
+ if (view->parseViewSpec(fragmentIdentifier))
+ m_useCurrentView = true;
+ else
+ view->reset();
+
+ if (renderer && (hadUseCurrentView || m_useCurrentView))
+ RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
+ return;
+ }
+
+ // Spec: If the SVG fragment identifier addresses a ‘view’ element within an SVG document (e.g., MyDrawing.svg#MyView
+ // or MyDrawing.svg#xpointer(id('MyView'))) then the closest ancestor ‘svg’ element is displayed in the viewport.
+ // Any view specification attributes included on the given ‘view’ element override the corresponding view specification
+ // attributes on the closest ancestor ‘svg’ element.
+ if (anchorNode && anchorNode->hasTagName(SVGNames::viewTag)) {
if (SVGViewElement* viewElement = anchorNode->hasTagName(SVGNames::viewTag) ? static_cast<SVGViewElement*>(anchorNode) : 0) {
SVGElement* element = SVGLocatable::nearestViewportElement(viewElement);
if (element->hasTagName(SVGNames::svgTag)) {
SVGSVGElement* svg = static_cast<SVGSVGElement*>(element);
svg->inheritViewAttributes(viewElement);
- setUseCurrentView(true);
+
+ if (RenderObject* renderer = svg->renderer())
+ RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer);
}
}
+ return;
}
- if (!hadUseCurrentView) {
- if (!m_useCurrentView)
- return;
- } else if (!m_useCurrentView)
- currentView()->setTransformString(emptyString());
-
- // Force a layout, otherwise RenderSVGRoots localToBorderBoxTransform won't be rebuild.
- if (RenderObject* object = renderer())
- RenderSVGResource::markForLayoutAndParentResourceInvalidation(object);
-
// FIXME: We need to decide which <svg> to focus on, and zoom to it.
// FIXME: We need to actually "highlight" the viewTarget(s).
}
void SVGSVGElement::inheritViewAttributes(SVGViewElement* viewElement)
{
- if (viewElement->hasAttribute(SVGNames::viewBoxAttr))
- currentView()->setViewBoxBaseValue(viewElement->viewBox());
- else
- currentView()->setViewBoxBaseValue(viewBox());
+ SVGViewSpec* view = currentView();
+ m_useCurrentView = true;
- SVGPreserveAspectRatio aspectRatio;
- if (viewElement->hasAttribute(SVGNames::preserveAspectRatioAttr))
- aspectRatio = viewElement->preserveAspectRatioBaseValue();
+ if (viewElement->hasAttribute(SVGNames::viewBoxAttr))
+ view->setViewBoxBaseValue(viewElement->viewBox());
else
- aspectRatio = preserveAspectRatioBaseValue();
- currentView()->setPreserveAspectRatioBaseValue(aspectRatio);
+ view->setViewBoxBaseValue(viewBox());
+
+ if (viewElement->hasAttribute(SVGNames::preserveAspectRatioAttr))
+ view->setPreserveAspectRatioBaseValue(viewElement->preserveAspectRatioBaseValue());
+ else
+ view->setPreserveAspectRatioBaseValue(preserveAspectRatioBaseValue());
if (viewElement->hasAttribute(SVGNames::zoomAndPanAttr))
- currentView()->setZoomAndPanBaseValue(viewElement->zoomAndPan());
-
- if (RenderObject* object = renderer())
- RenderSVGResource::markForLayoutAndParentResourceInvalidation(object);
+ view->setZoomAndPanBaseValue(viewElement->zoomAndPan());
+ else
+ view->setZoomAndPanBaseValue(zoomAndPan());
}
-
+
void SVGSVGElement::documentWillSuspendForPageCache()
{
pauseAnimations();
diff --git a/Source/WebCore/svg/SVGSVGElement.h b/Source/WebCore/svg/SVGSVGElement.h
index 99b6be2..cee47a4 100644
--- a/Source/WebCore/svg/SVGSVGElement.h
+++ b/Source/WebCore/svg/SVGSVGElement.h
@@ -72,9 +72,7 @@
float screenPixelToMillimeterY() const;
bool useCurrentView() const { return m_useCurrentView; }
- void setUseCurrentView(bool currentView) { m_useCurrentView = currentView; }
-
- SVGViewSpec* currentView() const;
+ SVGViewSpec* currentView();
enum ConsiderCSSMode {
RespectCSSProperties,
@@ -191,7 +189,7 @@
SVGZoomAndPanType m_zoomAndPan;
RefPtr<SMILTimeContainer> m_timeContainer;
FloatPoint m_translation;
- mutable OwnPtr<SVGViewSpec> m_viewSpec;
+ RefPtr<SVGViewSpec> m_viewSpec;
};
} // namespace WebCore
diff --git a/Source/WebCore/svg/SVGSVGElement.idl b/Source/WebCore/svg/SVGSVGElement.idl
index 8fcd3d8..54f4c61 100644
--- a/Source/WebCore/svg/SVGSVGElement.idl
+++ b/Source/WebCore/svg/SVGSVGElement.idl
@@ -48,9 +48,8 @@
readonly attribute float pixelUnitToMillimeterY;
readonly attribute float screenPixelToMillimeterX;
readonly attribute float screenPixelToMillimeterY;
- attribute boolean useCurrentView
- /*setter raises(DOMException)*/;
- // TODO readonly attribute SVGViewSpec currentView;
+ readonly attribute boolean useCurrentView;
+ readonly attribute SVGViewSpec currentView;
attribute float currentScale
/*setter raises(DOMException)*/;
readonly attribute SVGPoint currentTranslate;
diff --git a/Source/WebCore/svg/SVGSymbolElement.cpp b/Source/WebCore/svg/SVGSymbolElement.cpp
index 9c2f686..d3a1f3a 100644
--- a/Source/WebCore/svg/SVGSymbolElement.cpp
+++ b/Source/WebCore/svg/SVGSymbolElement.cpp
@@ -76,7 +76,7 @@
return;
if (SVGExternalResourcesRequired::parseAttribute(attribute))
return;
- if (SVGFitToViewBox::parseAttribute(document(), attribute))
+ if (SVGFitToViewBox::parseAttribute(this, attribute))
return;
ASSERT_NOT_REACHED();
diff --git a/Source/WebCore/svg/SVGTests.cpp b/Source/WebCore/svg/SVGTests.cpp
index 9918938..63235a4 100644
--- a/Source/WebCore/svg/SVGTests.cpp
+++ b/Source/WebCore/svg/SVGTests.cpp
@@ -38,6 +38,7 @@
static const SVGPropertyInfo* s_propertyInfo = 0;
if (!s_propertyInfo) {
s_propertyInfo = new SVGPropertyInfo(AnimatedUnknown,
+ PropertyIsReadWrite,
SVGNames::requiredFeaturesAttr,
SVGNames::requiredFeaturesAttr.localName(),
&SVGElement::synchronizeRequiredFeatures,
@@ -52,6 +53,7 @@
static const SVGPropertyInfo* s_propertyInfo = 0;
if (!s_propertyInfo) {
s_propertyInfo = new SVGPropertyInfo(AnimatedUnknown,
+ PropertyIsReadWrite,
SVGNames::requiredExtensionsAttr,
SVGNames::requiredExtensionsAttr.localName(),
&SVGElement::synchronizeRequiredExtensions,
@@ -66,6 +68,7 @@
static const SVGPropertyInfo* s_propertyInfo = 0;
if (!s_propertyInfo) {
s_propertyInfo = new SVGPropertyInfo(AnimatedUnknown,
+ PropertyIsReadWrite,
SVGNames::systemLanguageAttr,
SVGNames::systemLanguageAttr.localName(),
&SVGElement::synchronizeSystemLanguage,
@@ -173,7 +176,7 @@
if (!m_requiredFeatures.shouldSynchronize)
return;
AtomicString value(m_requiredFeatures.value.valueAsString());
- SVGAnimatedPropertySynchronizer<true>::synchronize(contextElement, requiredFeaturesPropertyInfo()->attributeName, value);
+ m_requiredFeatures.synchronize(contextElement, requiredFeaturesPropertyInfo()->attributeName, value);
}
void SVGTests::synchronizeRequiredExtensions(SVGElement* contextElement)
@@ -182,7 +185,7 @@
if (!m_requiredExtensions.shouldSynchronize)
return;
AtomicString value(m_requiredExtensions.value.valueAsString());
- SVGAnimatedPropertySynchronizer<true>::synchronize(contextElement, requiredExtensionsPropertyInfo()->attributeName, value);
+ m_requiredExtensions.synchronize(contextElement, requiredExtensionsPropertyInfo()->attributeName, value);
}
void SVGTests::synchronizeSystemLanguage(SVGElement* contextElement)
@@ -191,7 +194,7 @@
if (!m_systemLanguage.shouldSynchronize)
return;
AtomicString value(m_systemLanguage.value.valueAsString());
- SVGAnimatedPropertySynchronizer<true>::synchronize(contextElement, systemLanguagePropertyInfo()->attributeName, value);
+ m_systemLanguage.synchronize(contextElement, systemLanguagePropertyInfo()->attributeName, value);
}
SVGStringList& SVGTests::requiredFeatures()
diff --git a/Source/WebCore/svg/SVGTextContentElement.cpp b/Source/WebCore/svg/SVGTextContentElement.cpp
index 612b605..8b7041f 100644
--- a/Source/WebCore/svg/SVGTextContentElement.cpp
+++ b/Source/WebCore/svg/SVGTextContentElement.cpp
@@ -44,6 +44,7 @@
static const SVGPropertyInfo* s_propertyInfo = 0;
if (!s_propertyInfo) {
s_propertyInfo = new SVGPropertyInfo(AnimatedLength,
+ PropertyIsReadWrite,
SVGNames::textLengthAttr,
SVGNames::textLengthAttr.localName(),
&SVGTextContentElement::synchronizeTextLength,
@@ -80,14 +81,14 @@
if (!ownerType->m_textLength.shouldSynchronize)
return;
AtomicString value(SVGPropertyTraits<SVGLength>::toString(ownerType->m_specifiedTextLength));
- SVGAnimatedPropertySynchronizer<true>::synchronize(ownerType, textLengthPropertyInfo()->attributeName, value);
+ ownerType->m_textLength.synchronize(ownerType, textLengthPropertyInfo()->attributeName, value);
}
PassRefPtr<SVGAnimatedProperty> SVGTextContentElement::lookupOrCreateTextLengthWrapper(void* contextElement)
{
ASSERT(contextElement);
SVGTextContentElement* ownerType = static_cast<SVGTextContentElement*>(contextElement);
- return SVGAnimatedProperty::lookupOrCreateWrapper<SVGTextContentElement, SVGAnimatedLength, SVGLength, true>
+ return SVGAnimatedProperty::lookupOrCreateWrapper<SVGTextContentElement, SVGAnimatedLength, SVGLength>
(ownerType, textLengthPropertyInfo(), ownerType->m_textLength.value);
}
diff --git a/Source/WebCore/svg/SVGViewElement.cpp b/Source/WebCore/svg/SVGViewElement.cpp
index dabe9db..da4b0d9 100644
--- a/Source/WebCore/svg/SVGViewElement.cpp
+++ b/Source/WebCore/svg/SVGViewElement.cpp
@@ -83,7 +83,7 @@
if (SVGExternalResourcesRequired::parseAttribute(attribute))
return;
- if (SVGFitToViewBox::parseAttribute(document(), attribute))
+ if (SVGFitToViewBox::parseAttribute(this, attribute))
return;
if (SVGZoomAndPan::parseAttribute(this, attribute))
return;
diff --git a/Source/WebCore/svg/SVGViewElement.h b/Source/WebCore/svg/SVGViewElement.h
index 11f5838..8c92f31 100644
--- a/Source/WebCore/svg/SVGViewElement.h
+++ b/Source/WebCore/svg/SVGViewElement.h
@@ -44,7 +44,6 @@
using SVGStyledElement::deref;
SVGStringList& viewTarget() { return m_viewTarget; }
-
SVGZoomAndPanType zoomAndPan() const { return m_zoomAndPan; }
void setZoomAndPan(unsigned short zoomAndPan) { m_zoomAndPan = SVGZoomAndPan::parseFromNumber(zoomAndPan); }
diff --git a/Source/WebCore/svg/SVGViewSpec.cpp b/Source/WebCore/svg/SVGViewSpec.cpp
index 8bb0400..08ab852 100644
--- a/Source/WebCore/svg/SVGViewSpec.cpp
+++ b/Source/WebCore/svg/SVGViewSpec.cpp
@@ -23,6 +23,8 @@
#include "SVGViewSpec.h"
#include "Document.h"
+#include "SVGAnimatedTransformList.h"
+#include "SVGFitToViewBox.h"
#include "SVGNames.h"
#include "SVGParserUtilities.h"
#include "SVGSVGElement.h"
@@ -30,36 +32,105 @@
namespace WebCore {
-// Animated property definitions
-DEFINE_ANIMATED_RECT(SVGViewSpec, SVGNames::viewBoxAttr, ViewBox, viewBox)
-DEFINE_ANIMATED_PRESERVEASPECTRATIO(SVGViewSpec, SVGNames::preserveAspectRatioAttr, PreserveAspectRatio, preserveAspectRatio)
+// Define custom animated property 'viewBox'.
+const SVGPropertyInfo* SVGViewSpec::viewBoxPropertyInfo()
+{
+ static const SVGPropertyInfo* s_propertyInfo = 0;
+ if (!s_propertyInfo) {
+ s_propertyInfo = new SVGPropertyInfo(AnimatedRect,
+ PropertyIsReadOnly,
+ SVGNames::viewBoxAttr,
+ viewBoxIdentifier(),
+ 0,
+ &SVGViewSpec::lookupOrCreateViewBoxWrapper);
+ }
+ return s_propertyInfo;
+}
-BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGViewSpec)
- REGISTER_LOCAL_ANIMATED_PROPERTY(viewBox)
- REGISTER_LOCAL_ANIMATED_PROPERTY(preserveAspectRatio)
-END_REGISTER_ANIMATED_PROPERTIES
+// Define custom animated property 'preserveAspectRatio'.
+const SVGPropertyInfo* SVGViewSpec::preserveAspectRatioPropertyInfo()
+{
+ static const SVGPropertyInfo* s_propertyInfo = 0;
+ if (!s_propertyInfo) {
+ s_propertyInfo = new SVGPropertyInfo(AnimatedPreserveAspectRatio,
+ PropertyIsReadOnly,
+ SVGNames::preserveAspectRatioAttr,
+ preserveAspectRatioIdentifier(),
+ 0,
+ &SVGViewSpec::lookupOrCreatePreserveAspectRatioWrapper);
+ }
+ return s_propertyInfo;
+}
+
+
+// Define custom non-animated property 'transform'.
+const SVGPropertyInfo* SVGViewSpec::transformPropertyInfo()
+{
+ static const SVGPropertyInfo* s_propertyInfo = 0;
+ if (!s_propertyInfo) {
+ s_propertyInfo = new SVGPropertyInfo(AnimatedTransformList,
+ PropertyIsReadOnly,
+ SVGNames::transformAttr,
+ transformIdentifier(),
+ 0,
+ &SVGViewSpec::lookupOrCreateTransformWrapper);
+ }
+ return s_propertyInfo;
+}
SVGViewSpec::SVGViewSpec(SVGElement* contextElement)
: m_contextElement(contextElement)
, m_zoomAndPan(SVGZoomAndPanMagnify)
{
ASSERT(m_contextElement);
- registerAnimatedPropertiesForSVGViewSpec();
+}
+
+const AtomicString& SVGViewSpec::viewBoxIdentifier()
+{
+ DEFINE_STATIC_LOCAL(AtomicString, s_identifier, ("SVGViewSpecViewBoxAttribute"));
+ return s_identifier;
+}
+
+const AtomicString& SVGViewSpec::preserveAspectRatioIdentifier()
+{
+ DEFINE_STATIC_LOCAL(AtomicString, s_identifier, ("SVGViewSpecPreserveAspectRatioAttribute"));
+ return s_identifier;
+}
+
+const AtomicString& SVGViewSpec::transformIdentifier()
+{
+ DEFINE_STATIC_LOCAL(AtomicString, s_identifier, ("SVGViewSpecTransformAttribute"));
+ return s_identifier;
+}
+
+void SVGViewSpec::setZoomAndPan(unsigned short, ExceptionCode& ec)
+{
+ // SVGViewSpec and all of its content is read-only.
+ ec = NO_MODIFICATION_ALLOWED_ERR;
}
void SVGViewSpec::setTransformString(const String& transform)
{
- m_transform.parse(transform);
+ if (!m_contextElement)
+ return;
+
+ SVGTransformList newList;
+ newList.parse(transform);
+
+ if (SVGAnimatedProperty* wrapper = SVGAnimatedProperty::lookupWrapper<SVGElement, SVGAnimatedTransformList>(m_contextElement, transformPropertyInfo()))
+ static_cast<SVGAnimatedTransformList*>(wrapper)->detachListWrappers(newList.size());
+
+ m_transform = newList;
}
-void SVGViewSpec::setViewBoxString(const String& viewBoxStr)
+String SVGViewSpec::transformString() const
{
- FloatRect viewBox;
- const UChar* c = viewBoxStr.characters();
- const UChar* end = c + viewBoxStr.length();
- if (!parseViewBox(m_contextElement->document(), c, end, viewBox, false))
- return;
- setViewBoxBaseValue(viewBox);
+ return SVGPropertyTraits<SVGTransformList>::toString(m_transform);
+}
+
+String SVGViewSpec::viewBoxString() const
+{
+ return SVGPropertyTraits<FloatRect>::toString(viewBoxBaseValue());
}
void SVGViewSpec::setPreserveAspectRatioString(const String& preserve)
@@ -69,16 +140,54 @@
setPreserveAspectRatioBaseValue(preserveAspectRatio);
}
-void SVGViewSpec::setViewTargetString(const String& viewTargetString)
+String SVGViewSpec::preserveAspectRatioString() const
{
- m_viewTargetString = viewTargetString;
+ return SVGPropertyTraits<SVGPreserveAspectRatio>::toString(preserveAspectRatioBaseValue());
}
SVGElement* SVGViewSpec::viewTarget() const
{
+ if (!m_contextElement)
+ return 0;
return static_cast<SVGElement*>(m_contextElement->treeScope()->getElementById(m_viewTargetString));
}
+SVGTransformListPropertyTearOff* SVGViewSpec::transform()
+{
+ // Return the animVal here, as its readonly by default - which is exactly what we want here.
+ return static_cast<SVGTransformListPropertyTearOff*>(static_pointer_cast<SVGAnimatedTransformList>(lookupOrCreateTransformWrapper(this))->animVal());
+}
+
+PassRefPtr<SVGAnimatedProperty> SVGViewSpec::lookupOrCreateViewBoxWrapper(void* maskedOwnerType)
+{
+ ASSERT(maskedOwnerType);
+ SVGViewSpec* ownerType = static_cast<SVGViewSpec*>(maskedOwnerType);
+ return SVGAnimatedProperty::lookupOrCreateWrapper<SVGElement, SVGAnimatedRect, FloatRect>(ownerType->contextElement(), viewBoxPropertyInfo(), ownerType->m_viewBox);
+}
+
+PassRefPtr<SVGAnimatedProperty> SVGViewSpec::lookupOrCreatePreserveAspectRatioWrapper(void* maskedOwnerType)
+{
+ ASSERT(maskedOwnerType);
+ SVGViewSpec* ownerType = static_cast<SVGViewSpec*>(maskedOwnerType);
+ return SVGAnimatedProperty::lookupOrCreateWrapper<SVGElement, SVGAnimatedPreserveAspectRatio, SVGPreserveAspectRatio>(ownerType->contextElement(), preserveAspectRatioPropertyInfo(), ownerType->m_preserveAspectRatio);
+}
+
+PassRefPtr<SVGAnimatedProperty> SVGViewSpec::lookupOrCreateTransformWrapper(void* maskedOwnerType)
+{
+ ASSERT(maskedOwnerType);
+ SVGViewSpec* ownerType = static_cast<SVGViewSpec*>(maskedOwnerType);
+ return SVGAnimatedProperty::lookupOrCreateWrapper<SVGElement, SVGAnimatedTransformList, SVGTransformList>(ownerType->contextElement(), transformPropertyInfo(), ownerType->m_transform);
+}
+
+void SVGViewSpec::reset()
+{
+ m_zoomAndPan = SVGZoomAndPanMagnify;
+ m_transform.clear();
+ m_viewBox = FloatRect();
+ m_preserveAspectRatio = SVGPreserveAspectRatio();
+ m_viewTargetString = emptyString();
+}
+
static const UChar svgViewSpec[] = {'s', 'v', 'g', 'V', 'i', 'e', 'w'};
static const UChar viewBoxSpec[] = {'v', 'i', 'e', 'w', 'B', 'o', 'x'};
static const UChar preserveAspectRatioSpec[] = {'p', 'r', 'e', 's', 'e', 'r', 'v', 'e', 'A', 's', 'p', 'e', 'c', 't', 'R', 'a', 't', 'i', 'o'};
@@ -91,7 +200,7 @@
const UChar* currViewSpec = viewSpec.characters();
const UChar* end = currViewSpec + viewSpec.length();
- if (currViewSpec >= end)
+ if (currViewSpec >= end || !m_contextElement)
return false;
if (!skipString(currViewSpec, end, svgViewSpec, WTF_ARRAY_LENGTH(svgViewSpec)))
@@ -108,7 +217,7 @@
return false;
currViewSpec++;
FloatRect viewBox;
- if (!parseViewBox(m_contextElement->document(), currViewSpec, end, viewBox, false))
+ if (!SVGFitToViewBox::parseViewBox(m_contextElement->document(), currViewSpec, end, viewBox, false))
return false;
setViewBoxBaseValue(viewBox);
if (currViewSpec >= end || *currViewSpec != ')')
diff --git a/Source/WebCore/svg/SVGViewSpec.h b/Source/WebCore/svg/SVGViewSpec.h
index 1e4c271..94456db 100644
--- a/Source/WebCore/svg/SVGViewSpec.h
+++ b/Source/WebCore/svg/SVGViewSpec.h
@@ -30,42 +30,91 @@
namespace WebCore {
class SVGElement;
+class SVGTransformListPropertyTearOff;
-class SVGViewSpec : public SVGZoomAndPan,
- public SVGFitToViewBox {
- WTF_MAKE_NONCOPYABLE(SVGViewSpec);
+class SVGViewSpec : public RefCounted<SVGViewSpec>
+ , public SVGZoomAndPan
+ , public SVGFitToViewBox {
public:
- SVGViewSpec(SVGElement*);
+ virtual ~SVGViewSpec() { }
+
+ using RefCounted<SVGViewSpec>::ref;
+ using RefCounted<SVGViewSpec>::deref;
+
+ static PassRefPtr<SVGViewSpec> create(SVGElement* contextElement)
+ {
+ return adoptRef(new SVGViewSpec(contextElement));
+ }
bool parseViewSpec(const String&);
+ void reset();
- void setTransformString(const String&);
- SVGTransformList transform() const { return m_transform; }
- SVGTransformList transformBaseValue() const { return m_transform; }
-
- void setViewBoxString(const String&);
+ SVGElement* viewTarget() const;
+ String viewBoxString() const;
void setPreserveAspectRatioString(const String&);
+ String preserveAspectRatioString() const;
- void setViewTargetString(const String&);
+ void setTransformString(const String&);
+ String transformString() const;
+
+ void setViewTargetString(const String& string) { m_viewTargetString = string; }
String viewTargetString() const { return m_viewTargetString; }
- SVGElement* viewTarget() const;
SVGZoomAndPanType zoomAndPan() const { return m_zoomAndPan; }
+ void setZoomAndPan(unsigned short zoomAndPan) { setZoomAndPanBaseValue(zoomAndPan); }
void setZoomAndPan(unsigned short, ExceptionCode&);
void setZoomAndPanBaseValue(unsigned short zoomAndPan) { m_zoomAndPan = SVGZoomAndPan::parseFromNumber(zoomAndPan); }
-private:
- SVGElement* m_contextElement;
+ SVGElement* contextElement() const { return m_contextElement; }
+ void resetContextElement() { m_contextElement = 0; }
- BEGIN_DECLARE_ANIMATED_PROPERTIES(SVGViewSpec)
- DECLARE_ANIMATED_RECT(ViewBox, viewBox)
- DECLARE_ANIMATED_PRESERVEASPECTRATIO(PreserveAspectRatio, preserveAspectRatio)
- END_DECLARE_ANIMATED_PROPERTIES
+ // Custom non-animated 'transform' property.
+ SVGTransformListPropertyTearOff* transform();
+ SVGTransformList transformBaseValue() const { return m_transform; }
+
+ // Custom animated 'viewBox' property.
+ PassRefPtr<SVGAnimatedRect> viewBoxAnimated()
+ {
+ return static_pointer_cast<SVGAnimatedRect>(lookupOrCreateViewBoxWrapper(this));
+ }
+
+ FloatRect& viewBox() { return m_viewBox; }
+ FloatRect viewBoxBaseValue() const { return m_viewBox; }
+ void setViewBoxBaseValue(const FloatRect& viewBox) { m_viewBox = viewBox; }
+
+ // Custom animated 'preserveAspectRatio' property.
+ PassRefPtr<SVGAnimatedPreserveAspectRatio> preserveAspectRatioAnimated()
+ {
+ return static_pointer_cast<SVGAnimatedPreserveAspectRatio>(lookupOrCreatePreserveAspectRatioWrapper(this));
+ }
+
+ SVGPreserveAspectRatio& preserveAspectRatio() { return m_preserveAspectRatio; }
+ SVGPreserveAspectRatio preserveAspectRatioBaseValue() const { return m_preserveAspectRatio; }
+ void setPreserveAspectRatioBaseValue(const SVGPreserveAspectRatio& preserveAspectRatio) { m_preserveAspectRatio = preserveAspectRatio; }
+
+private:
+ SVGViewSpec(SVGElement*);
+
+ static const SVGPropertyInfo* transformPropertyInfo();
+ static const SVGPropertyInfo* viewBoxPropertyInfo();
+ static const SVGPropertyInfo* preserveAspectRatioPropertyInfo();
+
+ static const AtomicString& transformIdentifier();
+ static const AtomicString& viewBoxIdentifier();
+ static const AtomicString& preserveAspectRatioIdentifier();
+
+ static PassRefPtr<SVGAnimatedProperty> lookupOrCreateTransformWrapper(void* contextElement);
+ static PassRefPtr<SVGAnimatedProperty> lookupOrCreateViewBoxWrapper(void* contextElement);
+ static PassRefPtr<SVGAnimatedProperty> lookupOrCreatePreserveAspectRatioWrapper(void* contextElement);
+
+ SVGElement* m_contextElement;
+ SVGZoomAndPanType m_zoomAndPan;
SVGTransformList m_transform;
+ FloatRect m_viewBox;
+ SVGPreserveAspectRatio m_preserveAspectRatio;
String m_viewTargetString;
- SVGZoomAndPanType m_zoomAndPan;
};
} // namespace WebCore
diff --git a/Source/WebCore/svg/SVGViewSpec.idl b/Source/WebCore/svg/SVGViewSpec.idl
index e4ba46b..ec545d1 100644
--- a/Source/WebCore/svg/SVGViewSpec.idl
+++ b/Source/WebCore/svg/SVGViewSpec.idl
@@ -25,16 +25,26 @@
module svg {
+ // SVGViewSpec intentionally doesn't inherit from SVGZoomAndPan & SVGFitToViewBox on the IDLs.
+ // It would require that any of those classes would be RefCounted, and we want to avoid that.
interface [
- Conditional=SVG
- ] SVGViewSpec : SVGZoomAndPan, SVGFitToViewBox
- {
+ Conditional=SVG,
+ JSGenerateToJSObject
+ ] SVGViewSpec {
readonly attribute SVGTransformList transform;
- readonly attribute SVGElement viewTarget;
- readonly attribute DOMString viewBoxString;
- readonly attribute DOMString preserveAspectRatioString;
- readonly attribute DOMString transformString;
- readonly attribute DOMString viewTargetString;
+ readonly attribute SVGElement viewTarget;
+ readonly attribute DOMString viewBoxString;
+ readonly attribute DOMString preserveAspectRatioString;
+ readonly attribute DOMString transformString;
+ readonly attribute DOMString viewTargetString;
+
+ // SVGZoomAndPan
+ attribute unsigned short zoomAndPan
+ setter raises(DOMException);
+
+ // SVGFitToViewBox
+ readonly attribute SVGAnimatedRect viewBox;
+ readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
};
}
diff --git a/Source/WebCore/svg/properties/SVGAnimatedProperty.h b/Source/WebCore/svg/properties/SVGAnimatedProperty.h
index c64bac5..6dfdac6 100644
--- a/Source/WebCore/svg/properties/SVGAnimatedProperty.h
+++ b/Source/WebCore/svg/properties/SVGAnimatedProperty.h
@@ -36,6 +36,8 @@
const QualifiedName& attributeName() const { return m_attributeName; }
AnimatedPropertyType animatedPropertyType() const { return m_animatedPropertyType; }
bool isAnimating() const { return m_isAnimating; }
+ bool isReadOnly() const { return m_isReadOnly; }
+ void setIsReadOnly() { m_isReadOnly = true; }
void commitChange()
{
@@ -66,66 +68,33 @@
ASSERT(!m_isAnimating);
}
- // lookupOrCreateWrapper & helper methods.
- template<typename TearOffType, typename PropertyType, bool isDerivedFromSVGElement>
- struct LookupOrCreateHelper;
-
- template<typename TearOffType, typename PropertyType>
- struct LookupOrCreateHelper<TearOffType, PropertyType, false> {
- static PassRefPtr<TearOffType> lookupOrCreateWrapper(void*, const SVGPropertyInfo*, PropertyType&)
- {
- ASSERT_NOT_REACHED();
- return PassRefPtr<TearOffType>();
- }
- };
-
- template<typename TearOffType, typename PropertyType>
- struct LookupOrCreateHelper<TearOffType, PropertyType, true> {
- static PassRefPtr<TearOffType> lookupOrCreateWrapper(SVGElement* element, const SVGPropertyInfo* info, PropertyType& property)
- {
- ASSERT(info);
- SVGAnimatedPropertyDescription key(element, info->propertyIdentifier);
- RefPtr<SVGAnimatedProperty> wrapper = animatedPropertyCache()->get(key);
- if (!wrapper) {
- wrapper = TearOffType::create(element, info->attributeName, info->animatedPropertyType, property);
- animatedPropertyCache()->set(key, wrapper.get());
- }
- return static_pointer_cast<TearOffType>(wrapper);
- }
- };
-
- template<typename OwnerType, typename TearOffType, typename PropertyType, bool isDerivedFromSVGElement>
+ template<typename OwnerType, typename TearOffType, typename PropertyType>
static PassRefPtr<TearOffType> lookupOrCreateWrapper(OwnerType* element, const SVGPropertyInfo* info, PropertyType& property)
{
- return LookupOrCreateHelper<TearOffType, PropertyType, isDerivedFromSVGElement>::lookupOrCreateWrapper(element, info, property);
+ ASSERT(info);
+ SVGAnimatedPropertyDescription key(element, info->propertyIdentifier);
+ RefPtr<SVGAnimatedProperty> wrapper = animatedPropertyCache()->get(key);
+ if (!wrapper) {
+ wrapper = TearOffType::create(element, info->attributeName, info->animatedPropertyType, property);
+ if (info->animatedPropertyState == PropertyIsReadOnly)
+ wrapper->setIsReadOnly();
+ animatedPropertyCache()->set(key, wrapper.get());
+ }
+ return static_pointer_cast<TearOffType>(wrapper);
}
- // lookupWrapper & helper methods.
- template<typename TearOffType, bool isDerivedFromSVGElement>
- struct LookupHelper;
+ template<typename OwnerType, typename TearOffType>
+ static TearOffType* lookupWrapper(OwnerType* element, const SVGPropertyInfo* info)
+ {
+ ASSERT(info);
+ SVGAnimatedPropertyDescription key(element, info->propertyIdentifier);
+ return static_cast<TearOffType*>(animatedPropertyCache()->get(key));
+ }
- template<typename TearOffType>
- struct LookupHelper<TearOffType, false> {
- static TearOffType* lookupWrapper(const void*, const SVGPropertyInfo*)
- {
- return 0;
- }
- };
-
- template<typename TearOffType>
- struct LookupHelper<TearOffType, true> {
- static TearOffType* lookupWrapper(const SVGElement* element, const SVGPropertyInfo* info)
- {
- ASSERT(info);
- SVGAnimatedPropertyDescription key(const_cast<SVGElement*>(element), info->propertyIdentifier);
- return static_cast<TearOffType*>(animatedPropertyCache()->get(key));
- }
- };
-
- template<typename OwnerType, typename TearOffType, bool isDerivedFromSVGElement>
+ template<typename OwnerType, typename TearOffType>
static TearOffType* lookupWrapper(const OwnerType* element, const SVGPropertyInfo* info)
{
- return LookupHelper<TearOffType, isDerivedFromSVGElement>::lookupWrapper(element, info);
+ return lookupWrapper<OwnerType, TearOffType>(const_cast<OwnerType*>(element), info);
}
protected:
@@ -134,6 +103,7 @@
, m_attributeName(attributeName)
, m_animatedPropertyType(animatedPropertyType)
, m_isAnimating(false)
+ , m_isReadOnly(false)
{
}
@@ -150,6 +120,7 @@
protected:
bool m_isAnimating;
+ bool m_isReadOnly;
};
}
diff --git a/Source/WebCore/svg/properties/SVGAnimatedPropertyMacros.h b/Source/WebCore/svg/properties/SVGAnimatedPropertyMacros.h
index 2b69c13..2adb8b6 100644
--- a/Source/WebCore/svg/properties/SVGAnimatedPropertyMacros.h
+++ b/Source/WebCore/svg/properties/SVGAnimatedPropertyMacros.h
@@ -23,30 +23,13 @@
#define SVGAnimatedPropertyMacros_h
#if ENABLE(SVG)
+#include "SVGAnimatedProperty.h"
#include "SVGAttributeToPropertyMap.h"
#include "SVGPropertyTraits.h"
#include <wtf/StdLibExtras.h>
namespace WebCore {
-// IsDerivedFromSVGElement implementation
-template<typename OwnerType>
-struct IsDerivedFromSVGElement {
- static const bool value = true;
-};
-
-class SVGTests;
-template<>
-struct IsDerivedFromSVGElement<SVGTests> {
- static const bool value = false;
-};
-
-class SVGViewSpec;
-template<>
-struct IsDerivedFromSVGElement<SVGViewSpec> {
- static const bool value = false;
-};
-
// SVGSynchronizableAnimatedProperty implementation
template<typename PropertyType>
struct SVGSynchronizableAnimatedProperty {
@@ -70,6 +53,22 @@
{
}
+ void synchronize(SVGElement* ownerElement, const QualifiedName& attrName, const AtomicString& value)
+ {
+ // If the attribute already exists on the element, we change the
+ // Attribute directly to avoid a call to Element::attributeChanged
+ // that could cause the SVGElement to erroneously reset its properties.
+ // svg/dom/SVGStringList-basics.xhtml exercises this behavior.
+ ElementAttributeData* attributeData = ownerElement->ensureUpdatedAttributeData();
+ Attribute* old = attributeData->getAttributeItem(attrName);
+ if (old && value.isNull())
+ attributeData->removeAttribute(old->name(), ownerElement);
+ else if (!old && !value.isNull())
+ attributeData->addAttribute(Attribute(attrName, value), ownerElement);
+ else if (old && !value.isNull())
+ old->setValue(value);
+ }
+
PropertyType value;
bool shouldSynchronize : 1;
};
@@ -102,6 +101,7 @@
const SVGPropertyInfo* OwnerType::LowerProperty##PropertyInfo() { \
DEFINE_STATIC_LOCAL(const SVGPropertyInfo, s_propertyInfo, \
(AnimatedPropertyTypeEnum, \
+ PropertyIsReadWrite, \
DOMAttribute, \
SVGDOMAttributeIdentifier, \
&OwnerType::synchronize##UpperProperty, \
@@ -124,7 +124,7 @@
static const SVGPropertyInfo* LowerProperty##PropertyInfo(); \
PropertyType& LowerProperty() const \
{ \
- if (TearOffType* wrapper = SVGAnimatedProperty::lookupWrapper<UseOwnerType, TearOffType, IsDerivedFromSVGElement<UseOwnerType>::value>(this, LowerProperty##PropertyInfo())) { \
+ if (TearOffType* wrapper = SVGAnimatedProperty::lookupWrapper<UseOwnerType, TearOffType>(this, LowerProperty##PropertyInfo())) { \
if (wrapper->isAnimating()) \
return wrapper->currentAnimatedValue(); \
} \
@@ -153,14 +153,14 @@
if (!m_##LowerProperty.shouldSynchronize) \
return; \
AtomicString value(SVGPropertyTraits<PropertyType>::toString(m_##LowerProperty.value)); \
- SVGAnimatedPropertySynchronizer<IsDerivedFromSVGElement<UseOwnerType>::value>::synchronize(this, LowerProperty##PropertyInfo()->attributeName, value); \
+ m_##LowerProperty.synchronize(this, LowerProperty##PropertyInfo()->attributeName, value); \
} \
\
static PassRefPtr<SVGAnimatedProperty> lookupOrCreate##UpperProperty##Wrapper(void* maskedOwnerType) \
{ \
ASSERT(maskedOwnerType); \
UseOwnerType* ownerType = static_cast<UseOwnerType*>(maskedOwnerType); \
- return SVGAnimatedProperty::lookupOrCreateWrapper<UseOwnerType, TearOffType, PropertyType, IsDerivedFromSVGElement<UseOwnerType>::value>(ownerType, LowerProperty##PropertyInfo(), ownerType->m_##LowerProperty.value); \
+ return SVGAnimatedProperty::lookupOrCreateWrapper<UseOwnerType, TearOffType, PropertyType>(ownerType, LowerProperty##PropertyInfo(), ownerType->m_##LowerProperty.value); \
} \
\
static void synchronize##UpperProperty(void* maskedOwnerType) \
@@ -179,7 +179,7 @@
DECLARE_ANIMATED_PROPERTY(TearOffType, PropertyType, UpperProperty, LowerProperty) \
void detachAnimated##UpperProperty##ListWrappers(unsigned newListSize) \
{ \
- if (TearOffType* wrapper = SVGAnimatedProperty::lookupWrapper<UseOwnerType, TearOffType, IsDerivedFromSVGElement<UseOwnerType>::value>(this, LowerProperty##PropertyInfo())) \
+ if (TearOffType* wrapper = SVGAnimatedProperty::lookupWrapper<UseOwnerType, TearOffType>(this, LowerProperty##PropertyInfo())) \
wrapper->detachListWrappers(newListSize); \
}
diff --git a/Source/WebCore/svg/properties/SVGAnimatedPropertySynchronizer.h b/Source/WebCore/svg/properties/SVGAnimatedPropertySynchronizer.h
deleted file mode 100644
index 887bc18..0000000
--- a/Source/WebCore/svg/properties/SVGAnimatedPropertySynchronizer.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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.
- */
-
-#ifndef SVGAnimatedPropertySynchronizer_h
-#define SVGAnimatedPropertySynchronizer_h
-
-#if ENABLE(SVG)
-#include "SVGElement.h"
-
-namespace WebCore {
-
-// Helper template used for synchronizing SVG <-> XML properties
-template<bool isDerivedFromSVGElement>
-struct SVGAnimatedPropertySynchronizer;
-
-template<>
-struct SVGAnimatedPropertySynchronizer<true> {
- static void synchronize(SVGElement* ownerElement, const QualifiedName& attrName, const AtomicString& value)
- {
- // If the attribute already exists on the element, we change the
- // Attribute directly to avoid a call to Element::attributeChanged
- // that could cause the SVGElement to erroneously reset its properties.
- // svg/dom/SVGStringList-basics.xhtml exercises this behavior.
- ElementAttributeData* attributeData = ownerElement->ensureUpdatedAttributeData();
- Attribute* old = attributeData->getAttributeItem(attrName);
- if (old && value.isNull())
- attributeData->removeAttribute(old->name(), ownerElement);
- else if (!old && !value.isNull())
- attributeData->addAttribute(Attribute(attrName, value), ownerElement);
- else if (old && !value.isNull())
- old->setValue(value);
- }
-};
-
-template<>
-struct SVGAnimatedPropertySynchronizer<false> {
- static void synchronize(void*, const QualifiedName&, const AtomicString&)
- {
- // no-op, for types not inheriting from Element, thus nothing to synchronize
- }
-};
-
-};
-
-#endif
-#endif
diff --git a/Source/WebCore/svg/properties/SVGAttributeToPropertyMap.h b/Source/WebCore/svg/properties/SVGAttributeToPropertyMap.h
index 8e4cd57..3203c4d 100644
--- a/Source/WebCore/svg/properties/SVGAttributeToPropertyMap.h
+++ b/Source/WebCore/svg/properties/SVGAttributeToPropertyMap.h
@@ -21,15 +21,13 @@
#define SVGAttributeToPropertyMap_h
#if ENABLE(SVG)
-#include "QualifiedName.h"
-#include "SVGAnimatedPropertySynchronizer.h"
+#include "SVGPropertyInfo.h"
#include <wtf/HashMap.h>
namespace WebCore {
class SVGAnimatedProperty;
class SVGElement;
-struct SVGPropertyInfo;
class SVGAttributeToPropertyMap {
public:
diff --git a/Source/WebCore/svg/properties/SVGListProperty.h b/Source/WebCore/svg/properties/SVGListProperty.h
index db3def7..aed4ad4 100644
--- a/Source/WebCore/svg/properties/SVGListProperty.h
+++ b/Source/WebCore/svg/properties/SVGListProperty.h
@@ -415,8 +415,6 @@
return newItem.release();
}
- virtual SVGPropertyRole role() const { return m_role; }
-
PropertyType& values()
{
ASSERT(m_values);
diff --git a/Source/WebCore/svg/properties/SVGListPropertyTearOff.h b/Source/WebCore/svg/properties/SVGListPropertyTearOff.h
index 415df82..c3bba4b 100644
--- a/Source/WebCore/svg/properties/SVGListPropertyTearOff.h
+++ b/Source/WebCore/svg/properties/SVGListPropertyTearOff.h
@@ -37,6 +37,7 @@
typedef SVGAnimatedListPropertyTearOff<PropertyType> AnimatedListPropertyTearOff;
typedef typename SVGAnimatedListPropertyTearOff<PropertyType>::ListWrapperCache ListWrapperCache;
+ using Base::m_role;
using Base::m_values;
using Base::m_wrappers;
@@ -115,6 +116,15 @@
{
}
+ virtual bool isReadOnly() const
+ {
+ if (m_role == AnimValRole)
+ return true;
+ if (m_animatedProperty && m_animatedProperty->isReadOnly())
+ return true;
+ return false;
+ }
+
virtual void commitChange()
{
ASSERT(m_values);
diff --git a/Source/WebCore/svg/properties/SVGPathSegListPropertyTearOff.h b/Source/WebCore/svg/properties/SVGPathSegListPropertyTearOff.h
index 3fccebf..4f41af3 100644
--- a/Source/WebCore/svg/properties/SVGPathSegListPropertyTearOff.h
+++ b/Source/WebCore/svg/properties/SVGPathSegListPropertyTearOff.h
@@ -126,6 +126,17 @@
SVGPathElement* contextElement() const;
+ using Base::m_role;
+
+ virtual bool isReadOnly() const
+ {
+ if (m_role == AnimValRole)
+ return true;
+ if (m_animatedProperty && m_animatedProperty->isReadOnly())
+ return true;
+ return false;
+ }
+
virtual void commitChange()
{
ASSERT(m_values);
diff --git a/Source/WebCore/svg/properties/SVGProperty.h b/Source/WebCore/svg/properties/SVGProperty.h
index 609e264..69394e3 100644
--- a/Source/WebCore/svg/properties/SVGProperty.h
+++ b/Source/WebCore/svg/properties/SVGProperty.h
@@ -35,7 +35,7 @@
public:
virtual ~SVGProperty() { }
- virtual SVGPropertyRole role() const = 0;
+ virtual bool isReadOnly() const = 0;
virtual void commitChange() = 0;
};
diff --git a/Source/WebCore/svg/properties/SVGPropertyInfo.h b/Source/WebCore/svg/properties/SVGPropertyInfo.h
index 5793128..c2f7334 100644
--- a/Source/WebCore/svg/properties/SVGPropertyInfo.h
+++ b/Source/WebCore/svg/properties/SVGPropertyInfo.h
@@ -28,6 +28,11 @@
class SVGAnimatedProperty;
+enum AnimatedPropertyState {
+ PropertyIsReadWrite,
+ PropertyIsReadOnly
+};
+
enum AnimatedPropertyType {
AnimatedAngle,
AnimatedBoolean,
@@ -53,10 +58,11 @@
typedef void (*SynchronizeProperty)(void*);
typedef PassRefPtr<SVGAnimatedProperty> (*LookupOrCreateWrapperForAnimatedProperty)(void*);
- SVGPropertyInfo(AnimatedPropertyType newType, const QualifiedName& newAttributeName,
+ SVGPropertyInfo(AnimatedPropertyType newType, AnimatedPropertyState newState, const QualifiedName& newAttributeName,
const AtomicString& newPropertyIdentifier, SynchronizeProperty newSynchronizeProperty,
LookupOrCreateWrapperForAnimatedProperty newLookupOrCreateWrapperForAnimatedProperty)
: animatedPropertyType(newType)
+ , animatedPropertyState(newState)
, attributeName(newAttributeName)
, propertyIdentifier(newPropertyIdentifier)
, synchronizeProperty(newSynchronizeProperty)
@@ -65,6 +71,7 @@
}
AnimatedPropertyType animatedPropertyType;
+ AnimatedPropertyState animatedPropertyState;
const QualifiedName& attributeName;
const AtomicString& propertyIdentifier;
SynchronizeProperty synchronizeProperty;
diff --git a/Source/WebCore/svg/properties/SVGPropertyTearOff.h b/Source/WebCore/svg/properties/SVGPropertyTearOff.h
index c7739ef..07dbd10 100644
--- a/Source/WebCore/svg/properties/SVGPropertyTearOff.h
+++ b/Source/WebCore/svg/properties/SVGPropertyTearOff.h
@@ -96,7 +96,14 @@
m_animatedProperty->commitChange();
}
- virtual SVGPropertyRole role() const { return m_role; }
+ virtual bool isReadOnly() const
+ {
+ if (m_role == AnimValRole)
+ return true;
+ if (m_animatedProperty && m_animatedProperty->isReadOnly())
+ return true;
+ return false;
+ }
protected:
SVGPropertyTearOff(SVGAnimatedProperty* animatedProperty, SVGPropertyRole role, PropertyType& value)
diff --git a/Source/WebCore/svg/properties/SVGStaticListPropertyTearOff.h b/Source/WebCore/svg/properties/SVGStaticListPropertyTearOff.h
index 8635378..b39aaf3 100644
--- a/Source/WebCore/svg/properties/SVGStaticListPropertyTearOff.h
+++ b/Source/WebCore/svg/properties/SVGStaticListPropertyTearOff.h
@@ -33,6 +33,7 @@
typedef typename SVGPropertyTraits<PropertyType>::ListItemType ListItemType;
typedef SVGPropertyTearOff<ListItemType> ListItemTearOff;
+ using Base::m_role;
using Base::m_values;
static PassRefPtr<SVGStaticListPropertyTearOff<PropertyType> > create(SVGElement* contextElement, PropertyType& values)
@@ -84,6 +85,11 @@
{
}
+ virtual bool isReadOnly() const
+ {
+ return m_role == AnimValRole;
+ }
+
virtual void commitChange()
{
ASSERT(m_values);
diff --git a/Source/WebKit/mac/ChangeLog b/Source/WebKit/mac/ChangeLog
index cdb03ef..ced7d88 100644
--- a/Source/WebKit/mac/ChangeLog
+++ b/Source/WebKit/mac/ChangeLog
@@ -1,3 +1,12 @@
+2012-05-29 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ SVGViewSpec DOM bindings aka SVGSVGElement.currentView is unimplemented
+ https://bugs.webkit.org/show_bug.cgi?id=15495
+
+ Reviewed by Rob Buis.
+
+ * MigrateHeaders.make: Copy DOMSVGViewSpec*.h headers.
+
2012-05-25 Jesus Sanchez-Palencia <jesus.palencia@openbossa.org>
WebKitTestRunner needs to support layoutTestController.setJavaScriptProfilingEnabled
diff --git a/Source/WebKit/mac/MigrateHeaders.make b/Source/WebKit/mac/MigrateHeaders.make
index fd6a1f5..163d3fa 100644
--- a/Source/WebKit/mac/MigrateHeaders.make
+++ b/Source/WebKit/mac/MigrateHeaders.make
@@ -463,6 +463,8 @@
$(INTERNAL_HEADERS_DIR)/DOMSVGUseElementInternal.h \
$(PRIVATE_HEADERS_DIR)/DOMSVGViewElement.h \
$(INTERNAL_HEADERS_DIR)/DOMSVGViewElementInternal.h \
+ $(PRIVATE_HEADERS_DIR)/DOMSVGViewSpec.h \
+ $(INTERNAL_HEADERS_DIR)/DOMSVGViewSpecInternal.h \
$(PRIVATE_HEADERS_DIR)/DOMSVGZoomAndPan.h \
$(PRIVATE_HEADERS_DIR)/DOMSVGZoomEvent.h \
$(INTERNAL_HEADERS_DIR)/DOMSVGZoomEventInternal.h \