--- a/layout/style/nsCSSKeywordList.h
+++ b/layout/style/nsCSSKeywordList.h
@@ -306,16 +306,17 @@ CSS_KEY(inline, inline)
CSS_KEY(inline-axis, inline_axis)
CSS_KEY(inline-block, inline_block)
CSS_KEY(inline-flex, inline_flex)
CSS_KEY(inline-grid, inline_grid)
CSS_KEY(inline-table, inline_table)
CSS_KEY(inset, inset)
CSS_KEY(inside, inside)
CSS_KEY(interpolatematrix, interpolatematrix)
+CSS_KEY(isolate, isolate)
CSS_KEY(invert, invert)
CSS_KEY(italic, italic)
CSS_KEY(japanese-formal, japanese_formal)
CSS_KEY(japanese-informal, japanese_informal)
CSS_KEY(jis78, jis78)
CSS_KEY(jis83, jis83)
CSS_KEY(jis90, jis90)
CSS_KEY(jis04, jis04)
--- a/layout/style/nsCSSPropList.h
+++ b/layout/style/nsCSSPropList.h
@@ -2516,16 +2516,27 @@ CSS_PROP_DISPLAY(
MixBlendMode,
CSS_PROPERTY_PARSE_VALUE |
CSS_PROPERTY_CREATES_STACKING_CONTEXT,
"layout.css.mix-blend-mode.enabled",
VARIANT_HK,
kBlendModeKTable,
CSS_PROP_NO_OFFSET,
eStyleAnimType_None)
+CSS_PROP_DISPLAY(
+ isolation,
+ isolation,
+ Isolation,
+ CSS_PROPERTY_PARSE_VALUE |
+ CSS_PROPERTY_CREATES_STACKING_CONTEXT,
+ "layout.css.isolation.enabled",
+ VARIANT_HK,
+ kIsolationKTable,
+ CSS_PROP_NO_OFFSET,
+ eStyleAnimType_None)
CSS_PROP_POSITION(
object-fit,
object_fit,
ObjectFit,
CSS_PROPERTY_PARSE_VALUE,
"layout.css.object-fit-and-position.enabled",
VARIANT_HK,
kObjectFitKTable,
--- a/layout/style/nsCSSProps.cpp
+++ b/layout/style/nsCSSProps.cpp
@@ -1342,16 +1342,22 @@ const KTableValue nsCSSProps::kImageOrie
eCSSKeyword_UNKNOWN,-1
};
const KTableValue nsCSSProps::kImageOrientationFlipKTable[] = {
eCSSKeyword_flip, NS_STYLE_IMAGE_ORIENTATION_FLIP,
eCSSKeyword_UNKNOWN,-1
};
+const KTableValue nsCSSProps::kIsolationKTable[] = {
+ eCSSKeyword_auto, NS_STYLE_ISOLATION_AUTO,
+ eCSSKeyword_isolate, NS_STYLE_ISOLATION_ISOLATE,
+ eCSSKeyword_UNKNOWN,-1
+};
+
const KTableValue nsCSSProps::kIMEModeKTable[] = {
eCSSKeyword_normal, NS_STYLE_IME_MODE_NORMAL,
eCSSKeyword_auto, NS_STYLE_IME_MODE_AUTO,
eCSSKeyword_active, NS_STYLE_IME_MODE_ACTIVE,
eCSSKeyword_disabled, NS_STYLE_IME_MODE_DISABLED,
eCSSKeyword_inactive, NS_STYLE_IME_MODE_INACTIVE,
eCSSKeyword_UNKNOWN,-1
};
--- a/layout/style/nsCSSProps.h
+++ b/layout/style/nsCSSProps.h
@@ -589,16 +589,17 @@ public:
static const KTableValue kFontVariantLigaturesKTable[];
static const KTableValue kFontVariantNumericKTable[];
static const KTableValue kFontVariantPositionKTable[];
static const KTableValue kFontWeightKTable[];
static const KTableValue kGridAutoFlowKTable[];
static const KTableValue kGridTrackBreadthKTable[];
static const KTableValue kImageOrientationKTable[];
static const KTableValue kImageOrientationFlipKTable[];
+ static const KTableValue kIsolationKTable[];
static const KTableValue kIMEModeKTable[];
static const KTableValue kLineHeightKTable[];
static const KTableValue kListStylePositionKTable[];
static const KTableValue kListStyleKTable[];
static const KTableValue kMaskTypeKTable[];
static const KTableValue kMathVariantKTable[];
static const KTableValue kMathDisplayKTable[];
static const KTableValue kContextOpacityKTable[];
--- a/layout/style/nsComputedDOMStyle.cpp
+++ b/layout/style/nsComputedDOMStyle.cpp
@@ -4224,16 +4224,25 @@ nsComputedDOMStyle::DoGetMixBlendMode()
{
nsROCSSPrimitiveValue* val = new nsROCSSPrimitiveValue;
val->SetIdent(nsCSSProps::ValueToKeywordEnum(StyleDisplay()->mMixBlendMode,
nsCSSProps::kBlendModeKTable));
return val;
}
CSSValue*
+nsComputedDOMStyle::DoGetIsolation()
+{
+ nsROCSSPrimitiveValue* val = new nsROCSSPrimitiveValue;
+ val->SetIdent(nsCSSProps::ValueToKeywordEnum(StyleDisplay()->mIsolation,
+ nsCSSProps::kIsolationKTable));
+ return val;
+}
+
+CSSValue*
nsComputedDOMStyle::DoGetObjectFit()
{
nsROCSSPrimitiveValue* val = new nsROCSSPrimitiveValue;
val->SetIdent(nsCSSProps::ValueToKeywordEnum(StylePosition()->mObjectFit,
nsCSSProps::kObjectFitKTable));
return val;
}
--- a/layout/style/nsComputedDOMStyle.h
+++ b/layout/style/nsComputedDOMStyle.h
@@ -230,16 +230,17 @@ private:
mozilla::dom::CSSValue* DoGetWidth();
mozilla::dom::CSSValue* DoGetHeight();
mozilla::dom::CSSValue* DoGetMaxHeight();
mozilla::dom::CSSValue* DoGetMaxWidth();
mozilla::dom::CSSValue* DoGetMinHeight();
mozilla::dom::CSSValue* DoGetMinWidth();
mozilla::dom::CSSValue* DoGetMixBlendMode();
+ mozilla::dom::CSSValue* DoGetIsolation();
mozilla::dom::CSSValue* DoGetObjectFit();
mozilla::dom::CSSValue* DoGetObjectPosition();
mozilla::dom::CSSValue* DoGetLeft();
mozilla::dom::CSSValue* DoGetTop();
mozilla::dom::CSSValue* DoGetRight();
mozilla::dom::CSSValue* DoGetBottom();
mozilla::dom::CSSValue* DoGetStackSizing();
--- a/layout/style/nsComputedDOMStylePropertyList.h
+++ b/layout/style/nsComputedDOMStylePropertyList.h
@@ -141,16 +141,17 @@ COMPUTED_STYLE_PROP(grid_column_start,
COMPUTED_STYLE_PROP(grid_row_end, GridRowEnd)
COMPUTED_STYLE_PROP(grid_row_start, GridRowStart)
COMPUTED_STYLE_PROP(grid_template_areas, GridTemplateAreas)
COMPUTED_STYLE_PROP(grid_template_columns, GridTemplateColumns)
COMPUTED_STYLE_PROP(grid_template_rows, GridTemplateRows)
COMPUTED_STYLE_PROP(height, Height)
COMPUTED_STYLE_PROP(image_orientation, ImageOrientation)
COMPUTED_STYLE_PROP(ime_mode, IMEMode)
+COMPUTED_STYLE_PROP(isolation, Isolation)
COMPUTED_STYLE_PROP(justify_content, JustifyContent)
COMPUTED_STYLE_PROP(left, Left)
COMPUTED_STYLE_PROP(letter_spacing, LetterSpacing)
COMPUTED_STYLE_PROP(line_height, LineHeight)
//// COMPUTED_STYLE_PROP(list_style, ListStyle)
COMPUTED_STYLE_PROP(list_style_image, ListStyleImage)
COMPUTED_STYLE_PROP(list_style_position, ListStylePosition)
COMPUTED_STYLE_PROP(list_style_type, ListStyleType)
--- a/layout/style/nsRuleNode.cpp
+++ b/layout/style/nsRuleNode.cpp
@@ -5292,16 +5292,23 @@ nsRuleNode::ComputeDisplayData(void* aSt
// mix-blend-mode: enum, inherit, initial
SetDiscrete(*aRuleData->ValueForMixBlendMode(), display->mMixBlendMode,
canStoreInRuleTree,
SETDSC_ENUMERATED | SETDSC_UNSET_INITIAL,
parentDisplay->mMixBlendMode, NS_STYLE_BLEND_NORMAL,
0, 0, 0, 0);
+ // isolation: enum, inherit, initial
+ SetDiscrete(*aRuleData->ValueForIsolation(), display->mIsolation,
+ canStoreInRuleTree,
+ SETDSC_ENUMERATED | SETDSC_UNSET_INITIAL,
+ parentDisplay->mIsolation, NS_STYLE_ISOLATION_AUTO,
+ 0, 0, 0, 0);
+
// Backup original display value for calculation of a hypothetical
// box (CSS2 10.6.4/10.6.5), in addition to getting our style data right later.
// See nsHTMLReflowState::CalculateHypotheticalBox
display->mOriginalDisplay = display->mDisplay;
// appearance: enum, inherit, initial
SetDiscrete(*aRuleData->ValueForAppearance(),
display->mAppearance, canStoreInRuleTree,
--- a/layout/style/nsStyleConsts.h
+++ b/layout/style/nsStyleConsts.h
@@ -715,16 +715,20 @@ static inline mozilla::css::Side operato
#define NS_STYLE_POINTER_EVENTS_STROKE 7
#define NS_STYLE_POINTER_EVENTS_ALL 8
#define NS_STYLE_POINTER_EVENTS_AUTO 9
// See nsStyleVisibility.mImageOrientationType
#define NS_STYLE_IMAGE_ORIENTATION_FLIP 0
#define NS_STYLE_IMAGE_ORIENTATION_FROM_IMAGE 1
+// See nsStyleDisplay
+#define NS_STYLE_ISOLATION_AUTO 0
+#define NS_STYLE_ISOLATION_ISOLATE 1
+
// See nsStylePosition.mObjectFit
#define NS_STYLE_OBJECT_FIT_FILL 0
#define NS_STYLE_OBJECT_FIT_CONTAIN 1
#define NS_STYLE_OBJECT_FIT_COVER 2
#define NS_STYLE_OBJECT_FIT_NONE 3
#define NS_STYLE_OBJECT_FIT_SCALE_DOWN 4
// See nsStyleDisplay
--- a/layout/style/nsStyleStruct.cpp
+++ b/layout/style/nsStyleStruct.cpp
@@ -2577,16 +2577,17 @@ nsStyleDisplay::nsStyleDisplay()
mTransformOrigin[2].SetCoordValue(0);
mPerspectiveOrigin[0].SetPercentValue(0.5f);
mPerspectiveOrigin[1].SetPercentValue(0.5f);
mChildPerspective.SetNoneValue();
mBackfaceVisibility = NS_STYLE_BACKFACE_VISIBILITY_VISIBLE;
mTransformStyle = NS_STYLE_TRANSFORM_STYLE_FLAT;
mOrient = NS_STYLE_ORIENT_AUTO;
mMixBlendMode = NS_STYLE_BLEND_NORMAL;
+ mIsolation = NS_STYLE_ISOLATION_AUTO;
mTouchAction = NS_STYLE_TOUCH_ACTION_AUTO;
mTransitions.AppendElement();
NS_ABORT_IF_FALSE(mTransitions.Length() == 1,
"appending within auto buffer should never fail");
mTransitions[0].SetInitialValues();
mTransitionTimingFunctionCount = 1;
mTransitionDurationCount = 1;
@@ -2623,16 +2624,17 @@ nsStyleDisplay::nsStyleDisplay(const nsS
, mBreakAfter(aSource.mBreakAfter)
, mOverflowX(aSource.mOverflowX)
, mOverflowY(aSource.mOverflowY)
, mOverflowClipBox(aSource.mOverflowClipBox)
, mResize(aSource.mResize)
, mClipFlags(aSource.mClipFlags)
, mOrient(aSource.mOrient)
, mMixBlendMode(aSource.mMixBlendMode)
+ , mIsolation(aSource.mIsolation)
, mWillChangeBitField(aSource.mWillChangeBitField)
, mWillChange(aSource.mWillChange)
, mTouchAction(aSource.mTouchAction)
, mBackfaceVisibility(aSource.mBackfaceVisibility)
, mTransformStyle(aSource.mTransformStyle)
, mSpecifiedTransform(aSource.mSpecifiedTransform)
, mChildPerspective(aSource.mChildPerspective)
, mTransitions(aSource.mTransitions)
@@ -2721,17 +2723,18 @@ nsChangeHint nsStyleDisplay::CalcDiffere
if ((mOpacity >= 0.99f && mOpacity < 1.0f && aOther.mOpacity == 1.0f) ||
(aOther.mOpacity >= 0.99f && aOther.mOpacity < 1.0f && mOpacity == 1.0f)) {
NS_UpdateHint(hint, nsChangeHint_RepaintFrame);
} else {
NS_UpdateHint(hint, nsChangeHint_UpdateOpacityLayer);
}
}
- if (mMixBlendMode != aOther.mMixBlendMode) {
+ if (mMixBlendMode != aOther.mMixBlendMode
+ || mIsolation != aOther.mIsolation) {
NS_UpdateHint(hint, nsChangeHint_RepaintFrame);
}
/* If we've added or removed the transform property, we need to reconstruct the frame to add
* or remove the view object, and also to handle abs-pos and fixed-pos containers.
*/
if (HasTransformStyle() != aOther.HasTransformStyle()) {
// We do not need to apply nsChangeHint_UpdateTransformLayer since
--- a/layout/style/nsStyleStruct.h
+++ b/layout/style/nsStyleStruct.h
@@ -2018,16 +2018,17 @@ struct nsStyleDisplay {
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 mResize; // [reset] see nsStyleConsts.h
uint8_t mClipFlags; // [reset] see nsStyleConsts.h
uint8_t mOrient; // [reset] see nsStyleConsts.h
uint8_t mMixBlendMode; // [reset] see nsStyleConsts.h
+ uint8_t mIsolation; // [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
// properties in the will-change list require
// a stacking context.
nsAutoTArray<nsString, 1> mWillChange;
--- a/layout/style/test/property_database.js
+++ b/layout/style/test/property_database.js
@@ -5509,16 +5509,27 @@ if (SpecialPowers.getBoolPref("layout.cs
type: CSS_TYPE_LONGHAND,
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: []
};
}
+if (SpecialPowers.getBoolPref("layout.css.isolation.enabled")) {
+ gCSSProperties["isolation"] = {
+ domProp: "isolation",
+ inherited: false,
+ type: CSS_TYPE_LONGHAND,
+ initial_values: [ "auto" ],
+ other_values: ["isolated"],
+ invalid_values: []
+ };
+}
+
if (SpecialPowers.getBoolPref("layout.css.background-blend-mode.enabled")) {
gCSSProperties["background-blend-mode"] = {
domProp: "backgroundBlendMode",
inherited: false,
type: CSS_TYPE_LONGHAND,
initial_values: [ "normal" ],
other_values: [ "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn",
"hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity" ],
--- a/layout/style/test/test_computed_style_prefs.html
+++ b/layout/style/test/test_computed_style_prefs.html
@@ -66,16 +66,17 @@ function step() {
}
// ----
var gProps = {
"layout.css.vertical-text.enabled": ["text-combine-upright", "text-orientation", "writing-mode"],
"layout.css.image-orientation.enabled": ["image-orientation"],
"layout.css.mix-blend-mode.enabled": ["mix-blend-mode"],
+ "layout.css.isolation.enabled": [ "isolation"],
"layout.css.masking.enabled": ["mask-type"],
"layout.css.touch_action.enabled": ["touch-action"]
};
var gCS = getComputedStyle(document.body, "");
var gLengthWithAllPrefsDisabled;
var gTestIndex = 0;
--- a/modules/libpref/init/all.js
+++ b/modules/libpref/init/all.js
@@ -2013,16 +2013,19 @@ pref("layout.css.dpi", -1);
pref("layout.css.devPixelsPerPx", "-1.0");
// Is support for CSS Masking features enabled?
pref("layout.css.masking.enabled", true);
// Is support for mix-blend-mode enabled?
pref("layout.css.mix-blend-mode.enabled", true);
+// Is support for isolation enabled?
+pref("layout.css.isolation.enabled", false);
+
// Is support for CSS Filters enabled?
pref("layout.css.filters.enabled", true);
// Is support for basic shapes in clip-path enabled?
pref("layout.css.clip-path-shapes.enabled", false);
// Is support for CSS sticky positioning enabled?
pref("layout.css.sticky.enabled", true);