summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/paint
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/paint')
-rw-r--r--chromium/third_party/blink/renderer/core/paint/box_model_object_painter.cc15
-rw-r--r--chromium/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc5
-rw-r--r--chromium/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.cc16
-rw-r--r--chromium/third_party/blink/renderer/core/paint/paint_layer.h2
-rw-r--r--chromium/third_party/blink/renderer/core/paint/paint_layer_stacking_node.cc2
5 files changed, 35 insertions, 5 deletions
diff --git a/chromium/third_party/blink/renderer/core/paint/box_model_object_painter.cc b/chromium/third_party/blink/renderer/core/paint/box_model_object_painter.cc
index 7cfd64eec43..526970b70ad 100644
--- a/chromium/third_party/blink/renderer/core/paint/box_model_object_painter.cc
+++ b/chromium/third_party/blink/renderer/core/paint/box_model_object_painter.cc
@@ -4,10 +4,12 @@
#include "third_party/blink/renderer/core/paint/box_model_object_painter.h"
+#include "third_party/blink/renderer/core/layout/layout_block_flow.h"
#include "third_party/blink/renderer/core/layout/layout_box_model_object.h"
-#include "third_party/blink/renderer/core/layout/layout_object.h"
+#include "third_party/blink/renderer/core/layout/layout_inline.h"
#include "third_party/blink/renderer/core/layout/line/root_inline_box.h"
#include "third_party/blink/renderer/core/paint/background_image_geometry.h"
+#include "third_party/blink/renderer/core/paint/line_box_list_painter.h"
#include "third_party/blink/renderer/core/paint/object_painter.h"
#include "third_party/blink/renderer/core/paint/paint_info.h"
#include "third_party/blink/renderer/core/paint/paint_layer.h"
@@ -84,9 +86,14 @@ void BoxModelObjectPainter::PaintTextClipMask(GraphicsContext& context,
flow_box_->Paint(paint_info, paint_offset - local_offset, root.LineTop(),
root.LineBottom());
} else {
- // FIXME: this should only have an effect for the line box list within
- // |box_model_|. Change this to create a LineBoxListPainter directly.
- box_model_.Paint(paint_info);
+ const LineBoxList* line_boxes = nullptr;
+ if (box_model_.IsLayoutBlockFlow())
+ line_boxes = &ToLayoutBlockFlow(box_model_).LineBoxes();
+ else if (box_model_.IsLayoutInline())
+ line_boxes = ToLayoutInline(box_model_).LineBoxes();
+ if (!line_boxes)
+ return;
+ LineBoxListPainter(*line_boxes).Paint(box_model_, paint_info, paint_offset);
}
}
diff --git a/chromium/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc b/chromium/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc
index c900e894b44..5f13a443aff 100644
--- a/chromium/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc
+++ b/chromium/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc
@@ -1447,6 +1447,11 @@ void CompositedLayerMapping::UpdateOverflowControlsHostLayerGeometry(
LayoutPoint host_layer_position;
if (NeedsToReparentOverflowControls()) {
+ // This should never be true, but for some reason it is.
+ // See https://crbug.com/880930.
+ if (!compositing_stacking_context)
+ return;
+
CompositedLayerMapping* stacking_clm =
compositing_stacking_context->GetCompositedLayerMapping();
DCHECK(stacking_clm);
diff --git a/chromium/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.cc b/chromium/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.cc
index e50a69a5f2e..9b87b5cd9eb 100644
--- a/chromium/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.cc
+++ b/chromium/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.cc
@@ -403,6 +403,16 @@ GraphicsLayer* PaintLayerCompositor::ParentForContentLayers(
return GetVisualViewport().ScrollLayer();
}
+#if DCHECK_IS_ON()
+static void AssertWholeTreeNotComposited(const PaintLayer& paint_layer) {
+ DCHECK(paint_layer.GetCompositingState() == kNotComposited);
+ for (PaintLayer* child = paint_layer.FirstChild(); child;
+ child = child->NextSibling()) {
+ AssertWholeTreeNotComposited(*child);
+ }
+}
+#endif
+
void PaintLayerCompositor::UpdateIfNeeded(
DocumentLifecycle::LifecycleState target_state,
CompositingReasonsStats& compositing_reasons_stats) {
@@ -500,6 +510,12 @@ void PaintLayerCompositor::UpdateIfNeeded(
->Parent();
}
+#if DCHECK_IS_ON()
+ if (update_root->GetCompositingState() != kPaintsIntoOwnBacking) {
+ AssertWholeTreeNotComposited(*update_root);
+ }
+#endif
+
GraphicsLayerUpdater updater;
updater.Update(*update_root, layers_needing_paint_invalidation);
diff --git a/chromium/third_party/blink/renderer/core/paint/paint_layer.h b/chromium/third_party/blink/renderer/core/paint/paint_layer.h
index 2b6736933d7..2f8f0bf9288 100644
--- a/chromium/third_party/blink/renderer/core/paint/paint_layer.h
+++ b/chromium/third_party/blink/renderer/core/paint/paint_layer.h
@@ -384,6 +384,8 @@ class CORE_EXPORT PaintLayer : public DisplayItemClient {
// Layer::paint*() methods.
PaintLayer* EnclosingLayerForPaintInvalidation() const;
+ // https://crbug.com/751768, this function can return nullptr sometimes.
+ // Always check the result before using it, don't just DCHECK.
PaintLayer* EnclosingLayerForPaintInvalidationCrossingFrameBoundaries() const;
bool HasAncestorWithFilterThatMovesPixels() const;
diff --git a/chromium/third_party/blink/renderer/core/paint/paint_layer_stacking_node.cc b/chromium/third_party/blink/renderer/core/paint/paint_layer_stacking_node.cc
index e61e03b2bdb..ae441293400 100644
--- a/chromium/third_party/blink/renderer/core/paint/paint_layer_stacking_node.cc
+++ b/chromium/third_party/blink/renderer/core/paint/paint_layer_stacking_node.cc
@@ -240,7 +240,7 @@ bool PaintLayerStackingNode::StyleDidChange(PaintLayer* paint_layer,
const ComputedStyle* old_style) {
bool was_stacking_context = false;
bool was_stacked = false;
- bool old_z_index = 0;
+ int old_z_index = 0;
if (old_style) {
was_stacking_context = old_style->IsStackingContext();
old_z_index = old_style->ZIndex();