Merge from Chromium at DEPS revision 261286
This commit was generated by merge_to_master.py.
Change-Id: I756d37445fd7f470b1689ad81318e715d4244987
diff --git a/Source/core/css/resolver/AnimatedStyleBuilder.cpp b/Source/core/css/resolver/AnimatedStyleBuilder.cpp
index 22dca93..70f3200 100644
--- a/Source/core/css/resolver/AnimatedStyleBuilder.cpp
+++ b/Source/core/css/resolver/AnimatedStyleBuilder.cpp
@@ -40,6 +40,7 @@
#include "core/animation/AnimatableLengthBox.h"
#include "core/animation/AnimatableLengthBoxAndBool.h"
#include "core/animation/AnimatableLengthPoint.h"
+#include "core/animation/AnimatableLengthPoint3D.h"
#include "core/animation/AnimatableLengthSize.h"
#include "core/animation/AnimatableRepeatable.h"
#include "core/animation/AnimatableSVGLength.h"
@@ -553,13 +554,22 @@
case CSSPropertyWebkitMaskSize:
setOnFillLayers<CSSPropertyWebkitMaskSize>(style->accessMaskLayers(), value, state);
return;
- case CSSPropertyWebkitPerspective:
+ case CSSPropertyPerspective:
style->setPerspective(clampTo<float>(toAnimatableDouble(value)->toDouble()));
return;
+ case CSSPropertyPerspectiveOrigin: {
+ ASSERT(RuntimeEnabledFeatures::cssTransformsUnprefixedEnabled());
+ const AnimatableLengthPoint* animatableLengthPoint = toAnimatableLengthPoint(value);
+ style->setPerspectiveOriginX(animatableValueToLength(animatableLengthPoint->x(), state));
+ style->setPerspectiveOriginY(animatableValueToLength(animatableLengthPoint->y(), state));
+ return;
+ }
case CSSPropertyWebkitPerspectiveOriginX:
+ ASSERT(!RuntimeEnabledFeatures::cssTransformsUnprefixedEnabled());
style->setPerspectiveOriginX(animatableValueToLength(value, state));
return;
case CSSPropertyWebkitPerspectiveOriginY:
+ ASSERT(!RuntimeEnabledFeatures::cssTransformsUnprefixedEnabled());
style->setPerspectiveOriginY(animatableValueToLength(value, state));
return;
case CSSPropertyShapeOutside:
@@ -575,19 +585,30 @@
style->setTextStrokeColor(toAnimatableColor(value)->color());
style->setVisitedLinkTextStrokeColor(toAnimatableColor(value)->visitedLinkColor());
return;
- case CSSPropertyWebkitTransform: {
+ case CSSPropertyTransform: {
const TransformOperations& operations = toAnimatableTransform(value)->transformOperations();
// FIXME: This normalization (handling of 'none') should be performed at input in AnimatableValueFactory.
style->setTransform(operations.size() ? operations : TransformOperations(true));
return;
}
+ case CSSPropertyTransformOrigin: {
+ ASSERT(RuntimeEnabledFeatures::cssTransformsUnprefixedEnabled());
+ const AnimatableLengthPoint3D* animatableLengthPoint3D = toAnimatableLengthPoint3D(value);
+ style->setTransformOriginX(animatableValueToLength(animatableLengthPoint3D->x(), state));
+ style->setTransformOriginY(animatableValueToLength(animatableLengthPoint3D->y(), state));
+ style->setTransformOriginZ(clampTo<float>(toAnimatableDouble(animatableLengthPoint3D->z())->toDouble()));
+ return;
+ }
case CSSPropertyWebkitTransformOriginX:
+ ASSERT(!RuntimeEnabledFeatures::cssTransformsUnprefixedEnabled());
style->setTransformOriginX(animatableValueToLength(value, state));
return;
case CSSPropertyWebkitTransformOriginY:
+ ASSERT(!RuntimeEnabledFeatures::cssTransformsUnprefixedEnabled());
style->setTransformOriginY(animatableValueToLength(value, state));
return;
case CSSPropertyWebkitTransformOriginZ:
+ ASSERT(!RuntimeEnabledFeatures::cssTransformsUnprefixedEnabled());
style->setTransformOriginZ(toAnimatableDouble(value)->toDouble());
return;
case CSSPropertyWidows:
diff --git a/Source/core/css/resolver/ElementResolveContext.h b/Source/core/css/resolver/ElementResolveContext.h
index 04056fe..0b3996e 100644
--- a/Source/core/css/resolver/ElementResolveContext.h
+++ b/Source/core/css/resolver/ElementResolveContext.h
@@ -34,6 +34,7 @@
// ElementResolveContext is immutable and serves as an input to the style resolve process.
class ElementResolveContext {
+ STACK_ALLOCATED();
public:
ElementResolveContext()
: m_element(0)
diff --git a/Source/core/css/resolver/SharedStyleFinder.cpp b/Source/core/css/resolver/SharedStyleFinder.cpp
index 021f0b6..16ebf2f 100644
--- a/Source/core/css/resolver/SharedStyleFinder.cpp
+++ b/Source/core/css/resolver/SharedStyleFinder.cpp
@@ -212,16 +212,8 @@
return false;
if (candidate.isLink() != element().isLink())
return false;
- if (candidate.hovered() != element().hovered())
- return false;
- if (candidate.active() != element().active())
- return false;
- if (candidate.focused() != element().focused())
- return false;
if (candidate.shadowPseudoId() != element().shadowPseudoId())
return false;
- if (candidate == document().cssTarget())
- return false;
if (!sharingCandidateHasIdenticalStyleAffectingAttributes(candidate))
return false;
if (candidate.additionalPresentationAttributeStyle() != element().additionalPresentationAttributeStyle())
diff --git a/Source/core/css/resolver/SharedStyleFinder.h b/Source/core/css/resolver/SharedStyleFinder.h
index 0c263cd..e41c3aa 100644
--- a/Source/core/css/resolver/SharedStyleFinder.h
+++ b/Source/core/css/resolver/SharedStyleFinder.h
@@ -36,6 +36,7 @@
class StyleResolver;
class SharedStyleFinder {
+ STACK_ALLOCATED();
public:
// RuleSets are passed non-const as the act of matching against them can cause them
// to be compacted. :(
@@ -72,8 +73,8 @@
bool m_elementAffectedByClassRules;
const RuleFeatureSet& m_features;
- RuleSet* m_siblingRuleSet;
- RuleSet* m_uncommonAttributeRuleSet;
+ RawPtrWillBeMember<RuleSet> m_siblingRuleSet;
+ RawPtrWillBeMember<RuleSet> m_uncommonAttributeRuleSet;
StyleResolver& m_styleResolver;
const ElementResolveContext& m_context;
};
diff --git a/Source/core/css/resolver/StyleAdjuster.cpp b/Source/core/css/resolver/StyleAdjuster.cpp
index 624d735..af6781c 100644
--- a/Source/core/css/resolver/StyleAdjuster.cpp
+++ b/Source/core/css/resolver/StyleAdjuster.cpp
@@ -34,6 +34,7 @@
#include "core/dom/ContainerNode.h"
#include "core/dom/Document.h"
#include "core/dom/Element.h"
+#include "core/dom/NodeRenderStyle.h"
#include "core/html/HTMLIFrameElement.h"
#include "core/html/HTMLInputElement.h"
#include "core/html/HTMLTableCellElement.h"
@@ -166,9 +167,11 @@
for (size_t i = 0; i < style->willChangeProperties().size(); ++i) {
switch (style->willChangeProperties()[i]) {
case CSSPropertyOpacity:
+ case CSSPropertyTransform:
case CSSPropertyWebkitTransform:
case CSSPropertyTransformStyle:
case CSSPropertyWebkitTransformStyle:
+ case CSSPropertyPerspective:
case CSSPropertyWebkitPerspective:
case CSSPropertyWebkitMask:
case CSSPropertyWebkitMaskBoxImage:
@@ -236,7 +239,7 @@
// will-change:transform should result in the same rendering behavior as having a transform,
// including the creation of a containing block for fixed position descendants.
- if (!style->hasTransform() && style->willChangeProperties().contains(CSSPropertyWebkitTransform)) {
+ if (!style->hasTransform() && (style->willChangeProperties().contains(CSSPropertyWebkitTransform) || style->willChangeProperties().contains(CSSPropertyTransform))) {
bool makeIdentity = true;
style->setTransform(TransformOperations(makeIdentity));
}
@@ -281,6 +284,13 @@
if ((isSVGForeignObjectElement(*e) || isSVGTextElement(*e)) && style->isDisplayInlineType())
style->setDisplay(BLOCK);
}
+
+ if (e && e->renderStyle() && e->renderStyle()->textAutosizingMultiplier() != 1) {
+ // Preserve the text autosizing multiplier on style recalc.
+ // (The autosizer will update it during layout if it needs to be changed.)
+ style->setTextAutosizingMultiplier(e->renderStyle()->textAutosizingMultiplier());
+ style->setUnique();
+ }
}
void StyleAdjuster::adjustStyleForTagName(RenderStyle* style, RenderStyle* parentStyle, Element& element)
diff --git a/Source/core/css/resolver/StyleBuilderCustom.cpp b/Source/core/css/resolver/StyleBuilderCustom.cpp
index 6e0ba84..25509fd 100644
--- a/Source/core/css/resolver/StyleBuilderCustom.cpp
+++ b/Source/core/css/resolver/StyleBuilderCustom.cpp
@@ -582,6 +582,121 @@
state.style()->setTextIndentLine(TextIndentFirstLine);
}
+void StyleBuilderFunctions::applyInitialCSSPropertyTransformOrigin(StyleResolverState& state)
+{
+ applyInitialCSSPropertyWebkitTransformOriginX(state);
+ applyInitialCSSPropertyWebkitTransformOriginY(state);
+ applyInitialCSSPropertyWebkitTransformOriginZ(state);
+}
+
+void StyleBuilderFunctions::applyInheritCSSPropertyTransformOrigin(StyleResolverState& state)
+{
+ applyInheritCSSPropertyWebkitTransformOriginX(state);
+ applyInheritCSSPropertyWebkitTransformOriginY(state);
+ applyInheritCSSPropertyWebkitTransformOriginZ(state);
+}
+
+void StyleBuilderFunctions::applyValueCSSPropertyTransformOrigin(StyleResolverState& state, CSSValue* value)
+{
+ CSSValueList* list = toCSSValueList(value);
+ ASSERT(list->length() == 3);
+ CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(list->item(0));
+ if (primitiveValue->isValueID()) {
+ switch (primitiveValue->getValueID()) {
+ case CSSValueLeft:
+ state.style()->setTransformOriginX(Length(0, Percent));
+ break;
+ case CSSValueRight:
+ state.style()->setTransformOriginX(Length(100, Percent));
+ break;
+ case CSSValueCenter:
+ state.style()->setTransformOriginX(Length(50, Percent));
+ break;
+ default:
+ ASSERT_NOT_REACHED();
+ }
+ } else {
+ state.style()->setTransformOriginX(StyleBuilderConverter::convertLength(state, primitiveValue));
+ }
+
+ primitiveValue = toCSSPrimitiveValue(list->item(1));
+ if (primitiveValue->isValueID()) {
+ switch (primitiveValue->getValueID()) {
+ case CSSValueTop:
+ state.style()->setTransformOriginY(Length(0, Percent));
+ break;
+ case CSSValueBottom:
+ state.style()->setTransformOriginY(Length(100, Percent));
+ break;
+ case CSSValueCenter:
+ state.style()->setTransformOriginY(Length(50, Percent));
+ break;
+ default:
+ ASSERT_NOT_REACHED();
+ }
+ } else {
+ state.style()->setTransformOriginY(StyleBuilderConverter::convertLength(state, primitiveValue));
+ }
+
+ primitiveValue = toCSSPrimitiveValue(list->item(2));
+ state.style()->setTransformOriginZ(StyleBuilderConverter::convertComputedLength<float>(state, primitiveValue));
+}
+
+void StyleBuilderFunctions::applyInitialCSSPropertyPerspectiveOrigin(StyleResolverState& state)
+{
+ applyInitialCSSPropertyWebkitPerspectiveOriginX(state);
+ applyInitialCSSPropertyWebkitPerspectiveOriginY(state);
+}
+
+void StyleBuilderFunctions::applyInheritCSSPropertyPerspectiveOrigin(StyleResolverState& state)
+{
+ applyInheritCSSPropertyWebkitPerspectiveOriginX(state);
+ applyInheritCSSPropertyWebkitPerspectiveOriginY(state);
+}
+
+void StyleBuilderFunctions::applyValueCSSPropertyPerspectiveOrigin(StyleResolverState& state, CSSValue* value)
+{
+ CSSValueList* list = toCSSValueList(value);
+ ASSERT(list->length() == 2);
+ CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(list->item(0));
+ if (primitiveValue->isValueID()) {
+ switch (primitiveValue->getValueID()) {
+ case CSSValueLeft:
+ state.style()->setPerspectiveOriginX(Length(0, Percent));
+ break;
+ case CSSValueRight:
+ state.style()->setPerspectiveOriginX(Length(100, Percent));
+ break;
+ case CSSValueCenter:
+ state.style()->setPerspectiveOriginX(Length(50, Percent));
+ break;
+ default:
+ ASSERT_NOT_REACHED();
+ }
+ } else {
+ state.style()->setPerspectiveOriginX(StyleBuilderConverter::convertLength(state, primitiveValue));
+ }
+
+ primitiveValue = toCSSPrimitiveValue(list->item(1));
+ if (primitiveValue->isValueID()) {
+ switch (primitiveValue->getValueID()) {
+ case CSSValueTop:
+ state.style()->setPerspectiveOriginY(Length(0, Percent));
+ break;
+ case CSSValueBottom:
+ state.style()->setPerspectiveOriginY(Length(100, Percent));
+ break;
+ case CSSValueCenter:
+ state.style()->setPerspectiveOriginY(Length(50, Percent));
+ break;
+ default:
+ ASSERT_NOT_REACHED();
+ }
+ } else {
+ state.style()->setPerspectiveOriginY(StyleBuilderConverter::convertLength(state, primitiveValue));
+ }
+}
+
void StyleBuilderFunctions::applyValueCSSPropertyVerticalAlign(StyleResolverState& state, CSSValue* value)
{
if (!value->isPrimitiveValue())
@@ -1339,6 +1454,7 @@
case CSSPropertyWebkitColumnRule:
case CSSPropertyFlex:
case CSSPropertyFlexFlow:
+ case CSSPropertyGridTemplate:
case CSSPropertyGridColumn:
case CSSPropertyGridRow:
case CSSPropertyGridArea:
@@ -1422,6 +1538,7 @@
state.style()->setTextStrokeWidth(width);
return;
}
+ case CSSPropertyTransform:
case CSSPropertyWebkitTransform: {
HANDLE_INHERIT_AND_INITIAL(transform, Transform);
TransformOperations operations;
@@ -1429,6 +1546,7 @@
state.style()->setTransform(operations);
return;
}
+ case CSSPropertyPerspective:
case CSSPropertyWebkitPerspective: {
HANDLE_INHERIT_AND_INITIAL(perspective, Perspective)
@@ -1443,8 +1561,8 @@
float perspectiveValue;
if (primitiveValue->isLength()) {
perspectiveValue = primitiveValue->computeLength<float>(state.cssToLengthConversionData());
- } else if (primitiveValue->isNumber()) {
- // For backward compatibility, treat valueless numbers as px.
+ } else if (id == CSSPropertyWebkitPerspective && primitiveValue->isNumber()) {
+ // Prefixed version treats unitless numbers as px.
perspectiveValue = CSSPrimitiveValue::create(primitiveValue->getDoubleValue(), CSSPrimitiveValue::CSS_PX)->computeLength<float>(state.cssToLengthConversionData());
} else {
return;
@@ -1740,12 +1858,6 @@
return;
}
- // FIXME: crbug.com/154772 Unimplemented css-transforms properties
- case CSSPropertyPerspective:
- case CSSPropertyPerspectiveOrigin:
- case CSSPropertyTransform:
- case CSSPropertyTransformOrigin:
- return;
// These properties are aliased and we already applied the property on the prefixed version.
case CSSPropertyAnimationDelay:
case CSSPropertyAnimationDirection:
@@ -1950,6 +2062,7 @@
case CSSPropertyWebkitMaskRepeatX:
case CSSPropertyWebkitMaskRepeatY:
case CSSPropertyWebkitMaskSize:
+ case CSSPropertyPerspectiveOrigin:
case CSSPropertyWebkitPerspectiveOrigin:
case CSSPropertyWebkitPerspectiveOriginX:
case CSSPropertyWebkitPerspectiveOriginY:
@@ -1967,6 +2080,7 @@
case CSSPropertyWebkitTransformOriginX:
case CSSPropertyWebkitTransformOriginY:
case CSSPropertyWebkitTransformOriginZ:
+ case CSSPropertyTransformOrigin:
case CSSPropertyTransformStyle:
case CSSPropertyWebkitTransformStyle:
case CSSPropertyWebkitTransitionDelay:
@@ -1979,7 +2093,6 @@
case CSSPropertyWebkitClipPath:
case CSSPropertyWebkitWrapFlow:
case CSSPropertyShapeMargin:
- case CSSPropertyShapePadding:
case CSSPropertyShapeImageThreshold:
case CSSPropertyWebkitWrapThrough:
case CSSPropertyShapeOutside:
diff --git a/Source/core/css/resolver/StyleResolver.cpp b/Source/core/css/resolver/StyleResolver.cpp
index 0d1fee7..4094b23 100644
--- a/Source/core/css/resolver/StyleResolver.cpp
+++ b/Source/core/css/resolver/StyleResolver.cpp
@@ -1084,7 +1084,7 @@
// the style to impose the stacking rules. Note that this is also
// done in StyleResolver::adjustRenderStyle().
RenderStyle* style = state.style();
- if (style->hasAutoZIndex() && (style->opacity() < 1.0f || style->hasTransform()))
+ if (style->hasAutoZIndex() && (style->opacity() < 1.0f || style->hasTransformRelatedProperty()))
style->setZIndex(0);
// Start loading resources used by animations.
diff --git a/Source/core/css/resolver/ViewportStyleResolver.cpp b/Source/core/css/resolver/ViewportStyleResolver.cpp
index 2a5d3f1..84b1c11 100644
--- a/Source/core/css/resolver/ViewportStyleResolver.cpp
+++ b/Source/core/css/resolver/ViewportStyleResolver.cpp
@@ -45,8 +45,8 @@
DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(ViewportStyleResolver);
ViewportStyleResolver::ViewportStyleResolver(Document* document)
- : m_document(document),
- m_hasAuthorStyle(false)
+ : m_document(document)
+ , m_hasAuthorStyle(false)
{
ASSERT(m_document);
}
@@ -87,10 +87,8 @@
if (!m_document)
return;
- if (!m_propertySet || (!m_hasAuthorStyle && m_document->hasLegacyViewportTag())) {
- ASSERT(!m_hasAuthorStyle);
- m_propertySet = nullptr;
- m_document->setViewportDescription(ViewportDescription());
+ if (!m_propertySet) {
+ m_document->setViewportDescription(ViewportDescription(ViewportDescription::UserAgentStyleSheet));
return;
}