blob: 8cf7d612f95d33b3a05033ebeb84e78630c83e99 [file] [log] [blame]
// Copyright 2019 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.
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "chrome/browser/autofill/accessory_controller.h"
#include "components/autofill/core/browser/payments/credit_card_access_manager.h"
#include "components/autofill/core/browser/personal_data_manager_observer.h"
namespace content {
class WebContents;
namespace autofill {
// Interface for credit card-specific keyboard accessory controller between the
// ManualFillingController and Autofill backend logic.
class CreditCardAccessoryController
: public base::SupportsWeakPtr<CreditCardAccessoryController>,
public AccessoryController,
public PersonalDataManagerObserver,
public CreditCardAccessManager::Accessor {
CreditCardAccessoryController() = default;
~CreditCardAccessoryController() override = default;
// Disallow copy and assign
CreditCardAccessoryController(const CreditCardAccessoryController&) = delete;
CreditCardAccessoryController& operator=(
const CreditCardAccessoryController&) = delete;
// Returns true if the accessory controller may exist for |web_contents|.
// Otherwise it returns false.
static bool AllowedForWebContents(content::WebContents* web_contents);
// Returns a reference to the unique controller associated with
// |web_contents|. A new instance is created if the first time this function
// is called. Should only be called if AllowedForWebContents returns true for
// |web_contents|.
static CreditCardAccessoryController* GetOrCreate(
content::WebContents* web_contents);
// Returns a reference to the unique controller associated with
// |web_contents|. Returns null if no such instance exists.
static CreditCardAccessoryController* GetIfExisting(
content::WebContents* web_contents);
// Fetches suggestions and propagates to the frontend.
virtual void RefreshSuggestions() = 0;
} // namespace autofill