Commit 73de91f7 authored by Maria Kazinova's avatar Maria Kazinova Committed by Commit Bot

[iOS] Fixing a crash in PasswordManager::UpdateStateOnUserInput.

Driver check needs to be omitted on iOS, as cross-origin frames support
is not implemented yet for PasswordManager and driver pointer is
intentionally set to null sometimes.

Bug: 1065196
Change-Id: I898b16a27ff478fd556c06322f00f2482fa1749e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2129535Reviewed-by: default avatarVadym Doroshenko  <dvadym@chromium.org>
Commit-Queue: Maria Kazinova <kazinova@google.com>
Cr-Commit-Position: refs/heads/master@{#755296}
parent 20706426
......@@ -506,6 +506,11 @@ bool PasswordFormManager::UpdateStateOnUserInput(
PresaveGeneratedPasswordInternal(observed_form_, generated_password);
return true;
}
void PasswordFormManager::SetDriver(
const base::WeakPtr<PasswordManagerDriver>& driver) {
driver_ = driver;
}
#endif // defined(OS_IOS)
std::unique_ptr<PasswordFormManager> PasswordFormManager::Clone() {
......
......@@ -189,6 +189,8 @@ class PasswordFormManager : public PasswordFormManagerForUI,
bool UpdateStateOnUserInput(const base::string16& form_identifier,
const base::string16& field_identifier,
const base::string16& field_value);
void SetDriver(const base::WeakPtr<PasswordManagerDriver>& driver);
#endif // defined(OS_IOS)
// Create a copy of |*this| which can be passed to the code handling
......
......@@ -1070,9 +1070,15 @@ void PasswordManager::RecordProvisionalSaveFailure(
// TODO(https://crbug.com/831123): Implement creating missing
// PasswordFormManager when PasswordFormManager is gone.
PasswordFormManager* PasswordManager::GetMatchedManager(
const PasswordManagerDriver* driver,
PasswordManagerDriver* driver,
const FormData& form) {
for (auto& form_manager : form_managers_) {
// Until support of cross-origin iframes is implemented, there is only one
// driver on iOS. It needs to be set in order for filling to work.
#if defined(OS_IOS)
if (driver && !form_manager->GetDriver())
form_manager->SetDriver(driver->AsWeakPtr());
#endif
if (form_manager->DoesManage(form, driver))
return form_manager.get();
}
......
......@@ -303,7 +303,7 @@ class PasswordManager : public FormSubmissionObserver {
// Returns the manager which manages |form|. |driver| is needed to determine
// the match. Returns nullptr when no matched manager is found.
PasswordFormManager* GetMatchedManager(const PasswordManagerDriver* driver,
PasswordFormManager* GetMatchedManager(PasswordManagerDriver* driver,
const autofill::FormData& form);
// Log a frame (main frame, iframe) of a submitted password form.
......
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