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

Side by Side Diff: chrome/browser/ui/cocoa/extensions/extension_install_view_controller_unittest.mm

Issue 313203004: Make ExtensionInstallPrompt::Prompt ref-counted (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Latest master for CQ Created 6 years, 6 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 | Annotate | Revision Log
OLDNEW
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698