diff --git a/layout/generic/nsBlockFrame.cpp b/layout/generic/nsBlockFrame.cpp
index 564c26d3ae..79147695fa 100644
--- a/layout/generic/nsBlockFrame.cpp
+++ b/layout/generic/nsBlockFrame.cpp
@@ -7398,7 +7398,6 @@ nsBlockFrame::ISizeToClearPastFloats(const nsBlockReflowState& aState,
LogicalMargin computedMargin =
offsetState.ComputedLogicalMargin().ConvertTo(wm, frWM);
result.marginIStart = computedMargin.IStart(wm);
- result.marginIEnd = computedMargin.IEnd(wm);
return result;
}
diff --git a/layout/generic/nsBlockFrame.h b/layout/generic/nsBlockFrame.h
index 6e92628b35..48c3385ca3 100644
--- a/layout/generic/nsBlockFrame.h
+++ b/layout/generic/nsBlockFrame.h
@@ -320,9 +320,9 @@ public:
* care about (which need not be its current mBCoord)
*/
struct ReplacedElementISizeToClear {
- nscoord marginIStart, borderBoxISize, marginIEnd;
- nscoord MarginBoxISize() const
- { return marginIStart + borderBoxISize + marginIEnd; }
+ // Note that we care about the inline-start margin but can ignore
+ // the inline-end margin.
+ nscoord marginIStart, borderBoxISize;
};
static ReplacedElementISizeToClear
ISizeToClearPastFloats(const nsBlockReflowState& aState,
diff --git a/layout/generic/nsBlockReflowState.cpp b/layout/generic/nsBlockReflowState.cpp
index 88a1b8dad8..344e050f6d 100644
--- a/layout/generic/nsBlockReflowState.cpp
+++ b/layout/generic/nsBlockReflowState.cpp
@@ -315,13 +315,16 @@ nsBlockReflowState::ReplacedBlockFitsInAvailSpace(nsIFrame* aReplacedBlock,
nsBlockFrame::ReplacedElementISizeToClear replacedISize =
nsBlockFrame::ISizeToClearPastFloats(*this, aFloatAvailableSpace.mRect,
aReplacedBlock);
+ // The inline-start side of the replaced element should be offset by
+ // the larger of the float intrusion or the replaced element's own
+ // start margin. The inline-end side is similar, except for Web
+ // compatibility we ignore the margin.
return std::max(aFloatAvailableSpace.mRect.IStart(wm) -
mContentArea.IStart(wm),
replacedISize.marginIStart) +
replacedISize.borderBoxISize +
- std::max(mContentArea.IEnd(wm) -
- aFloatAvailableSpace.mRect.IEnd(wm),
- replacedISize.marginIEnd) <=
+ (mContentArea.IEnd(wm) -
+ aFloatAvailableSpace.mRect.IEnd(wm)) <=
mContentArea.ISize(wm);
}
diff --git a/layout/reftests/bugs/1062963-floatmanager-reflow.html b/layout/reftests/bugs/1062963-floatmanager-reflow.html
index 85cbb7dd07..1f7bcff88a 100644
--- a/layout/reftests/bugs/1062963-floatmanager-reflow.html
+++ b/layout/reftests/bugs/1062963-floatmanager-reflow.html
@@ -18,7 +18,7 @@
}
.fl, .fr { height: 20px; }
- .fl { float: left; width: 56px; }
+ .fl { float: left; width: 100px; }
.fr { float: right; width: 73px; }
.t { background: blue; height: 10px; width: 100px; border-spacing: 0; }
diff --git a/layout/reftests/bugs/427129-image.html b/layout/reftests/bugs/427129-image.html
index 46a5b08a41..5bdfadc3bb 100644
--- a/layout/reftests/bugs/427129-image.html
+++ b/layout/reftests/bugs/427129-image.html
@@ -137,6 +137,18 @@
+
+
+
+
+