| 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 |