Revert of Postpone deletion of (Password)AutofillAgent (patchset #1 id:1 of https://codereview.chromium.org/1943873002/ )
Reason for revert:
This fix is not complete, I need to also handle disabling the LegacyAutofillAgent.
Because the final fix is going to be merged, I prefer to have the complete solution in one CL. Therefore I am reverting this partial fix, and will reintroduce it in a new CL. Sorry for the noise.
BUG=609010, 609007, 608100, 608101
Original issue's description:
> Postpone deletion of (Password)AutofillAgent
>
> Currently, the two agent classes delete themselves immediately on destruction
> of the RenderFrame they are observing. This CL postpones the deletion to a
> separately posted task, to avoid the situation when the agent is deleted while
> still having methods in progress lower on the stack.
>
> BUG=608100
>
> Committed: https://crrev.com/a8755e432460c9412291c0ae4dd887babb3fa506
> Cr-Commit-Position: refs/heads/master@{#391236}
TBR=mathp@chromium.org,dvadym@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=608100
Review-Url: https://codereview.chromium.org/1951813002
Cr-Commit-Position: refs/heads/master@{#391465}
diff --git a/components/autofill/content/renderer/autofill_agent.cc b/components/autofill/content/renderer/autofill_agent.cc
index 788e01b..e233d106 100644
--- a/components/autofill/content/renderer/autofill_agent.cc
+++ b/components/autofill/content/renderer/autofill_agent.cc
@@ -312,14 +312,6 @@
element_ = *element;
}
-void AutofillAgent::OnDestruct() {
- // As described in http://crbug.com/608100, there might be an AutofillAgent
- // method in-progress lower on the stack. Destroying |this| would cause
- // use-after-free once the lower stack frame becomes active. Instead, a task
- // needs to be posted to delete this.
- base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, this);
-}
-
void AutofillAgent::FocusChangeComplete() {
WebDocument doc = render_frame()->GetWebFrame()->document();
WebElement focused_element;
diff --git a/components/autofill/content/renderer/autofill_agent.h b/components/autofill/content/renderer/autofill_agent.h
index 43af5550..1257791 100644
--- a/components/autofill/content/renderer/autofill_agent.h
+++ b/components/autofill/content/renderer/autofill_agent.h
@@ -115,7 +115,6 @@
void WillSubmitForm(const blink::WebFormElement& form) override;
void DidChangeScrollOffset() override;
void FocusedNodeChanged(const blink::WebNode& node) override;
- void OnDestruct() override;
// Pass-through from LegacyAutofillAgent. This correlates with the
// RenderViewObserver method.
diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc
index d0245ec..ce485ac 100644
--- a/components/autofill/content/renderer/password_autofill_agent.cc
+++ b/components/autofill/content/renderer/password_autofill_agent.cc
@@ -1237,14 +1237,6 @@
}
}
-void PasswordAutofillAgent::OnDestruct() {
- // As described in http://crbug.com/608100, there might be an AutofillAgent
- // method in-progress lower on the stack. Destroying |this| would cause
- // use-after-free once the lower stack frame becomes active. Instead, a task
- // needs to be posted to delete this.
- base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, this);
-}
-
void PasswordAutofillAgent::DidStartProvisionalLoad() {
std::unique_ptr<RendererSavePasswordProgressLogger> logger;
if (logging_state_active_) {
diff --git a/components/autofill/content/renderer/password_autofill_agent.h b/components/autofill/content/renderer/password_autofill_agent.h
index cb6c87d..a6a4f05 100644
--- a/components/autofill/content/renderer/password_autofill_agent.h
+++ b/components/autofill/content/renderer/password_autofill_agent.h
@@ -154,7 +154,6 @@
bool is_same_page_navigation) override;
void WillSendSubmitEvent(const blink::WebFormElement& form) override;
void WillSubmitForm(const blink::WebFormElement& form) override;
- void OnDestruct() override;
// RenderView IPC handlers:
void OnFillPasswordForm(int key, const PasswordFormFillData& form_data);