ForeignObject content is zoomed two times
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 25 Mar 2012 04:08:06 +0000 (04:08 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 25 Mar 2012 04:08:06 +0000 (04:08 +0000)
https://bugs.webkit.org/show_bug.cgi?id=76282

Patch by Florin Malita <fmalita@google.com> on 2012-03-24
Reviewed by Nikolas Zimmermann.

Source/WebCore:

Test: svg/zoom/page/zoom-foreign-content.svg

Reset the effective zoom property for FO-nested content to avoid
having the zoom factor applied multiple times (zooming is handled by
the top level SVG root element).

* css/CSSStyleSelector.cpp:
(WebCore::CSSStyleSelector::adjustRenderStyle):

LayoutTests:

* platform/chromium-linux/svg/zoom/page/zoom-foreignObject-expected.png:
* platform/chromium-linux/svg/zoom/text/zoom-foreignObject-expected.png:
* platform/chromium-win/svg/zoom/page/zoom-foreignObject-expected.txt:
* platform/chromium-win/svg/zoom/text/zoom-foreignObject-expected.txt:
Rebaseline cr-linux expectations.

* platform/chromium/test_expectations.txt:
* platform/mac/test_expectations.txt:
Updated zoom-foreignObject.svg expectations, pending rebaseline.

* svg/zoom/page/zoom-foreign-content-expected.png: Added.
* svg/zoom/page/zoom-foreign-content-expected.txt: Added.
* svg/zoom/page/zoom-foreign-content.svg: Added.

* svg/zoom/page/zoom-foreignObject.svg:
* svg/zoom/text/zoom-foreignObject.svg:
Updated test to cover SVG FO text.

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

14 files changed:
LayoutTests/ChangeLog
LayoutTests/platform/chromium-linux/svg/zoom/page/zoom-foreignObject-expected.png
LayoutTests/platform/chromium-linux/svg/zoom/text/zoom-foreignObject-expected.png
LayoutTests/platform/chromium-win/svg/zoom/page/zoom-foreignObject-expected.txt
LayoutTests/platform/chromium-win/svg/zoom/text/zoom-foreignObject-expected.txt
LayoutTests/platform/chromium/test_expectations.txt
LayoutTests/platform/mac/test_expectations.txt
LayoutTests/svg/zoom/page/zoom-foreign-content-expected.png [new file with mode: 0644]
LayoutTests/svg/zoom/page/zoom-foreign-content-expected.txt [new file with mode: 0644]
LayoutTests/svg/zoom/page/zoom-foreign-content.svg [new file with mode: 0644]
LayoutTests/svg/zoom/page/zoom-foreignObject.svg
LayoutTests/svg/zoom/text/zoom-foreignObject.svg
Source/WebCore/ChangeLog
Source/WebCore/css/CSSStyleSelector.cpp

index 353589b..d529192 100644 (file)
@@ -1,3 +1,28 @@
+2012-03-24  Florin Malita  <fmalita@google.com>
+
+        ForeignObject content is zoomed two times
+        https://bugs.webkit.org/show_bug.cgi?id=76282
+
+        Reviewed by Nikolas Zimmermann.
+
+        * platform/chromium-linux/svg/zoom/page/zoom-foreignObject-expected.png:
+        * platform/chromium-linux/svg/zoom/text/zoom-foreignObject-expected.png:
+        * platform/chromium-win/svg/zoom/page/zoom-foreignObject-expected.txt:
+        * platform/chromium-win/svg/zoom/text/zoom-foreignObject-expected.txt:
+        Rebaseline cr-linux expectations.
+
+        * platform/chromium/test_expectations.txt:
+        * platform/mac/test_expectations.txt:
+        Updated zoom-foreignObject.svg expectations, pending rebaseline.
+
+        * svg/zoom/page/zoom-foreign-content-expected.png: Added.
+        * svg/zoom/page/zoom-foreign-content-expected.txt: Added.
+        * svg/zoom/page/zoom-foreign-content.svg: Added.
+
+        * svg/zoom/page/zoom-foreignObject.svg:
+        * svg/zoom/text/zoom-foreignObject.svg:
+        Updated test to cover SVG FO text.
+
 2012-03-24  Chris Fleizach  <cfleizach@apple.com>
 
         AX: Support solution to handle invalid ax text marker
index 6538ee5..1ca424c 100644 (file)
Binary files a/LayoutTests/platform/chromium-linux/svg/zoom/page/zoom-foreignObject-expected.png and b/LayoutTests/platform/chromium-linux/svg/zoom/page/zoom-foreignObject-expected.png differ
index 16192a7..ee44d03 100644 (file)
Binary files a/LayoutTests/platform/chromium-linux/svg/zoom/text/zoom-foreignObject-expected.png and b/LayoutTests/platform/chromium-linux/svg/zoom/text/zoom-foreignObject-expected.png differ
index c592229..b34f8a6 100644 (file)
@@ -1,15 +1,33 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (13,13) size 787x587
-    RenderSVGForeignObject {foreignObject} at (10,10) size 580x380
-      RenderBlock {xhtml:div} at (0,0) size 580x20
-        RenderText {#text} at (0,0) size 74x19
-          text run at (0,0) width 74: "This is a test"
-      RenderBlock (anonymous) at (0,20) size 580x20
+  RenderSVGRoot {svg} at (0,0) size 800x600
+    RenderSVGForeignObject {foreignObject} at (0,0) size 250x200
+      RenderBlock {xhtml:div} at (0,0) size 250x20
+        RenderText {#text} at (0,0) size 75x19
+          text run at (0,0) width 75: "This is a text"
+      RenderBlock (anonymous) at (0,20) size 250x20
         RenderInline {xhtml:a} at (0,0) size 62x19 [color=#0000EE]
           RenderText {#text} at (0,0) size 62x19
             text run at (0,0) width 62: "and a link."
         RenderBR {xhtml:br} at (62,0) size 0x19
-    RenderSVGRect {rect} at (13,13) size 787x550 [stroke={[type=SOLID] [color=#008000]}] [x=10.00] [y=10.00] [width=580.00] [height=380.00]
+      RenderBlock {xhtml:div} at (0,40) size 250x20
+        RenderText {#text} at (0,0) size 53x19
+          text run at (0,0) width 53: "[HTML]"
+    RenderSVGRect {rect} at (0,0) size 361x289 [stroke={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=250.00] [height=200.00]
+    RenderSVGForeignObject {foreignObject} at (260,0) size 250x200
+      RenderSVGRoot {svg} at (260,3) size 250x200
+        RenderSVGContainer {g} at (260,3) size 250x200 [transform={m=((3.00,0.26)(0.26,3.02)) t=(0.00,0.00)}]
+          RenderSVGText {text} at (0,1) size 81x19 contains 1 chunk(s)
+            RenderSVGInlineText {#text} at (0,0) size 81x19
+              chunk 1 text run 1 at (0.00,16.00) startOffset 0 endOffset 14 width 80.06: "This is a text"
+          RenderSVGContainer {a} at (265,60) size 201x75
+            RenderSVGText {text} at (0,20) size 65x19 contains 1 chunk(s)
+              RenderSVGInlineText {#text} at (0,0) size 65x19
+                chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 11 width 64.51: "and a link."
+          RenderSVGText {text} at (0,41) size 43x19 contains 1 chunk(s)
+            RenderSVGInlineText {#text} at (0,0) size 43x19
+              chunk 1 text run 1 at (0.00,56.00) startOffset 0 endOffset 5 width 42.67: "[SVG]"
+      RenderText {#text} at (0,0) size 0x0
+    RenderSVGRect {rect} at (373,0) size 363x289 [stroke={[type=SOLID] [color=#008000]}] [x=260.00] [y=0.00] [width=250.00] [height=200.00]
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
index bfa94f9..101878e 100644 (file)
@@ -1,15 +1,33 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (9,9) size 791x591
-    RenderSVGForeignObject {foreignObject} at (10,10) size 580x380
-      RenderBlock {xhtml:div} at (0,0) size 580x20
-        RenderText {#text} at (0,0) size 74x19
-          text run at (0,0) width 74: "This is a test"
-      RenderBlock (anonymous) at (0,20) size 580x20
+  RenderSVGRoot {svg} at (0,0) size 800x600
+    RenderSVGForeignObject {foreignObject} at (0,0) size 250x200
+      RenderBlock {xhtml:div} at (0,0) size 250x20
+        RenderText {#text} at (0,0) size 75x19
+          text run at (0,0) width 75: "This is a text"
+      RenderBlock (anonymous) at (0,20) size 250x20
         RenderInline {xhtml:a} at (0,0) size 62x19 [color=#0000EE]
           RenderText {#text} at (0,0) size 62x19
             text run at (0,0) width 62: "and a link."
         RenderBR {xhtml:br} at (62,0) size 0x19
-    RenderSVGRect {rect} at (9,9) size 582x382 [stroke={[type=SOLID] [color=#008000]}] [x=10.00] [y=10.00] [width=580.00] [height=380.00]
+      RenderBlock {xhtml:div} at (0,40) size 250x20
+        RenderText {#text} at (0,0) size 53x19
+          text run at (0,0) width 53: "[HTML]"
+    RenderSVGRect {rect} at (0,0) size 251x201 [stroke={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=250.00] [height=200.00]
+    RenderSVGForeignObject {foreignObject} at (260,0) size 250x200
+      RenderSVGRoot {svg} at (260,3) size 250x200
+        RenderSVGContainer {g} at (260,3) size 250x200 [transform={m=((3.00,0.26)(0.26,3.02)) t=(0.00,0.00)}]
+          RenderSVGText {text} at (0,1) size 81x19 contains 1 chunk(s)
+            RenderSVGInlineText {#text} at (0,0) size 81x19
+              chunk 1 text run 1 at (0.00,16.00) startOffset 0 endOffset 14 width 80.06: "This is a text"
+          RenderSVGContainer {a} at (265,60) size 201x75
+            RenderSVGText {text} at (0,20) size 65x19 contains 1 chunk(s)
+              RenderSVGInlineText {#text} at (0,0) size 65x19
+                chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 11 width 64.51: "and a link."
+          RenderSVGText {text} at (0,41) size 43x19 contains 1 chunk(s)
+            RenderSVGInlineText {#text} at (0,0) size 43x19
+              chunk 1 text run 1 at (0.00,56.00) startOffset 0 endOffset 5 width 42.67: "[SVG]"
+      RenderText {#text} at (0,0) size 0x0
+    RenderSVGRect {rect} at (259,0) size 252x201 [stroke={[type=SOLID] [color=#008000]}] [x=260.00] [y=0.00] [width=250.00] [height=200.00]
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
index 66102c3..ed5ac0b 100644 (file)
@@ -1298,6 +1298,9 @@ BUGWK75968 : svg/W3C-SVG-1.1/animate-elem-40-t.svg = TEXT
 BUGWK75968 MAC : svg/text/text-text-05-t.svg = TEXT
 
 
+// Updated tests need Win & Mac rebaselining after landing 76282
+BUGWK76282 WIN MAC : svg/zoom/page/zoom-foreignObject.svg = IMAGE+TEXT IMAGE TEXT PASS
+BUGWK76282 WIN MAC : svg/zoom/text/zoom-foreignObject.svg = IMAGE+TEXT IMAGE TEXT PASS
 
 
 // Windows and Mac need rebaselining after 53378 patch.
index a31aac3..9e5ef11 100644 (file)
@@ -210,6 +210,10 @@ BUGWK69210: fast/inline/continuation-outlines-with-layers-2.html = TEXT
 BUGWK69210: fast/inline/continuation-outlines-with-layers.html = TEXT
 BUGWK69210: fast/repaint/transform-absolute-in-positioned-container.html = TEXT
 
+// Need rebaselining after 76282
+BUGWK76282 : svg/zoom/page/zoom-foreignObject.svg = IMAGE+TEXT IMAGE TEXT PASS
+BUGWK76282 : svg/zoom/text/zoom-foreignObject.svg = IMAGE+TEXT IMAGE TEXT PASS
+
 // Those tests need a text baseline after lazily allocating layers.
 // The change should only be layer removal.
 BUGWK75568 : animations/combo-transform-translate+scale.html = TEXT
diff --git a/LayoutTests/svg/zoom/page/zoom-foreign-content-expected.png b/LayoutTests/svg/zoom/page/zoom-foreign-content-expected.png
new file mode 100644 (file)
index 0000000..793eb34
Binary files /dev/null and b/LayoutTests/svg/zoom/page/zoom-foreign-content-expected.png differ
diff --git a/LayoutTests/svg/zoom/page/zoom-foreign-content-expected.txt b/LayoutTests/svg/zoom/page/zoom-foreign-content-expected.txt
new file mode 100644 (file)
index 0000000..f3e3a2e
--- /dev/null
@@ -0,0 +1,13 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderSVGRoot {svg} at (0,0) size 800x600
+    RenderSVGForeignObject {foreignObject} at (0,0) size 800x600
+      RenderSVGRoot {svg} at (0,0) size 99x99
+        RenderSVGRect {rect} at (0,0) size 99x99 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=99.00] [height=99.00]
+      RenderText {#text} at (0,0) size 0x0
+    RenderSVGForeignObject {foreignObject} at (0,0) size 800x600
+      RenderBlock {html} at (0,0) size 800x99
+        RenderBlock {div} at (0,0) size 99x99 [bgcolor=#FF0000]
+    RenderSVGRect {rect} at (0,0) size 208x208 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
+    RenderSVGHiddenContainer {defs} at (0,0) size 0x0
diff --git a/LayoutTests/svg/zoom/page/zoom-foreign-content.svg b/LayoutTests/svg/zoom/page/zoom-foreign-content.svg
new file mode 100644 (file)
index 0000000..7c754ef
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" onload="runRepaintTest()">
+    <!-- This test verifies that foreignObject content does not have the zoom factor applied twice. -->
+
+    <foreignObject width="800" height="600">
+        <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+            <rect width="99" height="99" fill="red"/>
+        </svg>
+    </foreignObject>
+
+    <foreignObject width="800" height="600">
+        <html xmlns="http://www.w3.org/1999/xhtml">
+            <div style="background-color: red; width: 99px; height: 99px;"></div>
+        </html>
+    </foreignObject>
+
+    <!-- After zooming, this rect should still be obscuring everything. -->
+    <rect width="100" height="100" fill="green"/>
+
+    <defs>
+        <script>var zoomCount = 4;</script>
+        <script xlink:href="../../../fast/repaint/resources/repaint.js"/>
+        <script xlink:href="../resources/testPageZoom.js"/>
+    </defs>
+</svg>
index 83e25b7..2c9600e 100644 (file)
@@ -2,11 +2,28 @@
 <svg xmlns="http://www.w3.org/2000/svg" onload="runRepaintTest()"
      xmlns:xlink="http://www.w3.org/1999/xlink"
      xmlns:xhtml="http://www.w3.org/1999/xhtml">
-<foreignObject x="10" y="10" width="580" height="380" transform="scale(5) skewY(5) skewX(5)">
-<xhtml:div>This is a test</xhtml:div>
-<xhtml:a href="http://www.example.com/">and a link.</xhtml:a><xhtml:br/>
+
+<!-- HTML FO text -->
+<foreignObject width="250" height="200" transform="scale(3) skewY(5) skewX(5)">
+  <xhtml:div>This is a text</xhtml:div>
+  <xhtml:a href="http://www.example.com/">and a link.</xhtml:a><xhtml:br/>
+  <xhtml:div>[HTML]</xhtml:div>
+</foreignObject>
+<rect width="250" height="200" stroke="green" fill="none" />
+
+<!-- SVG FO text -->
+<foreignObject x="260" width="250" height="200">
+  <svg xmlns="http://www.w3.org/2000/svg">
+    <g transform="scale(3) skewY(5) skewX(5)">
+      <text y="16">This is a text</text>
+      <a xlink:href="http://www.example.com/">
+        <text y="35" fill="blue" text-decoration="underline">and a link.</text>
+      </a>
+      <text y="56">[SVG]</text>
+    </g>
+  </svg>
 </foreignObject>
-<rect x="10" y="10" width="580" height="380" stroke="green" fill="none" />
+<rect x="260" width="250" height="200" stroke="green" fill="none" />
 
 <defs>
   <script>var zoomCount = 2;</script>
index cb35666..1006182 100644 (file)
@@ -2,11 +2,28 @@
 <svg xmlns="http://www.w3.org/2000/svg" onload="runRepaintTest()"
      xmlns:xlink="http://www.w3.org/1999/xlink"
      xmlns:xhtml="http://www.w3.org/1999/xhtml">
-<foreignObject x="10" y="10" width="580" height="380" transform="scale(5) skewY(5) skewX(5)">
-<xhtml:div>This is a test</xhtml:div>
-<xhtml:a href="http://www.example.com/">and a link.</xhtml:a><xhtml:br/>
+
+<!-- HTML FO text -->
+<foreignObject width="250" height="200" transform="scale(3) skewY(5) skewX(5)">
+  <xhtml:div>This is a text</xhtml:div>
+  <xhtml:a href="http://www.example.com/">and a link.</xhtml:a><xhtml:br/>
+  <xhtml:div>[HTML]</xhtml:div>
+</foreignObject>
+<rect width="250" height="200" stroke="green" fill="none" />
+
+<!-- SVG FO text -->
+<foreignObject x="260" width="250" height="200">
+  <svg xmlns="http://www.w3.org/2000/svg">
+    <g transform="scale(3) skewY(5) skewX(5)">
+      <text y="16">This is a text</text>
+      <a xlink:href="http://www.example.com/">
+        <text y="35" fill="blue" text-decoration="underline">and a link.</text>
+      </a>
+      <text y="56">[SVG]</text>
+    </g>
+  </svg>
 </foreignObject>
-<rect x="10" y="10" width="580" height="380" stroke="green" fill="none" />
+<rect x="260" width="250" height="200" stroke="green" fill="none" />
 
 <defs>
   <script>var zoomCount = 2;</script>
index 07d6f63..e45ca5c 100644 (file)
@@ -1,3 +1,19 @@
+2012-03-24  Florin Malita  <fmalita@google.com>
+
+        ForeignObject content is zoomed two times
+        https://bugs.webkit.org/show_bug.cgi?id=76282
+
+        Reviewed by Nikolas Zimmermann.
+
+        Test: svg/zoom/page/zoom-foreign-content.svg
+
+        Reset the effective zoom property for FO-nested content to avoid
+        having the zoom factor applied multiple times (zooming is handled by
+        the top level SVG root element).
+
+        * css/CSSStyleSelector.cpp:
+        (WebCore::CSSStyleSelector::adjustRenderStyle):
+
 2012-03-24  Chris Fleizach  <cfleizach@apple.com>
 
         AX: Support solution to handle invalid ax text marker
index 783f5c3..c5fb2de 100644 (file)
@@ -2076,6 +2076,11 @@ void CSSStyleSelector::adjustRenderStyle(RenderStyle* style, RenderStyle* parent
         // Only the root <svg> element in an SVG document fragment tree honors css position
         if (!(e->hasTagName(SVGNames::svgTag) && e->parentNode() && !e->parentNode()->isSVGElement()))
             style->setPosition(RenderStyle::initialPosition());
+
+        // RenderSVGRoot handles zooming for the whole SVG subtree, so foreignObject content should
+        // not be scaled again.
+        if (e->hasTagName(SVGNames::foreignObjectTag))
+            style->setEffectiveZoom(RenderStyle::initialZoom());
     }
 #endif
 }