1 // Copyright 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/extensions/api/messaging/incognito_connectability_infobar_delegate.h"
6 
7 #include "chrome/browser/infobars/infobar_service.h"
8 #include "components/infobars/core/infobar.h"
9 #include "components/strings/grit/components_strings.h"
10 #include "ui/base/l10n/l10n_util.h"
11 
12 namespace extensions {
13 
14 // static
Create(InfoBarService * infobar_service,const base::string16 & message,const IncognitoConnectabilityInfoBarDelegate::InfoBarCallback & callback)15 infobars::InfoBar* IncognitoConnectabilityInfoBarDelegate::Create(
16     InfoBarService* infobar_service,
17     const base::string16& message,
18     const IncognitoConnectabilityInfoBarDelegate::InfoBarCallback& callback) {
19   return infobar_service->AddInfoBar(infobar_service->CreateConfirmInfoBar(
20       std::unique_ptr<ConfirmInfoBarDelegate>(
21           new IncognitoConnectabilityInfoBarDelegate(message, callback))));
22 }
23 
IncognitoConnectabilityInfoBarDelegate(const base::string16 & message,const InfoBarCallback & callback)24 IncognitoConnectabilityInfoBarDelegate::IncognitoConnectabilityInfoBarDelegate(
25     const base::string16& message,
26     const InfoBarCallback& callback)
27     : message_(message), answered_(false), callback_(callback) {}
28 
29 IncognitoConnectabilityInfoBarDelegate::
~IncognitoConnectabilityInfoBarDelegate()30     ~IncognitoConnectabilityInfoBarDelegate() {
31   if (!answered_) {
32     // The infobar has closed without the user expressing an explicit
33     // preference. The current request should be denied but further requests
34     // should show an interactive prompt.
35     callback_.Run(IncognitoConnectability::ScopedAlertTracker::INTERACTIVE);
36   }
37 }
38 
39 infobars::InfoBarDelegate::InfoBarIdentifier
GetIdentifier() const40 IncognitoConnectabilityInfoBarDelegate::GetIdentifier() const {
41   return INCOGNITO_CONNECTABILITY_INFOBAR_DELEGATE;
42 }
43 
GetMessageText() const44 base::string16 IncognitoConnectabilityInfoBarDelegate::GetMessageText() const {
45   return message_;
46 }
47 
GetButtonLabel(InfoBarButton button) const48 base::string16 IncognitoConnectabilityInfoBarDelegate::GetButtonLabel(
49     InfoBarButton button) const {
50   return l10n_util::GetStringUTF16((button == BUTTON_OK) ? IDS_PERMISSION_ALLOW
51                                                          : IDS_PERMISSION_DENY);
52 }
53 
Accept()54 bool IncognitoConnectabilityInfoBarDelegate::Accept() {
55   callback_.Run(IncognitoConnectability::ScopedAlertTracker::ALWAYS_ALLOW);
56   answered_ = true;
57   return true;
58 }
59 
Cancel()60 bool IncognitoConnectabilityInfoBarDelegate::Cancel() {
61   callback_.Run(IncognitoConnectability::ScopedAlertTracker::ALWAYS_DENY);
62   answered_ = true;
63   return true;
64 }
65 
66 }  // namespace extensions
67