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

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

Issue 1534123002: [Extensions] Migrate ExtensionInstallPrompt::Delegate to be a callback (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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 (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"
11 #include "chrome/browser/ui/browser.h" 11 #include "chrome/browser/ui/browser.h"
12 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h" 12 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h"
13 #import "chrome/browser/ui/cocoa/extensions/extension_install_prompt_test_utils. h" 13 #import "chrome/browser/ui/cocoa/extensions/extension_install_prompt_test_utils. h"
14 #import "chrome/browser/ui/cocoa/extensions/extension_install_view_controller.h" 14 #import "chrome/browser/ui/cocoa/extensions/extension_install_view_controller.h"
15 #include "extensions/common/extension.h" 15 #include "extensions/common/extension.h"
16 #include "extensions/common/permissions/permission_message_provider.h" 16 #include "extensions/common/permissions/permission_message_provider.h"
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 #import "testing/gtest_mac.h" 18 #import "testing/gtest_mac.h"
19 19
20 using extensions::Extension; 20 using extensions::Extension;
21 using extensions::PermissionIDSet; 21 using extensions::PermissionIDSet;
22 using extensions::PermissionMessage; 22 using extensions::PermissionMessage;
23 using extensions::PermissionMessages; 23 using extensions::PermissionMessages;
24 24
25 namespace {
26
27 class MockExtensionInstallViewDelegate : public ExtensionInstallViewDelegate {
28 public:
29 enum class Action {
30 UNDEFINED,
31 OKAY,
32 CANCEL,
33 LINK,
34 };
35
36 MockExtensionInstallViewDelegate() : action_(Action::UNDEFINED) {}
37 ~MockExtensionInstallViewDelegate() override {}
38
39 void OnOkButtonClicked() override { SetAction(Action::OKAY); }
40 void OnCancelButtonClicked() override { SetAction(Action::CANCEL); }
41 void OnStoreLinkClicked() override { SetAction(Action::LINK); }
42
43 Action action() const { return action_; }
44
45 private:
46 void SetAction(Action action) {
47 if (action_ != Action::UNDEFINED)
48 ADD_FAILURE() << "SetAction() called twice!";
49 action_ = action;
50 }
51
52 Action action_;
53
54 DISALLOW_COPY_AND_ASSIGN(MockExtensionInstallViewDelegate);
55 };
56
25 // Base class for our tests. 57 // Base class for our tests.
26 class ExtensionInstallViewControllerTest : public CocoaProfileTest { 58 class ExtensionInstallViewControllerTest : public CocoaProfileTest {
27 public: 59 public:
28 ExtensionInstallViewControllerTest() { 60 ExtensionInstallViewControllerTest() {
29 extension_ = chrome::LoadInstallPromptExtension(); 61 extension_ = chrome::LoadInstallPromptExtension();
30 } 62 }
31 63
32 protected: 64 protected:
33 scoped_refptr<extensions::Extension> extension_; 65 scoped_refptr<extensions::Extension> extension_;
34 }; 66 };
35 67
68 } // namespace
69
36 // Test that we can load the two kinds of prompts correctly, that the outlets 70 // Test that we can load the two kinds of prompts correctly, that the outlets
37 // are hooked up, and that the dialog calls cancel when cancel is pressed. 71 // are hooked up, and that the dialog calls cancel when cancel is pressed.
38 TEST_F(ExtensionInstallViewControllerTest, BasicsNormalCancel) { 72 TEST_F(ExtensionInstallViewControllerTest, BasicsNormalCancel) {
39 chrome::MockExtensionInstallPromptDelegate delegate; 73 MockExtensionInstallViewDelegate delegate;
40 74
41 scoped_ptr<ExtensionInstallPrompt::Prompt> prompt( 75 scoped_ptr<ExtensionInstallPrompt::Prompt> prompt(
42 chrome::BuildExtensionInstallPrompt(extension_.get())); 76 chrome::BuildExtensionInstallPrompt(extension_.get()));
43 ExtensionInstallPrompt::PermissionsType type = 77 ExtensionInstallPrompt::PermissionsType type =
44 ExtensionInstallPrompt::PermissionsType::REGULAR_PERMISSIONS; 78 ExtensionInstallPrompt::PermissionsType::REGULAR_PERMISSIONS;
45 79
46 PermissionMessages permissions; 80 PermissionMessages permissions;
47 permissions.push_back(PermissionMessage(base::UTF8ToUTF16("warning 1"), 81 permissions.push_back(PermissionMessage(base::UTF8ToUTF16("warning 1"),
48 PermissionIDSet())); 82 PermissionIDSet()));
49 prompt->SetPermissions(permissions, type); 83 prompt->SetPermissions(permissions, type);
(...skipping 29 matching lines...) Expand all
79 byItem:[outlineView itemAtRow:1]]); 113 byItem:[outlineView itemAtRow:1]]);
80 114
81 EXPECT_TRUE([controller cancelButton]); 115 EXPECT_TRUE([controller cancelButton]);
82 EXPECT_NE(0u, [[[controller cancelButton] stringValue] length]); 116 EXPECT_NE(0u, [[[controller cancelButton] stringValue] length]);
83 EXPECT_NE('^', [[[controller cancelButton] stringValue] characterAtIndex:0]); 117 EXPECT_NE('^', [[[controller cancelButton] stringValue] characterAtIndex:0]);
84 118
85 EXPECT_TRUE([controller okButton]); 119 EXPECT_TRUE([controller okButton]);
86 EXPECT_NE(0u, [[[controller okButton] stringValue] length]); 120 EXPECT_NE(0u, [[[controller okButton] stringValue] length]);
87 EXPECT_NE('^', [[[controller okButton] stringValue] characterAtIndex:0]); 121 EXPECT_NE('^', [[[controller okButton] stringValue] characterAtIndex:0]);
88 122
89 // Test that cancel calls our delegate. 123 // Test that cancel calls our callback.
90 [controller cancel:nil]; 124 [controller cancel:nil];
91 EXPECT_EQ(1, delegate.abort_count()); 125 EXPECT_EQ(MockExtensionInstallViewDelegate::Action::CANCEL,
92 EXPECT_EQ(0, delegate.proceed_count()); 126 delegate.action());
93 } 127 }
94 128
95 TEST_F(ExtensionInstallViewControllerTest, BasicsNormalOK) { 129 TEST_F(ExtensionInstallViewControllerTest, BasicsNormalOK) {
96 chrome::MockExtensionInstallPromptDelegate delegate; 130 MockExtensionInstallViewDelegate delegate;
97 131
98 scoped_ptr<ExtensionInstallPrompt::Prompt> prompt( 132 scoped_ptr<ExtensionInstallPrompt::Prompt> prompt(
99 chrome::BuildExtensionInstallPrompt(extension_.get())); 133 chrome::BuildExtensionInstallPrompt(extension_.get()));
100 ExtensionInstallPrompt::PermissionsType type = 134 ExtensionInstallPrompt::PermissionsType type =
101 ExtensionInstallPrompt::PermissionsType::REGULAR_PERMISSIONS; 135 ExtensionInstallPrompt::PermissionsType::REGULAR_PERMISSIONS;
102 136
103 PermissionMessages permissions; 137 PermissionMessages permissions;
104 permissions.push_back(PermissionMessage(base::UTF8ToUTF16("warning 1"), 138 permissions.push_back(PermissionMessage(base::UTF8ToUTF16("warning 1"),
105 PermissionIDSet())); 139 PermissionIDSet()));
106 prompt->SetPermissions(permissions, type); 140 prompt->SetPermissions(permissions, type);
107 141
108 base::scoped_nsobject<ExtensionInstallViewController> controller( 142 base::scoped_nsobject<ExtensionInstallViewController> controller(
109 [[ExtensionInstallViewController alloc] initWithProfile:profile() 143 [[ExtensionInstallViewController alloc] initWithProfile:profile()
110 navigator:browser() 144 navigator:browser()
111 delegate:&delegate 145 delegate:&delegate
112 prompt:prompt.Pass()]); 146 prompt:prompt.Pass()]);
113 147
114 [controller view]; // Force nib load. 148 [controller view]; // Force nib load.
115 [controller ok:nil]; 149 [controller ok:nil];
116 150
117 EXPECT_EQ(0, delegate.abort_count()); 151 EXPECT_EQ(MockExtensionInstallViewDelegate::Action::OKAY,
118 EXPECT_EQ(1, delegate.proceed_count()); 152 delegate.action());
119 } 153 }
120 154
121 // Test that controls get repositioned when there are two warnings vs one 155 // Test that controls get repositioned when there are two warnings vs one
122 // warning. 156 // warning.
123 TEST_F(ExtensionInstallViewControllerTest, MultipleWarnings) { 157 TEST_F(ExtensionInstallViewControllerTest, MultipleWarnings) {
124 chrome::MockExtensionInstallPromptDelegate delegate1; 158 MockExtensionInstallViewDelegate delegate1;
125 chrome::MockExtensionInstallPromptDelegate delegate2; 159 MockExtensionInstallViewDelegate delegate2;
126 160
127 scoped_ptr<ExtensionInstallPrompt::Prompt> one_warning_prompt( 161 scoped_ptr<ExtensionInstallPrompt::Prompt> one_warning_prompt(
128 chrome::BuildExtensionInstallPrompt(extension_.get())); 162 chrome::BuildExtensionInstallPrompt(extension_.get()));
129 ExtensionInstallPrompt::PermissionsType type = 163 ExtensionInstallPrompt::PermissionsType type =
130 ExtensionInstallPrompt::PermissionsType::REGULAR_PERMISSIONS; 164 ExtensionInstallPrompt::PermissionsType::REGULAR_PERMISSIONS;
131 165
132 PermissionMessages permissions; 166 PermissionMessages permissions;
133 permissions.push_back(PermissionMessage(base::UTF8ToUTF16("warning 1"), 167 permissions.push_back(PermissionMessage(base::UTF8ToUTF16("warning 1"),
134 PermissionIDSet())); 168 PermissionIDSet()));
135 one_warning_prompt->SetPermissions(permissions, type); 169 one_warning_prompt->SetPermissions(permissions, type);
(...skipping 28 matching lines...) Expand all
164 ASSERT_LT([[controller1 view] frame].size.height, 198 ASSERT_LT([[controller1 view] frame].size.height,
165 [[controller2 view] frame].size.height); 199 [[controller2 view] frame].size.height);
166 200
167 ASSERT_LT([[controller1 view] frame].size.height, 201 ASSERT_LT([[controller1 view] frame].size.height,
168 [[controller2 view] frame].size.height); 202 [[controller2 view] frame].size.height);
169 } 203 }
170 204
171 // Test that we can load the skinny prompt correctly, and that the outlets are 205 // Test that we can load the skinny prompt correctly, and that the outlets are
172 // are hooked up. 206 // are hooked up.
173 TEST_F(ExtensionInstallViewControllerTest, BasicsSkinny) { 207 TEST_F(ExtensionInstallViewControllerTest, BasicsSkinny) {
174 chrome::MockExtensionInstallPromptDelegate delegate; 208 MockExtensionInstallViewDelegate delegate;
175 209
176 // No warnings should trigger skinny prompt. 210 // No warnings should trigger skinny prompt.
177 scoped_ptr<ExtensionInstallPrompt::Prompt> no_warnings_prompt( 211 scoped_ptr<ExtensionInstallPrompt::Prompt> no_warnings_prompt(
178 chrome::BuildExtensionInstallPrompt(extension_.get())); 212 chrome::BuildExtensionInstallPrompt(extension_.get()));
179 213
180 base::scoped_nsobject<ExtensionInstallViewController> controller( 214 base::scoped_nsobject<ExtensionInstallViewController> controller(
181 [[ExtensionInstallViewController alloc] 215 [[ExtensionInstallViewController alloc]
182 initWithProfile:profile() 216 initWithProfile:profile()
183 navigator:browser() 217 navigator:browser()
184 delegate:&delegate 218 delegate:&delegate
(...skipping 21 matching lines...) Expand all
206 EXPECT_NE(0u, [[[controller okButton] stringValue] length]); 240 EXPECT_NE(0u, [[[controller okButton] stringValue] length]);
207 EXPECT_NE('^', [[[controller okButton] stringValue] characterAtIndex:0]); 241 EXPECT_NE('^', [[[controller okButton] stringValue] characterAtIndex:0]);
208 242
209 EXPECT_FALSE([controller outlineView]); 243 EXPECT_FALSE([controller outlineView]);
210 } 244 }
211 245
212 246
213 // Test that we can load the inline prompt correctly, and that the outlets are 247 // Test that we can load the inline prompt correctly, and that the outlets are
214 // are hooked up. 248 // are hooked up.
215 TEST_F(ExtensionInstallViewControllerTest, BasicsInline) { 249 TEST_F(ExtensionInstallViewControllerTest, BasicsInline) {
216 chrome::MockExtensionInstallPromptDelegate delegate; 250 MockExtensionInstallViewDelegate delegate;
217 251
218 // No warnings should trigger skinny prompt. 252 // No warnings should trigger skinny prompt.
219 scoped_ptr<ExtensionInstallPrompt::Prompt> inline_prompt( 253 scoped_ptr<ExtensionInstallPrompt::Prompt> inline_prompt(
220 new ExtensionInstallPrompt::Prompt( 254 new ExtensionInstallPrompt::Prompt(
221 ExtensionInstallPrompt::INLINE_INSTALL_PROMPT)); 255 ExtensionInstallPrompt::INLINE_INSTALL_PROMPT));
222 inline_prompt->SetWebstoreData("1,000", true, 3.5, 200); 256 inline_prompt->SetWebstoreData("1,000", true, 3.5, 200);
223 inline_prompt->set_extension(extension_.get()); 257 inline_prompt->set_extension(extension_.get());
224 inline_prompt->set_icon(chrome::LoadInstallPromptIcon()); 258 inline_prompt->set_icon(chrome::LoadInstallPromptIcon());
225 259
226 base::scoped_nsobject<ExtensionInstallViewController> controller( 260 base::scoped_nsobject<ExtensionInstallViewController> controller(
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 300
267 // Though we have no permissions warnings, these should still be hooked up, 301 // Though we have no permissions warnings, these should still be hooked up,
268 // just invisible. 302 // just invisible.
269 EXPECT_TRUE([controller outlineView]); 303 EXPECT_TRUE([controller outlineView]);
270 EXPECT_TRUE([[[controller outlineView] enclosingScrollView] isHidden]); 304 EXPECT_TRUE([[[controller outlineView] enclosingScrollView] isHidden]);
271 EXPECT_TRUE([controller warningsSeparator]); 305 EXPECT_TRUE([controller warningsSeparator]);
272 EXPECT_TRUE([[controller warningsSeparator] isHidden]); 306 EXPECT_TRUE([[controller warningsSeparator] isHidden]);
273 } 307 }
274 308
275 TEST_F(ExtensionInstallViewControllerTest, PostInstallPermissionsPrompt) { 309 TEST_F(ExtensionInstallViewControllerTest, PostInstallPermissionsPrompt) {
276 chrome::MockExtensionInstallPromptDelegate delegate; 310 MockExtensionInstallViewDelegate delegate;
277 311
278 scoped_ptr<ExtensionInstallPrompt::Prompt> prompt( 312 scoped_ptr<ExtensionInstallPrompt::Prompt> prompt(
279 chrome::BuildExtensionPostInstallPermissionsPrompt(extension_.get())); 313 chrome::BuildExtensionPostInstallPermissionsPrompt(extension_.get()));
280 ExtensionInstallPrompt::PermissionsType type = 314 ExtensionInstallPrompt::PermissionsType type =
281 ExtensionInstallPrompt::PermissionsType::REGULAR_PERMISSIONS; 315 ExtensionInstallPrompt::PermissionsType::REGULAR_PERMISSIONS;
282 316
283 PermissionMessages permissions; 317 PermissionMessages permissions;
284 permissions.push_back(PermissionMessage(base::UTF8ToUTF16("warning 1"), 318 permissions.push_back(PermissionMessage(base::UTF8ToUTF16("warning 1"),
285 PermissionIDSet())); 319 PermissionIDSet()));
286 prompt->SetPermissions(permissions, type); 320 prompt->SetPermissions(permissions, type);
287 321
288 base::scoped_nsobject<ExtensionInstallViewController> controller( 322 base::scoped_nsobject<ExtensionInstallViewController> controller(
289 [[ExtensionInstallViewController alloc] initWithProfile:profile() 323 [[ExtensionInstallViewController alloc] initWithProfile:profile()
290 navigator:browser() 324 navigator:browser()
291 delegate:&delegate 325 delegate:&delegate
292 prompt:prompt.Pass()]); 326 prompt:prompt.Pass()]);
293 327
294 [controller view]; // Force nib load. 328 [controller view]; // Force nib load.
295 329
296 EXPECT_TRUE([controller cancelButton]); 330 EXPECT_TRUE([controller cancelButton]);
297 EXPECT_FALSE([controller okButton]); 331 EXPECT_FALSE([controller okButton]);
298 332
299 [controller cancel:nil]; 333 [controller cancel:nil];
300 EXPECT_EQ(1, delegate.abort_count()); 334 EXPECT_EQ(MockExtensionInstallViewDelegate::Action::CANCEL,
335 delegate.action());
301 } 336 }
302 337
303 // Test that permission details show up. 338 // Test that permission details show up.
304 TEST_F(ExtensionInstallViewControllerTest, PermissionsDetails) { 339 TEST_F(ExtensionInstallViewControllerTest, PermissionsDetails) {
305 chrome::MockExtensionInstallPromptDelegate delegate; 340 MockExtensionInstallViewDelegate delegate;
306 341
307 scoped_ptr<ExtensionInstallPrompt::Prompt> prompt( 342 scoped_ptr<ExtensionInstallPrompt::Prompt> prompt(
308 chrome::BuildExtensionInstallPrompt(extension_.get())); 343 chrome::BuildExtensionInstallPrompt(extension_.get()));
309 ExtensionInstallPrompt::PermissionsType type = 344 ExtensionInstallPrompt::PermissionsType type =
310 ExtensionInstallPrompt::PermissionsType::REGULAR_PERMISSIONS; 345 ExtensionInstallPrompt::PermissionsType::REGULAR_PERMISSIONS;
311 346
312 PermissionMessages permissions; 347 PermissionMessages permissions;
313 permissions.push_back(PermissionMessage( 348 permissions.push_back(PermissionMessage(
314 base::UTF8ToUTF16("warning 1"), 349 base::UTF8ToUTF16("warning 1"),
315 PermissionIDSet(), 350 PermissionIDSet(),
(...skipping 12 matching lines...) Expand all
328 [controller view]; // Force nib load. 363 [controller view]; // Force nib load.
329 364
330 NSOutlineView* outlineView = [controller outlineView]; 365 NSOutlineView* outlineView = [controller outlineView];
331 EXPECT_TRUE(outlineView); 366 EXPECT_TRUE(outlineView);
332 EXPECT_EQ(4, [outlineView numberOfRows]); 367 EXPECT_EQ(4, [outlineView numberOfRows]);
333 EXPECT_NSEQ(base::SysUTF16ToNSString(permissionString), 368 EXPECT_NSEQ(base::SysUTF16ToNSString(permissionString),
334 [[outlineView dataSource] outlineView:outlineView 369 [[outlineView dataSource] outlineView:outlineView
335 objectValueForTableColumn:nil 370 objectValueForTableColumn:nil
336 byItem:[outlineView itemAtRow:2]]); 371 byItem:[outlineView itemAtRow:2]]);
337 } 372 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698