diff options
author | dhollowa@chromium.org <dhollowa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-15 00:05:47 +0000 |
---|---|---|
committer | dhollowa@chromium.org <dhollowa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-15 00:05:47 +0000 |
commit | 5f93c76a08113d1beb6dd27458b0101fdc3ce366 (patch) | |
tree | 7924c362c8c791e686ad81e4978c009715479e2d /chrome/browser/autofill/autofill_browsertest.cc | |
parent | 504eba18afc99cded5928d628c264f8d373b6ec5 (diff) | |
download | chromium_src-5f93c76a08113d1beb6dd27458b0101fdc3ce366.zip chromium_src-5f93c76a08113d1beb6dd27458b0101fdc3ce366.tar.gz chromium_src-5f93c76a08113d1beb6dd27458b0101fdc3ce366.tar.bz2 |
Before starting translation reset cache in AutoFillManager. To call Reset() function, append Reset() virtual function in RenderViewHostDelegate::AutoFill and derive it from AutoFillManager.
BUG=58576
TEST= 1.launch English version Chrome 2. make sure autofill is enable and there is autofill data entry in settings 3.navigate to a non-English website e.g.: https://secure.fnac.pt/Account/Logon/LogonNewAccount.aspx?NID=-15&RNID=-15&PrevNID=0&pagepar=SID%3d22120814-4186-d926-4f7b-0dece96fade2|Origin%3dFnacAff|OrderInSession%3d1|TTL%3d070420110015|bl%3dHGAChead&PageRedir=https://www2.fnac.pt/Account/Profil/default.asp&PageAuth=yes&LogonType=ACCOUNT 4. when translation infobar show up, click "Translate" to translate to English 5. focus in "E-mail" field 6. press Down arrow 7. select the autofill data entry by double click on it 8. autofill data should be fill in all text boxes
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=69088
Review URL: http://codereview.chromium.org/5322001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@69199 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/autofill/autofill_browsertest.cc')
-rw-r--r-- | chrome/browser/autofill/autofill_browsertest.cc | 307 |
1 files changed, 219 insertions, 88 deletions
diff --git a/chrome/browser/autofill/autofill_browsertest.cc b/chrome/browser/autofill/autofill_browsertest.cc index a14f561..0aad9de 100644 --- a/chrome/browser/autofill/autofill_browsertest.cc +++ b/chrome/browser/autofill/autofill_browsertest.cc @@ -4,6 +4,7 @@ #include <string> +#include "base/utf_string_conversions.h" #include "app/keyboard_code_conversion.h" #include "base/basictypes.h" #include "base/ref_counted.h" @@ -14,14 +15,53 @@ #include "chrome/browser/autofill/personal_data_manager.h" #include "chrome/browser/net/predictor_api.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/renderer_host/mock_render_process_host.h" +#include "chrome/browser/renderer_host/render_view_host.h" #include "chrome/browser/tab_contents/tab_contents.h" +#include "chrome/browser/translate/translate_infobar_delegate.h" +#include "chrome/browser/translate/translate_manager.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_window.h" +#include "chrome/common/net/test_url_fetcher_factory.h" #include "chrome/common/pref_names.h" +#include "chrome/common/render_messages.h" +#include "chrome/renderer/translate_helper.h" #include "chrome/test/in_process_browser_test.h" #include "chrome/test/ui_test_utils.h" #include "testing/gtest/include/gtest/gtest.h" +static const char* kTestFormString = + "<form action=\"http://www.google.com/\" method=\"POST\">" + "<label for=\"firstname\">First name:</label>" + " <input type=\"text\" id=\"firstname\"" + " onFocus=\"domAutomationController.send(true)\"" + " /><br />" + "<label for=\"lastname\">Last name:</label>" + " <input type=\"text\" id=\"lastname\" /><br />" + "<label for=\"address1\">Address line 1:</label>" + " <input type=\"text\" id=\"address1\" /><br />" + "<label for=\"address2\">Address line 2:</label>" + " <input type=\"text\" id=\"address2\" /><br />" + "<label for=\"city\">City:</label>" + " <input type=\"text\" id=\"city\" /><br />" + "<label for=\"state\">State:</label>" + " <select id=\"state\">" + " <option value=\"\" selected=\"yes\">--</option>" + " <option value=\"CA\">California</option>" + " <option value=\"TX\">Texas</option>" + " </select><br />" + "<label for=\"zip\">ZIP code:</label>" + " <input type=\"text\" id=\"zip\" /><br />" + "<label for=\"country\">Country:</label>" + " <select id=\"country\">" + " <option value=\"\" selected=\"yes\">--</option>" + " <option value=\"CA\">Canada</option>" + " <option value=\"US\">United States</option>" + " </select><br />" + "<label for=\"phone\">Phone number:</label>" + " <input type=\"text\" id=\"phone\" /><br />" + "</form>"; + class AutoFillTest : public InProcessBrowserTest { protected: AutoFillTest() { @@ -56,6 +96,113 @@ class AutoFillTest : public InProcessBrowserTest { L"document.getElementById('" + field_name + L"').value);", &value)); EXPECT_EQ(expected_value, value); } + + RenderViewHost* rvh() { + return browser()->GetSelectedTabContents()->render_view_host(); + } + + virtual void SetUp() { + URLFetcher::set_factory(&url_fetcher_factory_); + InProcessBrowserTest::SetUp(); + } + + void SimulateURLFetch(bool success) { + TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); + ASSERT_TRUE(fetcher); + URLRequestStatus status; + status.set_status(success ? URLRequestStatus::SUCCESS : + URLRequestStatus::FAILED); + + std::string script = " var google = {};" + "google.translate = (function() {" + " return {" + " TranslateService: function() {" + " return {" + " isAvailable : function() {" + " return true;" + " }," + " restore : function() {" + " return;" + " }," + " getDetectedLanguage : function() {" + " return \"ja\";" + " }," + " translatePage : function(originalLang, targetLang," + " onTranslateProgress) {" + " document.getElementsByTagName(\"body\")[0].innerHTML = '" + + std::string(kTestFormString) + + " ';" + " onTranslateProgress(100, true, false);" + " }" + " };" + " }" + " };" + "})();"; + + fetcher->delegate()->OnURLFetchComplete(fetcher, fetcher->original_url(), + status, success ? 200 : 500, + ResponseCookies(), + script); + } + + void TryBasicFormFillWithMKey() { + ASSERT_NO_FATAL_FAILURE(ui_test_utils::ClickOnView(browser(), + VIEW_ID_TAB_CONTAINER)); + ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), + VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); + + bool result = false; + ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( + rvh(), L"", L"document.getElementById('firstname').focus();", &result)); + ASSERT_TRUE(result); + // Start filling the first name field with "M" and wait for the popup to be + // shown. + ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( + browser(), app::VKEY_M, false, true, false, false, + NotificationType::AUTOFILL_DID_SHOW_SUGGESTIONS, + Source<RenderViewHost>(rvh()))); + + // Press the down arrow to select the suggestion and preview the autofilled + // form. + ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( + browser(), app::VKEY_DOWN, false, false, false, false, + NotificationType::AUTOFILL_DID_FILL_FORM_DATA, + Source<RenderViewHost>(rvh()))); + + // The previewed values should not be accessible to JavaScript. + ExpectFieldValue(L"firstname", "M"); + ExpectFieldValue(L"lastname", ""); + ExpectFieldValue(L"address1", ""); + ExpectFieldValue(L"address2", ""); + ExpectFieldValue(L"city", ""); + ExpectFieldValue(L"state", ""); + ExpectFieldValue(L"zip", ""); + ExpectFieldValue(L"country", ""); + ExpectFieldValue(L"phone", ""); + // TODO(isherman): It would be nice to test that the previewed values are + // displayed: http://crbug.com/57220 + + // Press Enter to accept the autofill suggestions. + ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( + browser(), app::VKEY_RETURN, false, false, false, false, + NotificationType::AUTOFILL_DID_FILL_FORM_DATA, + Source<RenderViewHost>(rvh()))); + + // The form should be filled. + ExpectFieldValue(L"firstname", "Milton"); + ExpectFieldValue(L"lastname", "Waddams"); + ExpectFieldValue(L"address1", "4120 Freidrich Lane"); + ExpectFieldValue(L"address2", "Basement"); + ExpectFieldValue(L"city", "Austin"); + ExpectFieldValue(L"state", "TX"); + ExpectFieldValue(L"zip", "78744"); + ExpectFieldValue(L"country", "US"); + ExpectFieldValue(L"phone", "5125551234"); + + } + + private: + TestURLFetcherFactory url_fetcher_factory_; }; // Test that basic form fill is working. @@ -63,93 +210,77 @@ IN_PROC_BROWSER_TEST_F(AutoFillTest, BasicFormFill) { SetUpProfile(); ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); + ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(browser(), + GURL("data:text/html;charset=utf-8," + std::string(kTestFormString)))); + + TryBasicFormFillWithMKey(); +} + +// Test that basic form fill is working. +IN_PROC_BROWSER_TEST_F(AutoFillTest, TranslateAndFormFill) { + SetUpProfile(); + + GURL url("data:text/html;charset=utf-8," + "<form action=\"http://www.google.com/\" method=\"POST\">" + "<label for=\"firstname\">なまえ</label>" + " <input type=\"text\" id=\"firstname\"" + " onFocus=\"domAutomationController.send(true)\"" + " /><br />" + "<label for=\"lastname\">みょうじ</label>" + " <input type=\"text\" id=\"lastname\" /><br />" + "<label for=\"address1\">Address line 1:</label>" + " <input type=\"text\" id=\"address1\" /><br />" + "<label for=\"address2\">Address line 2:</label>" + " <input type=\"text\" id=\"address2\" /><br />" + "<label for=\"city\">City:</label>" + " <input type=\"text\" id=\"city\" /><br />" + "<label for=\"state\">State:</label>" + " <select id=\"state\">" + " <option value=\"\" selected=\"yes\">--</option>" + " <option value=\"CA\">California</option>" + " <option value=\"TX\">Texas</option>" + " </select><br />" + "<label for=\"zip\">ZIP code:</label>" + " <input type=\"text\" id=\"zip\" /><br />" + "<label for=\"country\">Country:</label>" + " <select id=\"country\">" + " <option value=\"\" selected=\"yes\">--</option>" + " <option value=\"CA\">Canada</option>" + " <option value=\"US\">United States</option>" + " </select><br />" + "<label for=\"phone\">Phone number:</label>" + " <input type=\"text\" id=\"phone\" /><br />" + "</form>"); + ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( - browser(), GURL("data:text/html;charset=utf-8," - "<form action=\"http://www.google.com/\" method=\"POST\">" - "<label for=\"firstname\">First name:</label>" - " <input type=\"text\" id=\"firstname\"" - " onFocus=\"domAutomationController.send(true)\"" - " /><br />" - "<label for=\"lastname\">Last name:</label>" - " <input type=\"text\" id=\"lastname\" /><br />" - "<label for=\"address1\">Address line 1:</label>" - " <input type=\"text\" id=\"address1\" /><br />" - "<label for=\"address2\">Address line 2:</label>" - " <input type=\"text\" id=\"address2\" /><br />" - "<label for=\"city\">City:</label>" - " <input type=\"text\" id=\"city\" /><br />" - "<label for=\"state\">State:</label>" - " <select id=\"state\">" - " <option value=\"\" selected=\"yes\">--</option>" - " <option value=\"CA\">California</option>" - " <option value=\"TX\">Texas</option>" - " </select><br />" - "<label for=\"zip\">ZIP code:</label>" - " <input type=\"text\" id=\"zip\" /><br />" - "<label for=\"country\">Country:</label>" - " <select id=\"country\">" - " <option value=\"\" selected=\"yes\">--</option>" - " <option value=\"CA\">Canada</option>" - " <option value=\"US\">United States</option>" - " </select><br />" - "<label for=\"phone\">Phone number:</label>" - " <input type=\"text\" id=\"phone\" /><br />" - "</form>"))); - - ASSERT_NO_FATAL_FAILURE(ui_test_utils::ClickOnView(browser(), - VIEW_ID_TAB_CONTAINER)); - ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), - VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); - - RenderViewHost* render_view_host = - browser()->GetSelectedTabContents()->render_view_host(); - bool result; - ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( - render_view_host, L"", L"document.getElementById('firstname').focus();", - &result)); - ASSERT_TRUE(result); - - // Start filling the first name field with "M" and wait for the popup to be - // shown. - ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( - browser(), app::VKEY_M, false, true, false, false, - NotificationType::AUTOFILL_DID_SHOW_SUGGESTIONS, - Source<RenderViewHost>(render_view_host))); - - // Press the down arrow to select the suggestion and preview the autofilled - // form. - ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( - browser(), app::VKEY_DOWN, false, false, false, false, - NotificationType::AUTOFILL_DID_FILL_FORM_DATA, - Source<RenderViewHost>(render_view_host))); - - // The previewed values should not be accessible to JavaScript. - ExpectFieldValue(L"firstname", "M"); - ExpectFieldValue(L"lastname", ""); - ExpectFieldValue(L"address1", ""); - ExpectFieldValue(L"address2", ""); - ExpectFieldValue(L"city", ""); - ExpectFieldValue(L"state", ""); - ExpectFieldValue(L"zip", ""); - ExpectFieldValue(L"country", ""); - ExpectFieldValue(L"phone", ""); - // TODO(isherman): It would be nice to test that the previewed values are - // displayed: http://crbug.com/57220 - - // Press Enter to accept the autofill suggestions. - ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait( - browser(), app::VKEY_RETURN, false, false, false, false, - NotificationType::AUTOFILL_DID_FILL_FORM_DATA, - Source<RenderViewHost>(render_view_host))); - - // The form should be filled. - ExpectFieldValue(L"firstname", "Milton"); - ExpectFieldValue(L"lastname", "Waddams"); - ExpectFieldValue(L"address1", "4120 Freidrich Lane"); - ExpectFieldValue(L"address2", "Basement"); - ExpectFieldValue(L"city", "Austin"); - ExpectFieldValue(L"state", "TX"); - ExpectFieldValue(L"zip", "78744"); - ExpectFieldValue(L"country", "US"); - ExpectFieldValue(L"phone", "5125551234"); + browser(), url)); + + // Get translation bar. + int page_id = browser()->GetSelectedTabContents()->controller(). + GetLastCommittedEntry()->page_id(); + rvh()->OnMessageReceived(ViewHostMsg_PageContents(0, url, page_id, + UTF8ToUTF16("test"), "ja", true)); + TranslateInfoBarDelegate* infobar = browser()->GetSelectedTabContents()-> + GetInfoBarDelegateAt(0)->AsTranslateInfoBarDelegate(); + + ASSERT_TRUE(infobar != NULL); + EXPECT_EQ(TranslateInfoBarDelegate::BEFORE_TRANSLATE, infobar->type()); + + // Simulate press translation button. + infobar->Translate(); + + // Simulate the translate script being retrieved. + // Pass fake google.translate lib as the translate script. + SimulateURLFetch(true); + + // Simulate translation to kick onTranslateElementLoad. + // But right now, the call stucks here. + // Once click the text field, it starts again. + ASSERT_TRUE(ui_test_utils::ExecuteJavaScript( + rvh(), L"", L"cr.googleTranslate.onTranslateElementLoad();")); + + // Simulate the render notifying the translation has been done. + ui_test_utils::WaitForNotification(NotificationType::PAGE_TRANSLATED); + + TryBasicFormFillWithMKey(); } |