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

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

<h3>Log Message</h3>
<pre>An SVG element without intrinsic size inherits the container size as its viewport instead of inheriting the container viewport.
https://bugs.webkit.org/show_bug.cgi?id=141725.

Patch by Said Abou-Hallawa &lt;sabouhallawa@apple.com&gt; on 2015-03-06
Reviewed by Darin Adler.

Source/WebCore:

The current viewport of the &lt;svg&gt; element should be retrieved from its
renderer if the renderer is available. If the renderer is not created yet,
this means the viewport is needed to calculate the size of the renderer.
In this case, we should return the element size if it is intrinsic size.

Test: svg/css/svg-css-different-intrinsic-sizes.html

* svg/SVGSVGElement.cpp:
(WebCore::SVGSVGElement::currentViewportSize): Change the order for
returning the viewport of the &lt;svg&gt; element. We should consider the case
of a valid renderer before considering the case of an intrinsic size.

LayoutTests:

* svg/css/svg-css-different-intrinsic-sizes-expected.html: Added.
* svg/css/svg-css-different-intrinsic-sizes.html: Added.
The intrinsic size of the &lt;svg&gt; element is overridden by CSS. The elements
inside the &lt;svg&gt; should consider the css size (which is equal to the &lt;svg&gt;
element viewport) instead of the &lt;svg&gt; element intrinsic size.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoresvgSVGSVGElementcpp">trunk/Source/WebCore/svg/SVGSVGElement.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestssvgcsssvgcssdifferentintrinsicsizesexpectedhtml">trunk/LayoutTests/svg/css/svg-css-different-intrinsic-sizes-expected.html</a></li>
<li><a href="#trunkLayoutTestssvgcsssvgcssdifferentintrinsicsizeshtml">trunk/LayoutTests/svg/css/svg-css-different-intrinsic-sizes.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (181164 => 181165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-03-06 18:14:10 UTC (rev 181164)
+++ trunk/LayoutTests/ChangeLog        2015-03-06 18:15:48 UTC (rev 181165)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2015-03-06  Said Abou-Hallawa  &lt;sabouhallawa@apple.com&gt;
+
+        An SVG element without intrinsic size inherits the container size as its viewport instead of inheriting the container viewport.
+        https://bugs.webkit.org/show_bug.cgi?id=141725.
+
+        Reviewed by Darin Adler.
+
+        * svg/css/svg-css-different-intrinsic-sizes-expected.html: Added.
+        * svg/css/svg-css-different-intrinsic-sizes.html: Added.
+        The intrinsic size of the &lt;svg&gt; element is overridden by CSS. The elements
+        inside the &lt;svg&gt; should consider the css size (which is equal to the &lt;svg&gt;
+        element viewport) instead of the &lt;svg&gt; element intrinsic size.
+
</ins><span class="cx"> 2015-03-06  Simon Fraser  &lt;simon.fraser@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Allow composited clip-path to be updated without a layer repaint
</span></span></pre></div>
<a id="trunkLayoutTestssvgcsssvgcssdifferentintrinsicsizesexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/css/svg-css-different-intrinsic-sizes-expected.html (0 => 181165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/css/svg-css-different-intrinsic-sizes-expected.html                                (rev 0)
+++ trunk/LayoutTests/svg/css/svg-css-different-intrinsic-sizes-expected.html        2015-03-06 18:15:48 UTC (rev 181165)
</span><span class="lines">@@ -0,0 +1,26 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+  &lt;style&gt;
+    div {
+      background-image: url(&quot;data:image/svg+xml, \
+      &lt;svg xmlns='http://www.w3.org/2000/svg'&gt; \
+        &lt;rect width='75' height='75' fill='yellow'/&gt; \
+        &lt;rect width='50' height='50' fill='lime'/&gt; \
+        &lt;rect width='25' height='25' fill='red'/&gt; \
+      &lt;/svg&gt;&quot;);
+      width: 75px;
+      height: 75px;
+    }
+  &lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+  &lt;div&gt;&lt;/div&gt;
+  &lt;div&gt;&lt;/div&gt;
+  &lt;div&gt;&lt;/div&gt;
+  &lt;div&gt;&lt;/div&gt;
+  &lt;div&gt;&lt;/div&gt;
+  &lt;div&gt;&lt;/div&gt;
+  &lt;div&gt;&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgcsssvgcssdifferentintrinsicsizeshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/css/svg-css-different-intrinsic-sizes.html (0 => 181165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/css/svg-css-different-intrinsic-sizes.html                                (rev 0)
+++ trunk/LayoutTests/svg/css/svg-css-different-intrinsic-sizes.html        2015-03-06 18:15:48 UTC (rev 181165)
</span><span class="lines">@@ -0,0 +1,81 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+  &lt;style&gt;
+    div {
+      background: yellow;
+      width: 75px;
+      height: 75px;
+    }
+    svg {
+      background: lime;
+    }
+    svg.intrinsic-size {
+      width: 50px;
+      height: 50px;
+    }
+    rect {
+      fill: red;
+    }
+  &lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+  &lt;div&gt;
+    &lt;svg class='intrinsic-size' width='100' height='100'&gt;
+            &lt;rect width='50%' height='50%'/&gt;
+    &lt;/svg&gt;
+  &lt;/div&gt;
+  &lt;div&gt;
+    &lt;svg width='100' height='100'&gt;
+      &lt;style&gt;
+        svg {
+          width: 50px;
+          height: 50px;
+        }
+      &lt;/style&gt;
+            &lt;rect width='50%' height='50%'/&gt;
+    &lt;/svg&gt;
+  &lt;/div&gt;
+  &lt;div&gt;
+    &lt;svg class='intrinsic-size' width='100' height='100'&gt;
+            &lt;svg viewbox='0 0 100 100'&gt;
+              &lt;rect width='50%' height='50%'/&gt;
+            &lt;/svg&gt;
+    &lt;/svg&gt;
+  &lt;/div&gt;
+  &lt;div&gt;
+    &lt;svg class='intrinsic-size' width='100' height='100'&gt;
+            &lt;svg class='intrinsic-size' viewbox='0 0 100 100'&gt;
+              &lt;rect width='50' height='50'/&gt;
+            &lt;/svg&gt;
+    &lt;/svg&gt;
+  &lt;/div&gt;
+  &lt;div&gt;
+    &lt;svg class='intrinsic-size' width='100' height='100'&gt;
+            &lt;svg class='intrinsic-size' width='50%' height='50%' viewbox='0 0 100 100'&gt;
+              &lt;rect width='100%' height='100%'/&gt;
+            &lt;/svg&gt;
+    &lt;/svg&gt;
+  &lt;/div&gt;
+  &lt;div&gt;
+    &lt;svg class='intrinsic-size' width='100' height='100'&gt;
+            &lt;svg width='50%' height='50%' viewbox='0 0 100 100'&gt;
+              &lt;rect width='100' height='100'/&gt;
+            &lt;/svg&gt;
+    &lt;/svg&gt;
+  &lt;/div&gt;
+  &lt;div&gt;
+    &lt;svg width='100' height='100'&gt;
+      &lt;style&gt;
+        svg {
+          width: 50px;
+          height: 50px;
+        }
+      &lt;/style&gt;
+            &lt;svg width='50%' height='50%' viewbox='0 0 100 100'&gt;
+              &lt;rect width='100' height='100'/&gt;
+            &lt;/svg&gt;
+    &lt;/svg&gt;
+  &lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (181164 => 181165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-03-06 18:14:10 UTC (rev 181164)
+++ trunk/Source/WebCore/ChangeLog        2015-03-06 18:15:48 UTC (rev 181165)
</span><span class="lines">@@ -1,3 +1,22 @@
</span><ins>+2015-03-06  Said Abou-Hallawa  &lt;sabouhallawa@apple.com&gt;
+
+        An SVG element without intrinsic size inherits the container size as its viewport instead of inheriting the container viewport.
+        https://bugs.webkit.org/show_bug.cgi?id=141725.
+
+        Reviewed by Darin Adler.
+
+        The current viewport of the &lt;svg&gt; element should be retrieved from its
+        renderer if the renderer is available. If the renderer is not created yet,
+        this means the viewport is needed to calculate the size of the renderer.
+        In this case, we should return the element size if it is intrinsic size.
+        
+        Test: svg/css/svg-css-different-intrinsic-sizes.html
+
+        * svg/SVGSVGElement.cpp:
+        (WebCore::SVGSVGElement::currentViewportSize): Change the order for
+        returning the viewport of the &lt;svg&gt; element. We should consider the case
+        of a valid renderer before considering the case of an intrinsic size.
+
</ins><span class="cx"> 2015-03-06  Simon Fraser  &lt;simon.fraser@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Allow composited clip-path to be updated without a layer repaint
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGSVGElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGSVGElement.cpp (181164 => 181165)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGSVGElement.cpp        2015-03-06 18:14:10 UTC (rev 181164)
+++ trunk/Source/WebCore/svg/SVGSVGElement.cpp        2015-03-06 18:15:48 UTC (rev 181165)
</span><span class="lines">@@ -526,18 +526,23 @@
</span><span class="cx"> 
</span><span class="cx"> FloatSize SVGSVGElement::currentViewportSize() const
</span><span class="cx"> {
</span><del>-    if (hasIntrinsicWidth() &amp;&amp; hasIntrinsicHeight())
-        return FloatSize(floatValueForLength(intrinsicWidth(), 0), floatValueForLength(intrinsicHeight(), 0));
</del><ins>+    FloatSize viewportSize;
</ins><span class="cx"> 
</span><del>-    if (!renderer())
</del><ins>+    if (renderer()) {
+        if (is&lt;RenderSVGRoot&gt;(*renderer())) {
+            auto&amp; root = downcast&lt;RenderSVGRoot&gt;(*renderer());
+            viewportSize = root.contentBoxRect().size() / root.style().effectiveZoom();
+        } else
+            viewportSize = downcast&lt;RenderSVGViewportContainer&gt;(*renderer()).viewport().size();
+    }
+
+    if (!viewportSize.isEmpty())
+        return viewportSize;
+
+    if (!(hasIntrinsicWidth() &amp;&amp; hasIntrinsicHeight()))
</ins><span class="cx">         return { };
</span><span class="cx"> 
</span><del>-    if (is&lt;RenderSVGRoot&gt;(*renderer())) {
-        auto&amp; root = downcast&lt;RenderSVGRoot&gt;(*renderer());
-        return root.contentBoxRect().size() / root.style().effectiveZoom();
-    }
-
-    return downcast&lt;RenderSVGViewportContainer&gt;(*renderer()).viewport().size();
</del><ins>+    return FloatSize(floatValueForLength(intrinsicWidth(), 0), floatValueForLength(intrinsicHeight(), 0));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool SVGSVGElement::hasIntrinsicWidth() const
</span></span></pre>
</div>
</div>

</body>
</html>