15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 8a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/command_line.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/rand_util.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_split.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autofill/personal_data_manager_factory.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/render_messages.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 26a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/test/base/test_switches.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/autofill/content/browser/content_autofill_driver.h" 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_profile.h" 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/autofill/core/browser/autofill_test_utils.h" 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/credit_card.h" 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/personal_data_manager.h" 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/personal_data_manager_observer.h" 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/validation.h" 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/infobars/core/confirm_infobar_delegate.h" 360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/infobars/core/infobar.h" 370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/infobars/core/infobar_manager.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_controller.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/browser_test_utils.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_renderer_host.h" 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/test/test_utils.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/test_url_fetcher_factory.h" 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 47d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/keycodes/keyboard_codes.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing base::UTF16ToASCII; 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::WideToUTF16; 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill { 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WindowedPersonalDataManagerObserver 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public PersonalDataManagerObserver, 570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch public infobars::InfoBarManager::Observer { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit WindowedPersonalDataManagerObserver(Browser* browser) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : alerted_(false), 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) has_run_message_loop_(false), 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_(browser), 630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch infobar_service_(InfoBarService::FromWebContents( 640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch browser_->tab_strip_model()->GetActiveWebContents())) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PersonalDataManagerFactory::GetForProfile(browser_->profile())-> 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddObserver(this); 670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch infobar_service_->AddObserver(this); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~WindowedPersonalDataManagerObserver() { 710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch infobar_service_->RemoveObserver(this); 720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (infobar_service_->infobar_count() > 0) { 74a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch infobar_service_->RemoveInfoBar(infobar_service_->infobar_at(0)); 75e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Wait() { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!alerted_) { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) has_run_message_loop_ = true; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RunMessageLoop(); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PersonalDataManagerFactory::GetForProfile(browser_->profile())-> 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RemoveObserver(this); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PersonalDataManagerObserver: 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnPersonalDataChanged() OVERRIDE { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_run_message_loop_) { 9090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoopForUI::current()->Quit(); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) has_run_message_loop_ = false; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alerted_ = true; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnInsufficientFormData() OVERRIDE { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnPersonalDataChanged(); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // infobars::InfoBarManager::Observer: 1010529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void OnInfoBarAdded(infobars::InfoBar* infobar) OVERRIDE { 1027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ConfirmInfoBarDelegate* infobar_delegate = 103a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch infobar_service_->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate(); 1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(infobar_delegate); 1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch infobar_delegate->Accept(); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool alerted_; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_run_message_loop_; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser_; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InfoBarService* infobar_service_; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutofillTest : public InProcessBrowserTest { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillTest() {} 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't want Keychain coming up on Mac. 121a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) test::DisableSystemServices(browser()->profile()->GetPrefs()); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void TearDownOnMainThread() OVERRIDE { 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure to close any showing popups prior to tearing down the UI. 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* web_contents = 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 128a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AutofillManager* autofill_manager = ContentAutofillDriver::FromWebContents( 129a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) web_contents)->autofill_manager(); 130f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) autofill_manager->client()->HideAutofillPopup(); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PersonalDataManager* personal_data_manager() { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PersonalDataManagerFactory::GetForProfile(browser()->profile()); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetProfiles(std::vector<AutofillProfile>* profiles) { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowedPersonalDataManagerObserver observer(browser()); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) personal_data_manager()->SetProfiles(profiles); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetProfile(const AutofillProfile& profile) { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<AutofillProfile> profiles; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profiles.push_back(profile); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetProfiles(&profiles); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetCards(std::vector<CreditCard>* cards) { 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowedPersonalDataManagerObserver observer(browser()); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) personal_data_manager()->SetCreditCards(cards); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetCard(const CreditCard& card) { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<CreditCard> cards; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cards.push_back(card); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCards(&cards); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::map<std::string, std::string> FormMap; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to the form, input values into the fields, and submit the form. 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The function returns after the PersonalDataManager is updated. 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void FillFormAndSubmit(const std::string& filename, const FormMap& data) { 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = test_server()->GetURL("files/autofill/" + filename); 166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) chrome::NavigateParams params(browser(), url, 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK); 168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) params.disposition = NEW_FOREGROUND_TAB; 169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui_test_utils::NavigateToURL(¶ms); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string js; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (FormMap::const_iterator i = data.begin(); i != data.end(); ++i) { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) js += "document.getElementById('" + i->first + "').value = '" + 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i->second + "';"; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) js += "document.onclick = function() {" 1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " document.getElementById('testform').submit();" 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "};"; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowedPersonalDataManagerObserver observer(browser()); 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScript(render_view_host(), js)); 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Simulate a mouse click to submit the form because form submissions not 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // triggered by user gestures are ignored. 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::SimulateMouseClick( 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(), 0, 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) blink::WebMouseEvent::ButtonLeft); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SubmitCreditCard(const char* name, 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* number, 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* exp_month, 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* exp_year) { 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormMap data; 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["CREDIT_CARD_NAME"] = name; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["CREDIT_CARD_NUMBER"] = number; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["CREDIT_CARD_EXP_MONTH"] = exp_month; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["CREDIT_CARD_EXP_4_DIGIT_YEAR"] = exp_year; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFormAndSubmit("autofill_creditcard_form.html", data); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Aggregate profiles from forms into Autofill preferences. Returns the number 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // of parsed profiles. 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int AggregateProfilesIntoAutofillPrefs(const std::string& filename) { 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(test_server()->Start()); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string data; 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath data_file = 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::GetTestFilePath(base::FilePath().AppendASCII("autofill"), 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath().AppendASCII(filename)); 21158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CHECK(base::ReadFileToString(data_file, &data)); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> lines; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::SplitString(data, '\n', &lines); 214424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) int parsed_profiles = 0; 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < lines.size(); ++i) { 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (StartsWithASCII(lines[i], "#", false)) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 218424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> fields; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::SplitString(lines[i], '|', &fields); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (fields.empty()) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; // Blank line. 223424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 224424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ++parsed_profiles; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK_EQ(12u, fields.size()); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormMap data; 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["NAME_FIRST"] = fields[0]; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["NAME_MIDDLE"] = fields[1]; 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["NAME_LAST"] = fields[2]; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["EMAIL_ADDRESS"] = fields[3]; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["COMPANY_NAME"] = fields[4]; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_LINE1"] = fields[5]; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_LINE2"] = fields[6]; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_CITY"] = fields[7]; 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_STATE"] = fields[8]; 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_ZIP"] = fields[9]; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_COUNTRY"] = fields[10]; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["PHONE_HOME_WHOLE_NUMBER"] = fields[11]; 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFormAndSubmit("duplicate_profiles_test.html", data); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 243424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return parsed_profiles; 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ExpectFieldValue(const std::string& field_name, 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& expected_value) { 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string value; 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractString( 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(), 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "window.domAutomationController.send(" 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " document.getElementById('" + field_name + "').value);", 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &value)); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_value, value); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::RenderViewHost* render_view_host() { 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return browser()->tab_strip_model()->GetActiveWebContents()-> 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRenderViewHost(); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ExpectFilledTestForm() { 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectFieldValue("firstname", "Milton"); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectFieldValue("lastname", "Waddams"); 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectFieldValue("address1", "4120 Freidrich Lane"); 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectFieldValue("address2", "Basement"); 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectFieldValue("city", "Austin"); 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectFieldValue("state", "TX"); 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectFieldValue("zip", "78744"); 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectFieldValue("country", "US"); 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectFieldValue("phone", "5125551234"); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::TestURLFetcherFactory url_fetcher_factory_; 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test filling profiles with unicode strings and crazy characters. 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(isherman): rewrite as unit test under PersonalDataManagerTest. 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(AutofillTest, FillProfileCrazyCharacters) { 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<AutofillProfile> profiles; 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile profile1; 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile1.SetRawInfo(NAME_FIRST, 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WideToUTF16(L"\u0623\u0648\u0628\u0627\u0645\u0627 " 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u064a\u0639\u062a\u0630\u0631 " 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u0647\u0627\u062a\u0641\u064a\u0627 " 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u0644\u0645\u0648\u0638\u0641\u0629 " 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u0633\u0648\u062f\u0627\u0621 " 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u0627\u0633\u062a\u0642\u0627\u0644\u062a " 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u0628\u0633\u0628\u0628 " 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u062a\u0635\u0631\u064a\u062d\u0627\u062a " 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u0645\u062c\u062a\u0632\u0623\u0629")); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile1.SetRawInfo(NAME_MIDDLE, WideToUTF16(L"BANK\xcBERF\xc4LLE")); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile1.SetRawInfo(EMAIL_ADDRESS, 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WideToUTF16(L"\uacbd\uc81c \ub274\uc2a4 " 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\ub354\ubcf4\uae30@google.com")); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile1.SetRawInfo(ADDRESS_HOME_LINE1, 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WideToUTF16(L"\uad6d\uc815\uc6d0\xb7\uac80\ucc30, " 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\ub178\ubb34\ud604\uc815\ubd80 " 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\ub300\ubd81\uc811\ucd09 \ub2f4\ub2f9 " 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\uc778\uc0ac\ub4e4 \uc870\uc0ac")); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile1.SetRawInfo(ADDRESS_HOME_CITY, 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WideToUTF16(L"\u653f\u5e9c\u4e0d\u6392\u9664\u7acb\u6cd5" 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u898f\u7ba1\u5c0e\u904a")); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile1.SetRawInfo(ADDRESS_HOME_ZIP, WideToUTF16(L"YOHO_54676")); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile1.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, WideToUTF16(L"861088828000")); 3073240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch profile1.SetInfo( 3083240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch AutofillType(ADDRESS_HOME_COUNTRY), WideToUTF16(L"India"), "en-US"); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profiles.push_back(profile1); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile profile2; 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile2.SetRawInfo(NAME_FIRST, 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WideToUTF16(L"\u4e0a\u6d77\u5e02\u91d1\u5c71\u533a " 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u677e\u9690\u9547\u4ead\u67ab\u516c" 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u8def1915\u53f7")); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile2.SetRawInfo(NAME_LAST, WideToUTF16(L"aguantó")); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile2.SetRawInfo(ADDRESS_HOME_ZIP, WideToUTF16(L"HOME 94043")); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profiles.push_back(profile2); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile profile3; 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile3.SetRawInfo(EMAIL_ADDRESS, WideToUTF16(L"sue@example.com")); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile3.SetRawInfo(COMPANY_NAME, WideToUTF16(L"Company X")); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profiles.push_back(profile3); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile profile4; 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile4.SetRawInfo(NAME_FIRST, WideToUTF16(L"Joe 3254")); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile4.SetRawInfo(NAME_LAST, WideToUTF16(L"\u8bb0\u8d262\u5e74\u591a")); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile4.SetRawInfo(ADDRESS_HOME_ZIP, 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WideToUTF16(L"\uff08\u90ae\u7f16\uff1a201504\uff09")); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile4.SetRawInfo(EMAIL_ADDRESS, WideToUTF16(L"télévision@example.com")); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile4.SetRawInfo(COMPANY_NAME, 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WideToUTF16(L"\u0907\u0932\u0947\u0915\u093f\u091f\u094d" 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u0930\u0928\u093f\u0915\u094d\u0938, " 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u0905\u092a\u094b\u0932\u094b " 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u091f\u093e\u092f\u0930\u094d\u0938 " 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u0906\u0926\u093f")); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profiles.push_back(profile4); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile profile5; 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile5.SetRawInfo(NAME_FIRST, WideToUTF16(L"Larry")); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile5.SetRawInfo(NAME_LAST, 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WideToUTF16(L"\u0938\u094d\u091f\u093e\u0902\u092a " 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u0921\u094d\u092f\u0942\u091f\u0940")); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile5.SetRawInfo(ADDRESS_HOME_ZIP, 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WideToUTF16(L"111111111111110000GOOGLE")); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile5.SetRawInfo(EMAIL_ADDRESS, WideToUTF16(L"page@000000.com")); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile5.SetRawInfo(COMPANY_NAME, WideToUTF16(L"Google")); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profiles.push_back(profile5); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile profile6; 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile6.SetRawInfo(NAME_FIRST, 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WideToUTF16(L"\u4e0a\u6d77\u5e02\u91d1\u5c71\u533a " 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u677e\u9690\u9547\u4ead\u67ab\u516c" 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u8def1915\u53f7")); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile6.SetRawInfo(NAME_LAST, 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WideToUTF16(L"\u0646\u062c\u0627\u0645\u064a\u0646\u0627 " 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u062f\u0639\u0645\u0647\u0627 " 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u0644\u0644\u0631\u0626\u064a\u0633 " 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u0627\u0644\u0633\u0648\u062f\u0627\u0646" 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u064a \u0639\u0645\u0631 " 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u0627\u0644\u0628\u0634\u064a\u0631")); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile6.SetRawInfo(ADDRESS_HOME_ZIP, WideToUTF16(L"HOME 94043")); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profiles.push_back(profile6); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile profile7; 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile7.SetRawInfo(NAME_FIRST, WideToUTF16(L"&$%$$$ TESTO *&*&^&^& MOKO")); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile7.SetRawInfo(NAME_MIDDLE, WideToUTF16(L"WOHOOOO$$$$$$$$****")); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile7.SetRawInfo(EMAIL_ADDRESS, WideToUTF16(L"yuvu@example.com")); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile7.SetRawInfo(ADDRESS_HOME_LINE1, 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WideToUTF16(L"34544, anderson ST.(120230)")); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile7.SetRawInfo(ADDRESS_HOME_CITY, WideToUTF16(L"Sunnyvale")); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile7.SetRawInfo(ADDRESS_HOME_STATE, WideToUTF16(L"CA")); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile7.SetRawInfo(ADDRESS_HOME_ZIP, WideToUTF16(L"94086")); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile7.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, WideToUTF16(L"15466784565")); 3753240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch profile7.SetInfo( 3763240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch AutofillType(ADDRESS_HOME_COUNTRY), WideToUTF16(L"United States"), 3773240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch "en-US"); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profiles.push_back(profile7); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetProfiles(&profiles); 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(profiles.size(), personal_data_manager()->GetProfiles().size()); 3821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t i = 0; i < profiles.size(); ++i) { 3831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(std::find(profiles.begin(), 3841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profiles.end(), 3851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *personal_data_manager()->GetProfiles()[i]) != 3861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profiles.end()); 3871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<CreditCard> cards; 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard card1; 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) card1.SetRawInfo(CREDIT_CARD_NAME, 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WideToUTF16(L"\u751f\u6d3b\u5f88\u6709\u89c4\u5f8b " 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u4ee5\u73a9\u4e3a\u4e3b")); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) card1.SetRawInfo(CREDIT_CARD_NUMBER, WideToUTF16(L"6011111111111117")); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) card1.SetRawInfo(CREDIT_CARD_EXP_MONTH, WideToUTF16(L"12")); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) card1.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, WideToUTF16(L"2011")); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cards.push_back(card1); 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard card2; 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) card2.SetRawInfo(CREDIT_CARD_NAME, WideToUTF16(L"John Williams")); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) card2.SetRawInfo(CREDIT_CARD_NUMBER, WideToUTF16(L"WokoAwesome12345")); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) card2.SetRawInfo(CREDIT_CARD_EXP_MONTH, WideToUTF16(L"10")); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) card2.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, WideToUTF16(L"2015")); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cards.push_back(card2); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard card3; 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) card3.SetRawInfo(CREDIT_CARD_NAME, 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WideToUTF16(L"\u0623\u062d\u0645\u062f\u064a " 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u0646\u062c\u0627\u062f " 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u0644\u0645\u062d\u0627\u0648\u0644\u0647 " 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u0627\u063a\u062a\u064a\u0627\u0644 " 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u0641\u064a \u0645\u062f\u064a\u0646\u0629 " 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u0647\u0645\u062f\u0627\u0646 ")); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) card3.SetRawInfo(CREDIT_CARD_NUMBER, 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WideToUTF16(L"\u092a\u0941\u0928\u0930\u094d\u091c\u0940" 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u0935\u093f\u0924 \u0939\u094b\u0917\u093e " 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u0928\u093e\u0932\u0902\u0926\u093e")); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) card3.SetRawInfo(CREDIT_CARD_EXP_MONTH, WideToUTF16(L"10")); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) card3.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, WideToUTF16(L"2015")); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cards.push_back(card3); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard card4; 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) card4.SetRawInfo(CREDIT_CARD_NAME, 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WideToUTF16(L"\u039d\u03ad\u03b5\u03c2 " 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u03c3\u03c5\u03b3\u03c7\u03c9\u03bd\u03b5" 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u03cd\u03c3\u03b5\u03b9\u03c2 " 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u03ba\u03b1\u03b9 " 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u03ba\u03b1\u03c4\u03b1\u03c1\u03b3\u03ae" 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"\u03c3\u03b5\u03b9\u03c2")); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) card4.SetRawInfo(CREDIT_CARD_NUMBER, WideToUTF16(L"00000000000000000000000")); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) card4.SetRawInfo(CREDIT_CARD_EXP_MONTH, WideToUTF16(L"01")); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) card4.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, WideToUTF16(L"2016")); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cards.push_back(card4); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCards(&cards); 436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(cards.size(), personal_data_manager()->GetCreditCards().size()); 4371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t i = 0; i < cards.size(); ++i) { 4381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(std::find(cards.begin(), 4391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cards.end(), 4401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *personal_data_manager()->GetCreditCards()[i]) != 4411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cards.end()); 4421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test filling in invalid values for profiles are saved as-is. Phone 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// information entered into the prefs UI is not validated or rejected except for 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// duplicates. 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(isherman): rewrite as WebUI test? 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(AutofillTest, Invalid) { 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // First try profiles with invalid ZIP input. 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile without_invalid; 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) without_invalid.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Will")); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) without_invalid.SetRawInfo(ADDRESS_HOME_CITY, ASCIIToUTF16("Sunnyvale")); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) without_invalid.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("CA")); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) without_invalid.SetRawInfo(ADDRESS_HOME_ZIP, ASCIIToUTF16("my_zip")); 4563240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch without_invalid.SetInfo( 4573240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch AutofillType(ADDRESS_HOME_COUNTRY), ASCIIToUTF16("United States"), 4583240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch "en-US"); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile with_invalid = without_invalid; 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) with_invalid.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Invalid_Phone_Number")); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetProfile(with_invalid); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1u, personal_data_manager()->GetProfiles().size()); 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutofillProfile profile = *personal_data_manager()->GetProfiles()[0]; 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(without_invalid.GetRawInfo(PHONE_HOME_WHOLE_NUMBER), 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile.GetRawInfo(PHONE_HOME_WHOLE_NUMBER)); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test invalid credit card numbers typed in prefs should be saved as-is. 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(isherman): rewrite as WebUI test? 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(AutofillTest, PrefsStringSavedAsIs) { 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard card; 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16("Not_0123-5Checked")); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCard(card); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 478c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(1u, personal_data_manager()->GetCreditCards().size()); 479c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(card, *personal_data_manager()->GetCreditCards()[0]); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test credit card info with an invalid number is not aggregated. 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// When filling out a form with an invalid credit card number (one that does not 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// pass the Luhn test) the credit card info should not be saved into Autofill 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// preferences. 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(AutofillTest, InvalidCreditCardNumberIsNotAggregated) { 487ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#if defined(OS_WIN) && defined(USE_ASH) 488ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Disable this test in Metro+Ash for now (http://crbug.com/262796). 489a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) 490ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return; 491ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif 492ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string card("4408 0412 3456 7890"); 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(autofill::IsValidCreditCardNumber(ASCIIToUTF16(card))); 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SubmitCreditCard("Bob Smith", card.c_str(), "12", "2014"); 497e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch InfoBarService* infobar_service = InfoBarService::FromWebContents( 498e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch browser()->tab_strip_model()->GetActiveWebContents()); 499a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_EQ(0u, infobar_service->infobar_count()); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test whitespaces and separator chars are stripped for valid CC numbers. 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The credit card numbers used in this test pass the Luhn test. For reference: 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://www.merriampark.com/anatomycc.htm 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(AutofillTest, 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WhitespacesAndSeparatorCharsStrippedForValidCCNums) { 507ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#if defined(OS_WIN) && defined(USE_ASH) 508a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Disable this test in Metro+Ash for now (http://crbug.com/262796). 509a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) 510ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return; 511ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif 512ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SubmitCreditCard("Bob Smith", "4408 0412 3456 7893", "12", "2014"); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SubmitCreditCard("Jane Doe", "4417-1234-5678-9113", "10", "2013"); 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 517c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(2u, personal_data_manager()->GetCreditCards().size()); 518a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 cc1 = personal_data_manager()->GetCreditCards()[0]->GetRawInfo( 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CREDIT_CARD_NUMBER); 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(autofill::IsValidCreditCardNumber(cc1)); 521a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 cc2 = personal_data_manager()->GetCreditCards()[1]->GetRawInfo( 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CREDIT_CARD_NUMBER); 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(autofill::IsValidCreditCardNumber(cc2)); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that Autofill aggregates a minimum valid profile. 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The minimum required address fields must be specified: First Name, Last Name, 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Address Line 1, City, Zip Code, and State. 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(AutofillTest, AggregatesMinValidProfile) { 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormMap data; 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["NAME_FIRST"] = "Bob"; 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["NAME_LAST"] = "Smith"; 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_LINE1"] = "1234 H St."; 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_CITY"] = "Mountain View"; 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_STATE"] = "CA"; 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_ZIP"] = "94043"; 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFormAndSubmit("duplicate_profiles_test.html", data); 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1u, personal_data_manager()->GetProfiles().size()); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Autofill does not aggregate profiles with no address info. 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The minimum required address fields must be specified: First Name, Last Name, 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Address Line 1, City, Zip Code, and State. 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(AutofillTest, ProfilesNotAggregatedWithNoAddress) { 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormMap data; 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["NAME_FIRST"] = "Bob"; 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["NAME_LAST"] = "Smith"; 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["EMAIL_ADDRESS"] = "bsmith@example.com"; 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["COMPANY_NAME"] = "Mountain View"; 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_CITY"] = "Mountain View"; 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["PHONE_HOME_WHOLE_NUMBER"] = "650-555-4567"; 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFormAndSubmit("duplicate_profiles_test.html", data); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(personal_data_manager()->GetProfiles().empty()); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Autofill does not aggregate profiles with an invalid email. 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(AutofillTest, ProfilesNotAggregatedWithInvalidEmail) { 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormMap data; 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["NAME_FIRST"] = "Bob"; 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["NAME_LAST"] = "Smith"; 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["EMAIL_ADDRESS"] = "garbage"; 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_LINE1"] = "1234 H St."; 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_CITY"] = "San Jose"; 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_STATE"] = "CA"; 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_ZIP"] = "95110"; 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["COMPANY_NAME"] = "Company X"; 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["PHONE_HOME_WHOLE_NUMBER"] = "408-871-4567"; 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFormAndSubmit("duplicate_profiles_test.html", data); 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(personal_data_manager()->GetProfiles().empty()); 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test profile is saved if phone number is valid in selected country. 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The data file contains two profiles with valid phone numbers and two 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// profiles with invalid phone numbers from their respective country. 58158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(AutofillTest, ProfileSavedWithValidCountryPhone) { 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormMap> profiles; 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormMap data1; 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data1["NAME_FIRST"] = "Bob"; 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data1["NAME_LAST"] = "Smith"; 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data1["ADDRESS_HOME_LINE1"] = "123 Cherry Ave"; 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data1["ADDRESS_HOME_CITY"] = "Mountain View"; 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data1["ADDRESS_HOME_STATE"] = "CA"; 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data1["ADDRESS_HOME_ZIP"] = "94043"; 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data1["ADDRESS_HOME_COUNTRY"] = "United States"; 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data1["PHONE_HOME_WHOLE_NUMBER"] = "408-871-4567"; 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profiles.push_back(data1); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormMap data2; 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data2["NAME_FIRST"] = "John"; 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data2["NAME_LAST"] = "Doe"; 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data2["ADDRESS_HOME_LINE1"] = "987 H St"; 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data2["ADDRESS_HOME_CITY"] = "San Jose"; 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data2["ADDRESS_HOME_STATE"] = "CA"; 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data2["ADDRESS_HOME_ZIP"] = "95510"; 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data2["ADDRESS_HOME_COUNTRY"] = "United States"; 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data2["PHONE_HOME_WHOLE_NUMBER"] = "408-123-456"; 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profiles.push_back(data2); 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormMap data3; 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data3["NAME_FIRST"] = "Jane"; 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data3["NAME_LAST"] = "Doe"; 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data3["ADDRESS_HOME_LINE1"] = "1523 Garcia St"; 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data3["ADDRESS_HOME_CITY"] = "Mountain View"; 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data3["ADDRESS_HOME_STATE"] = "CA"; 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data3["ADDRESS_HOME_ZIP"] = "94043"; 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data3["ADDRESS_HOME_COUNTRY"] = "Germany"; 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data3["PHONE_HOME_WHOLE_NUMBER"] = "+49 40-80-81-79-000"; 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profiles.push_back(data3); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormMap data4; 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data4["NAME_FIRST"] = "Bonnie"; 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data4["NAME_LAST"] = "Smith"; 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data4["ADDRESS_HOME_LINE1"] = "6723 Roadway Rd"; 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data4["ADDRESS_HOME_CITY"] = "San Jose"; 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data4["ADDRESS_HOME_STATE"] = "CA"; 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data4["ADDRESS_HOME_ZIP"] = "95510"; 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data4["ADDRESS_HOME_COUNTRY"] = "Germany"; 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data4["PHONE_HOME_WHOLE_NUMBER"] = "+21 08450 777 777"; 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profiles.push_back(data4); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < profiles.size(); ++i) 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFormAndSubmit("autofill_test_form.html", profiles[i]); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(2u, personal_data_manager()->GetProfiles().size()); 6331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int us_address_index = 6341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci personal_data_manager()->GetProfiles()[0]->GetRawInfo( 6351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ADDRESS_HOME_LINE1) == ASCIIToUTF16("123 Cherry Ave") 6361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ? 0 6371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : 1; 6381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ( 6401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASCIIToUTF16("408-871-4567"), 6411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci personal_data_manager()->GetProfiles()[us_address_index]->GetRawInfo( 6421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PHONE_HOME_WHOLE_NUMBER)); 6431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ( 6441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASCIIToUTF16("+49 40-80-81-79-000"), 6451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci personal_data_manager()->GetProfiles()[1 - us_address_index]->GetRawInfo( 6461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PHONE_HOME_WHOLE_NUMBER)); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 649116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Prepend country codes when formatting phone numbers, but only if the user 650116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// provided one in the first place. 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(AutofillTest, AppendCountryCodeForAggregatedPhones) { 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormMap data; 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["NAME_FIRST"] = "Bob"; 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["NAME_LAST"] = "Smith"; 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_LINE1"] = "1234 H St."; 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_CITY"] = "San Jose"; 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_STATE"] = "CA"; 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_ZIP"] = "95110"; 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_COUNTRY"] = "Germany"; 661116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch data["PHONE_HOME_WHOLE_NUMBER"] = "+4908450777777"; 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFormAndSubmit("autofill_test_form.html", data); 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 664116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch data["ADDRESS_HOME_LINE1"] = "4321 H St."; 665116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch data["PHONE_HOME_WHOLE_NUMBER"] = "08450777777"; 666116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FillFormAndSubmit("autofill_test_form.html", data); 667116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 668116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(2u, personal_data_manager()->GetProfiles().size()); 6691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int second_address_index = 6701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci personal_data_manager()->GetProfiles()[0]->GetRawInfo( 6711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ADDRESS_HOME_LINE1) == ASCIIToUTF16("4321 H St.") 6721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ? 0 6731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : 1; 674116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 6751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ASCIIToUTF16("+49 8450 777777"), 6761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci personal_data_manager() 6771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetProfiles()[1 - second_address_index] 6781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetRawInfo(PHONE_HOME_WHOLE_NUMBER)); 6791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ( 6811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASCIIToUTF16("08450 777777"), 6821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci personal_data_manager()->GetProfiles()[second_address_index]->GetRawInfo( 6831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PHONE_HOME_WHOLE_NUMBER)); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Test that Autofill uses '+' sign for international numbers. 6875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// This applies to the following cases: 6885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// The phone number has a leading '+'. 6895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// The phone number does not have a leading '+'. 6905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// The phone number has a leading international direct dialing (IDD) code. 6915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// This does not apply to US numbers. For US numbers, '+' is removed. 6921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(AutofillTest, UsePlusSignForInternationalNumber) { 6935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 6945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::vector<FormMap> profiles; 6955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FormMap data1; 6975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data1["NAME_FIRST"] = "Bonnie"; 6985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data1["NAME_LAST"] = "Smith"; 6995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data1["ADDRESS_HOME_LINE1"] = "6723 Roadway Rd"; 7005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data1["ADDRESS_HOME_CITY"] = "Reading"; 7015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data1["ADDRESS_HOME_STATE"] = "Berkshire"; 7025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data1["ADDRESS_HOME_ZIP"] = "RG12 3BR"; 7035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data1["ADDRESS_HOME_COUNTRY"] = "United Kingdom"; 7045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data1["PHONE_HOME_WHOLE_NUMBER"] = "+44 7624-123456"; 7055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profiles.push_back(data1); 7065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FormMap data2; 7085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data2["NAME_FIRST"] = "John"; 7095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data2["NAME_LAST"] = "Doe"; 7105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data2["ADDRESS_HOME_LINE1"] = "987 H St"; 7115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data2["ADDRESS_HOME_CITY"] = "Reading"; 7125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data2["ADDRESS_HOME_STATE"] = "BerkShire"; 7135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data2["ADDRESS_HOME_ZIP"] = "RG12 3BR"; 7145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data2["ADDRESS_HOME_COUNTRY"] = "United Kingdom"; 7155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data2["PHONE_HOME_WHOLE_NUMBER"] = "44 7624 123456"; 7165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profiles.push_back(data2); 7175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FormMap data3; 7195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data3["NAME_FIRST"] = "Jane"; 7205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data3["NAME_LAST"] = "Doe"; 7215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data3["ADDRESS_HOME_LINE1"] = "1523 Garcia St"; 7225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data3["ADDRESS_HOME_CITY"] = "Reading"; 7235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data3["ADDRESS_HOME_STATE"] = "BerkShire"; 7245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data3["ADDRESS_HOME_ZIP"] = "RG12 3BR"; 7255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data3["ADDRESS_HOME_COUNTRY"] = "United Kingdom"; 7265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data3["PHONE_HOME_WHOLE_NUMBER"] = "0044 7624 123456"; 7275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profiles.push_back(data3); 7285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FormMap data4; 7305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data4["NAME_FIRST"] = "Bob"; 7315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data4["NAME_LAST"] = "Smith"; 7325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data4["ADDRESS_HOME_LINE1"] = "123 Cherry Ave"; 7335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data4["ADDRESS_HOME_CITY"] = "Mountain View"; 7345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data4["ADDRESS_HOME_STATE"] = "CA"; 7355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data4["ADDRESS_HOME_ZIP"] = "94043"; 7365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data4["ADDRESS_HOME_COUNTRY"] = "United States"; 7375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) data4["PHONE_HOME_WHOLE_NUMBER"] = "+1 (408) 871-4567"; 7385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profiles.push_back(data4); 7395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < profiles.size(); ++i) 7415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FillFormAndSubmit("autofill_test_form.html", profiles[i]); 7425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_EQ(4u, personal_data_manager()->GetProfiles().size()); 7441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (size_t i = 0; i < personal_data_manager()->GetProfiles().size(); ++i) { 7461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AutofillProfile* profile = personal_data_manager()->GetProfiles()[i]; 7471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string expectation; 7481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string name = UTF16ToASCII(profile->GetRawInfo(NAME_FIRST)); 7491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (name == "Bonnie") 7511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expectation = "+447624123456"; 7521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci else if (name == "John") 7531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expectation = "+447624123456"; 7541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci else if (name == "Jane") 7551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expectation = "+447624123456"; 7561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci else if (name == "Bob") 7571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expectation = "14088714567"; 7581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ASCIIToUTF16(expectation), 7601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile->GetInfo(AutofillType(PHONE_HOME_WHOLE_NUMBER), "")); 7611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 7625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 7635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test CC info not offered to be saved when autocomplete=off for CC field. 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If the credit card number field has autocomplete turned off, then the credit 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// card infobar should not offer to save the credit card info. The credit card 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// number must be a valid Luhn number. 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(AutofillTest, CCInfoNotStoredWhenAutocompleteOff) { 769ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#if defined(OS_WIN) && defined(USE_ASH) 770ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Disable this test in Metro+Ash for now (http://crbug.com/262796). 771a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) 772ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return; 773ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif 774ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormMap data; 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["CREDIT_CARD_NAME"] = "Bob Smith"; 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["CREDIT_CARD_NUMBER"] = "4408041234567893"; 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["CREDIT_CARD_EXP_MONTH"] = "12"; 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["CREDIT_CARD_EXP_4_DIGIT_YEAR"] = "2014"; 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFormAndSubmit("cc_autocomplete_off_test.html", data); 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 783e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch InfoBarService* infobar_service = InfoBarService::FromWebContents( 784e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch browser()->tab_strip_model()->GetActiveWebContents()); 785a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ASSERT_EQ(0u, infobar_service->infobar_count()); 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test profile not aggregated if email found in non-email field. 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(AutofillTest, ProfileWithEmailInOtherFieldNotSaved) { 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormMap data; 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["NAME_FIRST"] = "Bob"; 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["NAME_LAST"] = "Smith"; 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_LINE1"] = "bsmith@gmail.com"; 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_CITY"] = "San Jose"; 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_STATE"] = "CA"; 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["ADDRESS_HOME_ZIP"] = "95110"; 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["COMPANY_NAME"] = "Company X"; 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data["PHONE_HOME_WHOLE_NUMBER"] = "408-871-4567"; 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillFormAndSubmit("duplicate_profiles_test.html", data); 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(0u, personal_data_manager()->GetProfiles().size()); 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that profiles merge for aggregated data with same address. 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The criterion for when two profiles are expected to be merged is when their 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 'Address Line 1' and 'City' data match. When two profiles are merged, any 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// remaining address fields are expected to be overwritten. Any non-address 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// fields should accumulate multi-valued data. 811424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// DISABLED: http://crbug.com/281541 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(AutofillTest, 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_MergeAggregatedProfilesWithSameAddress) { 814424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) AggregateProfilesIntoAutofillPrefs("dataset_same_address.txt"); 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(3u, personal_data_manager()->GetProfiles().size()); 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 819116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Test profiles are not merged without minimum address values. 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Mininum address values needed during aggregation are: address line 1, city, 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// state, and zip code. 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Profiles are merged when data for address line 1 and city match. 823424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// DISABLED: http://crbug.com/281541 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(AutofillTest, 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_ProfilesNotMergedWhenNoMinAddressData) { 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AggregateProfilesIntoAutofillPrefs("dataset_no_address.txt"); 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(0u, personal_data_manager()->GetProfiles().size()); 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Autofill ability to merge duplicate profiles and throw away junk. 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(isherman): this looks redundant, consider removing. 833424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// DISABLED: http://crbug.com/281541 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(AutofillTest, 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISABLED_MergeAggregatedDuplicatedProfiles) { 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int num_of_profiles = 837424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) AggregateProfilesIntoAutofillPrefs("dataset_duplicated_profiles.txt"); 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_GT(num_of_profiles, 8402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<int>(personal_data_manager()->GetProfiles().size())); 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 842c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 843c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace autofill 844