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

Unified Diff: third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp

Issue 2501723003: Disable scrollbars on the root scroller when using visual viewport scrollbars. (Closed)
Patch Set: Fix (?) Graphics2D test Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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 f4d15b2eedadc3050bed99b495cc9f3bc1f32b17..742a651142649cf011455bdb5dbd3840902678ca 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
@@ -71,7 +71,9 @@
#include "core/page/FocusController.h"
#include "core/page/Page.h"
#include "core/page/scrolling/RootScrollerController.h"
+#include "core/page/scrolling/RootScrollerUtil.h"
#include "core/page/scrolling/ScrollingCoordinator.h"
+#include "core/page/scrolling/TopDocumentRootScrollerController.h"
#include "core/paint/PaintLayerFragment.h"
#include "platform/PlatformGestureEvent.h"
#include "platform/PlatformMouseEvent.h"
@@ -805,6 +807,22 @@ void PaintLayerScrollableArea::clampScrollOffsetsAfterLayout() {
m_scrollbarManager.destroyDetachedScrollbars();
}
+void PaintLayerScrollableArea::didChangeGlobalRootScroller() {
+ // On Android, where the VisualViewport supplies scrollbars, we need to
+ // remove the PLSA's scrollbars. In general, this would be problematic as
+ // that can cause layout but this should only ever apply with overlay
+ // scrollbars.
+ if (!box().frame()->settings() ||
+ !box().frame()->settings()->viewportEnabled())
+ return;
+
+ bool needsHorizontalScrollbar;
+ bool needsVerticalScrollbar;
+ computeScrollbarExistence(needsHorizontalScrollbar, needsVerticalScrollbar);
+ setHasHorizontalScrollbar(needsHorizontalScrollbar);
+ setHasVerticalScrollbar(needsVerticalScrollbar);
+}
+
bool PaintLayerScrollableArea::shouldPerformScrollAnchoring() const {
return RuntimeEnabledFeatures::scrollAnchoringEnabled() &&
m_scrollAnchor.hasScroller() &&
@@ -1728,14 +1746,22 @@ void PaintLayerScrollableArea::setTopmostScrollChild(PaintLayer* scrollChild) {
}
bool PaintLayerScrollableArea::visualViewportSuppliesScrollbars() const {
- if (!layer()->isRootLayer())
+ LocalFrame* frame = box().frame();
+ if (!frame || !frame->settings())
return false;
- LocalFrame* frame = box().frame();
- if (!frame || !frame->isMainFrame() || !frame->settings())
+ // On desktop, we always use the layout viewport's scrollbars.
+ if (!frame->settings()->viewportEnabled())
+ return false;
+
+ const TopDocumentRootScrollerController& controller =
+ layoutBox()->document().frameHost()->globalRootScrollerController();
+
+ if (!controller.globalRootScroller())
return false;
- return frame->settings()->viewportEnabled();
+ return RootScrollerUtil::scrollableAreaFor(
+ *controller.globalRootScroller()) == this;
}
Widget* PaintLayerScrollableArea::getWidget() {

Powered by Google App Engine
This is Rietveld 408576698