blob: e72eb1c64288b0a3c4c5375517cfc84b897ba191 [file] [log] [blame]
// 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;
class Profile;
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 |webContents|.
static void Create(content::WebContents* webContents);
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_;
};
class KeystoneInfoBar {
public:
// If the application is Keystone-enabled and not on a read-only filesystem
// (capable of being auto-updated), and Keystone indicates that it needs
// ticket promotion, PromotionInfoBar displays an info bar asking the user
// to promote the ticket. The user will need to authenticate in order to
// gain authorization to perform the promotion. The info bar is not shown
// if its "don't ask" button was ever clicked, if the "don't check default
// browser" command-line flag is present, on the very first launch, or if
// another info bar is already showing in the active tab.
static void PromotionInfoBar(Profile* profile);
};
#endif // CHROME_BROWSER_UI_COCOA_KEYSTONE_INFOBAR_DELEGATE_H_