LeOSium_old/patches/0001-Vanadium/0100-Support-for-both-brows...

231 lines
10 KiB
Diff
Raw Normal View History

2023-11-18 11:23:04 +01:00
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: fgei <fgei@gmail.com>
Date: Tue, 21 Feb 2023 01:48:15 +0000
Subject: [PATCH] Support for both browser and android autofill functionality
---
.../browser/android_autofill_manager.cc | 15 +++++++
.../browser/android_autofill_manager.h | 15 +++++++
.../browser/content_autofill_driver.cc | 42 +++++++++++++++++++
.../content/browser/content_autofill_driver.h | 12 ++++++
4 files changed, 84 insertions(+)
diff --git a/components/android_autofill/browser/android_autofill_manager.cc b/components/android_autofill/browser/android_autofill_manager.cc
index 60b056e7e22d9..4101639a5649e 100644
--- a/components/android_autofill/browser/android_autofill_manager.cc
+++ b/components/android_autofill/browser/android_autofill_manager.cc
@@ -9,6 +9,7 @@
#include "components/android_autofill/browser/autofill_provider.h"
#include "components/autofill/content/browser/content_autofill_driver.h"
#include "components/autofill/core/browser/metrics/form_events/form_event_logger_weblayer_android.h"
+#include "components/autofill/core/browser/browser_autofill_manager.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
@@ -26,6 +27,20 @@ void AndroidDriverInitHook(AutofillClient* client,
driver->GetAutofillAgent()->SetQueryPasswordSuggestion(true);
}
+void AndroidAndBrowserDriverInitHook(
+ AutofillClient* client,
+ const std::string& app_locale,
+ ContentAutofillDriver* driver) {
+ driver->set_autofill_manager(std::make_unique<BrowserAutofillManager>(
+ driver, client, app_locale));
+ driver->set_secondary_autofill_manager(base::WrapUnique(
+ new AndroidAutofillManager(driver, client)));
+ driver->GetAutofillAgent()->SetUserGestureRequired(false);
+ driver->GetAutofillAgent()->SetSecureContextRequired(true);
+ driver->GetAutofillAgent()->SetFocusRequiresScroll(false);
+ driver->GetAutofillAgent()->SetQueryPasswordSuggestion(true);
+}
+
AndroidAutofillManager::AndroidAutofillManager(AutofillDriver* driver,
AutofillClient* client)
: AutofillManager(driver, client) {
diff --git a/components/android_autofill/browser/android_autofill_manager.h b/components/android_autofill/browser/android_autofill_manager.h
index 179b2b47464e0..dd8af3166841a 100644
--- a/components/android_autofill/browser/android_autofill_manager.h
+++ b/components/android_autofill/browser/android_autofill_manager.h
@@ -16,6 +16,16 @@ class AutofillProvider;
class ContentAutofillDriver;
class FormEventLoggerWeblayerAndroid;
+// Creates an AndroidAutofillManager and attaches it to the `driver`.
+//
+// This hook is to be passed to CreateForWebContentsAndDelegate().
+// It is the glue between ContentAutofillDriver[Factory] and
+// AndroidAutofillManager, BrowserAutofillManager.
+void AndroidAndBrowserDriverInitHook(
+ AutofillClient* client,
+ const std::string& app_locale,
+ ContentAutofillDriver* driver);
+
// Creates an AndroidAutofillManager and attaches it to the `driver`.
//
// This hook is to be passed to CreateForWebContentsAndDelegate().
@@ -86,6 +96,11 @@ class AndroidAutofillManager : public AutofillManager {
const url::Origin& triggered_origin);
protected:
+ friend void AndroidAndBrowserDriverInitHook(
+ AutofillClient* client,
+ const std::string& app_locale,
+ ContentAutofillDriver* driver);
+
friend void AndroidDriverInitHook(AutofillClient* client,
ContentAutofillDriver* driver);
diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/components/autofill/content/browser/content_autofill_driver.cc
index 00b0f300a0748..0f9287246a098 100644
--- a/components/autofill/content/browser/content_autofill_driver.cc
+++ b/components/autofill/content/browser/content_autofill_driver.cc
@@ -336,6 +336,10 @@ void ContentAutofillDriver::FormsSeen(
const std::vector<FormGlobalId>& removed_forms) {
target->autofill_manager_->OnFormsSeen(WithNewVersion(updated_forms),
removed_forms);
+ if (target->secondary_autofill_manager_) {
+ target->secondary_autofill_manager_->OnFormsSeen(WithNewVersion(updated_forms),
+ removed_forms);
+ }
});
}
@@ -362,6 +366,10 @@ void ContentAutofillDriver::FormSubmitted(
}
target->autofill_manager_->OnFormSubmitted(
WithNewVersion(form), known_success, submission_source);
+ if (target->secondary_autofill_manager_) {
+ target->secondary_autofill_manager_->OnFormSubmitted(
+ WithNewVersion(form), known_success, submission_source);
+ }
});
}
@@ -382,6 +390,10 @@ void ContentAutofillDriver::TextFieldDidChange(const FormData& raw_form,
base::TimeTicks timestamp) {
target->autofill_manager_->OnTextFieldDidChange(
WithNewVersion(form), field, bounding_box, timestamp);
+ if (target->secondary_autofill_manager_) {
+ target->secondary_autofill_manager_->OnTextFieldDidChange(
+ WithNewVersion(form), field, bounding_box, timestamp);
+ }
});
}
@@ -400,6 +412,10 @@ void ContentAutofillDriver::TextFieldDidScroll(const FormData& raw_form,
const FormFieldData& field, const gfx::RectF& bounding_box) {
target->autofill_manager_->OnTextFieldDidScroll(WithNewVersion(form),
field, bounding_box);
+ if (target->secondary_autofill_manager_) {
+ target->secondary_autofill_manager_->OnTextFieldDidScroll(WithNewVersion(form),
+ field, bounding_box);
+ }
});
}
@@ -419,6 +435,10 @@ void ContentAutofillDriver::SelectControlDidChange(
const FormFieldData& field, const gfx::RectF& bounding_box) {
target->autofill_manager_->OnSelectControlDidChange(
WithNewVersion(form), field, bounding_box);
+ if (target->secondary_autofill_manager_) {
+ target->autofill_manager_->OnSelectControlDidChange(
+ WithNewVersion(form), field, bounding_box);
+ }
});
}
@@ -444,6 +464,11 @@ void ContentAutofillDriver::AskForValuesToFill(
target->autofill_manager_->OnAskForValuesToFill(
WithNewVersion(form), field, bounding_box,
autoselect_first_suggestion, form_element_was_clicked);
+ if (target->secondary_autofill_manager_) {
+ target->secondary_autofill_manager_->OnAskForValuesToFill(
+ WithNewVersion(form), field, bounding_box,
+ autoselect_first_suggestion, form_element_was_clicked);
+ }
});
}
@@ -454,12 +479,18 @@ void ContentAutofillDriver::HidePopup() {
DCHECK(!target->IsPrerendering())
<< "We should never affect UI while prerendering";
target->autofill_manager_->OnHidePopup();
+ if (target->secondary_autofill_manager_) {
+ target->secondary_autofill_manager_->OnHidePopup();
+ }
});
}
void ContentAutofillDriver::FocusNoLongerOnFormCallback(
bool had_interacted_form) {
autofill_manager_->OnFocusNoLongerOnForm(had_interacted_form);
+ if (secondary_autofill_manager_) {
+ secondary_autofill_manager_->OnFocusNoLongerOnForm(had_interacted_form);
+ }
}
void ContentAutofillDriver::FocusNoLongerOnForm(bool had_interacted_form) {
@@ -487,6 +518,10 @@ void ContentAutofillDriver::FocusOnFormField(const FormData& raw_form,
const FormFieldData& field, const gfx::RectF& bounding_box) {
target->autofill_manager_->OnFocusOnFormField(WithNewVersion(form),
field, bounding_box);
+ if (target->secondary_autofill_manager_) {
+ target->secondary_autofill_manager_->OnFocusOnFormField(WithNewVersion(form),
+ field, bounding_box);
+ }
});
}
@@ -500,6 +535,10 @@ void ContentAutofillDriver::DidFillAutofillFormData(const FormData& raw_form,
base::TimeTicks timestamp) {
target->autofill_manager_->OnDidFillAutofillFormData(
WithNewVersion(form), timestamp);
+ if (target->secondary_autofill_manager_) {
+ target->secondary_autofill_manager_->OnDidFillAutofillFormData(
+ WithNewVersion(form), timestamp);
+ }
});
}
@@ -575,6 +614,9 @@ void ContentAutofillDriver::Reset() {
submitted_forms_.clear();
autofill_router_->UnregisterDriver(this);
autofill_manager_->Reset();
+ if (secondary_autofill_manager_) {
+ secondary_autofill_manager_->Reset();
+ }
}
const mojo::AssociatedRemote<mojom::AutofillAgent>&
diff --git a/components/autofill/content/browser/content_autofill_driver.h b/components/autofill/content/browser/content_autofill_driver.h
index 65d6e43b5e017..bfae54ada1006 100644
--- a/components/autofill/content/browser/content_autofill_driver.h
+++ b/components/autofill/content/browser/content_autofill_driver.h
@@ -130,6 +130,14 @@ class ContentAutofillDriver : public AutofillDriver,
}
AutofillManager* autofill_manager() { return autofill_manager_.get(); }
+ void set_secondary_autofill_manager(
+ std::unique_ptr<AutofillManager> secondary_autofill_manager) {
+ secondary_autofill_manager_ = std::move(secondary_autofill_manager);
+ }
+ AutofillManager* secondary_autofill_manager() {
+ return secondary_autofill_manager_.get();
+ }
+
content::RenderFrameHost* render_frame_host() { return render_frame_host_; }
// Expose the events that originate from the browser and renderer processes,
@@ -343,6 +351,10 @@ class ContentAutofillDriver : public AutofillDriver,
// code.
std::unique_ptr<AutofillManager> autofill_manager_ = nullptr;
+ // adds a reference for AndroidAutofillManager, since native autofill works in
+ // conjunction with browser autofill
+ std::unique_ptr<AutofillManager> secondary_autofill_manager_ = nullptr;
+
content::RenderWidgetHost::KeyPressEventCallback key_press_handler_;
mojo::AssociatedReceiver<mojom::AutofillDriver> receiver_{this};