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 #include "base/utf_string_conversions.h" | 5 #include "base/utf_string_conversions.h" |
6 #include "chrome/browser/profiles/profile.h" | 6 #include "chrome/browser/profiles/profile.h" |
7 #include "chrome/browser/tab_contents/tab_util.h" | 7 #include "chrome/browser/tab_contents/tab_util.h" |
8 #include "chrome/browser/ui/browser.h" | 8 #include "chrome/browser/ui/browser.h" |
9 #include "chrome/browser/ui/cocoa/constrained_window/constrained_window_sheet_co
ntroller.h" | 9 #include "chrome/browser/ui/cocoa/constrained_window/constrained_window_sheet_co
ntroller.h" |
10 #import "chrome/browser/ui/cocoa/extensions/extension_install_prompt_test_utils.
h" | 10 #import "chrome/browser/ui/cocoa/extensions/extension_install_prompt_test_utils.
h" |
11 #import "chrome/browser/ui/cocoa/extensions/extension_install_view_controller.h" | 11 #import "chrome/browser/ui/cocoa/extensions/extension_install_view_controller.h" |
12 #import "chrome/browser/ui/cocoa/intents/web_intent_choose_service_view_controll
er.h" | 12 #import "chrome/browser/ui/cocoa/intents/web_intent_choose_service_view_controll
er.h" |
13 #import "chrome/browser/ui/cocoa/intents/web_intent_extension_prompt_view_contro
ller.h" | 13 #import "chrome/browser/ui/cocoa/intents/web_intent_extension_prompt_view_contro
ller.h" |
14 #import "chrome/browser/ui/cocoa/intents/web_intent_inline_service_view_controll
er.h" | 14 #import "chrome/browser/ui/cocoa/intents/web_intent_inline_service_view_controll
er.h" |
15 #import "chrome/browser/ui/cocoa/intents/web_intent_message_view_controller.h" | 15 #import "chrome/browser/ui/cocoa/intents/web_intent_message_view_controller.h" |
16 #import "chrome/browser/ui/cocoa/intents/web_intent_picker_cocoa2.h" | 16 #import "chrome/browser/ui/cocoa/intents/web_intent_picker_cocoa2.h" |
17 #import "chrome/browser/ui/cocoa/intents/web_intent_picker_view_controller.h" | 17 #import "chrome/browser/ui/cocoa/intents/web_intent_picker_view_controller.h" |
18 #import "chrome/browser/ui/cocoa/intents/web_intent_progress_view_controller.h" | 18 #import "chrome/browser/ui/cocoa/intents/web_intent_progress_view_controller.h" |
19 #import "chrome/browser/ui/cocoa/intents/web_intent_service_row_view_controller.
h" | 19 #import "chrome/browser/ui/cocoa/intents/web_intent_service_row_view_controller.
h" |
20 #import "chrome/browser/ui/cocoa/key_equivalent_constants.h" | 20 #import "chrome/browser/ui/cocoa/key_equivalent_constants.h" |
21 #include "chrome/browser/ui/cocoa/run_loop_testing.h" | 21 #include "chrome/browser/ui/cocoa/run_loop_testing.h" |
22 #import "chrome/browser/ui/cocoa/spinner_progress_indicator.h" | 22 #import "chrome/browser/ui/cocoa/spinner_progress_indicator.h" |
23 #include "chrome/browser/ui/intents/web_intent_picker_delegate_mock.h" | 23 #include "chrome/browser/ui/intents/web_intent_picker_delegate_mock.h" |
24 #include "chrome/browser/ui/tab_contents/tab_contents.h" | 24 #include "chrome/browser/ui/tab_contents/tab_contents.h" |
25 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 25 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
26 #include "chrome/common/extensions/extension.h" | 26 #include "chrome/common/extensions/extension.h" |
27 #include "chrome/test/base/in_process_browser_test.h" | 27 #include "chrome/test/base/in_process_browser_test.h" |
28 #include "content/public/browser/web_contents.h" | 28 #include "content/public/browser/web_contents.h" |
| 29 #include "content/public/test/test_utils.h" |
29 #include "ipc/ipc_message.h" | 30 #include "ipc/ipc_message.h" |
30 #import "testing/gtest_mac.h" | 31 #import "testing/gtest_mac.h" |
31 | 32 |
32 namespace { | 33 namespace { |
33 | 34 |
34 NSString* const kTitle = @"A quick brown fox jumps over the lazy dog."; | 35 NSString* const kTitle = @"A quick brown fox jumps over the lazy dog."; |
35 | 36 |
36 } // namespace | 37 } // namespace |
37 | 38 |
38 class WebIntentPickerViewControllerTest : public InProcessBrowserTest { | 39 class WebIntentPickerViewControllerTest : public InProcessBrowserTest { |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 EXPECT_EQ(PICKER_STATE_WAITING, [controller_ state]); | 88 EXPECT_EQ(PICKER_STATE_WAITING, [controller_ state]); |
88 WebIntentProgressViewController* progress_controller = | 89 WebIntentProgressViewController* progress_controller = |
89 [controller_ progressViewController]; | 90 [controller_ progressViewController]; |
90 EXPECT_NSEQ([controller_ view], [[progress_controller view] superview]); | 91 EXPECT_NSEQ([controller_ view], [[progress_controller view] superview]); |
91 EXPECT_TRUE([[progress_controller progressIndicator] isIndeterminate]); | 92 EXPECT_TRUE([[progress_controller progressIndicator] isIndeterminate]); |
92 } | 93 } |
93 | 94 |
94 // Test the "no matching services" state. | 95 // Test the "no matching services" state. |
95 IN_PROC_BROWSER_TEST_F(WebIntentPickerViewControllerTest, NoServices) { | 96 IN_PROC_BROWSER_TEST_F(WebIntentPickerViewControllerTest, NoServices) { |
96 model_.SetWaitingForSuggestions(false); | 97 model_.SetWaitingForSuggestions(false); |
| 98 content::RunAllPendingInMessageLoop(); |
97 EXPECT_EQ(PICKER_STATE_NO_SERVICE, [controller_ state]); | 99 EXPECT_EQ(PICKER_STATE_NO_SERVICE, [controller_ state]); |
98 WebIntentMessageViewController* message_controller = | 100 WebIntentMessageViewController* message_controller = |
99 [controller_ messageViewController]; | 101 [controller_ messageViewController]; |
100 EXPECT_NSEQ([controller_ view], [[message_controller view] superview]); | 102 EXPECT_NSEQ([controller_ view], [[message_controller view] superview]); |
101 } | 103 } |
102 | 104 |
103 // Test the "choose a service" state. | 105 // Test the "choose a service" state. |
104 IN_PROC_BROWSER_TEST_F(WebIntentPickerViewControllerTest, ChooseService) { | 106 IN_PROC_BROWSER_TEST_F(WebIntentPickerViewControllerTest, ChooseService) { |
105 testing::InSequence dummy; | 107 testing::InSequence dummy; |
106 model_.SetWaitingForSuggestions(false); | 108 model_.SetWaitingForSuggestions(false); |
107 | 109 |
108 // Add a installed service. | 110 // Add a installed service. |
109 GURL url("http://example.com"); | 111 GURL url("http://example.com"); |
110 webkit_glue::WebIntentServiceData::Disposition disposition = | 112 webkit_glue::WebIntentServiceData::Disposition disposition = |
111 webkit_glue::WebIntentServiceData::DISPOSITION_INLINE; | 113 webkit_glue::WebIntentServiceData::DISPOSITION_INLINE; |
112 model_.AddInstalledService(ASCIIToUTF16("Title"), url, disposition); | 114 model_.AddInstalledService(ASCIIToUTF16("Title"), url, disposition); |
113 | 115 |
114 // Add a suggested service. | 116 // Add a suggested service. |
115 std::vector<WebIntentPickerModel::SuggestedExtension> suggestions; | 117 std::vector<WebIntentPickerModel::SuggestedExtension> suggestions; |
116 WebIntentPickerModel::SuggestedExtension suggestion( | 118 WebIntentPickerModel::SuggestedExtension suggestion( |
117 ASCIIToUTF16("Title"), "1234", 2); | 119 ASCIIToUTF16("Title"), "1234", 2); |
118 suggestions.push_back(suggestion); | 120 suggestions.push_back(suggestion); |
119 model_.AddSuggestedExtensions(suggestions); | 121 model_.AddSuggestedExtensions(suggestions); |
120 | 122 |
| 123 content::RunAllPendingInMessageLoop(); |
121 EXPECT_EQ(PICKER_STATE_CHOOSE_SERVICE, [controller_ state]); | 124 EXPECT_EQ(PICKER_STATE_CHOOSE_SERVICE, [controller_ state]); |
122 WebIntentChooseServiceViewController* choose_controller = | 125 WebIntentChooseServiceViewController* choose_controller = |
123 [controller_ chooseServiceViewController]; | 126 [controller_ chooseServiceViewController]; |
124 EXPECT_NSEQ([controller_ view], [[choose_controller view] superview]); | 127 EXPECT_NSEQ([controller_ view], [[choose_controller view] superview]); |
125 NSArray* rows = [choose_controller rows]; | 128 NSArray* rows = [choose_controller rows]; |
126 EXPECT_EQ(2u, [rows count]); | 129 EXPECT_EQ(2u, [rows count]); |
127 | 130 |
128 // Test clicking "show more services in web store" button. | 131 // Test clicking "show more services in web store" button. |
129 EXPECT_CALL(delegate_, OnSuggestionsLinkClicked(CURRENT_TAB)); | 132 EXPECT_CALL(delegate_, OnSuggestionsLinkClicked(CURRENT_TAB)); |
130 [[choose_controller showMoreServicesButton] performClick:nil]; | 133 [[choose_controller showMoreServicesButton] performClick:nil]; |
131 | 134 |
132 // Test click "select" in the installed service row. | 135 // Test click "select" in the installed service row. |
133 EXPECT_CALL(delegate_, | 136 EXPECT_CALL(delegate_, |
134 OnServiceChosen(url, disposition, | 137 OnServiceChosen(url, disposition, |
135 WebIntentPickerDelegate::kEnableDefaults)); | 138 WebIntentPickerDelegate::kEnableDefaults)); |
136 [[[rows objectAtIndex:0] selectButton] performClick:nil]; | 139 [[[rows objectAtIndex:0] selectButton] performClick:nil]; |
137 | 140 |
138 // Test click "select" in the suggested service row. | 141 // Test click "select" in the suggested service row. |
139 EXPECT_CALL(delegate_, OnExtensionInstallRequested(suggestion.id)); | 142 EXPECT_CALL(delegate_, OnExtensionInstallRequested(suggestion.id)); |
140 [[[rows objectAtIndex:1] selectButton] performClick:nil]; | 143 [[[rows objectAtIndex:1] selectButton] performClick:nil]; |
141 | 144 |
142 // Test click suggested service web store link. | 145 // Test click suggested service web store link. |
143 EXPECT_CALL(delegate_, OnExtensionLinkClicked(suggestion.id, CURRENT_TAB)); | 146 EXPECT_CALL(delegate_, OnExtensionLinkClicked(suggestion.id, CURRENT_TAB)); |
144 [[[rows objectAtIndex:1] titleLinkButton] performClick:nil]; | 147 [[[rows objectAtIndex:1] titleLinkButton] performClick:nil]; |
145 | 148 |
146 // Remove everything but suggested extensions. | 149 // Remove everything but suggested extensions. |
147 model_.Clear(); | 150 model_.Clear(); |
| 151 content::RunAllPendingInMessageLoop(); |
148 EXPECT_EQ(PICKER_STATE_CHOOSE_SERVICE, [controller_ state]); | 152 EXPECT_EQ(PICKER_STATE_CHOOSE_SERVICE, [controller_ state]); |
149 rows = [choose_controller rows]; | 153 rows = [choose_controller rows]; |
150 EXPECT_EQ(1u, [rows count]); | 154 EXPECT_EQ(1u, [rows count]); |
151 } | 155 } |
152 | 156 |
153 // Test showing an inline service. | 157 // Test showing an inline service. |
154 IN_PROC_BROWSER_TEST_F(WebIntentPickerViewControllerTest, InlineService) { | 158 IN_PROC_BROWSER_TEST_F(WebIntentPickerViewControllerTest, InlineService) { |
155 testing::InSequence dummy; | 159 testing::InSequence dummy; |
156 | 160 |
157 // Create a web view | 161 // Create a web view |
158 GURL url("about:blank"); | 162 GURL url("about:blank"); |
159 content::WebContents* web_contents = content::WebContents::Create( | 163 content::WebContents* web_contents = content::WebContents::Create( |
160 browser()->profile(), | 164 browser()->profile(), |
161 tab_util::GetSiteInstanceForNewTab(browser()->profile(), url), | 165 tab_util::GetSiteInstanceForNewTab(browser()->profile(), url), |
162 MSG_ROUTING_NONE, | 166 MSG_ROUTING_NONE, |
163 NULL); | 167 NULL); |
164 EXPECT_CALL(delegate_, | 168 EXPECT_CALL(delegate_, |
165 CreateWebContentsForInlineDisposition(testing::_, testing::_)) | 169 CreateWebContentsForInlineDisposition(testing::_, testing::_)) |
166 .WillOnce(testing::Return(web_contents)); | 170 .WillOnce(testing::Return(web_contents)); |
167 | 171 |
168 model_.SetWaitingForSuggestions(false); | 172 model_.SetWaitingForSuggestions(false); |
169 | 173 |
170 webkit_glue::WebIntentServiceData::Disposition disposition = | 174 webkit_glue::WebIntentServiceData::Disposition disposition = |
171 webkit_glue::WebIntentServiceData::DISPOSITION_INLINE; | 175 webkit_glue::WebIntentServiceData::DISPOSITION_INLINE; |
172 model_.AddInstalledService(ASCIIToUTF16("Title"), url, disposition); | 176 model_.AddInstalledService(ASCIIToUTF16("Title"), url, disposition); |
173 model_.SetInlineDisposition(url); | 177 model_.SetInlineDisposition(url); |
| 178 content::RunAllPendingInMessageLoop(); |
174 EXPECT_EQ(PICKER_STATE_INLINE_SERVICE, [controller_ state]); | 179 EXPECT_EQ(PICKER_STATE_INLINE_SERVICE, [controller_ state]); |
175 | 180 |
176 WebIntentInlineServiceViewController * inline_controller = | 181 WebIntentInlineServiceViewController * inline_controller = |
177 [controller_ inlineServiceViewController]; | 182 [controller_ inlineServiceViewController]; |
178 EXPECT_NSEQ([controller_ view], [[inline_controller view] superview]); | 183 EXPECT_NSEQ([controller_ view], [[inline_controller view] superview]); |
179 | 184 |
180 // Test clicking "choose another service". | 185 // Test clicking "choose another service". |
181 EXPECT_CALL(delegate_, OnChooseAnotherService()); | 186 EXPECT_CALL(delegate_, OnChooseAnotherService()); |
182 [[inline_controller chooseServiceButton] performClick:nil]; | 187 [[inline_controller chooseServiceButton] performClick:nil]; |
183 | 188 |
184 // Test hiding "choose another service". | 189 // Test hiding "choose another service". |
185 EXPECT_FALSE([[inline_controller chooseServiceButton] isHidden]); | 190 EXPECT_FALSE([[inline_controller chooseServiceButton] isHidden]); |
186 model_.set_show_use_another_service(false); | 191 model_.set_show_use_another_service(false); |
187 [controller_ update]; | 192 [controller_ update]; |
188 EXPECT_TRUE([[inline_controller chooseServiceButton] isHidden]); | 193 EXPECT_TRUE([[inline_controller chooseServiceButton] isHidden]); |
189 } | 194 } |
190 | 195 |
191 // Test the "installing a service" state. | 196 // Test the "installing a service" state. |
192 IN_PROC_BROWSER_TEST_F(WebIntentPickerViewControllerTest, Installing) { | 197 IN_PROC_BROWSER_TEST_F(WebIntentPickerViewControllerTest, Installing) { |
193 // Add a suggested service. | 198 // Add a suggested service. |
194 std::vector<WebIntentPickerModel::SuggestedExtension> suggestions; | 199 std::vector<WebIntentPickerModel::SuggestedExtension> suggestions; |
195 WebIntentPickerModel::SuggestedExtension suggestion( | 200 WebIntentPickerModel::SuggestedExtension suggestion( |
196 ASCIIToUTF16("Title"), "1234", 2); | 201 ASCIIToUTF16("Title"), "1234", 2); |
197 suggestions.push_back(suggestion); | 202 suggestions.push_back(suggestion); |
198 model_.AddSuggestedExtensions(suggestions); | 203 model_.AddSuggestedExtensions(suggestions); |
199 | 204 |
200 // Set a pending extension download. | 205 // Set a pending extension download. |
201 model_.SetWaitingForSuggestions(false); | 206 model_.SetWaitingForSuggestions(false); |
202 model_.SetPendingExtensionInstallId(suggestion.id); | 207 model_.SetPendingExtensionInstallId(suggestion.id); |
| 208 content::RunAllPendingInMessageLoop(); |
203 EXPECT_EQ(PICKER_STATE_INSTALLING_EXTENSION, [controller_ state]); | 209 EXPECT_EQ(PICKER_STATE_INSTALLING_EXTENSION, [controller_ state]); |
204 | 210 |
205 WebIntentProgressViewController* progress_controller = | 211 WebIntentProgressViewController* progress_controller = |
206 [controller_ progressViewController]; | 212 [controller_ progressViewController]; |
207 EXPECT_NSEQ([controller_ view], [[progress_controller view] superview]); | 213 EXPECT_NSEQ([controller_ view], [[progress_controller view] superview]); |
208 SpinnerProgressIndicator* progress_indicator = | 214 SpinnerProgressIndicator* progress_indicator = |
209 [progress_controller progressIndicator]; | 215 [progress_controller progressIndicator]; |
210 EXPECT_FALSE([progress_indicator isIndeterminate]); | 216 EXPECT_FALSE([progress_indicator isIndeterminate]); |
211 | 217 |
212 int percent_done = 50; | 218 int percent_done = 50; |
213 model_.SetPendingExtensionInstallDownloadProgress(percent_done); | 219 model_.SetPendingExtensionInstallDownloadProgress(percent_done); |
| 220 content::RunAllPendingInMessageLoop(); |
214 EXPECT_EQ(percent_done, [progress_indicator percentDone]); | 221 EXPECT_EQ(percent_done, [progress_indicator percentDone]); |
215 } | 222 } |
216 | 223 |
217 // Test show the extension install prompt. | 224 // Test show the extension install prompt. |
218 IN_PROC_BROWSER_TEST_F(WebIntentPickerViewControllerTest, ExtensionPrompt) { | 225 IN_PROC_BROWSER_TEST_F(WebIntentPickerViewControllerTest, ExtensionPrompt) { |
219 scoped_refptr<extensions::Extension> extension = | 226 scoped_refptr<extensions::Extension> extension = |
220 chrome::LoadInstallPromptExtension(); | 227 chrome::LoadInstallPromptExtension(); |
221 chrome::MockExtensionInstallPromptDelegate delegate; | 228 chrome::MockExtensionInstallPromptDelegate delegate; |
222 ExtensionInstallPrompt::Prompt prompt = | 229 ExtensionInstallPrompt::Prompt prompt = |
223 chrome::BuildExtensionInstallPrompt(extension.get()); | 230 chrome::BuildExtensionInstallPrompt(extension.get()); |
224 | 231 |
225 // Set a pending install prompt. | 232 // Set a pending install prompt. |
226 model_.SetPendingExtensionInstallDelegate(&delegate); | 233 model_.SetPendingExtensionInstallDelegate(&delegate); |
227 model_.SetPendingExtensionInstallPrompt(prompt); | 234 model_.SetPendingExtensionInstallPrompt(prompt); |
| 235 content::RunAllPendingInMessageLoop(); |
228 EXPECT_EQ(PICKER_STATE_EXTENSION_PROMPT, [controller_ state]); | 236 EXPECT_EQ(PICKER_STATE_EXTENSION_PROMPT, [controller_ state]); |
229 | 237 |
230 // Verify that the view controll is embedded. | 238 // Verify that the view controll is embedded. |
231 WebIntentExtensionPromptViewController* extension_prompt_controller = | 239 WebIntentExtensionPromptViewController* extension_prompt_controller = |
232 [controller_ extensionPromptViewController]; | 240 [controller_ extensionPromptViewController]; |
233 EXPECT_NSEQ([controller_ view], | 241 EXPECT_NSEQ([controller_ view], |
234 [[extension_prompt_controller view] superview]); | 242 [[extension_prompt_controller view] superview]); |
235 | 243 |
236 // Press cancel. | 244 // Press cancel. |
237 [[[extension_prompt_controller viewController] cancelButton] | 245 [[[extension_prompt_controller viewController] cancelButton] |
238 performClick:nil]; | 246 performClick:nil]; |
239 EXPECT_EQ(1, delegate.abort_count()); | 247 EXPECT_EQ(1, delegate.abort_count()); |
240 } | 248 } |
OLD | NEW |