This source file includes following definitions.
- setCSSPropertiesEnabled
- setPropertySwitchesFromRuntimeFeatures
- propertySwitches
- indexForProperty
- isCSSPropertyEnabled
- setCSSPropertyEnabled
- filterEnabledCSSPropertiesIntoVector
#include "config.h"
#include "core/css/RuntimeCSSEnabled.h"
#include "RuntimeEnabledFeatures.h"
namespace WebCore {
typedef Vector<bool> BoolVector;
static void setCSSPropertiesEnabled(CSSPropertyID* properties, size_t length, bool featureFlag)
{
for (size_t i = 0; i < length; i++)
RuntimeCSSEnabled::setCSSPropertyEnabled(properties[i], featureFlag);
}
static void setPropertySwitchesFromRuntimeFeatures()
{
CSSPropertyID exclusionProperties[] = {
CSSPropertyWebkitWrapFlow,
CSSPropertyWebkitWrapThrough,
};
setCSSPropertiesEnabled(exclusionProperties, WTF_ARRAY_LENGTH(exclusionProperties), RuntimeEnabledFeatures::cssExclusionsEnabled());
CSSPropertyID shapeProperties[] = {
CSSPropertyShapeMargin,
CSSPropertyShapeImageThreshold,
CSSPropertyShapeOutside,
};
setCSSPropertiesEnabled(shapeProperties, WTF_ARRAY_LENGTH(shapeProperties), RuntimeEnabledFeatures::cssShapesEnabled());
CSSPropertyID css3TextDecorationProperties[] = {
CSSPropertyTextDecorationColor,
CSSPropertyTextDecorationLine,
CSSPropertyTextDecorationStyle,
CSSPropertyTextUnderlinePosition,
};
setCSSPropertiesEnabled(css3TextDecorationProperties, WTF_ARRAY_LENGTH(css3TextDecorationProperties), RuntimeEnabledFeatures::css3TextDecorationsEnabled());
CSSPropertyID css3TextProperties[] = {
CSSPropertyTextAlignLast,
CSSPropertyTextJustify,
};
setCSSPropertiesEnabled(css3TextProperties, WTF_ARRAY_LENGTH(css3TextProperties), RuntimeEnabledFeatures::css3TextEnabled());
CSSPropertyID cssGridLayoutProperties[] = {
CSSPropertyGridAutoColumns,
CSSPropertyGridAutoRows,
CSSPropertyGridTemplateColumns,
CSSPropertyGridTemplateRows,
CSSPropertyGridColumnStart,
CSSPropertyGridColumnEnd,
CSSPropertyGridRowStart,
CSSPropertyGridRowEnd,
CSSPropertyGridColumn,
CSSPropertyGridRow,
CSSPropertyGridArea,
CSSPropertyGridAutoFlow,
CSSPropertyGridTemplateAreas,
CSSPropertyGridTemplate,
CSSPropertyJustifySelf
};
setCSSPropertiesEnabled(cssGridLayoutProperties, WTF_ARRAY_LENGTH(cssGridLayoutProperties), RuntimeEnabledFeatures::cssGridLayoutEnabled());
CSSPropertyID cssObjectFitPositionProperties[] = {
CSSPropertyObjectFit,
CSSPropertyObjectPosition
};
setCSSPropertiesEnabled(cssObjectFitPositionProperties, WTF_ARRAY_LENGTH(cssObjectFitPositionProperties), RuntimeEnabledFeatures::objectFitPositionEnabled());
CSSPropertyID animationProperties[] = {
CSSPropertyAnimation,
CSSPropertyAnimationName,
CSSPropertyAnimationDuration,
CSSPropertyAnimationTimingFunction,
CSSPropertyAnimationDelay,
CSSPropertyAnimationIterationCount,
CSSPropertyAnimationDirection,
CSSPropertyAnimationFillMode,
CSSPropertyAnimationPlayState
};
setCSSPropertiesEnabled(animationProperties, WTF_ARRAY_LENGTH(animationProperties), RuntimeEnabledFeatures::cssAnimationUnprefixedEnabled());
CSSPropertyID transformProperties[] = {
CSSPropertyBackfaceVisibility,
CSSPropertyPerspective,
CSSPropertyPerspectiveOrigin,
CSSPropertyTransform,
CSSPropertyTransformOrigin,
CSSPropertyTransformStyle
};
setCSSPropertiesEnabled(transformProperties, WTF_ARRAY_LENGTH(transformProperties), RuntimeEnabledFeatures::cssTransformsUnprefixedEnabled());
RuntimeCSSEnabled::setCSSPropertyEnabled(CSSPropertyMixBlendMode, RuntimeEnabledFeatures::cssCompositingEnabled());
RuntimeCSSEnabled::setCSSPropertyEnabled(CSSPropertyIsolation, RuntimeEnabledFeatures::cssCompositingEnabled());
RuntimeCSSEnabled::setCSSPropertyEnabled(CSSPropertyTouchAction, RuntimeEnabledFeatures::cssTouchActionEnabled());
RuntimeCSSEnabled::setCSSPropertyEnabled(CSSPropertyTouchActionDelay, RuntimeEnabledFeatures::cssTouchActionDelayEnabled());
RuntimeCSSEnabled::setCSSPropertyEnabled(CSSPropertyPaintOrder, RuntimeEnabledFeatures::svgPaintOrderEnabled());
RuntimeCSSEnabled::setCSSPropertyEnabled(CSSPropertyMaskSourceType, RuntimeEnabledFeatures::cssMaskSourceTypeEnabled());
RuntimeCSSEnabled::setCSSPropertyEnabled(CSSPropertyColumnFill, RuntimeEnabledFeatures::regionBasedColumnsEnabled());
RuntimeCSSEnabled::setCSSPropertyEnabled(CSSPropertyScrollBehavior, RuntimeEnabledFeatures::cssomSmoothScrollEnabled());
RuntimeCSSEnabled::setCSSPropertyEnabled(CSSPropertyWillChange, RuntimeEnabledFeatures::cssWillChangeEnabled());
RuntimeCSSEnabled::setCSSPropertyEnabled(CSSPropertyInternalCallback, false);
}
static BoolVector& propertySwitches()
{
static BoolVector* switches = 0;
if (!switches) {
switches = new BoolVector;
switches->fill(true, numCSSProperties);
setPropertySwitchesFromRuntimeFeatures();
}
return *switches;
}
size_t indexForProperty(CSSPropertyID propertyId)
{
RELEASE_ASSERT(propertyId >= firstCSSProperty && propertyId <= lastCSSProperty);
return static_cast<size_t>(propertyId - firstCSSProperty);
}
bool RuntimeCSSEnabled::isCSSPropertyEnabled(CSSPropertyID propertyId)
{
if (isInternalProperty(propertyId))
return false;
return propertySwitches()[indexForProperty(propertyId)];
}
void RuntimeCSSEnabled::setCSSPropertyEnabled(CSSPropertyID propertyId, bool enable)
{
propertySwitches()[indexForProperty(propertyId)] = enable;
}
void RuntimeCSSEnabled::filterEnabledCSSPropertiesIntoVector(const CSSPropertyID* properties, size_t propertyCount, Vector<CSSPropertyID>& outVector)
{
for (unsigned i = 0; i < propertyCount; i++) {
CSSPropertyID property = properties[i];
if (RuntimeCSSEnabled::isCSSPropertyEnabled(property))
outVector.append(property);
}
}
}