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
|
// Copyright 2023 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_EXTENSIONS_API_IDENTITY_WEB_AUTH_FLOW_INFO_BAR_DELEGATE_H_
#define CHROME_BROWSER_EXTENSIONS_API_IDENTITY_WEB_AUTH_FLOW_INFO_BAR_DELEGATE_H_
#include "base/gtest_prod_util.h"
#include "base/memory/weak_ptr.h"
#include "components/infobars/core/confirm_infobar_delegate.h"
namespace content {
class WebContents;
} // namespace content
namespace extensions {
// Infobar used by extension auth flow `chrome.identity.launchWebAuthFlow()`
// when authentication is done through a Browser Tab. A browser tab is opened
// when needing action from the user in this flow.
// This infobar displays information to the user to clarify why this tab was
// opened, mentioning the extension name as part of the text. Auth flows should
// take care of managing when to close the bar if not manually closed by the
// user, otherwise it should live as long as the flow is alive.
class WebAuthFlowInfoBarDelegate : public ConfirmInfoBarDelegate {
public:
static base::WeakPtr<WebAuthFlowInfoBarDelegate> Create(
content::WebContents* web_contents,
const std::string& extension_name);
~WebAuthFlowInfoBarDelegate() override;
// infobars::InfoBarDelegate:
InfoBarIdentifier GetIdentifier() const override;
bool ShouldExpire(const NavigationDetails& details) const override;
// ConfirmInfoBarDelegate:
std::u16string GetMessageText() const override;
int GetButtons() const override;
// Closes the info bar this delegate is associated with.
void CloseInfoBar();
private:
explicit WebAuthFlowInfoBarDelegate(const std::string& extension_name);
// The Create() method needs a valid browser window because it shows the
// infobar in addition to creating the delegate. Unit tests construct the
// delegate directly from the private constructor. This way, they can avoid
// setting up the environment needed by the Create() method.
FRIEND_TEST_ALL_PREFIXES(WebAuthFlowInfoBarDelegateTest, LongExtensionName);
const std::string extension_name_;
base::WeakPtrFactory<WebAuthFlowInfoBarDelegate> weak_factory_{this};
};
} // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_API_IDENTITY_WEB_AUTH_FLOW_INFO_BAR_DELEGATE_H_
|