From 1e2a8ea2b89343d642cacff1bbcecc9f4dc2e0dd Mon Sep 17 00:00:00 2001 From: Liviu Tinta Date: Wed, 22 Jun 2022 23:31:33 +0000 Subject: [PATCH] [MPArch] Use IsOutermostMainFrame instead of checking the Parent render_frame()->GetWebFrame()->Parent() is used to detect if the primary main frame was navigated or a subframe. In MPArch, because of nested frame trees, instead of checking Parent() we should check IsOutermostMainFrame. Bug: 1294378 Change-Id: I303569cec12c2bf6e00a6f8680c8379f142a0379 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3710067 Reviewed-by: Christoph Schwering Reviewed-by: Adithya Srinivasan Reviewed-by: Vasilii Sukhanov Commit-Queue: Liviu Tinta Cr-Commit-Position: refs/heads/main@{#1016913} --- components/autofill/content/renderer/form_tracker.cc | 4 ++-- .../content/renderer/password_autofill_agent.cc | 10 ++++++---- .../content/renderer/password_generation_agent.cc | 4 ++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/components/autofill/content/renderer/form_tracker.cc b/components/autofill/content/renderer/form_tracker.cc index 1d7bbb33aaa2b0..f7bc4bd9bbab9f 100644 --- a/components/autofill/content/renderer/form_tracker.cc +++ b/components/autofill/content/renderer/form_tracker.cc @@ -162,8 +162,8 @@ void FormTracker::DidStartNavigation( absl::optional navigation_type) { DCHECK_CALLED_ON_VALID_SEQUENCE(form_tracker_sequence_checker_); blink::WebLocalFrame* navigated_frame = render_frame()->GetWebFrame(); - // Ony handle main frame. - if (navigated_frame->Parent()) + // Ony handle primary main frame. + if (!navigated_frame->IsOutermostMainFrame()) return; // Bug fix for crbug.com/368690. isProcessingUserGesture() is false when diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc index 96724ce1a1e898..deef0951655a94 100644 --- a/components/autofill/content/renderer/password_autofill_agent.cc +++ b/components/autofill/content/renderer/password_autofill_agent.cc @@ -1380,7 +1380,9 @@ void PasswordAutofillAgent::OnFrameDetached() { // If a sub frame has been destroyed while the user was entering information // into a password form, try to save the data. See https://crbug.com/450806 // for examples of sites that perform login using this technique. - if (render_frame()->GetWebFrame()->Parent() && browser_has_form_to_process_) { + // We are treating primary main frame and the root of embedded frames the same + // on purpose. + if (browser_has_form_to_process_ && render_frame()->GetWebFrame()->Parent()) { DCHECK(FrameCanAccessPasswordManager()); GetPasswordManagerDriver().DynamicFormSubmission( SubmissionIndicatorEvent::FRAME_DETACHED); @@ -1408,12 +1410,12 @@ void PasswordAutofillAgent::ReadyToCommitNavigation( } WebLocalFrame* navigated_frame = render_frame()->GetWebFrame(); - if (navigated_frame->Parent()) { - LogMessage(logger.get(), Logger::STRING_FRAME_NOT_MAIN_FRAME); - } else { + if (navigated_frame->IsOutermostMainFrame()) { // This is a new navigation, so require a new user gesture before filling in // passwords. gatekeeper_.Reset(); + } else { + LogMessage(logger.get(), Logger::STRING_FRAME_NOT_MAIN_FRAME); } CleanupOnDocumentShutdown(); diff --git a/components/autofill/content/renderer/password_generation_agent.cc b/components/autofill/content/renderer/password_generation_agent.cc index e780918243d7cd..d8b9b49254397a 100644 --- a/components/autofill/content/renderer/password_generation_agent.cc +++ b/components/autofill/content/renderer/password_generation_agent.cc @@ -233,8 +233,8 @@ void PasswordGenerationAgent::BindPendingReceiver( void PasswordGenerationAgent::DidCommitProvisionalLoad( ui::PageTransition transition) { - // Update stats for main frame navigation. - if (!render_frame()->GetWebFrame()->Parent()) { + // Update stats for primary main frame navigation. + if (render_frame()->GetWebFrame()->IsOutermostMainFrame()) { if (current_generation_item_) { if (current_generation_item_->password_edited_) { password_generation::LogPasswordGenerationEvent(