Commit cb950738 authored by Alexander Timokhin's avatar Alexander Timokhin Committed by Commit Bot

Fixed more Document leaks in Autofill

Some Autofill-related code can hold persistent reference to last
changed or focused <input> element that cause leak of whole Documents
containing such element after navigation to other page.

Some leaks fixed in https://chromium-review.googlesource.com/939224
This CL fixes other related leaks.

Bug: 734427
Change-Id: Ic084d0670cccb9d11595d0bde8cf0d605bfa8911
Reviewed-on: https://chromium-review.googlesource.com/970582Reviewed-by: default avatarEvan Stade <estade@chromium.org>
Reviewed-by: default avatarVadym Doroshenko <dvadym@chromium.org>
Commit-Queue: Vadym Doroshenko <dvadym@chromium.org>
Cr-Commit-Position: refs/heads/master@{#544404}
parent d0fdb25b
...@@ -968,6 +968,7 @@ bool AutofillAgent::GetSubmittedForm(FormData* form) { ...@@ -968,6 +968,7 @@ bool AutofillAgent::GetSubmittedForm(FormData* form) {
void AutofillAgent::ResetLastInteractedElements() { void AutofillAgent::ResetLastInteractedElements() {
last_interacted_form_.Reset(); last_interacted_form_.Reset();
last_clicked_form_control_element_for_testing_.Reset();
formless_elements_user_edited_.clear(); formless_elements_user_edited_.clear();
provisionally_saved_form_.reset(); provisionally_saved_form_.reset();
} }
......
...@@ -143,8 +143,10 @@ void FormTracker::FormControlDidChangeImpl( ...@@ -143,8 +143,10 @@ void FormTracker::FormControlDidChangeImpl(
void FormTracker::DidCommitProvisionalLoad(bool is_new_navigation, void FormTracker::DidCommitProvisionalLoad(bool is_new_navigation,
bool is_same_document_navigation) { bool is_same_document_navigation) {
DCHECK_CALLED_ON_VALID_SEQUENCE(form_tracker_sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(form_tracker_sequence_checker_);
if (!is_same_document_navigation) if (!is_same_document_navigation) {
ResetLastInteractedElements();
return; return;
}
FireSubmissionIfFormDisappear(SubmissionSource::SAME_DOCUMENT_NAVIGATION); FireSubmissionIfFormDisappear(SubmissionSource::SAME_DOCUMENT_NAVIGATION);
} }
......
...@@ -178,6 +178,14 @@ void PasswordGenerationAgent::BindRequest( ...@@ -178,6 +178,14 @@ void PasswordGenerationAgent::BindRequest(
binding_.Bind(std::move(request)); binding_.Bind(std::move(request));
} }
void PasswordGenerationAgent::DidCommitProvisionalLoad(
bool /*is_new_navigation*/, bool is_same_document_navigation) {
if (is_same_document_navigation)
return;
generation_element_.Reset();
last_focused_password_element_.Reset();
}
void PasswordGenerationAgent::DidFinishDocumentLoad() { void PasswordGenerationAgent::DidFinishDocumentLoad() {
// Update stats for main frame navigation. // Update stats for main frame navigation.
if (!render_frame()->GetWebFrame()->Parent()) { if (!render_frame()->GetWebFrame()->Parent()) {
......
...@@ -94,6 +94,8 @@ class PasswordGenerationAgent : public content::RenderFrameObserver, ...@@ -94,6 +94,8 @@ class PasswordGenerationAgent : public content::RenderFrameObserver,
typedef std::vector<AccountCreationFormData> AccountCreationFormDataList; typedef std::vector<AccountCreationFormData> AccountCreationFormDataList;
// RenderFrameObserver: // RenderFrameObserver:
void DidCommitProvisionalLoad(bool is_new_navigation,
bool is_same_document_navigation) override;
void DidFinishDocumentLoad() override; void DidFinishDocumentLoad() override;
void DidFinishLoad() override; void DidFinishLoad() override;
void OnDestruct() override; void OnDestruct() override;
......
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