diff options
Diffstat (limited to 'Source/WebCore/rendering/RenderIFrame.cpp')
-rw-r--r-- | Source/WebCore/rendering/RenderIFrame.cpp | 94 |
1 files changed, 13 insertions, 81 deletions
diff --git a/Source/WebCore/rendering/RenderIFrame.cpp b/Source/WebCore/rendering/RenderIFrame.cpp index 3acb581df..ea737a4f9 100644 --- a/Source/WebCore/rendering/RenderIFrame.cpp +++ b/Source/WebCore/rendering/RenderIFrame.cpp @@ -10,10 +10,10 @@ * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR @@ -30,7 +30,6 @@ #include "FrameView.h" #include "HTMLIFrameElement.h" #include "HTMLNames.h" -#include "Page.h" #include "RenderView.h" #include "Settings.h" #include <wtf/StackStats.h> @@ -39,54 +38,24 @@ namespace WebCore { using namespace HTMLNames; -RenderIFrame::RenderIFrame(HTMLIFrameElement& element, PassRef<RenderStyle> style) - : RenderFrameBase(element, std::move(style)) +RenderIFrame::RenderIFrame(HTMLIFrameElement& element, RenderStyle&& style) + : RenderFrameBase(element, WTFMove(style)) { } HTMLIFrameElement& RenderIFrame::iframeElement() const { - return toHTMLIFrameElement(RenderFrameBase::frameOwnerElement()); + return downcast<HTMLIFrameElement>(RenderFrameBase::frameOwnerElement()); } bool RenderIFrame::shouldComputeSizeAsReplaced() const { - // When we're seamless, we use normal block/box sizing code except when inline. - return !isSeamless(); + return true; } bool RenderIFrame::isInlineBlockOrInlineTable() const { - return isSeamless() && isInline(); -} - -LayoutUnit RenderIFrame::minPreferredLogicalWidth() const -{ - if (!isSeamless()) - return RenderFrameBase::minPreferredLogicalWidth(); - - RenderView* childRoot = contentRootRenderer(); - if (!childRoot) - return 0; - - return childRoot->minPreferredLogicalWidth() + borderAndPaddingLogicalWidth(); -} - -LayoutUnit RenderIFrame::maxPreferredLogicalWidth() const -{ - if (!isSeamless()) - return RenderFrameBase::maxPreferredLogicalWidth(); - - RenderView* childRoot = contentRootRenderer(); - if (!childRoot) - return 0; - - return childRoot->maxPreferredLogicalWidth() + borderAndPaddingLogicalWidth(); -} - -bool RenderIFrame::isSeamless() const -{ - return iframeElement().shouldDisplaySeamlessly(); + return isInline(); } bool RenderIFrame::requiresLayer() const @@ -102,14 +71,7 @@ RenderView* RenderIFrame::contentRootRenderer() const bool RenderIFrame::flattenFrame() const { - Frame* frame = iframeElement().document().frame(); - - if (isSeamless()) - return false; // Seamless iframes are already "flat", don't try to flatten them. - - bool enabled = frame && frame->settings().frameFlatteningEnabled(); - - if (!enabled || !frame->page()) + if (!settings().frameFlatteningEnabled()) return false; if (style().width().isFixed() && style().height().isFixed()) { @@ -125,47 +87,17 @@ bool RenderIFrame::flattenFrame() const return boundingRect.maxX() > 0 && boundingRect.maxY() > 0; } -void RenderIFrame::layoutSeamlessly() -{ - updateLogicalWidth(); - // FIXME: Containers set their height to 0 before laying out their kids (as we're doing here) - // however, this causes FrameView::layout() to add vertical scrollbars, incorrectly inflating - // the resulting contentHeight(). We'll need to make FrameView::layout() smarter. - setLogicalHeight(0); - updateWidgetPosition(); // Tell the Widget about our new width/height (it will also layout the child document). - - // Laying out our kids is normally responsible for adjusting our height, so we set it here. - // Replaced elements normally do not respect padding, but seamless elements should: we'll add - // both padding and border to the child's logical height here. - FrameView* childFrameView = childView(); - if (childFrameView) // Widget should never be null during layout(), but just in case. - setLogicalHeight(childFrameView->contentsHeight() + borderTop() + borderBottom() + paddingTop() + paddingBottom()); - updateLogicalHeight(); - - updateWidgetPosition(); // Notify the Widget of our final height. - - // Assert that the child document did a complete layout. - RenderView* childRoot = childFrameView ? childFrameView->frame().contentRenderer() : 0; - ASSERT(!childFrameView || !childFrameView->layoutPending()); - ASSERT_UNUSED(childRoot, !childRoot || !childRoot->needsLayout()); -} - void RenderIFrame::layout() { StackStats::LayoutCheckPoint layoutCheckPoint; ASSERT(needsLayout()); - if (isSeamless()) { - layoutSeamlessly(); - // Do not return so as to share the layer and overflow updates below. - } else { - updateLogicalWidth(); - // No kids to layout as a replaced element. - updateLogicalHeight(); + updateLogicalWidth(); + // No kids to layout as a replaced element. + updateLogicalHeight(); - if (flattenFrame()) - layoutWithFlattening(style().width().isFixed(), style().height().isFixed()); - } + if (flattenFrame()) + layoutWithFlattening(style().width().isFixed(), style().height().isFixed()); clearOverflow(); addVisualEffectOverflow(); |