Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 50bf1e71 authored by Carmelo Messina's avatar Carmelo Messina
Browse files

Enable native Android autofill: fix a crash caused by an dangling pointer

parent 8a021bb6
Loading
Loading
Loading
Loading
+72 −1
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
 chrome/browser/autofill/android/BUILD.gn      |  2 +-
 .../autofill/AutofillClientProviderUtils.java |  2 +-
 ...AutofillThirdPartyModeContentProvider.java |  1 +
 .../chrome_password_manager_client.cc         |  6 ++
 .../chrome_password_manager_client.h          |  2 +
 .../strings/android_chrome_strings.grd        |  6 ++
 .../ui/autofill/autofill_client_provider.cc   | 94 +------------------
 .../ui/autofill/autofill_client_provider.h    |  6 --
@@ -45,7 +47,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
 .../foundations/browser_autofill_manager.h    |  2 +
 .../autofill/core/common/autofill_prefs.cc    |  4 +-
 .../autofill/core/common/autofill_prefs.h     |  5 +
 30 files changed, 239 insertions(+), 144 deletions(-)
 .../core/browser/password_form_manager.cc     |  4 +
 .../core/browser/password_manager_client.cc   |  2 +
 .../core/browser/password_manager_client.h    |  2 +
 35 files changed, 255 insertions(+), 144 deletions(-)
 create mode 100644 components/android_autofill/browser/java/src/org/chromium/components/autofill/BrowserSelectionActionMenuDelegate.java

diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java
@@ -371,6 +376,34 @@ diff --git a/chrome/browser/autofill/android/java/src/org/chromium/chrome/browse
         if (createContentUri().equals(uri)) {
             final String[] columns = {AUTOFILL_THIRD_PARTY_MODE_COLUMN};
             MatrixCursor cursor = new MatrixCursor(columns, 1);
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.cc b/chrome/browser/password_manager/chrome_password_manager_client.cc
--- a/chrome/browser/password_manager/chrome_password_manager_client.cc
+++ b/chrome/browser/password_manager/chrome_password_manager_client.cc
@@ -518,6 +518,12 @@ bool ChromePasswordManagerClient::PromptUserToChooseCredentials(
 }
 
 #if BUILDFLAG(IS_ANDROID)
+void ChromePasswordManagerClient::OnFillNow() {
+  if (touch_to_fill_controller_) {
+    touch_to_fill_controller_->Reset();
+  }
+}
+
 void ChromePasswordManagerClient::ShowPasswordManagerErrorMessage(
     password_manager::ErrorMessageFlowType flow_type,
     password_manager::PasswordStoreBackendErrorType error_type) {
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.h b/chrome/browser/password_manager/chrome_password_manager_client.h
--- a/chrome/browser/password_manager/chrome_password_manager_client.h
+++ b/chrome/browser/password_manager/chrome_password_manager_client.h
@@ -161,6 +161,8 @@ class ChromePasswordManagerClient
       const url::Origin& origin,
       CredentialsCallback callback) override;
 #if BUILDFLAG(IS_ANDROID)
+  void OnFillNow() override;
+
   void ShowPasswordManagerErrorMessage(
       password_manager::ErrorMessageFlowType flow_type,
       password_manager::PasswordStoreBackendErrorType error_type) override;
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -900,4 +933,42 @@ diff --git a/components/autofill/core/common/autofill_prefs.h b/components/autof
 #if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) || \
     BUILDFLAG(IS_IOS) || BUILDFLAG(IS_CHROMEOS)
 // Boolean that is set when payment methods mandatory re-auth is enabled by the
diff --git a/components/password_manager/core/browser/password_form_manager.cc b/components/password_manager/core/browser/password_form_manager.cc
--- a/components/password_manager/core/browser/password_form_manager.cc
+++ b/components/password_manager/core/browser/password_form_manager.cc
@@ -1196,6 +1196,10 @@ void PasswordFormManager::FillNow() {
   }
   autofills_left_--;
 
+#if BUILDFLAG(IS_ANDROID)
+  client_->OnFillNow();
+#endif
+
   // There are additional signals (server-side data) and parse results in
   // filling and saving mode might be different so it is better not to cache
   // parse result, but to parse each time again.
diff --git a/components/password_manager/core/browser/password_manager_client.cc b/components/password_manager/core/browser/password_manager_client.cc
--- a/components/password_manager/core/browser/password_manager_client.cc
+++ b/components/password_manager/core/browser/password_manager_client.cc
@@ -39,6 +39,8 @@ bool PasswordManagerClient::IsAutoSignInEnabled() const {
 }
 
 #if BUILDFLAG(IS_ANDROID)
+void PasswordManagerClient::OnFillNow() {}
+
 void PasswordManagerClient::ShowPasswordManagerErrorMessage(
     ErrorMessageFlowType flow_type,
     password_manager::PasswordStoreBackendErrorType error_type) {}
diff --git a/components/password_manager/core/browser/password_manager_client.h b/components/password_manager/core/browser/password_manager_client.h
--- a/components/password_manager/core/browser/password_manager_client.h
+++ b/components/password_manager/core/browser/password_manager_client.h
@@ -224,6 +224,8 @@ class PasswordManagerClient {
   virtual void ShowKeyboardReplacingSurface(
       PasswordManagerDriver* driver,
       const autofill::PasswordSuggestionRequest& request);
+
+  virtual void OnFillNow();
 #endif
 
   // Checks whether user re-authentication should be triggered before password
--