blob: 53000870dea9ff386a4fe5959f33ea316325595c [file] [log] [blame]
/*
* Copyright 2010, The Android Open Source Project
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef WebAutoFill_h
#define WebAutoFill_h
#if ENABLE(WEB_AUTOFILL)
#include "ChromiumIncludes.h"
#include <map>
#include <vector>
#include <wtf/Noncopyable.h>
#include <wtf/OwnPtr.h>
#include <wtf/ThreadingPrimitives.h>
class AutofillManager;
class AutofillProfile;
class AutoFillHost;
namespace WebCore {
class Frame;
class HTMLFormControlElement;
}
namespace android
{
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
{
WTF_MAKE_NONCOPYABLE(WebAutofill);
public:
WebAutofill();
virtual ~WebAutofill();
void formFieldFocused(WebCore::HTMLFormControlElement*);
void fillFormFields(int queryId);
void querySuccessful(const string16& value, const string16& label, int uniqueId);
void fillFormInPage(int queryId, const webkit_glue::FormData& form);
void setWebViewCore(WebViewCore* webViewCore) { mWebViewCore = webViewCore; }
bool enabled() const;
void setProfile(const string16& fullName, const string16& emailAddress, const string16& companyName,
const string16& addressLine1, const string16& addressLine2, const string16& city,
const string16& state, const string16& zipCode, const string16& country, const string16& phoneNumber);
void clearProfiles();
bool updateProfileLabel();
void reset() { mLastSearchDomVersion = 0; }
private:
void init();
void searchDocument(WebCore::Frame*);
void setEmptyProfile();
void formsSeenImpl();
void cleanUpQueryMap();
OwnPtr<FormManager> mFormManager;
OwnPtr<AutofillManager> mAutofillManager;
OwnPtr<AutoFillHost> mAutofillHost;
OwnPtr<TabContents> mTabContents;
OwnPtr<AutofillProfile> mAutofillProfile;
typedef std::vector<webkit_glue::FormData, std::allocator<webkit_glue::FormData> > FormList;
FormList mForms;
typedef std::map<int, FormDataAndField*> AutofillQueryFormDataMap;
AutofillQueryFormDataMap mQueryMap;
typedef std::map<int, int> AutofillQueryToUniqueIdMap;
AutofillQueryToUniqueIdMap mUniqueIdMap;
int mQueryId;
WebViewCore* mWebViewCore;
unsigned mLastSearchDomVersion;
WTF::Mutex mFormsSeenMutex; // Guards mFormsSeenCondition and mParsingForms.
WTF::ThreadCondition mFormsSeenCondition;
bool volatile mParsingForms;
};
}
DISABLE_RUNNABLE_METHOD_REFCOUNT(android::WebAutofill);
#endif // ENABLE(WEB_AUTOFILL)
#endif // WebAutoFill_h