| 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 "chrome/browser/ui/cocoa/extensions/extension_install_view_controller.h" |
| 6 |
| 5 #import <Cocoa/Cocoa.h> | 7 #import <Cocoa/Cocoa.h> |
| 6 | 8 |
| 9 #include <utility> |
| 10 |
| 7 #import "base/mac/scoped_nsobject.h" | 11 #import "base/mac/scoped_nsobject.h" |
| 8 #include "base/strings/sys_string_conversions.h" | 12 #include "base/strings/sys_string_conversions.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
| 10 #import "chrome/browser/extensions/extension_install_prompt.h" | 14 #import "chrome/browser/extensions/extension_install_prompt.h" |
| 11 #include "chrome/browser/ui/browser.h" | 15 #include "chrome/browser/ui/browser.h" |
| 12 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h" | 16 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h" |
| 13 #import "chrome/browser/ui/cocoa/extensions/extension_install_prompt_test_utils.
h" | 17 #import "chrome/browser/ui/cocoa/extensions/extension_install_prompt_test_utils.
h" |
| 14 #import "chrome/browser/ui/cocoa/extensions/extension_install_view_controller.h" | |
| 15 #include "extensions/common/extension.h" | 18 #include "extensions/common/extension.h" |
| 16 #include "extensions/common/permissions/permission_message_provider.h" | 19 #include "extensions/common/permissions/permission_message_provider.h" |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
| 18 #import "testing/gtest_mac.h" | 21 #import "testing/gtest_mac.h" |
| 19 | 22 |
| 20 using extensions::Extension; | 23 using extensions::Extension; |
| 21 using extensions::PermissionIDSet; | 24 using extensions::PermissionIDSet; |
| 22 using extensions::PermissionMessage; | 25 using extensions::PermissionMessage; |
| 23 using extensions::PermissionMessages; | 26 using extensions::PermissionMessages; |
| 24 | 27 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 ExtensionInstallPrompt::PermissionsType type = | 80 ExtensionInstallPrompt::PermissionsType type = |
| 78 ExtensionInstallPrompt::PermissionsType::REGULAR_PERMISSIONS; | 81 ExtensionInstallPrompt::PermissionsType::REGULAR_PERMISSIONS; |
| 79 | 82 |
| 80 PermissionMessages permissions; | 83 PermissionMessages permissions; |
| 81 permissions.push_back(PermissionMessage(base::UTF8ToUTF16("warning 1"), | 84 permissions.push_back(PermissionMessage(base::UTF8ToUTF16("warning 1"), |
| 82 PermissionIDSet())); | 85 PermissionIDSet())); |
| 83 prompt->SetPermissions(permissions, type); | 86 prompt->SetPermissions(permissions, type); |
| 84 base::string16 permissionString = prompt->GetPermission(0, type); | 87 base::string16 permissionString = prompt->GetPermission(0, type); |
| 85 | 88 |
| 86 base::scoped_nsobject<ExtensionInstallViewController> controller( | 89 base::scoped_nsobject<ExtensionInstallViewController> controller( |
| 87 [[ExtensionInstallViewController alloc] initWithProfile:profile() | 90 [[ExtensionInstallViewController alloc] |
| 88 navigator:browser() | 91 initWithProfile:profile() |
| 89 delegate:&delegate | 92 navigator:browser() |
| 90 prompt:prompt.Pass()]); | 93 delegate:&delegate |
| 94 prompt:std::move(prompt)]); |
| 91 | 95 |
| 92 [controller view]; // Force nib load. | 96 [controller view]; // Force nib load. |
| 93 | 97 |
| 94 // Test the right nib loaded. | 98 // Test the right nib loaded. |
| 95 EXPECT_NSEQ(@"ExtensionInstallPrompt", [controller nibName]); | 99 EXPECT_NSEQ(@"ExtensionInstallPrompt", [controller nibName]); |
| 96 | 100 |
| 97 // Check all the controls. | 101 // Check all the controls. |
| 98 // Make sure everything is non-nil, and that the fields that are | 102 // Make sure everything is non-nil, and that the fields that are |
| 99 // auto-translated don't start with a caret (that would indicate that they | 103 // auto-translated don't start with a caret (that would indicate that they |
| 100 // were not translated). | 104 // were not translated). |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 chrome::BuildExtensionInstallPrompt(extension_.get())); | 137 chrome::BuildExtensionInstallPrompt(extension_.get())); |
| 134 ExtensionInstallPrompt::PermissionsType type = | 138 ExtensionInstallPrompt::PermissionsType type = |
| 135 ExtensionInstallPrompt::PermissionsType::REGULAR_PERMISSIONS; | 139 ExtensionInstallPrompt::PermissionsType::REGULAR_PERMISSIONS; |
| 136 | 140 |
| 137 PermissionMessages permissions; | 141 PermissionMessages permissions; |
| 138 permissions.push_back(PermissionMessage(base::UTF8ToUTF16("warning 1"), | 142 permissions.push_back(PermissionMessage(base::UTF8ToUTF16("warning 1"), |
| 139 PermissionIDSet())); | 143 PermissionIDSet())); |
| 140 prompt->SetPermissions(permissions, type); | 144 prompt->SetPermissions(permissions, type); |
| 141 | 145 |
| 142 base::scoped_nsobject<ExtensionInstallViewController> controller( | 146 base::scoped_nsobject<ExtensionInstallViewController> controller( |
| 143 [[ExtensionInstallViewController alloc] initWithProfile:profile() | 147 [[ExtensionInstallViewController alloc] |
| 144 navigator:browser() | 148 initWithProfile:profile() |
| 145 delegate:&delegate | 149 navigator:browser() |
| 146 prompt:prompt.Pass()]); | 150 delegate:&delegate |
| 151 prompt:std::move(prompt)]); |
| 147 | 152 |
| 148 [controller view]; // Force nib load. | 153 [controller view]; // Force nib load. |
| 149 [controller ok:nil]; | 154 [controller ok:nil]; |
| 150 | 155 |
| 151 EXPECT_EQ(MockExtensionInstallViewDelegate::Action::OKAY, | 156 EXPECT_EQ(MockExtensionInstallViewDelegate::Action::OKAY, |
| 152 delegate.action()); | 157 delegate.action()); |
| 153 } | 158 } |
| 154 | 159 |
| 155 // Test that controls get repositioned when there are two warnings vs one | 160 // Test that controls get repositioned when there are two warnings vs one |
| 156 // warning. | 161 // warning. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 172 chrome::BuildExtensionInstallPrompt(extension_.get())); | 177 chrome::BuildExtensionInstallPrompt(extension_.get())); |
| 173 permissions.push_back(PermissionMessage(base::UTF8ToUTF16("warning 2"), | 178 permissions.push_back(PermissionMessage(base::UTF8ToUTF16("warning 2"), |
| 174 PermissionIDSet())); | 179 PermissionIDSet())); |
| 175 two_warnings_prompt->SetPermissions(permissions, type); | 180 two_warnings_prompt->SetPermissions(permissions, type); |
| 176 | 181 |
| 177 base::scoped_nsobject<ExtensionInstallViewController> controller1( | 182 base::scoped_nsobject<ExtensionInstallViewController> controller1( |
| 178 [[ExtensionInstallViewController alloc] | 183 [[ExtensionInstallViewController alloc] |
| 179 initWithProfile:profile() | 184 initWithProfile:profile() |
| 180 navigator:browser() | 185 navigator:browser() |
| 181 delegate:&delegate1 | 186 delegate:&delegate1 |
| 182 prompt:one_warning_prompt.Pass()]); | 187 prompt:std::move(one_warning_prompt)]); |
| 183 | 188 |
| 184 [controller1 view]; // Force nib load. | 189 [controller1 view]; // Force nib load. |
| 185 | 190 |
| 186 base::scoped_nsobject<ExtensionInstallViewController> controller2( | 191 base::scoped_nsobject<ExtensionInstallViewController> controller2( |
| 187 [[ExtensionInstallViewController alloc] | 192 [[ExtensionInstallViewController alloc] |
| 188 initWithProfile:profile() | 193 initWithProfile:profile() |
| 189 navigator:browser() | 194 navigator:browser() |
| 190 delegate:&delegate2 | 195 delegate:&delegate2 |
| 191 prompt:two_warnings_prompt.Pass()]); | 196 prompt:std::move(two_warnings_prompt)]); |
| 192 | 197 |
| 193 [controller2 view]; // Force nib load. | 198 [controller2 view]; // Force nib load. |
| 194 | 199 |
| 195 // Test control positioning. We don't test exact positioning because we don't | 200 // Test control positioning. We don't test exact positioning because we don't |
| 196 // want this to depend on string details and localization. But we do know the | 201 // want this to depend on string details and localization. But we do know the |
| 197 // relative effect that adding a second warning should have on the layout. | 202 // relative effect that adding a second warning should have on the layout. |
| 198 ASSERT_LT([[controller1 view] frame].size.height, | 203 ASSERT_LT([[controller1 view] frame].size.height, |
| 199 [[controller2 view] frame].size.height); | 204 [[controller2 view] frame].size.height); |
| 200 | 205 |
| 201 ASSERT_LT([[controller1 view] frame].size.height, | 206 ASSERT_LT([[controller1 view] frame].size.height, |
| 202 [[controller2 view] frame].size.height); | 207 [[controller2 view] frame].size.height); |
| 203 } | 208 } |
| 204 | 209 |
| 205 // Test that we can load the skinny prompt correctly, and that the outlets are | 210 // Test that we can load the skinny prompt correctly, and that the outlets are |
| 206 // are hooked up. | 211 // are hooked up. |
| 207 TEST_F(ExtensionInstallViewControllerTest, BasicsSkinny) { | 212 TEST_F(ExtensionInstallViewControllerTest, BasicsSkinny) { |
| 208 MockExtensionInstallViewDelegate delegate; | 213 MockExtensionInstallViewDelegate delegate; |
| 209 | 214 |
| 210 // No warnings should trigger skinny prompt. | 215 // No warnings should trigger skinny prompt. |
| 211 scoped_ptr<ExtensionInstallPrompt::Prompt> no_warnings_prompt( | 216 scoped_ptr<ExtensionInstallPrompt::Prompt> no_warnings_prompt( |
| 212 chrome::BuildExtensionInstallPrompt(extension_.get())); | 217 chrome::BuildExtensionInstallPrompt(extension_.get())); |
| 213 | 218 |
| 214 base::scoped_nsobject<ExtensionInstallViewController> controller( | 219 base::scoped_nsobject<ExtensionInstallViewController> controller( |
| 215 [[ExtensionInstallViewController alloc] | 220 [[ExtensionInstallViewController alloc] |
| 216 initWithProfile:profile() | 221 initWithProfile:profile() |
| 217 navigator:browser() | 222 navigator:browser() |
| 218 delegate:&delegate | 223 delegate:&delegate |
| 219 prompt:no_warnings_prompt.Pass()]); | 224 prompt:std::move(no_warnings_prompt)]); |
| 220 | 225 |
| 221 [controller view]; // Force nib load. | 226 [controller view]; // Force nib load. |
| 222 | 227 |
| 223 // Test the right nib loaded. | 228 // Test the right nib loaded. |
| 224 EXPECT_NSEQ(@"ExtensionInstallPromptNoWarnings", [controller nibName]); | 229 EXPECT_NSEQ(@"ExtensionInstallPromptNoWarnings", [controller nibName]); |
| 225 | 230 |
| 226 // Check all the controls. | 231 // Check all the controls. |
| 227 // In the skinny prompt, only the icon, title and buttons are non-nill. | 232 // In the skinny prompt, only the icon, title and buttons are non-nill. |
| 228 // Everything else is nil. | 233 // Everything else is nil. |
| 229 EXPECT_TRUE([controller iconView]); | 234 EXPECT_TRUE([controller iconView]); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 255 ExtensionInstallPrompt::INLINE_INSTALL_PROMPT)); | 260 ExtensionInstallPrompt::INLINE_INSTALL_PROMPT)); |
| 256 inline_prompt->SetWebstoreData("1,000", true, 3.5, 200); | 261 inline_prompt->SetWebstoreData("1,000", true, 3.5, 200); |
| 257 inline_prompt->set_extension(extension_.get()); | 262 inline_prompt->set_extension(extension_.get()); |
| 258 inline_prompt->set_icon(chrome::LoadInstallPromptIcon()); | 263 inline_prompt->set_icon(chrome::LoadInstallPromptIcon()); |
| 259 | 264 |
| 260 base::scoped_nsobject<ExtensionInstallViewController> controller( | 265 base::scoped_nsobject<ExtensionInstallViewController> controller( |
| 261 [[ExtensionInstallViewController alloc] | 266 [[ExtensionInstallViewController alloc] |
| 262 initWithProfile:profile() | 267 initWithProfile:profile() |
| 263 navigator:browser() | 268 navigator:browser() |
| 264 delegate:&delegate | 269 delegate:&delegate |
| 265 prompt:inline_prompt.Pass()]); | 270 prompt:std::move(inline_prompt)]); |
| 266 | 271 |
| 267 [controller view]; // Force nib load. | 272 [controller view]; // Force nib load. |
| 268 | 273 |
| 269 // Test the right nib loaded. | 274 // Test the right nib loaded. |
| 270 EXPECT_NSEQ(@"ExtensionInstallPromptWebstoreData", [controller nibName]); | 275 EXPECT_NSEQ(@"ExtensionInstallPromptWebstoreData", [controller nibName]); |
| 271 | 276 |
| 272 // Check all the controls. | 277 // Check all the controls. |
| 273 EXPECT_TRUE([controller iconView]); | 278 EXPECT_TRUE([controller iconView]); |
| 274 EXPECT_TRUE([[controller iconView] image]); | 279 EXPECT_TRUE([[controller iconView] image]); |
| 275 | 280 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 chrome::BuildExtensionPostInstallPermissionsPrompt(extension_.get())); | 318 chrome::BuildExtensionPostInstallPermissionsPrompt(extension_.get())); |
| 314 ExtensionInstallPrompt::PermissionsType type = | 319 ExtensionInstallPrompt::PermissionsType type = |
| 315 ExtensionInstallPrompt::PermissionsType::REGULAR_PERMISSIONS; | 320 ExtensionInstallPrompt::PermissionsType::REGULAR_PERMISSIONS; |
| 316 | 321 |
| 317 PermissionMessages permissions; | 322 PermissionMessages permissions; |
| 318 permissions.push_back(PermissionMessage(base::UTF8ToUTF16("warning 1"), | 323 permissions.push_back(PermissionMessage(base::UTF8ToUTF16("warning 1"), |
| 319 PermissionIDSet())); | 324 PermissionIDSet())); |
| 320 prompt->SetPermissions(permissions, type); | 325 prompt->SetPermissions(permissions, type); |
| 321 | 326 |
| 322 base::scoped_nsobject<ExtensionInstallViewController> controller( | 327 base::scoped_nsobject<ExtensionInstallViewController> controller( |
| 323 [[ExtensionInstallViewController alloc] initWithProfile:profile() | 328 [[ExtensionInstallViewController alloc] |
| 324 navigator:browser() | 329 initWithProfile:profile() |
| 325 delegate:&delegate | 330 navigator:browser() |
| 326 prompt:prompt.Pass()]); | 331 delegate:&delegate |
| 332 prompt:std::move(prompt)]); |
| 327 | 333 |
| 328 [controller view]; // Force nib load. | 334 [controller view]; // Force nib load. |
| 329 | 335 |
| 330 EXPECT_TRUE([controller cancelButton]); | 336 EXPECT_TRUE([controller cancelButton]); |
| 331 EXPECT_FALSE([controller okButton]); | 337 EXPECT_FALSE([controller okButton]); |
| 332 | 338 |
| 333 [controller cancel:nil]; | 339 [controller cancel:nil]; |
| 334 EXPECT_EQ(MockExtensionInstallViewDelegate::Action::CANCEL, | 340 EXPECT_EQ(MockExtensionInstallViewDelegate::Action::CANCEL, |
| 335 delegate.action()); | 341 delegate.action()); |
| 336 } | 342 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 348 permissions.push_back(PermissionMessage( | 354 permissions.push_back(PermissionMessage( |
| 349 base::UTF8ToUTF16("warning 1"), | 355 base::UTF8ToUTF16("warning 1"), |
| 350 PermissionIDSet(), | 356 PermissionIDSet(), |
| 351 std::vector<base::string16>(1, base::UTF8ToUTF16("Detail 1")))); | 357 std::vector<base::string16>(1, base::UTF8ToUTF16("Detail 1")))); |
| 352 prompt->SetPermissions(permissions, type); | 358 prompt->SetPermissions(permissions, type); |
| 353 prompt->SetIsShowingDetails( | 359 prompt->SetIsShowingDetails( |
| 354 ExtensionInstallPrompt::PERMISSIONS_DETAILS, 0, true); | 360 ExtensionInstallPrompt::PERMISSIONS_DETAILS, 0, true); |
| 355 base::string16 permissionString = prompt->GetPermissionsDetails(0, type); | 361 base::string16 permissionString = prompt->GetPermissionsDetails(0, type); |
| 356 | 362 |
| 357 base::scoped_nsobject<ExtensionInstallViewController> controller( | 363 base::scoped_nsobject<ExtensionInstallViewController> controller( |
| 358 [[ExtensionInstallViewController alloc] initWithProfile:profile() | 364 [[ExtensionInstallViewController alloc] |
| 359 navigator:browser() | 365 initWithProfile:profile() |
| 360 delegate:&delegate | 366 navigator:browser() |
| 361 prompt:prompt.Pass()]); | 367 delegate:&delegate |
| 368 prompt:std::move(prompt)]); |
| 362 | 369 |
| 363 [controller view]; // Force nib load. | 370 [controller view]; // Force nib load. |
| 364 | 371 |
| 365 NSOutlineView* outlineView = [controller outlineView]; | 372 NSOutlineView* outlineView = [controller outlineView]; |
| 366 EXPECT_TRUE(outlineView); | 373 EXPECT_TRUE(outlineView); |
| 367 EXPECT_EQ(4, [outlineView numberOfRows]); | 374 EXPECT_EQ(4, [outlineView numberOfRows]); |
| 368 EXPECT_NSEQ(base::SysUTF16ToNSString(permissionString), | 375 EXPECT_NSEQ(base::SysUTF16ToNSString(permissionString), |
| 369 [[outlineView dataSource] outlineView:outlineView | 376 [[outlineView dataSource] outlineView:outlineView |
| 370 objectValueForTableColumn:nil | 377 objectValueForTableColumn:nil |
| 371 byItem:[outlineView itemAtRow:2]]); | 378 byItem:[outlineView itemAtRow:2]]); |
| 372 } | 379 } |
| OLD | NEW |