1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
// Copyright 2025 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_AUTOFILL_PAYMENTS_ANDROID_PAYMENTS_WINDOW_MANAGER_H_
#define CHROME_BROWSER_UI_AUTOFILL_PAYMENTS_ANDROID_PAYMENTS_WINDOW_MANAGER_H_
#include <optional>
#include "base/memory/raw_ref.h"
#include "components/autofill/core/browser/payments/payments_window_manager.h"
class GURL;
namespace autofill {
class ContentAutofillClient;
namespace payments {
class FlowState;
// Android implementation of the PaymentsWindowManager interface. One per
// WebContents, owned by the ChromePaymentsAutofillClient associated with the
// WebContents of the original tab that the tab is created in.
class AndroidPaymentsWindowManager : public PaymentsWindowManager {
public:
explicit AndroidPaymentsWindowManager(ContentAutofillClient* client);
AndroidPaymentsWindowManager(const AndroidPaymentsWindowManager&) = delete;
AndroidPaymentsWindowManager& operator=(const AndroidPaymentsWindowManager&) =
delete;
~AndroidPaymentsWindowManager() override;
// PaymentsWindowManager:
void InitBnplFlow(BnplContext context) override;
void InitVcn3dsAuthentication(Vcn3dsContext context) override;
// Triggered when the web contents of a tab shown as part of a window manager
// flow was destroyed.
void WebContentsDestroyed();
// Triggered when a tab navigation has finished, and `flow_state_->flow_type`
// is `kBnpl`.
void OnDidFinishNavigationForBnpl(const GURL& url);
private:
friend class AndroidPaymentsWindowManagerTestApi;
// Creates a tab using `flow_state_`, with an initial URL of `url`. This tab
// will go through a couple of URL navigations specific to the flow that it is
// created for.
void CreateTab(const GURL& url);
// Keeps track of the state for the ongoing flow. Present only if there is an
// ongoing flow, and is empty otherwise.
std::optional<FlowState> flow_state_;
// ContentAutofillClient associated to `this`.
const raw_ref<ContentAutofillClient> client_;
base::WeakPtrFactory<AndroidPaymentsWindowManager> weak_ptr_factory_{this};
};
} // namespace payments
} // namespace autofill
#endif // CHROME_BROWSER_UI_AUTOFILL_PAYMENTS_ANDROID_PAYMENTS_WINDOW_MANAGER_H_
|