Index: third_party/WebKit/Source/core/layout/LayoutBlock.cpp |
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlock.cpp b/third_party/WebKit/Source/core/layout/LayoutBlock.cpp |
index 841db4b205808d10e89768392d1ad3c662705690..7aa6ac9b9597bf7be00230dd6c2fce164c8098bc 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutBlock.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutBlock.cpp |
@@ -239,7 +239,17 @@ void LayoutBlock::styleDidChange(StyleDifference diff, |
textAutosizer->record(this); |
propagateStyleToAnonymousChildren(); |
+ |
+ // The LayoutView is always a container of fixed positioned descendants. In |
+ // addition, SVG foreignObjects become such containers, so that descendants |
+ // of a foreignObject cannot escape it. Similarly, text controls let authors |
+ // select elements inside that are created by user agent shadow DOM, and we |
+ // have (C++) code that assumes that the elements are indeed contained by the |
+ // text control. So just make sure this is the case. Finally, computed style |
+ // may turn us into a container of all things, e.g. if the element is |
+ // transformed, or contain:paint is specified. |
setCanContainFixedPositionObjects(isLayoutView() || isSVGForeignObject() || |
+ isTextControl() || |
newStyle.canContainFixedPositionObjects()); |
// It's possible for our border/padding to change, but for the overall logical |