Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(46)

Side by Side Diff: ios/chrome/browser/infobars/confirm_infobar_controller.mm

Issue 2103083002: Add protected header for ConfirmInfobarController (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@infobar_picker
Patch Set: Rebase Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ios/chrome/browser/infobars/confirm_infobar_controller.h" 5 #import "ios/chrome/browser/infobars/confirm_infobar_controller.h"
6 6
7 #include "base/mac/foundation_util.h" 7 #include "base/mac/foundation_util.h"
8 #include "base/strings/string_util.h" 8 #include "base/strings/string_util.h"
9 #include "base/strings/sys_string_conversions.h" 9 #include "base/strings/sys_string_conversions.h"
10 #include "components/infobars/core/confirm_infobar_delegate.h" 10 #include "components/infobars/core/confirm_infobar_delegate.h"
11 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h" 11 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
12 #import "ios/public/provider/chrome/browser/ui/infobar_view_delegate.h" 12 #import "ios/public/provider/chrome/browser/ui/infobar_view_delegate.h"
13 #import "ios/public/provider/chrome/browser/ui/infobar_view_protocol.h" 13 #import "ios/public/provider/chrome/browser/ui/infobar_view_protocol.h"
14 #include "ui/base/l10n/l10n_util.h" 14 #include "ui/base/l10n/l10n_util.h"
15 #include "ui/base/window_open_disposition.h" 15 #include "ui/base/window_open_disposition.h"
16 #include "ui/gfx/image/image.h" 16 #include "ui/gfx/image/image.h"
17 17
18 namespace { 18 namespace {
19 19
20 // UI Tags for the infobar elements. 20 // UI Tags for the infobar elements.
21 enum ConfirmInfoBarUITags { OK = 1, CANCEL, CLOSE, TITLE_LINK }; 21 typedef NS_ENUM(NSInteger, ConfirmInfoBarUITags) {
22 OK = 1,
23 CANCEL,
24 CLOSE,
25 TITLE_LINK
26 };
22 27
23 // Converts a UI button tag to the corresponding InfoBarButton. 28 // Converts a UI button tag to the corresponding InfoBarButton.
24 ConfirmInfoBarDelegate::InfoBarButton UITagToButton(NSUInteger tag) { 29 ConfirmInfoBarDelegate::InfoBarButton UITagToButton(NSUInteger tag) {
25 switch (tag) { 30 switch (tag) {
26 case ConfirmInfoBarUITags::OK: 31 case ConfirmInfoBarUITags::OK:
27 return ConfirmInfoBarDelegate::BUTTON_OK; 32 return ConfirmInfoBarDelegate::BUTTON_OK;
28 case ConfirmInfoBarUITags::CANCEL: 33 case ConfirmInfoBarUITags::CANCEL:
29 case ConfirmInfoBarUITags::CLOSE: 34 case ConfirmInfoBarUITags::CLOSE:
30 return ConfirmInfoBarDelegate::BUTTON_CANCEL; 35 return ConfirmInfoBarDelegate::BUTTON_CANCEL;
31 default: 36 default:
32 NOTREACHED(); 37 NOTREACHED();
33 return ConfirmInfoBarDelegate::BUTTON_CANCEL; 38 return ConfirmInfoBarDelegate::BUTTON_CANCEL;
34 } 39 }
35 } 40 }
36 41
37 } // namespace 42 } // namespace
38 43
39 #pragma mark - ConfirmInfoBarController 44 #pragma mark - ConfirmInfoBarController
40 45
41 @interface ConfirmInfoBarController () 46 @interface ConfirmInfoBarController () {
42 47 ConfirmInfoBarDelegate* _confirmInfobarDelegate; // weak
43 // Action for any of the user defined buttons. 48 }
44 - (void)infoBarButtonDidPress:(id)sender;
45 // Action for any of the user defined links.
46 - (void)infobarLinkDidPress:(NSNumber*)tag;
47 - (void)updateInfobarLabel:(UIView<InfoBarViewProtocol>*)view;
48 @end 49 @end
49 50
50 @implementation ConfirmInfoBarController { 51 @implementation ConfirmInfoBarController
51 ConfirmInfoBarDelegate* confirmInfobarDelegate_; // weak
52 }
53 52
54 #pragma mark - 53 #pragma mark -
55 #pragma mark InfoBarController 54 #pragma mark InfoBarController
56 55
57 - (base::scoped_nsobject<UIView<InfoBarViewProtocol>>) 56 - (base::scoped_nsobject<UIView<InfoBarViewProtocol>>)
58 viewForDelegate:(infobars::InfoBarDelegate*)delegate 57 viewForDelegate:(infobars::InfoBarDelegate*)delegate
59 frame:(CGRect)frame { 58 frame:(CGRect)frame {
60 base::scoped_nsobject<UIView<InfoBarViewProtocol>> infoBarView; 59 base::scoped_nsobject<UIView<InfoBarViewProtocol>> infoBarView;
61 confirmInfobarDelegate_ = delegate->AsConfirmInfoBarDelegate(); 60 _confirmInfobarDelegate = delegate->AsConfirmInfoBarDelegate();
62 infoBarView.reset( 61 infoBarView.reset(
63 ios::GetChromeBrowserProvider()->CreateInfoBarView(frame, self.delegate)); 62 ios::GetChromeBrowserProvider()->CreateInfoBarView(frame, self.delegate));
64 // Model data. 63 // Model data.
65 gfx::Image modelIcon = confirmInfobarDelegate_->GetIcon(); 64 gfx::Image modelIcon = _confirmInfobarDelegate->GetIcon();
66 int buttons = confirmInfobarDelegate_->GetButtons(); 65 int buttons = _confirmInfobarDelegate->GetButtons();
67 NSString* buttonOK = nil; 66 NSString* buttonOK = nil;
68 if (buttons & ConfirmInfoBarDelegate::BUTTON_OK) { 67 if (buttons & ConfirmInfoBarDelegate::BUTTON_OK) {
69 buttonOK = base::SysUTF16ToNSString(confirmInfobarDelegate_->GetButtonLabel( 68 buttonOK = base::SysUTF16ToNSString(_confirmInfobarDelegate->GetButtonLabel(
70 ConfirmInfoBarDelegate::BUTTON_OK)); 69 ConfirmInfoBarDelegate::BUTTON_OK));
71 } 70 }
72 NSString* buttonCancel = nil; 71 NSString* buttonCancel = nil;
73 if (buttons & ConfirmInfoBarDelegate::BUTTON_CANCEL) { 72 if (buttons & ConfirmInfoBarDelegate::BUTTON_CANCEL) {
74 buttonCancel = 73 buttonCancel =
75 base::SysUTF16ToNSString(confirmInfobarDelegate_->GetButtonLabel( 74 base::SysUTF16ToNSString(_confirmInfobarDelegate->GetButtonLabel(
76 ConfirmInfoBarDelegate::BUTTON_CANCEL)); 75 ConfirmInfoBarDelegate::BUTTON_CANCEL));
77 } 76 }
78 77
79 [infoBarView addCloseButtonWithTag:ConfirmInfoBarUITags::CLOSE 78 [infoBarView addCloseButtonWithTag:ConfirmInfoBarUITags::CLOSE
80 target:self 79 target:self
81 action:@selector(infoBarButtonDidPress:)]; 80 action:@selector(infoBarButtonDidPress:)];
82 81
83 // Optional left icon. 82 // Optional left icon.
84 if (!modelIcon.IsEmpty()) 83 if (!modelIcon.IsEmpty())
85 [infoBarView addLeftIcon:modelIcon.ToUIImage()]; 84 [infoBarView addLeftIcon:modelIcon.ToUIImage()];
86 85
87 // Optional message. 86 // Optional message.
88 [self updateInfobarLabel:infoBarView]; 87 [self updateInfobarLabel:infoBarView];
89 88
90 if (buttonOK && buttonCancel) { 89 if (buttonOK && buttonCancel) {
91 [infoBarView addButton1:buttonOK 90 [infoBarView addButton1:buttonOK
92 tag1:ConfirmInfoBarUITags::OK 91 tag1:ConfirmInfoBarUITags::OK
93 button2:buttonCancel 92 button2:buttonCancel
94 tag2:ConfirmInfoBarUITags::CANCEL 93 tag2:ConfirmInfoBarUITags::CANCEL
95 target:self 94 target:self
96 action:@selector(infoBarButtonDidPress:)]; 95 action:@selector(infoBarButtonDidPress:)];
97 } else if (buttonOK) { 96 } else if (buttonOK) {
98 [infoBarView addButton:buttonOK 97 [infoBarView addButton:buttonOK
99 tag:ConfirmInfoBarUITags::OK 98 tag:ConfirmInfoBarUITags::OK
100 target:self 99 target:self
101 action:@selector(infoBarButtonDidPress:)]; 100 action:@selector(infoBarButtonDidPress:)];
102 } else { 101 } else {
103 // No buttons, only message. 102 // No buttons, only message.
104 DCHECK(!confirmInfobarDelegate_->GetMessageText().empty() && !buttonCancel); 103 DCHECK(!_confirmInfobarDelegate->GetMessageText().empty() && !buttonCancel);
105 } 104 }
106 return infoBarView; 105 return infoBarView;
107 } 106 }
108 107
109 - (void)updateInfobarLabel:(UIView<InfoBarViewProtocol>*)view { 108 - (void)updateInfobarLabel:(UIView<InfoBarViewProtocol>*)view {
110 if (!confirmInfobarDelegate_->GetMessageText().length()) 109 if (!_confirmInfobarDelegate->GetMessageText().length())
111 return; 110 return;
112 if (confirmInfobarDelegate_->GetLinkText().length()) { 111 if (_confirmInfobarDelegate->GetLinkText().length()) {
113 base::string16 msgLink = base::SysNSStringToUTF16( 112 base::string16 msgLink = base::SysNSStringToUTF16([[view class]
114 [[view class] stringAsLink:base::SysUTF16ToNSString( 113 stringAsLink:base::SysUTF16ToNSString(
115 confirmInfobarDelegate_->GetLinkText()) 114 _confirmInfobarDelegate->GetLinkText())
116 tag:ConfirmInfoBarUITags::TITLE_LINK]); 115 tag:ConfirmInfoBarUITags::TITLE_LINK]);
117 base::string16 messageText = confirmInfobarDelegate_->GetMessageText(); 116 base::string16 messageText = _confirmInfobarDelegate->GetMessageText();
118 base::ReplaceFirstSubstringAfterOffset( 117 base::ReplaceFirstSubstringAfterOffset(
119 &messageText, 0, confirmInfobarDelegate_->GetLinkText(), msgLink); 118 &messageText, 0, _confirmInfobarDelegate->GetLinkText(), msgLink);
120 119
121 [view addLabel:base::SysUTF16ToNSString(messageText) 120 [view addLabel:base::SysUTF16ToNSString(messageText)
122 target:self 121 target:self
123 action:@selector(infobarLinkDidPress:)]; 122 action:@selector(infobarLinkDidPress:)];
124 } else { 123 } else {
125 NSString* label = 124 NSString* label =
126 base::SysUTF16ToNSString(confirmInfobarDelegate_->GetMessageText()); 125 base::SysUTF16ToNSString(_confirmInfobarDelegate->GetMessageText());
127 [view addLabel:label]; 126 [view addLabel:label];
128 } 127 }
129 } 128 }
130 129
131 #pragma mark - Handling of User Events 130 #pragma mark - Handling of User Events
132 131
133 - (void)infoBarButtonDidPress:(id)sender { 132 - (void)infoBarButtonDidPress:(id)sender {
134 // This press might have occurred after the user has already pressed a button, 133 // This press might have occurred after the user has already pressed a button,
135 // in which case the view has been detached from the delegate and this press 134 // in which case the view has been detached from the delegate and this press
136 // should be ignored. 135 // should be ignored.
137 if (!self.delegate) { 136 if (!self.delegate) {
138 return; 137 return;
139 } 138 }
140 if ([sender isKindOfClass:[UIButton class]]) { 139 if ([sender isKindOfClass:[UIButton class]]) {
141 NSUInteger tag = static_cast<UIButton*>(sender).tag; 140 NSUInteger tag = static_cast<UIButton*>(sender).tag;
142 if (tag == ConfirmInfoBarUITags::CLOSE) 141 if (tag == ConfirmInfoBarUITags::CLOSE)
143 self.delegate->InfoBarDidCancel(); 142 self.delegate->InfoBarDidCancel();
144 else 143 else
145 self.delegate->InfoBarButtonDidPress(UITagToButton(tag)); 144 self.delegate->InfoBarButtonDidPress(UITagToButton(tag));
146 } 145 }
147 } 146 }
148 147
149 // Title link was clicked. 148 // Title link was clicked.
150 - (void)infobarLinkDidPress:(NSNumber*)tag { 149 - (void)infobarLinkDidPress:(NSNumber*)tag {
151 DCHECK([tag isKindOfClass:[NSNumber class]]); 150 DCHECK([tag isKindOfClass:[NSNumber class]]);
152 if (!self.delegate) { 151 if (!self.delegate) {
153 return; 152 return;
154 } 153 }
155 if ([tag unsignedIntegerValue] == ConfirmInfoBarUITags::TITLE_LINK) { 154 if ([tag unsignedIntegerValue] == ConfirmInfoBarUITags::TITLE_LINK) {
156 confirmInfobarDelegate_->LinkClicked(NEW_FOREGROUND_TAB); 155 _confirmInfobarDelegate->LinkClicked(NEW_FOREGROUND_TAB);
157 } 156 }
158 } 157 }
159 158
160 @end 159 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698