Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3469)

Unified Diff: chrome/browser/automation/testing_automation_provider.cc

Issue 10855253: Convert the autofill pyauto tests to browser tests, and remove all the supporting automation hooks … (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: review comments Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/automation/testing_automation_provider.cc
===================================================================
--- chrome/browser/automation/testing_automation_provider.cc (revision 152427)
+++ chrome/browser/automation/testing_automation_provider.cc (working copy)
@@ -29,10 +29,6 @@
#include "chrome/browser/autocomplete/autocomplete_controller.h"
#include "chrome/browser/autocomplete/autocomplete_match.h"
#include "chrome/browser/autocomplete/autocomplete_result.h"
-#include "chrome/browser/autofill/autofill_manager.h"
-#include "chrome/browser/autofill/credit_card.h"
-#include "chrome/browser/autofill/personal_data_manager.h"
-#include "chrome/browser/autofill/personal_data_manager_factory.h"
#include "chrome/browser/automation/automation_browser_tracker.h"
#include "chrome/browser/automation/automation_provider_json.h"
#include "chrome/browser/automation/automation_provider_list.h"
@@ -1962,19 +1958,6 @@
browser_handler_map_["GetTranslateInfo"] =
&TestingAutomationProvider::GetTranslateInfo;
- browser_handler_map_["GetAutofillProfile"] =
- &TestingAutomationProvider::GetAutofillProfile;
- browser_handler_map_["FillAutofillProfile"] =
- &TestingAutomationProvider::FillAutofillProfile;
- browser_handler_map_["SubmitAutofillForm"] =
- &TestingAutomationProvider::SubmitAutofillForm;
- browser_handler_map_["AutofillTriggerSuggestions"] =
- &TestingAutomationProvider::AutofillTriggerSuggestions;
- browser_handler_map_["AutofillHighlightSuggestion"] =
- &TestingAutomationProvider::AutofillHighlightSuggestion;
- browser_handler_map_["AutofillAcceptSelection"] =
- &TestingAutomationProvider::AutofillAcceptSelection;
-
browser_handler_map_["GetAllNotifications"] =
&TestingAutomationProvider::GetAllNotifications;
browser_handler_map_["CloseNotification"] =
@@ -4687,256 +4670,6 @@
reply.SendSuccess(NULL);
}
-// Sample json input:
-// { "command": "GetAutofillProfile" }
-// Refer to GetAutofillProfile() in chrome/test/pyautolib/pyauto.py for sample
-// json output.
-void TestingAutomationProvider::GetAutofillProfile(
- Browser* browser,
- DictionaryValue* args,
- IPC::Message* reply_message) {
- AutomationJSONReply reply(this, reply_message);
- // Get the AutofillProfiles currently in the database.
- int tab_index = 0;
- if (!args->GetInteger("tab_index", &tab_index)) {
- reply.SendError("Invalid or missing tab_index integer value.");
- return;
- }
-
- TabContents* tab_contents = chrome::GetTabContentsAt(browser, tab_index);
- if (tab_contents) {
- PersonalDataManager* pdm = PersonalDataManagerFactory::GetForProfile(
- tab_contents->profile()->GetOriginalProfile());
- if (pdm) {
- std::vector<AutofillProfile*> autofill_profiles = pdm->profiles();
- std::vector<CreditCard*> credit_cards = pdm->credit_cards();
-
- ListValue* profiles = GetListFromAutofillProfiles(autofill_profiles);
- ListValue* cards = GetListFromCreditCards(credit_cards);
-
- scoped_ptr<DictionaryValue> return_value(new DictionaryValue);
-
- return_value->Set("profiles", profiles);
- return_value->Set("credit_cards", cards);
- reply.SendSuccess(return_value.get());
- } else {
- reply.SendError("No PersonalDataManager.");
- return;
- }
- } else {
- reply.SendError("No tab at that index.");
- return;
- }
-}
-
-// Refer to FillAutofillProfile() in chrome/test/pyautolib/pyauto.py for sample
-// json input.
-// Sample json output: {}
-void TestingAutomationProvider::FillAutofillProfile(
- Browser* browser,
- DictionaryValue* args,
- IPC::Message* reply_message) {
- ListValue* profiles = NULL;
- ListValue* cards = NULL;
-
- // It's ok for profiles/credit_cards elements to be missing.
- args->GetList("profiles", &profiles);
- args->GetList("credit_cards", &cards);
-
- std::string error_mesg;
-
- std::vector<AutofillProfile> autofill_profiles;
- std::vector<CreditCard> credit_cards;
- // Create an AutofillProfile for each of the dictionary profiles.
- if (profiles) {
- autofill_profiles = GetAutofillProfilesFromList(*profiles, &error_mesg);
- }
- // Create a CreditCard for each of the dictionary values.
- if (cards) {
- credit_cards = GetCreditCardsFromList(*cards, &error_mesg);
- }
- if (!error_mesg.empty()) {
- AutomationJSONReply(this, reply_message).SendError(error_mesg);
- return;
- }
-
- // Save the AutofillProfiles.
- int tab_index = 0;
- if (!args->GetInteger("tab_index", &tab_index)) {
- AutomationJSONReply(this, reply_message).SendError(
- "Invalid or missing tab_index integer");
- return;
- }
-
- TabContents* tab_contents = chrome::GetTabContentsAt(browser, tab_index);
-
- if (tab_contents) {
- PersonalDataManager* pdm =
- PersonalDataManagerFactory::GetForProfile(tab_contents->profile());
- if (pdm) {
- if (profiles || cards) {
- // This observer will delete itself.
- AutofillChangedObserver* observer = new AutofillChangedObserver(
- this, reply_message, autofill_profiles.size(), credit_cards.size());
- observer->Init();
-
- if (profiles)
- pdm->SetProfiles(&autofill_profiles);
- if (cards)
- pdm->SetCreditCards(&credit_cards);
-
- return;
- }
- } else {
- AutomationJSONReply(this, reply_message).SendError(
- "No PersonalDataManager.");
- return;
- }
- } else {
- AutomationJSONReply(this, reply_message).SendError("No tab at that index.");
- return;
- }
- AutomationJSONReply(this, reply_message).SendSuccess(NULL);
-}
-
-void TestingAutomationProvider::SubmitAutofillForm(
- Browser* browser,
- DictionaryValue* args,
- IPC::Message* reply_message) {
- if (SendErrorIfModalDialogActive(this, reply_message))
- return;
-
- int tab_index;
- if (!args->GetInteger("tab_index", &tab_index)) {
- AutomationJSONReply(this, reply_message)
- .SendError("'tab_index' missing or invalid.");
- return;
- }
- TabContents* tab_contents = chrome::GetTabContentsAt(browser, tab_index);
- if (!tab_contents) {
- AutomationJSONReply(this, reply_message).SendError(
- StringPrintf("No such tab at index %d", tab_index));
- return;
- }
-
- string16 frame_xpath, javascript;
- if (!args->GetString("frame_xpath", &frame_xpath)) {
- AutomationJSONReply(this, reply_message)
- .SendError("'frame_xpath' missing or invalid.");
- return;
- }
- if (!args->GetString("javascript", &javascript)) {
- AutomationJSONReply(this, reply_message)
- .SendError("'javascript' missing or invalid.");
- return;
- }
-
- PersonalDataManager* pdm = PersonalDataManagerFactory::GetForProfile(
- tab_contents->profile()->GetOriginalProfile());
- if (!pdm) {
- AutomationJSONReply(this, reply_message)
- .SendError("No PersonalDataManager.");
- return;
- }
-
- // This observer will delete itself.
- new AutofillFormSubmittedObserver(this, reply_message, pdm);
-
- // Set the routing id of this message with the controller.
- // This routing id needs to be remembered for the reverse
- // communication while sending back the response of
- // this javascript execution.
- std::string set_automation_id;
- base::SStringPrintf(&set_automation_id,
- "window.domAutomationController.setAutomationId(%d);",
- reply_message->routing_id());
- tab_contents->web_contents()->GetRenderViewHost()->
- ExecuteJavascriptInWebFrame(frame_xpath, UTF8ToUTF16(set_automation_id));
- tab_contents->web_contents()->GetRenderViewHost()->
- ExecuteJavascriptInWebFrame(frame_xpath, javascript);
-}
-
-void TestingAutomationProvider::AutofillTriggerSuggestions(
- Browser* browser,
- DictionaryValue* args,
- IPC::Message* reply_message) {
- int tab_index;
- if (!args->GetInteger("tab_index", &tab_index)) {
- AutomationJSONReply(this, reply_message).SendError(
- "Invalid or missing args");
- return;
- }
-
- WebContents* web_contents = chrome::GetWebContentsAt(browser, tab_index);
- if (!web_contents) {
- AutomationJSONReply(this, reply_message).SendError(
- StringPrintf("No such tab at index %d", tab_index));
- return;
- }
-
- new AutofillDisplayedObserver(
- chrome::NOTIFICATION_AUTOFILL_DID_SHOW_SUGGESTIONS,
- web_contents->GetRenderViewHost(), this, reply_message);
- SendWebKeyPressEventAsync(ui::VKEY_DOWN, web_contents);
-}
-
-void TestingAutomationProvider::AutofillHighlightSuggestion(
- Browser* browser,
- DictionaryValue* args,
- IPC::Message* reply_message) {
- int tab_index;
- if (!args->GetInteger("tab_index", &tab_index)) {
- AutomationJSONReply(this, reply_message).SendError(
- "Invalid or missing args");
- return;
- }
-
- WebContents* web_contents = chrome::GetWebContentsAt(browser, tab_index);
- if (!web_contents) {
- AutomationJSONReply(this, reply_message).SendError(
- StringPrintf("No such tab at index %d", tab_index));
- return;
- }
-
- std::string direction;
- if (!args->GetString("direction", &direction) || (direction != "up" &&
- direction != "down")) {
- AutomationJSONReply(this, reply_message).SendError(
- "Must specify a direction of either 'up' or 'down'.");
- return;
- }
- int key_code = (direction == "up") ? ui::VKEY_UP : ui::VKEY_DOWN;
-
- new AutofillDisplayedObserver(
- chrome::NOTIFICATION_AUTOFILL_DID_FILL_FORM_DATA,
- web_contents->GetRenderViewHost(), this, reply_message);
- SendWebKeyPressEventAsync(key_code, web_contents);
-}
-
-void TestingAutomationProvider::AutofillAcceptSelection(
- Browser* browser,
- DictionaryValue* args,
- IPC::Message* reply_message) {
- int tab_index;
- if (!args->GetInteger("tab_index", &tab_index)) {
- AutomationJSONReply(this, reply_message).SendError(
- "Invalid or missing args");
- return;
- }
-
- WebContents* web_contents = chrome::GetWebContentsAt(browser, tab_index);
- if (!web_contents) {
- AutomationJSONReply(this, reply_message).SendError(
- StringPrintf("No such tab at index %d", tab_index));
- return;
- }
-
- new AutofillDisplayedObserver(
- chrome::NOTIFICATION_AUTOFILL_DID_FILL_FORM_DATA,
- web_contents->GetRenderViewHost(), this, reply_message);
- SendWebKeyPressEventAsync(ui::VKEY_RETURN, web_contents);
-}
-
// Sample json output: { "success": true }
void TestingAutomationProvider::SignInToSync(Browser* browser,
DictionaryValue* args,
@@ -5168,184 +4901,6 @@
}
}
-/* static */
-ListValue* TestingAutomationProvider::GetListFromAutofillProfiles(
- const std::vector<AutofillProfile*>& autofill_profiles) {
- ListValue* profiles = new ListValue;
-
- std::map<AutofillFieldType, std::string> autofill_type_to_string
- = GetAutofillFieldToStringMap();
-
- // For each AutofillProfile, transform it to a dictionary object to return.
- for (std::vector<AutofillProfile*>::const_iterator it =
- autofill_profiles.begin();
- it != autofill_profiles.end(); ++it) {
- AutofillProfile* profile = *it;
- DictionaryValue* profile_info = new DictionaryValue;
- // For each of the types, if it has one or more values, add those values
- // to the dictionary.
- for (std::map<AutofillFieldType, std::string>::iterator
- type_it = autofill_type_to_string.begin();
- type_it != autofill_type_to_string.end(); ++type_it) {
- std::vector<string16> value_list;
- profile->GetMultiInfo(type_it->first, &value_list);
- ListValue* values_to_return = new ListValue;
- for (std::vector<string16>::iterator value_it = value_list.begin();
- value_it != value_list.end(); ++value_it) {
- string16 value = *value_it;
- if (value.length()) // If there was something stored for that value.
- values_to_return->Append(new StringValue(value));
- }
- if (!values_to_return->empty())
- profile_info->Set(type_it->second, values_to_return);
- }
- profiles->Append(profile_info);
- }
- return profiles;
-}
-
-/* static */
-ListValue* TestingAutomationProvider::GetListFromCreditCards(
- const std::vector<CreditCard*>& credit_cards) {
- ListValue* cards = new ListValue;
-
- std::map<AutofillFieldType, std::string> credit_card_type_to_string =
- GetCreditCardFieldToStringMap();
-
- // For each AutofillProfile, transform it to a dictionary object to return.
- for (std::vector<CreditCard*>::const_iterator it =
- credit_cards.begin();
- it != credit_cards.end(); ++it) {
- CreditCard* card = *it;
- DictionaryValue* card_info = new DictionaryValue;
- // For each of the types, if it has a value, add it to the dictionary.
- for (std::map<AutofillFieldType, std::string>::iterator type_it =
- credit_card_type_to_string.begin();
- type_it != credit_card_type_to_string.end(); ++type_it) {
- string16 value = card->GetInfo(type_it->first);
- // If there was something stored for that value.
- if (value.length()) {
- card_info->SetString(type_it->second, value);
- }
- }
- cards->Append(card_info);
- }
- return cards;
-}
-
-/* static */
-std::vector<AutofillProfile>
-TestingAutomationProvider::GetAutofillProfilesFromList(
- const ListValue& profiles, std::string* error_message) {
- std::vector<AutofillProfile> autofill_profiles;
- const DictionaryValue* profile_info = NULL;
- const ListValue* current_value = NULL;
-
- std::map<AutofillFieldType, std::string> autofill_type_to_string =
- GetAutofillFieldToStringMap();
-
- int num_profiles = profiles.GetSize();
- for (int i = 0; i < num_profiles; i++) {
- profiles.GetDictionary(i, &profile_info);
- AutofillProfile profile;
- // Loop through the possible profile types and add those provided.
- for (std::map<AutofillFieldType, std::string>::iterator type_it =
- autofill_type_to_string.begin();
- type_it != autofill_type_to_string.end(); ++type_it) {
- if (profile_info->HasKey(type_it->second)) {
- if (profile_info->GetList(type_it->second, &current_value)) {
- std::vector<string16> value_list;
- for (ListValue::const_iterator list_it = current_value->begin();
- list_it != current_value->end(); ++list_it) {
- string16 value;
- if ((*list_it)->GetAsString(&value)) {
- value_list.insert(value_list.end(), value);
- } else {
- *error_message = "All list values must be strings";
- return autofill_profiles;
- }
- }
- profile.SetMultiInfo(type_it->first, value_list);
- } else {
- *error_message= "All values must be lists";
- return autofill_profiles;
- }
- }
- }
- autofill_profiles.push_back(profile);
- }
- return autofill_profiles;
-}
-
-/* static */
-std::vector<CreditCard> TestingAutomationProvider::GetCreditCardsFromList(
- const ListValue& cards, std::string* error_message) {
- std::vector<CreditCard> credit_cards;
- const DictionaryValue* card_info = NULL;
- string16 current_value;
-
- std::map<AutofillFieldType, std::string> credit_card_type_to_string =
- GetCreditCardFieldToStringMap();
-
- int num_credit_cards = cards.GetSize();
- for (int i = 0; i < num_credit_cards; i++) {
- if (!cards.GetDictionary(i, &card_info))
- continue;
- CreditCard card;
- // Loop through the possible credit card fields and add those provided.
- for (std::map<AutofillFieldType, std::string>::iterator type_it =
- credit_card_type_to_string.begin();
- type_it != credit_card_type_to_string.end(); ++type_it) {
- if (card_info->HasKey(type_it->second)) {
- if (card_info->GetString(type_it->second, &current_value)) {
- card.SetInfo(type_it->first, current_value);
- } else {
- *error_message= "All values must be strings";
- break;
- }
- }
- }
- credit_cards.push_back(card);
- }
- return credit_cards;
-}
-
-/* static */
-std::map<AutofillFieldType, std::string>
- TestingAutomationProvider::GetAutofillFieldToStringMap() {
- std::map<AutofillFieldType, std::string> autofill_type_to_string;
- // Strings ordered by order of fields when adding a profile in Autofill prefs.
- autofill_type_to_string[NAME_FIRST] = "NAME_FIRST";
- autofill_type_to_string[NAME_MIDDLE] = "NAME_MIDDLE";
- autofill_type_to_string[NAME_LAST] = "NAME_LAST";
- autofill_type_to_string[COMPANY_NAME] = "COMPANY_NAME";
- autofill_type_to_string[EMAIL_ADDRESS] = "EMAIL_ADDRESS";
- autofill_type_to_string[ADDRESS_HOME_LINE1] = "ADDRESS_HOME_LINE1";
- autofill_type_to_string[ADDRESS_HOME_LINE2] = "ADDRESS_HOME_LINE2";
- autofill_type_to_string[ADDRESS_HOME_CITY] = "ADDRESS_HOME_CITY";
- autofill_type_to_string[ADDRESS_HOME_STATE] = "ADDRESS_HOME_STATE";
- autofill_type_to_string[ADDRESS_HOME_ZIP] = "ADDRESS_HOME_ZIP";
- autofill_type_to_string[ADDRESS_HOME_COUNTRY] = "ADDRESS_HOME_COUNTRY";
- autofill_type_to_string[PHONE_HOME_COUNTRY_CODE] =
- "PHONE_HOME_COUNTRY_CODE";
- autofill_type_to_string[PHONE_HOME_CITY_CODE] = "PHONE_HOME_CITY_CODE";
- autofill_type_to_string[PHONE_HOME_WHOLE_NUMBER] =
- "PHONE_HOME_WHOLE_NUMBER";
- return autofill_type_to_string;
-}
-
-/* static */
-std::map<AutofillFieldType, std::string>
- TestingAutomationProvider::GetCreditCardFieldToStringMap() {
- std::map<AutofillFieldType, std::string> credit_card_type_to_string;
- credit_card_type_to_string[CREDIT_CARD_NAME] = "CREDIT_CARD_NAME";
- credit_card_type_to_string[CREDIT_CARD_NUMBER] = "CREDIT_CARD_NUMBER";
- credit_card_type_to_string[CREDIT_CARD_EXP_MONTH] = "CREDIT_CARD_EXP_MONTH";
- credit_card_type_to_string[CREDIT_CARD_EXP_4_DIGIT_YEAR] =
- "CREDIT_CARD_EXP_4_DIGIT_YEAR";
- return credit_card_type_to_string;
-}
-
// Refer to GetAllNotifications() in chrome/test/pyautolib/pyauto.py for
// sample json input/output.
void TestingAutomationProvider::GetAllNotifications(
« no previous file with comments | « chrome/browser/automation/testing_automation_provider.h ('k') | chrome/browser/sync/test/integration/autofill_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698