blob: 846e368343533c68109f5b5c311149b952d1d1dc [file] [log] [blame]
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_AUTOFILL_IOS_BROWSER_FORM_SUGGESTION_H_
#define COMPONENTS_AUTOFILL_IOS_BROWSER_FORM_SUGGESTION_H_
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "components/autofill/core/browser/field_types.h"
#import "components/autofill/core/browser/suggestions/suggestion.h"
#import "components/autofill/core/browser/suggestions/suggestion_type.h"
#import "components/autofill/ios/form_util/form_activity_params.h"
@protocol FormSuggestionProvider;
// Metadata tied to the form suggestion that gives more context around the
// suggestion.
struct FormSuggestionMetadata {
// True if the suggestion is for a single username form.
bool is_single_username_form = false;
// True if the field that triggered the suggestion was (1) obfuscated and (2)
// determined to be likely a real password field based on a best guess.
bool likely_from_real_password_field = false;
};
// Enum class used to determine the feature for in-product help for the
// suggestion.
enum class SuggestionFeatureForIPH {
// Default value
kUnknown = 0,
// Denoting IPH for the external account profile suggestion.
kAutofillExternalAccountProfile = 1,
// Denoting IPH for the plus address create suggestion.
kPlusAddressCreation = 2,
// Denoting IPH for the home and work address suggestion.
kHomeAndWorkAddressSuggestion = 3,
// Denoting IPH for the name and email suggestion.
kAccountNameEmailSuggestion = 4
};
// Enum class used to determine the icon for the suggestion.
enum class SuggestionIconType {
// Default value.
kNone = 0,
// Home address profile icon.
kAccountHome = 1,
// Work address profile icon.
kAccountWork = 2,
// Backup password icon.
kBackupPassword = 3,
};
// Represents a user-selectable suggestion for a single field within a form
// on a web page.
@interface FormSuggestion : NSObject
// The string in the form to show to the user to represent the suggestion.
@property(copy, readonly, nonatomic) NSString* value;
// An optional user-visible string to hold a piece of text following the value.
@property(copy, readonly, nonatomic) NSString* minorValue;
// An optional user-visible description for this suggestion.
@property(copy, readonly, nonatomic) NSString* displayDescription;
// The suggestion icon; either a custom icon if available, or the network icon
// otherwise.
@property(copy, readonly, nonatomic) UIImage* icon;
// Denotes the suggestion type.
@property(assign, readonly, nonatomic) autofill::SuggestionType type;
// Denotes the field's filling type.
@property(assign, readonly, nonatomic)
autofill::FieldType fieldByFieldFillingTypeUsed;
// Indicates if the user should re-authenticate with the device before applying
// the suggestion.
@property(assign, readonly, nonatomic) BOOL requiresReauth;
// If specified, this text will be announced when this suggestion is accepted.
@property(copy, readonly, nonatomic) NSString* acceptanceA11yAnnouncement;
// If specified, shows in-product help for the suggestion.
@property(assign, nonatomic) SuggestionFeatureForIPH featureForIPH;
// If specified, describes the icon type for the suggestion.
@property(assign, nonatomic) SuggestionIconType suggestionIconType;
// The payload associated with this suggestion.
@property(assign, readonly, nonatomic) autofill::Suggestion::Payload payload;
// Metadata tied to the suggestion that gives more context.
@property(assign, readonly, nonatomic) FormSuggestionMetadata metadata;
// Parameters giving the context surrounding the form activity for which that
// suggestion was generated. Must be set before the suggestion is filled when
// using the stateless FormSuggestionController.
@property(assign, nonatomic) std::optional<autofill::FormActivityParams> params;
// The FormSuggestionProvider that provided this suggestion. This allows
// knowing which provider to use for filling the suggestion. Must be set before
// the suggestion is filled when kStatelessFormSuggestionController is enabled.
@property(nonatomic, weak) id<FormSuggestionProvider> provider;
// Returns FormSuggestion (immutable) with given values.
+ (FormSuggestion*)suggestionWithValue:(NSString*)value
displayDescription:(NSString*)displayDescription
icon:(UIImage*)icon
type:(autofill::SuggestionType)type
payload:(autofill::Suggestion::Payload)payload
requiresReauth:(BOOL)requiresReauth
acceptanceA11yAnnouncement:(NSString*)acceptanceA11yAnnouncement
metadata:(FormSuggestionMetadata)metadata;
// Returns FormSuggestion (immutable) with given values.
+ (FormSuggestion*)suggestionWithValue:(NSString*)value
minorValue:(NSString*)minorValue
displayDescription:(NSString*)displayDescription
icon:(UIImage*)icon
type:(autofill::SuggestionType)type
payload:(autofill::Suggestion::Payload)payload
fieldByFieldFillingTypeUsed:
(autofill::FieldType)fieldByFieldFillingTypeUsed
requiresReauth:(BOOL)requiresReauth
acceptanceA11yAnnouncement:(NSString*)acceptanceA11yAnnouncement;
// Returns FormSuggestion (immutable) with given values.
+ (FormSuggestion*)suggestionWithValue:(NSString*)value
displayDescription:(NSString*)displayDescription
icon:(UIImage*)icon
type:(autofill::SuggestionType)type
payload:(autofill::Suggestion::Payload)payload
requiresReauth:(BOOL)requiresReauth;
// Copies the contents of `formSuggestionToCopy` and sets/overrides the
// params and provider of the copy.
+ (FormSuggestion*)copy:(FormSuggestion*)formSuggestionToCopy
andSetParams:(std::optional<autofill::FormActivityParams>)params
provider:(id<FormSuggestionProvider>)provider;
@end
#endif // COMPONENTS_AUTOFILL_IOS_BROWSER_FORM_SUGGESTION_H_