From 5586f460b722e61c9335f47824697d83b41cd981 Mon Sep 17 00:00:00 2001 From: varjolintu Date: Wed, 16 Sep 2020 20:48:29 +0300 Subject: [PATCH] Fix Google login page submit --- keepassxc-browser/content/autocomplete.js | 5 ++++- keepassxc-browser/content/keepassxc-browser.js | 12 ++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/keepassxc-browser/content/autocomplete.js b/keepassxc-browser/content/autocomplete.js index bf3662c..cb5a123 100644 --- a/keepassxc-browser/content/autocomplete.js +++ b/keepassxc-browser/content/autocomplete.js @@ -201,7 +201,10 @@ kpxcAutocomplete.keyPress = function(e) { } kpxcAutocomplete.index = kpxcAutocomplete.elements.findIndex(c => c.value === kpxcAutocomplete.input.value); - kpxcAutocomplete.fillPassword(kpxcAutocomplete.input.value, kpxcAutocomplete.index, kpxcAutocomplete.elements[kpxcAutocomplete.index].uuid); + if (kpxcAutocomplete.index >= 0) { + kpxcAutocomplete.fillPassword(kpxcAutocomplete.input.value, kpxcAutocomplete.index, kpxcAutocomplete.elements[kpxcAutocomplete.index].uuid); + } + kpxcAutocomplete.closeList(); } else if (e.key === 'Escape') { kpxcAutocomplete.closeList(); diff --git a/keepassxc-browser/content/keepassxc-browser.js b/keepassxc-browser/content/keepassxc-browser.js index a3b7d0b..fafc642 100755 --- a/keepassxc-browser/content/keepassxc-browser.js +++ b/keepassxc-browser/content/keepassxc-browser.js @@ -156,6 +156,18 @@ kpxcForm.getCredentialFieldsFromForm = function(form) { // Get the form submit button instead if action URL is same as the page itself kpxcForm.getFormSubmitButton = function(form) { const action = kpxc.submitUrl || form.action; + + // Special handling for accounts.google.com. The submit button is outside the form. + if (form.action.startsWith('https://accounts.google.com')) { + const findDiv = $('#identifierNext'); + if (!findDiv) { + return undefined; + } + + const buttons = findDiv.getElementsByTagName('button'); + return buttons.length > 0 ? buttons[0] : undefined; + } + if (action.includes(document.location.origin + document.location.pathname)) { for (const i of form.elements) { if (i.type === 'submit') {