autofill: Early return when |element_| is null
This CL adds early-returns to mojom::AutofillAgent override functions
when |element_| is null. Now |element_| can be null anytime after
DidCommitProvisionalLoad is called (https://chromium-review.googlesource.com/c/chromium/src/+/939224),
checking whether |element_| is null is reuiqred.
Bug: 822649
Change-Id: Id49cc32edf4bb5edbd93da2af9fe5a3fb7205b90
Reviewed-on: https://chromium-review.googlesource.com/968045
Commit-Queue: Hajime Hoshi <[email protected]>
Reviewed-by: Sebastien Seguin-Gagnon <[email protected]>
Cr-Commit-Position: refs/heads/master@{#544294}
diff --git a/components/autofill/content/renderer/autofill_agent.cc b/components/autofill/content/renderer/autofill_agent.cc
index 0f10d069..ad18985 100644
--- a/components/autofill/content/renderer/autofill_agent.cc
+++ b/components/autofill/content/renderer/autofill_agent.cc
@@ -387,6 +387,9 @@
void AutofillAgent::DoAcceptDataListSuggestion(
const base::string16& suggested_value) {
+ if (element_.IsNull())
+ return;
+
WebInputElement* input_element = ToWebInputElement(&element_);
DCHECK(input_element);
base::string16 new_value = suggested_value;
@@ -418,6 +421,9 @@
// mojom::AutofillAgent:
void AutofillAgent::FillForm(int32_t id, const FormData& form) {
+ if (element_.IsNull())
+ return;
+
if (id != autofill_query_id_ && id != kNoQueryId)
return;
@@ -430,6 +436,9 @@
}
void AutofillAgent::PreviewForm(int32_t id, const FormData& form) {
+ if (element_.IsNull())
+ return;
+
if (id != autofill_query_id_)
return;
@@ -441,6 +450,9 @@
void AutofillAgent::FieldTypePredictionsAvailable(
const std::vector<FormDataPredictions>& forms) {
+ if (element_.IsNull())
+ return;
+
bool attach_predictions_to_dom =
base::FeatureList::IsEnabled(features::kAutofillShowTypePredictions);
for (const auto& form : forms) {
@@ -449,6 +461,9 @@
}
void AutofillAgent::ClearForm() {
+ if (element_.IsNull())
+ return;
+
form_cache_.ClearFormWithElement(element_);
}
@@ -467,6 +482,9 @@
}
void AutofillAgent::FillFieldWithValue(const base::string16& value) {
+ if (element_.IsNull())
+ return;
+
WebInputElement* input_element = ToWebInputElement(&element_);
if (input_element) {
DoFillFieldWithValue(value, input_element);
@@ -475,6 +493,9 @@
}
void AutofillAgent::PreviewFieldWithValue(const base::string16& value) {
+ if (element_.IsNull())
+ return;
+
WebInputElement* input_element = ToWebInputElement(&element_);
if (input_element)
DoPreviewFieldWithValue(value, input_element);
@@ -486,6 +507,9 @@
void AutofillAgent::FillPasswordSuggestion(const base::string16& username,
const base::string16& password) {
+ if (element_.IsNull())
+ return;
+
bool handled =
password_autofill_agent_->FillSuggestion(element_, username, password);
DCHECK(handled);
@@ -493,6 +517,9 @@
void AutofillAgent::PreviewPasswordSuggestion(const base::string16& username,
const base::string16& password) {
+ if (element_.IsNull())
+ return;
+
bool handled = password_autofill_agent_->PreviewSuggestion(
element_, blink::WebString::FromUTF16(username),
blink::WebString::FromUTF16(password));