blob: 6955f339a8374ee523cac6ea184e8e001a031436 [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/autofill/content/renderer/suggestion_properties.h"
#include "base/notreached.h"
#include "components/autofill/core/common/aliases.h"
using blink::WebFormControlElement;
namespace autofill {
// The following functions define properties of AutofillSuggestions based
// on the trigger source.
bool ShouldAutofillOnEmptyValues(
AutofillSuggestionTriggerSource trigger_source) {
switch (trigger_source) {
case AutofillSuggestionTriggerSource::kFormControlElementClicked:
case AutofillSuggestionTriggerSource::kTextFieldDidReceiveKeyDown:
case AutofillSuggestionTriggerSource::kOpenTextDataListChooser:
case AutofillSuggestionTriggerSource::kManualFallbackPasswords:
case AutofillSuggestionTriggerSource::kManualFallbackPlusAddresses:
case AutofillSuggestionTriggerSource::kComposeDialogLostFocus:
case AutofillSuggestionTriggerSource::kComposeDelayedProactiveNudge:
case AutofillSuggestionTriggerSource::kTextareaFocusedWithoutClick:
case AutofillSuggestionTriggerSource::kContentEditableClicked:
case AutofillSuggestionTriggerSource::kPasswordManagerProcessedFocusedField:
case AutofillSuggestionTriggerSource::kProactivePasswordRecovery:
return true;
case AutofillSuggestionTriggerSource::kTextFieldValueChanged:
return false;
// `kPasswordManager`, `kiOS`, and `kPlusAddressUpdatedInBrowserProcess` are
// not used in the renderer code. As such, suggestion properties don't apply
// to them.
case AutofillSuggestionTriggerSource::kPasswordManager:
case AutofillSuggestionTriggerSource::kiOS:
case AutofillSuggestionTriggerSource::kPlusAddressUpdatedInBrowserProcess:
case AutofillSuggestionTriggerSource::kUnspecified:
break;
}
NOTREACHED();
}
bool ShouldAutofillOnLongValues(
AutofillSuggestionTriggerSource trigger_source) {
switch (trigger_source) {
case AutofillSuggestionTriggerSource::kTextareaFocusedWithoutClick:
case AutofillSuggestionTriggerSource::kContentEditableClicked:
case AutofillSuggestionTriggerSource::kComposeDialogLostFocus:
case AutofillSuggestionTriggerSource::kComposeDelayedProactiveNudge:
return true;
case AutofillSuggestionTriggerSource::kFormControlElementClicked:
case AutofillSuggestionTriggerSource::kManualFallbackPasswords:
case AutofillSuggestionTriggerSource::kManualFallbackPlusAddresses:
case AutofillSuggestionTriggerSource::kOpenTextDataListChooser:
case AutofillSuggestionTriggerSource::kTextFieldValueChanged:
case AutofillSuggestionTriggerSource::kTextFieldDidReceiveKeyDown:
case AutofillSuggestionTriggerSource::kPasswordManagerProcessedFocusedField:
case AutofillSuggestionTriggerSource::kPlusAddressUpdatedInBrowserProcess:
case AutofillSuggestionTriggerSource::kProactivePasswordRecovery:
return false;
case AutofillSuggestionTriggerSource::kPasswordManager:
case AutofillSuggestionTriggerSource::kiOS:
case AutofillSuggestionTriggerSource::kUnspecified:
break;
}
NOTREACHED();
}
bool RequiresCaretAtEnd(AutofillSuggestionTriggerSource trigger_source) {
switch (trigger_source) {
case AutofillSuggestionTriggerSource::kTextFieldValueChanged:
case AutofillSuggestionTriggerSource::kTextFieldDidReceiveKeyDown:
return true;
case AutofillSuggestionTriggerSource::kFormControlElementClicked:
case AutofillSuggestionTriggerSource::kTextareaFocusedWithoutClick:
case AutofillSuggestionTriggerSource::kContentEditableClicked:
case AutofillSuggestionTriggerSource::kOpenTextDataListChooser:
case AutofillSuggestionTriggerSource::kManualFallbackPasswords:
case AutofillSuggestionTriggerSource::kManualFallbackPlusAddresses:
case AutofillSuggestionTriggerSource::kComposeDialogLostFocus:
case AutofillSuggestionTriggerSource::kComposeDelayedProactiveNudge:
case AutofillSuggestionTriggerSource::kPasswordManagerProcessedFocusedField:
case AutofillSuggestionTriggerSource::kProactivePasswordRecovery:
return false;
// `kPasswordManager`, `kiOS`, and `kPlusAddressUpdatedInBrowserProcess` are
// not used in the renderer code. As such, suggestion properties don't apply
// to them.
case AutofillSuggestionTriggerSource::kPasswordManager:
case AutofillSuggestionTriggerSource::kiOS:
case AutofillSuggestionTriggerSource::kPlusAddressUpdatedInBrowserProcess:
case AutofillSuggestionTriggerSource::kUnspecified:
break;
}
NOTREACHED();
}
bool ShouldShowFullSuggestionListForPasswordManager(
AutofillSuggestionTriggerSource trigger_source,
const WebFormControlElement& element) {
switch (trigger_source) {
case AutofillSuggestionTriggerSource::kFormControlElementClicked:
case AutofillSuggestionTriggerSource::kPasswordManagerProcessedFocusedField:
// Even if the user has not edited an input element, it may still contain
// a default value filled by the website. In that case, don't elide
// suggestions that don't have a common prefix with the default value.
return element.IsAutofilled() || !element.UserHasEditedTheField();
case AutofillSuggestionTriggerSource::kTextareaFocusedWithoutClick:
case AutofillSuggestionTriggerSource::kContentEditableClicked:
case AutofillSuggestionTriggerSource::kTextFieldValueChanged:
case AutofillSuggestionTriggerSource::kTextFieldDidReceiveKeyDown:
case AutofillSuggestionTriggerSource::kOpenTextDataListChooser:
case AutofillSuggestionTriggerSource::kManualFallbackPasswords:
case AutofillSuggestionTriggerSource::kManualFallbackPlusAddresses:
case AutofillSuggestionTriggerSource::kComposeDialogLostFocus:
case AutofillSuggestionTriggerSource::kComposeDelayedProactiveNudge:
return false;
case AutofillSuggestionTriggerSource::kProactivePasswordRecovery:
return true;
// `kPasswordManager`, `kiOS`, and `kPlusAddressUpdatedInBrowserProcess`
// are not used in the renderer code. As such, suggestion properties
// don't apply to them. `kPasswordManager` specifically is used to
// identify password manager suggestions in the browser process. In the
// renderer, the logic triggering suggestions through Blink events is
// shared. Thus, the return values for `kFormControlElementClicked` etc.
// matter for the password manager in the renderer.
case AutofillSuggestionTriggerSource::kPasswordManager:
case AutofillSuggestionTriggerSource::kiOS:
case AutofillSuggestionTriggerSource::kPlusAddressUpdatedInBrowserProcess:
case AutofillSuggestionTriggerSource::kUnspecified:
break;
}
NOTREACHED();
}
} // namespace autofill