[SVG2] Fix SVGSVGElement to conform with SVG2
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 24 Oct 2019 03:42:59 +0000 (03:42 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 24 Oct 2019 03:42:59 +0000 (03:42 +0000)
https://bugs.webkit.org/show_bug.cgi?id=203278

Patch by Said Abou-Hallawa <sabouhallawa@apple.com> on 2019-10-23
Reviewed by Simon Fraser.

LayoutTests/imported/w3c:

* web-platform-tests/svg/historical-expected.txt:
* web-platform-tests/svg/idlharness.window-expected.txt:
Some sub-tests are passing now with this change.

Source/WebCore:

The interface of SVGSVGElement is defined here:
    https://www.w3.org/TR/SVG2/struct.html#InterfaceSVGSVGElement

-- Delete the viewport attribute.
-- Delete the attributes contentScriptType and contentStyleType.
-- Delete pixelUnitxxx() and screenPixelxxx() functions.
-- Make the SVGElement argument to checkIntersection() and
   checkEnclosure() be non-optional.

* svg/SVGSVGElement.cpp:
(WebCore::SVGSVGElement::checkIntersection):
(WebCore::SVGSVGElement::checkEnclosure):
(WebCore::SVGSVGElement::contentScriptType const): Deleted.
(WebCore::SVGSVGElement::setContentScriptType): Deleted.
(WebCore::SVGSVGElement::contentStyleType const): Deleted.
(WebCore::SVGSVGElement::setContentStyleType): Deleted.
(WebCore::SVGSVGElement::viewport const): Deleted.
(WebCore::SVGSVGElement::pixelUnitToMillimeterX const): Deleted.
(WebCore::SVGSVGElement::pixelUnitToMillimeterY const): Deleted.
(WebCore::SVGSVGElement::screenPixelToMillimeterX const): Deleted.
(WebCore::SVGSVGElement::screenPixelToMillimeterY const): Deleted.
(WebCore::SVGSVGElement::suspendRedraw): Deleted.
(WebCore::SVGSVGElement::unsuspendRedraw): Deleted.
(WebCore::SVGSVGElement::unsuspendRedrawAll): Deleted.
(WebCore::SVGSVGElement::forceRedraw): Deleted.
* svg/SVGSVGElement.h:
* svg/SVGSVGElement.idl:

LayoutTests:

* svg/custom/immutable-properties-expected.txt:
* svg/custom/immutable-properties.html:
SVGSVGElement.viewport has to be removed.

* svg/custom/intersection-list-null-expected.txt: Removed.
* svg/custom/intersection-list-null.svg: Removed.
The specs state that the SVGElement argument to checkIntersection() and
checkEnclosure() is not optional. This test was testing the argument
optional case.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@251527 268f45cc-cd09-0410-ab3c-d52691b4dbfc

12 files changed:
LayoutTests/ChangeLog
LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/web-platform-tests/svg/historical-expected.txt
LayoutTests/imported/w3c/web-platform-tests/svg/idlharness.window-expected.txt
LayoutTests/svg/custom/immutable-properties-expected.txt
LayoutTests/svg/custom/immutable-properties.html
LayoutTests/svg/custom/intersection-list-null-expected.txt [deleted file]
LayoutTests/svg/custom/intersection-list-null.svg [deleted file]
Source/WebCore/ChangeLog
Source/WebCore/svg/SVGSVGElement.cpp
Source/WebCore/svg/SVGSVGElement.h
Source/WebCore/svg/SVGSVGElement.idl

index a52f008..0ffbc32 100644 (file)
@@ -1,3 +1,20 @@
+2019-10-23  Said Abou-Hallawa  <sabouhallawa@apple.com>
+
+        [SVG2] Fix SVGSVGElement to conform with SVG2
+        https://bugs.webkit.org/show_bug.cgi?id=203278
+
+        Reviewed by Simon Fraser.
+
+        * svg/custom/immutable-properties-expected.txt:
+        * svg/custom/immutable-properties.html:
+        SVGSVGElement.viewport has to be removed.
+
+        * svg/custom/intersection-list-null-expected.txt: Removed.
+        * svg/custom/intersection-list-null.svg: Removed.
+        The specs state that the SVGElement argument to checkIntersection() and
+        checkEnclosure() is not optional. This test was testing the argument 
+        optional case.
+
 2019-10-23  Wenson Hsieh  <wenson_hsieh@apple.com>
 
         [iOS 13] imported/mozilla/svg/text/textpath-selection.svg is flaky
index 92eec16..0826d52 100644 (file)
@@ -1,3 +1,14 @@
+2019-10-23  Said Abou-Hallawa  <sabouhallawa@apple.com>
+
+        [SVG2] Fix SVGSVGElement to conform with SVG2
+        https://bugs.webkit.org/show_bug.cgi?id=203278
+
+        Reviewed by Simon Fraser.
+
+        * web-platform-tests/svg/historical-expected.txt:
+        * web-platform-tests/svg/idlharness.window-expected.txt:
+        Some sub-tests are passing now with this change.
+
 2019-10-23  Simon Fraser  <simon.fraser@apple.com>
 
         Import the css/css-values web platform tests
index eb09a04..1b99152 100644 (file)
@@ -29,12 +29,12 @@ FAIL SVGGraphicsElement.prototype.getTransformToElement must be removed assert_f
 FAIL SVGGraphicsElement.prototype.hasExtension must be removed assert_false: expected false got true
 FAIL SVGGraphicsElement.prototype.requiredFeatures must be removed assert_false: expected false got true
 FAIL SVGSVGElement.prototype.currentView must be removed assert_false: expected false got true
-FAIL SVGSVGElement.prototype.pixelUnitToMillimeterX must be removed assert_false: expected false got true
-FAIL SVGSVGElement.prototype.pixelUnitToMillimeterY must be removed assert_false: expected false got true
-FAIL SVGSVGElement.prototype.screenPixelToMillimeterX must be removed assert_false: expected false got true
-FAIL SVGSVGElement.prototype.screenPixelToMillimeterY must be removed assert_false: expected false got true
+PASS SVGSVGElement.prototype.pixelUnitToMillimeterX must be removed 
+PASS SVGSVGElement.prototype.pixelUnitToMillimeterY must be removed 
+PASS SVGSVGElement.prototype.screenPixelToMillimeterX must be removed 
+PASS SVGSVGElement.prototype.screenPixelToMillimeterY must be removed 
 FAIL SVGSVGElement.prototype.useCurrentView must be removed assert_false: expected false got true
-FAIL SVGSVGElement.prototype.viewport must be removed assert_false: expected false got true
+PASS SVGSVGElement.prototype.viewport must be removed 
 PASS SVGViewElement.prototype.viewTarget must be removed 
 PASS SVGPathElement.prototype.getPointAtLength must be moved to SVGGeometryElement.prototype 
 PASS SVGPathElement.prototype.getTotalLength must be moved to SVGGeometryElement.prototype 
index 0905cde..c17ec4a 100644 (file)
@@ -360,8 +360,8 @@ PASS SVGSVGElement interface: attribute width
 PASS SVGSVGElement interface: attribute height 
 PASS SVGSVGElement interface: attribute currentScale 
 PASS SVGSVGElement interface: attribute currentTranslate 
-FAIL SVGSVGElement interface: operation getIntersectionList(DOMRectReadOnly, SVGElement) assert_equals: property has wrong .length expected 2 but got 1
-FAIL SVGSVGElement interface: operation getEnclosureList(DOMRectReadOnly, SVGElement) assert_equals: property has wrong .length expected 2 but got 1
+PASS SVGSVGElement interface: operation getIntersectionList(DOMRectReadOnly, SVGElement) 
+PASS SVGSVGElement interface: operation getEnclosureList(DOMRectReadOnly, SVGElement) 
 PASS SVGSVGElement interface: operation checkIntersection(SVGElement, DOMRectReadOnly) 
 PASS SVGSVGElement interface: operation checkEnclosure(SVGElement, DOMRectReadOnly) 
 PASS SVGSVGElement interface: operation deselectAll() 
index 5807972..cd338ec 100644 (file)
@@ -3,9 +3,6 @@ Tests whether immutable properties can not be modified.
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-PASS viewport.x is 0
-PASS viewport.x is 100
-PASS svgDoc.documentElement.viewport.x is 0
 PASS zoomRectScreen.x is 0
 PASS zoomRectScreen.x is 100
 PASS zoomEvent.zoomRectScreen.x is 0
index a1b2940..2475aaf 100644 (file)
@@ -11,15 +11,6 @@ description("Tests whether immutable properties can not be modified.");
 
 var svgDoc = document.implementation.createDocument("http://www.w3.org/2000/svg", "svg", null);
 
-// 'viewport' attribute is immutable (Spec: The object itself and its contents are both readonly.)
-var viewport = svgDoc.documentElement.viewport;
-
-shouldBe("viewport.x", "0");
-viewport.x = 100;
-
-shouldBe("viewport.x", "100");
-shouldBe("svgDoc.documentElement.viewport.x", "0");
-
 // Every attribute of SVGZoomEvent is immutable (Spec: The object itself and its contents are both readonly.)
 var zoomEvent = svgDoc.createEvent("SVGZoomEvents");
 
diff --git a/LayoutTests/svg/custom/intersection-list-null-expected.txt b/LayoutTests/svg/custom/intersection-list-null-expected.txt
deleted file mode 100644 (file)
index 7ef22e9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-PASS
diff --git a/LayoutTests/svg/custom/intersection-list-null.svg b/LayoutTests/svg/custom/intersection-list-null.svg
deleted file mode 100644 (file)
index 42d62cf..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg id="root" xmlns="http://www.w3.org/2000/svg" onload="runTest()">
-  <script>
-    function runTest() {
-        if (window.testRunner)
-            testRunner.dumpAsText();
-        var root = document.documentElement;
-        root.checkIntersection(null, root.createSVGRect());
-        root.checkEnclosure(null, root.createSVGRect());
-    }
-  </script>
-  <!-- This test passes if it does not crash. -->
-  <text>PASS</text>
-</svg>
index 535f97b..3ef3727 100644 (file)
@@ -1,3 +1,38 @@
+2019-10-23  Said Abou-Hallawa  <sabouhallawa@apple.com>
+
+        [SVG2] Fix SVGSVGElement to conform with SVG2
+        https://bugs.webkit.org/show_bug.cgi?id=203278
+
+        Reviewed by Simon Fraser.
+
+        The interface of SVGSVGElement is defined here:
+            https://www.w3.org/TR/SVG2/struct.html#InterfaceSVGSVGElement
+
+        -- Delete the viewport attribute.
+        -- Delete the attributes contentScriptType and contentStyleType.
+        -- Delete pixelUnitxxx() and screenPixelxxx() functions.
+        -- Make the SVGElement argument to checkIntersection() and 
+           checkEnclosure() be non-optional.
+
+        * svg/SVGSVGElement.cpp:
+        (WebCore::SVGSVGElement::checkIntersection):
+        (WebCore::SVGSVGElement::checkEnclosure):
+        (WebCore::SVGSVGElement::contentScriptType const): Deleted.
+        (WebCore::SVGSVGElement::setContentScriptType): Deleted.
+        (WebCore::SVGSVGElement::contentStyleType const): Deleted.
+        (WebCore::SVGSVGElement::setContentStyleType): Deleted.
+        (WebCore::SVGSVGElement::viewport const): Deleted.
+        (WebCore::SVGSVGElement::pixelUnitToMillimeterX const): Deleted.
+        (WebCore::SVGSVGElement::pixelUnitToMillimeterY const): Deleted.
+        (WebCore::SVGSVGElement::screenPixelToMillimeterX const): Deleted.
+        (WebCore::SVGSVGElement::screenPixelToMillimeterY const): Deleted.
+        (WebCore::SVGSVGElement::suspendRedraw): Deleted.
+        (WebCore::SVGSVGElement::unsuspendRedraw): Deleted.
+        (WebCore::SVGSVGElement::unsuspendRedrawAll): Deleted.
+        (WebCore::SVGSVGElement::forceRedraw): Deleted.
+        * svg/SVGSVGElement.h:
+        * svg/SVGSVGElement.idl:
+
 2019-10-23  Chris Dumez  <cdumez@apple.com>
 
         Unreviewed build fix after r251509.
index 7d2026e..f91a434 100644 (file)
@@ -94,58 +94,6 @@ void SVGSVGElement::didMoveToNewDocument(Document& oldDocument, Document& newDoc
     SVGGraphicsElement::didMoveToNewDocument(oldDocument, newDocument);
 }
 
-const AtomString& SVGSVGElement::contentScriptType() const
-{
-    static NeverDestroyed<AtomString> defaultScriptType { "text/ecmascript" };
-    const AtomString& type = attributeWithoutSynchronization(SVGNames::contentScriptTypeAttr);
-    return type.isNull() ? defaultScriptType.get() : type;
-}
-
-void SVGSVGElement::setContentScriptType(const AtomString& type)
-{
-    setAttributeWithoutSynchronization(SVGNames::contentScriptTypeAttr, type);
-}
-
-const AtomString& SVGSVGElement::contentStyleType() const
-{
-    static NeverDestroyed<AtomString> defaultStyleType { "text/css" };
-    const AtomString& type = attributeWithoutSynchronization(SVGNames::contentStyleTypeAttr);
-    return type.isNull() ? defaultStyleType.get() : type;
-}
-
-void SVGSVGElement::setContentStyleType(const AtomString& type)
-{
-    setAttributeWithoutSynchronization(SVGNames::contentStyleTypeAttr, type);
-}
-
-Ref<SVGRect> SVGSVGElement::viewport() const
-{
-    // FIXME: Not implemented.
-    return SVGRect::create();
-}
-
-float SVGSVGElement::pixelUnitToMillimeterX() const
-{
-    // There are 25.4 millimeters in an inch.
-    return 25.4f / cssPixelsPerInch;
-}
-
-float SVGSVGElement::pixelUnitToMillimeterY() const
-{
-    // There are 25.4 millimeters in an inch.
-    return 25.4f / cssPixelsPerInch;
-}
-
-float SVGSVGElement::screenPixelToMillimeterX() const
-{
-    return pixelUnitToMillimeterX();
-}
-
-float SVGSVGElement::screenPixelToMillimeterY() const
-{
-    return pixelUnitToMillimeterY();
-}
-
 SVGViewSpec& SVGSVGElement::currentView()
 {
     if (!m_viewSpec)
@@ -281,23 +229,6 @@ void SVGSVGElement::svgAttributeChanged(const QualifiedName& attrName)
     SVGGraphicsElement::svgAttributeChanged(attrName);
 }
 
-unsigned SVGSVGElement::suspendRedraw(unsigned)
-{
-    return 0;
-}
-
-void SVGSVGElement::unsuspendRedraw(unsigned)
-{
-}
-
-void SVGSVGElement::unsuspendRedrawAll()
-{
-}
-
-void SVGSVGElement::forceRedraw()
-{
-}
-
 Ref<NodeList> SVGSVGElement::collectIntersectionOrEnclosureList(SVGRect& rect, SVGElement* referenceElement, bool (*checkFunction)(SVGElement&, SVGRect&))
 {
     Vector<Ref<Element>> elements;
@@ -330,20 +261,16 @@ Ref<NodeList> SVGSVGElement::getEnclosureList(SVGRect& rect, SVGElement* referen
     return collectIntersectionOrEnclosureList(rect, referenceElement, checkEnclosureWithoutUpdatingLayout);
 }
 
-bool SVGSVGElement::checkIntersection(RefPtr<SVGElement>&& element, SVGRect& rect)
+bool SVGSVGElement::checkIntersection(Ref<SVGElement>&& element, SVGRect& rect)
 {
-    if (!element)
-        return false;
     element->document().updateLayoutIgnorePendingStylesheets();
-    return checkIntersectionWithoutUpdatingLayout(*element, rect);
+    return checkIntersectionWithoutUpdatingLayout(element, rect);
 }
 
-bool SVGSVGElement::checkEnclosure(RefPtr<SVGElement>&& element, SVGRect& rect)
+bool SVGSVGElement::checkEnclosure(Ref<SVGElement>&& element, SVGRect& rect)
 {
-    if (!element)
-        return false;
     element->document().updateLayoutIgnorePendingStylesheets();
-    return checkEnclosureWithoutUpdatingLayout(*element, rect);
+    return checkEnclosureWithoutUpdatingLayout(element, rect);
 }
 
 void SVGSVGElement::deselectAll()
index 5baa0b5..827efa6 100644 (file)
@@ -42,45 +42,20 @@ class SVGViewSpec;
 class SVGSVGElement final : public SVGGraphicsElement, public SVGFitToViewBox, public SVGZoomAndPan {
     WTF_MAKE_ISO_ALLOCATED(SVGSVGElement);
 public: // DOM
-    const AtomString& contentScriptType() const;
-    void setContentScriptType(const AtomString&);
-
-    const AtomString& contentStyleType() const;
-    void setContentStyleType(const AtomString&);
-
-    Ref<SVGRect> viewport() const;
-
-    float pixelUnitToMillimeterX() const;
-    float pixelUnitToMillimeterY() const;
-    float screenPixelToMillimeterX() const;
-    float screenPixelToMillimeterY() const;
-
-    bool useCurrentView() const { return m_useCurrentView; }
-    SVGViewSpec& currentView();
-
     float currentScale() const;
     void setCurrentScale(float);
 
     SVGPoint& currentTranslate() { return m_currentTranslate; }
     FloatPoint currentTranslateValue() const { return m_currentTranslate->value(); }
 
-    unsigned suspendRedraw(unsigned maxWaitMilliseconds);
-    void unsuspendRedraw(unsigned suspendHandleId);
-    void unsuspendRedrawAll();
-    void forceRedraw();
-
-    void pauseAnimations();
-    void unpauseAnimations();
-    bool animationsPaused() const;
-    bool hasActiveAnimation() const;
-
-    float getCurrentTime() const;
-    void setCurrentTime(float);
+    bool useCurrentView() const { return m_useCurrentView; }
+    SVGViewSpec& currentView();
 
     Ref<NodeList> getIntersectionList(SVGRect&, SVGElement* referenceElement);
     Ref<NodeList> getEnclosureList(SVGRect&, SVGElement* referenceElement);
-    static bool checkIntersection(RefPtr<SVGElement>&&, SVGRect&);
-    static bool checkEnclosure(RefPtr<SVGElement>&&, SVGRect&);
+    static bool checkIntersection(Ref<SVGElement>&&, SVGRect&);
+    static bool checkEnclosure(Ref<SVGElement>&&, SVGRect&);
+
     void deselectAll();
 
     static Ref<SVGNumber> createSVGNumber();
@@ -94,6 +69,18 @@ public: // DOM
 
     Element* getElementById(const AtomString&);
 
+    void pauseAnimations();
+    void unpauseAnimations();
+    bool animationsPaused() const;
+    bool hasActiveAnimation() const;
+    float getCurrentTime() const;
+    void setCurrentTime(float);
+    
+    unsigned suspendRedraw(unsigned) { return 0; }
+    void unsuspendRedraw(unsigned) { }
+    void unsuspendRedrawAll() { }
+    void forceRedraw() { }
+
 public:
     static Ref<SVGSVGElement> create(const QualifiedName&, Document&);
     static Ref<SVGSVGElement> create(Document&);
index d4a62e5..683414d 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
  * Copyright (C) 2004, 2005, 2010 Rob Buis <buis@kde.org>
  * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
+ * Copyright (C) 2006-2019 Apple Inc. All rights reserved.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
     JSGenerateToNativeObject,
     ExportMacro=WEBCORE_EXPORT,
 ] interface SVGSVGElement : SVGGraphicsElement {
-    readonly attribute SVGAnimatedLength x;
-    readonly attribute SVGAnimatedLength y;
-    readonly attribute SVGAnimatedLength width;
-    readonly attribute SVGAnimatedLength height;
-    attribute DOMString contentScriptType;
-    attribute DOMString contentStyleType;
-    [NewObject] readonly attribute SVGRect viewport;
-    readonly attribute unrestricted float pixelUnitToMillimeterX;
-    readonly attribute unrestricted float pixelUnitToMillimeterY;
-    readonly attribute unrestricted float screenPixelToMillimeterX;
-    readonly attribute unrestricted float screenPixelToMillimeterY;
+    [SameObject] readonly attribute SVGAnimatedLength x;
+    [SameObject] readonly attribute SVGAnimatedLength y;
+    [SameObject] readonly attribute SVGAnimatedLength width;
+    [SameObject] readonly attribute SVGAnimatedLength height;
+
+    attribute unrestricted float currentScale;
+    [SameObject] readonly attribute SVGPoint currentTranslate;
+    
     readonly attribute boolean useCurrentView;
     readonly attribute SVGViewSpec currentView;
-    attribute unrestricted float currentScale;
-    readonly attribute SVGPoint currentTranslate;
-
-    unsigned long suspendRedraw(optional unsigned long maxWaitMilliseconds = 0);
-    void unsuspendRedraw(optional unsigned long suspendHandleId = 0);
-    void unsuspendRedrawAll();
-    void forceRedraw();
-    void pauseAnimations();
-    void unpauseAnimations();
-    boolean animationsPaused();
-    unrestricted float getCurrentTime();
-    void setCurrentTime(optional unrestricted float seconds = NaN);
 
-    // FIXME: referenceElement should not be optional.
-    NodeList getIntersectionList(SVGRect rect, optional SVGElement? referenceElement = null);
-
-    // FIXME: referenceElement should not be optional.
-    NodeList getEnclosureList(SVGRect rect, optional SVGElement? referenceElement = null);
-
-    boolean checkIntersection(SVGElement? element, SVGRect rect); // element should not be nullable.
-    boolean checkEnclosure(SVGElement? element, SVGRect rect); // element should not be nullable.
+    NodeList getIntersectionList(SVGRect rect, SVGElement? referenceElement);
+    NodeList getEnclosureList(SVGRect rect, SVGElement? referenceElement);
+    boolean checkIntersection(SVGElement element, SVGRect rect);
+    boolean checkEnclosure(SVGElement element, SVGRect rect);
 
     void deselectAll();
 
     [NewObject] SVGTransform createSVGTransformFromMatrix(optional DOMMatrix2DInit matrix);
 
     Element getElementById([RequiresExistingAtomString] DOMString elementId);
+
+    // SVG animations extensions
+    // https://svgwg.org/specs/animations/#InterfaceSVGSVGElement
+    void pauseAnimations();
+    void unpauseAnimations();
+    boolean animationsPaused();
+    unrestricted float getCurrentTime();
+    void setCurrentTime(optional unrestricted float seconds = NaN);
+
+    // Deprecated SVG redrawing
+    unsigned long suspendRedraw(optional unsigned long maxWaitMilliseconds = 0);
+    void unsuspendRedraw(optional unsigned long suspendHandleId = 0);
+    void unsuspendRedrawAll();
+    void forceRedraw();
 };
 
 SVGSVGElement implements SVGFitToViewBox;