diff options
author | Ben Murdoch <benm@google.com> | 2010-10-13 04:47:15 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-10-13 04:47:15 -0700 |
commit | a8dc96a2bf5512decc072f69093f006739c04fd2 (patch) | |
tree | 0526857dbd4192d1749a55fb7c72c8854b6beb78 | |
parent | f7615104ff13b813eb020dc71b09b3803f46b699 (diff) | |
parent | 81feb0e216184fe2c8d13ef52dd678925cc4ad77 (diff) | |
download | external_webkit-a8dc96a2bf5512decc072f69093f006739c04fd2.zip external_webkit-a8dc96a2bf5512decc072f69093f006739c04fd2.tar.gz external_webkit-a8dc96a2bf5512decc072f69093f006739c04fd2.tar.bz2 |
Merge "Sync autofill profile data from java."
-rw-r--r-- | WebKit/android/WebCoreSupport/autofill/WebAutoFill.cpp | 35 | ||||
-rw-r--r-- | WebKit/android/WebCoreSupport/autofill/WebAutoFill.h | 4 | ||||
-rw-r--r-- | WebKit/android/jni/WebCoreJni.cpp | 16 | ||||
-rw-r--r-- | WebKit/android/jni/WebCoreJni.h | 5 | ||||
-rw-r--r-- | WebKit/android/jni/WebSettings.cpp | 42 |
5 files changed, 78 insertions, 24 deletions
diff --git a/WebKit/android/WebCoreSupport/autofill/WebAutoFill.cpp b/WebKit/android/WebCoreSupport/autofill/WebAutoFill.cpp index aff1e2f..ce0a455 100644 --- a/WebKit/android/WebCoreSupport/autofill/WebAutoFill.cpp +++ b/WebKit/android/WebCoreSupport/autofill/WebAutoFill.cpp @@ -57,26 +57,10 @@ WebAutoFill::WebAutoFill() AndroidURLRequestContextGetter::Get()->SetURLRequestContextGetterFunction(&WebRequestContext::GetAndroidContext); AndroidURLRequestContextGetter::Get()->SetIOThread(WebUrlLoaderClient::ioThread()); - TabContents* tabContents = new TabContents(); - mAutoFillManager = new AutoFillManager(tabContents); - - // FIXME: For testing use a precanned profile. This should come from Java land! - mAutoFillProfile = new AutoFillProfile(); - mAutoFillProfile->SetInfo(AutoFillType(NAME_FULL), string16(ASCIIToUTF16("John Smith"))); - mAutoFillProfile->SetInfo(AutoFillType(EMAIL_ADDRESS), string16(ASCIIToUTF16("jsmith@gmail.com"))); - mAutoFillProfile->SetInfo(AutoFillType(ADDRESS_HOME_LINE1), string16(ASCIIToUTF16("123 Fake Street"))); - mAutoFillProfile->SetInfo(AutoFillType(ADDRESS_HOME_LINE2), string16(ASCIIToUTF16("Somewhere"))); - mAutoFillProfile->SetInfo(AutoFillType(ADDRESS_HOME_CITY), string16(ASCIIToUTF16("Faketown"))); - mAutoFillProfile->SetInfo(AutoFillType(ADDRESS_HOME_STATE), string16(ASCIIToUTF16("CA"))); - mAutoFillProfile->SetInfo(AutoFillType(ADDRESS_HOME_COUNTRY), string16(ASCIIToUTF16("Germany"))); - mAutoFillProfile->SetInfo(AutoFillType(ADDRESS_HOME_ZIP), string16(ASCIIToUTF16("AB12 3DE"))); - mAutoFillProfile->SetInfo(AutoFillType(PHONE_HOME_WHOLE_NUMBER), string16(ASCIIToUTF16("0123456789"))); - - std::vector<AutoFillProfile> profiles; - profiles.push_back(*mAutoFillProfile); - tabContents->profile()->GetPersonalDataManager()->SetProfiles(&profiles); + mTabContents = new TabContents(); + mAutoFillManager = new AutoFillManager(mTabContents.get()); mAutoFillHost = new AutoFillHostAndroid(this); - tabContents->SetAutoFillHost(mAutoFillHost.get()); + mTabContents->SetAutoFillHost(mAutoFillHost.get()); } WebAutoFill::~WebAutoFill() @@ -183,6 +167,19 @@ bool WebAutoFill::enabled() const return page ? page->settings()->autoFillEnabled() : false; } +void WebAutoFill::setProfile(const string16& fullName, const string16& emailAddress) +{ + AutoFillProfile autoFillProfile; + + // Constants for AutoFill field types are found in external/chromium/chrome/browser/autofill/field_types.h. + autoFillProfile.SetInfo(AutoFillType(NAME_FULL), fullName); + autoFillProfile.SetInfo(AutoFillType(EMAIL_ADDRESS), emailAddress); + + std::vector<AutoFillProfile> profiles; + profiles.push_back(autoFillProfile); + mTabContents->profile()->GetPersonalDataManager()->SetProfiles(&profiles); +} + } #endif diff --git a/WebKit/android/WebCoreSupport/autofill/WebAutoFill.h b/WebKit/android/WebCoreSupport/autofill/WebAutoFill.h index c1226ed..fabd3bf 100644 --- a/WebKit/android/WebCoreSupport/autofill/WebAutoFill.h +++ b/WebKit/android/WebCoreSupport/autofill/WebAutoFill.h @@ -63,11 +63,13 @@ public: void setWebViewCore(WebViewCore* webViewCore) { mWebViewCore = webViewCore; } bool enabled() const; + void setProfile(const string16& fullName, const string16& emailAddress); + private: OwnPtr<FormManager> mFormManager; OwnPtr<AutoFillManager> mAutoFillManager; - OwnPtr<AutoFillProfile> mAutoFillProfile; OwnPtr<AutoFillHost> mAutoFillHost; + OwnPtr<TabContents> mTabContents; typedef std::vector<webkit_glue::FormData, std::allocator<webkit_glue::FormData> > FormList; FormList mForms; diff --git a/WebKit/android/jni/WebCoreJni.cpp b/WebKit/android/jni/WebCoreJni.cpp index a785f41..dd15971 100644 --- a/WebKit/android/jni/WebCoreJni.cpp +++ b/WebKit/android/jni/WebCoreJni.cpp @@ -71,4 +71,20 @@ WTF::String to_string(JNIEnv* env, jstring str) return ret; } +#if USE(CHROME_NETWORK_STACK) +string16 jstringToString16(JNIEnv* env, jstring jstr) +{ + if (!jstr || !env) + return string16(); + + const char* s = env->GetStringUTFChars(jstr, 0); + if (!s) + return string16(); + string16 str = UTF8ToUTF16(s); + env->ReleaseStringUTFChars(jstr, s); + checkException(env); + return str; +} +#endif + } diff --git a/WebKit/android/jni/WebCoreJni.h b/WebKit/android/jni/WebCoreJni.h index 96ee291..95bdaa0 100644 --- a/WebKit/android/jni/WebCoreJni.h +++ b/WebKit/android/jni/WebCoreJni.h @@ -26,6 +26,7 @@ #ifndef ANDROID_WEBKIT_WEBCOREJNI_H #define ANDROID_WEBKIT_WEBCOREJNI_H +#include "ChromiumIncludes.h" #include "PlatformString.h" #include <jni.h> @@ -72,6 +73,10 @@ bool checkException(JNIEnv* env); // Create a WTF::String object from a jstring object. WTF::String to_string(JNIEnv* env, jstring str); +#if USE(CHROME_NETWORK_STACK) +string16 jstringToString16(JNIEnv* env, jstring jstr); +#endif + } #endif diff --git a/WebKit/android/jni/WebSettings.cpp b/WebKit/android/jni/WebSettings.cpp index 79c4017..f75cf9a 100644 --- a/WebKit/android/jni/WebSettings.cpp +++ b/WebKit/android/jni/WebSettings.cpp @@ -31,6 +31,7 @@ #include "ApplicationCacheStorage.h" #include "BitmapAllocatorAndroid.h" #include "CachedResourceLoader.h" +#include "ChromiumIncludes.h" #include "DatabaseTracker.h" #include "Database.h" #include "Document.h" @@ -126,6 +127,10 @@ struct FieldIds { mPageCacheCapacity = env->GetFieldID(clazz, "mPageCacheCapacity", "I"); #if ENABLE(WEB_AUTOFILL) mAutoFillEnabled = env->GetFieldID(clazz, "mAutoFillEnabled", "Z"); + mAutoFillProfile = env->GetFieldID(clazz, "mAutoFillProfile", "Landroid/webkit/WebSettings$AutoFillProfile;"); + jclass autoFillProfileClass = env->FindClass("android/webkit/WebSettings$AutoFillProfile"); + mAutoFillProfileFullName = env->GetFieldID(autoFillProfileClass, "mFullName", "Ljava/lang/String;"); + mAutoFillProfileEmailAddress = env->GetFieldID(autoFillProfileClass, "mEmailAddress", "Ljava/lang/String;"); #endif LOG_ASSERT(mLayoutAlgorithm, "Could not find field mLayoutAlgorithm"); @@ -235,6 +240,9 @@ struct FieldIds { #endif #if ENABLE(WEB_AUTOFILL) jfieldID mAutoFillEnabled; + jfieldID mAutoFillProfile; + jfieldID mAutoFillProfileFullName; + jfieldID mAutoFillProfileEmailAddress; #endif }; @@ -252,6 +260,25 @@ static void recursiveCleanupForFullLayout(WebCore::RenderObject* obj) recursiveCleanupForFullLayout(n); } +#if ENABLE(WEB_AUTOFILL) +void syncAutoFillProfile(JNIEnv* env, jobject autoFillProfile, WebAutoFill* webAutoFill) +{ + jstring str; + string16 fullName; + string16 emailAddress; + + str = static_cast<jstring>(env->GetObjectField(autoFillProfile, gFieldIds->mAutoFillProfileFullName)); + if (str) + fullName = jstringToString16(env, str); + + str = static_cast<jstring>(env->GetObjectField(autoFillProfile, gFieldIds->mAutoFillProfileEmailAddress)); + if (str) + emailAddress = jstringToString16(env, str); + + webAutoFill->setProfile(fullName, emailAddress); +} +#endif + class WebSettings { public: static void Sync(JNIEnv* env, jobject obj, jint frame) @@ -454,14 +481,21 @@ public: // for forms. bool oldAutoFillSetting = s->autoFillEnabled(); s->setAutoFillEnabled(flag); - if (!oldAutoFillSetting && flag) { - EditorClientAndroid* editorC = static_cast<EditorClientAndroid*>(pFrame->page()->editorClient()); - editorC->getAutoFill()->searchDocument(pFrame->document()); - } + + EditorClientAndroid* editorC = static_cast<EditorClientAndroid*>(pFrame->page()->editorClient()); + WebAutoFill* webAutoFill = editorC->getAutoFill(); + if (!oldAutoFillSetting && flag) + webAutoFill->searchDocument(pFrame->document()); + + // Set the active AutoFillProfile data. + jobject autoFillProfile = env->GetObjectField(obj, gFieldIds->mAutoFillProfile); + if (autoFillProfile) + syncAutoFillProfile(env, autoFillProfile, webAutoFill); #endif } }; + //------------------------------------------------------------- // JNI registration //------------------------------------------------------------- |