summaryrefslogtreecommitdiffstats
path: root/WebCore/rendering/RenderIFrame.cpp
diff options
context:
space:
mode:
authorPatrick Scott <phanna@android.com>2011-02-17 10:58:02 -0500
committerPatrick Scott <phanna@android.com>2011-02-25 13:04:41 -0500
commit5c9b9436a58504f9e48283bfd450c688df9f3d45 (patch)
tree034f51d8e5f447aae3c640b35f8b17d534942f53 /WebCore/rendering/RenderIFrame.cpp
parent3a89d2677bb5634df98cd01414220b8e095f58a9 (diff)
downloadexternal_webkit-5c9b9436a58504f9e48283bfd450c688df9f3d45.zip
external_webkit-5c9b9436a58504f9e48283bfd450c688df9f3d45.tar.gz
external_webkit-5c9b9436a58504f9e48283bfd450c688df9f3d45.tar.bz2
Fix frameset expansion.
Do not expand frames that cannot scroll. Use contentsWidth and contentsHeight instead of exposing docWidth. Trigger a layout of the parent if the FrameView's layout reveals a larger content dimension. Remove iframe flattening code. Bug: 3370518 Bug: 3323913 Change-Id: I60e89caf335bfaf271f90ffd538c65f3735572da
Diffstat (limited to 'WebCore/rendering/RenderIFrame.cpp')
-rw-r--r--WebCore/rendering/RenderIFrame.cpp129
1 files changed, 0 insertions, 129 deletions
diff --git a/WebCore/rendering/RenderIFrame.cpp b/WebCore/rendering/RenderIFrame.cpp
index 36d2449..19bca49 100644
--- a/WebCore/rendering/RenderIFrame.cpp
+++ b/WebCore/rendering/RenderIFrame.cpp
@@ -44,30 +44,6 @@ RenderIFrame::RenderIFrame(Element* element)
void RenderIFrame::computeLogicalHeight()
{
RenderPart::computeLogicalHeight();
-#ifdef ANDROID_FLATTEN_IFRAME
- if (!node()->hasTagName(iframeTag) || !widget() || !widget()->isFrameView())
- return;
- FrameView* view = static_cast<FrameView*>(widget());
- RenderView* root = static_cast<RenderView*>(view->frame()->contentRenderer());
- if (!root)
- return;
- // Do not expand if the scrollbars are suppressed and the height is fixed.
- bool scrolling = static_cast<HTMLIFrameElement*>(node())->scrollingMode() != ScrollbarAlwaysOff;
- if (!scrolling && style()->height().isFixed())
- return;
- // Update the widget
- updateWidgetPosition();
-
- // Layout to get the content height
- view->layout();
-
- int extraHeight = paddingTop() + paddingBottom() + borderTop() + borderBottom();
- setHeight(max(width(), view->contentsHeight() + extraHeight));
-
- // Update one last time to ensure the dimensions.
- updateWidgetPosition();
- return;
-#endif
if (!flattenFrame())
return;
@@ -86,38 +62,6 @@ void RenderIFrame::computeLogicalHeight()
void RenderIFrame::computeLogicalWidth()
{
RenderPart::computeLogicalWidth();
-#ifdef ANDROID_FLATTEN_IFRAME
- if (!node()->hasTagName(iframeTag) || !widget() || !widget()->isFrameView())
- return;
- FrameView* view = static_cast<FrameView*>(widget());
- RenderView* root = static_cast<RenderView*>(view->frame()->contentRenderer());
- if (!root)
- return;
- // Do not expand if the scrollbars are suppressed and the width is fixed.
- bool scrolling = static_cast<HTMLIFrameElement*>(node())->scrollingMode() != ScrollbarAlwaysOff;
- if (!scrolling && style()->width().isFixed())
- return;
- // Update the dimensions to get the correct minimum preferred
- // width
- updateWidgetPosition();
-
- int extraWidth = paddingLeft() + paddingRight() + borderLeft() + borderRight();
- // Set the width
- setWidth(max(width(), root->minPreferredLogicalWidth()) + extraWidth);
-
- // Update based on the new width
- updateWidgetPosition();
-
- // Layout to get the content width
- view->layout();
-
- setWidth(max(width(), view->contentsWidth() + extraWidth));
-
- // Update one last time to ensure the dimensions.
- updateWidgetPosition();
- return;
-#endif
-
if (!flattenFrame())
return;
@@ -166,79 +110,6 @@ void RenderIFrame::layout()
RenderPart::computeLogicalWidth();
RenderPart::computeLogicalHeight();
-#ifdef ANDROID_FLATTEN_IFRAME
- // Calculate the styled dimensions by subtracting the border and padding.
- int extraWidth = paddingLeft() + paddingRight() + borderLeft() + borderRight();
- int extraHeight = paddingTop() + paddingBottom() + borderTop() + borderBottom();
- int styleWidth = width() - extraWidth;
- int styleHeight = height() - extraHeight;
- // Some IFrames have a width and/or height of 1 when they are meant to be
- // hidden. If that is the case, do not try to expand.
- if (node()->hasTagName(iframeTag) && widget() && widget()->isFrameView() &&
- styleWidth > 1 && styleHeight > 1) {
- HTMLIFrameElement* element = static_cast<HTMLIFrameElement*>(node());
- bool scrolling = element->scrollingMode() != ScrollbarAlwaysOff;
- bool widthIsFixed = style()->width().isFixed();
- bool heightIsFixed = style()->height().isFixed();
- // If an iframe has a fixed dimension and suppresses scrollbars, it
- // will disrupt layout if we force it to expand. Plus on a desktop,
- // the extra content is not accessible.
- if (scrolling || !widthIsFixed || !heightIsFixed) {
- FrameView* view = static_cast<FrameView*>(widget());
- RenderView* root = view ? view->frame()->contentRenderer() : NULL;
- if (root && style()->visibility() != HIDDEN) {
- // Update the dimensions to get the correct minimum preferred
- // width
- updateWidgetPosition();
-
- // Use the preferred width if it is larger and only if
- // scrollbars are visible or the width style is not fixed.
- if (scrolling || !widthIsFixed)
- setWidth(max(width(), root->minPreferredLogicalWidth()) + extraWidth);
-
- // Resize the view to recalc the height.
- int h = height() - extraHeight;
- int w = width() - extraWidth;
- if (w > view->width())
- h = 0;
- if (w != view->width() || h != view->height()) {
- view->resize(w, h);
- }
-
- // Layout the view.
- view->layout();
-
- int contentHeight = view->contentsHeight();
- int contentWidth = view->contentsWidth();
- // Only change the width or height if scrollbars are visible or
- // if the style is not a fixed value. Use the maximum value so
- // that iframes never shrink.
- if (scrolling || !heightIsFixed)
- setHeight(max(height(), contentHeight + extraHeight));
- if (scrolling || !widthIsFixed)
- setWidth(max(width(), contentWidth + extraWidth));
-
- // Update one last time
- updateWidgetPosition();
-
- // Layout one more time to ensure all objects have the correct
- // height.
- view->layout();
-
-#if !ASSERT_DISABLED
- ASSERT(!view->layoutPending());
- ASSERT(!root->needsLayout());
- // Sanity check when assertions are enabled.
- RenderObject* c = root->nextInPreOrder();
- while (c) {
- ASSERT(!c->needsLayout());
- c = c->nextInPreOrder();
- }
-#endif
- }
- }
- }
-#endif
if (flattenFrame()) {
layoutWithFlattening(style()->width().isFixed(), style()->height().isFixed());
return;