#ifndef CHROME_TEST_PAYMENTS_PAYMENT_REQUEST_TEST_CONTROLLER_H_
#define CHROME_TEST_PAYMENTS_PAYMENT_REQUEST_TEST_CONTROLLER_H_
#include <memory>
#include <optional>
#include <string>
#include <vector>
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "build/build_config.h"
#if !BUILDFLAG(IS_ANDROID)
namespace sync_preferences {
class TestingPrefServiceSyncable;
}
#endif
namespace content {
class WebContents;
}
namespace payments {
class ContentPaymentRequestDelegate;
struct AppDescription {
std::string label;
std::string sublabel;
std::string total;
};
class PaymentRequestTestObserver {
public:
virtual void OnCanMakePaymentCalled() {}
virtual void OnCanMakePaymentReturned() {}
virtual void OnHasEnrolledInstrumentCalled() {}
virtual void OnHasEnrolledInstrumentReturned() {}
virtual void OnAppListReady() {}
virtual void OnErrorDisplayed() {}
virtual void OnNotSupportedError() {}
virtual void OnConnectionTerminated() {}
virtual void OnAbortCalled() {}
virtual void OnCompleteCalled() {}
virtual void OnUIDisplayed() {}
protected:
virtual ~PaymentRequestTestObserver() = default;
};
class PaymentRequestTestController {
public:
PaymentRequestTestController();
~PaymentRequestTestController();
void SetUpOnMainThread();
void SetObserver(PaymentRequestTestObserver* observer);
void SetOffTheRecord(bool is_off_the_record);
void SetValidSsl(bool valid_ssl);
void SetCanMakePaymentEnabledPref(bool can_make_payment_enabled);
void SetTwaPackageName(const std::string& twa_package_name);
void SetHasAuthenticator(bool has_authenticator);
void SetTwaPaymentApp(const std::string& method_name,
const std::string& response);
content::WebContents* GetPaymentHandlerWebContents();
#if BUILDFLAG(IS_ANDROID)
bool ClickPaymentHandlerSecurityIcon();
#endif
bool ClickPaymentHandlerCloseButton();
bool CloseDialog();
bool ConfirmPayment();
bool ClickOptOut();
void set_app_descriptions(
const std::vector<AppDescription>& app_descriptions) {
app_descriptions_ = app_descriptions;
}
const std::vector<AppDescription>& app_descriptions() const {
return app_descriptions_;
}
std::optional<bool> is_shipping_section_visible() const {
return is_shipping_section_visible_;
}
void set_shipping_section_visible(bool is_shipping_section_visible) {
is_shipping_section_visible_ = is_shipping_section_visible;
}
std::optional<bool> is_contact_section_visible() const {
return is_contact_section_visible_;
}
void set_contact_section_visible(bool is_contact_section_visible) {
is_contact_section_visible_ = is_contact_section_visible;
}
private:
void OnCanMakePaymentCalled();
void OnCanMakePaymentReturned();
void OnHasEnrolledInstrumentCalled();
void OnHasEnrolledInstrumentReturned();
void OnAppListReady();
void OnErrorDisplayed();
void OnNotSupportedError();
void OnConnectionTerminated();
void OnAbortCalled();
void OnCompleteCalled();
void OnUIDisplayed();
raw_ptr<PaymentRequestTestObserver> observer_ = nullptr;
bool is_off_the_record_ = false;
bool valid_ssl_ = true;
bool can_make_payment_pref_ = true;
std::string twa_package_name_;
bool has_authenticator_ = false;
std::string twa_payment_app_method_name_;
std::string twa_payment_app_response_;
std::vector<AppDescription> app_descriptions_;
std::optional<bool> is_shipping_section_visible_;
std::optional<bool> is_contact_section_visible_;
#if !BUILDFLAG(IS_ANDROID)
void UpdateDelegateFactory();
std::unique_ptr<sync_preferences::TestingPrefServiceSyncable> prefs_;
class ObserverConverter;
std::unique_ptr<ObserverConverter> observer_converter_;
base::WeakPtr<ContentPaymentRequestDelegate> delegate_;
#endif
base::WeakPtrFactory<PaymentRequestTestController> weak_ptr_factory_{this};
};
}
#endif