void LayoutTreeBuilderForElement::createLayoutObject() { ComputedStyle& style = this->style(); LayoutObject* newLayoutObject = m_node->createLayoutObject(style); if (!newLayoutObject) return; LayoutObject* parentLayoutObject = this->parentLayoutObject(); if (!parentLayoutObject->isChildAllowed(newLayoutObject, style)) { newLayoutObject->destroy(); return; } // Make sure the LayoutObject already knows it is going to be added to a LayoutFlowThread before we set the style // for the first time. Otherwise code using inLayoutFlowThread() in the styleWillChange and styleDidChange will fail. newLayoutObject->setIsInsideFlowThread(parentLayoutObject->isInsideFlowThread()); LayoutObject* nextLayoutObject = this->nextLayoutObject(); m_node->setLayoutObject(newLayoutObject); newLayoutObject->setStyle(&style); // setStyle() can depend on layoutObject() already being set. if (Fullscreen::isActiveFullScreenElement(*m_node)) { newLayoutObject = LayoutFullScreen::wrapLayoutObject(newLayoutObject, parentLayoutObject, &m_node->document()); if (!newLayoutObject) return; } // Note: Adding newLayoutObject instead of layoutObject(). layoutObject() may be a child of newLayoutObject. parentLayoutObject->addChild(newLayoutObject, nextLayoutObject); }