OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 #import <Cocoa/Cocoa.h> | 5 #import <Cocoa/Cocoa.h> |
6 | 6 |
7 #import "base/mac/scoped_nsobject.h" | 7 #import "base/mac/scoped_nsobject.h" |
8 #include "base/strings/sys_string_conversions.h" | 8 #include "base/strings/sys_string_conversions.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #import "chrome/browser/extensions/extension_install_prompt.h" | 10 #import "chrome/browser/extensions/extension_install_prompt.h" |
(...skipping 16 matching lines...) Expand all Loading... |
27 | 27 |
28 protected: | 28 protected: |
29 scoped_refptr<extensions::Extension> extension_; | 29 scoped_refptr<extensions::Extension> extension_; |
30 }; | 30 }; |
31 | 31 |
32 // Test that we can load the two kinds of prompts correctly, that the outlets | 32 // Test that we can load the two kinds of prompts correctly, that the outlets |
33 // are hooked up, and that the dialog calls cancel when cancel is pressed. | 33 // are hooked up, and that the dialog calls cancel when cancel is pressed. |
34 TEST_F(ExtensionInstallViewControllerTest, BasicsNormalCancel) { | 34 TEST_F(ExtensionInstallViewControllerTest, BasicsNormalCancel) { |
35 chrome::MockExtensionInstallPromptDelegate delegate; | 35 chrome::MockExtensionInstallPromptDelegate delegate; |
36 | 36 |
37 ExtensionInstallPrompt::Prompt prompt = | 37 scoped_refptr<ExtensionInstallPrompt::Prompt> prompt = |
38 chrome::BuildExtensionInstallPrompt(extension_.get()); | 38 chrome::BuildExtensionInstallPrompt(extension_.get()); |
39 | 39 |
40 std::vector<base::string16> permissions; | 40 std::vector<base::string16> permissions; |
41 permissions.push_back(base::UTF8ToUTF16("warning 1")); | 41 permissions.push_back(base::UTF8ToUTF16("warning 1")); |
42 prompt.SetPermissions(permissions); | 42 prompt->SetPermissions(permissions); |
43 // No details provided with this permission. | 43 // No details provided with this permission. |
44 std::vector<base::string16> details; | 44 std::vector<base::string16> details; |
45 details.push_back(base::string16()); | 45 details.push_back(base::string16()); |
46 prompt.SetPermissionsDetails(details); | 46 prompt->SetPermissionsDetails(details); |
47 | 47 |
48 base::scoped_nsobject<ExtensionInstallViewController> controller( | 48 base::scoped_nsobject<ExtensionInstallViewController> controller( |
49 [[ExtensionInstallViewController alloc] initWithNavigator:browser() | 49 [[ExtensionInstallViewController alloc] initWithNavigator:browser() |
50 delegate:&delegate | 50 delegate:&delegate |
51 prompt:prompt]); | 51 prompt:prompt]); |
52 | 52 |
53 [controller view]; // Force nib load. | 53 [controller view]; // Force nib load. |
54 | 54 |
55 // Test the right nib loaded. | 55 // Test the right nib loaded. |
56 EXPECT_NSEQ(@"ExtensionInstallPrompt", [controller nibName]); | 56 EXPECT_NSEQ(@"ExtensionInstallPrompt", [controller nibName]); |
57 | 57 |
58 // Check all the controls. | 58 // Check all the controls. |
59 // Make sure everything is non-nil, and that the fields that are | 59 // Make sure everything is non-nil, and that the fields that are |
60 // auto-translated don't start with a caret (that would indicate that they | 60 // auto-translated don't start with a caret (that would indicate that they |
61 // were not translated). | 61 // were not translated). |
62 EXPECT_TRUE([controller iconView]); | 62 EXPECT_TRUE([controller iconView]); |
63 EXPECT_TRUE([[controller iconView] image]); | 63 EXPECT_TRUE([[controller iconView] image]); |
64 | 64 |
65 EXPECT_TRUE([controller titleField]); | 65 EXPECT_TRUE([controller titleField]); |
66 EXPECT_NE(0u, [[[controller titleField] stringValue] length]); | 66 EXPECT_NE(0u, [[[controller titleField] stringValue] length]); |
67 | 67 |
68 NSOutlineView* outlineView = [controller outlineView]; | 68 NSOutlineView* outlineView = [controller outlineView]; |
69 EXPECT_TRUE(outlineView); | 69 EXPECT_TRUE(outlineView); |
70 EXPECT_EQ(2, [outlineView numberOfRows]); | 70 EXPECT_EQ(2, [outlineView numberOfRows]); |
71 EXPECT_NSEQ(base::SysUTF16ToNSString(prompt.GetPermission(0)), | 71 EXPECT_NSEQ(base::SysUTF16ToNSString(prompt->GetPermission(0)), |
72 [[outlineView dataSource] outlineView:outlineView | 72 [[outlineView dataSource] outlineView:outlineView |
73 objectValueForTableColumn:nil | 73 objectValueForTableColumn:nil |
74 byItem:[outlineView itemAtRow:1]]); | 74 byItem:[outlineView itemAtRow:1]]); |
75 | 75 |
76 EXPECT_TRUE([controller cancelButton]); | 76 EXPECT_TRUE([controller cancelButton]); |
77 EXPECT_NE(0u, [[[controller cancelButton] stringValue] length]); | 77 EXPECT_NE(0u, [[[controller cancelButton] stringValue] length]); |
78 EXPECT_NE('^', [[[controller cancelButton] stringValue] characterAtIndex:0]); | 78 EXPECT_NE('^', [[[controller cancelButton] stringValue] characterAtIndex:0]); |
79 | 79 |
80 EXPECT_TRUE([controller okButton]); | 80 EXPECT_TRUE([controller okButton]); |
81 EXPECT_NE(0u, [[[controller okButton] stringValue] length]); | 81 EXPECT_NE(0u, [[[controller okButton] stringValue] length]); |
82 EXPECT_NE('^', [[[controller okButton] stringValue] characterAtIndex:0]); | 82 EXPECT_NE('^', [[[controller okButton] stringValue] characterAtIndex:0]); |
83 | 83 |
84 // Test that cancel calls our delegate. | 84 // Test that cancel calls our delegate. |
85 [controller cancel:nil]; | 85 [controller cancel:nil]; |
86 EXPECT_EQ(1, delegate.abort_count()); | 86 EXPECT_EQ(1, delegate.abort_count()); |
87 EXPECT_EQ(0, delegate.proceed_count()); | 87 EXPECT_EQ(0, delegate.proceed_count()); |
88 } | 88 } |
89 | 89 |
90 TEST_F(ExtensionInstallViewControllerTest, BasicsNormalOK) { | 90 TEST_F(ExtensionInstallViewControllerTest, BasicsNormalOK) { |
91 chrome::MockExtensionInstallPromptDelegate delegate; | 91 chrome::MockExtensionInstallPromptDelegate delegate; |
92 | 92 |
93 ExtensionInstallPrompt::Prompt prompt = | 93 scoped_refptr<ExtensionInstallPrompt::Prompt> prompt = |
94 chrome::BuildExtensionInstallPrompt(extension_.get()); | 94 chrome::BuildExtensionInstallPrompt(extension_.get()); |
95 std::vector<base::string16> permissions; | 95 std::vector<base::string16> permissions; |
96 permissions.push_back(base::UTF8ToUTF16("warning 1")); | 96 permissions.push_back(base::UTF8ToUTF16("warning 1")); |
97 prompt.SetPermissions(permissions); | 97 prompt->SetPermissions(permissions); |
98 // No details provided with this permission. | 98 // No details provided with this permission. |
99 std::vector<base::string16> details; | 99 std::vector<base::string16> details; |
100 details.push_back(base::string16()); | 100 details.push_back(base::string16()); |
101 prompt.SetPermissionsDetails(details); | 101 prompt->SetPermissionsDetails(details); |
102 | 102 |
103 base::scoped_nsobject<ExtensionInstallViewController> controller( | 103 base::scoped_nsobject<ExtensionInstallViewController> controller( |
104 [[ExtensionInstallViewController alloc] initWithNavigator:browser() | 104 [[ExtensionInstallViewController alloc] initWithNavigator:browser() |
105 delegate:&delegate | 105 delegate:&delegate |
106 prompt:prompt]); | 106 prompt:prompt]); |
107 | 107 |
108 [controller view]; // Force nib load. | 108 [controller view]; // Force nib load. |
109 [controller ok:nil]; | 109 [controller ok:nil]; |
110 | 110 |
111 EXPECT_EQ(0, delegate.abort_count()); | 111 EXPECT_EQ(0, delegate.abort_count()); |
112 EXPECT_EQ(1, delegate.proceed_count()); | 112 EXPECT_EQ(1, delegate.proceed_count()); |
113 } | 113 } |
114 | 114 |
115 // Test that controls get repositioned when there are two warnings vs one | 115 // Test that controls get repositioned when there are two warnings vs one |
116 // warning. | 116 // warning. |
117 TEST_F(ExtensionInstallViewControllerTest, MultipleWarnings) { | 117 TEST_F(ExtensionInstallViewControllerTest, MultipleWarnings) { |
118 chrome::MockExtensionInstallPromptDelegate delegate1; | 118 chrome::MockExtensionInstallPromptDelegate delegate1; |
119 chrome::MockExtensionInstallPromptDelegate delegate2; | 119 chrome::MockExtensionInstallPromptDelegate delegate2; |
120 | 120 |
121 ExtensionInstallPrompt::Prompt one_warning_prompt = | 121 scoped_refptr<ExtensionInstallPrompt::Prompt> one_warning_prompt = |
122 chrome::BuildExtensionInstallPrompt(extension_.get()); | 122 chrome::BuildExtensionInstallPrompt(extension_.get()); |
123 std::vector<base::string16> permissions; | 123 std::vector<base::string16> permissions; |
124 permissions.push_back(base::UTF8ToUTF16("warning 1")); | 124 permissions.push_back(base::UTF8ToUTF16("warning 1")); |
125 one_warning_prompt.SetPermissions(permissions); | 125 one_warning_prompt->SetPermissions(permissions); |
126 // No details provided with this permission. | 126 // No details provided with this permission. |
127 std::vector<base::string16> details; | 127 std::vector<base::string16> details; |
128 details.push_back(base::string16()); | 128 details.push_back(base::string16()); |
129 one_warning_prompt.SetPermissionsDetails(details); | 129 one_warning_prompt->SetPermissionsDetails(details); |
130 | 130 |
131 ExtensionInstallPrompt::Prompt two_warnings_prompt = | 131 scoped_refptr<ExtensionInstallPrompt::Prompt> two_warnings_prompt = |
132 chrome::BuildExtensionInstallPrompt(extension_.get()); | 132 chrome::BuildExtensionInstallPrompt(extension_.get()); |
133 permissions.push_back(base::UTF8ToUTF16("warning 2")); | 133 permissions.push_back(base::UTF8ToUTF16("warning 2")); |
134 two_warnings_prompt.SetPermissions(permissions); | 134 two_warnings_prompt->SetPermissions(permissions); |
135 // No details provided with this permission. | 135 // No details provided with this permission. |
136 details.push_back(base::string16()); | 136 details.push_back(base::string16()); |
137 two_warnings_prompt.SetPermissionsDetails(details); | 137 two_warnings_prompt->SetPermissionsDetails(details); |
138 | 138 |
139 base::scoped_nsobject<ExtensionInstallViewController> controller1( | 139 base::scoped_nsobject<ExtensionInstallViewController> controller1( |
140 [[ExtensionInstallViewController alloc] | 140 [[ExtensionInstallViewController alloc] |
141 initWithNavigator:browser() | 141 initWithNavigator:browser() |
142 delegate:&delegate1 | 142 delegate:&delegate1 |
143 prompt:one_warning_prompt]); | 143 prompt:one_warning_prompt]); |
144 | 144 |
145 [controller1 view]; // Force nib load. | 145 [controller1 view]; // Force nib load. |
146 | 146 |
147 base::scoped_nsobject<ExtensionInstallViewController> controller2( | 147 base::scoped_nsobject<ExtensionInstallViewController> controller2( |
(...skipping 13 matching lines...) Expand all Loading... |
161 ASSERT_LT([[controller1 view] frame].size.height, | 161 ASSERT_LT([[controller1 view] frame].size.height, |
162 [[controller2 view] frame].size.height); | 162 [[controller2 view] frame].size.height); |
163 } | 163 } |
164 | 164 |
165 // Test that we can load the skinny prompt correctly, and that the outlets are | 165 // Test that we can load the skinny prompt correctly, and that the outlets are |
166 // are hooked up. | 166 // are hooked up. |
167 TEST_F(ExtensionInstallViewControllerTest, BasicsSkinny) { | 167 TEST_F(ExtensionInstallViewControllerTest, BasicsSkinny) { |
168 chrome::MockExtensionInstallPromptDelegate delegate; | 168 chrome::MockExtensionInstallPromptDelegate delegate; |
169 | 169 |
170 // No warnings should trigger skinny prompt. | 170 // No warnings should trigger skinny prompt. |
171 ExtensionInstallPrompt::Prompt no_warnings_prompt = | 171 scoped_refptr<ExtensionInstallPrompt::Prompt> no_warnings_prompt = |
172 chrome::BuildExtensionInstallPrompt(extension_.get()); | 172 chrome::BuildExtensionInstallPrompt(extension_.get()); |
173 | 173 |
174 base::scoped_nsobject<ExtensionInstallViewController> controller( | 174 base::scoped_nsobject<ExtensionInstallViewController> controller( |
175 [[ExtensionInstallViewController alloc] | 175 [[ExtensionInstallViewController alloc] |
176 initWithNavigator:browser() | 176 initWithNavigator:browser() |
177 delegate:&delegate | 177 delegate:&delegate |
178 prompt:no_warnings_prompt]); | 178 prompt:no_warnings_prompt]); |
179 | 179 |
180 [controller view]; // Force nib load. | 180 [controller view]; // Force nib load. |
181 | 181 |
(...skipping 20 matching lines...) Expand all Loading... |
202 EXPECT_FALSE([controller outlineView]); | 202 EXPECT_FALSE([controller outlineView]); |
203 } | 203 } |
204 | 204 |
205 | 205 |
206 // Test that we can load the inline prompt correctly, and that the outlets are | 206 // Test that we can load the inline prompt correctly, and that the outlets are |
207 // are hooked up. | 207 // are hooked up. |
208 TEST_F(ExtensionInstallViewControllerTest, BasicsInline) { | 208 TEST_F(ExtensionInstallViewControllerTest, BasicsInline) { |
209 chrome::MockExtensionInstallPromptDelegate delegate; | 209 chrome::MockExtensionInstallPromptDelegate delegate; |
210 | 210 |
211 // No warnings should trigger skinny prompt. | 211 // No warnings should trigger skinny prompt. |
212 ExtensionInstallPrompt::Prompt inline_prompt( | 212 scoped_refptr<ExtensionInstallPrompt::Prompt> inline_prompt = |
213 ExtensionInstallPrompt::INLINE_INSTALL_PROMPT); | 213 new ExtensionInstallPrompt::Prompt( |
214 inline_prompt.SetWebstoreData("1,000", true, 3.5, 200); | 214 ExtensionInstallPrompt::INLINE_INSTALL_PROMPT); |
215 inline_prompt.set_extension(extension_.get()); | 215 inline_prompt->SetWebstoreData("1,000", true, 3.5, 200); |
216 inline_prompt.set_icon(chrome::LoadInstallPromptIcon()); | 216 inline_prompt->set_extension(extension_.get()); |
| 217 inline_prompt->set_icon(chrome::LoadInstallPromptIcon()); |
217 | 218 |
218 base::scoped_nsobject<ExtensionInstallViewController> controller( | 219 base::scoped_nsobject<ExtensionInstallViewController> controller( |
219 [[ExtensionInstallViewController alloc] initWithNavigator:browser() | 220 [[ExtensionInstallViewController alloc] initWithNavigator:browser() |
220 delegate:&delegate | 221 delegate:&delegate |
221 prompt:inline_prompt]); | 222 prompt:inline_prompt]); |
222 | 223 |
223 [controller view]; // Force nib load. | 224 [controller view]; // Force nib load. |
224 | 225 |
225 // Test the right nib loaded. | 226 // Test the right nib loaded. |
226 EXPECT_NSEQ(@"ExtensionInstallPromptWebstoreData", [controller nibName]); | 227 EXPECT_NSEQ(@"ExtensionInstallPromptWebstoreData", [controller nibName]); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
258 // just invisible. | 259 // just invisible. |
259 EXPECT_TRUE([controller outlineView]); | 260 EXPECT_TRUE([controller outlineView]); |
260 EXPECT_TRUE([[[controller outlineView] enclosingScrollView] isHidden]); | 261 EXPECT_TRUE([[[controller outlineView] enclosingScrollView] isHidden]); |
261 EXPECT_TRUE([controller warningsSeparator]); | 262 EXPECT_TRUE([controller warningsSeparator]); |
262 EXPECT_TRUE([[controller warningsSeparator] isHidden]); | 263 EXPECT_TRUE([[controller warningsSeparator] isHidden]); |
263 } | 264 } |
264 | 265 |
265 TEST_F(ExtensionInstallViewControllerTest, PostInstallPermissionsPrompt) { | 266 TEST_F(ExtensionInstallViewControllerTest, PostInstallPermissionsPrompt) { |
266 chrome::MockExtensionInstallPromptDelegate delegate; | 267 chrome::MockExtensionInstallPromptDelegate delegate; |
267 | 268 |
268 ExtensionInstallPrompt::Prompt prompt = | 269 scoped_refptr<ExtensionInstallPrompt::Prompt> prompt = |
269 chrome::BuildExtensionPostInstallPermissionsPrompt(extension_.get()); | 270 chrome::BuildExtensionPostInstallPermissionsPrompt(extension_.get()); |
270 std::vector<base::string16> permissions; | 271 std::vector<base::string16> permissions; |
271 permissions.push_back(base::UTF8ToUTF16("warning 1")); | 272 permissions.push_back(base::UTF8ToUTF16("warning 1")); |
272 prompt.SetPermissions(permissions); | 273 prompt->SetPermissions(permissions); |
273 // No details provided with this permission. | 274 // No details provided with this permission. |
274 std::vector<base::string16> details; | 275 std::vector<base::string16> details; |
275 details.push_back(base::string16()); | 276 details.push_back(base::string16()); |
276 prompt.SetPermissionsDetails(details); | 277 prompt->SetPermissionsDetails(details); |
277 | 278 |
278 base::scoped_nsobject<ExtensionInstallViewController> controller( | 279 base::scoped_nsobject<ExtensionInstallViewController> controller( |
279 [[ExtensionInstallViewController alloc] initWithNavigator:browser() | 280 [[ExtensionInstallViewController alloc] initWithNavigator:browser() |
280 delegate:&delegate | 281 delegate:&delegate |
281 prompt:prompt]); | 282 prompt:prompt]); |
282 | 283 |
283 [controller view]; // Force nib load. | 284 [controller view]; // Force nib load. |
284 | 285 |
285 EXPECT_TRUE([controller cancelButton]); | 286 EXPECT_TRUE([controller cancelButton]); |
286 EXPECT_FALSE([controller okButton]); | 287 EXPECT_FALSE([controller okButton]); |
287 | 288 |
288 [controller cancel:nil]; | 289 [controller cancel:nil]; |
289 EXPECT_EQ(1, delegate.abort_count()); | 290 EXPECT_EQ(1, delegate.abort_count()); |
290 } | 291 } |
291 | 292 |
292 // Test that permission details show up. | 293 // Test that permission details show up. |
293 TEST_F(ExtensionInstallViewControllerTest, PermissionsDetails) { | 294 TEST_F(ExtensionInstallViewControllerTest, PermissionsDetails) { |
294 chrome::MockExtensionInstallPromptDelegate delegate; | 295 chrome::MockExtensionInstallPromptDelegate delegate; |
295 | 296 |
296 ExtensionInstallPrompt::Prompt prompt = | 297 scoped_refptr<ExtensionInstallPrompt::Prompt> prompt = |
297 chrome::BuildExtensionInstallPrompt(extension_.get()); | 298 chrome::BuildExtensionInstallPrompt(extension_.get()); |
298 | 299 |
299 std::vector<base::string16> permissions; | 300 std::vector<base::string16> permissions; |
300 permissions.push_back(base::UTF8ToUTF16("warning 1")); | 301 permissions.push_back(base::UTF8ToUTF16("warning 1")); |
301 std::vector<base::string16> permissions_details; | 302 std::vector<base::string16> permissions_details; |
302 permissions_details.push_back(base::UTF8ToUTF16("Detail 1")); | 303 permissions_details.push_back(base::UTF8ToUTF16("Detail 1")); |
303 prompt.SetPermissions(permissions); | 304 prompt->SetPermissions(permissions); |
304 prompt.SetPermissionsDetails(permissions_details); | 305 prompt->SetPermissionsDetails(permissions_details); |
305 prompt.SetIsShowingDetails( | 306 prompt->SetIsShowingDetails( |
306 ExtensionInstallPrompt::PERMISSIONS_DETAILS, 0, true); | 307 ExtensionInstallPrompt::PERMISSIONS_DETAILS, 0, true); |
307 | 308 |
308 base::scoped_nsobject<ExtensionInstallViewController> controller( | 309 base::scoped_nsobject<ExtensionInstallViewController> controller( |
309 [[ExtensionInstallViewController alloc] initWithNavigator:browser() | 310 [[ExtensionInstallViewController alloc] initWithNavigator:browser() |
310 delegate:&delegate | 311 delegate:&delegate |
311 prompt:prompt]); | 312 prompt:prompt]); |
312 | 313 |
313 [controller view]; // Force nib load. | 314 [controller view]; // Force nib load. |
314 | 315 |
315 NSOutlineView* outlineView = [controller outlineView]; | 316 NSOutlineView* outlineView = [controller outlineView]; |
316 EXPECT_TRUE(outlineView); | 317 EXPECT_TRUE(outlineView); |
317 EXPECT_EQ(4, [outlineView numberOfRows]); | 318 EXPECT_EQ(4, [outlineView numberOfRows]); |
318 EXPECT_NSEQ(base::SysUTF16ToNSString(prompt.GetPermissionsDetails(0)), | 319 EXPECT_NSEQ(base::SysUTF16ToNSString(prompt->GetPermissionsDetails(0)), |
319 [[outlineView dataSource] outlineView:outlineView | 320 [[outlineView dataSource] outlineView:outlineView |
320 objectValueForTableColumn:nil | 321 objectValueForTableColumn:nil |
321 byItem:[outlineView itemAtRow:2]]); | 322 byItem:[outlineView itemAtRow:2]]); |
322 } | 323 } |
OLD | NEW |