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

Side by Side Diff: chrome/browser/ui/cocoa/intents/web_intent_picker_view_controller_browsertest.mm

Issue 11230023: Web Intents Mac: Add view animation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address review comment Created 8 years, 2 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 #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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698