diff options
Diffstat (limited to 'layout')
-rw-r--r-- | layout/base/nsLayoutUtils.h | 9 | ||||
-rw-r--r-- | layout/generic/nsAbsoluteContainingBlock.cpp | 28 | ||||
-rw-r--r-- | layout/generic/nsLineBox.h | 92 | ||||
-rw-r--r-- | layout/reftests/css-parsing/invalid-url-handling.xhtml | 22 | ||||
-rw-r--r-- | layout/reftests/w3c-css/submitted/flexbox/position-absolute-containing-block-001-ref.html | 27 | ||||
-rw-r--r-- | layout/reftests/w3c-css/submitted/flexbox/position-absolute-containing-block-001.html | 30 | ||||
-rw-r--r-- | layout/reftests/w3c-css/submitted/flexbox/position-absolute-containing-block-002-ref.html | 27 | ||||
-rw-r--r-- | layout/reftests/w3c-css/submitted/flexbox/position-absolute-containing-block-002.html | 38 | ||||
-rw-r--r-- | layout/reftests/w3c-css/submitted/flexbox/reftest.list | 4 | ||||
-rw-r--r-- | layout/style/Loader.cpp | 4 | ||||
-rw-r--r-- | layout/style/nsCSSScanner.cpp | 22 | ||||
-rw-r--r-- | layout/style/nsRuleNode.cpp | 3 | ||||
-rw-r--r-- | layout/style/test/test_csslexer.js | 3 | ||||
-rw-r--r-- | layout/svg/nsSVGMaskFrame.cpp | 3 | ||||
-rw-r--r-- | layout/svg/nsSVGUtils.cpp | 9 | ||||
-rw-r--r-- | layout/tools/reftest/reftest.jsm | 94 |
16 files changed, 282 insertions, 133 deletions
diff --git a/layout/base/nsLayoutUtils.h b/layout/base/nsLayoutUtils.h index 63253fd10..0a82dbf6a 100644 --- a/layout/base/nsLayoutUtils.h +++ b/layout/base/nsLayoutUtils.h @@ -1439,13 +1439,14 @@ public: /** * This function increases an initial intrinsic size, 'aCurrent', according * to the given 'aPercent', such that the size-increase makes up exactly - * 'aPercent' percent of the returned value. If 'aPercent' is less than - * or equal to zero the original 'aCurrent' value is returned. If 'aPercent' - * is greater than or equal to 1.0 the value nscoord_MAX is returned. + * 'aPercent' percent of the returned value. If 'aPercent' or 'aCurrent' are + * less than or equal to zero the original 'aCurrent' value is returned. + * If 'aPercent' is greater than or equal to 1.0 the value nscoord_MAX is + * returned. */ static nscoord AddPercents(nscoord aCurrent, float aPercent) { - if (aPercent > 0.0f) { + if (aPercent > 0.0f && aCurrent > 0) { return MOZ_UNLIKELY(aPercent >= 1.0f) ? nscoord_MAX : NSToCoordRound(float(aCurrent) / (1.0f - aPercent)); } diff --git a/layout/generic/nsAbsoluteContainingBlock.cpp b/layout/generic/nsAbsoluteContainingBlock.cpp index 7c48aae92..e3c847d01 100644 --- a/layout/generic/nsAbsoluteContainingBlock.cpp +++ b/layout/generic/nsAbsoluteContainingBlock.cpp @@ -409,14 +409,30 @@ OffsetToAlignedStaticPos(const ReflowInput& aKidReflowInput, ? GetOrthogonalAxis(aAbsPosCBAxis) : aAbsPosCBAxis); + const bool placeholderContainerIsContainingBlock = + aPlaceholderContainer == aKidReflowInput.mCBReflowInput->mFrame; + nsIAtom* parentType = aPlaceholderContainer->GetType(); LogicalSize alignAreaSize(pcWM); if (parentType == nsGkAtoms::flexContainerFrame) { - // The alignment container is the flex container's content box: - alignAreaSize = aPlaceholderContainer->GetLogicalSize(pcWM); - LogicalMargin pcBorderPadding = - aPlaceholderContainer->GetLogicalUsedBorderAndPadding(pcWM); - alignAreaSize -= pcBorderPadding.Size(pcWM); + // We store the frame rect in FinishAndStoreOverflow, which runs _after_ + // reflowing the absolute frames, so handle the special case of the frame + // being the actual containing block here, by getting the size from + // aAbsPosCBSize. + // + // The alignment container is the flex container's content box. + if (placeholderContainerIsContainingBlock) { + alignAreaSize = aAbsPosCBSize.ConvertTo(pcWM, aAbsPosCBWM); + // aAbsPosCBSize is the padding-box, so substract the padding to get the + // content box. + alignAreaSize -= + aPlaceholderContainer->GetLogicalUsedPadding(pcWM).Size(pcWM); + } else { + alignAreaSize = aPlaceholderContainer->GetLogicalSize(pcWM); + LogicalMargin pcBorderPadding = + aPlaceholderContainer->GetLogicalUsedBorderAndPadding(pcWM); + alignAreaSize -= pcBorderPadding.Size(pcWM); + } } else if (parentType == nsGkAtoms::gridContainerFrame) { // This abspos elem's parent is a grid container. Per CSS Grid 10.1 & 10.2: // - If the grid container *also* generates the abspos containing block (a @@ -424,7 +440,7 @@ OffsetToAlignedStaticPos(const ReflowInput& aKidReflowInput, // the alignment container, too. (And its size is aAbsPosCBSize.) // - Otherwise, we use the grid's padding box as the alignment container. // https://drafts.csswg.org/css-grid/#static-position - if (aPlaceholderContainer == aKidReflowInput.mCBReflowInput->mFrame) { + if (placeholderContainerIsContainingBlock) { // The alignment container is the grid area that we're using as the // absolute containing block. alignAreaSize = aAbsPosCBSize.ConvertTo(pcWM, aAbsPosCBWM); diff --git a/layout/generic/nsLineBox.h b/layout/generic/nsLineBox.h index 8f42b9e93..962279df6 100644 --- a/layout/generic/nsLineBox.h +++ b/layout/generic/nsLineBox.h @@ -857,29 +857,47 @@ class nsLineList_iterator { return --copy; } - // Passing by value rather than by reference and reference to const - // to keep AIX happy. - bool operator==(const iterator_self_type aOther) const + bool operator==(const iterator_self_type& aOther) const { MOZ_ASSERT(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent == aOther.mCurrent; } - bool operator!=(const iterator_self_type aOther) const + bool operator!=(const iterator_self_type& aOther) const { MOZ_ASSERT(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent != aOther.mCurrent; } - bool operator==(const iterator_self_type aOther) + bool operator==(const iterator_self_type& aOther) { MOZ_ASSERT(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent == aOther.mCurrent; } - bool operator!=(const iterator_self_type aOther) + bool operator!=(const iterator_self_type& aOther) { MOZ_ASSERT(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent != aOther.mCurrent; } - + bool operator==(iterator_self_type& aOther) const + { + MOZ_ASSERT(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent == aOther.mCurrent; + } + bool operator!=(iterator_self_type& aOther) const + { + MOZ_ASSERT(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent != aOther.mCurrent; + } + bool operator==(iterator_self_type& aOther) + { + MOZ_ASSERT(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent == aOther.mCurrent; + } + bool operator!=(iterator_self_type& aOther) + { + MOZ_ASSERT(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent != aOther.mCurrent; + } + private: link_type *mCurrent; #ifdef DEBUG @@ -992,24 +1010,42 @@ class nsLineList_reverse_iterator { } #endif /* !__MWERKS__ */ - // Passing by value rather than by reference and reference to const - // to keep AIX happy. - bool operator==(const iterator_self_type aOther) const + bool operator==(const iterator_self_type& aOther) const { NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent == aOther.mCurrent; } - bool operator!=(const iterator_self_type aOther) const + bool operator!=(const iterator_self_type& aOther) const { NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent != aOther.mCurrent; } - bool operator==(const iterator_self_type aOther) + bool operator==(const iterator_self_type& aOther) { NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent == aOther.mCurrent; } - bool operator!=(const iterator_self_type aOther) + bool operator!=(const iterator_self_type& aOther) + { + NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent != aOther.mCurrent; + } + bool operator==(iterator_self_type& aOther) const + { + NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent == aOther.mCurrent; + } + bool operator!=(iterator_self_type& aOther) const + { + NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent != aOther.mCurrent; + } + bool operator==(iterator_self_type& aOther) + { + NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent == aOther.mCurrent; + } + bool operator!=(iterator_self_type& aOther) { NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent != aOther.mCurrent; @@ -1126,24 +1162,42 @@ class nsLineList_const_iterator { return --copy; } - // Passing by value rather than by reference and reference to const - // to keep AIX happy. - bool operator==(const iterator_self_type aOther) const + bool operator==(const iterator_self_type& aOther) const { NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent == aOther.mCurrent; } - bool operator!=(const iterator_self_type aOther) const + bool operator!=(const iterator_self_type& aOther) const { NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent != aOther.mCurrent; } - bool operator==(const iterator_self_type aOther) + bool operator==(const iterator_self_type& aOther) { NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent == aOther.mCurrent; } - bool operator!=(const iterator_self_type aOther) + bool operator!=(const iterator_self_type& aOther) + { + NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent != aOther.mCurrent; + } + bool operator==(iterator_self_type& aOther) const + { + NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent == aOther.mCurrent; + } + bool operator!=(iterator_self_type& aOther) const + { + NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent != aOther.mCurrent; + } + bool operator==(iterator_self_type& aOther) + { + NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); + return mCurrent == aOther.mCurrent; + } + bool operator!=(iterator_self_type& aOther) { NS_ASSERTION(mListLink == aOther.mListLink, "comparing iterators over different lists"); return mCurrent != aOther.mCurrent; diff --git a/layout/reftests/css-parsing/invalid-url-handling.xhtml b/layout/reftests/css-parsing/invalid-url-handling.xhtml index da1709b01..e6b85a81c 100644 --- a/layout/reftests/css-parsing/invalid-url-handling.xhtml +++ b/layout/reftests/css-parsing/invalid-url-handling.xhtml @@ -22,17 +22,16 @@ #two { background-color: green; } </style> <style type="text/css"> - /* not a URI token; the unterminated string ends at end of line, so - the brace never matches */ - #three { background-color: green; } + /* not a URI token; bad-url token is consumed until the first closing ) */ #foo { background: url(foo"bar) } - #three { background-color: red; } + #three { background-color: green; } </style> <style type="text/css"> - /* not a URI token; the unterminated string ends at end of line */ + /* not a URI token; bad-url token is consumed until the first closing ) */ + #four { background-color: green; } #foo { background: url(foo"bar) } ) } - #four { background-color: green; } + #four { background-color: red; } </style> <style type="text/css"> /* not a URI token; the unterminated string ends at end of line, so @@ -68,18 +67,19 @@ #eleven { background: url([) green; } </style> <style type="text/css"> - /* not a URI token; brace matching should work only after invalid URI token */ - #twelve { background: url(}{""{)}); background-color: green; } + /* not a URI token; bad-url token is consumed until the first closing ) + so the brace immediately after it closes the declaration block */ + #twelve { background-color: green; } + #twelve { background: url(}{""{)}); background-color: red; } </style> <style type="text/css"> /* invalid URI token absorbs the [ */ #thirteen { background: url([""); background-color: green; } </style> <style type="text/css"> - /* not a URI token; the opening ( is never matched */ - #fourteen { background-color: green; } + /* not a URI token; bad-url token is consumed until the first closing ) */ #foo { background: url(() } - #fourteen { background-color: red; } + #fourteen { background-color: green; } </style> <!-- The next three tests test that invalid URI tokens absorb [ and { --> <style type="text/css"> diff --git a/layout/reftests/w3c-css/submitted/flexbox/position-absolute-containing-block-001-ref.html b/layout/reftests/w3c-css/submitted/flexbox/position-absolute-containing-block-001-ref.html new file mode 100644 index 000000000..08eec8691 --- /dev/null +++ b/layout/reftests/w3c-css/submitted/flexbox/position-absolute-containing-block-001-ref.html @@ -0,0 +1,27 @@ +<!DOCTYPE html>
+<html><head>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8"><title>CSS Test Reference</title>
+<meta charset="utf-8">
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<style>
+.parent {
+ position: fixed;
+ top: 0;
+ left: 0;
+ display: block;
+ width: 200px;
+ height: 200px;
+ background: yellow;
+}
+
+.child {
+ position: absolute;
+ left: 50px;
+ top: 50px;
+ width: 100px;
+ height: 100px;
+ background: green;
+}
+</style>
+</head><body><div class="parent"><div class="child"></div></div>
+</body></html>
\ No newline at end of file diff --git a/layout/reftests/w3c-css/submitted/flexbox/position-absolute-containing-block-001.html b/layout/reftests/w3c-css/submitted/flexbox/position-absolute-containing-block-001.html new file mode 100644 index 000000000..5f623cb84 --- /dev/null +++ b/layout/reftests/w3c-css/submitted/flexbox/position-absolute-containing-block-001.html @@ -0,0 +1,30 @@ +<!DOCTYPE html>
+<html><head>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8"><title>CSS Test: Absolutely positioned children of flex container with CSS align</title>
+<meta charset="utf-8">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1386654">
+<link rel="match" href="https://hg.mozilla.org/mozilla-central/raw-file/6538de3b6137/layout/reftests/w3c-css/submitted/flexbox/position-absolute-containing-block-001-ref.html">
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<style>
+.parent {
+ position: fixed;
+ top: 0;
+ left: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 200px;
+ height: 200px;
+ background: yellow;
+}
+
+.child {
+ position: absolute;
+ width: 100px;
+ height: 100px;
+ background: green;
+}
+</style>
+</head><body><div class="parent"><div class="child"></div></div>
+</body></html>
\ No newline at end of file diff --git a/layout/reftests/w3c-css/submitted/flexbox/position-absolute-containing-block-002-ref.html b/layout/reftests/w3c-css/submitted/flexbox/position-absolute-containing-block-002-ref.html new file mode 100644 index 000000000..df730047b --- /dev/null +++ b/layout/reftests/w3c-css/submitted/flexbox/position-absolute-containing-block-002-ref.html @@ -0,0 +1,27 @@ +<!DOCTYPE html>
+<html><head>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8"><title>CSS Test Reference</title>
+<meta charset="utf-8">
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<style>
+.parent {
+ position: fixed;
+ top: 0;
+ left: 0;
+ display: block;
+ width: 200px;
+ height: 200px;
+ background: yellow;
+}
+
+.child {
+ position: absolute;
+ left: 60px;
+ top: 60px;
+ width: 100px;
+ height: 100px;
+ background: green;
+}
+</style>
+</head><body><div class="parent"><div class="child"></div></div>
+</body></html>
\ No newline at end of file diff --git a/layout/reftests/w3c-css/submitted/flexbox/position-absolute-containing-block-002.html b/layout/reftests/w3c-css/submitted/flexbox/position-absolute-containing-block-002.html new file mode 100644 index 000000000..9e89c5ad0 --- /dev/null +++ b/layout/reftests/w3c-css/submitted/flexbox/position-absolute-containing-block-002.html @@ -0,0 +1,38 @@ +<!DOCTYPE html>
+<html><head>
+<meta http-equiv="content-type" content="text/html; charset=UTF-8"><title>CSS Test: Absolutely positioned children of flex container with CSS align</title>
+<meta charset="utf-8">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1386654">
+<link rel="match" href="https://hg.mozilla.org/mozilla-central/raw-file/6538de3b6137/layout/reftests/w3c-css/submitted/flexbox/position-absolute-containing-block-002-ref.html">
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<style>
+.parent {
+ position: fixed;
+ top: 0;
+ left: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 180px;
+ height: 180px;
+
+ /* Expand the background area to 200px, without touching the content-box,
+ which is what flex absolute children should be aligned relative to. */
+ border-top: 5px solid yellow;
+ padding-top: 15px;
+ border-left: 5px solid yellow;
+ padding-left: 15px;
+
+ background: yellow;
+}
+
+.child {
+ position: absolute;
+ width: 100px;
+ height: 100px;
+ background: green;
+}
+</style>
+</head><body><div class="parent"><div class="child"></div></div>
+</body></html>
\ No newline at end of file diff --git a/layout/reftests/w3c-css/submitted/flexbox/reftest.list b/layout/reftests/w3c-css/submitted/flexbox/reftest.list index fd8bfccc9..3df75aee6 100644 --- a/layout/reftests/w3c-css/submitted/flexbox/reftest.list +++ b/layout/reftests/w3c-css/submitted/flexbox/reftest.list @@ -211,3 +211,7 @@ fails == flexbox-min-height-auto-002b.html flexbox-min-height-auto-002-ref.html == flexbox-single-line-clamp-1.html flexbox-single-line-clamp-1-ref.html == flexbox-single-line-clamp-2.html flexbox-single-line-clamp-2-ref.html == flexbox-single-line-clamp-3.html flexbox-single-line-clamp-3-ref.html + +# Flexbox as an absolute containing block. +== position-absolute-containing-block-001.html position-absolute-containing-block-001-ref.html +== position-absolute-containing-block-002.html position-absolute-containing-block-002-ref.html diff --git a/layout/style/Loader.cpp b/layout/style/Loader.cpp index a1a0fcfd9..0ce337e29 100644 --- a/layout/style/Loader.cpp +++ b/layout/style/Loader.cpp @@ -1677,10 +1677,6 @@ Loader::LoadSheet(SheetLoadData* aLoadData, nsCOMPtr<nsIHttpChannel> httpChannel(do_QueryInterface(channel)); if (httpChannel) { - // Send a minimal Accept header for text/css - httpChannel->SetRequestHeader(NS_LITERAL_CSTRING("Accept"), - NS_LITERAL_CSTRING("text/css,*/*;q=0.1"), - false); nsCOMPtr<nsIURI> referrerURI = aLoadData->GetReferrerURI(); if (referrerURI) httpChannel->SetReferrerWithPolicy(referrerURI, diff --git a/layout/style/nsCSSScanner.cpp b/layout/style/nsCSSScanner.cpp index 771c8936b..2110be78c 100644 --- a/layout/style/nsCSSScanner.cpp +++ b/layout/style/nsCSSScanner.cpp @@ -1164,6 +1164,7 @@ nsCSSScanner::NextURL(nsCSSToken& aToken) // aToken.mIdent may be "url" at this point; clear that out aToken.mIdent.Truncate(); + bool hasString = false; int32_t ch = Peek(); // Do we have a string? if (ch == '"' || ch == '\'') { @@ -1173,7 +1174,7 @@ nsCSSScanner::NextURL(nsCSSToken& aToken) return; } MOZ_ASSERT(aToken.mType == eCSSToken_String, "unexpected token type"); - + hasString = true; } else { // Otherwise, this is the start of a non-quoted url (which may be empty). aToken.mSymbol = char16_t(0); @@ -1193,6 +1194,25 @@ nsCSSScanner::NextURL(nsCSSToken& aToken) } else { mSeenBadToken = true; aToken.mType = eCSSToken_Bad_URL; + if (!hasString) { + // Consume until before the next right parenthesis, which follows + // how <bad-url-token> is consumed in CSS Syntax 3 spec. + // Note that, we only do this when "url(" is not followed by a + // string, because in the spec, "url(" followed by a string is + // handled as a url function rather than a <url-token>, so the + // rest of content before ")" should be consumed in balance, + // which will be done by the parser. + // The closing ")" is not consumed here. It is left to the parser + // so that the parser can handle both cases. + do { + if (IsVertSpace(ch)) { + AdvanceLine(); + } else { + Advance(); + } + ch = Peek(); + } while (ch >= 0 && ch != ')'); + } } } diff --git a/layout/style/nsRuleNode.cpp b/layout/style/nsRuleNode.cpp index 6bcef02a0..08400635b 100644 --- a/layout/style/nsRuleNode.cpp +++ b/layout/style/nsRuleNode.cpp @@ -67,9 +67,6 @@ #define alloca _alloca #endif #endif -#ifdef SOLARIS -#include <alloca.h> -#endif using std::max; using std::min; diff --git a/layout/style/test/test_csslexer.js b/layout/style/test/test_csslexer.js index a71c02d8f..4ba3b9c5c 100644 --- a/layout/style/test/test_csslexer.js +++ b/layout/style/test/test_csslexer.js @@ -55,8 +55,7 @@ var LEX_TESTS = [ ["url:http://example.com"]], // In CSS Level 3, this is an ordinary URL, not a BAD_URL. ["url(http://example.com", ["url:http://example.com"]], - // See bug 1153981 to understand why this gets a SYMBOL token. - ["url(http://example.com @", ["bad_url:http://example.com", "symbol:@"]], + ["url(http://example.com @", ["bad_url:http://example.com"]], ["quo\\ting", ["ident:quoting"]], ["'bad string\n", ["bad_string:bad string", "whitespace"]], ["~=", ["includes"]], diff --git a/layout/svg/nsSVGMaskFrame.cpp b/layout/svg/nsSVGMaskFrame.cpp index b8e4b32ae..a22833d61 100644 --- a/layout/svg/nsSVGMaskFrame.cpp +++ b/layout/svg/nsSVGMaskFrame.cpp @@ -274,7 +274,8 @@ nsSVGMaskFrame::GetMaskForMaskedFrame(gfxContext* aContext, } RefPtr<DataSourceSurface> maskSurface = maskSnapshot->GetDataSurface(); DataSourceSurface::MappedSurface map; - if (!maskSurface->Map(DataSourceSurface::MapType::READ, &map)) { + if (!maskSurface || + !maskSurface->Map(DataSourceSurface::MapType::READ, &map)) { return nullptr; } diff --git a/layout/svg/nsSVGUtils.cpp b/layout/svg/nsSVGUtils.cpp index 0bded21ff..98e5f9b5f 100644 --- a/layout/svg/nsSVGUtils.cpp +++ b/layout/svg/nsSVGUtils.cpp @@ -734,9 +734,12 @@ nsSVGUtils::PaintFrameWithEffects(nsIFrame *aFrame, RefPtr<SourceSurface> maskSurface; if (maskUsage.shouldGenerateMaskLayer) { - maskSurface = - maskFrame->GetMaskForMaskedFrame(&aContext, aFrame, aTransform, - maskUsage.opacity, &maskTransform); + // Make sure we have a mask frame. + if (maskFrame) { + maskSurface = + maskFrame->GetMaskForMaskedFrame(&aContext, aFrame, aTransform, + maskUsage.opacity, &maskTransform); + } if (!maskSurface) { // Entire surface is clipped out. diff --git a/layout/tools/reftest/reftest.jsm b/layout/tools/reftest/reftest.jsm index bd9976b0f..c885150a4 100644 --- a/layout/tools/reftest/reftest.jsm +++ b/layout/tools/reftest/reftest.jsm @@ -277,29 +277,10 @@ this.OnRefTestLoad = function OnRefTestLoad(win) var prefs = Components.classes["@mozilla.org/preferences-service;1"]. getService(Components.interfaces.nsIPrefBranch); - try { - gBrowserIsRemote = prefs.getBoolPref("browser.tabs.remote.autostart"); - } catch (e) { - gBrowserIsRemote = false; - } - - try { - gB2GisMulet = prefs.getBoolPref("b2g.is_mulet"); - } catch (e) { - gB2GisMulet = false; - } - - try { - gBrowserIsIframe = prefs.getBoolPref("reftest.browser.iframe.enabled"); - } catch (e) { - gBrowserIsIframe = false; - } - - try { - gLogLevel = prefs.getCharPref("reftest.logLevel"); - } catch (e) { - gLogLevel ='info'; - } + gBrowserIsRemote = prefs.getBoolPref("browser.tabs.remote.autostart", false); + gB2GisMulet = prefs.getBoolPref("b2g.is_mulet", false); + gBrowserIsIframe = prefs.getBoolPref("reftest.browser.iframe.enabled", false); + gLogLevel = prefs.getCharPref("reftest.logLevel", "info"); if (win === undefined || win == null) { win = window; @@ -366,11 +347,7 @@ function InitAndStartRefTests() } catch (e) {} /* set the gLoadTimeout */ - try { - gLoadTimeout = prefs.getIntPref("reftest.timeout"); - } catch(e) { - gLoadTimeout = 5 * 60 * 1000; //5 minutes as per bug 479518 - } + gLoadTimeout = prefs.getIntPref("reftest.timeout", 5 * 60 * 1000); //5 minutes as per bug 479518 /* Get the logfile for android tests */ try { @@ -381,27 +358,12 @@ function InitAndStartRefTests() } } catch(e) {} - try { - gRemote = prefs.getBoolPref("reftest.remote"); - } catch(e) { - gRemote = false; - } - - try { - gIgnoreWindowSize = prefs.getBoolPref("reftest.ignoreWindowSize"); - } catch(e) { - gIgnoreWindowSize = false; - } + gRemote = prefs.getBoolPref("reftest.remote", false); + gIgnoreWindowSize = prefs.getBoolPref("reftest.ignoreWindowSize", false); /* Support for running a chunk (subset) of tests. In separate try as this is optional */ - try { - gTotalChunks = prefs.getIntPref("reftest.totalChunks"); - gThisChunk = prefs.getIntPref("reftest.thisChunk"); - } - catch(e) { - gTotalChunks = 0; - gThisChunk = 0; - } + gTotalChunks = prefs.getIntPref("reftest.totalChunks", 0); + gThisChunk = prefs.getIntPref("reftest.thisChunk", 0); try { gFocusFilterMode = prefs.getCharPref("reftest.focusFilterMode"); @@ -468,39 +430,17 @@ function StartTests() logger.error("EXCEPTION: " + e); } - try { - gNoCanvasCache = prefs.getIntPref("reftest.nocache"); - } catch(e) { - gNoCanvasCache = false; - } - - try { - gShuffle = prefs.getBoolPref("reftest.shuffle"); - } catch (e) { - gShuffle = false; - } - - try { - gRunUntilFailure = prefs.getBoolPref("reftest.runUntilFailure"); - } catch (e) { - gRunUntilFailure = false; - } + gNoCanvasCache = prefs.getIntPref("reftest.nocache", false); + gShuffle = prefs.getBoolPref("reftest.shuffle", false); + gRunUntilFailure = prefs.getBoolPref("reftest.runUntilFailure", false); // When we repeat this function is called again, so really only want to set // gRepeat once. if (gRepeat == null) { - try { - gRepeat = prefs.getIntPref("reftest.repeat"); - } catch (e) { - gRepeat = 0; - } + gRepeat = prefs.getIntPref("reftest.repeat", 0); } - try { - gRunSlowTests = prefs.getIntPref("reftest.skipslowtests"); - } catch(e) { - gRunSlowTests = false; - } + gRunSlowTests = prefs.getIntPref("reftest.skipslowtests", false); if (gShuffle) { gNoCanvasCache = true; @@ -737,11 +677,7 @@ function BuildConditionSandbox(aURL) { var prefs = CC["@mozilla.org/preferences-service;1"]. getService(CI.nsIPrefBranch); - try { - sandbox.nativeThemePref = !prefs.getBoolPref("mozilla.widget.disable-native-theme"); - } catch (e) { - sandbox.nativeThemePref = true; - } + sandbox.nativeThemePref = !prefs.getBoolPref("mozilla.widget.disable-native-theme", false); sandbox.prefs = CU.cloneInto({ getBoolPref: function(p) { return prefs.getBoolPref(p); }, |