| 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/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/command_line.h" | 6 #include "base/command_line.h" |
| 7 #include "base/memory/ref_counted.h" | 7 #include "base/memory/ref_counted.h" |
| 8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "base/time.h" | 10 #include "base/time.h" |
| 11 #include "chrome/browser/autofill/personal_data_manager_factory.h" |
| 11 #include "chrome/browser/ui/autofill/autofill_dialog_controller_impl.h" | 12 #include "chrome/browser/ui/autofill/autofill_dialog_controller_impl.h" |
| 12 #include "chrome/browser/ui/autofill/autofill_dialog_view.h" | 13 #include "chrome/browser/ui/autofill/autofill_dialog_view.h" |
| 13 #include "chrome/browser/ui/autofill/data_model_wrapper.h" | 14 #include "chrome/browser/ui/autofill/data_model_wrapper.h" |
| 15 #include "chrome/browser/ui/autofill/tab_autofill_manager_delegate.h" |
| 14 #include "chrome/browser/ui/autofill/testable_autofill_dialog_view.h" | 16 #include "chrome/browser/ui/autofill/testable_autofill_dialog_view.h" |
| 15 #include "chrome/browser/ui/browser.h" | 17 #include "chrome/browser/ui/browser.h" |
| 16 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 18 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 17 #include "chrome/test/base/in_process_browser_test.h" | 19 #include "chrome/test/base/in_process_browser_test.h" |
| 20 #include "chrome/test/base/ui_test_utils.h" |
| 18 #include "components/autofill/content/browser/wallet/wallet_test_util.h" | 21 #include "components/autofill/content/browser/wallet/wallet_test_util.h" |
| 19 #include "components/autofill/core/browser/autofill_common_test.h" | 22 #include "components/autofill/core/browser/autofill_common_test.h" |
| 20 #include "components/autofill/core/browser/autofill_metrics.h" | 23 #include "components/autofill/core/browser/autofill_metrics.h" |
| 21 #include "components/autofill/core/browser/test_personal_data_manager.h" | 24 #include "components/autofill/core/browser/test_personal_data_manager.h" |
| 22 #include "components/autofill/core/browser/validation.h" | 25 #include "components/autofill/core/browser/validation.h" |
| 23 #include "components/autofill/core/common/autofill_switches.h" | 26 #include "components/autofill/core/common/autofill_switches.h" |
| 24 #include "components/autofill/core/common/form_data.h" | 27 #include "components/autofill/core/common/form_data.h" |
| 25 #include "components/autofill/core/common/form_field_data.h" | 28 #include "components/autofill/core/common/form_field_data.h" |
| 29 #include "content/public/browser/browser_thread.h" |
| 30 #include "content/public/browser/web_contents.h" |
| 31 #include "content/public/browser/web_contents_delegate.h" |
| 32 #include "content/public/test/browser_test_utils.h" |
| 26 #include "content/public/test/test_utils.h" | 33 #include "content/public/test/test_utils.h" |
| 27 #include "testing/gtest/include/gtest/gtest.h" | 34 #include "testing/gtest/include/gtest/gtest.h" |
| 35 #include "third_party/WebKit/public/web/WebInputEvent.h" |
| 28 | 36 |
| 29 namespace autofill { | 37 namespace autofill { |
| 30 | 38 |
| 31 namespace { | 39 namespace { |
| 32 | 40 |
| 33 void MockCallback(const FormStructure*, const std::string&) {} | 41 void MockCallback(const FormStructure*, const std::string&) {} |
| 34 | 42 |
| 35 class MockAutofillMetrics : public AutofillMetrics { | 43 class MockAutofillMetrics : public AutofillMetrics { |
| 36 public: | 44 public: |
| 37 MockAutofillMetrics() | 45 MockAutofillMetrics() |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 return browser()->tab_strip_model()->GetActiveWebContents(); | 214 return browser()->tab_strip_model()->GetActiveWebContents(); |
| 207 } | 215 } |
| 208 | 216 |
| 209 const MockAutofillMetrics& metric_logger() { return metric_logger_; } | 217 const MockAutofillMetrics& metric_logger() { return metric_logger_; } |
| 210 TestAutofillDialogController* controller() { return controller_; } | 218 TestAutofillDialogController* controller() { return controller_; } |
| 211 | 219 |
| 212 void RunMessageLoop() { | 220 void RunMessageLoop() { |
| 213 message_loop_runner_->Run(); | 221 message_loop_runner_->Run(); |
| 214 } | 222 } |
| 215 | 223 |
| 224 // Loads an HTML page in |GetActiveWebContents()| with markup as follows: |
| 225 // <form>|form_inner_html|</form>. After loading, emulates a click event on |
| 226 // the page as requestAutocomplete() must be in response to a user gesture. |
| 227 // Returns the |AutofillDialogControllerImpl| created by this invocation. |
| 228 AutofillDialogControllerImpl* SetUpHtmlAndInvoke( |
| 229 const std::string& form_inner_html) { |
| 230 content::WebContents* contents = GetActiveWebContents(); |
| 231 TabAutofillManagerDelegate* delegate = |
| 232 TabAutofillManagerDelegate::FromWebContents(contents); |
| 233 DCHECK(!delegate->GetDialogControllerForTesting()); |
| 234 |
| 235 ui_test_utils::NavigateToURL( |
| 236 browser(), GURL(std::string("data:text/html,") + |
| 237 "<!doctype html>" |
| 238 "<html>" |
| 239 "<body>" |
| 240 "<form>" + form_inner_html + "</form>" |
| 241 "<script>" |
| 242 "function send(msg) {" |
| 243 "domAutomationController.setAutomationId(0);" |
| 244 "domAutomationController.send(msg);" |
| 245 "}" |
| 246 "document.forms[0].onautocompleteerror = function(e) {" |
| 247 "send('error: ' + e.reason);" |
| 248 "};" |
| 249 "document.forms[0].onautocomplete = function() {" |
| 250 "send('success');" |
| 251 "};" |
| 252 "window.onclick = function() {" |
| 253 "document.forms[0].requestAutocomplete();" |
| 254 "send('clicked');" |
| 255 "};" |
| 256 "</script>" |
| 257 "</body>" |
| 258 "</html>")); |
| 259 content::WaitForLoadStop(contents); |
| 260 |
| 261 dom_message_queue_.reset(new content::DOMMessageQueue); |
| 262 |
| 263 // Triggers the onclick handler which invokes requestAutocomplete(). |
| 264 content::SimulateMouseClick(contents, 0, WebKit::WebMouseEvent::ButtonLeft); |
| 265 ExpectDomMessage("clicked"); |
| 266 |
| 267 AutofillDialogControllerImpl* controller = |
| 268 delegate->GetDialogControllerForTesting(); |
| 269 DCHECK(controller); |
| 270 return controller; |
| 271 } |
| 272 |
| 273 // Wait for a message from the DOM automation controller (from JS in the |
| 274 // page). Requires |SetUpHtmlAndInvoke()| be called first. |
| 275 void ExpectDomMessage(const std::string& expected) { |
| 276 std::string message; |
| 277 ASSERT_TRUE(dom_message_queue_->WaitForMessage(&message)); |
| 278 dom_message_queue_->ClearQueue(); |
| 279 EXPECT_EQ("\"" + expected + "\"", message); |
| 280 } |
| 281 |
| 282 void AddCreditcardToProfile(Profile* profile, const CreditCard& card) { |
| 283 PersonalDataManagerFactory::GetForProfile(profile)->AddCreditCard(card); |
| 284 WaitForWebDB(); |
| 285 } |
| 286 |
| 287 void AddAutofillProfileToProfile(Profile* profile, |
| 288 const AutofillProfile& autofill_profile) { |
| 289 PersonalDataManagerFactory::GetForProfile(profile)->AddProfile( |
| 290 autofill_profile); |
| 291 WaitForWebDB(); |
| 292 } |
| 293 |
| 294 void WaitForWebDB() { |
| 295 content::RunAllPendingInMessageLoop(content::BrowserThread::DB); |
| 296 } |
| 297 |
| 216 private: | 298 private: |
| 217 MockAutofillMetrics metric_logger_; | 299 MockAutofillMetrics metric_logger_; |
| 218 TestAutofillDialogController* controller_; // Weak reference. | 300 TestAutofillDialogController* controller_; // Weak reference. |
| 219 scoped_refptr<content::MessageLoopRunner> message_loop_runner_; | 301 scoped_refptr<content::MessageLoopRunner> message_loop_runner_; |
| 302 scoped_ptr<content::DOMMessageQueue> dom_message_queue_; |
| 220 DISALLOW_COPY_AND_ASSIGN(AutofillDialogControllerTest); | 303 DISALLOW_COPY_AND_ASSIGN(AutofillDialogControllerTest); |
| 221 }; | 304 }; |
| 222 | 305 |
| 223 // TODO(isherman): Enable these tests on other platforms once the UI is | 306 // TODO(isherman): Enable these tests on other platforms once the UI is |
| 224 // implemented on those platforms. | 307 // implemented on those platforms. |
| 225 #if defined(TOOLKIT_VIEWS) | 308 #if defined(TOOLKIT_VIEWS) |
| 226 // Submit the form data. | 309 // Submit the form data. |
| 227 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, Submit) { | 310 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, Submit) { |
| 228 InitializeControllerOfType(DIALOG_TYPE_REQUEST_AUTOCOMPLETE); | 311 InitializeControllerOfType(DIALOG_TYPE_REQUEST_AUTOCOMPLETE); |
| 229 controller()->view()->GetTestableView()->SubmitForTesting(); | 312 controller()->GetTestableView()->SubmitForTesting(); |
| 230 | 313 |
| 231 RunMessageLoop(); | 314 RunMessageLoop(); |
| 232 | 315 |
| 233 EXPECT_EQ(AutofillMetrics::DIALOG_ACCEPTED, | 316 EXPECT_EQ(AutofillMetrics::DIALOG_ACCEPTED, |
| 234 metric_logger().dialog_dismissal_action()); | 317 metric_logger().dialog_dismissal_action()); |
| 235 EXPECT_EQ(DIALOG_TYPE_REQUEST_AUTOCOMPLETE, metric_logger().dialog_type()); | 318 EXPECT_EQ(DIALOG_TYPE_REQUEST_AUTOCOMPLETE, metric_logger().dialog_type()); |
| 236 } | 319 } |
| 237 | 320 |
| 238 // Cancel out of the dialog. | 321 // Cancel out of the dialog. |
| 239 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, Cancel) { | 322 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, Cancel) { |
| 240 InitializeControllerOfType(DIALOG_TYPE_REQUEST_AUTOCOMPLETE); | 323 InitializeControllerOfType(DIALOG_TYPE_REQUEST_AUTOCOMPLETE); |
| 241 controller()->view()->GetTestableView()->CancelForTesting(); | 324 controller()->GetTestableView()->CancelForTesting(); |
| 242 | 325 |
| 243 RunMessageLoop(); | 326 RunMessageLoop(); |
| 244 | 327 |
| 245 EXPECT_EQ(AutofillMetrics::DIALOG_CANCELED, | 328 EXPECT_EQ(AutofillMetrics::DIALOG_CANCELED, |
| 246 metric_logger().dialog_dismissal_action()); | 329 metric_logger().dialog_dismissal_action()); |
| 247 EXPECT_EQ(DIALOG_TYPE_REQUEST_AUTOCOMPLETE, metric_logger().dialog_type()); | 330 EXPECT_EQ(DIALOG_TYPE_REQUEST_AUTOCOMPLETE, metric_logger().dialog_type()); |
| 248 } | 331 } |
| 249 | 332 |
| 250 // Take some other action that dismisses the dialog. | 333 // Take some other action that dismisses the dialog. |
| 251 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, Hide) { | 334 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, Hide) { |
| 252 InitializeControllerOfType(DIALOG_TYPE_REQUEST_AUTOCOMPLETE); | 335 InitializeControllerOfType(DIALOG_TYPE_REQUEST_AUTOCOMPLETE); |
| 253 controller()->Hide(); | 336 controller()->Hide(); |
| 254 | 337 |
| 255 RunMessageLoop(); | 338 RunMessageLoop(); |
| 256 | 339 |
| 257 EXPECT_EQ(AutofillMetrics::DIALOG_CANCELED, | 340 EXPECT_EQ(AutofillMetrics::DIALOG_CANCELED, |
| 258 metric_logger().dialog_dismissal_action()); | 341 metric_logger().dialog_dismissal_action()); |
| 259 EXPECT_EQ(DIALOG_TYPE_REQUEST_AUTOCOMPLETE, metric_logger().dialog_type()); | 342 EXPECT_EQ(DIALOG_TYPE_REQUEST_AUTOCOMPLETE, metric_logger().dialog_type()); |
| 260 } | 343 } |
| 261 | 344 |
| 262 // Test Autocheckout success metrics. | 345 // Test Autocheckout success metrics. |
| 263 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, AutocheckoutSuccess) { | 346 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, AutocheckoutSuccess) { |
| 264 InitializeControllerOfType(DIALOG_TYPE_AUTOCHECKOUT); | 347 InitializeControllerOfType(DIALOG_TYPE_AUTOCHECKOUT); |
| 265 controller()->view()->GetTestableView()->SubmitForTesting(); | 348 controller()->GetTestableView()->SubmitForTesting(); |
| 266 | 349 |
| 267 EXPECT_EQ(AutofillMetrics::DIALOG_ACCEPTED, | 350 EXPECT_EQ(AutofillMetrics::DIALOG_ACCEPTED, |
| 268 metric_logger().dialog_dismissal_action()); | 351 metric_logger().dialog_dismissal_action()); |
| 269 EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger().dialog_type()); | 352 EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger().dialog_type()); |
| 270 | 353 |
| 271 controller()->OnAutocheckoutSuccess(); | 354 controller()->OnAutocheckoutSuccess(); |
| 272 controller()->view()->GetTestableView()->CancelForTesting(); | 355 controller()->GetTestableView()->CancelForTesting(); |
| 273 RunMessageLoop(); | 356 RunMessageLoop(); |
| 274 | 357 |
| 275 EXPECT_EQ(AutofillMetrics::AUTOCHECKOUT_SUCCEEDED, | 358 EXPECT_EQ(AutofillMetrics::AUTOCHECKOUT_SUCCEEDED, |
| 276 metric_logger().autocheckout_status()); | 359 metric_logger().autocheckout_status()); |
| 277 | 360 |
| 278 // Ensure closing the dialog doesn't fire any new metrics. | 361 // Ensure closing the dialog doesn't fire any new metrics. |
| 279 EXPECT_EQ(AutofillMetrics::DIALOG_ACCEPTED, | 362 EXPECT_EQ(AutofillMetrics::DIALOG_ACCEPTED, |
| 280 metric_logger().dialog_dismissal_action()); | 363 metric_logger().dialog_dismissal_action()); |
| 281 EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger().dialog_type()); | 364 EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger().dialog_type()); |
| 282 } | 365 } |
| 283 | 366 |
| 284 // Test Autocheckout failure metric. | 367 // Test Autocheckout failure metric. |
| 285 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, AutocheckoutError) { | 368 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, AutocheckoutError) { |
| 286 InitializeControllerOfType(DIALOG_TYPE_AUTOCHECKOUT); | 369 InitializeControllerOfType(DIALOG_TYPE_AUTOCHECKOUT); |
| 287 controller()->view()->GetTestableView()->SubmitForTesting(); | 370 controller()->GetTestableView()->SubmitForTesting(); |
| 288 | 371 |
| 289 EXPECT_EQ(AutofillMetrics::DIALOG_ACCEPTED, | 372 EXPECT_EQ(AutofillMetrics::DIALOG_ACCEPTED, |
| 290 metric_logger().dialog_dismissal_action()); | 373 metric_logger().dialog_dismissal_action()); |
| 291 EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger().dialog_type()); | 374 EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger().dialog_type()); |
| 292 | 375 |
| 293 controller()->OnAutocheckoutError(); | 376 controller()->OnAutocheckoutError(); |
| 294 controller()->view()->GetTestableView()->CancelForTesting(); | 377 controller()->GetTestableView()->CancelForTesting(); |
| 295 RunMessageLoop(); | 378 RunMessageLoop(); |
| 296 | 379 |
| 297 EXPECT_EQ(AutofillMetrics::AUTOCHECKOUT_FAILED, | 380 EXPECT_EQ(AutofillMetrics::AUTOCHECKOUT_FAILED, |
| 298 metric_logger().autocheckout_status()); | 381 metric_logger().autocheckout_status()); |
| 299 | 382 |
| 300 // Ensure closing the dialog doesn't fire any new metrics. | 383 // Ensure closing the dialog doesn't fire any new metrics. |
| 301 EXPECT_EQ(AutofillMetrics::DIALOG_ACCEPTED, | 384 EXPECT_EQ(AutofillMetrics::DIALOG_ACCEPTED, |
| 302 metric_logger().dialog_dismissal_action()); | 385 metric_logger().dialog_dismissal_action()); |
| 303 EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger().dialog_type()); | 386 EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger().dialog_type()); |
| 304 } | 387 } |
| 305 | 388 |
| 306 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, AutocheckoutCancelled) { | 389 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, AutocheckoutCancelled) { |
| 307 InitializeControllerOfType(DIALOG_TYPE_AUTOCHECKOUT); | 390 InitializeControllerOfType(DIALOG_TYPE_AUTOCHECKOUT); |
| 308 controller()->view()->GetTestableView()->SubmitForTesting(); | 391 controller()->GetTestableView()->SubmitForTesting(); |
| 309 | 392 |
| 310 EXPECT_EQ(AutofillMetrics::DIALOG_ACCEPTED, | 393 EXPECT_EQ(AutofillMetrics::DIALOG_ACCEPTED, |
| 311 metric_logger().dialog_dismissal_action()); | 394 metric_logger().dialog_dismissal_action()); |
| 312 EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger().dialog_type()); | 395 EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger().dialog_type()); |
| 313 | 396 |
| 314 controller()->view()->GetTestableView()->CancelForTesting(); | 397 controller()->GetTestableView()->CancelForTesting(); |
| 315 RunMessageLoop(); | 398 RunMessageLoop(); |
| 316 | 399 |
| 317 EXPECT_EQ(AutofillMetrics::AUTOCHECKOUT_CANCELLED, | 400 EXPECT_EQ(AutofillMetrics::AUTOCHECKOUT_CANCELLED, |
| 318 metric_logger().autocheckout_status()); | 401 metric_logger().autocheckout_status()); |
| 319 | 402 |
| 320 // Ensure closing the dialog doesn't fire any new metrics. | 403 // Ensure closing the dialog doesn't fire any new metrics. |
| 321 EXPECT_EQ(AutofillMetrics::DIALOG_ACCEPTED, | 404 EXPECT_EQ(AutofillMetrics::DIALOG_ACCEPTED, |
| 322 metric_logger().dialog_dismissal_action()); | 405 metric_logger().dialog_dismissal_action()); |
| 323 EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger().dialog_type()); | 406 EXPECT_EQ(DIALOG_TYPE_AUTOCHECKOUT, metric_logger().dialog_type()); |
| 324 } | 407 } |
| 325 | 408 |
| 326 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, FillInputFromAutofill) { | 409 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, FillInputFromAutofill) { |
| 327 InitializeControllerOfType(DIALOG_TYPE_REQUEST_AUTOCOMPLETE); | 410 InitializeControllerOfType(DIALOG_TYPE_REQUEST_AUTOCOMPLETE); |
| 328 controller()->DisableWallet(wallet::WalletClient::UNKNOWN_ERROR); | 411 controller()->DisableWallet(wallet::WalletClient::UNKNOWN_ERROR); |
| 329 | 412 |
| 330 AutofillProfile full_profile(test::GetFullProfile()); | 413 AutofillProfile full_profile(test::GetFullProfile()); |
| 331 controller()->GetTestingManager()->AddTestingProfile(&full_profile); | 414 controller()->GetTestingManager()->AddTestingProfile(&full_profile); |
| 332 | 415 |
| 333 const DetailInputs& inputs = | 416 const DetailInputs& inputs = |
| 334 controller()->RequestedFieldsForSection(SECTION_SHIPPING); | 417 controller()->RequestedFieldsForSection(SECTION_SHIPPING); |
| 335 const DetailInput& triggering_input = inputs[0]; | 418 const DetailInput& triggering_input = inputs[0]; |
| 336 string16 value = full_profile.GetRawInfo(triggering_input.type); | 419 string16 value = full_profile.GetRawInfo(triggering_input.type); |
| 337 TestableAutofillDialogView* view = controller()->view()->GetTestableView(); | 420 TestableAutofillDialogView* view = controller()->GetTestableView(); |
| 338 view->SetTextContentsOfInput(triggering_input, | 421 view->SetTextContentsOfInput(triggering_input, |
| 339 value.substr(0, value.size() / 2)); | 422 value.substr(0, value.size() / 2)); |
| 340 view->ActivateInput(triggering_input); | 423 view->ActivateInput(triggering_input); |
| 341 | 424 |
| 342 ASSERT_EQ(&triggering_input, controller()->input_showing_popup()); | 425 ASSERT_EQ(&triggering_input, controller()->input_showing_popup()); |
| 343 controller()->DidAcceptSuggestion(string16(), 0); | 426 controller()->DidAcceptSuggestion(string16(), 0); |
| 344 | 427 |
| 345 // All inputs should be filled. | 428 // All inputs should be filled. |
| 346 AutofillProfileWrapper wrapper(&full_profile, 0); | 429 AutofillProfileWrapper wrapper(&full_profile, 0); |
| 347 for (size_t i = 0; i < inputs.size(); ++i) { | 430 for (size_t i = 0; i < inputs.size(); ++i) { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 374 } | 457 } |
| 375 | 458 |
| 376 // Test that the Autocheckout progress bar is showing after submitting the | 459 // Test that the Autocheckout progress bar is showing after submitting the |
| 377 // dialog for controller with type DIALOG_TYPE_AUTOCHECKOUT. | 460 // dialog for controller with type DIALOG_TYPE_AUTOCHECKOUT. |
| 378 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, | 461 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, |
| 379 AutocheckoutShowsProgressBar) { | 462 AutocheckoutShowsProgressBar) { |
| 380 InitializeControllerOfType(DIALOG_TYPE_AUTOCHECKOUT); | 463 InitializeControllerOfType(DIALOG_TYPE_AUTOCHECKOUT); |
| 381 EXPECT_TRUE(controller()->ShouldShowDetailArea()); | 464 EXPECT_TRUE(controller()->ShouldShowDetailArea()); |
| 382 EXPECT_FALSE(controller()->ShouldShowProgressBar()); | 465 EXPECT_FALSE(controller()->ShouldShowProgressBar()); |
| 383 | 466 |
| 384 controller()->view()->GetTestableView()->SubmitForTesting(); | 467 controller()->GetTestableView()->SubmitForTesting(); |
| 385 EXPECT_FALSE(controller()->ShouldShowDetailArea()); | 468 EXPECT_FALSE(controller()->ShouldShowDetailArea()); |
| 386 EXPECT_TRUE(controller()->ShouldShowProgressBar()); | 469 EXPECT_TRUE(controller()->ShouldShowProgressBar()); |
| 387 } | 470 } |
| 388 | 471 |
| 389 // Test that the Autocheckout progress bar is not showing after submitting the | 472 // Test that the Autocheckout progress bar is not showing after submitting the |
| 390 // dialog for controller with type DIALOG_TYPE_REQUEST_AUTOCOMPLETE. | 473 // dialog for controller with type DIALOG_TYPE_REQUEST_AUTOCOMPLETE. |
| 391 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, | 474 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, |
| 392 RequestAutocompleteDoesntShowProgressBar) { | 475 RequestAutocompleteDoesntShowProgressBar) { |
| 393 InitializeControllerOfType(DIALOG_TYPE_REQUEST_AUTOCOMPLETE); | 476 InitializeControllerOfType(DIALOG_TYPE_REQUEST_AUTOCOMPLETE); |
| 394 EXPECT_TRUE(controller()->ShouldShowDetailArea()); | 477 EXPECT_TRUE(controller()->ShouldShowDetailArea()); |
| 395 EXPECT_FALSE(controller()->ShouldShowProgressBar()); | 478 EXPECT_FALSE(controller()->ShouldShowProgressBar()); |
| 396 | 479 |
| 397 controller()->view()->GetTestableView()->SubmitForTesting(); | 480 controller()->GetTestableView()->SubmitForTesting(); |
| 398 EXPECT_TRUE(controller()->ShouldShowDetailArea()); | 481 EXPECT_TRUE(controller()->ShouldShowDetailArea()); |
| 399 EXPECT_FALSE(controller()->ShouldShowProgressBar()); | 482 EXPECT_FALSE(controller()->ShouldShowProgressBar()); |
| 400 } | 483 } |
| 401 | 484 |
| 402 // Tests that changing the value of a CC expiration date combobox works as | 485 // Tests that changing the value of a CC expiration date combobox works as |
| 403 // expected when Autofill is used to fill text inputs. | 486 // expected when Autofill is used to fill text inputs. |
| 404 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, FillComboboxFromAutofill) { | 487 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, FillComboboxFromAutofill) { |
| 405 InitializeControllerOfType(DIALOG_TYPE_REQUEST_AUTOCOMPLETE); | 488 InitializeControllerOfType(DIALOG_TYPE_REQUEST_AUTOCOMPLETE); |
| 406 controller()->DisableWallet(wallet::WalletClient::UNKNOWN_ERROR); | 489 controller()->DisableWallet(wallet::WalletClient::UNKNOWN_ERROR); |
| 407 | 490 |
| 408 CreditCard card1; | 491 CreditCard card1; |
| 409 test::SetCreditCardInfo(&card1, "JJ Smith", "4111111111111111", "12", "2018"); | 492 test::SetCreditCardInfo(&card1, "JJ Smith", "4111111111111111", "12", "2018"); |
| 410 controller()->GetTestingManager()->AddTestingCreditCard(&card1); | 493 controller()->GetTestingManager()->AddTestingCreditCard(&card1); |
| 411 CreditCard card2; | 494 CreditCard card2; |
| 412 test::SetCreditCardInfo(&card2, "B Bird", "3111111111111111", "11", "2017"); | 495 test::SetCreditCardInfo(&card2, "B Bird", "3111111111111111", "11", "2017"); |
| 413 controller()->GetTestingManager()->AddTestingCreditCard(&card2); | 496 controller()->GetTestingManager()->AddTestingCreditCard(&card2); |
| 414 AutofillProfile full_profile(test::GetFullProfile()); | 497 AutofillProfile full_profile(test::GetFullProfile()); |
| 415 controller()->GetTestingManager()->AddTestingProfile(&full_profile); | 498 controller()->GetTestingManager()->AddTestingProfile(&full_profile); |
| 416 | 499 |
| 417 const DetailInputs& inputs = | 500 const DetailInputs& inputs = |
| 418 controller()->RequestedFieldsForSection(SECTION_CC); | 501 controller()->RequestedFieldsForSection(SECTION_CC); |
| 419 const DetailInput& triggering_input = inputs[0]; | 502 const DetailInput& triggering_input = inputs[0]; |
| 420 string16 value = card1.GetRawInfo(triggering_input.type); | 503 string16 value = card1.GetRawInfo(triggering_input.type); |
| 421 TestableAutofillDialogView* view = controller()->view()->GetTestableView(); | 504 TestableAutofillDialogView* view = controller()->GetTestableView(); |
| 422 view->SetTextContentsOfInput(triggering_input, | 505 view->SetTextContentsOfInput(triggering_input, |
| 423 value.substr(0, value.size() / 2)); | 506 value.substr(0, value.size() / 2)); |
| 424 view->ActivateInput(triggering_input); | 507 view->ActivateInput(triggering_input); |
| 425 | 508 |
| 426 ASSERT_EQ(&triggering_input, controller()->input_showing_popup()); | 509 ASSERT_EQ(&triggering_input, controller()->input_showing_popup()); |
| 427 controller()->DidAcceptSuggestion(string16(), 0); | 510 controller()->DidAcceptSuggestion(string16(), 0); |
| 428 | 511 |
| 429 // All inputs should be filled. | 512 // All inputs should be filled. |
| 430 AutofillCreditCardWrapper wrapper1(&card1); | 513 AutofillCreditCardWrapper wrapper1(&card1); |
| 431 for (size_t i = 0; i < inputs.size(); ++i) { | 514 for (size_t i = 0; i < inputs.size(); ++i) { |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 554 model->ActivatedAt(1); | 637 model->ActivatedAt(1); |
| 555 ASSERT_TRUE(model->IsItemCheckedAt(1)); | 638 ASSERT_TRUE(model->IsItemCheckedAt(1)); |
| 556 EXPECT_TRUE(controller()->IsEditingExistingData(SECTION_CC)); | 639 EXPECT_TRUE(controller()->IsEditingExistingData(SECTION_CC)); |
| 557 } | 640 } |
| 558 | 641 |
| 559 // Notifications with long message text should not make the dialog bigger. | 642 // Notifications with long message text should not make the dialog bigger. |
| 560 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, LongNotifications) { | 643 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, LongNotifications) { |
| 561 InitializeControllerOfType(DIALOG_TYPE_REQUEST_AUTOCOMPLETE); | 644 InitializeControllerOfType(DIALOG_TYPE_REQUEST_AUTOCOMPLETE); |
| 562 | 645 |
| 563 const gfx::Size no_notification_size = | 646 const gfx::Size no_notification_size = |
| 564 controller()->view()->GetTestableView()->GetSize(); | 647 controller()->GetTestableView()->GetSize(); |
| 565 ASSERT_GT(no_notification_size.width(), 0); | 648 ASSERT_GT(no_notification_size.width(), 0); |
| 566 | 649 |
| 567 std::vector<DialogNotification> notifications; | 650 std::vector<DialogNotification> notifications; |
| 568 notifications.push_back( | 651 notifications.push_back( |
| 569 DialogNotification(DialogNotification::DEVELOPER_WARNING, ASCIIToUTF16( | 652 DialogNotification(DialogNotification::DEVELOPER_WARNING, ASCIIToUTF16( |
| 570 "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do " | 653 "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do " |
| 571 "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim " | 654 "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim " |
| 572 "ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut " | 655 "ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut " |
| 573 "aliquip ex ea commodo consequat. Duis aute irure dolor in " | 656 "aliquip ex ea commodo consequat. Duis aute irure dolor in " |
| 574 "reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla " | 657 "reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla " |
| 575 "pariatur. Excepteur sint occaecat cupidatat non proident, sunt in " | 658 "pariatur. Excepteur sint occaecat cupidatat non proident, sunt in " |
| 576 "culpa qui officia deserunt mollit anim id est laborum."))); | 659 "culpa qui officia deserunt mollit anim id est laborum."))); |
| 577 controller()->set_notifications(notifications); | 660 controller()->set_notifications(notifications); |
| 578 controller()->view()->UpdateNotificationArea(); | 661 controller()->view()->UpdateNotificationArea(); |
| 579 | 662 |
| 580 EXPECT_EQ(no_notification_size.width(), | 663 EXPECT_EQ(no_notification_size.width(), |
| 581 controller()->view()->GetTestableView()->GetSize().width()); | 664 controller()->GetTestableView()->GetSize().width()); |
| 665 } |
| 666 |
| 667 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, AutocompleteEvent) { |
| 668 AutofillDialogControllerImpl* controller = |
| 669 SetUpHtmlAndInvoke("<input autocomplete='cc-name'>"); |
| 670 |
| 671 AddCreditcardToProfile(controller->profile(), test::GetVerifiedCreditCard()); |
| 672 AddAutofillProfileToProfile(controller->profile(), |
| 673 test::GetVerifiedProfile()); |
| 674 |
| 675 TestableAutofillDialogView* view = controller->GetTestableView(); |
| 676 view->SetTextContentsOfSuggestionInput(SECTION_CC, ASCIIToUTF16("123")); |
| 677 view->SubmitForTesting(); |
| 678 ExpectDomMessage("success"); |
| 679 } |
| 680 |
| 681 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, |
| 682 AutocompleteErrorEventReasonInvalid) { |
| 683 AutofillDialogControllerImpl* controller = |
| 684 SetUpHtmlAndInvoke("<input autocomplete='cc-name' pattern='.*zebra.*'>"); |
| 685 |
| 686 const CreditCard& credit_card = test::GetVerifiedCreditCard(); |
| 687 ASSERT_TRUE( |
| 688 credit_card.GetRawInfo(CREDIT_CARD_NAME).find(ASCIIToUTF16("zebra")) == |
| 689 base::string16::npos); |
| 690 AddCreditcardToProfile(controller->profile(), credit_card); |
| 691 AddAutofillProfileToProfile(controller->profile(), |
| 692 test::GetVerifiedProfile()); |
| 693 |
| 694 TestableAutofillDialogView* view = controller->GetTestableView(); |
| 695 view->SetTextContentsOfSuggestionInput(SECTION_CC, ASCIIToUTF16("123")); |
| 696 view->SubmitForTesting(); |
| 697 ExpectDomMessage("error: invalid"); |
| 698 } |
| 699 |
| 700 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, |
| 701 AutocompleteErrorEventReasonCancel) { |
| 702 SetUpHtmlAndInvoke("<input autocomplete='cc-name'>")->GetTestableView()-> |
| 703 CancelForTesting(); |
| 704 ExpectDomMessage("error: cancel"); |
| 582 } | 705 } |
| 583 | 706 |
| 584 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, NoCvcSegfault) { | 707 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, NoCvcSegfault) { |
| 585 InitializeControllerOfType(DIALOG_TYPE_REQUEST_AUTOCOMPLETE); | 708 InitializeControllerOfType(DIALOG_TYPE_REQUEST_AUTOCOMPLETE); |
| 586 controller()->DisableWallet(wallet::WalletClient::UNKNOWN_ERROR); | 709 controller()->DisableWallet(wallet::WalletClient::UNKNOWN_ERROR); |
| 587 controller()->set_use_validation(true); | 710 controller()->set_use_validation(true); |
| 588 | 711 |
| 589 CreditCard credit_card(test::GetVerifiedCreditCard()); | 712 CreditCard credit_card(test::GetVerifiedCreditCard()); |
| 590 controller()->GetTestingManager()->AddTestingCreditCard(&credit_card); | 713 controller()->GetTestingManager()->AddTestingCreditCard(&credit_card); |
| 591 EXPECT_FALSE(controller()->IsEditingExistingData(SECTION_CC)); | 714 EXPECT_FALSE(controller()->IsEditingExistingData(SECTION_CC)); |
| 592 | 715 |
| 593 ASSERT_NO_FATAL_FAILURE( | 716 ASSERT_NO_FATAL_FAILURE( |
| 594 controller()->view()->GetTestableView()->SubmitForTesting()); | 717 controller()->GetTestableView()->SubmitForTesting()); |
| 595 } | 718 } |
| 596 #endif // defined(TOOLKIT_VIEWS) | 719 #endif // defined(TOOLKIT_VIEWS) |
| 597 | 720 |
| 598 } // namespace autofill | 721 } // namespace autofill |
| OLD | NEW |