diff --git a/chrome/browser/autofill/autofill_browsertest.cc b/chrome/browser/autofill/autofill_browsertest.cc index 0aad9de5fb9fce57bfde88c8bb26fc0d10c678c5..a14f5616277ef13285fd89d66240644d1c10dafa 100644 --- a/chrome/browser/autofill/autofill_browsertest.cc +++ b/chrome/browser/autofill/autofill_browsertest.cc @@ -4,7 +4,6 @@ #include <string> -#include "base/utf_string_conversions.h" #include "app/keyboard_code_conversion.h" #include "base/basictypes.h" #include "base/ref_counted.h" @@ -15,53 +14,14 @@ #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() { @@ -96,191 +56,100 @@ 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. 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(), 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(); + 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"); } diff --git a/chrome/browser/autofill/autofill_manager.h b/chrome/browser/autofill/autofill_manager.h index 29e6b230d26164bdd059903db9cd4c8143c6773e..791d171f8ff799672349dc59381ae7978b2a03bb 100644 --- a/chrome/browser/autofill/autofill_manager.h +++ b/chrome/browser/autofill/autofill_manager.h @@ -57,12 +57,14 @@ class AutoFillManager : public RenderViewHostDelegate::AutoFill, const webkit_glue::FormField& field, int unique_id); virtual void ShowAutoFillDialog(); - virtual void Reset(); // Called by the AutoFillCCInfoBarDelegate when the user interacts with the // infobar. virtual void OnInfoBarClosed(bool should_save); + // Resets the stored form data. + virtual void Reset(); + // AutoFillDownloadManager::Observer implementation: virtual void OnLoadedAutoFillHeuristics(const std::string& heuristic_xml); virtual void OnUploadedAutoFillHeuristics(const std::string& form_signature); diff --git a/chrome/browser/renderer_host/render_view_host.cc b/chrome/browser/renderer_host/render_view_host.cc index 470b8baf482e2ccdf825602dd4f2b712636f1f67..dc358b6944541f111ff01f5c4797bb790df29b42 100644 --- a/chrome/browser/renderer_host/render_view_host.cc +++ b/chrome/browser/renderer_host/render_view_host.cc @@ -2014,15 +2014,6 @@ void RenderViewHost::TranslatePage(int page_id, const std::string& translate_script, const std::string& source_lang, const std::string& target_lang) { - // Ideally we'd have a better way to uniquely identify form control elements, - // but we don't have that yet. So before start translation, we clear the - // current form and re-parse it in AutoFillManager first to get the new - // labels. - RenderViewHostDelegate::AutoFill* autofill_delegate = - delegate_->GetAutoFillDelegate(); - if (autofill_delegate) - autofill_delegate->Reset(); - Send(new ViewMsg_TranslatePage(routing_id(), page_id, translate_script, source_lang, target_lang)); } diff --git a/chrome/browser/renderer_host/render_view_host_delegate.h b/chrome/browser/renderer_host/render_view_host_delegate.h index 043000ab8b618d4732b31649cfb943975957a293..89f7d94d4da9002c8da5f250db6f4ce48e25561f 100644 --- a/chrome/browser/renderer_host/render_view_host_delegate.h +++ b/chrome/browser/renderer_host/render_view_host_delegate.h @@ -589,9 +589,6 @@ class RenderViewHostDelegate { // AutoFill popup. virtual void ShowAutoFillDialog() = 0; - // Reset cache in AutoFillManager. - virtual void Reset() = 0; - protected: virtual ~AutoFill() {} }; diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index 05b4fb1132fc5ae9524b5385f1a43bd2cbbb4cbf..c7db163708838b477b61d90c6e905948d0ecc4a9 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -313,8 +313,6 @@ 'browser/ui/views/browser_keyboard_accessibility_test_win.cc', 'browser/ui/views/find_bar_host_interactive_uitest.cc', 'browser/ui/views/tabs/tab_dragging_test.cc', - 'common/net/test_url_fetcher_factory.cc', - 'common/net/test_url_fetcher_factory.h', 'test/in_process_browser_test.cc', 'test/in_process_browser_test.h', 'test/interactive_ui/fast_shutdown_interactive_uitest.cc',