Changeset 258864 in webkit
- Timestamp:
- Mar 23, 2020 11:49:09 AM (4 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r258863 r258864 1 2020-03-23 Truitt Savell <tsavell@apple.com> 2 3 Unreviewed, reverting r258847. 4 5 Broke testing on Mac Debug with an Assert 6 7 Reverted changeset: 8 9 "[LFC] Layout::Box::initialContainingBlock() should return 10 const InitialContainingBlock&" 11 https://bugs.webkit.org/show_bug.cgi?id=209406 12 https://trac.webkit.org/changeset/258847 13 1 14 2020-03-23 Kate Cheney <katherine_cheney@apple.com> 2 15 -
trunk/Source/WebCore/layout/FormattingContext.cpp
r258847 r258864 36 36 #include "LayoutContext.h" 37 37 #include "LayoutDescendantIterator.h" 38 #include "LayoutInitialContainingBlock.h"39 38 #include "LayoutReplacedBox.h" 40 39 #include "LayoutState.h" … … 194 193 #if ASSERT_ENABLED 195 194 auto isOkToAccessDisplayBox = [&] { 196 if (! is<InitialContainingBlock>(layoutBox) && &layoutBox.formattingContextRoot() == &root()) {195 if (!layoutBox.isInitialContainingBlock() && &layoutBox.formattingContextRoot() == &root()) { 197 196 // This is the non-escape case of accessing a box's geometry information within the same formatting context. 198 197 return true; … … 206 205 if (*escapeReason == EscapeReason::DocumentBoxStrechesToViewportQuirk) { 207 206 ASSERT(layoutState().inQuirksMode()); 208 return is<InitialContainingBlock>(layoutBox);207 return layoutBox.isInitialContainingBlock(); 209 208 } 210 209 211 210 if (*escapeReason == EscapeReason::BodyStrechesToViewportQuirk) { 212 211 ASSERT(layoutState().inQuirksMode()); 213 return is<InitialContainingBlock>(layoutBox) || layoutBox.isDocumentBox();212 return layoutBox.isInitialContainingBlock() || layoutBox.isDocumentBox(); 214 213 215 214 } 216 215 217 216 if (*escapeReason == EscapeReason::StrokeOverflowNeedsViewportGeometry) 218 return is<InitialContainingBlock>(layoutBox);217 return layoutBox.isInitialContainingBlock(); 219 218 220 219 if (*escapeReason == EscapeReason::NeedsGeometryFromEstablishedFormattingContext) { … … 245 244 // Find the first containing block with fixed height quirk. See Quirks::heightValueOfNearestContainingBlockWithFixedHeight. 246 245 // This is only to check if the targetFormattingRoot is an ancestor formatting root. 247 if ( is<InitialContainingBlock>(layoutBox))246 if (layoutBox.isInitialContainingBlock()) 248 247 return true; 249 248 auto& targetFormattingRoot = layoutBox.formattingContextRoot(); … … 253 252 return true; 254 253 ancestorFormattingContextRoot = &ancestorFormattingContextRoot->formattingContextRoot(); 255 if ( is<InitialContainingBlock>(*ancestorFormattingContextRoot))254 if (ancestorFormattingContextRoot->isInitialContainingBlock()) 256 255 return true; 257 256 } … … 282 281 if (!root.hasChild()) 283 282 return; 284 if (!root.isPositioned() && ! is<InitialContainingBlock>(root))283 if (!root.isPositioned() && !root.isInitialContainingBlock()) 285 284 return; 286 285 // Collect the out-of-flow descendants at the formatting root level (as opposed to at the containing block level, though they might be the same). -
trunk/Source/WebCore/layout/FormattingContextQuirks.cpp
r258847 r258864 31 31 #include "DisplayBox.h" 32 32 #include "LayoutBox.h" 33 #include "LayoutInitialContainingBlock.h"34 33 35 34 namespace WebCore { … … 61 60 } 62 61 63 if ( is<InitialContainingBlock>(*containingBlock))62 if (containingBlock->isInitialContainingBlock()) 64 63 break; 65 64 containingBlock = &containingBlock->containingBlock(); -
trunk/Source/WebCore/layout/blockformatting/BlockFormattingContextQuirks.cpp
r258847 r258864 33 33 #include "LayoutBox.h" 34 34 #include "LayoutContainerBox.h" 35 #include "LayoutInitialContainingBlock.h"36 35 #include "LayoutState.h" 37 36 -
trunk/Source/WebCore/layout/displaytree/DisplayPainter.cpp
r258847 r258864 37 37 #include "IntRect.h" 38 38 #include "LayoutContainerBox.h" 39 #include "LayoutInitialContainingBlock.h"40 39 #include "LayoutState.h" 41 40 #include "RenderStyle.h" … … 147 146 if (!layoutState.hasDisplayBox(layoutBox)) 148 147 return { }; 149 if ( is<Layout::InitialContainingBlock>(layoutBox))148 if (layoutBox.isInitialContainingBlock()) 150 149 return layoutState.displayBoxForLayoutBox(layoutBox); 151 150 152 151 auto absoluteBox = Box { layoutState.displayBoxForLayoutBox(layoutBox) }; 153 for (auto* containingBlock = &layoutBox.containingBlock(); ! is<Layout::InitialContainingBlock>(*containingBlock); containingBlock = &containingBlock->containingBlock())152 for (auto* containingBlock = &layoutBox.containingBlock(); !containingBlock->isInitialContainingBlock(); containingBlock = &containingBlock->containingBlock()) 154 153 absoluteBox.moveBy(layoutState.displayBoxForLayoutBox(*containingBlock).topLeft()); 155 154 return absoluteBox; -
trunk/Source/WebCore/layout/invalidation/InvalidationState.cpp
r258847 r258864 43 43 { 44 44 // We never lay out the initial containing block. It always has pre-determined geometry. 45 ASSERT(! is<InitialContainingBlock>(layoutBox));45 ASSERT(!layoutBox.isInitialContainingBlock()); 46 46 // FIXME: This is just a placeholder implementation. 47 47 m_formattingContextRoots.add(&layoutBox.formattingContextRoot()); -
trunk/Source/WebCore/layout/layouttree/LayoutBox.cpp
r258847 r258864 31 31 #include "DisplayBox.h" 32 32 #include "LayoutContainerBox.h" 33 #include "LayoutInitialContainingBlock.h"34 33 #include "LayoutPhase.h" 35 34 #include "LayoutState.h" … … 72 71 { 73 72 // ICB always creates a new (inital) block formatting context. 74 if (is <ContainerBox>(*this))73 if (isInitialContainingBlock()) 75 74 return true; 76 75 … … 185 184 ASSERT(!Phase::isInTreeBuilding()); 186 185 // If we ever end up here with the ICB, we must be doing something not-so-great. 187 RELEASE_ASSERT(!is <InitialContainingBlock>(*this));186 RELEASE_ASSERT(!isInitialContainingBlock()); 188 187 // The containing block in which the root element lives is a rectangle called the initial containing block. 189 188 // For other elements, if the element's position is 'relative' or 'static', the containing block is formed by the … … 194 193 if (!isPositioned() || isInFlowPositioned()) { 195 194 auto* ancestor = parent(); 196 for (; ! is<InitialContainingBlock>(*ancestor); ancestor = ancestor->parent()) {195 for (; !ancestor->isInitialContainingBlock(); ancestor = ancestor->parent()) { 197 196 if (ancestor->isBlockContainerBox() || ancestor->establishesFormattingContext()) 198 197 return *ancestor; … … 203 202 if (isFixedPositioned()) { 204 203 auto* ancestor = parent(); 205 for (; ! is<InitialContainingBlock>(*ancestor); ancestor = ancestor->parent()) {204 for (; !ancestor->isInitialContainingBlock(); ancestor = ancestor->parent()) { 206 205 if (ancestor->style().hasTransform()) 207 206 return *ancestor; … … 212 211 if (isOutOfFlowPositioned()) { 213 212 auto* ancestor = parent(); 214 for (; ! is<InitialContainingBlock>(*ancestor); ancestor = ancestor->parent()) {213 for (; !ancestor->isInitialContainingBlock(); ancestor = ancestor->parent()) { 215 214 if (ancestor->isPositioned() || ancestor->style().hasTransform()) 216 215 return *ancestor; … … 228 227 ASSERT(!Phase::isInTreeBuilding()); 229 228 // We should never need to ask this question on the ICB. 230 ASSERT(!is <InitialContainingBlock>(*this));229 ASSERT(!isInitialContainingBlock()); 231 230 // A box lives in the same formatting context as its containing block unless the containing block establishes a formatting context. 232 231 // However relatively positioned (inflow) inline container lives in the formatting context where its parent lives unless … … 242 241 } 243 242 244 const InitialContainingBlock& Box::initialContainingBlock() const245 { 246 if (is <InitialContainingBlock>(*this))247 return downcast< InitialContainingBlock>(*this);243 const ContainerBox& Box::initialContainingBlock() const 244 { 245 if (isInitialContainingBlock()) 246 return downcast<ContainerBox>(*this); 248 247 249 248 auto* ancestor = parent(); 250 249 for (; ancestor->parent(); ancestor = ancestor->parent()) { } 251 250 252 return downcast<InitialContainingBlock>(*ancestor);251 return *ancestor; 253 252 } 254 253 … … 256 255 { 257 256 ASSERT(formattingContextRoot.establishesFormattingContext()); 258 ASSERT(!is <InitialContainingBlock>(*this));257 ASSERT(!isInitialContainingBlock()); 259 258 auto* ancestor = &containingBlock(); 260 259 while (ancestor) { 261 260 if (ancestor == &formattingContextRoot) 262 261 return true; 263 if ( is<InitialContainingBlock>(*ancestor))262 if (ancestor->isInitialContainingBlock()) 264 263 return false; 265 264 ancestor = &ancestor->containingBlock(); … … 362 361 return true; 363 362 } 364 if (is <InitialContainingBlock>(*this)) {363 if (isInitialContainingBlock()) { 365 364 auto* documentBox = downcast<ContainerBox>(*this).firstChild(); 366 365 if (!documentBox || !documentBox->isDocumentBox() || !is<ContainerBox>(documentBox)) -
trunk/Source/WebCore/layout/layouttree/LayoutBox.h
r258847 r258864 41 41 42 42 class ContainerBox; 43 class InitialContainingBlock;44 43 class LayoutState; 45 44 class TreeBuilder; … … 63 62 64 63 enum BaseTypeFlag { 65 BoxFlag 66 InlineTextBox Flag= 1 << 1,67 LineBreakBox Flag= 1 << 2,68 ReplacedBox Flag= 1 << 3,69 InitialContainingBlock Flag= 1 << 4,70 ContainerBoxFlag 64 BoxFlag = 1 << 0, 65 InlineTextBox = 1 << 1, 66 LineBreakBox = 1 << 2, 67 ReplacedBox = 1 << 3, 68 InitialContainingBlock = 1 << 4, 69 ContainerBoxFlag = 1 << 5 71 70 }; 72 71 typedef unsigned BaseTypeFlags; … … 98 97 const ContainerBox& containingBlock() const; 99 98 const ContainerBox& formattingContextRoot() const; 100 const InitialContainingBlock& initialContainingBlock() const;99 const ContainerBox& initialContainingBlock() const; 101 100 102 101 bool isInFormattingContextOf(const ContainerBox&) const; … … 111 110 bool isInlineTableBox() const; 112 111 bool isBlockContainerBox() const; 113 bool isInitialContainingBlock() const { return m_baseTypeFlags & InitialContainingBlock Flag; }112 bool isInitialContainingBlock() const { return m_baseTypeFlags & InitialContainingBlock; } 114 113 115 114 bool isDocumentBox() const { return m_elementAttributes && m_elementAttributes.value().elementType == ElementType::Document; } … … 140 139 141 140 bool isContainerBox() const { return m_baseTypeFlags & ContainerBoxFlag; } 142 bool isInlineTextBox() const { return m_baseTypeFlags & InlineTextBox Flag; }143 bool isLineBreakBox() const { return m_baseTypeFlags & LineBreakBox Flag; }144 bool isReplacedBox() const { return m_baseTypeFlags & ReplacedBox Flag; }141 bool isInlineTextBox() const { return m_baseTypeFlags & InlineTextBox; } 142 bool isLineBreakBox() const { return m_baseTypeFlags & LineBreakBox; } 143 bool isReplacedBox() const { return m_baseTypeFlags & ReplacedBox; } 145 144 146 145 bool isPaddingApplicable() const; -
trunk/Source/WebCore/layout/layouttree/LayoutInitialContainingBlock.cpp
r258847 r258864 38 38 39 39 InitialContainingBlock::InitialContainingBlock(RenderStyle&& style) 40 : ContainerBox({ }, WTFMove(style), Box::InitialContainingBlock Flag)40 : ContainerBox({ }, WTFMove(style), Box::InitialContainingBlock) 41 41 { 42 42 } -
trunk/Source/WebCore/layout/layouttree/LayoutInlineTextBox.cpp
r258847 r258864 38 38 39 39 InlineTextBox::InlineTextBox(String content, bool canUseSimplifiedContentMeasuring, RenderStyle&& style) 40 : Box({ }, WTFMove(style), Box::InlineTextBox Flag)40 : Box({ }, WTFMove(style), Box::InlineTextBox) 41 41 , m_content(content) 42 42 , m_canUseSimplifiedContentMeasuring(canUseSimplifiedContentMeasuring) -
trunk/Source/WebCore/layout/layouttree/LayoutLineBreakBox.cpp
r258847 r258864 38 38 39 39 LineBreakBox::LineBreakBox(bool isOptional, RenderStyle&& style) 40 : Box({ }, WTFMove(style), Box::LineBreakBox Flag)40 : Box({ }, WTFMove(style), Box::LineBreakBox) 41 41 , m_isOptional(isOptional) 42 42 { -
trunk/Source/WebCore/layout/layouttree/LayoutReplacedBox.cpp
r258847 r258864 38 38 39 39 ReplacedBox::ReplacedBox(RenderStyle&& style) 40 : Box({ }, WTFMove(style), Box::ReplacedBox Flag)40 : Box({ }, WTFMove(style), Box::ReplacedBox) 41 41 { 42 42 } -
trunk/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp
r258847 r258864 395 395 stream << "[float] "; 396 396 397 if ( is<InitialContainingBlock>(layoutBox))397 if (layoutBox.isInitialContainingBlock()) 398 398 stream << "Initial containing block"; 399 399 else if (layoutBox.isDocumentBox())
Note: See TracChangeset
for help on using the changeset viewer.