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

Side by Side Diff: chrome/browser/autofill/form_structure.cc

Issue 6213002: Propagate correct data to the Toolbar servers (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/autofill/form_structure.h" 5 #include "chrome/browser/autofill/form_structure.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/sha1.h" 9 #include "base/sha1.h"
10 #include "base/string_number_conversions.h" 10 #include "base/string_number_conversions.h"
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 } else { 98 } else {
99 // Either the method is 'get', or we don't know. In this case we default 99 // Either the method is 'get', or we don't know. In this case we default
100 // to GET. 100 // to GET.
101 method_ = GET; 101 method_ = GET;
102 } 102 }
103 } 103 }
104 104
105 FormStructure::~FormStructure() {} 105 FormStructure::~FormStructure() {}
106 106
107 bool FormStructure::EncodeUploadRequest(bool auto_fill_used, 107 bool FormStructure::EncodeUploadRequest(bool auto_fill_used,
108 char const* data_presence,
108 std::string* encoded_xml) const { 109 std::string* encoded_xml) const {
109 DCHECK(encoded_xml); 110 DCHECK(encoded_xml);
110 encoded_xml->clear(); 111 encoded_xml->clear();
111 bool auto_fillable = IsAutoFillable(false); 112 bool auto_fillable = IsAutoFillable(false);
112 DCHECK(auto_fillable); // Caller should've checked for search pages. 113 DCHECK(auto_fillable); // Caller should've checked for search pages.
113 if (!auto_fillable) 114 if (!auto_fillable)
114 return false; 115 return false;
115 116
116 buzz::XmlElement autofil_request_xml(buzz::QName("autofillupload")); 117 buzz::XmlElement autofill_request_xml(buzz::QName("autofillupload"));
117 118
118 // Attributes for the <autofillupload> element. 119 // Attributes for the <autofillupload> element.
119 // 120 //
120 // TODO(jhawkins): Work with toolbar devs to make a spec for autofill clients. 121 // TODO(jhawkins): Work with toolbar devs to make a spec for autofill clients.
121 // For now these values are hacked from the toolbar code. 122 // For now these values are hacked from the toolbar code.
122 autofil_request_xml.SetAttr(buzz::QName(kAttributeClientVersion), 123 autofill_request_xml.SetAttr(buzz::QName(kAttributeClientVersion),
123 "6.1.1715.1442/en (GGLL)"); 124 "6.1.1715.1442/en (GGLL)");
124 125
125 autofil_request_xml.SetAttr(buzz::QName(kAttributeFormSignature), 126 autofill_request_xml.SetAttr(buzz::QName(kAttributeFormSignature),
126 FormSignature()); 127 FormSignature());
127 128
128 autofil_request_xml.SetAttr(buzz::QName(kAttributeAutoFillUsed), 129 autofill_request_xml.SetAttr(buzz::QName(kAttributeAutoFillUsed),
129 auto_fill_used ? "true" : "false"); 130 auto_fill_used ? "true" : "false");
130 131
131 // TODO(jhawkins): Hook this up to the personal data manager. 132 autofill_request_xml.SetAttr(buzz::QName(kAttributeDataPresent),
132 // personaldata_manager_->GetDataPresent(); 133 data_presence);
133 autofil_request_xml.SetAttr(buzz::QName(kAttributeDataPresent), "");
134 134
135 if (!EncodeFormRequest(FormStructure::UPLOAD, &autofil_request_xml)) 135 if (!EncodeFormRequest(FormStructure::UPLOAD, &autofill_request_xml))
136 return false; // Malformed form, skip it. 136 return false; // Malformed form, skip it.
137 137
138 // Obtain the XML structure as a string. 138 // Obtain the XML structure as a string.
139 *encoded_xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; 139 *encoded_xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
140 *encoded_xml += autofil_request_xml.Str().c_str(); 140 *encoded_xml += autofill_request_xml.Str().c_str();
141 141
142 return true; 142 return true;
143 } 143 }
144 144
145 // static 145 // static
146 bool FormStructure::EncodeQueryRequest(const ScopedVector<FormStructure>& forms, 146 bool FormStructure::EncodeQueryRequest(const ScopedVector<FormStructure>& forms,
147 std::vector<std::string>* encoded_signatures, 147 std::vector<std::string>* encoded_signatures,
148 std::string* encoded_xml) { 148 std::string* encoded_xml) {
149 DCHECK(encoded_signatures); 149 DCHECK(encoded_signatures);
150 DCHECK(encoded_xml); 150 DCHECK(encoded_xml);
151 encoded_xml->clear(); 151 encoded_xml->clear();
152 encoded_signatures->clear(); 152 encoded_signatures->clear();
153 encoded_signatures->reserve(forms.size()); 153 encoded_signatures->reserve(forms.size());
154 buzz::XmlElement autofil_request_xml(buzz::QName("autofillquery")); 154 buzz::XmlElement autofill_request_xml(buzz::QName("autofillquery"));
155 // Attributes for the <autofillquery> element. 155 // Attributes for the <autofillquery> element.
156 // 156 //
157 // TODO(jhawkins): Work with toolbar devs to make a spec for autofill clients. 157 // TODO(jhawkins): Work with toolbar devs to make a spec for autofill clients.
158 // For now these values are hacked from the toolbar code. 158 // For now these values are hacked from the toolbar code.
159 autofil_request_xml.SetAttr(buzz::QName(kAttributeClientVersion), 159 autofill_request_xml.SetAttr(buzz::QName(kAttributeClientVersion),
160 "6.1.1715.1442/en (GGLL)"); 160 "6.1.1715.1442/en (GGLL)");
161 // Some badly formatted web sites repeat forms - detect that and encode only 161 // Some badly formatted web sites repeat forms - detect that and encode only
162 // one form as returned data would be the same for all the repeated forms. 162 // one form as returned data would be the same for all the repeated forms.
163 std::set<std::string> processed_forms; 163 std::set<std::string> processed_forms;
164 for (ScopedVector<FormStructure>::const_iterator it = forms.begin(); 164 for (ScopedVector<FormStructure>::const_iterator it = forms.begin();
165 it != forms.end(); 165 it != forms.end();
166 ++it) { 166 ++it) {
167 std::string signature((*it)->FormSignature()); 167 std::string signature((*it)->FormSignature());
168 if (processed_forms.find(signature) != processed_forms.end()) 168 if (processed_forms.find(signature) != processed_forms.end())
169 continue; 169 continue;
170 processed_forms.insert(signature); 170 processed_forms.insert(signature);
171 scoped_ptr<buzz::XmlElement> encompassing_xml_element( 171 scoped_ptr<buzz::XmlElement> encompassing_xml_element(
172 new buzz::XmlElement(buzz::QName("form"))); 172 new buzz::XmlElement(buzz::QName("form")));
173 encompassing_xml_element->SetAttr(buzz::QName(kAttributeSignature), 173 encompassing_xml_element->SetAttr(buzz::QName(kAttributeSignature),
174 signature); 174 signature);
175 175
176 if (!(*it)->EncodeFormRequest(FormStructure::QUERY, 176 if (!(*it)->EncodeFormRequest(FormStructure::QUERY,
177 encompassing_xml_element.get())) 177 encompassing_xml_element.get()))
178 continue; // Malformed form, skip it. 178 continue; // Malformed form, skip it.
179 179
180 autofil_request_xml.AddElement(encompassing_xml_element.release()); 180 autofill_request_xml.AddElement(encompassing_xml_element.release());
181 encoded_signatures->push_back(signature); 181 encoded_signatures->push_back(signature);
182 } 182 }
183 183
184 if (!encoded_signatures->size()) 184 if (!encoded_signatures->size())
185 return false; 185 return false;
186 186
187 // Obtain the XML structure as a string. 187 // Obtain the XML structure as a string.
188 *encoded_xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; 188 *encoded_xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
189 *encoded_xml += autofil_request_xml.Str().c_str(); 189 *encoded_xml += autofill_request_xml.Str().c_str();
190 190
191 return true; 191 return true;
192 } 192 }
193 193
194 // static 194 // static
195 void FormStructure::ParseQueryResponse(const std::string& response_xml, 195 void FormStructure::ParseQueryResponse(const std::string& response_xml,
196 const std::vector<FormStructure*>& forms, 196 const std::vector<FormStructure*>& forms,
197 UploadRequired* upload_required, 197 UploadRequired* upload_required,
198 const AutoFillMetrics& metric_logger) { 198 const AutoFillMetrics& metric_logger) {
199 metric_logger.Log(AutoFillMetrics::QUERY_RESPONSE_RECEIVED); 199 metric_logger.Log(AutoFillMetrics::QUERY_RESPONSE_RECEIVED);
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 } else { 427 } else {
428 buzz::XmlElement *field_element = new buzz::XmlElement( 428 buzz::XmlElement *field_element = new buzz::XmlElement(
429 buzz::QName(kXMLElementField)); 429 buzz::QName(kXMLElementField));
430 field_element->SetAttr(buzz::QName(kAttributeSignature), 430 field_element->SetAttr(buzz::QName(kAttributeSignature),
431 field->FieldSignature()); 431 field->FieldSignature());
432 encompassing_xml_element->AddElement(field_element); 432 encompassing_xml_element->AddElement(field_element);
433 } 433 }
434 } 434 }
435 return true; 435 return true;
436 } 436 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698