Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(685)

Side by Side Diff: Source/web/WebViewImpl.cpp

Issue 380303003: Enable resize and layout for frames with RemoteFrame ancestors (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« Source/web/WebViewImpl.h ('K') | « Source/web/WebViewImpl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 1571 matching lines...) Expand 10 before | Expand all | Expand 10 after
1582 } 1582 }
1583 1583
1584 void WebViewImpl::resizePinchViewport(const WebSize& newSize) 1584 void WebViewImpl::resizePinchViewport(const WebSize& newSize)
1585 { 1585 {
1586 if (!pinchVirtualViewportEnabled()) 1586 if (!pinchVirtualViewportEnabled())
1587 return; 1587 return;
1588 1588
1589 page()->frameHost().pinchViewport().setSize(newSize); 1589 page()->frameHost().pinchViewport().setSize(newSize);
1590 } 1590 }
1591 1591
1592 WebLocalFrameImpl* WebViewImpl::localFrameRoot()
1593 {
1594 // FIXME: This is a temporary method that finds the first localFrame in a tr aversal.
1595 // This is equivalent to mainFrame() if the mainFrame is in-process. We need to create
1596 // separate WebWidgets to be created by RenderWidgets, which are associated with *all*
1597 // local frame roots, not just the first one in the tree. Until then, this l imits us
1598 // to having only one functioning connected LocalFrame subtree per process.
1599 for (WebCore::Frame* frame = page()->mainFrame(); frame; frame = frame->tree ().traverseNext()) {
1600 if (frame->isLocalRoot())
1601 return WebLocalFrameImpl::fromFrame(toLocalFrame(frame));
1602 }
1603 return 0;
1604 }
1605
1592 void WebViewImpl::resize(const WebSize& newSize) 1606 void WebViewImpl::resize(const WebSize& newSize)
1593 { 1607 {
1594 if (m_shouldAutoResize || m_size == newSize) 1608 if (m_shouldAutoResize || m_size == newSize)
1595 return; 1609 return;
1596 1610
1597 FrameView* view = mainFrameImpl()->frameView(); 1611 FrameView* view = localFrameRoot()->frameView();
1598 if (!view) 1612 if (!view)
1599 return; 1613 return;
1600 1614
1601 WebSize oldSize = m_size; 1615 WebSize oldSize = m_size;
1602 float oldPageScaleFactor = pageScaleFactor(); 1616 float oldPageScaleFactor = pageScaleFactor();
1603 int oldContentsWidth = contentsSize().width(); 1617 int oldContentsWidth = contentsSize().width();
1604 1618
1605 m_size = newSize; 1619 m_size = newSize;
1606 1620
1607 bool shouldAnchorAndRescaleViewport = settings()->mainFrameResizesAreOrienta tionChanges() 1621 bool shouldAnchorAndRescaleViewport = settings()->mainFrameResizesAreOrienta tionChanges()
1608 && oldSize.width && oldContentsWidth && newSize.width != oldSize.width & & !m_fullscreenController->isFullscreen(); 1622 && oldSize.width && oldContentsWidth && newSize.width != oldSize.width & & !m_fullscreenController->isFullscreen();
1609 1623
1610 ViewportAnchor viewportAnchor(&mainFrameImpl()->frame()->eventHandler()); 1624 ViewportAnchor viewportAnchor(&mainFrameImpl()->frame()->eventHandler());
1611 if (shouldAnchorAndRescaleViewport) { 1625 if (shouldAnchorAndRescaleViewport) {
1612 viewportAnchor.setAnchor(view->visibleContentRect(), 1626 viewportAnchor.setAnchor(view->visibleContentRect(),
1613 FloatSize(viewportAnchorXCoord, viewportAnchorY Coord)); 1627 FloatSize(viewportAnchorXCoord, viewportAnchorY Coord));
1614 } 1628 }
1615 1629
1616 { 1630 {
1617 // Avoids unnecessary invalidations while various bits of state in FastT extAutosizer are updated. 1631 // FIXME: FastTextAutosizer does not yet support out-of-process frames.
1618 FastTextAutosizer::DeferUpdatePageInfo deferUpdatePageInfo(page()); 1632 if (!mainFrameImpl()->frame()->isLocalFrame()) {
1633 // Avoids unnecessary invalidations while various bits of state in F astTextAutosizer are updated.
1634 FastTextAutosizer::DeferUpdatePageInfo deferUpdatePageInfo(page());
1635 }
1619 1636
1620 m_pageScaleConstraintsSet.didChangeViewSize(m_size); 1637 m_pageScaleConstraintsSet.didChangeViewSize(m_size);
1621 1638
1622 updatePageDefinedViewportConstraints(mainFrameImpl()->frame()->document( )->viewportDescription()); 1639 updatePageDefinedViewportConstraints(localFrameRoot()->frame()->document ()->viewportDescription());
1623 updateMainFrameLayoutSize(); 1640 updateMainFrameLayoutSize();
1624 1641
1625 // If the virtual viewport pinch mode is enabled, the main frame will be resized 1642 // If the virtual viewport pinch mode is enabled, the main frame will be resized
1626 // after layout so it can be sized to the contentsSize. 1643 // after layout so it can be sized to the contentsSize.
1627 if (!pinchVirtualViewportEnabled() && mainFrameImpl()->frameView()) 1644 if (!pinchVirtualViewportEnabled() && localFrameRoot()->frameView())
1628 mainFrameImpl()->frameView()->resize(m_size); 1645 localFrameRoot()->frameView()->resize(m_size);
1629 1646
1630 if (pinchVirtualViewportEnabled()) 1647 if (pinchVirtualViewportEnabled())
1631 page()->frameHost().pinchViewport().setSize(m_size); 1648 page()->frameHost().pinchViewport().setSize(m_size);
1632 1649
1633 // When device emulation is enabled, device size values may change - the y are 1650 // When device emulation is enabled, device size values may change - the y are
1634 // usually set equal to the view size. These values are not considered v iewport-dependent 1651 // usually set equal to the view size. These values are not considered v iewport-dependent
1635 // (see MediaQueryExp::isViewportDependent), since they are only viewpor t-dependent in emulation mode, 1652 // (see MediaQueryExp::isViewportDependent), since they are only viewpor t-dependent in emulation mode,
1636 // and thus will not be invalidated in |FrameView::performPreLayoutTasks |. 1653 // and thus will not be invalidated in |FrameView::performPreLayoutTasks |.
1637 // Therefore we should force explicit media queries invalidation here. 1654 // Therefore we should force explicit media queries invalidation here.
1638 if (page()->inspectorController().deviceEmulationEnabled()) { 1655 if (page()->inspectorController().deviceEmulationEnabled()) {
1639 if (Document* document = mainFrameImpl()->frame()->document()) 1656 if (Document* document = localFrameRoot()->frame()->document())
1640 document->mediaQueryAffectingValueChanged(); 1657 document->mediaQueryAffectingValueChanged();
1641 } 1658 }
1642 } 1659 }
1643 1660
1644 if (settings()->viewportEnabled() && !m_fixedLayoutSizeLock) { 1661 if (settings()->viewportEnabled() && !m_fixedLayoutSizeLock) {
1645 // Relayout immediately to recalculate the minimum scale limit. 1662 // Relayout immediately to recalculate the minimum scale limit.
1646 if (view->needsLayout()) 1663 if (view->needsLayout())
1647 view->layout(); 1664 view->layout();
1648 1665
1649 if (shouldAnchorAndRescaleViewport) { 1666 if (shouldAnchorAndRescaleViewport) {
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1728 1745
1729 if (m_continuousPaintingEnabled) { 1746 if (m_continuousPaintingEnabled) {
1730 ContinuousPainter::setNeedsDisplayRecursive(m_rootGraphicsLayer, m_pageO verlays.get()); 1747 ContinuousPainter::setNeedsDisplayRecursive(m_rootGraphicsLayer, m_pageO verlays.get());
1731 m_client->scheduleAnimation(); 1748 m_client->scheduleAnimation();
1732 } 1749 }
1733 } 1750 }
1734 1751
1735 void WebViewImpl::layout() 1752 void WebViewImpl::layout()
1736 { 1753 {
1737 TRACE_EVENT0("blink", "WebViewImpl::layout"); 1754 TRACE_EVENT0("blink", "WebViewImpl::layout");
1738 PageWidgetDelegate::layout(m_page.get()); 1755 PageWidgetDelegate::layout(m_page.get(), localFrameRoot()->frame());
1739 updateLayerTreeBackgroundColor(); 1756 updateLayerTreeBackgroundColor();
1740 1757
1741 for (size_t i = 0; i < m_linkHighlights.size(); ++i) 1758 for (size_t i = 0; i < m_linkHighlights.size(); ++i)
1742 m_linkHighlights[i]->updateGeometry(); 1759 m_linkHighlights[i]->updateGeometry();
1743 1760
1744 if (m_devToolsAgent) 1761 if (m_devToolsAgent)
1745 m_devToolsAgent->didLayout(); 1762 m_devToolsAgent->didLayout();
1746 } 1763 }
1747 1764
1748 void WebViewImpl::paint(WebCanvas* canvas, const WebRect& rect) 1765 void WebViewImpl::paint(WebCanvas* canvas, const WebRect& rect)
(...skipping 2436 matching lines...) Expand 10 before | Expand all | Expand 10 after
4185 const PageScaleConstraints& constraints = m_pageScaleConstraintsSet.pageDefi nedConstraints(); 4202 const PageScaleConstraints& constraints = m_pageScaleConstraintsSet.pageDefi nedConstraints();
4186 4203
4187 if (!mainFrameImpl() || !mainFrameImpl()->frameView()) 4204 if (!mainFrameImpl() || !mainFrameImpl()->frameView())
4188 return false; 4205 return false;
4189 4206
4190 return mainFrameImpl()->frameView()->layoutSize().width() == m_size.width 4207 return mainFrameImpl()->frameView()->layoutSize().width() == m_size.width
4191 || (constraints.minimumScale == constraints.maximumScale && constraints. minimumScale != -1); 4208 || (constraints.minimumScale == constraints.maximumScale && constraints. minimumScale != -1);
4192 } 4209 }
4193 4210
4194 } // namespace blink 4211 } // namespace blink
OLDNEW
« Source/web/WebViewImpl.h ('K') | « Source/web/WebViewImpl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698