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

Unified Diff: third_party/WebKit/Source/core/layout/LayoutBox.cpp

Issue 2623213002: Expand PaintLayer clip to account for hidden URL bar with document.rootScroller (Closed)
Patch Set: Rebase Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/layout/LayoutBox.cpp
diff --git a/third_party/WebKit/Source/core/layout/LayoutBox.cpp b/third_party/WebKit/Source/core/layout/LayoutBox.cpp
index 3ad08c2f8690a0b53c26c12ddbb85d11157304f1..5c44b4465a5bc2e3a6b25a5c16ce75dea78fbfca 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBox.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutBox.cpp
@@ -28,6 +28,7 @@
#include "core/dom/Document.h"
#include "core/editing/EditingUtilities.h"
+#include "core/frame/FrameHost.h"
#include "core/frame/FrameView.h"
#include "core/frame/LocalFrame.h"
#include "core/frame/Settings.h"
@@ -53,10 +54,13 @@
#include "core/layout/api/LineLayoutBox.h"
#include "core/layout/compositing/PaintLayerCompositor.h"
#include "core/layout/shapes/ShapeOutsideInfo.h"
+#include "core/layout/svg/LayoutSVGRoot.h"
#include "core/page/AutoscrollController.h"
#include "core/page/Page.h"
+#include "core/page/scrolling/RootScrollerController.h"
#include "core/page/scrolling/ScrollingCoordinator.h"
#include "core/page/scrolling/SnapCoordinator.h"
+#include "core/page/scrolling/TopDocumentRootScrollerController.h"
#include "core/paint/BackgroundImageGeometry.h"
#include "core/paint/BoxPaintInvalidator.h"
#include "core/paint/BoxPainter.h"
@@ -1379,7 +1383,11 @@ bool LayoutBox::nodeAtPoint(HitTestResult& result,
HitTestAction action) {
LayoutPoint adjustedLocation = accumulatedOffset + location();
- if (!isLayoutView()) {
+ if (this !=
+ document()
+ .rootScrollerController()
+ .effectiveRootScroller()
+ .layoutObject()) {
// Check if we need to do anything at all.
// If we have clipping, then we can't have any spillout.
LayoutRect overflowBox =
@@ -1789,6 +1797,25 @@ PaintInvalidationReason LayoutBox::invalidatePaintIfNeeded(
LayoutRect LayoutBox::overflowClipRect(
const LayoutPoint& location,
OverlayScrollbarClipBehavior overlayScrollbarClipBehavior) const {
+ // If this box is the global root scroller, it's clip rect needs to match the
+ // viewport. This might be larger than the ordinary overflow rect since hiding
+ // the URL bar can expose more content without changing the box size.
+ if (FrameHost* host = document().frameHost()) {
+ Element* globalRootScroller =
+ host->globalRootScrollerController().globalRootScroller();
+ bool applySVGViewportClip =
chrishtr 2017/01/21 02:06:47 overflowClipRect is a virtual method. You can put
+ isSVGRoot() && toLayoutSVGRoot(this)->shouldApplyViewportClip();
+ if (!applySVGViewportClip && node() && node() == globalRootScroller) {
chrishtr 2017/01/21 02:06:47 Is it possible for the rootScroller to not have a
+ LayoutView* topView = document().topDocument().layoutView();
+ // If the view rect is empty, LayoutView::overflowClipRect will fallback
+ // to the LayoutBox implementation so prevent infinitely recursing.
+ if (!topView->viewRect().isEmpty()) {
chrishtr 2017/01/21 02:06:47 How about just adjusting overflowClipRect() for La
+ return topView->overflowClipRect(location,
+ overlayScrollbarClipBehavior);
+ }
+ }
+ }
+
// FIXME: When overflow-clip (CSS3) is implemented, we'll obtain the property
// here.
LayoutRect clipRect = borderBoxRect();

Powered by Google App Engine
This is Rietveld 408576698