☠☠ backed out by 3942ce38b1f6 ☠ ☠ | |
author | Mats Palmgren <mats@mozilla.com> |
Mon, 04 Dec 2017 16:25:00 +0200 | |
changeset 394990 | 436d102343668d07c92e4be00e90d2d31f89c599 |
parent 394989 | 8842dba7396bea1f1f006bd90bb3f2bb4232c5bd |
child 394991 | 83101ef21e45eeecc9410b754699949c57540be9 |
push id | 97988 |
push user | nerli@mozilla.com |
push date | Tue, 05 Dec 2017 14:08:41 +0000 |
treeherder | mozilla-inbound@ff9d1a10cb0b [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | dholbert |
bugs | 1422839 |
milestone | 59.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/layout/base/PresShell.cpp +++ b/layout/base/PresShell.cpp @@ -3622,19 +3622,37 @@ PresShell::ScrollFrameRectIntoView(nsIFr nsIFrame* container = aFrame; // Walk up the frame hierarchy scrolling the rect into view and // keeping rect relative to container do { nsIScrollableFrame* sf = do_QueryFrame(container); if (sf) { nsPoint oldPosition = sf->GetScrollPosition(); nsRect targetRect = rect; - if (container->StyleDisplay()->mOverflowClipBox == + // Inflate the scrolled rect by the container's padding in each dimension, + // unless we have 'overflow-clip-box-*: content-box' in that dimension. + auto* disp = container->StyleDisplay(); + if (disp->mOverflowClipBoxBlock == + NS_STYLE_OVERFLOW_CLIP_BOX_CONTENT_BOX || + disp->mOverflowClipBoxInline == NS_STYLE_OVERFLOW_CLIP_BOX_CONTENT_BOX) { + WritingMode wm = container->GetWritingMode(); + bool cbH = (wm.IsVertical() ? disp->mOverflowClipBoxBlock + : disp->mOverflowClipBoxInline) == + NS_STYLE_OVERFLOW_CLIP_BOX_CONTENT_BOX; + bool cbV = (wm.IsVertical() ? disp->mOverflowClipBoxInline + : disp->mOverflowClipBoxBlock) == + NS_STYLE_OVERFLOW_CLIP_BOX_CONTENT_BOX; nsMargin padding = container->GetUsedPadding(); + if (!cbH) { + padding.left = padding.right = nscoord(0); + } + if (!cbV) { + padding.top = padding.bottom = nscoord(0); + } targetRect.Inflate(padding); } ScrollToShowRect(sf, targetRect - sf->GetScrolledFrame()->GetPosition(), aVertical, aHorizontal, aFlags); nsPoint newPosition = sf->LastScrollDestination(); // If the scroll position increased, that means our content moved up, // so our rect's offset should decrease rect += oldPosition - newPosition;
--- a/layout/generic/nsFrame.cpp +++ b/layout/generic/nsFrame.cpp @@ -2431,24 +2431,44 @@ ApplyOverflowClipping(nsDisplayListBuild // is required by comboboxes which make their display text (an inline frame) // have clipping. if (!nsFrame::ShouldApplyOverflowClipping(aFrame, aDisp)) { return false; } nsRect clipRect; bool haveRadii = false; nscoord radii[8]; - if (aFrame->StyleDisplay()->mOverflowClipBox == - NS_STYLE_OVERFLOW_CLIP_BOX_PADDING_BOX) { + auto* disp = aFrame->StyleDisplay(); + if (disp->mOverflowClipBoxBlock == NS_STYLE_OVERFLOW_CLIP_BOX_PADDING_BOX && + disp->mOverflowClipBoxInline == NS_STYLE_OVERFLOW_CLIP_BOX_PADDING_BOX) { clipRect = aFrame->GetPaddingRectRelativeToSelf() + aBuilder->ToReferenceFrame(aFrame); haveRadii = aFrame->GetPaddingBoxBorderRadii(radii); } else { - clipRect = aFrame->GetContentRectRelativeToSelf() + - aBuilder->ToReferenceFrame(aFrame); + // Only deflate the padding if we clip to the content-box in that axis. + auto wm = aFrame->GetWritingMode(); + bool cbH = (wm.IsVertical() ? disp->mOverflowClipBoxBlock + : disp->mOverflowClipBoxInline) == + NS_STYLE_OVERFLOW_CLIP_BOX_CONTENT_BOX; + bool cbV = (wm.IsVertical() ? disp->mOverflowClipBoxInline + : disp->mOverflowClipBoxBlock) == + NS_STYLE_OVERFLOW_CLIP_BOX_CONTENT_BOX; + nsMargin bp = aFrame->GetUsedPadding(); + if (!cbH) { + bp.left = bp.right = nscoord(0); + } + if (!cbV) { + bp.top = bp.bottom = nscoord(0); + } + + bp += aFrame->GetUsedBorder(); + bp.ApplySkipSides(aFrame->GetSkipSides()); + nsRect rect(nsPoint(0, 0), aFrame->GetSize()); + rect.Deflate(bp); + clipRect = rect + aBuilder->ToReferenceFrame(aFrame); // XXX border-radius } aClipState.ClipContainingBlockDescendantsExtra(clipRect, haveRadii ? radii : nullptr); return true; } #ifdef DEBUG static void PaintDebugBorder(nsIFrame* aFrame, DrawTarget* aDrawTarget,
--- a/layout/generic/nsGfxScrollFrame.cpp +++ b/layout/generic/nsGfxScrollFrame.cpp @@ -570,21 +570,32 @@ nsHTMLScrollFrame::ReflowScrolledFrame(S // setting their mOverflowArea. This is wrong because every frame should // always set mOverflowArea. In fact nsPluginFrame and nsFrameFrame don't // support the 'outline' property because of this. Rather than fix the world // right now, just fix up the overflow area if necessary. Note that we don't // check HasOverflowRect() because it could be set even though the // overflow area doesn't include the frame bounds. aMetrics->UnionOverflowAreasWithDesiredBounds(); - if (MOZ_UNLIKELY(StyleDisplay()->mOverflowClipBox == + auto* disp = StyleDisplay(); + if (MOZ_UNLIKELY(disp->mOverflowClipBoxBlock == + NS_STYLE_OVERFLOW_CLIP_BOX_CONTENT_BOX || + disp->mOverflowClipBoxInline == NS_STYLE_OVERFLOW_CLIP_BOX_CONTENT_BOX)) { nsOverflowAreas childOverflow; nsLayoutUtils::UnionChildOverflow(mHelper.mScrolledFrame, childOverflow); nsRect childScrollableOverflow = childOverflow.ScrollableOverflow(); + if (disp->mOverflowClipBoxBlock == NS_STYLE_OVERFLOW_CLIP_BOX_PADDING_BOX) { + padding.BStart(wm) = nscoord(0); + padding.BEnd(wm) = nscoord(0); + } + if (disp->mOverflowClipBoxInline == NS_STYLE_OVERFLOW_CLIP_BOX_PADDING_BOX) { + padding.IStart(wm) = nscoord(0); + padding.IEnd(wm) = nscoord(0); + } childScrollableOverflow.Inflate(padding.GetPhysicalMargin(wm)); nsRect contentArea = wm.IsVertical() ? nsRect(0, 0, computedBSize, availISize) : nsRect(0, 0, availISize, computedBSize); if (!contentArea.Contains(childScrollableOverflow)) { aMetrics->mOverflowAreas.ScrollableOverflow() = childScrollableOverflow; } } @@ -3453,25 +3464,41 @@ ScrollFrameHelper::BuildDisplayList(nsDi if (disp && (disp->mWillChangeBitField & NS_STYLE_WILL_CHANGE_SCROLL)) { aBuilder->AddToWillChangeBudget(mOuter, GetScrollPositionClampingScrollPortSize()); } mScrollParentID = aBuilder->GetCurrentScrollParentId(); Maybe<nsRect> contentBoxClip; Maybe<const DisplayItemClipChain*> extraContentBoxClipForNonCaretContent; - if (MOZ_UNLIKELY(mOuter->StyleDisplay()->mOverflowClipBox == - NS_STYLE_OVERFLOW_CLIP_BOX_CONTENT_BOX)) { + if (MOZ_UNLIKELY(disp->mOverflowClipBoxBlock == + NS_STYLE_OVERFLOW_CLIP_BOX_CONTENT_BOX || + disp->mOverflowClipBoxInline == + NS_STYLE_OVERFLOW_CLIP_BOX_CONTENT_BOX)) { + WritingMode wm = mScrolledFrame->GetWritingMode(); + bool cbH = (wm.IsVertical() ? disp->mOverflowClipBoxBlock + : disp->mOverflowClipBoxInline) == + NS_STYLE_OVERFLOW_CLIP_BOX_CONTENT_BOX; + bool cbV = (wm.IsVertical() ? disp->mOverflowClipBoxInline + : disp->mOverflowClipBoxBlock) == + NS_STYLE_OVERFLOW_CLIP_BOX_CONTENT_BOX; // We only clip if there is *scrollable* overflow, to avoid clipping // *visual* overflow unnecessarily. nsRect clipRect = mScrollPort + aBuilder->ToReferenceFrame(mOuter); nsRect so = mScrolledFrame->GetScrollableOverflowRect(); - if (clipRect.width != so.width || clipRect.height != so.height || - so.x < 0 || so.y < 0) { - clipRect.Deflate(mOuter->GetUsedPadding()); + if ((cbH && (clipRect.width != so.width || so.x < 0)) || + (cbV && (clipRect.height != so.height || so.y < 0))) { + nsMargin padding = mOuter->GetUsedPadding(); + if (!cbH) { + padding.left = padding.right = nscoord(0); + } + if (!cbV) { + padding.top = padding.bottom = nscoord(0); + } + clipRect.Deflate(padding); // The non-inflated clip needs to be set on all non-caret items. // We prepare an extra DisplayItemClipChain here that will be intersected // with those items after they've been created. const ActiveScrolledRoot* asr = aBuilder->CurrentActiveScrolledRoot(); DisplayItemClip newClip; newClip.SetTo(clipRect);
--- a/layout/style/Declaration.cpp +++ b/layout/style/Declaration.cpp @@ -1409,16 +1409,17 @@ Declaration::GetPropertyValueInternal( const nsCSSValue* align = data->ValueFor(subprops[0]); const nsCSSValue* justify = data->ValueFor(subprops[1]); if (!align || !IsSingleValue(*align) || !justify || !IsSingleValue(*justify)) { return; // Not serializable, bail. } MOZ_FALLTHROUGH; } + case eCSSProperty_overflow_clip_box: case eCSSProperty_grid_gap: { const nsCSSPropertyID* subprops = nsCSSProps::SubpropertyEntryFor(aProperty); MOZ_ASSERT(subprops[2] == eCSSProperty_UNKNOWN, "must have exactly two subproperties"); nsAutoString val1, val2; AppendValueToString(subprops[0], val1);
--- a/layout/style/nsCSSParser.cpp +++ b/layout/style/nsCSSParser.cpp @@ -932,16 +932,17 @@ protected: bool ParseListStyleType(nsCSSValue& aValue); bool ParseMargin(); bool ParseClipPath(nsCSSValue& aValue); bool ParseTransform(bool aIsPrefixed, nsCSSPropertyID aProperty, bool aDisallowRelativeValues = false); bool ParseObjectPosition(); bool ParseOutline(); bool ParseOverflow(); + bool ParseOverflowClipBox(); bool ParsePadding(); bool ParseQuotes(); bool ParseTextAlign(nsCSSValue& aValue, const KTableEntry aTable[]); bool ParseTextAlign(nsCSSValue& aValue); bool ParseTextAlignLast(nsCSSValue& aValue); bool ParseTextDecoration(); bool ParseTextDecorationLine(nsCSSValue& aValue); @@ -11769,16 +11770,18 @@ CSSParserImpl::ParsePropertyByFunction(n case eCSSProperty_margin: return ParseMargin(); case eCSSProperty_object_position: return ParseObjectPosition(); case eCSSProperty_outline: return ParseOutline(); case eCSSProperty_overflow: return ParseOverflow(); + case eCSSProperty_overflow_clip_box: + return ParseOverflowClipBox(); case eCSSProperty_padding: return ParsePadding(); case eCSSProperty_quotes: return ParseQuotes(); case eCSSProperty_text_decoration: return ParseTextDecoration(); case eCSSProperty_text_emphasis: return ParseTextEmphasis(); @@ -15340,16 +15343,41 @@ CSSParserImpl::ParseOverflow() break; } AppendValue(eCSSProperty_overflow_x, overflowX); AppendValue(eCSSProperty_overflow_y, overflowY); return true; } bool +CSSParserImpl::ParseOverflowClipBox() +{ + nsCSSValue first; + if (ParseSingleTokenVariant(first, VARIANT_INHERIT, nullptr)) { + AppendValue(eCSSProperty_overflow_clip_box_block, first); + AppendValue(eCSSProperty_overflow_clip_box_inline, first); + return true; + } + const auto& kTable = nsCSSProps::kOverflowClipBoxKTable; + auto result = ParseVariant(first, VARIANT_KEYWORD, kTable); + if (result != CSSParseResult::Ok) { + return false; + } + nsCSSValue second; + result = ParseVariant(second, VARIANT_KEYWORD, kTable); + if (result == CSSParseResult::Error) { + return false; + } + AppendValue(eCSSProperty_overflow_clip_box_block, first); + AppendValue(eCSSProperty_overflow_clip_box_inline, + result == CSSParseResult::NotFound ? first : second); + return true; +} + +bool CSSParserImpl::ParsePadding() { static const nsCSSPropertyID kPaddingSideIDs[] = { eCSSProperty_padding_top, eCSSProperty_padding_right, eCSSProperty_padding_bottom, eCSSProperty_padding_left };
--- a/layout/style/nsCSSPropList.h +++ b/layout/style/nsCSSPropList.h @@ -3259,20 +3259,40 @@ CSS_PROP_OUTLINE( offsetof(nsStyleOutline, mOutlineWidth), eStyleAnimType_nscoord) CSS_PROP_SHORTHAND( overflow, overflow, Overflow, CSS_PROPERTY_PARSE_FUNCTION, "") -CSS_PROP_DISPLAY( +CSS_PROP_SHORTHAND( overflow-clip-box, overflow_clip_box, OverflowClipBox, + CSS_PROPERTY_PARSE_FUNCTION | + CSS_PROPERTY_ENABLED_IN_UA_SHEETS | + CSS_PROPERTY_APPLIES_TO_PLACEHOLDER, + "layout.css.overflow-clip-box.enabled") +CSS_PROP_DISPLAY( + overflow-clip-box-block, + overflow_clip_box_block, + OverflowClipBoxBlock, + CSS_PROPERTY_PARSE_VALUE | + CSS_PROPERTY_ENABLED_IN_UA_SHEETS | + CSS_PROPERTY_APPLIES_TO_PLACEHOLDER, + "layout.css.overflow-clip-box.enabled", + VARIANT_HK, + kOverflowClipBoxKTable, + CSS_PROP_NO_OFFSET, + eStyleAnimType_Discrete) +CSS_PROP_DISPLAY( + overflow-clip-box-inline, + overflow_clip_box_inline, + OverflowClipBoxInline, CSS_PROPERTY_PARSE_VALUE | CSS_PROPERTY_ENABLED_IN_UA_SHEETS | CSS_PROPERTY_APPLIES_TO_PLACEHOLDER, "layout.css.overflow-clip-box.enabled", VARIANT_HK, kOverflowClipBoxKTable, CSS_PROP_NO_OFFSET, eStyleAnimType_Discrete)
--- a/layout/style/nsCSSProps.cpp +++ b/layout/style/nsCSSProps.cpp @@ -2925,16 +2925,22 @@ static const nsCSSPropertyID gGridGapSub }; static const nsCSSPropertyID gOverflowSubpropTable[] = { eCSSProperty_overflow_x, eCSSProperty_overflow_y, eCSSProperty_UNKNOWN }; +static const nsCSSPropertyID gOverflowClipBoxSubpropTable[] = { + eCSSProperty_overflow_clip_box_block, + eCSSProperty_overflow_clip_box_inline, + eCSSProperty_UNKNOWN +}; + static const nsCSSPropertyID gPaddingSubpropTable[] = { // Code relies on these being in top-right-bottom-left order. eCSSProperty_padding_top, eCSSProperty_padding_right, eCSSProperty_padding_bottom, eCSSProperty_padding_left, eCSSProperty_UNKNOWN };
--- a/layout/style/nsComputedDOMStyle.cpp +++ b/layout/style/nsComputedDOMStyle.cpp @@ -5132,21 +5132,31 @@ nsComputedDOMStyle::DoGetOverflowY() RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue; val->SetIdent( nsCSSProps::ValueToKeywordEnum(StyleDisplay()->mOverflowY, nsCSSProps::kOverflowSubKTable)); return val.forget(); } already_AddRefed<CSSValue> -nsComputedDOMStyle::DoGetOverflowClipBox() +nsComputedDOMStyle::DoGetOverflowClipBoxBlock() { RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue; val->SetIdent( - nsCSSProps::ValueToKeywordEnum(StyleDisplay()->mOverflowClipBox, + nsCSSProps::ValueToKeywordEnum(StyleDisplay()->mOverflowClipBoxBlock, + nsCSSProps::kOverflowClipBoxKTable)); + return val.forget(); +} + +already_AddRefed<CSSValue> +nsComputedDOMStyle::DoGetOverflowClipBoxInline() +{ + RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue; + val->SetIdent( + nsCSSProps::ValueToKeywordEnum(StyleDisplay()->mOverflowClipBoxInline, nsCSSProps::kOverflowClipBoxKTable)); return val.forget(); } already_AddRefed<CSSValue> nsComputedDOMStyle::DoGetResize() { RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
--- a/layout/style/nsComputedDOMStyle.h +++ b/layout/style/nsComputedDOMStyle.h @@ -496,17 +496,18 @@ private: already_AddRefed<CSSValue> DoGetContain(); already_AddRefed<CSSValue> DoGetPosition(); already_AddRefed<CSSValue> DoGetClip(); already_AddRefed<CSSValue> DoGetImageOrientation(); already_AddRefed<CSSValue> DoGetWillChange(); already_AddRefed<CSSValue> DoGetOverflow(); already_AddRefed<CSSValue> DoGetOverflowX(); already_AddRefed<CSSValue> DoGetOverflowY(); - already_AddRefed<CSSValue> DoGetOverflowClipBox(); + already_AddRefed<CSSValue> DoGetOverflowClipBoxBlock(); + already_AddRefed<CSSValue> DoGetOverflowClipBoxInline(); already_AddRefed<CSSValue> DoGetResize(); already_AddRefed<CSSValue> DoGetPageBreakAfter(); already_AddRefed<CSSValue> DoGetPageBreakBefore(); already_AddRefed<CSSValue> DoGetPageBreakInside(); already_AddRefed<CSSValue> DoGetTouchAction(); already_AddRefed<CSSValue> DoGetTransform(); already_AddRefed<CSSValue> DoGetTransformBox(); already_AddRefed<CSSValue> DoGetTransformOrigin();
--- a/layout/style/nsComputedDOMStylePropertyList.h +++ b/layout/style/nsComputedDOMStylePropertyList.h @@ -194,17 +194,18 @@ COMPUTED_STYLE_PROP(opacity, // COMPUTED_STYLE_PROP(orphans, Orphans) //// COMPUTED_STYLE_PROP(outline, Outline) COMPUTED_STYLE_PROP(order, Order) COMPUTED_STYLE_PROP(outline_color, OutlineColor) COMPUTED_STYLE_PROP(outline_offset, OutlineOffset) COMPUTED_STYLE_PROP(outline_style, OutlineStyle) COMPUTED_STYLE_PROP(outline_width, OutlineWidth) COMPUTED_STYLE_PROP(overflow, Overflow) -COMPUTED_STYLE_PROP(overflow_clip_box, OverflowClipBox) +COMPUTED_STYLE_PROP(overflow_clip_box_block, OverflowClipBoxBlock) +COMPUTED_STYLE_PROP(overflow_clip_box_inline, OverflowClipBoxInline) COMPUTED_STYLE_PROP(overflow_wrap, OverflowWrap) COMPUTED_STYLE_PROP(overflow_x, OverflowX) COMPUTED_STYLE_PROP(overflow_y, OverflowY) COMPUTED_STYLE_PROP(overscroll_behavior_x, OverscrollBehaviorX) COMPUTED_STYLE_PROP(overscroll_behavior_y, OverscrollBehaviorY) //// COMPUTED_STYLE_PROP(padding, Padding) COMPUTED_STYLE_PROP(padding_bottom, PaddingBottom) COMPUTED_STYLE_PROP(padding_left, PaddingLeft)
--- a/layout/style/nsRuleNode.cpp +++ b/layout/style/nsRuleNode.cpp @@ -6138,20 +6138,27 @@ nsRuleNode::ComputeDisplayData(void* aSt conditions.SetUncacheable(); } if (display->mOverflowY == NS_STYLE_OVERFLOW_VISIBLE) { display->mOverflowY = NS_STYLE_OVERFLOW_CLIP; conditions.SetUncacheable(); } } - SetValue(*aRuleData->ValueForOverflowClipBox(), display->mOverflowClipBox, + SetValue(*aRuleData->ValueForOverflowClipBoxBlock(), + display->mOverflowClipBoxBlock, conditions, SETVAL_ENUMERATED | SETVAL_UNSET_INITIAL, - parentDisplay->mOverflowClipBox, + parentDisplay->mOverflowClipBoxBlock, + NS_STYLE_OVERFLOW_CLIP_BOX_PADDING_BOX); + SetValue(*aRuleData->ValueForOverflowClipBoxInline(), + display->mOverflowClipBoxInline, + conditions, + SETVAL_ENUMERATED | SETVAL_UNSET_INITIAL, + parentDisplay->mOverflowClipBoxInline, NS_STYLE_OVERFLOW_CLIP_BOX_PADDING_BOX); SetValue(*aRuleData->ValueForResize(), display->mResize, conditions, SETVAL_ENUMERATED | SETVAL_UNSET_INITIAL, parentDisplay->mResize, NS_STYLE_RESIZE_NONE); if (display->mDisplay != StyleDisplay::None) {
--- a/layout/style/nsStyleStruct.cpp +++ b/layout/style/nsStyleStruct.cpp @@ -3573,17 +3573,18 @@ nsStyleDisplay::nsStyleDisplay(const nsP , mFloat(StyleFloat::None) , mOriginalFloat(StyleFloat::None) , mBreakType(StyleClear::None) , mBreakInside(NS_STYLE_PAGE_BREAK_AUTO) , mBreakBefore(false) , mBreakAfter(false) , mOverflowX(NS_STYLE_OVERFLOW_VISIBLE) , mOverflowY(NS_STYLE_OVERFLOW_VISIBLE) - , mOverflowClipBox(NS_STYLE_OVERFLOW_CLIP_BOX_PADDING_BOX) + , mOverflowClipBoxBlock(NS_STYLE_OVERFLOW_CLIP_BOX_PADDING_BOX) + , mOverflowClipBoxInline(NS_STYLE_OVERFLOW_CLIP_BOX_PADDING_BOX) , mResize(NS_STYLE_RESIZE_NONE) , mOrient(StyleOrient::Inline) , mIsolation(NS_STYLE_ISOLATION_AUTO) , mTopLayer(NS_STYLE_TOP_LAYER_NONE) , mWillChangeBitField(0) , mTouchAction(NS_STYLE_TOUCH_ACTION_AUTO) , mScrollBehavior(NS_STYLE_SCROLL_BEHAVIOR_AUTO) , mOverscrollBehaviorX(StyleOverscrollBehavior::Auto) @@ -3637,17 +3638,18 @@ nsStyleDisplay::nsStyleDisplay(const nsS , mFloat(aSource.mFloat) , mOriginalFloat(aSource.mOriginalFloat) , mBreakType(aSource.mBreakType) , mBreakInside(aSource.mBreakInside) , mBreakBefore(aSource.mBreakBefore) , mBreakAfter(aSource.mBreakAfter) , mOverflowX(aSource.mOverflowX) , mOverflowY(aSource.mOverflowY) - , mOverflowClipBox(aSource.mOverflowClipBox) + , mOverflowClipBoxBlock(aSource.mOverflowClipBoxBlock) + , mOverflowClipBoxInline(aSource.mOverflowClipBoxInline) , mResize(aSource.mResize) , mOrient(aSource.mOrient) , mIsolation(aSource.mIsolation) , mTopLayer(aSource.mTopLayer) , mWillChangeBitField(aSource.mWillChangeBitField) , mWillChange(aSource.mWillChange) , mTouchAction(aSource.mTouchAction) , mScrollBehavior(aSource.mScrollBehavior) @@ -3820,17 +3822,18 @@ nsStyleDisplay::CalcDifference(const nsS // XXX the following is conservative, for now: changing float breaking shouldn't // necessarily require a repaint, reflow should suffice. if (mBreakType != aNewData.mBreakType || mBreakInside != aNewData.mBreakInside || mBreakBefore != aNewData.mBreakBefore || mBreakAfter != aNewData.mBreakAfter || mAppearance != aNewData.mAppearance || mOrient != aNewData.mOrient - || mOverflowClipBox != aNewData.mOverflowClipBox) { + || mOverflowClipBoxBlock != aNewData.mOverflowClipBoxBlock + || mOverflowClipBoxInline != aNewData.mOverflowClipBoxInline) { hint |= nsChangeHint_AllReflowHints | nsChangeHint_RepaintFrame; } if (mIsolation != aNewData.mIsolation) { hint |= nsChangeHint_RepaintFrame; }
--- a/layout/style/nsStyleStruct.h +++ b/layout/style/nsStyleStruct.h @@ -2557,17 +2557,18 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsSt mozilla::StyleFloat mOriginalFloat; mozilla::StyleClear mBreakType; // [reset] uint8_t mBreakInside; // [reset] NS_STYLE_PAGE_BREAK_AUTO/AVOID bool mBreakBefore; // [reset] bool mBreakAfter; // [reset] uint8_t mOverflowX; // [reset] see nsStyleConsts.h uint8_t mOverflowY; // [reset] see nsStyleConsts.h - uint8_t mOverflowClipBox; // [reset] see nsStyleConsts.h + uint8_t mOverflowClipBoxBlock; // [reset] see nsStyleConsts.h + uint8_t mOverflowClipBoxInline; // [reset] see nsStyleConsts.h uint8_t mResize; // [reset] see nsStyleConsts.h mozilla::StyleOrient mOrient; // [reset] see nsStyleConsts.h uint8_t mIsolation; // [reset] see nsStyleConsts.h uint8_t mTopLayer; // [reset] see nsStyleConsts.h uint8_t mWillChangeBitField; // [reset] see nsStyleConsts.h. Stores a // bitfield representation of the properties // that are frequently queried. This should // match mWillChange. Also tracks if any of the
--- a/layout/style/test/property_database.js +++ b/layout/style/test/property_database.js @@ -7405,24 +7405,44 @@ if (IsCSSPropertyPrefEnabled("layout.css initial_values: [ "normal" ], other_values: [ "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity" ], invalid_values: ["none", "10px", "multiply multiply"] }; } if (IsCSSPropertyPrefEnabled("layout.css.overflow-clip-box.enabled")) { - gCSSProperties["overflow-clip-box"] = { - domProp: "overflowClipBox", + gCSSProperties["overflow-clip-box-block"] = { + domProp: "overflowClipBoxBlock", inherited: false, type: CSS_TYPE_LONGHAND, applies_to_placeholder: true, initial_values: [ "padding-box" ], other_values: [ "content-box" ], - invalid_values: [ "none", "auto", "border-box", "0" ] + invalid_values: [ "auto", "border-box", "0", "padding-box padding-box" ] + }; + gCSSProperties["overflow-clip-box-inline"] = { + domProp: "overflowClipBoxInline", + inherited: false, + type: CSS_TYPE_LONGHAND, + applies_to_placeholder: true, + initial_values: [ "padding-box" ], + other_values: [ "content-box" ], + invalid_values: [ "none", "border-box", "0", "content-box content-box" ] + }; + gCSSProperties["overflow-clip-box"] = { + domProp: "overflowClipBox", + inherited: false, + type: CSS_TYPE_TRUE_SHORTHAND, + subproperties: [ "overflow-clip-box-block", "overflow-clip-box-inline" ], + initial_values: [ "padding-box" ], + other_values: [ "content-box", "padding-box content-box", "content-box padding-box", + "content-box content-box" ], + invalid_values: [ "none", "auto", "content-box none", "border-box", "0", + "content-box, content-box" ] }; } if (IsCSSPropertyPrefEnabled("layout.css.box-decoration-break.enabled")) { gCSSProperties["box-decoration-break"] = { domProp: "boxDecorationBreak", inherited: false, type: CSS_TYPE_LONGHAND,
--- a/testing/web-platform/tests/web-animations/animation-model/animation-types/property-list.js +++ b/testing/web-platform/tests/web-animations/animation-model/animation-types/property-list.js @@ -1049,22 +1049,16 @@ const gCSSProperties = { return element; } }, 'overflow': { // https://drafts.csswg.org/css-overflow/#propdef-overflow types: [ ] }, - 'overflow-clip-box': { - // https://developer.mozilla.org/en/docs/Web/CSS/overflow-clip-box - types: [ - { type: 'discrete', options: [ [ 'padding-box', 'content-box' ] ] } - ] - }, 'overflow-wrap': { // https://drafts.csswg.org/css-text-3/#propdef-overflow-wrap types: [ { type: 'discrete', options: [ [ 'normal', 'break-word' ] ] } ] }, 'overflow-x': { // https://drafts.csswg.org/css-overflow-3/#propdef-overflow-x