Implement the Data-List of input element
authorbunam.jeon <bunam.jeon@samsung.com>
Fri, 14 Jun 2013 06:46:07 +0000 (15:46 +0900)
committerbunam.jeon <bunam.jeon@samsung.com>
Wed, 21 Aug 2013 08:08:09 +0000 (17:08 +0900)
[Title] Implement the Data-List of input element
[Issue#]
[Problem]
[Cause] Not Implement
[Solution] Implement the Data-List of input element

Change-Id: I650c40811da25429fc979f5f927023a136e6d700

Source/WebKit2/PlatformTizen.cmake
Source/WebKit2/UIProcess/API/efl/PageClientImpl.cpp
Source/WebKit2/UIProcess/API/efl/PageClientImpl.h
Source/WebKit2/UIProcess/API/efl/ewk_view.cpp
Source/WebKit2/UIProcess/API/efl/tizen/AutoFillManager.cpp [moved from Source/WebKit2/UIProcess/API/efl/tizen/FormDataCandidate.cpp with 72% similarity]
Source/WebKit2/UIProcess/API/efl/tizen/AutoFillManager.h [moved from Source/WebKit2/UIProcess/API/efl/tizen/FormDataCandidate.h with 80% similarity]
Source/WebKit2/UIProcess/API/efl/tizen/AutoFillPopup.cpp [moved from Source/WebKit2/UIProcess/API/efl/tizen/FormDataCandidatePopup.cpp with 64% similarity]
Source/WebKit2/UIProcess/API/efl/tizen/AutoFillPopup.edc [moved from Source/WebKit2/UIProcess/API/efl/tizen/FormDataCandidate.edc with 100% similarity]
Source/WebKit2/UIProcess/API/efl/tizen/AutoFillPopup.h [moved from Source/WebKit2/UIProcess/API/efl/tizen/FormDataCandidatePopup.h with 66% similarity]
Source/WebKit2/UIProcess/efl/InputMethodContextEfl.cpp

index 4b27604..841aff3 100755 (executable)
@@ -103,8 +103,8 @@ LIST(APPEND WebKit2StaticForDebug_SOURCES
     UIProcess/API/efl/tizen/EasingUtilities.cpp
     UIProcess/API/efl/tizen/Flick.cpp
     UIProcess/API/efl/tizen/FocusRing.cpp
-    UIProcess/API/efl/tizen/FormDataCandidate.cpp
-    UIProcess/API/efl/tizen/FormDataCandidatePopup.cpp
+    UIProcess/API/efl/tizen/AutoFillManager.cpp
+    UIProcess/API/efl/tizen/AutoFillPopup.cpp
     UIProcess/API/efl/tizen/GestureClient.cpp
     UIProcess/API/efl/tizen/GestureRecognizer.cpp
     UIProcess/API/efl/tizen/InputPicker.cpp
@@ -182,7 +182,7 @@ IF (ENABLE_TIZEN_DRAG_SUPPORT)
 ENDIF ()
 
 IF (ENABLE_TIZEN_WEBKIT2_FORM_DATABASE)
-    SET(FORMDATA_THEME ${THEME_DIR}/FormDataCandidate.edj)
+    SET(FORMDATA_THEME ${THEME_DIR}/AutoFillPopup.edj)
 ENDIF ()
 
 FILE(MAKE_DIRECTORY ${THEME_DIR})
@@ -224,9 +224,9 @@ ENDIF ()
 IF (ENABLE_TIZEN_WEBKIT2_FORM_DATABASE)
     ADD_CUSTOM_COMMAND(
         OUTPUT ${FORMDATA_THEME}
-        COMMAND  ${EDJE_CC_EXECUTABLE} -id ${WEBKIT2_DIR}/UIProcess/API/efl/tizen/images ${WEBKIT2_DIR}/UIProcess/API/efl/tizen/FormDataCandidate.edc ${FORMDATA_THEME}
+        COMMAND  ${EDJE_CC_EXECUTABLE} -id ${WEBKIT2_DIR}/UIProcess/API/efl/tizen/images ${WEBKIT2_DIR}/UIProcess/API/efl/tizen/AutoFillPopup.edc ${FORMDATA_THEME}
         DEPENDS
-            ${WEBKIT2_DIR}/UIProcess/API/efl/tizen/FormDataCandidate.edc
+            ${WEBKIT2_DIR}/UIProcess/API/efl/tizen/AutoFillPopup.edc
     )
     LIST(APPEND WebKit2StaticForDebug_SOURCES ${FORMDATA_THEME})
 ENDIF ()
index 9916c80..e8a0895 100755 (executable)
@@ -135,7 +135,7 @@ PageClientImpl::PageClientImpl(EwkViewImpl* viewImpl)
     m_drag = Drag::create(m_viewImpl);
 #endif
 #if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
-    m_formDataCandidate = FormDataCandidate::create(m_viewImpl);
+    m_autoFillManager = AutoFillManager::create(m_viewImpl);
 #endif
     Ecore_Evas* ee = ecore_evas_ecore_evas_get(evas_object_evas_get(m_viewImpl->view()));
     m_viewportAngle = ecore_evas_rotation_get(ee);
@@ -832,13 +832,17 @@ void PageClientImpl::pageDidRequestRestoreVisibleContentRect(const IntPoint& poi
 #if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
 void PageClientImpl::textChangeInTextField(const String& name, const String& value)
 {
-    if (value == m_formDataCandidate->getCandidateValue()) {
-        m_formDataCandidate->updateCandidateValue(emptyString());
+    if (value == m_autoFillManager->getCandidateValue()) {
+        m_autoFillManager->updateCandidateValue(emptyString());
         return;
     }
 
-    m_formDataCandidate->updateCandidateValue(value);
+#if ENABLE(TIZEN_WEBKIT2_AUTOFILL_PROFILE_FORM)
+    ewk_view_text_change_in_textfield(m_viewImpl->view(), name, value, isInputInForm);
+#else
+    m_autoFillManager->updateCandidateValue(value);
     ewk_view_text_change_in_textfield(m_viewImpl->view(), name, value);
+#endif // TIZEN_WEBKIT2_AUTOFILL_PROFILE_FORM
 }
 #endif
 
@@ -884,7 +888,12 @@ IntRect PageClientImpl::adjustVisibleContentRect(IntRect visibleContentRect, flo
 
 void PageClientImpl::setVisibleContentRect(const IntRect& newRect, float newScale, const FloatPoint& trajectory)
 {
-#if OS(TIZEN)
+#if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
+    if(isShowingAutoFillPopup())
+        hideAutoFillPopup();
+#endif
+
+#if ENABLE(TIZEN_SCREEN_READER)
     IntPoint previousScrollPosition(scrollPosition());
     float previousScale = m_scaleFactor;
 #endif
@@ -1304,24 +1313,24 @@ void PageClientImpl::startDrag(const DragData& dragData, PassRefPtr<ShareableBit
 #endif
 
 #if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
-bool PageClientImpl::isShowingFormDataCandidate()
+bool PageClientImpl::isShowingAutoFillPopup()
 {
-    return m_formDataCandidate->isShowing();
+    return m_autoFillManager->isShowing();
 }
 
-void PageClientImpl::updateFormDataCandidate(const Vector<String>& data)
+void PageClientImpl::updateAutoFillPopup(const Vector<AutoFillPopupItem>& data)
 {
-    m_formDataCandidate->updateFormData(data);
+    m_autoFillManager->updateFormData(data);
 }
 
-void PageClientImpl::hideFormDataCandidate()
+void PageClientImpl::hideAutoFillPopup()
 {
-    m_formDataCandidate->hide();
+    m_autoFillManager->hide();
 }
 
-void PageClientImpl::showFormDataCandidate(const WebCore::IntRect& rect)
+void PageClientImpl::showAutoFillPopup(const WebCore::IntRect& rect)
 {
-    m_formDataCandidate->show(rect);
+    m_autoFillManager->show(rect);
 }
 #endif
 
index d6ed801..7b7f74b 100755 (executable)
@@ -49,7 +49,7 @@
 #include "Drag.h"
 #endif
 #if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
-#include "FormDataCandidate.h"
+#include "AutoFillManager.h"
 #endif
 using std::numeric_limits;
 #endif // #if OS(TIZEN)
@@ -75,7 +75,7 @@ class Drag;
 #endif
 
 #if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
-class FormDataCandidate;
+class AutoFillManager;
 #endif
 
 class PageClientImpl : public PageClient {
@@ -257,10 +257,10 @@ public:
 #endif
 
 #if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
-    bool isShowingFormDataCandidate();
-    void updateFormDataCandidate(const Vector<String>& data);
-    void hideFormDataCandidate();
-    void showFormDataCandidate(const WebCore::IntRect& rect);
+    bool isShowingAutoFillPopup();
+    void updateAutoFillPopup(const Vector<AutoFillPopupItem>& data);
+    void hideAutoFillPopup();
+    void showAutoFillPopup(const WebCore::IntRect& rect);
 #endif
 
 #if ENABLE(TIZEN_PRERENDERING_FOR_ROTATION)
@@ -443,7 +443,7 @@ protected:
     OwnPtr<Drag> m_drag;
 #endif
 #if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
-    OwnPtr<FormDataCandidate> m_formDataCandidate;
+    OwnPtr<AutoFillManager> m_autoFillManager;
 #endif
     bool m_suspendPainting;
     bool m_suspendResource;
index e217387..e580674 100755 (executable)
@@ -159,6 +159,10 @@ namespace EGL {
 #include "WKDictionary.h"
 #include "ewk_web_application_icon_data_private.h"
 #endif
+
+#if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
+#include "AutoFillPopup.h"
+#endif
 #endif // #if OS(TIZEN)
 
 using namespace WebKit;
@@ -743,7 +747,7 @@ Eina_Bool _ewk_view_smart_formdata_candidate_show(Ewk_View_Smart_Data* smartData
 {
     EWK_VIEW_IMPL_GET_OR_RETURN(smartData, impl, false);
 
-    impl->pageClient->showFormDataCandidate(IntRect(x, y, w, h));
+    impl->pageClient->showAutoFillPopup(IntRect(x, y, w, h));
 
     return true;
 }
@@ -752,7 +756,7 @@ Eina_Bool _ewk_view_smart_formdata_candidate_hide(Ewk_View_Smart_Data* smartData
 {
     EWK_VIEW_IMPL_GET_OR_RETURN(smartData, impl, false);
 
-    impl->pageClient->hideFormDataCandidate();
+    impl->pageClient->hideAutoFillPopup();
 
     return true;
 }
@@ -761,13 +765,13 @@ Eina_Bool _ewk_view_smart_formdata_candidate_update_data(Ewk_View_Smart_Data* sm
 {
     EWK_VIEW_IMPL_GET_OR_RETURN(smartData, impl, false);
 
-    Vector<String> formData;
+    Vector<AutoFillPopupItem> formData;
     Eina_List* list;
     void* data;
     EINA_LIST_FOREACH(dataList, list, data)
-        formData.append(String::fromUTF8(static_cast<char*>(data)));
+        formData.append(AutoFillPopupItem(String::fromUTF8(static_cast<char*>(data)), candidateAutoFill));
 
-    impl->pageClient->updateFormDataCandidate(formData);
+    impl->pageClient->updateAutoFillPopup(formData);
 
     return true;
 }
@@ -776,7 +780,7 @@ Eina_Bool _ewk_view_smart_formdata_candidate_is_showing(Ewk_View_Smart_Data* sma
 {
     EWK_VIEW_IMPL_GET_OR_RETURN(smartData, impl, false);
 
-    return impl->pageClient->isShowingFormDataCandidate();
+    return impl->pageClient->isShowingAutoFillPopup();
 }
 #endif
 
@@ -1628,37 +1632,88 @@ Ewk_Back_Forward_List* ewk_view_back_forward_list_get(const Evas_Object* ewkView
 }
 
 #if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
+#if ENABLE(TIZEN_WEBKIT2_AUTOFILL_PROFILE_FORM)
+void ewk_view_text_change_in_textfield(Evas_Object* ewkView, const String& name, const String& value, bool isInputInForm)
+#else
 void ewk_view_text_change_in_textfield(Evas_Object* ewkView, const String& name, const String& value)
+#endif // TIZEN_WEBKIT2_AUTOFILL_PROFILE_FORM
 {
     EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData);
     EWK_VIEW_IMPL_GET_OR_RETURN(smartData, impl);
 
-    if (!ewk_settings_form_candidate_data_enabled_get(ewk_view_settings_get(ewkView)))
-        return;
-
     if (value.isEmpty()) {
         if(smartData->api->formdata_candidate_is_showing(smartData))
             smartData->api->formdata_candidate_hide(smartData);
         return;
     }
 
-    Vector<String> popupCandidates;
-    ewk_view_form_candidate_data_get(ewkView, name, popupCandidates);
-    std::sort(popupCandidates.begin(), popupCandidates.end(), WTF::codePointCompareLessThan);
+    Eina_List* optionList = 0;
+    Vector<String> popupOptionLists = impl->pageProxy->getFocusedInputElementDataList();
+    std::sort(popupOptionLists.begin(), popupOptionLists.end(), WTF::codePointCompareLessThan);
+    for (size_t i = 0; i < popupOptionLists.size(); ++i) {
+        if (popupOptionLists[i].startsWith(value, false))
+            optionList = eina_list_append(optionList, eina_stringshare_add(popupOptionLists[i].utf8().data()));
+    }
 
     Eina_List* candidateList = 0;
-    for (size_t i = 0; i < popupCandidates.size(); ++i) {
-        if (popupCandidates[i].startsWith(value, false))
-            candidateList = eina_list_append(candidateList, eina_stringshare_add(popupCandidates[i].utf8().data()));
+    if (ewk_settings_form_candidate_data_enabled_get(ewk_view_settings_get(ewkView))) {
+        Vector<String> popupCandidates;
+        ewk_view_form_candidate_data_get(ewkView, name, popupCandidates);
+        std::sort(popupCandidates.begin(), popupCandidates.end(), WTF::codePointCompareLessThan);
+
+        for (size_t i = 0; i < popupCandidates.size(); ++i) {
+            if (popupCandidates[i].startsWith(value, false))
+                candidateList = eina_list_append(candidateList, eina_stringshare_add(popupCandidates[i].utf8().data()));
+        }
+    }
+
+    Vector<AutoFillPopupItem> formData;
+
+#if ENABLE(TIZEN_WEBKIT2_AUTOFILL_PROFILE_FORM)
+    if (ewk_settings_form_profile_data_enabled_get(ewk_view_settings_get(ewkView)) && isInputInForm) {
+        Vector<std::pair<int, std::pair<String, String> > > profileFormCandidates;
+        ewk_view_profile_form_candidate_data_get(ewkView, name, value, profileFormCandidates);
+        for (size_t ittr = 0; ittr < profileFormCandidates.size(); ++ittr) {
+            std::pair<int, std::pair<String, String> > fullData(profileFormCandidates[ittr]);
+            std::pair<String, String> dispStrings(fullData.second);
+            formData.append(AutoFillPopupItem(dispStrings.first, dispStrings.second, fullData.first, profileAutoFill));
+        }
+    }
+#endif
+
+    Eina_List* list;
+    void* data;
+    if (eina_list_count(optionList)) {
+        EINA_LIST_FOREACH(optionList, list, data)
+            formData.append(AutoFillPopupItem(String::fromUTF8(static_cast<char*>(data)), dataListAutoFill));
+    }
+
+    if (eina_list_count(candidateList) && ewk_settings_form_candidate_data_enabled_get(ewk_view_settings_get(ewkView))) {
+        EINA_LIST_FOREACH(candidateList, list, data)
+            formData.append(AutoFillPopupItem(String::fromUTF8(static_cast<char*>(data)), candidateAutoFill));
     }
 
-    if (!eina_list_count(candidateList)) {
+    if (!formData.size()) {
         if(smartData->api->formdata_candidate_is_showing(smartData))
             smartData->api->formdata_candidate_hide(smartData);
         return;
     }
 
-    smartData->api->formdata_candidate_update_data(smartData, candidateList);
+    if (formData[0].itemtype == profileAutoFill)
+        impl->pageClient->updateAutoFillPopup(formData);
+    else {
+        Eina_List* autoFillList = 0;
+
+        if (eina_list_count(optionList)) {
+            EINA_LIST_FOREACH(optionList, list, data)
+                autoFillList = eina_list_append(autoFillList, eina_stringshare_add(static_cast<char*>(data)));
+        }
+        if (eina_list_count(candidateList)) {
+            EINA_LIST_FOREACH(candidateList, list, data)
+                autoFillList = eina_list_append(autoFillList, eina_stringshare_add(static_cast<char*>(data)));
+        }
+        smartData->api->formdata_candidate_update_data(smartData, autoFillList);
+    }
 
     IntRect inputFieldRect = impl->transformToScene().mapRect(impl->pageClient->focusedNodeRect());
     smartData->api->formdata_candidate_show(smartData, inputFieldRect.x(), inputFieldRect.y(), inputFieldRect.width(), inputFieldRect.height());
@@ -26,7 +26,7 @@
 #include "config.h"
 
 #if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
-#include "FormDataCandidate.h"
+#include "AutoFillManager.h"
 
 #include "EwkViewImpl.h"
 #include <wtf/text/CString.h>
@@ -35,38 +35,45 @@ using namespace WebCore;
 
 namespace WebKit {
 
-FormDataCandidate::FormDataCandidate(EwkViewImpl* viewImpl)
+AutoFillManager::AutoFillManager(EwkViewImpl* viewImpl)
     : m_viewImpl(viewImpl)
     , m_isShowing(false)
 {
-    m_popup = new FormDataCandidatePopup(m_viewImpl->view(), EDJE_DIR"/FormDataCandidate.edj", "formdata_list", this);
+    m_popup = new AutoFillPopup(m_viewImpl->view(), EDJE_DIR"/AutoFillPopup.edj", "formdata_list", this);
 }
 
-FormDataCandidate::~FormDataCandidate()
+AutoFillManager::~AutoFillManager()
 {
     delete m_popup;
 }
 
-void FormDataCandidate::hide()
+void AutoFillManager::hide()
 {
     m_isShowing = false;
     m_popup->hide();
 }
 
-void FormDataCandidate::updateFormData(const Vector<String>& data) {
-    m_popup->setFormData(data);
+void AutoFillManager::updateFormData(const Vector<AutoFillPopupItem>& data) {
+    m_popup->setAutoFillData(data);
 }
 
-void FormDataCandidate::show(const WebCore::IntRect& rect)
+void AutoFillManager::show(const WebCore::IntRect& rect)
 {
     m_isShowing = true;
     m_nodeRect = rect;
-    m_popup->updateFormDataPopup(m_nodeRect, m_viewImpl->page()->scaleFactor());
+    m_popup->updateAutoFillPopup(m_nodeRect);
     m_popup->move(m_nodeRect);
     m_popup->show();
 }
 
-void FormDataCandidate::setValueForInputElement(String& value)
+#if ENABLE(TIZEN_WEBKIT2_AUTOFILL_PROFILE_FORM)
+void AutoFillManager::setValueForProfile(int& id)
+{
+    ewk_view_profile_form_candidate_set_to_form(m_viewImpl->view(), id);
+    hide();
+}
+#endif
+void AutoFillManager::setValueForInputElement(String& value)
 {
     m_viewImpl->page()->setFocusedInputElementValue(value);
     hide();
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef FormDataCandidate_h
-#define FormDataCandidate_h
+#ifndef AutoFillManager_h
+#define AutoFillManager_h
 
 #if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
 
-#include "FormDataCandidatePopup.h"
+#include "AutoFillPopup.h"
 #include "WebPageProxy.h"
 #include <Evas.h>
 #include <WebCore/IntRect.h>
@@ -38,29 +38,32 @@ class EwkViewImpl;
 
 namespace WebKit {
 
-class FormDataCandidatePopup;
+class AutoFillPopup;
 
-class FormDataCandidate {
+class AutoFillManager {
 public:
-    static PassOwnPtr<FormDataCandidate> create(EwkViewImpl* viewImpl)
+    static PassOwnPtr<AutoFillManager> create(EwkViewImpl* viewImpl)
     {
-        return adoptPtr(new FormDataCandidate(viewImpl));
+        return adoptPtr(new AutoFillManager(viewImpl));
     }
-    ~FormDataCandidate();
+    ~AutoFillManager();
 
     bool isShowing() { return m_isShowing; }
     void hide();
-    void updateFormData(const Vector<String>&);
+    void updateFormData(const Vector<AutoFillPopupItem>&);
     void show(const WebCore::IntRect&);
+#if ENABLE(TIZEN_WEBKIT2_AUTOFILL_PROFILE_FORM)
+    void setValueForProfile(int&);
+#endif
     void setValueForInputElement(String&);
     void updateCandidateValue(const String& value) { m_candidateValue = value; }
     String getCandidateValue() { return m_candidateValue; }
 
 private:
-    explicit FormDataCandidate(EwkViewImpl*);
+    explicit AutoFillManager(EwkViewImpl*);
 
     EwkViewImpl* m_viewImpl;
-    FormDataCandidatePopup* m_popup;
+    AutoFillPopup* m_popup;
     bool m_isShowing;
     WebCore::IntRect m_nodeRect;
     String m_candidateValue;
@@ -26,7 +26,7 @@
 #include "config.h"
 
 #if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
-#include "FormDataCandidatePopup.h"
+#include "AutoFillPopup.h"
 
 #include <Edje.h>
 #include <Elementary.h>
@@ -36,29 +36,44 @@ using namespace WebCore;
 
 namespace WebKit {
 static Elm_Genlist_Item_Class* m_listItem = 0;
-static Vector<String> m_formdata;
+static Vector<AutoFillPopupItem> m_autoFillData;
 
 static char* getItemLabel(void* data, Evas_Object* obj, const char* part)
 {
-    char* label = new char[m_formdata[(int)data].length()];
-    strcpy(label, m_formdata[(int)data].utf8().data());
+    char* label;
+    String lebelText;
+    if (m_autoFillData[(int)data].itemtype == profileAutoFill) {
+        lebelText = String::fromUTF8(m_autoFillData[(int)data].maintext.utf8().data()) + "("
+            + String::fromUTF8(m_autoFillData[(int)data].subtext.utf8().data()) + ")";
+    } else
+        lebelText = String::fromUTF8(m_autoFillData[(int)data].maintext.utf8().data());
+
+    label = new char[lebelText.utf8().length()+1];
+    strcpy(label, lebelText.utf8().data());
+
     return label;
 }
 static void itemSelectCb(void* data, Evas_Object* obj, void* event_info)
 {
-    int index = (int)elm_object_item_data_get(static_cast<Elm_Object_Item*>(event_info));
+    int index = elm_genlist_item_index_get(elm_genlist_selected_item_get(obj));
 
-    FormDataCandidatePopup* candidatePopup = static_cast<FormDataCandidatePopup*>(data);
-    candidatePopup->m_formDataCandidate->setValueForInputElement(m_formdata[index]);
+     AutoFillPopup* autoFillPopup = static_cast<AutoFillPopup*>(data);
+#if ENABLE(TIZEN_WEBKIT2_AUTOFILL_PROFILE_FORM)
+    if (m_autoFillData[index].itemtype == profileAutoFill) {
+        autoFillPopup->m_autoFillManager->setValueForProfile(m_autoFillData[index].id);
+        return;
+    }
+#endif
+    autoFillPopup->m_autoFillManager->setValueForInputElement(m_autoFillData[index].maintext);
 }
 
-void FormDataCandidatePopup::setFormData(const Vector<String>& data) {
-    m_formdata = data;
+void AutoFillPopup::setAutoFillData(const Vector<AutoFillPopupItem>& data) {
+    m_autoFillData = data;
 }
 
-FormDataCandidatePopup::FormDataCandidatePopup(Evas_Object* object, const String& theme, const String& path, FormDataCandidate* formDataCandidate)
-    : m_formDataCandidate(formDataCandidate)
-    , m_formDataCandidateJob(0)
+AutoFillPopup::AutoFillPopup(Evas_Object* object, const String& theme, const String& path, AutoFillManager* autoFillManager)
+    : m_autoFillManager(autoFillManager)
+    , m_autoFillJob(0)
 {
     m_icon = elm_layout_add(object);
 
@@ -71,36 +86,36 @@ FormDataCandidatePopup::FormDataCandidatePopup(Evas_Object* object, const String
     m_list = elm_genlist_add(m_icon);
 }
 
-FormDataCandidatePopup::~FormDataCandidatePopup()
+AutoFillPopup::~AutoFillPopup()
 {
-    if (m_formDataCandidateJob) {
-        ecore_job_del(m_formDataCandidateJob);
-        m_formDataCandidateJob = 0;
+    if (m_autoFillJob) {
+        ecore_job_del(m_autoFillJob);
+        m_autoFillJob = 0;
     }
 
     if (m_icon)
         evas_object_del(m_icon);
 }
 
-void FormDataCandidatePopup::show()
+void AutoFillPopup::show()
 {
     if (m_icon)
         evas_object_show(m_icon);
 }
 
-void FormDataCandidatePopup::move(const IntRect& inputFieldRect)
+void AutoFillPopup::move(const IntRect& inputFieldRect)
 {
     if (m_icon)
         evas_object_move(m_icon, inputFieldRect.x(), inputFieldRect.y() + inputFieldRect.height());
 }
 
-void FormDataCandidatePopup::hide()
+void AutoFillPopup::hide()
 {
     if (m_icon)
         evas_object_hide(m_icon);
 }
 
-void FormDataCandidatePopup::updateFormDataPopup(const IntRect& inputFieldRect, float scaleFactor)
+void AutoFillPopup::updateAutoFillPopup(const IntRect& inputFieldRect)
 {
     if (m_list)
         elm_genlist_clear(m_list);
@@ -119,23 +134,27 @@ void FormDataCandidatePopup::updateFormDataPopup(const IntRect& inputFieldRect,
         m_listItem->func.del = NULL;
      }
 
-    for (size_t i = 0; i < m_formdata.size(); ++i)
+    for (size_t i = 0; i < m_autoFillData.size(); ++i)
         elm_genlist_item_append(m_list, m_listItem, (void*) i, NULL, ELM_GENLIST_ITEM_NONE, itemSelectCb, (void*)this);
 
-    elm_object_scale_set(m_list, scaleFactor / 2);
+    elm_object_scale_set(m_list, 0.7);
     evas_object_show(m_list);
 
-    int m_listHeight = 112 * m_formdata.size() * (scaleFactor / 2);
+    int m_listHeight = 79 * m_autoFillData.size();
+    int m_listWidth = inputFieldRect.width();
+
+    if(m_listHeight > 237)
+        m_listHeight = 237;
+    if(m_listWidth < 360)
+        m_listWidth = 360;
 
-    if(m_listHeight > 336)
-        m_listHeight = 336;
 
     elm_bg_color_set(m_borderUp, 200, 200, 200);
-    evas_object_size_hint_min_set(m_borderUp, inputFieldRect.width(), 3);
+    evas_object_size_hint_min_set(m_borderUp, m_listWidth, 3);
     evas_object_show(m_borderUp);
 
     elm_bg_color_set(m_borderDown, 200, 200, 200);
-    evas_object_size_hint_min_set(m_borderDown, inputFieldRect.width(), 3);
+    evas_object_size_hint_min_set(m_borderDown, m_listWidth, 3);
     evas_object_show(m_borderDown);
 
     elm_bg_color_set(m_borderLeft, 200, 200, 200);
@@ -152,11 +171,12 @@ void FormDataCandidatePopup::updateFormDataPopup(const IntRect& inputFieldRect,
     elm_object_part_content_set(m_icon, "border_left", m_borderLeft);
     elm_object_part_content_set(m_icon, "border_right", m_borderRight);
 
-    evas_object_size_hint_min_set(m_icon, inputFieldRect.width(), m_listHeight);
-    evas_object_resize(m_icon, inputFieldRect.width(), m_listHeight);
+    evas_object_size_hint_min_set(m_icon, m_listWidth, m_listHeight);
+    evas_object_resize(m_icon, m_listWidth, m_listHeight);
 
     evas_object_propagate_events_set(m_icon, false);
 }
 } // namespace WebKit
 
 #endif // TIZEN_WEBKIT2_FORM_DATABASE
+
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef FormDataCandidatePopup_h
-#define FormDataCandidatePopup_h
+#ifndef AutoFillPopup_h
+#define AutoFillPopup_h
 
 #if ENABLE(TIZEN_WEBKIT2_FORM_DATABASE)
 
-#include "FormDataCandidate.h"
+#include "AutoFillManager.h"
 #include <Ecore.h>
 #include <Evas.h>
 #include <WebCore/IntRect.h>
 
 namespace WebKit {
 
-class FormDataCandidate;
+enum AutoFillItemType {
+    candidateAutoFill,
+    profileAutoFill,
+    dataListAutoFill
+};
+
+struct AutoFillPopupItem {
+    String maintext;
+    String subtext;
+    int id;
+    AutoFillItemType itemtype;
+
+    AutoFillPopupItem(String m, AutoFillItemType t) : maintext(m), itemtype(t) { }
+    AutoFillPopupItem(String m, String s, int i, AutoFillItemType t) : maintext(m), subtext(s), id(i), itemtype(t) { }
+};
 
-class FormDataCandidatePopup {
+class AutoFillManager;
+class AutoFillPopup {
 public:
-    FormDataCandidatePopup(Evas_Object* object, const String& theme, const String& path, FormDataCandidate* formDataCandidate);
-    ~FormDataCandidatePopup();
+    AutoFillPopup(Evas_Object* object, const String& theme, const String& path, AutoFillManager* autoFillManager);
+    ~AutoFillPopup();
 
     void move(const WebCore::IntRect& rect);
     void show();
     void hide();
-    void updateFormDataPopup(const WebCore::IntRect& rect, float scaleFactor);
-    static void setFormData(const Vector<String>&);
+    void updateAutoFillPopup(const WebCore::IntRect& rect);
+    static void setAutoFillData(const Vector<AutoFillPopupItem>&);
 
-    FormDataCandidate* m_formDataCandidate;
+    AutoFillManager* m_autoFillManager;
 private:
 
     Evas_Object* m_icon;
-    Ecore_Job* m_formDataCandidateJob;
+    Ecore_Job* m_autoFillJob;
     Evas_Object* m_list;
 };
 
index 731f3c4..cd58699 100755 (executable)
@@ -675,7 +675,7 @@ void InputMethodContextEfl::showIMFContext(const EditorState& editor, bool isUse
         return;
     }
 
-#if ENABLE(TIZEN_DATALIST_ELEMENT)
+#if !ENABLE(TIZEN_DATALIST_ELEMENT)
     Vector<String> optionList = m_viewImpl->page()->getFocusedInputElementDataList();
     if (optionList.size() > 0) {
         if (editor.selectionIsRange || !evas_object_focus_get(m_viewImpl->view()))