Commit 895571d6 authored by Yoichi Osato's avatar Yoichi Osato Committed by Commit Bot

Remove redundant SelectionState reassignment.

Xor invalidation was shipped:
https://chromium-review.googlesource.com/c/chromium/src/+/720817

Then there is no inconsistency SelectionState in layout tree thus
we can just DCHECK its start/end state.

Bug: 739062
Change-Id: I6bb791568a76d47f7088c692d2960eddc34f570a
Reviewed-on: https://chromium-review.googlesource.com/798995Reviewed-by: default avatarYoshifumi Inoue <yosin@chromium.org>
Commit-Queue: Yoichi Osato <yoichio@chromium.org>
Cr-Commit-Position: refs/heads/master@{#520869}
parent 4e63e1a3
...@@ -687,43 +687,15 @@ void LayoutSelection::Commit() { ...@@ -687,43 +687,15 @@ void LayoutSelection::Commit() {
paint_range_ = new_range.PaintRange(); paint_range_ = new_range.PaintRange();
if (paint_range_.IsNull()) if (paint_range_.IsNull())
return; return;
// TODO(yoichio): Remove this if state. if (paint_range_.StartLayoutObject() == paint_range_.EndLayoutObject()) {
// This SelectionState reassignment is ad-hoc patch for DCHECK_EQ(paint_range_.StartLayoutObject()->GetSelectionState(),
// prohibiting use-after-free(crbug.com/752715). SelectionState::kStartAndEnd);
// LayoutText::setSelectionState(state) propergates |state| to ancestor return;
// LayoutObjects, which can accidentally change start/end LayoutObject state
// then LayoutObject::IsSelectionBorder() returns false although we should
// clear selection at LayoutObject::WillBeRemoved().
// We should make LayoutObject::setSelectionState() trivial and remove
// such propagation or at least do it in LayoutSelection.
if ((paint_range_.StartLayoutObject()->GetSelectionState() !=
SelectionState::kStart &&
paint_range_.StartLayoutObject()->GetSelectionState() !=
SelectionState::kStartAndEnd) ||
(paint_range_.EndLayoutObject()->GetSelectionState() !=
SelectionState::kEnd &&
paint_range_.EndLayoutObject()->GetSelectionState() !=
SelectionState::kStartAndEnd)) {
if (paint_range_.StartLayoutObject() == paint_range_.EndLayoutObject()) {
paint_range_.StartLayoutObject()->LayoutObject::SetSelectionState(
SelectionState::kStartAndEnd);
} else {
paint_range_.StartLayoutObject()->LayoutObject::SetSelectionState(
SelectionState::kStart);
paint_range_.EndLayoutObject()->LayoutObject::SetSelectionState(
SelectionState::kEnd);
}
} }
// TODO(yoichio): If start == end, they should be kStartAndEnd. DCHECK_EQ(paint_range_.StartLayoutObject()->GetSelectionState(),
// If not, start.SelectionState == kStart and vice versa. SelectionState::kStart);
DCHECK(paint_range_.StartLayoutObject()->GetSelectionState() == DCHECK_EQ(paint_range_.EndLayoutObject()->GetSelectionState(),
SelectionState::kStart || SelectionState::kEnd);
paint_range_.StartLayoutObject()->GetSelectionState() ==
SelectionState::kStartAndEnd);
DCHECK(paint_range_.EndLayoutObject()->GetSelectionState() ==
SelectionState::kEnd ||
paint_range_.EndLayoutObject()->GetSelectionState() ==
SelectionState::kStartAndEnd);
} }
void LayoutSelection::OnDocumentShutdown() { void LayoutSelection::OnDocumentShutdown() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment