Index: chrome/browser/autofill/autofill_manager.cc |
diff --git a/chrome/browser/autofill/autofill_manager.cc b/chrome/browser/autofill/autofill_manager.cc |
index 6f89173cb7f7b0162df38565f7c05f23797ec344..50b31a00093497e638cafc4eb108acaab9b62248 100644 |
--- a/chrome/browser/autofill/autofill_manager.cc |
+++ b/chrome/browser/autofill/autofill_manager.cc |
@@ -7,6 +7,7 @@ |
#include <limits> |
#include <string> |
+#include "app/l10n_util.h" |
#include "base/basictypes.h" |
#include "base/string16.h" |
#include "base/utf_string_conversions.h" |
@@ -22,6 +23,7 @@ |
#include "chrome/common/chrome_switches.h" |
#include "chrome/common/pref_names.h" |
#include "chrome/common/url_constants.h" |
+#include "grit/generated_resources.h" |
#include "webkit/glue/form_data.h" |
#include "webkit/glue/form_field.h" |
@@ -132,7 +134,7 @@ void AutoFillManager::FormSubmitted(const FormData& form) { |
// Grab a copy of the form data. |
upload_form_structure_.reset(new FormStructure(form)); |
- if (!upload_form_structure_->IsAutoFillable()) |
+ if (!upload_form_structure_->IsAutoFillable(true)) |
return; |
// Determine the possible field types and upload the form structure to the |
@@ -148,8 +150,7 @@ void AutoFillManager::FormsSeen(const std::vector<FormData>& forms) { |
ParseForms(forms); |
} |
-bool AutoFillManager::GetAutoFillSuggestions(int query_id, |
- bool field_autofilled, |
+bool AutoFillManager::GetAutoFillSuggestions(bool field_autofilled, |
const FormField& field) { |
if (!IsAutoFillEnabled()) |
return false; |
@@ -172,7 +173,7 @@ bool AutoFillManager::GetAutoFillSuggestions(int query_id, |
form = *form_iter; |
// Don't send suggestions for forms that aren't auto-fillable. |
- if (!form->IsAutoFillable()) |
+ if (!form->IsAutoFillable(false)) |
continue; |
for (std::vector<AutoFillField*>::const_iterator iter = form->begin(); |
@@ -214,6 +215,30 @@ bool AutoFillManager::GetAutoFillSuggestions(int query_id, |
if (values.empty()) |
return false; |
+ // Don't provide AutoFill suggestions when AutoFill is disabled, but provide a |
+ // warning to the user. |
+ if (!form->IsAutoFillable(true)) { |
+ values.assign( |
+ 1, l10n_util::GetStringUTF16(IDS_AUTOFILL_WARNING_FORM_DISABLED)); |
+ labels.assign(1, string16()); |
+ icons.assign(1, string16()); |
+ unique_ids.assign(1, -1); |
+ host->AutoFillSuggestionsReturned(values, labels, icons, unique_ids); |
+ return true; |
+ } |
+ |
+ // Don't provide credit card suggestions for non-HTTPS pages, but provide a |
+ // warning to the user. |
+ if (!FormIsHTTPS(form) && type.group() == AutoFillType::CREDIT_CARD) { |
+ values.assign( |
+ 1, l10n_util::GetStringUTF16(IDS_AUTOFILL_WARNING_INSECURE_CONNECTION)); |
+ labels.assign(1, string16()); |
+ icons.assign(1, string16()); |
+ unique_ids.assign(1, -1); |
+ host->AutoFillSuggestionsReturned(values, labels, icons, unique_ids); |
+ return true; |
+ } |
+ |
// If the form is auto-filled and the renderer is querying for suggestions, |
// then the user is editing the value of a field. In this case, mimick |
// autocomplete. In particular, don't display labels, as that information is |
@@ -231,8 +256,7 @@ bool AutoFillManager::GetAutoFillSuggestions(int query_id, |
} |
} |
- host->AutoFillSuggestionsReturned( |
- query_id, values, labels, icons, unique_ids); |
+ host->AutoFillSuggestionsReturned(values, labels, icons, unique_ids); |
return true; |
} |
@@ -525,10 +549,6 @@ void AutoFillManager::GetCreditCardSuggestions(FormStructure* form, |
std::vector<string16>* labels, |
std::vector<string16>* icons, |
std::vector<int>* unique_ids) { |
- // Don't return CC suggestions for non-HTTPS pages. |
- if (!FormIsHTTPS(form)) |
- return; |
- |
for (std::vector<CreditCard*>::const_iterator iter = |
personal_data_->credit_cards().begin(); |
iter != personal_data_->credit_cards().end(); ++iter) { |
@@ -599,22 +619,33 @@ void AutoFillManager::FillPhoneNumberField(const AutoFillProfile* profile, |
} |
} |
-void AutoFillManager::ParseForms( |
- const std::vector<webkit_glue::FormData>& forms) { |
- for (std::vector<FormData>::const_iterator iter = |
- forms.begin(); |
+void AutoFillManager::ParseForms(const std::vector<FormData>& forms) { |
+ std::vector<FormStructure *> non_queryable_forms; |
+ for (std::vector<FormData>::const_iterator iter = forms.begin(); |
iter != forms.end(); ++iter) { |
scoped_ptr<FormStructure> form_structure(new FormStructure(*iter)); |
- if (!form_structure->ShouldBeParsed()) |
+ if (!form_structure->ShouldBeParsed(false)) |
continue; |
DeterminePossibleFieldTypes(form_structure.get()); |
- form_structures_.push_back(form_structure.release()); |
+ |
+ // Set aside forms with method GET so that they are not included in the |
+ // query to the server. |
+ if (form_structure->ShouldBeParsed(true)) |
+ form_structures_.push_back(form_structure.release()); |
+ else |
+ non_queryable_forms.push_back(form_structure.release()); |
} |
// If none of the forms were parsed, no use querying the server. |
if (!form_structures_.empty() && !disable_download_manager_requests_) |
download_manager_.StartQueryRequest(form_structures_); |
+ |
+ for (std::vector<FormStructure *>::const_iterator iter = |
+ non_queryable_forms.begin(); |
+ iter != non_queryable_forms.end(); ++iter) { |
+ form_structures_.push_back(*iter); |
+ } |
} |
// When sending IDs (across processes) to the renderer we pack credit card and |