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
|
// Copyright 2024 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_AUTOFILL_CLIENT_IOS_H_
#define COMPONENTS_AUTOFILL_IOS_BROWSER_AUTOFILL_CLIENT_IOS_H_
#import "base/memory/weak_ptr.h"
#import "components/autofill/core/browser/foundations/autofill_client.h"
#import "components/autofill/ios/browser/autofill_driver_ios_factory.h"
#import "ios/web/public/web_state.h"
namespace autofill {
// Common base class for all AutofillClients on iOS.
//
// There must be at most one instance per web::WebState. Unfortunately, the
// production-code destruction order is complicated and embedder-specific.
//
// Therefore, the contract of AutofillClientIOS is as follows:
// - web_state() must be non-null throughout the lifetime of AutofillClientIOS
// except perhaps during destruction.
// - AutofillDriverIOSFactory::WebStateDestroyed() must be called at least once
// and only while the AutofillClientIOS is fully functional (i.e., before any
// of its or a derived class's members have been destroyed and before
// web_state() has become null).
class AutofillClientIOS : public AutofillClient {
public:
// Returns the `AutofillClientIOS` that is associated with `web_state`, if any
// exists.
static AutofillClientIOS* FromWebState(web::WebState* web_state);
// At most one `AutofillClientIOS` may exist per `web_state` at any point in
// time. This is enforced by this constructor.
AutofillClientIOS(web::WebState* web_state,
id<AutofillDriverIOSBridge> bridge);
AutofillClientIOS(const AutofillClientIOS&) = delete;
AutofillClientIOS& operator=(const AutofillClientIOS&) = delete;
~AutofillClientIOS() override;
// Non-null throughout the lifetime of the AutofillClientIOS except perhaps
// its destructor.
web::WebState* web_state() const { return web_state_.get(); }
// Intentionally final to allow it to be called during construction (in
// particular, transitively by members of subclasses).
AutofillDriverIOSFactory& GetAutofillDriverFactory() final;
private:
base::WeakPtr<web::WebState> web_state_;
AutofillDriverIOSFactory autofill_driver_factory_;
};
} // namespace autofill
#endif // COMPONENTS_AUTOFILL_IOS_BROWSER_AUTOFILL_CLIENT_IOS_H_
|