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

Side by Side Diff: chrome/browser/autofill/autofill_interactive_uitest.cc

Issue 19820004: Per the Chromium style guide/dos-and-donts doc, don't inline non-"cheap (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 5 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
« no previous file with comments | « no previous file | chrome/browser/devtools/devtools_window.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/memory/ref_counted.h" 5 #include "base/memory/ref_counted.h"
6 #include "base/memory/scoped_ptr.h" 6 #include "base/memory/scoped_ptr.h"
7 #include "chrome/browser/autofill/personal_data_manager_factory.h" 7 #include "chrome/browser/autofill/personal_data_manager_factory.h"
8 #include "chrome/browser/chrome_notification_types.h" 8 #include "chrome/browser/chrome_notification_types.h"
9 #include "chrome/browser/infobars/confirm_infobar_delegate.h" 9 #include "chrome/browser/infobars/confirm_infobar_delegate.h"
10 #include "chrome/browser/profiles/profile.h" 10 #include "chrome/browser/profiles/profile.h"
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 " </select><br>" 67 " </select><br>"
68 "<label for=\"phone\">Phone number:</label>" 68 "<label for=\"phone\">Phone number:</label>"
69 " <input type=\"text\" id=\"phone\"><br>" 69 " <input type=\"text\" id=\"phone\"><br>"
70 "</form>"; 70 "</form>";
71 71
72 class AutofillManagerTestDelegateImpl 72 class AutofillManagerTestDelegateImpl
73 : public autofill::AutofillManagerTestDelegate { 73 : public autofill::AutofillManagerTestDelegate {
74 public: 74 public:
75 AutofillManagerTestDelegateImpl() {} 75 AutofillManagerTestDelegateImpl() {}
76 76
77 // autofill::AutofillManagerTestDelegate:
77 virtual void DidPreviewFormData() OVERRIDE { 78 virtual void DidPreviewFormData() OVERRIDE {
78 loop_runner_->Quit(); 79 loop_runner_->Quit();
79 } 80 }
80 81
81 virtual void DidFillFormData() OVERRIDE { 82 virtual void DidFillFormData() OVERRIDE {
82 loop_runner_->Quit(); 83 loop_runner_->Quit();
83 } 84 }
84 85
85 virtual void DidShowSuggestions() OVERRIDE { 86 virtual void DidShowSuggestions() OVERRIDE {
86 loop_runner_->Quit(); 87 loop_runner_->Quit();
(...skipping 26 matching lines...) Expand all
113 AddObserver(this); 114 AddObserver(this);
114 registrar_.Add(this, chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED, 115 registrar_.Add(this, chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED,
115 content::NotificationService::AllSources()); 116 content::NotificationService::AllSources());
116 } 117 }
117 118
118 virtual ~WindowedPersonalDataManagerObserver() { 119 virtual ~WindowedPersonalDataManagerObserver() {
119 if (infobar_service_ && infobar_service_->infobar_count() > 0) 120 if (infobar_service_ && infobar_service_->infobar_count() > 0)
120 infobar_service_->RemoveInfoBar(infobar_service_->infobar_at(0)); 121 infobar_service_->RemoveInfoBar(infobar_service_->infobar_at(0));
121 } 122 }
122 123
123 void Wait() {
124 if (!alerted_) {
125 has_run_message_loop_ = true;
126 content::RunMessageLoop();
127 }
128 PersonalDataManagerFactory::GetForProfile(browser_->profile())->
129 RemoveObserver(this);
130 }
131
132 // PersonalDataManagerObserver: 124 // PersonalDataManagerObserver:
133 virtual void OnPersonalDataChanged() OVERRIDE { 125 virtual void OnPersonalDataChanged() OVERRIDE {
134 if (has_run_message_loop_) { 126 if (has_run_message_loop_) {
135 base::MessageLoopForUI::current()->Quit(); 127 base::MessageLoopForUI::current()->Quit();
136 has_run_message_loop_ = false; 128 has_run_message_loop_ = false;
137 } 129 }
138 alerted_ = true; 130 alerted_ = true;
139 } 131 }
140 132
141 virtual void OnInsufficientFormData() OVERRIDE { 133 virtual void OnInsufficientFormData() OVERRIDE {
142 OnPersonalDataChanged(); 134 OnPersonalDataChanged();
143 } 135 }
144 136
145 // content::NotificationObserver: 137 // content::NotificationObserver:
146 virtual void Observe(int type, 138 virtual void Observe(int type,
147 const content::NotificationSource& source, 139 const content::NotificationSource& source,
148 const content::NotificationDetails& details) OVERRIDE { 140 const content::NotificationDetails& details) OVERRIDE {
149 // Accept in the infobar. 141 // Accept in the infobar.
150 infobar_service_ = InfoBarService::FromWebContents( 142 infobar_service_ = InfoBarService::FromWebContents(
151 browser_->tab_strip_model()->GetActiveWebContents()); 143 browser_->tab_strip_model()->GetActiveWebContents());
152 InfoBarDelegate* infobar = infobar_service_->infobar_at(0); 144 InfoBarDelegate* infobar = infobar_service_->infobar_at(0);
153 145
154 ConfirmInfoBarDelegate* confirm_infobar = 146 ConfirmInfoBarDelegate* confirm_infobar =
155 infobar->AsConfirmInfoBarDelegate(); 147 infobar->AsConfirmInfoBarDelegate();
156 confirm_infobar->Accept(); 148 confirm_infobar->Accept();
157 } 149 }
158 150
151 void Wait() {
152 if (!alerted_) {
153 has_run_message_loop_ = true;
154 content::RunMessageLoop();
155 }
156 PersonalDataManagerFactory::GetForProfile(browser_->profile())->
157 RemoveObserver(this);
158 }
159
159 private: 160 private:
160 bool alerted_; 161 bool alerted_;
161 bool has_run_message_loop_; 162 bool has_run_message_loop_;
162 Browser* browser_; 163 Browser* browser_;
163 content::NotificationRegistrar registrar_; 164 content::NotificationRegistrar registrar_;
164 InfoBarService* infobar_service_; 165 InfoBarService* infobar_service_;
165 }; 166 };
166 167
167 class TestAutofillExternalDelegate : public AutofillExternalDelegate { 168 class TestAutofillExternalDelegate : public AutofillExternalDelegate {
168 public: 169 public:
169 TestAutofillExternalDelegate(content::WebContents* web_contents, 170 TestAutofillExternalDelegate(content::WebContents* web_contents,
170 AutofillManager* autofill_manager, 171 AutofillManager* autofill_manager,
171 AutofillDriver* autofill_driver) 172 AutofillDriver* autofill_driver)
172 : AutofillExternalDelegate(web_contents, autofill_manager, 173 : AutofillExternalDelegate(web_contents, autofill_manager,
173 autofill_driver), 174 autofill_driver),
174 keyboard_listener_(NULL) { 175 keyboard_listener_(NULL) {
175 } 176 }
176 virtual ~TestAutofillExternalDelegate() {} 177 virtual ~TestAutofillExternalDelegate() {}
177 178
179 // AutofillExternalDelegate:
178 virtual void OnPopupShown(content::KeyboardListener* listener) OVERRIDE { 180 virtual void OnPopupShown(content::KeyboardListener* listener) OVERRIDE {
179 AutofillExternalDelegate::OnPopupShown(listener); 181 AutofillExternalDelegate::OnPopupShown(listener);
180 keyboard_listener_ = listener; 182 keyboard_listener_ = listener;
181 } 183 }
182 184
183 virtual void OnPopupHidden(content::KeyboardListener* listener) OVERRIDE { 185 virtual void OnPopupHidden(content::KeyboardListener* listener) OVERRIDE {
184 keyboard_listener_ = NULL; 186 keyboard_listener_ = NULL;
185 AutofillExternalDelegate::OnPopupHidden(listener); 187 AutofillExternalDelegate::OnPopupHidden(listener);
186 } 188 }
187 189
188 content::KeyboardListener* keyboard_listener() { 190 content::KeyboardListener* keyboard_listener() {
189 return keyboard_listener_; 191 return keyboard_listener_;
190 } 192 }
191 193
192 private: 194 private:
193 // The popup that is currently registered as a keyboard listener, or NULL if 195 // The popup that is currently registered as a keyboard listener, or NULL if
194 // there is none. 196 // there is none.
195 content::KeyboardListener* keyboard_listener_; 197 content::KeyboardListener* keyboard_listener_;
196 198
197 DISALLOW_COPY_AND_ASSIGN(TestAutofillExternalDelegate); 199 DISALLOW_COPY_AND_ASSIGN(TestAutofillExternalDelegate);
198 }; 200 };
199 201
200 class AutofillInteractiveTest : public InProcessBrowserTest { 202 class AutofillInteractiveTest : public InProcessBrowserTest {
201 protected: 203 protected:
202 AutofillInteractiveTest() {} 204 AutofillInteractiveTest() {}
203 205
206 // InProcessBrowserTest:
204 virtual void SetUpOnMainThread() OVERRIDE { 207 virtual void SetUpOnMainThread() OVERRIDE {
205 // Don't want Keychain coming up on Mac. 208 // Don't want Keychain coming up on Mac.
206 test::DisableSystemServices(browser()->profile()); 209 test::DisableSystemServices(browser()->profile());
207 210
208 // When testing the native UI, hook up a test external delegate, which 211 // When testing the native UI, hook up a test external delegate, which
209 // allows us to forward keyboard events to the popup directly. 212 // allows us to forward keyboard events to the popup directly.
210 content::WebContents* web_contents = 213 content::WebContents* web_contents =
211 browser()->tab_strip_model()->GetActiveWebContents(); 214 browser()->tab_strip_model()->GetActiveWebContents();
212 AutofillDriverImpl* autofill_driver = 215 AutofillDriverImpl* autofill_driver =
213 AutofillDriverImpl::FromWebContents(web_contents); 216 AutofillDriverImpl::FromWebContents(web_contents);
214 AutofillManager* autofill_manager = autofill_driver->autofill_manager(); 217 AutofillManager* autofill_manager = autofill_driver->autofill_manager();
215 scoped_ptr<AutofillExternalDelegate> external_delegate( 218 scoped_ptr<AutofillExternalDelegate> external_delegate(
216 new TestAutofillExternalDelegate(web_contents, autofill_manager, 219 new TestAutofillExternalDelegate(web_contents, autofill_manager,
217 autofill_driver)); 220 autofill_driver));
218 autofill_driver->SetAutofillExternalDelegate(external_delegate.Pass()); 221 autofill_driver->SetAutofillExternalDelegate(external_delegate.Pass());
219 autofill_manager->SetTestDelegate(&test_delegate_); 222 autofill_manager->SetTestDelegate(&test_delegate_);
220 } 223 }
221 224
222 virtual void CleanUpOnMainThread() OVERRIDE { 225 virtual void CleanUpOnMainThread() OVERRIDE {
223 // Make sure to close any showing popups prior to tearing down the UI. 226 // Make sure to close any showing popups prior to tearing down the UI.
224 content::WebContents* web_contents = 227 content::WebContents* web_contents =
225 browser()->tab_strip_model()->GetActiveWebContents(); 228 browser()->tab_strip_model()->GetActiveWebContents();
226 AutofillManager* autofill_manager = 229 AutofillManager* autofill_manager =
227 AutofillDriverImpl::FromWebContents(web_contents)->autofill_manager(); 230 AutofillDriverImpl::FromWebContents(web_contents)->autofill_manager();
228 autofill_manager->delegate()->HideAutofillPopup(); 231 autofill_manager->delegate()->HideAutofillPopup();
229 } 232 }
230 233
231 PersonalDataManager* personal_data_manager() { 234 PersonalDataManager* GetPersonalDataManager() {
232 return PersonalDataManagerFactory::GetForProfile(browser()->profile()); 235 return PersonalDataManagerFactory::GetForProfile(browser()->profile());
233 } 236 }
234 237
238 content::RenderViewHost* GetRenderViewHost() {
239 return browser()->tab_strip_model()->GetActiveWebContents()->
240 GetRenderViewHost();
241 }
242
243 TestAutofillExternalDelegate* GetExternalDelegate() {
244 content::WebContents* web_contents =
245 browser()->tab_strip_model()->GetActiveWebContents();
246 AutofillDriverImpl* autofill_driver =
247 AutofillDriverImpl::FromWebContents(web_contents);
248 return static_cast<TestAutofillExternalDelegate*>(
249 autofill_driver->autofill_external_delegate());
250 }
251
235 void CreateTestProfile() { 252 void CreateTestProfile() {
236 AutofillProfile profile; 253 AutofillProfile profile;
237 test::SetProfileInfo( 254 test::SetProfileInfo(
238 &profile, "Milton", "C.", "Waddams", 255 &profile, "Milton", "C.", "Waddams",
239 "red.swingline@initech.com", "Initech", "4120 Freidrich Lane", 256 "red.swingline@initech.com", "Initech", "4120 Freidrich Lane",
240 "Basement", "Austin", "Texas", "78744", "US", "5125551234"); 257 "Basement", "Austin", "Texas", "78744", "US", "5125551234");
241 258
242 WindowedPersonalDataManagerObserver observer(browser()); 259 WindowedPersonalDataManagerObserver observer(browser());
243 personal_data_manager()->AddProfile(profile); 260 GetPersonalDataManager()->AddProfile(profile);
244 261
245 // AddProfile is asynchronous. Wait for it to finish before continuing the 262 // AddProfile is asynchronous. Wait for it to finish before continuing the
246 // tests. 263 // tests.
247 observer.Wait(); 264 observer.Wait();
248 } 265 }
249 266
250 void ExpectFieldValue(const std::string& field_name, 267 void ExpectFieldValue(const std::string& field_name,
251 const std::string& expected_value) { 268 const std::string& expected_value) {
252 std::string value; 269 std::string value;
253 ASSERT_TRUE(content::ExecuteScriptAndExtractString( 270 ASSERT_TRUE(content::ExecuteScriptAndExtractString(
254 browser()->tab_strip_model()->GetActiveWebContents(), 271 browser()->tab_strip_model()->GetActiveWebContents(),
255 "window.domAutomationController.send(" 272 "window.domAutomationController.send("
256 " document.getElementById('" + field_name + "').value);", 273 " document.getElementById('" + field_name + "').value);",
257 &value)); 274 &value));
258 EXPECT_EQ(expected_value, value); 275 EXPECT_EQ(expected_value, value);
259 } 276 }
260 277
261 RenderViewHost* render_view_host() {
262 return browser()->tab_strip_model()->GetActiveWebContents()->
263 GetRenderViewHost();
264 }
265
266 void FocusFirstNameField() { 278 void FocusFirstNameField() {
267 LOG(WARNING) << "Clicking on the tab."; 279 LOG(WARNING) << "Clicking on the tab.";
268 content::SimulateMouseClick( 280 content::SimulateMouseClick(
269 browser()->tab_strip_model()->GetActiveWebContents(), 281 browser()->tab_strip_model()->GetActiveWebContents(),
270 0, 282 0,
271 WebKit::WebMouseEvent::ButtonLeft); 283 WebKit::WebMouseEvent::ButtonLeft);
272 284
273 LOG(WARNING) << "Focusing the first name field."; 285 LOG(WARNING) << "Focusing the first name field.";
274 bool result = false; 286 bool result = false;
275 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 287 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
276 render_view_host(), 288 GetRenderViewHost(),
277 "if (document.readyState === 'complete')" 289 "if (document.readyState === 'complete')"
278 " document.getElementById('firstname').focus();" 290 " document.getElementById('firstname').focus();"
279 "else" 291 "else"
280 " domAutomationController.send(false);", 292 " domAutomationController.send(false);",
281 &result)); 293 &result));
282 ASSERT_TRUE(result); 294 ASSERT_TRUE(result);
283 } 295 }
284 296
285 void ExpectFilledTestForm() { 297 void ExpectFilledTestForm() {
286 ExpectFieldValue("firstname", "Milton"); 298 ExpectFieldValue("firstname", "Milton");
(...skipping 11 matching lines...) Expand all
298 test_delegate_.Reset(); 310 test_delegate_.Reset();
299 content::SimulateKeyPress( 311 content::SimulateKeyPress(
300 browser()->tab_strip_model()->GetActiveWebContents(), 312 browser()->tab_strip_model()->GetActiveWebContents(),
301 key, false, false, false, false); 313 key, false, false, false, false);
302 test_delegate_.Wait(); 314 test_delegate_.Wait();
303 } 315 }
304 316
305 void SendKeyToPopupAndWait(ui::KeyboardCode key) { 317 void SendKeyToPopupAndWait(ui::KeyboardCode key) {
306 // TODO(isherman): Remove this condition once the WebKit popup UI code is 318 // TODO(isherman): Remove this condition once the WebKit popup UI code is
307 // removed. 319 // removed.
308 if (!external_delegate()) { 320 if (!GetExternalDelegate()) {
309 // When testing the WebKit-based UI, route all keys to the page. 321 // When testing the WebKit-based UI, route all keys to the page.
310 SendKeyToPageAndWait(key); 322 SendKeyToPageAndWait(key);
311 return; 323 return;
312 } 324 }
313 325
314 // When testing the native UI, route popup-targeted key presses via the 326 // When testing the native UI, route popup-targeted key presses via the
315 // external delegate. 327 // external delegate.
316 content::NativeWebKeyboardEvent event; 328 content::NativeWebKeyboardEvent event;
317 event.windowsKeyCode = key; 329 event.windowsKeyCode = key;
318 test_delegate_.Reset(); 330 test_delegate_.Reset();
319 external_delegate()->keyboard_listener()->HandleKeyPressEvent(event); 331 GetExternalDelegate()->keyboard_listener()->HandleKeyPressEvent(event);
320 test_delegate_.Wait(); 332 test_delegate_.Wait();
321 } 333 }
322 334
323 TestAutofillExternalDelegate* external_delegate() {
324 content::WebContents* web_contents =
325 browser()->tab_strip_model()->GetActiveWebContents();
326 AutofillDriverImpl* autofill_driver =
327 AutofillDriverImpl::FromWebContents(web_contents);
328 return static_cast<TestAutofillExternalDelegate*>(
329 autofill_driver->autofill_external_delegate());
330 }
331
332 AutofillManagerTestDelegateImpl test_delegate_; 335 AutofillManagerTestDelegateImpl test_delegate_;
333 }; 336 };
334 337
335 IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, DISABLED_AutofillSelectViaTab) { 338 IN_PROC_BROWSER_TEST_F(AutofillInteractiveTest, DISABLED_AutofillSelectViaTab) {
336 CreateTestProfile(); 339 CreateTestProfile();
337 340
338 // Load the test page. 341 // Load the test page.
339 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), 342 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(),
340 GURL(std::string(kDataURIPrefix) + kTestFormString))); 343 GURL(std::string(kDataURIPrefix) + kTestFormString)));
341 344
342 // Focus a fillable field. 345 // Focus a fillable field.
343 FocusFirstNameField(); 346 FocusFirstNameField();
344 347
345 // Press the down arrow to initiate Autofill and wait for the popup to be 348 // Press the down arrow to initiate Autofill and wait for the popup to be
346 // shown. 349 // shown.
347 SendKeyToPageAndWait(ui::VKEY_DOWN); 350 SendKeyToPageAndWait(ui::VKEY_DOWN);
348 351
349 // Press the down arrow to select the suggestion and preview the autofilled 352 // Press the down arrow to select the suggestion and preview the autofilled
350 // form. 353 // form.
351 SendKeyToPopupAndWait(ui::VKEY_DOWN); 354 SendKeyToPopupAndWait(ui::VKEY_DOWN);
352 355
353 // Press tab to accept the autofill suggestions. 356 // Press tab to accept the autofill suggestions.
354 SendKeyToPopupAndWait(ui::VKEY_TAB); 357 SendKeyToPopupAndWait(ui::VKEY_TAB);
355 358
356 // The form should be filled. 359 // The form should be filled.
357 ExpectFilledTestForm(); 360 ExpectFilledTestForm();
358 } 361 }
359 362
360 } // namespace autofill 363 } // namespace autofill
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/devtools/devtools_window.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698