// Copyright 2011 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_COCOA_KEYSTONE_INFOBAR_DELEGATE_H_
#define CHROME_BROWSER_UI_COCOA_KEYSTONE_INFOBAR_DELEGATE_H_
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "components/infobars/core/confirm_infobar_delegate.h"
class PrefService;
namespace content {
class WebContents;
}
class KeystonePromotionInfoBarDelegate : public ConfirmInfoBarDelegate {
public:
KeystonePromotionInfoBarDelegate(const KeystonePromotionInfoBarDelegate&) =
delete;
KeystonePromotionInfoBarDelegate& operator=(
const KeystonePromotionInfoBarDelegate&) = delete;
// Creates a keystone promotion delegate and adds it to the
// infobars::ContentInfoBarManager associated with `web_contents`, if
// `web_contents` is not nullptr.
static void Create(content::WebContents* web_contents);
private:
explicit KeystonePromotionInfoBarDelegate(PrefService* prefs);
~KeystonePromotionInfoBarDelegate() override;
// Sets this info bar to be able to expire. Called a predetermined amount
// of time after this object is created.
void SetCanExpire() { can_expire_ = true; }
// ConfirmInfoBarDelegate
infobars::InfoBarDelegate::InfoBarIdentifier GetIdentifier() const override;
int GetIconId() const override;
bool ShouldExpire(const NavigationDetails& details) const override;
std::u16string GetMessageText() const override;
std::u16string GetButtonLabel(InfoBarButton button) const override;
bool Accept() override;
bool Cancel() override;
// The prefs to use.
raw_ptr<PrefService> prefs_; // weak
// Whether the info bar should be dismissed on the next navigation.
bool can_expire_;
// Used to delay the expiration of the info bar.
base::WeakPtrFactory<KeystonePromotionInfoBarDelegate> weak_ptr_factory_;
};
// Shows an infobar asking the user to promote the updater to system scope,
// which requires authentication. The info bar will show in the most recently
// used Chrome tab. The info bar doesn't show if its "don't ask" button was
// ever clicked in the profile associated with that tab, nor if the "don't
// check default browser" command-line flag is present, nor if another info bar
// is already showing in the active tab.
void ShowUpdaterPromotionInfoBar();
#endif // CHROME_BROWSER_UI_COCOA_KEYSTONE_INFOBAR_DELEGATE_H_