Bug 874919 - Added a check to DoGetWidth/Height so the width/height properties of getComputedStyle now return correct values on inline SVG elements. r=bz

This commit is contained in:
Adam Casey 2013-12-11 14:13:48 -05:00
parent eb15cf3a79
commit bba057ef66
3 changed files with 64 additions and 2 deletions

View File

@ -3729,7 +3729,10 @@ nsComputedDOMStyle::DoGetHeight()
const nsStyleDisplay* displayData = StyleDisplay();
if (displayData->mDisplay == NS_STYLE_DISPLAY_INLINE &&
!(mInnerFrame->IsFrameOfType(nsIFrame::eReplaced))) {
!(mInnerFrame->IsFrameOfType(nsIFrame::eReplaced)) &&
// An outer SVG frame should behave the same as eReplaced in this case
mInnerFrame->GetType() != nsGkAtoms::svgOuterSVGFrame) {
calcHeight = false;
}
}
@ -3770,7 +3773,10 @@ nsComputedDOMStyle::DoGetWidth()
const nsStyleDisplay *displayData = StyleDisplay();
if (displayData->mDisplay == NS_STYLE_DISPLAY_INLINE &&
!(mInnerFrame->IsFrameOfType(nsIFrame::eReplaced))) {
!(mInnerFrame->IsFrameOfType(nsIFrame::eReplaced)) &&
// An outer SVG frame should behave the same as eReplaced in this case
mInnerFrame->GetType() != nsGkAtoms::svgOuterSVGFrame) {
calcWidth = false;
}
}

View File

@ -89,6 +89,7 @@ support-files = file_bug645998-1.css file_bug645998-2.css
[test_bug798567.html]
[test_bug798843_pref.html]
[test_bug829816.html]
[test_bug874919.html]
support-files = file_bug829816.css
[test_bug887741_at-rules_in_declaration_lists.html]
[test_bug892929.html]

View File

@ -0,0 +1,55 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=874919
-->
<head>
<title>Test for Bug 874919</title>
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=874919">Mozilla Bug 874919</a>
<p id="display"></p>
<div id="content" style="width: 150px">
<svg id="outer_SVG" style="display: inline; width: 100%">
<circle cx="120" cy="120" r="120" fill="blue"></circle>
<svg id="inner_SVG">
<circle id="circle" cx="120" cy="120" r="120" fill="red"></circle>
</svg>
</svg>
</div>
<pre id="test">
<script type="text/javascript">
var shouldUseComputed = ["inner_SVG"]
var shouldUseUsed = ["outer_SVG"]
shouldUseUsed.forEach(function(elemId) {
var style = window.getComputedStyle(document.getElementById(elemId));
ok(style.width.match(/^\d+px$/),
"Inline Outer SVG element's getComputedStyle.width should be used value. ");
ok(style.height.match(/^\d+px$/),
"Inline Outer SVG element's getComputedStyle.height should be used value.");
});
shouldUseComputed.forEach(function(elemId) {
var style = window.getComputedStyle(document.getElementById(elemId));
// Computed value should match either the percentage used, or "auto" in the case of the inner SVG element.
ok(style.width.match(/^\d+%$|^auto$/),
"Inline inner SVG element's getComputedStyle.width should be computed value. " + style.width);
ok(style.height.match(/^\d+%$|^auto$/),
"Inline inner SVG element's getComputedStyle.height should be computed value. " + style.height);
});
</script>
</pre>
</body>
</html>