diff --git a/gfx/layers/apz/util/ChromeProcessController.cpp b/gfx/layers/apz/util/ChromeProcessController.cpp index 333b7e27953..f60cae1f30a 100644 --- a/gfx/layers/apz/util/ChromeProcessController.cpp +++ b/gfx/layers/apz/util/ChromeProcessController.cpp @@ -59,6 +59,8 @@ ChromeProcessController::InitializeRoot() uint32_t presShellId; FrameMetrics::ViewID viewId; if (APZCCallbackHelper::GetOrCreateScrollIdentifiers(content, &presShellId, &viewId)) { + // Note that the base rect that goes with these margins is set in + // nsRootBoxFrame::BuildDisplayList. nsLayoutUtils::SetDisplayPortMargins(content, presShell, ScreenMargin(), 0, nsLayoutUtils::RepaintMode::DoNotRepaint); } diff --git a/layout/xul/nsRootBoxFrame.cpp b/layout/xul/nsRootBoxFrame.cpp index 11fb77b2024..32ef238a797 100644 --- a/layout/xul/nsRootBoxFrame.cpp +++ b/layout/xul/nsRootBoxFrame.cpp @@ -179,6 +179,14 @@ nsRootBoxFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { + if (mContent && mContent->GetProperty(nsGkAtoms::DisplayPortMargins)) { + // The XUL document's root element may have displayport margins set in + // ChromeProcessController::InitializeRoot, and we should to supply the + // base rect. + nsRect displayPortBase = aDirtyRect.Intersect(nsRect(nsPoint(0, 0), GetSize())); + nsLayoutUtils::SetDisplayPortBase(mContent, displayPortBase); + } + // root boxes don't need a debug border/outline or a selection overlay... // They *may* have a background propagated to them, so force creation // of a background display list element.