From be6f15d6e3fda7e932896ef8e82f04edab69c697 Mon Sep 17 00:00:00 2001
From: "dhollowa@chromium.org"
 <dhollowa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>
Date: Tue, 14 Dec 2010 01:28:37 +0000
Subject: [PATCH] Revert 69088 - 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

Review URL: http://codereview.chromium.org/5322001

TBR=dhollowa@chromium.org
Review URL: http://codereview.chromium.org/5682012

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@69090 0039d316-1c4b-4281-b951-d872f2087c98
---
 .../browser/autofill/autofill_browsertest.cc  | 307 +++++-------------
 chrome/browser/autofill/autofill_manager.h    |   4 +-
 .../browser/renderer_host/render_view_host.cc |   9 -
 .../renderer_host/render_view_host_delegate.h |   3 -
 chrome/chrome_tests.gypi                      |   2 -
 5 files changed, 91 insertions(+), 234 deletions(-)

diff --git a/chrome/browser/autofill/autofill_browsertest.cc b/chrome/browser/autofill/autofill_browsertest.cc
index 0aad9de5fb9fc..a14f5616277ef 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 29e6b230d2616..791d171f8ff79 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 470b8baf482e2..dc358b6944541 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 043000ab8b618..89f7d94d4da90 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 05b4fb1132fc5..c7db163708838 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',
-- 
GitLab