blob: e6703bec1973c41ae9ffb486407c73266f5cebb5 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_UI_DELEGATE_H_
#define COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_UI_DELEGATE_H_
#include <memory>
#include <string>
#include <vector>
#include "base/optional.h"
#include "components/autofill_assistant/browser/metrics.h"
#include "components/autofill_assistant/browser/rectf.h"
#include "components/autofill_assistant/browser/state.h"
#include "components/autofill_assistant/browser/user_action.h"
#include "components/autofill_assistant/browser/user_data.h"
#include "components/autofill_assistant/browser/viewport_mode.h"
namespace autofill_assistant {
class ControllerObserver;
struct ClientSettings;
// UI delegate called for script executions.
class UiDelegate {
public:
// Colors of the overlay. Empty string to use the default.
struct OverlayColors {
// Overlay background color.
std::string background;
// Color of the border around the highlighted portions of the overlay.
std::string highlight_border;
};
virtual ~UiDelegate() = default;
// Returns the current state of the controller.
virtual AutofillAssistantState GetState() = 0;
// Asks for updated coordinates for the touchable area. This is called to
// speed up update of the touchable areas when there are good reasons to think
// that the current coordinates are out of date, such as while scrolling.
virtual void UpdateTouchableArea() = 0;
// Called when user interaction within the allowed touchable area was
// detected. This should cause rerun of preconditions check.
virtual void OnUserInteractionInsideTouchableArea() = 0;
// Returns a string describing the current execution context. This is useful
// when analyzing feedback forms and for debugging in general.
virtual std::string GetDebugContext() = 0;
// Returns the current status message.
virtual std::string GetStatusMessage() const = 0;
// Returns the current bubble / tooltip message.
virtual std::string GetBubbleMessage() const = 0;
// Returns the current contextual information. May be null if empty.
virtual const Details* GetDetails() const = 0;
// Returns the current info box data. May be null if empty.
virtual const InfoBox* GetInfoBox() const = 0;
// Returns the current progress; a percentage.
virtual int GetProgress() const = 0;
// Returns whether the progress bar is visible.
virtual bool GetProgressVisible() const = 0;
// Returns the current set of user actions.
virtual const std::vector<UserAction>& GetUserActions() const = 0;
// Performs an action, from the set of actions returned by GetUserAction().
//
// If non-empty, |context| is added to the global trigger context when
// executing scripts. Ignored if no scripts are executed by the action.
//
// Returns true if the action was triggered, false if the index did not
// correspond to any enabled actions.
virtual bool PerformUserActionWithContext(
int index,
std::unique_ptr<TriggerContext> context) = 0;
// Performs an action with no additional trigger context set.
//
// Returns true if the action was triggered, false if the index did not
// correspond to any enabled actions.
bool PerformUserAction(int index) {
return PerformUserActionWithContext(index, TriggerContext::CreateEmpty());
}
// If the controller is waiting for user data, this field contains a non-null
// options describing the request.
virtual const CollectUserDataOptions* GetCollectUserDataOptions() const = 0;
// If the controller is waiting for user data, this field contains a non-null
// object describing the currently selected data.
virtual const UserData* GetUserData() const = 0;
// Sets shipping address, in response to the current collect user data
// options.
virtual void SetShippingAddress(
std::unique_ptr<autofill::AutofillProfile> address) = 0;
// Sets contact info, in response to the current collect user data options.
virtual void SetContactInfo(
std::unique_ptr<autofill::AutofillProfile> profile) = 0;
// Sets credit card, in response to the current collect user data options.
virtual void SetCreditCard(std::unique_ptr<autofill::CreditCard> card) = 0;
// Sets the state of the third party terms & conditions, pertaining to the
// current collect user data options.
virtual void SetTermsAndConditions(
TermsAndConditionsState terms_and_conditions) = 0;
// Sets the chosen login option, pertaining to the current collect user data
// options.
virtual void SetLoginOption(std::string identifier) = 0;
// Called when the user clicks a link on the terms & conditions message.
virtual void OnTermsAndConditionsLinkClicked(int link) = 0;
// Sets the start of the date/time range.
virtual void SetDateTimeRangeStart(int year,
int month,
int day,
int hour,
int minute,
int second) = 0;
// Sets the end of the date/time range.
virtual void SetDateTimeRangeEnd(int year,
int month,
int day,
int hour,
int minute,
int second) = 0;
// Sets an additional value.
virtual void SetAdditionalValue(const std::string& client_memory_key,
const std::string& value) = 0;
// Adds the rectangles that correspond to the current touchable area to
// the given vector.
//
// At the end of this call, |rectangles| contains one element per
// configured rectangles, though these can correspond to empty rectangles.
// Coordinates absolute CSS coordinates.
//
// Note that the vector is not cleared before rectangles are added.
virtual void GetTouchableArea(std::vector<RectF>* rectangles) const = 0;
virtual void GetRestrictedArea(std::vector<RectF>* rectangles) const = 0;
// Returns the current size of the visual viewport. May be empty if
// unknown.
//
// The rectangle is expressed in absolute CSS coordinates.
virtual void GetVisualViewport(RectF* viewport) const = 0;
// Reports a fatal error to Autofill Assistant, which should then stop.
virtual void OnFatalError(const std::string& error_message,
Metrics::DropOutReason reason) = 0;
// Returns whether the viewport should be resized.
virtual ViewportMode GetViewportMode() = 0;
virtual ConfigureBottomSheetProto::PeekMode GetPeekMode() = 0;
// Fills in the overlay colors.
virtual void GetOverlayColors(OverlayColors* colors) const = 0;
// Gets the current Client Settings
virtual const ClientSettings& GetClientSettings() const = 0;
// Returns the current form. May be null if there is no form to show.
virtual const FormProto* GetForm() const = 0;
// Sets a counter value.
virtual void SetCounterValue(int input_index,
int counter_index,
int value) = 0;
// Sets whether a selection choice is selected.
virtual void SetChoiceSelected(int input_index,
int choice_index,
bool selected) = 0;
// Register an observer. Observers get told about changes to the
// controller.
virtual void AddObserver(ControllerObserver* observer) = 0;
// Remove a previously registered observer.
virtual void RemoveObserver(const ControllerObserver* observer) = 0;
protected:
protected:
UiDelegate() = default;
};
} // namespace autofill_assistant
#endif // COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_UI_DELEGATE_H_