[Merge-87][Sh-Blink] Variable used for range selector should be reset
(cherry picked from commit 224f96bce21673f2e266febf2feec0e01b15cb01)
Bug: 1136464
Change-Id: Ibfae772d5d289a74b1cffdb83f74ba8a370c08b3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2461118
Reviewed-by: David Bokan <[email protected]>
Commit-Queue: Gayane Petrosyan <[email protected]>
Cr-Original-Commit-Position: refs/heads/master@{#815373}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2468676
Reviewed-by: Gayane Petrosyan <[email protected]>
Cr-Commit-Position: refs/branch-heads/4280@{#328}
Cr-Branched-From: ea420fb963f9658c9969b6513c56b8f47efa1a2a-refs/heads/master@{#812852}
diff --git a/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.cc b/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.cc
index 282a10b..50b5fc59 100644
--- a/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.cc
+++ b/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.cc
@@ -238,6 +238,8 @@
step_ = kExact;
max_available_prefix_ = "";
max_available_suffix_ = "";
+ max_available_range_start_ = "";
+ max_available_range_end_ = "";
num_prefix_words_ = 0;
num_suffix_words_ = 0;
iteration_ = 0;
@@ -417,7 +419,6 @@
void TextFragmentSelectorGenerator::ExtendRangeSelector() {
DCHECK_EQ(kRange, step_);
DCHECK_EQ(kNeedsNewCandidate, state_);
-
// Give up if range is already too long.
if (num_range_start_words_ == kMaxRangeWords ||
num_range_end_words_ == kMaxRangeWords) {
diff --git a/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator_test.cc b/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator_test.cc
index 6cd1460..66b32e5 100644
--- a/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator_test.cc
+++ b/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator_test.cc
@@ -495,6 +495,54 @@
"First%20paragraph,last%20text");
}
+// It should be more than 300 characters selected from the same node so that
+// ranges are used.
+TEST_F(TextFragmentSelectorGeneratorTest,
+ RangeSelector_SameNode_MultipleSelections) {
+ SimRequest request("https://example.com/test.html", "text/html");
+ LoadURL("https://example.com/test.html");
+ request.Complete(R"HTML(
+ <!DOCTYPE html>
+ <div>Test page</div>
+ <p id='first'>First paragraph text text text text text text text
+ text text text text text text text text text text text text text
+ text text text text text text text text text text text text text
+ text text text text text text text text text text text text text
+ text text text text text text text text text text and last text</p>
+ )HTML");
+ Node* first_paragraph = GetDocument().getElementById("first")->firstChild();
+ const auto& selected_start = Position(first_paragraph, 0);
+ const auto& selected_end = Position(first_paragraph, 325);
+ ASSERT_EQ(
+ "First paragraph text text text text text text text \
+text text text text text text text text text text text text text \
+text text text text text text text text text text text text text \
+text text text text text text text text text text text text text \
+text text text text text text text text text text and last text",
+ PlainText(EphemeralRange(selected_start, selected_end)));
+ ASSERT_EQ(309u,
+ PlainText(EphemeralRange(selected_start, selected_end)).length());
+
+ GenerateAndVerifySelector(selected_start, selected_end,
+ "First%20paragraph,last%20text");
+
+ const auto& second_selected_start = Position(first_paragraph, 6);
+ const auto& second_selected_end = Position(first_paragraph, 325);
+ ASSERT_EQ(
+ "paragraph text text text text text text text \
+text text text text text text text text text text text text text \
+text text text text text text text text text text text text text \
+text text text text text text text text text text text text text \
+text text text text text text text text text text and last text",
+ PlainText(EphemeralRange(second_selected_start, second_selected_end)));
+ ASSERT_EQ(303u, PlainText(EphemeralRange(second_selected_start,
+ second_selected_end))
+ .length());
+
+ GenerateAndVerifySelector(second_selected_start, second_selected_end,
+ "paragraph%20text%20text,and%20last%20text");
+}
+
// When using all the selected text for the range is not enough for unique
// match, context should be added.
TEST_F(TextFragmentSelectorGeneratorTest, RangeSelector_RangeNotUnique) {