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

Unified Diff: chrome/browser/autofill/autofill_manager.cc

Issue 3226001: Detecting form locale (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: Unit test for top websites Created 10 years, 3 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
« no previous file with comments | « chrome/browser/autofill/autofill_manager.h ('k') | chrome/browser/autofill/autofill_manager_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/autofill/autofill_manager.cc
diff --git a/chrome/browser/autofill/autofill_manager.cc b/chrome/browser/autofill/autofill_manager.cc
index 2cddabc160f5685523910f698e64bb3845d4b93e..29910e42de5508a89f27de5c5e8eba56de9277c5 100644
--- a/chrome/browser/autofill/autofill_manager.cc
+++ b/chrome/browser/autofill/autofill_manager.cc
@@ -19,6 +19,8 @@
#include "chrome/browser/renderer_host/render_view_host.h"
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/common/notification_source.h"
+#include "chrome/common/notification_service.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
#include "webkit/glue/form_data.h"
@@ -100,6 +102,7 @@ AutoFillManager::AutoFillManager(TabContents* tab_contents)
: tab_contents_(tab_contents),
personal_data_(NULL),
download_manager_(tab_contents_->profile()),
+ locale_model_(tab_contents_),
disable_download_manager_requests_(false) {
DCHECK(tab_contents);
@@ -107,10 +110,15 @@ AutoFillManager::AutoFillManager(TabContents* tab_contents)
personal_data_ =
tab_contents_->profile()->GetOriginalProfile()->GetPersonalDataManager();
download_manager_.SetObserver(this);
+ notification_registrar_.Add(this, NotificationType::TAB_LANGUAGE_DETERMINED,
+ Source<TabContents>(tab_contents_));
}
AutoFillManager::~AutoFillManager() {
download_manager_.SetObserver(NULL);
+ notification_registrar_.Remove(this,
+ NotificationType::TAB_LANGUAGE_DETERMINED,
+ Source<TabContents>(tab_contents_));
}
// static
@@ -145,6 +153,8 @@ void AutoFillManager::FormSubmitted(const FormData& form) {
// Grab a copy of the form data.
upload_form_structure_.reset(new FormStructure(form));
+ if (locale_model_.tab_language_determined())
+ locale_model_.UpdateLocale(upload_form_structure_.get());
if (!upload_form_structure_->IsAutoFillable())
return;
@@ -375,6 +385,7 @@ void AutoFillManager::ShowAutoFillDialog() {
void AutoFillManager::Reset() {
upload_form_structure_.reset();
form_structures_.reset();
+ locale_model_.set_tab_language_determined(false);
}
void AutoFillManager::OnLoadedAutoFillHeuristics(
@@ -396,6 +407,25 @@ void AutoFillManager::OnHeuristicsRequestError(
int http_error) {
}
+void AutoFillManager::Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ if (type != NotificationType::TAB_LANGUAGE_DETERMINED) {
+ NOTREACHED();
+ return;
+ }
+
+ DCHECK(source == Source<TabContents>(tab_contents_));
+
+ // Now that the tab language is known, update the locales of the forms we've
+ // seen.
+ locale_model_.set_tab_language_determined(true);
+ for (std::vector<FormStructure*>::iterator it = form_structures_.begin();
+ it != form_structures_.end(); ++it) {
+ locale_model_.UpdateLocale(*it);
+ }
+}
+
bool AutoFillManager::IsAutoFillEnabled() const {
PrefService* prefs = tab_contents_->profile()->GetPrefs();
@@ -475,7 +505,10 @@ AutoFillManager::AutoFillManager()
: tab_contents_(NULL),
personal_data_(NULL),
download_manager_(NULL),
+ locale_model_(NULL),
disable_download_manager_requests_(false) {
+ notification_registrar_.Add(this, NotificationType::TAB_LANGUAGE_DETERMINED,
+ Source<TabContents>(tab_contents_));
}
AutoFillManager::AutoFillManager(TabContents* tab_contents,
@@ -483,8 +516,11 @@ AutoFillManager::AutoFillManager(TabContents* tab_contents,
: tab_contents_(tab_contents),
personal_data_(personal_data),
download_manager_(NULL),
+ locale_model_(tab_contents),
disable_download_manager_requests_(false) {
DCHECK(tab_contents);
+ notification_registrar_.Add(this, NotificationType::TAB_LANGUAGE_DETERMINED,
+ Source<TabContents>(tab_contents_));
}
void AutoFillManager::GetProfileSuggestions(FormStructure* form,
@@ -772,14 +808,16 @@ 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();
+ 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())
continue;
DeterminePossibleFieldTypes(form_structure.get());
+ if (locale_model_.tab_language_determined())
+ locale_model_.UpdateLocale(form_structure.get());
+
form_structures_.push_back(form_structure.release());
}
« no previous file with comments | « chrome/browser/autofill/autofill_manager.h ('k') | chrome/browser/autofill/autofill_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698