chore: cherry-pick 91fbf1798 and cff03c22c5 from chromium (#32792)

Backports
https://chromium-review.googlesource.com/c/chromium/src/+/3347570
https://chromium-review.googlesource.com/c/chromium/src/+/3348406

Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
This commit is contained in:
Robo
2022-02-10 17:22:19 +09:00
committed by GitHub
parent 0d1b7be451
commit 7432ea43b7
3 changed files with 184 additions and 0 deletions

View File

@@ -134,6 +134,8 @@ cherry-pick-c5571653d932.patch
fix_crash_when_saving_edited_pdf_files.patch
cherry-pick-9db9911e1242.patch
cherry-pick-1284367.patch
pin_scrolltop_to_0_during_autofill_preview.patch
fix_preview_state_detection.patch
do_not_select_vulkan_device_based_on_the_passed_in_gpu_info_on_linux.patch
handle_potentiallydanglingmarkup_for_cssimagevalue.patch
fire_iframe_onload_for_cross-origin-initiated_same-document.patch

View File

@@ -0,0 +1,47 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Dominic Battre <battre@chromium.org>
Date: Wed, 22 Dec 2021 16:25:16 +0000
Subject: Fix preview state detection
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This CL fixes the preview state detection in some edge cases. See
crbug.com/1261689#c23.
(cherry picked from commit e3aeadcf584ebb5d7f61cd141f9af317cb60cf21)
Fixed: 1261689
Change-Id: Iefe27e2748acb4b524e8a0811973bdceda46089a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3335637
Reviewed-by: Mason Freed <masonf@chromium.org>
Commit-Queue: Dominic Battré <battre@chromium.org>
Cr-Original-Commit-Position: refs/heads/main@{#951313}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3348406
Auto-Submit: Dominic Battré <battre@chromium.org>
Reviewed-by: Joey Arhar <jarhar@chromium.org>
Commit-Queue: Joey Arhar <jarhar@chromium.org>
Cr-Commit-Position: refs/branch-heads/4758@{#186}
Cr-Branched-From: 4a2cf4baf90326df19c3ee70ff987960d59a386e-refs/heads/main@{#950365}
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc
index daa9e25f645f9d554dd85ed4199bc80bf3a7e049..4bf8054f5b6382bbef85b83996dbb6b48dfc2f74 100644
--- a/third_party/blink/renderer/core/dom/element.cc
+++ b/third_party/blink/renderer/core/dom/element.cc
@@ -36,6 +36,7 @@
#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h"
#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h"
#include "third_party/blink/public/mojom/scroll/scroll_into_view_params.mojom-blink.h"
+#include "third_party/blink/public/web/web_autofill_state.h"
#include "third_party/blink/renderer/bindings/core/v8/dictionary.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_get_inner_html_options.h"
@@ -1560,7 +1561,7 @@ double Element::scrollTop() {
// Don't disclose scroll position in preview state. See crbug.com/1261689.
auto* select_element = DynamicTo<HTMLSelectElement>(this);
if (select_element && !select_element->UsesMenuList() &&
- !select_element->SuggestedValue().IsEmpty()) {
+ select_element->GetAutofillState() == WebAutofillState::kPreviewed) {
return 0;
}

View File

@@ -0,0 +1,135 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Dominic Battre <battre@chromium.org>
Date: Mon, 20 Dec 2021 18:53:00 +0000
Subject: Pin scrollTop to 0 during autofill preview
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This CL forces scrollTop of a ListBox to be 0 during autofill preview
state. After autofill preview ends, it attempts to scroll the ListBox
back so that a previously selected element becomes visible.
(cherry picked from commit 55b07dc54220200313366ec821d2303cd847187a)
Fixed: 1261689
Change-Id: I8593544577cf054cca40e7a487d3248acdcfdaa7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3279960
Commit-Queue: Dominic Battré <battre@chromium.org>
Reviewed-by: Mason Freed <masonf@chromium.org>
Cr-Original-Commit-Position: refs/heads/main@{#941822}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3347570
Auto-Submit: Dominic Battré <battre@chromium.org>
Reviewed-by: Joey Arhar <jarhar@chromium.org>
Commit-Queue: Joey Arhar <jarhar@chromium.org>
Cr-Commit-Position: refs/branch-heads/4664@{#1330}
Cr-Branched-From: 24dc4ee75e01a29d390d43c9c264372a169273a7-refs/heads/main@{#929512}
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc
index fb24f5710d37e84701944d4b053764fadc29a6df..daa9e25f645f9d554dd85ed4199bc80bf3a7e049 100644
--- a/third_party/blink/renderer/core/dom/element.cc
+++ b/third_party/blink/renderer/core/dom/element.cc
@@ -122,6 +122,7 @@
#include "third_party/blink/renderer/core/html/custom/custom_element_registry.h"
#include "third_party/blink/renderer/core/html/forms/html_form_controls_collection.h"
#include "third_party/blink/renderer/core/html/forms/html_options_collection.h"
+#include "third_party/blink/renderer/core/html/forms/html_select_element.h"
#include "third_party/blink/renderer/core/html/html_body_element.h"
#include "third_party/blink/renderer/core/html/html_collection.h"
#include "third_party/blink/renderer/core/html/html_document.h"
@@ -1556,6 +1557,13 @@ double Element::scrollTop() {
return 0;
}
+ // Don't disclose scroll position in preview state. See crbug.com/1261689.
+ auto* select_element = DynamicTo<HTMLSelectElement>(this);
+ if (select_element && !select_element->UsesMenuList() &&
+ !select_element->SuggestedValue().IsEmpty()) {
+ return 0;
+ }
+
LayoutBox* box = GetLayoutBoxForScrolling();
if (!box)
return 0;
diff --git a/third_party/blink/renderer/core/html/forms/select_type.cc b/third_party/blink/renderer/core/html/forms/select_type.cc
index 541a3e56671bc26cd7098a8b785061be69027be3..4fd15874c4ce78c19b21ac310eb076077075a4f0 100644
--- a/third_party/blink/renderer/core/html/forms/select_type.cc
+++ b/third_party/blink/renderer/core/html/forms/select_type.cc
@@ -977,8 +977,16 @@ void ListBoxSelectType::DidBlur() {
}
void ListBoxSelectType::DidSetSuggestedOption(HTMLOptionElement* option) {
- if (select_->GetLayoutObject())
- ScrollToOption(option);
+ if (!select_->GetLayoutObject())
+ return;
+ // When ending preview state, don't leave the scroll position at the
+ // previewed element but return to the active selection end if it is
+ // defined or to the first selectable option. See crbug.com/1261689.
+ if (!option)
+ option = ActiveSelectionEnd();
+ if (!option)
+ option = FirstSelectableOption();
+ ScrollToOption(option);
}
void ListBoxSelectType::SaveLastSelection() {
diff --git a/third_party/blink/renderer/core/testing/internals.cc b/third_party/blink/renderer/core/testing/internals.cc
index c855514e9ac6c7521515c417cceffc2dacbab2d9..967f1a0ff38db262b74650915efcc44d6ef1d7ad 100644
--- a/third_party/blink/renderer/core/testing/internals.cc
+++ b/third_party/blink/renderer/core/testing/internals.cc
@@ -1743,8 +1743,14 @@ void Internals::setSuggestedValue(Element* element,
if (auto* textarea = DynamicTo<HTMLTextAreaElement>(*element))
textarea->SetSuggestedValue(value);
- if (auto* select = DynamicTo<HTMLSelectElement>(*element))
- select->SetSuggestedValue(value);
+ if (auto* select = DynamicTo<HTMLSelectElement>(*element)) {
+ // A Null string resets the suggested value.
+ select->SetSuggestedValue(value.IsEmpty() ? String() : value);
+ }
+
+ To<HTMLFormControlElement>(element)->SetAutofillState(
+ value.IsEmpty() ? WebAutofillState::kNotFilled
+ : WebAutofillState::kPreviewed);
}
void Internals::setAutofilledValue(Element* element,
@@ -1773,11 +1779,16 @@ void Internals::setAutofilledValue(Element* element,
*Event::CreateBubble(event_type_names::kKeyup));
}
- if (auto* select = DynamicTo<HTMLSelectElement>(*element))
- select->setValue(value, true /* send_events */);
+ if (auto* select = DynamicTo<HTMLSelectElement>(*element)) {
+ select->setValue(value.IsEmpty()
+ ? String() // Null string resets the autofill state.
+ : value,
+ true /* send_events */);
+ }
To<HTMLFormControlElement>(element)->SetAutofillState(
- blink::WebAutofillState::kAutofilled);
+ value.IsEmpty() ? WebAutofillState::kNotFilled
+ : blink::WebAutofillState::kAutofilled);
}
void Internals::setEditingValue(Element* element,
diff --git a/third_party/blink/web_tests/fast/forms/text/input-appearance-autocomplete-suggested-value-over-placeholder-value-expected.html b/third_party/blink/web_tests/fast/forms/text/input-appearance-autocomplete-suggested-value-over-placeholder-value-expected.html
index cac91c4f2fbecf5117b35318e7a88bda1a268135..30e454a79c4d3a5bc2a49879f0929557e011f819 100644
--- a/third_party/blink/web_tests/fast/forms/text/input-appearance-autocomplete-suggested-value-over-placeholder-value-expected.html
+++ b/third_party/blink/web_tests/fast/forms/text/input-appearance-autocomplete-suggested-value-over-placeholder-value-expected.html
@@ -1 +1,4 @@
<input id="input" value="Springfield">
+<script>
+internals.setAutofilled(input, true);
+</script>
diff --git a/third_party/blink/web_tests/fast/forms/text/input-appearance-autocomplete-suggested-value-when-underlying-placeholder-is-removed-expected.html b/third_party/blink/web_tests/fast/forms/text/input-appearance-autocomplete-suggested-value-when-underlying-placeholder-is-removed-expected.html
index cac91c4f2fbecf5117b35318e7a88bda1a268135..30e454a79c4d3a5bc2a49879f0929557e011f819 100644
--- a/third_party/blink/web_tests/fast/forms/text/input-appearance-autocomplete-suggested-value-when-underlying-placeholder-is-removed-expected.html
+++ b/third_party/blink/web_tests/fast/forms/text/input-appearance-autocomplete-suggested-value-when-underlying-placeholder-is-removed-expected.html
@@ -1 +1,4 @@
<input id="input" value="Springfield">
+<script>
+internals.setAutofilled(input, true);
+</script>