namespace android
{
-
WebAutoFill::WebAutoFill()
: mQueryId(1)
, mWebViewCore(0)
WebAutoFill::~WebAutoFill()
{
- mQueryMap.clear();
+ cleanUpQueryMap();
mUniqueIdMap.clear();
}
+void WebAutoFill::cleanUpQueryMap()
+{
+ for (AutoFillQueryFormDataMap::iterator it = mQueryMap.begin(); it != mQueryMap.end(); it++)
+ delete it->second;
+ mQueryMap.clear();
+}
+
void WebAutoFill::searchDocument(WebCore::Frame* frame)
{
if (!enabled())
init();
- mQueryMap.clear();
+ cleanUpQueryMap();
mUniqueIdMap.clear();
mForms.clear();
mQueryId = 1;
}
// Get the FormField from the Node.
- webkit_glue::FormField formField;
- FormManager::HTMLFormControlElementToFormField(formFieldElement, FormManager::EXTRACT_NONE, &formField);
- formField.set_label(FormManager::LabelForElement(*formFieldElement));
+ webkit_glue::FormField* formField = new webkit_glue::FormField;
+ FormManager::HTMLFormControlElementToFormField(formFieldElement, FormManager::EXTRACT_NONE, formField);
+ formField->set_label(FormManager::LabelForElement(*formFieldElement));
webkit_glue::FormData* form = new webkit_glue::FormData;
mFormManager->FindFormWithFormControlElement(formFieldElement, FormManager::REQUIRE_AUTOCOMPLETE, form);
- mQueryMap[mQueryId] = form;
+ mQueryMap[mQueryId] = new FormDataAndField(form, formField);
- bool suggestions = mAutoFillManager->GetAutoFillSuggestions(false, formField);
+ bool suggestions = mAutoFillManager->GetAutoFillSuggestions(*form, *formField);
mQueryId++;
if (!suggestions) {
ASSERT(mWebViewCore);
if (!enabled())
return;
- webkit_glue::FormData* form = mQueryMap[queryId];
+ webkit_glue::FormData* form = mQueryMap[queryId]->form();
+ webkit_glue::FormField* field = mQueryMap[queryId]->field();
ASSERT(form);
+ ASSERT(field);
+
AutoFillQueryToUniqueIdMap::iterator iter = mUniqueIdMap.find(queryId);
if (iter == mUniqueIdMap.end()) {
// The user has most likely tried to AutoFill the form again without
// but stop here to be certain.
return;
}
- mAutoFillManager->FillAutoFillFormData(queryId, *form, iter->second);
+ mAutoFillManager->FillAutoFillFormData(queryId, *form, *field, iter->second);
mUniqueIdMap.erase(iter);
}
class FormManager;
class WebViewCore;
+class FormDataAndField {
+public:
+ FormDataAndField(webkit_glue::FormData* form, webkit_glue::FormField* field)
+ : mForm(form)
+ , mField(field)
+ {
+ }
+
+ webkit_glue::FormData* form() { return mForm.get(); }
+ webkit_glue::FormField* field() { return mField.get(); }
+
+private:
+ OwnPtr<webkit_glue::FormData> mForm;
+ OwnPtr<webkit_glue::FormField> mField;
+};
+
class WebAutoFill : public Noncopyable
{
public:
void init();
void searchDocument(WebCore::Frame*);
void setEmptyProfile();
+ void formsSeenImpl();
+ void cleanUpQueryMap();
OwnPtr<FormManager> mFormManager;
OwnPtr<AutoFillManager> mAutoFillManager;
typedef std::vector<webkit_glue::FormData, std::allocator<webkit_glue::FormData> > FormList;
FormList mForms;
- typedef std::map<int, webkit_glue::FormData*> AutoFillQueryFormDataMap;
+ typedef std::map<int, FormDataAndField*> AutoFillQueryFormDataMap;
AutoFillQueryFormDataMap mQueryMap;
typedef std::map<int, int> AutoFillQueryToUniqueIdMap;