blob: 94ddb084306a4b0b5a5671194ca16f2027f2839b [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.
#ifndef CHROME_BROWSER_UI_PLUS_ADDRESSES_PLUS_ADDRESS_CREATION_CONTROLLER_H_
#define CHROME_BROWSER_UI_PLUS_ADDRESSES_PLUS_ADDRESS_CREATION_CONTROLLER_H_
#include "components/plus_addresses/core/browser/plus_address_types.h"
#include "content/public/browser/web_contents.h"
#include "url/origin.h"
namespace plus_addresses {
// An interface for orchestrating plus address creation UI.
class PlusAddressCreationController {
public:
// Used to allow differing implementations behind a common creation interface.
// May include some separation on Android vs Desktop, etc., though there is
// only a single implementation for now. In each case, the controller
// is owned by the `web_contents` via `WebContentsUserData`.
static PlusAddressCreationController* GetOrCreate(
content::WebContents* web_contents);
// Offers the creation UI, or optionally invokes `callback` immediately.
// In creation UI scenarios, `callback` may not be run due to user
// cancellation.
virtual void OfferCreation(const url::Origin& main_frame_origin,
bool is_manual_fallback,
PlusAddressCallback callback) = 0;
// Sends a request to the server to obtain a plus address after the previous
// request failed for whatever reason.
virtual void TryAgainToReservePlusAddress() = 0;
// Queries the server for a new suggested plus address.
virtual void OnRefreshClicked() = 0;
// Run when the creation UI completes with confirmation from the user.
virtual void OnConfirmed() = 0;
// Run when plus_address creation is canceled by the user.
virtual void OnCanceled() = 0;
// Run when the UI element is destroyed.
virtual void OnDialogDestroyed() = 0;
};
} // namespace plus_addresses
#endif // CHROME_BROWSER_UI_PLUS_ADDRESSES_PLUS_ADDRESS_CREATION_CONTROLLER_H_