| Index: third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
|
| diff --git a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
|
| index 3f89d3f1e5672e1be5a266bccba3a61b653a58b0..1196067e9c6eb6914d57bbe11334d570bd5d9d6b 100644
|
| --- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
|
| +++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
|
| @@ -1,5 +1,6 @@
|
| /*
|
| - * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved.
|
| + * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights
|
| + * reserved.
|
| *
|
| * Portions are Copyright (C) 1998 Netscape Communications Corporation.
|
| *
|
| @@ -24,7 +25,7 @@
|
| *
|
| * You should have received a copy of the GNU Lesser General Public
|
| * License along with this library; if not, write to the Free Software
|
| - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
| + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
| *
|
| * Alternatively, the contents of this file may be used under the terms
|
| * of either the Mozilla Public License Version 1.1, found at
|
| @@ -111,7 +112,8 @@ PaintLayerScrollableArea::PaintLayerScrollableArea(PaintLayer& layer)
|
| {
|
| Node* node = box().node();
|
| if (node && node->isElementNode()) {
|
| - // We save and restore only the scrollOffset as the other scroll values are recalculated.
|
| + // We save and restore only the scrollOffset as the other scroll values are
|
| + // recalculated.
|
| Element* element = toElement(node);
|
| m_scrollOffset = element->savedLayerScrollOffset();
|
| if (!m_scrollOffset.isZero()) {
|
| @@ -173,8 +175,9 @@ void PaintLayerScrollableArea::dispose() {
|
|
|
| clearScrollAnimators();
|
|
|
| - // Note: it is not safe to call ScrollAnchor::clear if the document is being destroyed,
|
| - // because LayoutObjectChildList::removeChildNode skips the call to willBeRemovedFromTree,
|
| + // Note: it is not safe to call ScrollAnchor::clear if the document is being
|
| + // destroyed, because LayoutObjectChildList::removeChildNode skips the call to
|
| + // willBeRemovedFromTree,
|
| // leaving the ScrollAnchor with a stale LayoutObject pointer.
|
| if (RuntimeEnabledFeatures::scrollAnchoringEnabled() &&
|
| !box().documentBeingDestroyed())
|
| @@ -264,8 +267,9 @@ static IntRect cornerRect(const LayoutBox& box,
|
| int horizontalThickness;
|
| int verticalThickness;
|
| if (!verticalScrollbar && !horizontalScrollbar) {
|
| - // FIXME: This isn't right. We need to know the thickness of custom scrollbars
|
| - // even when they don't exist in order to set the resizer square size properly.
|
| + // FIXME: This isn't right. We need to know the thickness of custom
|
| + // scrollbars even when they don't exist in order to set the resizer square
|
| + // size properly.
|
| horizontalThickness = ScrollbarTheme::theme().scrollbarThickness();
|
| verticalThickness = horizontalThickness;
|
| } else if (verticalScrollbar && !horizontalScrollbar) {
|
| @@ -285,7 +289,8 @@ static IntRect cornerRect(const LayoutBox& box,
|
| }
|
|
|
| IntRect PaintLayerScrollableArea::scrollCornerRect() const {
|
| - // We have a scrollbar corner when a scrollbar is visible and not filling the entire length of the box.
|
| + // We have a scrollbar corner when a scrollbar is visible and not filling the
|
| + // entire length of the box.
|
| // This happens when:
|
| // (a) A resizer is present and at least one scrollbar is present
|
| // (b) Both scrollbars are present.
|
| @@ -377,10 +382,12 @@ void PaintLayerScrollableArea::setScrollOffset(
|
| // compositing state, and remove this disabler.
|
| DisableCompositingQueryAsserts disabler;
|
|
|
| - // Update the positions of our child layers (if needed as only fixed layers should be impacted by a scroll).
|
| - // We don't update compositing layers, because we need to do a deep update from the compositing ancestor.
|
| + // Update the positions of our child layers (if needed as only fixed layers
|
| + // should be impacted by a scroll). We don't update compositing layers,
|
| + // because we need to do a deep update from the compositing ancestor.
|
| if (!frameView->isInPerformLayout()) {
|
| - // If we're in the middle of layout, we'll just update layers once layout has finished.
|
| + // If we're in the middle of layout, we'll just update layers once layout
|
| + // has finished.
|
| layer()->updateLayerPositionsAfterOverflowScroll(scrollDelta);
|
| // Update regions, scrolling may change the clip of a particular region.
|
| frameView->updateDocumentAnnotatedRegions();
|
| @@ -441,7 +448,8 @@ void PaintLayerScrollableArea::setScrollOffset(
|
| cache->handleScrollPositionChanged(&box());
|
| box().view()->clearHitTestCache();
|
|
|
| - // Inform the FrameLoader of the new scroll position, so it can be restored when navigating back.
|
| + // Inform the FrameLoader of the new scroll position, so it can be restored
|
| + // when navigating back.
|
| if (layer()->isRootLayer()) {
|
| frameView->frame().loader().saveScrollState();
|
| frameView->didChangeScrollOffset();
|
| @@ -622,7 +630,8 @@ int PaintLayerScrollableArea::pixelSnappedScrollHeight() const {
|
| }
|
|
|
| void PaintLayerScrollableArea::updateScrollOrigin() {
|
| - // This should do nothing prior to first layout; the if-clause will catch that.
|
| + // This should do nothing prior to first layout; the if-clause will catch
|
| + // that.
|
| if (overflowRect().isEmpty())
|
| return;
|
| LayoutPoint scrollableOverflow =
|
| @@ -669,7 +678,8 @@ void PaintLayerScrollableArea::updateAfterLayout() {
|
| hasVerticalOverflow && box().pixelSnappedClientWidth();
|
|
|
| {
|
| - // Hits in compositing/overflow/automatically-opt-into-composited-scrolling-after-style-change.html.
|
| + // Hits in
|
| + // compositing/overflow/automatically-opt-into-composited-scrolling-after-style-change.html.
|
| DisableCompositingQueryAsserts disabler;
|
|
|
| // overflow:scroll should just enable/disable.
|
| @@ -679,8 +689,8 @@ void PaintLayerScrollableArea::updateAfterLayout() {
|
| verticalScrollbar()->setEnabled(hasVerticalOverflow);
|
| }
|
|
|
| - // We need to layout again if scrollbars are added or removed by overflow:auto,
|
| - // or by changing between native and custom.
|
| + // We need to layout again if scrollbars are added or removed by
|
| + // overflow:auto, or by changing between native and custom.
|
| bool horizontalScrollbarShouldChange =
|
| (box().hasAutoHorizontalScrollbar() &&
|
| (hasHorizontalScrollbar() != shouldHaveAutoHorizontalScrollbar)) ||
|
| @@ -726,7 +736,8 @@ void PaintLayerScrollableArea::updateAfterLayout() {
|
| }
|
| if (relayoutIsPrevented) {
|
| // We're not doing re-layout right now, but we still want to
|
| - // add the scrollbar to the logical width now, to facilitate parent layout.
|
| + // add the scrollbar to the logical width now, to facilitate parent
|
| + // layout.
|
| box().updateLogicalWidth();
|
| PreventRelayoutScope::setBoxNeedsLayout(*this, hadHorizontalScrollbar,
|
| hadVerticalScrollbar);
|
| @@ -753,7 +764,8 @@ void PaintLayerScrollableArea::updateAfterLayout() {
|
| }
|
|
|
| {
|
| - // Hits in compositing/overflow/automatically-opt-into-composited-scrolling-after-style-change.html.
|
| + // Hits in
|
| + // compositing/overflow/automatically-opt-into-composited-scrolling-after-style-change.html.
|
| DisableCompositingQueryAsserts disabler;
|
|
|
| // Set up the range (and page step/line step).
|
| @@ -789,10 +801,10 @@ void PaintLayerScrollableArea::updateAfterLayout() {
|
| }
|
|
|
| void PaintLayerScrollableArea::clampScrollPositionsAfterLayout() {
|
| - // If a vertical scrollbar was removed, the min/max scroll positions may have changed,
|
| - // so the scroll positions needs to be clamped. If the scroll position did not change,
|
| - // but the scroll origin *did* change, we still need to notify the scrollbars to
|
| - // update their dimensions.
|
| + // If a vertical scrollbar was removed, the min/max scroll positions may have
|
| + // changed, so the scroll positions needs to be clamped. If the scroll
|
| + // position did not change, but the scroll origin *did* change, we still need
|
| + // to notify the scrollbars to update their dimensions.
|
|
|
| if (DelayScrollPositionClampScope::clampingIsDelayed()) {
|
| DelayScrollPositionClampScope::setNeedsClamp(this);
|
| @@ -882,7 +894,8 @@ void PaintLayerScrollableArea::updateAfterStyleChange(
|
| if (!canHaveOverflowScrollbars(box()))
|
| return;
|
|
|
| - // Avoid drawing two sets of scrollbars when one is provided by the visual viewport.
|
| + // Avoid drawing two sets of scrollbars when one is provided by the visual
|
| + // viewport.
|
| if (visualViewportSuppliesScrollbars()) {
|
| setHasHorizontalScrollbar(false);
|
| setHasVerticalScrollbar(false);
|
| @@ -901,9 +914,11 @@ void PaintLayerScrollableArea::updateAfterStyleChange(
|
| overflowDefinesAutomaticScrollbar(overflowY)) ||
|
| overflowRequiresScrollbar(overflowY);
|
|
|
| - // Look for the scrollbarModes and reset the needs Horizontal & vertical Scrollbar values based on scrollbarModes, as during force style change
|
| - // StyleResolver::styleForDocument returns documentStyle with no overflow values, due to which we are destorying the scrollbars that was
|
| - // already present.
|
| + // Look for the scrollbarModes and reset the needs Horizontal & vertical
|
| + // Scrollbar values based on scrollbarModes, as during force style change
|
| + // StyleResolver::styleForDocument returns documentStyle with no overflow
|
| + // values, due to which we are destorying the scrollbars that was already
|
| + // present.
|
| if (box().isLayoutView()) {
|
| if (LocalFrame* frame = box().frame()) {
|
| if (FrameView* frameView = frame->view()) {
|
| @@ -935,7 +950,8 @@ void PaintLayerScrollableArea::updateAfterStyleChange(
|
| verticalScrollbar()->setEnabled(true);
|
| }
|
|
|
| - // FIXME: Need to detect a swap from custom to native scrollbars (and vice versa).
|
| + // FIXME: Need to detect a swap from custom to native scrollbars (and vice
|
| + // versa).
|
| if (horizontalScrollbar())
|
| horizontalScrollbar()->styleChanged();
|
| if (verticalScrollbar())
|
| @@ -1141,7 +1157,8 @@ void PaintLayerScrollableArea::setHasHorizontalScrollbar(bool hasScrollbar) {
|
|
|
| updateScrollOrigin();
|
|
|
| - // Destroying or creating one bar can cause our scrollbar corner to come and go. We need to update the opposite scrollbar's style.
|
| + // Destroying or creating one bar can cause our scrollbar corner to come and
|
| + // go. We need to update the opposite scrollbar's style.
|
| if (hasHorizontalScrollbar())
|
| horizontalScrollbar()->styleChanged();
|
| if (hasVerticalScrollbar())
|
| @@ -1171,7 +1188,8 @@ void PaintLayerScrollableArea::setHasVerticalScrollbar(bool hasScrollbar) {
|
|
|
| updateScrollOrigin();
|
|
|
| - // Destroying or creating one bar can cause our scrollbar corner to come and go. We need to update the opposite scrollbar's style.
|
| + // Destroying or creating one bar can cause our scrollbar corner to come and
|
| + // go. We need to update the opposite scrollbar's style.
|
| if (hasHorizontalScrollbar())
|
| horizontalScrollbar()->styleChanged();
|
| if (hasVerticalScrollbar())
|
| @@ -1225,9 +1243,9 @@ void PaintLayerScrollableArea::positionOverflowControls() {
|
| m_resizer->setFrameRect(
|
| LayoutRect(resizerCornerRect(borderBox, ResizerForPointer)));
|
|
|
| - // FIXME, this should eventually be removed, once we are certain that composited
|
| - // controls get correctly positioned on a compositor update. For now, conservatively
|
| - // leaving this unchanged.
|
| + // FIXME, this should eventually be removed, once we are certain that
|
| + // composited controls get correctly positioned on a compositor update. For
|
| + // now, conservatively leaving this unchanged.
|
| if (layer()->hasCompositedLayerMapping())
|
| layer()->compositedLayerMapping()->positionOverflowControlsLayers();
|
| }
|
| @@ -1309,7 +1327,8 @@ bool PaintLayerScrollableArea::hitTestOverflowControls(
|
| }
|
| }
|
|
|
| - // FIXME: We should hit test the m_scrollCorner and pass it back through the result.
|
| + // FIXME: We should hit test the m_scrollCorner and pass it back through the
|
| + // result.
|
|
|
| return false;
|
| }
|
| @@ -1436,8 +1455,10 @@ void PaintLayerScrollableArea::invalidateStickyConstraintsFor(
|
|
|
| IntSize PaintLayerScrollableArea::offsetFromResizeCorner(
|
| const IntPoint& absolutePoint) const {
|
| - // Currently the resize corner is either the bottom right corner or the bottom left corner.
|
| - // FIXME: This assumes the location is 0, 0. Is this guaranteed to always be the case?
|
| + // Currently the resize corner is either the bottom right corner or the bottom
|
| + // left corner.
|
| + // FIXME: This assumes the location is 0, 0. Is this guaranteed to always be
|
| + // the case?
|
| IntSize elementSize = layer()->size();
|
| if (box().shouldPlaceBlockDirectionScrollbarOnLogicalLeft())
|
| elementSize.setWidth(0);
|
| @@ -1506,7 +1527,8 @@ void PaintLayerScrollableArea::resize(const PlatformEvent& evt,
|
| EResize resize = box().style()->resize();
|
| if (resize != RESIZE_VERTICAL && difference.width()) {
|
| if (element->isFormControlElement()) {
|
| - // Make implicit margins from the theme explicit (see <http://bugs.webkit.org/show_bug.cgi?id=9547>).
|
| + // Make implicit margins from the theme explicit (see
|
| + // <http://bugs.webkit.org/show_bug.cgi?id=9547>).
|
| element->setInlineStyleProperty(CSSPropertyMarginLeft,
|
| box().marginLeft() / zoomFactor,
|
| CSSPrimitiveValue::UnitType::Pixels);
|
| @@ -1525,7 +1547,8 @@ void PaintLayerScrollableArea::resize(const PlatformEvent& evt,
|
|
|
| if (resize != RESIZE_HORIZONTAL && difference.height()) {
|
| if (element->isFormControlElement()) {
|
| - // Make implicit margins from the theme explicit (see <http://bugs.webkit.org/show_bug.cgi?id=9547>).
|
| + // Make implicit margins from the theme explicit (see
|
| + // <http://bugs.webkit.org/show_bug.cgi?id=9547>).
|
| element->setInlineStyleProperty(CSSPropertyMarginTop,
|
| box().marginTop() / zoomFactor,
|
| CSSPrimitiveValue::UnitType::Pixels);
|
| @@ -1544,7 +1567,8 @@ void PaintLayerScrollableArea::resize(const PlatformEvent& evt,
|
|
|
| document.updateStyleAndLayout();
|
|
|
| - // FIXME (Radar 4118564): We should also autoscroll the window as necessary to keep the point under the cursor in view.
|
| + // FIXME (Radar 4118564): We should also autoscroll the window as necessary to
|
| + // keep the point under the cursor in view.
|
| }
|
|
|
| LayoutRect PaintLayerScrollableArea::scrollIntoView(
|
| @@ -1630,7 +1654,8 @@ void PaintLayerScrollableArea::updateCompositingLayersAfterScroll() {
|
| }
|
|
|
| bool PaintLayerScrollableArea::usesCompositedScrolling() const {
|
| - // See https://codereview.chromium.org/176633003/ for the tests that fail without this disabler.
|
| + // See https://codereview.chromium.org/176633003/ for the tests that fail
|
| + // without this disabler.
|
| DisableCompositingQueryAsserts disabler;
|
| return layer()->hasCompositedLayerMapping() &&
|
| layer()->compositedLayerMapping()->scrollingLayer();
|
| @@ -1660,9 +1685,10 @@ static bool layerNeedsCompositedScrolling(
|
| CompositorMutableProperty::kScrollLeft)))
|
| return true;
|
|
|
| - // TODO(schenney): LCD Text also requires integer scroll offsets for the layer. While we
|
| - // use integer scroll offsets locally when !layer->compositor()->preferCompositingToLCDTextEnabled(),
|
| - // we do not check offsets accumulated from the root (including translates). crbug.com/644833
|
| + // TODO(schenney): LCD Text also requires integer scroll offsets for the
|
| + // layer. While we use integer scroll offsets locally when
|
| + // !layer->compositor()->preferCompositingToLCDTextEnabled(), we do not check
|
| + // offsets accumulated from the root (including translates). crbug.com/644833
|
| bool backgroundSupportsLCDText =
|
| RuntimeEnabledFeatures::compositeOpaqueScrollersEnabled() &&
|
| layer->canPaintBackgroundOntoScrollingContentsLayer() &&
|
| @@ -1673,9 +1699,10 @@ static bool layerNeedsCompositedScrolling(
|
| !backgroundSupportsLCDText)
|
| return false;
|
|
|
| - // TODO(schenney) Tests fail if we do not also exclude layer->layoutObject()->style()->hasBorderDecoration()
|
| - // (missing background behind dashed borders). Resolve this case, or not, and update this check with
|
| - // the results.
|
| + // TODO(schenney) Tests fail if we do not also exclude
|
| + // layer->layoutObject()->style()->hasBorderDecoration() (missing background
|
| + // behind dashed borders). Resolve this case, or not, and update this check
|
| + // with the results.
|
| return !(layer->size().isEmpty() || layer->hasDescendantWithClipPath() ||
|
| layer->hasAncestorWithClipPath() ||
|
| layer->layoutObject()->style()->hasBorderRadius());
|
| @@ -1755,8 +1782,8 @@ void PaintLayerScrollableArea::ScrollbarManager::destroyDetachedScrollbars() {
|
| void PaintLayerScrollableArea::ScrollbarManager::setHasHorizontalScrollbar(
|
| bool hasScrollbar) {
|
| if (hasScrollbar) {
|
| - // This doesn't hit in any tests, but since the equivalent code in setHasVerticalScrollbar
|
| - // does, presumably this code does as well.
|
| + // This doesn't hit in any tests, but since the equivalent code in
|
| + // setHasVerticalScrollbar does, presumably this code does as well.
|
| DisableCompositingQueryAsserts disabler;
|
| if (!m_hBar) {
|
| m_hBar = createScrollbar(HorizontalScrollbar);
|
|
|