Chromium Code Reviews| Index: components/autofill/browser/autofill_xml_parser.cc |
| diff --git a/components/autofill/browser/autofill_xml_parser.cc b/components/autofill/browser/autofill_xml_parser.cc |
| index a4672182d43464408b1de8690b662d68c904db86..ccbf01a954057b113ae5567c5058f3c93478970c 100644 |
| --- a/components/autofill/browser/autofill_xml_parser.cc |
| +++ b/components/autofill/browser/autofill_xml_parser.cc |
| @@ -122,31 +122,51 @@ void AutofillQueryXmlParser::StartElement(buzz::XmlParseContext* context, |
| } |
| } else if (element.compare("page_advance_button") == 0) { |
| // |attrs| is a NULL-terminated list of (attribute, value) pairs. |
| - // If both id and css_selector are set, the first one to appear will take |
| - // precedence. |
| - while (*attrs) { |
| - buzz::QName attribute_qname = context->ResolveQName(*attrs, true); |
| - ++attrs; |
| - const std::string& attribute_name = attribute_qname.LocalPart(); |
| - buzz::QName value_qname = context->ResolveQName(*attrs, true); |
| - ++attrs; |
| - const std::string& attribute_value = value_qname.LocalPart(); |
| - if (attribute_name.compare("id") == 0 && !attribute_value.empty()) { |
| - page_meta_data_->proceed_element_descriptor.retrieval_method = |
| - autofill::WebElementDescriptor::ID; |
| - page_meta_data_->proceed_element_descriptor.descriptor = |
| - attribute_value; |
| - break; |
| - } else if (attribute_name.compare("css_selector") == 0 && |
| - !attribute_value.empty()) { |
| - page_meta_data_->proceed_element_descriptor.retrieval_method = |
| - autofill::WebElementDescriptor::CSS_SELECTOR; |
| - page_meta_data_->proceed_element_descriptor.descriptor = |
| - attribute_value; |
| - break; |
| - } |
| + page_meta_data_->proceed_element_descriptor = WebElementDescriptor(); |
| + ParseElementDescriptor(context, |
| + attrs, |
| + &page_meta_data_->proceed_element_descriptor); |
| + } else if (element.compare("click_elements_before_formfill") == 0) { |
| + ParseClickElement(&page_meta_data_->click_elements_before_formfill); |
| + } else if (element.compare("click_elements_after_formfill") == 0) { |
| + ParseClickElement(&page_meta_data_->click_elements_after_formfill); |
| + } else if (element.compare("web_element") == 0) { |
| + ParseElementDescriptor(context, attrs, current_click_element_); |
| + } |
| +} |
| + |
| +void AutofillQueryXmlParser::ParseClickElement( |
| + std::vector<WebElementDescriptor>* click_elements) { |
| + click_elements->push_back(WebElementDescriptor()); |
| + current_click_element_ = &click_elements->back(); |
|
Ilya Sherman
2013/05/23 09:04:42
This doesn't look like it's actually parsed anythi
benquan
2013/05/24 00:45:11
renamed
|
| +} |
| + |
| +WebElementDescriptor* AutofillQueryXmlParser::ParseElementDescriptor( |
| + buzz::XmlParseContext* context, |
|
Ilya Sherman
2013/05/23 09:04:42
nit: Can this be passed by const-reference?
benquan
2013/05/24 00:45:11
No, we can not, because buzz::XmlParseContext::Res
|
| + const char** attrs, |
| + WebElementDescriptor* element_descriptor) { |
| + // If both id and css_selector are set, the first one to appear will take |
| + // precedence. |
| + while (*attrs) { |
| + buzz::QName attribute_qname = context->ResolveQName(*attrs, true); |
| + ++attrs; |
| + const std::string& attribute_name = attribute_qname.LocalPart(); |
| + buzz::QName value_qname = context->ResolveQName(*attrs, true); |
| + ++attrs; |
| + const std::string& attribute_value = value_qname.LocalPart(); |
| + if (attribute_name.compare("id") == 0 && !attribute_value.empty()) { |
| + element_descriptor->retrieval_method = autofill::WebElementDescriptor::ID; |
| + element_descriptor->descriptor = attribute_value; |
| + break; |
| + } else if (attribute_name.compare("css_selector") == 0 && |
| + !attribute_value.empty()) { |
| + element_descriptor->retrieval_method = |
| + autofill::WebElementDescriptor::CSS_SELECTOR; |
| + element_descriptor->descriptor = attribute_value; |
| + break; |
| } |
| } |
| + return element_descriptor; |
| } |
| int AutofillQueryXmlParser::GetIntValue(buzz::XmlParseContext* context, |