add OnUserEventReceivedN(requestId, pArgs);
[framework/osp/web.git] / src / controls / FWebCtrl_WebImpl.cpp
index f01cf0d..46bf5a8 100755 (executable)
 #include <FApp_AppManagerImpl.h>
 #include <FBase_StringConverter.h>
 #include <FCnt_DownloadManagerImpl.h>
+#include <FCnt_ContentManagerImpl.h>
 #include <FGrp_CoordinateSystem.h>
+#include <FGrp_Screen.h>
 #include <FIo_DatabaseImpl.h>
 #include <FIo_NormalFile.h>
+#include <FSys_SystemResource.h>
 #include <FSys_VibratorImpl.h>
 #include <FUi_Control.h>
 #include <FUi_CoordinateSystemUtils.h>
 #include <FUiAnim_EflNode.h>
 #include <FUiAnim_VisualElement.h>
 #include <FUiCtrl_FooterImpl.h>
-#include <FUiCtrl_Form.h>
+#include <FUiCtrl_FormImpl.h>
 #include "FWeb_HistoryItemImpl.h"
 #include "FWebCtrl_AppControlListener.h"
 #include "FWebCtrl_AuthConfirmPopup.h"
 #include "FWebCtrl_AuthenticationChallengeImpl.h"
 #include "FWebCtrl_EflWebkit.h"
+#include "FWebCtrl_FormDataWindow.h"
 #include "FWebCtrl_GeolocationPermissionManagerImpl.h"
 #include "FWebCtrl_HitElementResultImpl.h"
 #include "FWebCtrl_InputPickerPopup.h"
 #include "FWebCtrl_WebEvent.h"
 #include "FWebCtrl_WebEventArg.h"
 #include "FWebCtrl_WebImpl.h"
+#include "FWebCtrl_WebManager.h"
 #include "FWebCtrl_WebPresenter.h"
 #include "FWebCtrl_WebSettingImpl.h"
 
@@ -360,26 +365,12 @@ OnScriptConfirmRequested(Evas_Object* pView, const char* pMessage, void* pUserDa
        _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData);
        String msg(pMessage);
 
-       MessageBox messageBox;
-       r = messageBox.Construct(L"", msg, MSGBOX_STYLE_OKCANCEL);
-       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r));
-
-       int modalResult = 0;
-
-       messageBox.SetOwner(&pImpl->GetPublic());
-
-       r = messageBox.ShowAndWait(modalResult);
-       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r));
-
-       if (modalResult == MSGBOX_RESULT_OK)
-       {
-               ewk_view_javascript_confirm_reply(pView, EINA_TRUE);
-       }
-       else
-       {
-               ewk_view_javascript_confirm_reply(pView, EINA_FALSE);
-       }
+       r = pImpl->ShowUserConfirmPopupAsync(USER_SCRIPT_CONFIRM, pView, msg);
+       SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+       return EINA_TRUE;
 
+CATCH:
+       ewk_view_javascript_confirm_reply(pView, EINA_FALSE);
        return EINA_TRUE;
 }
 
@@ -391,22 +382,13 @@ OnScriptPromptRequested(Evas_Object* pView, const char* pMessage, const char* pD
 
        result r = E_SUCCESS;
        _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData);
+
        String msg(pMessage);
        String defVal(pDefaultValue);
 
-       std::unique_ptr< _PromptPopup > pPromptPopup(new (std::nothrow) _PromptPopup());
-       SysTryCatch(NID_WEB_CTRL, pPromptPopup.get(), , E_OUT_OF_MEMORY, "Memory allocation failed.");
-
-       r = pPromptPopup->Construct(msg, defVal, pView);
-       SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
-
-       pPromptPopup->SetOwner(&pImpl->GetPublic());
-
-       r = pPromptPopup->ShowPopup();
+       r = pImpl->ShowPromptPopup(msg, defVal);
        SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
 
-       pPromptPopup.release();
-
        return EINA_TRUE;
 
 CATCH:
@@ -423,6 +405,8 @@ OnCertificateRequested(void* pUserData, Evas_Object* pView, void* pEventInfo)
        Ewk_Certificate_Policy_Decision* pPolicy = reinterpret_cast< Ewk_Certificate_Policy_Decision* >(pEventInfo);
        SysAssertf(pImpl && pPolicy, "Failed to request");
 
+       _Web* pWebCore = dynamic_cast< _Web* >(&(pImpl->GetCore()));
+
        switch (pImpl->GetSetting().GetCertificateErrorHandlingMode())
        {
        case WEB_CERTIFICATE_ERROR_HANDLING_MODE_USER_CONFIRM:
@@ -435,14 +419,47 @@ OnCertificateRequested(void* pUserData, Evas_Object* pView, void* pEventInfo)
 
                result r = E_SUCCESS;
 
-               r = pImpl->ShowCertificateConfirmPopup(CERTIFICATE_POPUP_MODE_USER_CONFIRM, pPolicy);
+               std::unique_ptr<DbEnumerator> pEnum;
+
+               String certificatePath(Tizen::App::App::GetInstance()->GetAppRootPath() + CUSTOM_DB_DIRECTORY_PATH + USER_CONFIRM_DB_NAME);
+               String table(CERTIFICATE_TABLE_NAME);
+               _DatabaseImpl db;
+
+               String pem(ewk_certificate_policy_decision_certificate_pem_get(pPolicy));
+
+               r = db.Construct(certificatePath, "r", null);
                SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
 
-               pImpl->SetCertificateRequested(true);
+               pEnum = std::unique_ptr<DbEnumerator>(db.QueryN(L"Select allow From " + table + L" Where pem = '" + pem + L"'"));
+               if (pEnum.get())
+               {
+                       r = pEnum->MoveNext();
+                       SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+
+                       int allow = 0;
+                       r = pEnum->GetIntAt(0, allow);
+                       SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+
+                       SysLog(NID_WEB_CTRL, "The current value of allow is %d", allow);
+
+                       ewk_certificate_policy_decision_allowed_set(pPolicy, static_cast < Eina_Bool >(allow));
+                       pImpl->SetCertificateConfirmed(static_cast < bool >(allow));
+               }
+               else
+               {
+                       r = pImpl->ShowCertificateConfirmPopup(CERTIFICATE_POPUP_MODE_USER_CONFIRM, pPolicy);
+                       SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+
+                       ewk_view_resume(pWebCore->GetWebNativeNode());
+               }
+
+               if (pImpl)
+               {
+                       pImpl->SetCertificateRequested(true);
+               }
                break;
        }
        case WEB_CERTIFICATE_ERROR_HANDLING_MODE_CANCEL:
-CATCH:
                ewk_certificate_policy_decision_allowed_set(pPolicy, EINA_FALSE);
                break;
        case WEB_CERTIFICATE_ERROR_HANDLING_MODE_CONTINUE :
@@ -451,6 +468,15 @@ CATCH:
        default:
                SysAssert(false);
        }
+
+       return;
+
+CATCH:
+       ewk_certificate_policy_decision_allowed_set(pPolicy, EINA_FALSE);
+       pImpl->SetCertificateConfirmed(false);
+       pImpl->SetCertificateRequested(true);
+
+       ewk_view_resume(pWebCore->GetWebNativeNode());
 }
 
 
@@ -492,6 +518,76 @@ OnHttpAuthenticationCanceled(void* pUserData, Evas_Object* pView, void* pEventIn
        }
 }
 
+Eina_Bool
+OnApplicationCachePermissionRequested(Evas_Object* pView, Ewk_Security_Origin* pSecOrigin,  void* pUserData)
+{
+       _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData);
+       SysAssertf(pImpl , "Failed to request");
+
+       const char* pHostName = ewk_security_origin_host_get(pSecOrigin);
+       String msg;
+       result r = msg.Format(256, L"Allow %s to use offline application cache?", pHostName);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       r = pImpl->ShowUserConfirmPopup(USER_CONFIRM_APP_CACHE, pView, msg);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       return EINA_TRUE;
+}
+
+
+Eina_Bool
+OnIndexedDatabaseQuotaExceeded(Evas_Object* pView, Ewk_Security_Origin* pSecOrigin,  long long currentQuota, void* pUserData)
+{
+       _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData);
+       SysAssertf(pImpl , "Failed to request");
+
+       const char* pHostName = ewk_security_origin_host_get(pSecOrigin);
+       String msg;
+       result r = msg.Format(512, L"%s Used %lld of storage. Allow %s to use upto 2GB of indexed db?", pHostName, currentQuota, pHostName);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       r = pImpl->ShowUserConfirmPopup(USER_CONFIRM_INDEXED_DB_QUOTA_EXCEDED, pView, msg);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       return EINA_TRUE;
+}
+
+
+Eina_Bool
+OnDatabaseQuotaExceeded(Evas_Object* pView, Ewk_Security_Origin* pSecOrigin, const char* database_name, unsigned long long expectedQuota, void* pUserData)
+{
+       _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData);
+       SysAssertf(pImpl , "Failed to request");
+
+       const char* pHostName = ewk_security_origin_host_get(pSecOrigin);
+       String msg;
+       result r = msg.Format(512, L"Allow %s to open  %s use upto %lld  of web database?", pHostName, database_name, expectedQuota);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       r = pImpl->ShowUserConfirmPopup(USER_CONFIRM_DB_QUOTA_EXCEDED, pView, msg);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       return EINA_TRUE;
+}
+
+
+Eina_Bool OnLocalFileSystemQuotaExceeded(Evas_Object* pView, Ewk_Security_Origin* pSecOrigin,  long long currentQuota, void* pUserData)
+{
+       _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData);
+       SysAssertf(pImpl , "Failed to request");
+
+       const char* pHostName = ewk_security_origin_host_get(pSecOrigin);
+       String msg;
+       result r = msg.Format(512, L"%s Used %lld of storgae. Allow %s to use upto 2GB of file system?", pHostName, currentQuota, pHostName);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       r = pImpl->ShowUserConfirmPopup(USER_CONFIRM_LOCAL_FS_QUOTA_EXCEDED, pView, msg);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       return EINA_TRUE;
+}
+
 
 void
 OnGeolocationPermissionRequested(void* pUserData, Evas_Object* pView, void* pEventInfo)
@@ -597,7 +693,7 @@ OnNotificationShow(void* pUserData, Evas_Object* pView, void* pEventInfo)
        //ewk_notification_security_origin_get(pNotification)
 
        const char* text = ewk_notification_body_get(pNotification);
-       SysLog(NID_WEB_CTRL, "The current value of icon path is %s",ewk_notification_icon_url_get(pNotification));
+       SysSecureLog(NID_WEB_CTRL, "The current value of icon path is %s",ewk_notification_icon_url_get(pNotification));
 
        std::unique_ptr<_WebNotification> pNotificationWindow( new (std::nothrow) _WebNotification());
        SysTryReturnVoidResult(NID_WEB_CTRL, pNotificationWindow.get(), E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
@@ -607,7 +703,7 @@ OnNotificationShow(void* pUserData, Evas_Object* pView, void* pEventInfo)
 
        pNotificationWindow->SetText(String(text));
        pNotificationWindow->LaunchNotification();
-       pNotificationWindow.release();
+       pImpl->SetWebNotification(pNotificationWindow.release());
 
        ewk_notification_showed(pContext, notificationId);
 }
@@ -733,6 +829,36 @@ OnContentHandlerUnregistrationRequested(void* pUserData, Evas_Object* pView, voi
 
 
 void
+OnFullScreenEntered(void* pUserData, Evas_Object* pView, void* pEventInfo)
+{
+       _WebImpl* pImpl = reinterpret_cast<_WebImpl*>(pUserData);
+       bool* pIsHandleNeeded = reinterpret_cast< bool* >(pEventInfo);
+       SysAssertf(pImpl, "Failed to request");
+
+       _Web* pWebCore = dynamic_cast< _Web* >(&(pImpl->GetCore()));
+       SysAssertf(pWebCore, "Failed to get Web core object");
+
+       if (pIsHandleNeeded && *pIsHandleNeeded)
+       {
+               pWebCore->SetFullScreenEntered(true);
+       }
+}
+
+
+void
+OnFullScreenExited(void* pUserData, Evas_Object* pView, void* pEventInfo)
+{
+       _WebImpl* pImpl = reinterpret_cast<_WebImpl*>(pUserData);
+       SysAssertf(pImpl, "Failed to request");
+
+       _Web* pWebCore = dynamic_cast< _Web* >(&(pImpl->GetCore()));
+       SysAssertf(pWebCore, "Failed to get Web core object");
+
+       pWebCore->SetFullScreenEntered(false);
+}
+
+
+void
 OnVibrationRequested(uint64_t duration, void* pUserData)
 {
        result r = E_SUCCESS;
@@ -755,15 +881,6 @@ OnVibrationCanceled(void* pUserData)
 }
 
 
-Eina_Bool
-OnApplicationCachePermissionRequested(Evas_Object* pView, Ewk_Security_Origin* pOrigin, void* pUserData)
-{
-       ewk_view_application_cache_permission_reply(pView, EINA_TRUE);
-
-       return EINA_TRUE;
-}
-
-
 void
 OnLoadingRequested(void* pUserData, Evas_Object* pView, void* pEventInfo)
 {
@@ -783,6 +900,11 @@ OnLoadingRequested(void* pUserData, Evas_Object* pView, void* pEventInfo)
        if (pImpl->GetLoadingListener() && ewk_frame_is_main_frame(ewk_policy_decision_frame_get(pPolicy))
                && !pImpl->IsRedirectRequested())
        {
+               _Web* pWebCore = dynamic_cast< _Web* >(&(pImpl->GetCore()));
+               SysAssertf(pWebCore, "Failed to get Web core object");
+
+               pWebCore->SetFullScreenEntered(false);
+
                pImpl->SetCertificateRequested(false);
 
                if (pImpl->GetTextSearchListener())
@@ -852,35 +974,22 @@ OnLoadingRequested(void* pUserData, Evas_Object* pView, void* pEventInfo)
 
                result r = E_SUCCESS;
 
-               _WebEventType eventType = WEB_EVENT_REQUEST_UNKNOWN;
-
-               if (uriScheme == L"rtsp")
-               {
-                       eventType = WEB_EVENT_REQUEST_RTSP;
-               }
-               else if (uriScheme == L"mailto")
-               {
-                       eventType = WEB_EVENT_REQUEST_EMAIL;
-               }
-               else if (uriScheme == L"tel")
+               if (uriScheme == L"tel")
                {
-                       eventType = WEB_EVENT_REQUEST_TEL;
+                       String operationId(L"http://tizen.org/appcontrol/operation/dial");
+                       r = _AppControlImpl::FindAndStart(operationId, &url, null, null, null, null);
                }
-               else if (uriScheme == L"sms" || uriScheme == L"smsto" )
+               else if (uriScheme == L"mailto" || uriScheme == L"sms" || uriScheme == L"smsto" || uriScheme == L"mms" || uriScheme == L"mmsto" )
                {
-                       eventType = WEB_EVENT_REQUEST_SMS;
+                       String operationId(L"http://tizen.org/appcontrol/operation/compose");
+                       r = _AppControlImpl::FindAndStart(operationId, &url, null, null, null, null);
                }
-               else if (uriScheme == L"mms" || uriScheme == L"mmsto" )
+               else
                {
-                       eventType = WEB_EVENT_REQUEST_MMS;
+                       String operationId(L"http://tizen.org/appcontrol/operation/view");
+                       r = _AppControlImpl::FindAndStart(operationId, &url, null, null, null, null);
                }
-
-               std::unique_ptr<_WebEventArg> pEventArg(new _WebEventArg(eventType, url));
-               SysTryReturnVoidResult(NID_WEB_CTRL, pEventArg.get(), E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
-
-               r = pImpl->GetWebEvent()->FireAsync(*pEventArg.get());
                SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
-               pEventArg.release();
 
                return;
        }
@@ -974,6 +1083,9 @@ OnWebDataReceived(void* pUserData, Evas_Object* pView, void* pEventInfo)
 
        result r = E_SUCCESS;
 
+       _SystemResource* pSysResource = _SystemResource::GetInstance();
+       SysAssertf(pSysResource != null, "Failed to get _SystemResource instance");
+
        const char* pUrl = ewk_policy_decision_url_get(pPolicy);
        int code = ewk_policy_decision_response_status_code_get(pPolicy);
        String mime(ewk_policy_decision_response_mime_get(pPolicy));
@@ -983,7 +1095,6 @@ OnWebDataReceived(void* pUserData, Evas_Object* pView, void* pEventInfo)
 
        String url(ewk_policy_decision_url_get(pPolicy));
 
-       
        if (pLoadingListener && ewk_frame_is_main_frame(ewk_policy_decision_frame_get(pPolicy)))
        {
                const Eina_Hash* pHeader = ewk_policy_decision_response_headers_get(pPolicy);
@@ -1025,69 +1136,23 @@ OnWebDataReceived(void* pUserData, Evas_Object* pView, void* pEventInfo)
                
                else
                {
-                       SysLog(NID_WEB_CTRL, "Launch native app to handle the mime");
-
                        ewk_policy_decision_ignore(pPolicy);
 
-                       AppControl* pAppControl = null;
-                       _SelectBox selectBox;
-                       int appCount = 0;
-                       int selectedIndex = 0;
-
-                       std::unique_ptr<IList, AllElementsDeleter> pList(_AppManagerImpl::FindAppControlsN(NULL, NULL, &mime, NULL));
-
-                       if (pList.get())
-                       {
-                               appCount = pList->GetCount();
-                       }
-
-                       r = selectBox.Construct(false, L"", appCount+1); //+1 for Downloader
-                       SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
-
-                       selectBox.AddListItem(L"Download", _SelectBox::LIST_ITEM_TYPE_NORMAL, false);
-                       for (int i = 0; i < appCount; i++)
-                       {
-                               pAppControl = dynamic_cast< AppControl* >(pList->GetAt(i));
-                               SysTryReturnVoidResult(NID_WEB_CTRL, pAppControl, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
-
-                               String text = pAppControl->GetAppName();
-                               SysLog(NID_WEB_CTRL, "AppName : %S", text.GetPointer());
-
-                               selectBox.AddListItem(text, _SelectBox::LIST_ITEM_TYPE_NORMAL, false);
-                       }
-                       r = selectBox.ShowAndWait(selectedIndex);
-                       SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
-
-                       if (selectedIndex == 0) //download
-                       {
-                               RequestId reqId = 0;
-                               DownloadRequest request(pUrl);
-
-                               _DownloadManagerImpl* pManagerImpl = _DownloadManagerImpl::GetInstance();
-                               SysTryReturnVoidResult(NID_WEB_CTRL, pManagerImpl, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+                       String operationId(L"http://tizen.org/appcontrol/operation/view");
 
-                               r = pManagerImpl->Start(request, reqId);
-                               SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
-                       }
-                       else if (selectedIndex != -1) // -1 for cancel
+                       r = _AppControlImpl::FindAndStart(operationId, &url, &mime, null, null, null);
+                       SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS || r == E_OBJ_NOT_FOUND, r, "[%s] Propagating.", GetErrorMessage(r));
+       
+                       if (r == E_OBJ_NOT_FOUND)
                        {
-                               String path("path");
-                               String pathVal(pUrl);
+                               _SelectBox* pSelectBox = new (std::nothrow) _SelectBox;
+                               SysTryReturnVoidResult(NID_WEB_CTRL, pSelectBox, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
 
-                               HashMap dataList;
-                               r = dataList.Construct();
+                               r = pSelectBox->Construct(false, L"Select application", 1, null, url);
                                SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
 
-                               r = dataList.Add(path, pathVal);
-                               SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
-
-                               pAppControl = dynamic_cast< AppControl* >(pList->GetAt(selectedIndex));
-                               SysTryReturnVoidResult(NID_WEB_CTRL, pAppControl, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
-
-                               _AppControlImpl* pAcImpl = _AppControlImpl::GetInstance(*pAppControl);
-                               SysTryReturnVoidResult(NID_WEB_CTRL, pAcImpl, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
-
-                               r = pAcImpl->Start(null, null, &dataList, null);
+                               pSelectBox->AddListItem(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_BR_BODY_DOWNLOAD"), _SelectBox::LIST_ITEM_TYPE_NORMAL, false);
+                               r = pSelectBox->ShowPopup();
                                SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
                        }
 
@@ -1161,19 +1226,23 @@ OnLoadingErrorOccurred(void* pUserData, Evas_Object* pView, void* pEventInfo)
 
        SysLog(NID_WEB_CTRL, "The current value of code is %d, description is %s", code, pDescription);
 
-       pImpl->SetLoadingErrorOccurred(true);
        switch (code)
        {
        case EWK_ERROR_CODE_FRAMELOADINTERRUPTEDBYPOLICYCHANGE:
-               //fall through
+               pImpl->SetLoadingErrorOccurred(true);
+               break;
+
        case EWK_ERROR_CODE_PLUGINWILLHANDLELOAD:
+               evas_object_smart_callback_call(pView, "load,finished", NULL);
                break;
 
        case EWK_ERROR_NETWORK_STATUS_CANCELLED:
+               pImpl->SetLoadingErrorOccurred(true);
                evas_object_smart_callback_call(pView, "load,stop", NULL);
                break;
 
        default:
+               pImpl->SetLoadingErrorOccurred(true);
                if (pImpl->GetLoadingListener())
                {
                        result r = E_SUCCESS;
@@ -1229,13 +1298,6 @@ OnLoadingCompleted(void* pUserData, Evas_Object* pView, void* pEventInfo)
 
 
 void
-OnLoadingCommitted(void* pUserData, Evas_Object* pView, void* pEventInfo)
-{
-       evas_object_focus_set(pView, EINA_FALSE);
-}
-
-
-void
 OnFaviconReceived(void* pUserData, Evas_Object* pView, void* pEventInfo)
 {
        _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData);
@@ -1502,8 +1564,7 @@ void
 OnWebPageBlockSelected(void* pUserData, Evas_Object* pView, void* pEventInfo)
 {
        _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData);
-       Ewk_Text_Style* pStyle = reinterpret_cast< Ewk_Text_Style* >(pEventInfo);
-       SysAssertf(pImpl && pStyle, "Failed to request");
+       SysAssertf(pImpl, "Failed to request");
 
        if (pImpl->GetUiEventListener())
        {
@@ -1522,76 +1583,6 @@ OnWebPageBlockSelected(void* pUserData, Evas_Object* pView, void* pEventInfo)
 }
 
 
-Eina_Bool
-OnSelectUploadFile(Evas_Object* pView, Eina_Bool multipleFile, Eina_List* pAcceptTypes, const char* pCapture, void* pUserData)
-{
-       String isMultipleSelection(L"single");
-       result r = E_SUCCESS;
-
-       HashMap dataList;
-       String mode(L"selectionType");
-       String type(L"type");
-       _AppControlImpl* pMediaAppControlImpl = null;
-
-       int itemCount = 0;
-       String fileType = L"all";
-
-       if (multipleFile)
-       {
-               isMultipleSelection.Append(L"multiple");
-       }
-
-       std::unique_ptr<AppControl> pMediaAppControl(_AppManagerImpl::FindAppControlN(L"tizen.filemanager", L"http://tizen.org/appcontrol/operation/pick"));
-       SysTryReturn(NID_WEB_CTRL, pMediaAppControl.get(), EINA_TRUE, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
-
-       std::unique_ptr<_MediaSelectionListener> pMediaListener(new (std::nothrow) _MediaSelectionListener());
-       SysTryReturn(NID_WEB_CTRL, pMediaListener.get(), EINA_TRUE, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
-
-       pMediaListener->Construct(pView, pMediaAppControl.get());
-
-       itemCount = eina_list_count(pAcceptTypes);
-
-       if (itemCount == 1)
-       {
-               String item((char*)eina_list_nth(pAcceptTypes, 0));
-               if (item.StartsWith("image/",0))
-               {
-                       fileType = L"image";
-               }
-               else if (item.StartsWith("audio/",0))
-               {
-                       fileType = L"audio";
-               }
-               else if (item.StartsWith("video/",0))
-               {
-                       fileType = L"video";
-               }
-       }
-
-       r = dataList.Construct();
-       SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
-
-       r = dataList.Add(mode, isMultipleSelection);
-       SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
-
-       r = dataList.Add(type, fileType);
-       SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
-
-       pMediaAppControlImpl = _AppControlImpl::GetInstance(*pMediaAppControl.get());
-       r = pMediaAppControlImpl->Start(null, null, &dataList, pMediaListener.get());
-       SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
-
-       pMediaListener.release();
-       pMediaAppControl.release();
-
-       return EINA_TRUE;
-
-CATCH:
-       ewk_view_open_panel_reply(pView, null, EINA_FALSE);
-       return EINA_TRUE;
-}
-
-
 void
 OnHandleJavaScriptRequest(void* pUserData, Evas_Object* pView, void* pEventInfo)
 {
@@ -1622,6 +1613,11 @@ OnWebKeypadStateChanged(void* pUserData, Evas_Object* pView, void* pEventInfo)
        Eina_Rectangle* pEinaRect = reinterpret_cast< Eina_Rectangle* >(pEventInfo);
        SysAssertf(pImpl && pEinaRect, "Failed to request");
 
+       if (pImpl->IsVisible() == false)
+       {
+               evas_object_focus_set(pView, EINA_FALSE);
+       }
+
        if (pImpl->GetSetting().GetInputStyle() == INPUT_STYLE_OVERLAY)
        {
                _ICoordinateSystemTransformer* pXformer = _CoordinateSystem::GetInstance()->GetInverseTransformer();
@@ -1634,16 +1630,16 @@ OnWebKeypadStateChanged(void* pUserData, Evas_Object* pView, void* pEventInfo)
                        return;
                }
 
-               _Form* pFormCore = pImpl->GetParentFormCore(dynamic_cast< _Control* >(&pImpl->GetCore()));
-               if (pFormCore)
+               _FormImpl* pFormImpl = pImpl->GetParentFormImpl(dynamic_cast< _ControlImpl* >(pImpl));
+               if (pFormImpl)
                {
-                       if (pFormCore->HasFooter() && pFormCore->IsFooterVisible())
-                       {
-                               pImpl->SetFooterVisibleState(true);
-                               pFormCore->SetActionBarsVisible(FORM_ACTION_BAR_FOOTER, false);
-                       }
+                       pFormImpl->DeflateClientRectHeight(pXformer->TransformVertical(rect.height));
 
-                       pFormCore->DeflateClientRectHeight(pXformer->TransformVertical(rect.height));
+                       if (pFormImpl->HasFooter())
+                       {
+                               pFormImpl->GetCore().SetKeypadShowState(true);
+                               pFormImpl->Draw();
+                       }                       
                }
 
                if (pImpl->GetWebKeypadEventListener())
@@ -1690,16 +1686,16 @@ OnWebKeypadClosed(void* pUserData, Evas_Object* pView, void* pEventInfo)
        _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData);
        SysAssertf(pImpl, "Failed to request");
 
-       _Form* pFormCore = pImpl->GetParentFormCore(dynamic_cast< _Control* >(&pImpl->GetCore()));
-       if (pFormCore)
+       _FormImpl* pFormImpl = pImpl->GetParentFormImpl(dynamic_cast< _ControlImpl* >(pImpl));
+       if (pFormImpl)
        {
-               if (pFormCore->HasFooter() && pImpl->IsFooterVisible())
+               pFormImpl->DeflateClientRectHeight(0);
+
+               if (pFormImpl->HasFooter())
                {
-                       pImpl->SetFooterVisibleState(false);
-                       pFormCore->SetActionBarsVisible(FORM_ACTION_BAR_FOOTER, true);
+                       pFormImpl->GetCore().SetKeypadShowState(false);
+                       pFormImpl->Draw();
                }
-
-               pFormCore->DeflateClientRectHeight(0);
        }
 
        if (pImpl->GetWebKeypadEventListener())
@@ -1712,38 +1708,38 @@ OnWebKeypadClosed(void* pUserData, Evas_Object* pView, void* pEventInfo)
 
 
 void
-OnWindowObjectFocusGained(void *pUserData, Evas_Object *pWin, void *pEvent_info)
+OnWindowObjectFocusGained(void* pUserData, Evas_Object* pWin, void* pEvent_info)
 {
        _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData);
        SysAssertf(pImpl, "Failed to request");
 
-       if (pImpl->IsKeypadOpened() == true)
+       if (pImpl->IsKeypadOpened() == true && pImpl->IsVisible() == true && pImpl->IsFocused() == true)
        {
                _Web* pWebCore = dynamic_cast< _Web* >(&(pImpl->GetCore()));
                SysAssertf(pWebCore, "Failed to get Web core object");
 
                evas_object_focus_set(pWebCore->GetWebNativeNode(), EINA_TRUE);
 
-               pImpl->SetKeypadOpened(false);
+               pImpl->SetKeypadVisibleState(true);
        }
 }
 
 
 void
-OnWebNativeNodeFocusGained(void *pUserData, Evas *pCanvas, Evas_Object* pView, void* pEventInfo)
+OnWebNativeNodeFocusGained(void* pUserData, Evas* pCanvas, Evas_Object* pView, void* pEventInfo)
 {
        _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData);
        SysAssertf(pImpl, "Failed to request");
 
        if (pImpl->IsKeypadOpened() == true)
        {
-               pImpl->SetKeypadOpened(false);
+               pImpl->SetKeypadOpened(false);  
        }
 } 
 
 
 Eina_Bool
-OnColorPickerProviderRequested(Ewk_View_Smart_Data *pSmartData, int red, int green, int blue, int alpha)
+OnColorPickerProviderRequested(Ewk_View_Smart_DatapSmartData, int red, int green, int blue, int alpha)
 {
        SysAssertf(pSmartData, "invalid smartdata");
        _WebImpl* pWebImpl = reinterpret_cast<_WebImpl*>(evas_object_data_get(pSmartData->self, WEB_CTRL));
@@ -1770,7 +1766,7 @@ OnColorPickerProviderRequested(Ewk_View_Smart_Data *pSmartData, int red, int gre
 
 
 Eina_Bool
-OnColorPickerProviderDismissed(Ewk_View_Smart_Data *pSmartData)
+OnColorPickerProviderDismissed(Ewk_View_Smart_DatapSmartData)
 {
        SysAssertf(pSmartData, "invalid smartdata");
 
@@ -1782,7 +1778,7 @@ OnColorPickerProviderDismissed(Ewk_View_Smart_Data *pSmartData)
 
 
 Eina_Bool
-OnDatePickerProviderRequested(Ewk_View_Smart_Data *pSmartData, Ewk_Input_Type inputType, const char* inputValue)
+OnDatePickerProviderRequested(Ewk_View_Smart_DatapSmartData, Ewk_Input_Type inputType, const char* inputValue)
 {
        SysAssertf(pSmartData, "Failed to request");
        _WebImpl* pWebImpl = reinterpret_cast<_WebImpl*>(evas_object_data_get(pSmartData->self, WEB_CTRL));
@@ -1812,7 +1808,7 @@ OnDatePickerProviderRequested(Ewk_View_Smart_Data *pSmartData, Ewk_Input_Type in
 
 
 Eina_Bool
-OnSelectBoxRequested(Ewk_View_Smart_Data *pSmartData, Eina_Rectangle rect, Ewk_Text_Direction textDirection, double pageScaleFactor, Eina_List* pItems, int selectedIndex)
+OnSelectBoxRequested(Ewk_View_Smart_DatapSmartData, Eina_Rectangle rect, Ewk_Text_Direction textDirection, double pageScaleFactor, Eina_List* pItems, int selectedIndex)
 {
        SysAssertf(pSmartData, "Failed to request");
 
@@ -1827,7 +1823,22 @@ OnSelectBoxRequested(Ewk_View_Smart_Data *pSmartData, Eina_Rectangle rect, Ewk_T
 
 
 Eina_Bool
-OnSelectBoxClosed(Ewk_View_Smart_Data *pSmartData)
+OnMultiSelectBoxRequested(Ewk_View_Smart_Data* pSmartData, Eina_Rectangle rect, Ewk_Text_Direction text_direction, double page_scale_factor, Eina_List* pItems)
+{
+       SysAssertf(pSmartData, "Failed to request");
+
+       _WebImpl* pWebImpl = reinterpret_cast<_WebImpl*>(evas_object_data_get(pSmartData->self, WEB_CTRL));
+       SysAssertf(pWebImpl, "Failed to get Impl");
+
+       result r = pWebImpl->ShowSelectBoxPopup(true, L"", pItems, pSmartData->self, 0);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       return EINA_TRUE;
+}
+
+
+Eina_Bool
+OnSelectBoxClosed(Ewk_View_Smart_Data* pSmartData)
 {
        SysAssertf(pSmartData, "invalid smartdata");
 
@@ -1856,21 +1867,87 @@ OnSelectBoxUpdateRequested(Ewk_View_Smart_Data *pSmartData, Eina_Rectangle rect,
 }
 
 
-void
-OnCookiesPolicyGot(Ewk_Cookie_Accept_Policy policy, Ewk_Web_Error *pError, void *pUserData)
+Eina_Bool
+OnFormDataCandidateShow(Ewk_View_Smart_Data *pSmartData, int x, int y, int w, int h)
 {
-       _WebPresenter* pPresenter = reinterpret_cast< _WebPresenter* >(pUserData);
-       SysAssertf(pPresenter && !pError, "Failed to request");
+       SysAssertf(pSmartData, "Failed to request");
 
-       bool ret = EINA_TRUE;
+       _WebImpl* pWebImpl = reinterpret_cast<_WebImpl*>(evas_object_data_get(pSmartData->self, WEB_CTRL));
+       SysAssertf(pWebImpl, "Failed to get Impl");
 
-       switch (policy)
-       {
-       case EWK_COOKIE_ACCEPT_POLICY_ALWAYS:
-               //fall through
-       case EWK_COOKIE_ACCEPT_POLICY_NO_THIRD_PARTY:
-               ret = EINA_TRUE;
-               break;
+       Rectangle windowRect(x, y, w, h);
+       result r = pWebImpl->ShowFormDataWindow(windowRect, pSmartData->self);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       return EINA_TRUE;
+}
+
+
+Eina_Bool
+OnFormDataCandidateHide(Ewk_View_Smart_Data *pSmartData)
+{
+       SysAssertf(pSmartData, "Failed to request");
+
+       _WebImpl* pWebImpl = reinterpret_cast<_WebImpl*>(evas_object_data_get(pSmartData->self, WEB_CTRL));
+       SysAssertf(pWebImpl, "Failed to get Impl");
+
+       if (pWebImpl->IsFormDataWindowVisible())
+       {
+               pWebImpl->HideFormDataWindow();
+       }
+
+       return EINA_TRUE;
+}
+
+
+Eina_Bool
+OnFormDataCandidateUpdate(Ewk_View_Smart_Data *pSmartData, Eina_List *pDataList)
+{
+       SysAssertf(pSmartData, "Failed to request");
+
+       _WebImpl* pWebImpl = reinterpret_cast<_WebImpl*>(evas_object_data_get(pSmartData->self, WEB_CTRL));
+       SysAssertf(pWebImpl, "Failed to get Impl");
+
+       pWebImpl->SetFormDataList(pDataList);
+
+       return EINA_TRUE;
+}
+
+
+Eina_Bool
+OnFormDataCandidateIsShowing(Ewk_View_Smart_Data *pSmartData)
+{
+       SysAssertf(pSmartData, "Failed to request");
+
+       _WebImpl* pWebImpl = reinterpret_cast<_WebImpl*>(evas_object_data_get(pSmartData->self, WEB_CTRL));
+       SysAssertf(pWebImpl, "Failed to get Impl");
+
+       if (pWebImpl->IsFormDataWindowVisible())
+       {
+               return EINA_TRUE;
+       }
+       else
+       {
+               return EINA_FALSE;
+       }
+}
+
+
+void
+OnCookiesPolicyGot(Ewk_Cookie_Accept_Policy policy, Ewk_Web_Error *pError, void *pUserData)
+{
+       _WebPresenter* pPresenter = reinterpret_cast< _WebPresenter* >(pUserData);
+       SysAssertf(pPresenter && !pError, "Failed to request");
+
+       bool ret = EINA_TRUE;
+
+       switch (policy)
+       {
+       case EWK_COOKIE_ACCEPT_POLICY_ALWAYS:
+               //fall through
+       case EWK_COOKIE_ACCEPT_POLICY_NO_THIRD_PARTY:
+               ret = EINA_TRUE;
+               break;
 
        case EWK_COOKIE_ACCEPT_POLICY_NEVER:
                //fall through
@@ -1896,7 +1973,12 @@ OnScriptExecuted(Evas_Object* pView, const char* pResult, void* pUserData)
        String result(pResult);
        SysLog(NID_WEB_CTRL, "result : %ls", result.GetPointer());
 
-       pPresenter->EndAsyncProcess(result);
+       _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(evas_object_data_get(pView, WEB_CTRL));
+       _WebManager* pWebManager = _WebManager::GetInstance();
+       if (pWebManager->IsValidCallback(reinterpret_cast< int >(pImpl), reinterpret_cast< int >(pPresenter)))
+       {
+               pPresenter->EndAsyncProcess(result);
+       }
 }
 
 
@@ -2006,6 +2088,7 @@ _WebImpl::_WebImpl(Web* pWeb, Tizen::Ui::_Control* pCore)
        , __isRedirectRequested(false)
        , __isCertificateRequested(false)
        , __isCertificateConfirmed(false)
+       , __isFormDataVisible(false)
        , __keypadBounds(0, 0, 0, 0)
        , __pWebCore(null)
        , __pUserLoadingListener(null)
@@ -2021,13 +2104,28 @@ _WebImpl::_WebImpl(Web* pWeb, Tizen::Ui::_Control* pCore)
        , __pWebEvent(null)
        , __pAuthChallenge(null)
        , __pAuthPopup(null)
-       , __pUserConfirmPopup(null)
+       , __pUserMediaConfirmPopup(null)
+       , __pContentHandlerConfirmPopup(null)
+       , __pProtocolHandlerConfirmPopup(null)
+       , __pGeolocationConfirmPopup(null)
+       , __pNotificationConfirmPopup(null)
+       , __pScriptAlertConfirmPopup(null)
+       , __pScriptConfirmPopup(null)
+       , __pAppCacheConfirmPopup(null)
+       , __pDbQuotaConfirmPopup(null)
+       , __pLocalFsQuotaConfirmPopup(null)
+       , __pIndexedDbQuotaConfirmPopup(null)
+       , __pPromptPopup(null)
        , __pCertConfirmPopup(null)
        , __pSelectBox(null)
        , __pDatePicker(null)
        , __pColorPicker(null)
+       , __pFormDataWindow(null)
        , __pVibrator(null)
        , __policy(WEB_DECISION_CONTINUE)
+       , __defaultUserAgent(L"")
+       , __pFormDataList(null)
+       , __popupClosed(false)
 {
        __textSearch.__searchAll = false;
        __textSearch.__searchForward = true;
@@ -2041,9 +2139,18 @@ _WebImpl::_WebImpl(Web* pWeb, Tizen::Ui::_Control* pCore)
 
 _WebImpl::~_WebImpl()
 {
+       _DownloadManagerImpl* pManagerImpl = _DownloadManagerImpl::GetInstance();
+       pManagerImpl->SetDownloadListener(null);
+
+       _WebManager* pWebManager = _WebManager::GetInstance();
+       pWebManager->RemoveWeb(reinterpret_cast< int >(this));
+
        RemoveEventListenerCallback();
+
+       ClearCertificateDb();
 }
 
+
 _WebImpl*
 _WebImpl::CreateWebImplN(Web* pControl, const Rectangle& bounds)
 {
@@ -2117,12 +2224,20 @@ _WebImpl::Construct(void)
        r = __textSearch.__searchQueue.Construct();
        SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
+       r = __webNotificationList.Construct();
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
        r = InitJsBridgeList();
        SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
        r = InitWebEvent();
        SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
+       _DownloadManagerImpl* pManagerImpl = _DownloadManagerImpl::GetInstance();
+       SysTryReturn(NID_WEB_CTRL, pManagerImpl, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+
+       pManagerImpl->SetDownloadListener(this);
+
        __pWebCore = dynamic_cast< _Web* >(&(GetCore()));
        SysTryReturnResult(NID_WEB_CTRL, __pWebCore, E_SYSTEM, "A system error has been occurred. Failed to get web control");
 
@@ -2135,14 +2250,16 @@ _WebImpl::InitializeSetting(void)
 {
        result r = E_SUCCESS;
 
-       r = SetSetting(*__pWebCore->GetSetting());
-       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
-
-       _WebSettingImpl* pWebSettingImpl = _WebSettingImpl::GetInstance(__pWebCore->GetSetting());
+       WebSetting* pWebSetting = __pWebCore->GetSetting();
+       _WebSettingImpl* pWebSettingImpl = _WebSettingImpl::GetInstance(pWebSetting);
 
        SetCookieEnabled(pWebSettingImpl->IsCookieEnabled());
        SetPrivateBrowsingEnabled(pWebSettingImpl->IsPrivateBrowsingEnabled());
-       SetZoomLevel(pWebSettingImpl->GetZoomLevel());
+
+       __defaultUserAgent = pWebSettingImpl->GetUserAgent();
+
+       r = SetSetting(*pWebSetting);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
        SetEventListenerCallback();
 
@@ -2316,8 +2433,6 @@ _WebImpl::ShowSelectBoxPopup(bool isMultiSelect, const String& title, Eina_List*
 
        __pSelectBox = std::move(pSelectBox);
 
-       __pSelectBox->SetOwner(&GetPublic());
-
        return __pSelectBox->ShowPopup();
 }
 
@@ -2418,32 +2533,33 @@ _WebImpl::StopLoading(void) const
 void
 _WebImpl::Reload(void) const
 {
-       ewk_view_reload_bypass_cache(__pWebCore->GetWebNativeNode());
+       ewk_view_reload(__pWebCore->GetWebNativeNode());
 }
 
 
 String*
-_WebImpl::EvaluateJavascriptN(const String& scriptCode) const
+_WebImpl::EvaluateJavascriptN(const String& scriptCode)
 {
-       if (scriptCode.GetLength())
+       Evas_Object* pView = __pWebCore->GetWebNativeNode();
+       if (!pView)
        {
-               std::unique_ptr<char[]> pScript(_StringConverter::CopyToCharArrayN(scriptCode));
-               SysTryReturn(NID_WEB_CTRL, pScript.get(), null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+               return null;
+       }
+       
+       std::unique_ptr<char[]> pScript(_StringConverter::CopyToCharArrayN(scriptCode));
+       SysTryReturn(NID_WEB_CTRL, pScript.get(), null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
 
-               std::unique_ptr<_WebPresenter> pPresenter(new (std::nothrow) _WebPresenter());
-               SysTryReturn(NID_WEB_CTRL, pPresenter.get(), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
-               pPresenter->InitAsyncProcess();
+       std::unique_ptr<_WebPresenter> pPresenter(new (std::nothrow) _WebPresenter(this));
+       SysTryReturn(NID_WEB_CTRL, pPresenter.get(), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
 
-               ewk_view_script_execute(__pWebCore->GetWebNativeNode(), pScript.get(), OnScriptExecuted, pPresenter.get());
+       ewk_view_script_execute(pView, pScript.get(), OnScriptExecuted, pPresenter.get());
 
-               std::unique_ptr<String> pResult(new (std::nothrow) String(L""));
-               SysTryReturn(NID_WEB_CTRL, pResult.get(), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
-               pPresenter->WaitAsyncProcess(*pResult.get());
+       std::unique_ptr<String> pResult(new (std::nothrow) String(L""));
+       SysTryReturn(NID_WEB_CTRL, pResult.get(), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
 
-               return pResult.release();
-       }
+       pPresenter->WaitAsyncProcess(*pResult.get());
 
-       return null;
+       return pResult.release();
 }
 
 
@@ -2468,6 +2584,12 @@ _WebImpl::GetZoomLevel(void) const
 const PageNavigationList*
 _WebImpl::GetBackForwardListN(void) const
 {
+       Evas_Object* pView = __pWebCore->GetWebNativeNode();
+       if (!pView)
+       {
+               return null;
+       }
+
        result r = E_SUCCESS;
 
        _PageNavigationListImpl* pNavigationListImpl = null;
@@ -2482,7 +2604,7 @@ _WebImpl::GetBackForwardListN(void) const
        String url(L"");
        String title(L"");
 
-       Ewk_History* pEwkHistoryList = ewk_view_history_get(__pWebCore->GetWebNativeNode());
+       Ewk_History* pEwkHistoryList = ewk_view_history_get(pView);
        SysTryReturn(NID_WEB_CTRL, pEwkHistoryList, null, E_SYSTEM, "[%s] A system error has been occurred. Failed to get full history.", GetErrorMessage(E_SYSTEM));
 
        Ewk_History_Item* pEwkItem = ewk_history_nth_item_get(pEwkHistoryList, 0);
@@ -2542,6 +2664,12 @@ CATCH:
 bool
 _WebImpl::SearchText(const String& text, bool searchForward)
 {
+       Evas_Object* pView = __pWebCore->GetWebNativeNode();
+       if (!pView)
+       {
+               return false;
+       }
+
        result r = E_SUCCESS;
 
        Ewk_Find_Options condition = static_cast< Ewk_Find_Options >(EWK_FIND_OPTIONS_SHOW_HIGHLIGHT | EWK_FIND_OPTIONS_CASE_INSENSITIVE);
@@ -2551,14 +2679,14 @@ _WebImpl::SearchText(const String& text, bool searchForward)
            condition = static_cast < Ewk_Find_Options >(condition | EWK_FIND_OPTIONS_BACKWARDS);
        }
 
-       _WebPresenter presenter;
-       presenter.InitAsyncProcess();
+       std::unique_ptr<_WebPresenter> pPresenter(new (std::nothrow) _WebPresenter(this));
+       SysTryReturn(NID_WEB_CTRL, pPresenter.get(), false, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
 
-       r = SynchronizeSearch(SEARCH_SYNC, __pWebCore->GetWebNativeNode(), condition, text, searchForward, false, &presenter);
-       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+       r = SynchronizeSearch(SEARCH_SYNC, pView, condition, text, searchForward, false, pPresenter.get());
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));
 
        int result = 0;
-       presenter.WaitAsyncProcess(result);
+       pPresenter->WaitAsyncProcess(result);
 
        return static_cast < bool >(result);
 }
@@ -2567,6 +2695,12 @@ _WebImpl::SearchText(const String& text, bool searchForward)
 result
 _WebImpl::SearchTextAllAsync(const Tizen::Base::String& text, bool caseSensitive)
 {
+       Evas_Object* pView = __pWebCore->GetWebNativeNode();
+       if (!pView)
+       {
+               return E_SUCCESS;
+       }
+
        result r = E_SUCCESS;
 
        Ewk_Find_Options condition = EWK_FIND_OPTIONS_SHOW_HIGHLIGHT;
@@ -2576,7 +2710,7 @@ _WebImpl::SearchTextAllAsync(const Tizen::Base::String& text, bool caseSensitive
            condition = static_cast <Ewk_Find_Options>(condition | EWK_FIND_OPTIONS_CASE_INSENSITIVE);
        }
 
-       r = SynchronizeSearch(SEARCH_ALL_ASYNC, __pWebCore->GetWebNativeNode(), condition, text, true, caseSensitive);
+       r = SynchronizeSearch(SEARCH_ALL_ASYNC, pView, condition, text, true, caseSensitive);
        SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
        return E_SUCCESS;
@@ -2586,6 +2720,12 @@ _WebImpl::SearchTextAllAsync(const Tizen::Base::String& text, bool caseSensitive
 result
 _WebImpl::SearchNextAsync(bool searchForward)
 {
+       Evas_Object* pView = __pWebCore->GetWebNativeNode();
+       if (!pView)
+       {
+               return E_SUCCESS;
+       }
+
        SysTryReturnResult(NID_WEB_CTRL, __textSearch.__searchAll && __textSearch.__totalCount > -1, E_INVALID_OPERATION, "The SearchTextAllAsync() method is not called or completed.");
        SysTryReturnResult(NID_WEB_CTRL, (searchForward && __textSearch.__currentIndex < __textSearch.__totalCount) || (!searchForward && __textSearch.__currentIndex > 1)
                , E_OBJ_NOT_FOUND,  "The Next instance is not available.");
@@ -2594,7 +2734,7 @@ _WebImpl::SearchNextAsync(bool searchForward)
 
        Ewk_Find_Options condition = EWK_FIND_OPTIONS_SHOW_HIGHLIGHT;
 
-       if (__textSearch.__caseSensitive)
+       if (!__textSearch.__caseSensitive)
        {
                condition = static_cast <Ewk_Find_Options>(condition | EWK_FIND_OPTIONS_CASE_INSENSITIVE);
        }
@@ -2604,7 +2744,7 @@ _WebImpl::SearchNextAsync(bool searchForward)
                condition = static_cast <Ewk_Find_Options>(condition | EWK_FIND_OPTIONS_BACKWARDS);
        }
 
-       r = SynchronizeSearch(SEARCH_NEXT_ASYNC, __pWebCore->GetWebNativeNode(), condition, __textSearch.__text, searchForward);
+       r = SynchronizeSearch(SEARCH_NEXT_ASYNC, pView, condition, __textSearch.__text, searchForward);
        SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
        return E_SUCCESS;
@@ -2767,10 +2907,13 @@ _WebImpl::SetSetting(const WebSetting& setting)
 
                ewk_settings_loads_images_automatically_set(pSettings, static_cast< Eina_Bool >(setting.IsAutoImageLoadEnabled()));
 
-               std::unique_ptr<char[]> pAgent(_StringConverter::CopyToCharArrayN(setting.GetUserAgent()));
-               SysTryReturn(NID_WEB_CTRL, pAgent.get(), GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+               if (__defaultUserAgent != setting.GetUserAgent())
+               {
+                       std::unique_ptr<char[]> pAgent(_StringConverter::CopyToCharArrayN(setting.GetUserAgent()));
+                       SysTryReturn(NID_WEB_CTRL, pAgent.get(), GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
 
-               ewk_view_user_agent_set(__pWebCore->GetWebNativeNode(), pAgent.get());
+                       ewk_view_user_agent_set(__pWebCore->GetWebNativeNode(), pAgent.get());
+               }
 
                ewk_settings_auto_fitting_set(pSettings, static_cast< Eina_Bool >(setting.IsAutoFittingEnabled()));
 
@@ -2811,6 +2954,21 @@ _WebImpl::GetSetting(void) const
 const HitElementResult*
 _WebImpl::GetElementByPointN(const Point& point) const
 {
+       return GetElementByPointN(_CoordinateSystemUtils::ConvertToFloat(point));
+}
+
+
+const HitElementResult*
+_WebImpl::GetElementByPointN(const FloatPoint& point) const
+{
+       Evas_Object* pView = __pWebCore->GetWebNativeNode();
+       if (!pView)
+       {
+               return null;
+       }
+
+       SysTryReturn(NID_WEB_CTRL, Contains(point), null, E_INVALID_ARG, "[%s] The point must be contained in the bounds of a web control.", GetErrorMessage(E_INVALID_ARG));
+
        result r = E_SUCCESS;
 
        _HitElementResultImpl* pHitElementResultImpl = null;
@@ -2819,9 +2977,9 @@ _WebImpl::GetElementByPointN(const Point& point) const
        std::unique_ptr<Bitmap> pImage;
        std::unique_ptr<HashMap, AllElementsDeleter> pAttributeMap;
 
-       Point absPoint(__pWebCore->GetAbsoluteCoordinate(point));
+       Point absPoint(_CoordinateSystemUtils::ConvertToInteger(__pWebCore->GetAbsoluteCoordinate(point)));
 
-       Ewk_Hit_Test* pEwkHitTest = ewk_view_hit_test_new(__pWebCore->GetWebNativeNode(), absPoint.x, absPoint.y, EWK_HIT_TEST_MODE_ALL);
+       Ewk_Hit_Test* pEwkHitTest = ewk_view_hit_test_new(pView, absPoint.x, absPoint.y, EWK_HIT_TEST_MODE_ALL);
        SysTryReturn(NID_WEB_CTRL, pEwkHitTest, null, E_SYSTEM, "[%s] Failed to get hit test.", GetErrorMessage(E_SYSTEM));
 
        Eina_Hash* pAttrHash = ewk_hit_test_attribute_hash_get(pEwkHitTest);
@@ -2913,18 +3071,6 @@ CATCH:
 }
 
 
-const HitElementResult*
-_WebImpl::GetElementByPointN(const FloatPoint& point) const
-{
-       const Point integerPoint(_CoordinateSystemUtils::ConvertToInteger(point));
-
-       std::unique_ptr<const HitElementResult> pHitElementResult(GetElementByPointN(integerPoint));
-       SysTryReturn(NID_WEB_CTRL, pHitElementResult.get(), null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
-
-       return pHitElementResult.release();
-}
-
-
 bool
 _WebImpl::IsLoading(void) const
 {
@@ -2990,7 +3136,6 @@ void
 _WebImpl::ClearCache(void)
 {
        Ewk_Context* pContext = ewk_view_context_get(__pWebCore->GetWebNativeNode());
-       SysAssertf(pContext, "Failed to get webkit instance.");
 
        ewk_context_cache_clear(pContext);
 }
@@ -3001,7 +3146,6 @@ _WebImpl::ClearCookie(void)
 {
        Ewk_Context* pContext = ewk_view_context_get(__pWebCore->GetWebNativeNode());
        Ewk_Cookie_Manager* pCookieManager =  ewk_context_cookie_manager_get(pContext);
-       SysAssertf(pCookieManager, "Failed to get webkit instance.");
 
        ewk_cookie_manager_cookies_clear(pCookieManager);
 }
@@ -3011,7 +3155,6 @@ void
 _WebImpl::ClearFormData(void)
 {
        Ewk_Context* pContext = ewk_view_context_get(__pWebCore->GetWebNativeNode());
-       SysAssertf(pContext, "Failed to get webkit instance.");
 
        ewk_context_form_candidate_data_clear(pContext);
 }
@@ -3021,7 +3164,6 @@ void
 _WebImpl::ClearLoginFormData(void)
 {
        Ewk_Context* pContext = ewk_view_context_get(__pWebCore->GetWebNativeNode());
-       SysAssertf(pContext, "Failed to get webkit instance.");
 
        ewk_context_form_password_data_clear(pContext);
 }
@@ -3039,13 +3181,13 @@ _WebImpl::IsCookieEnabled(void) const
        Ewk_Cookie_Manager* pCookieManager =  ewk_context_cookie_manager_get(pContext);
        SysAssertf(pCookieManager, "Failed to get webkit instance.");
 
-       _WebPresenter presenter;
-       presenter.InitAsyncProcess();
+       std::unique_ptr<_WebPresenter> pPresenter(new (std::nothrow) _WebPresenter(this));
+       SysTryReturn(NID_WEB_CTRL, pPresenter.get(), false, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
 
-       ewk_cookie_manager_async_accept_policy_get(pCookieManager, OnCookiesPolicyGot, &presenter);
+       ewk_cookie_manager_async_accept_policy_get(pCookieManager, OnCookiesPolicyGot, pPresenter.get());
 
        bool result = false;
-       presenter.WaitAsyncProcess(result);
+       pPresenter->WaitAsyncProcess(result);
 
        return result;
 }
@@ -3325,6 +3467,7 @@ _WebImpl::SetEventListenerCallback(void) const
                SysAssertf(pSmart, "Failed to request");
 
                pSmart->popup_menu_show = OnSelectBoxRequested;
+               pSmart->multiple_popup_menu_show = OnMultiSelectBoxRequested;
                pSmart->popup_menu_hide = OnSelectBoxClosed;
                pSmart->popup_menu_update = OnSelectBoxUpdateRequested;
 
@@ -3332,6 +3475,11 @@ _WebImpl::SetEventListenerCallback(void) const
                pSmart->input_picker_color_request = OnColorPickerProviderRequested;
                pSmart->input_picker_color_dismiss = OnColorPickerProviderDismissed;
 
+               pSmart->formdata_candidate_show = OnFormDataCandidateShow;
+               pSmart->formdata_candidate_hide = OnFormDataCandidateHide;
+               pSmart->formdata_candidate_update_data = OnFormDataCandidateUpdate;
+               pSmart->formdata_candidate_is_showing = OnFormDataCandidateIsShowing;
+
                evas_object_data_set(pWebNativeNode, WEB_CTRL, this);
 
                // add loading event callbacks for ILoadingListener
@@ -3346,7 +3494,6 @@ _WebImpl::SetEventListenerCallback(void) const
                evas_object_smart_callback_add(pWebNativeNode, "load,stop", OnLoadingCanceled, this);
                evas_object_smart_callback_add(pWebNativeNode, "load,error", OnLoadingErrorOccurred, this);
                evas_object_smart_callback_add(pWebNativeNode, "title,changed", OnPageTitleReceived, this);
-               evas_object_smart_callback_add(pWebNativeNode, "load,committed", OnLoadingCommitted, this);
 
                evas_object_smart_callback_add(pWebNativeNode, "requestToNative,json", OnHandleJavaScriptRequest, this);
 
@@ -3387,14 +3534,20 @@ _WebImpl::SetEventListenerCallback(void) const
                evas_object_smart_callback_add(pWebNativeNode, "touchmove,handled", OnWebPreventDefaultTriggered, this);
                evas_object_smart_callback_add(pWebNativeNode, "icon,received", OnFaviconReceived, this);
 
-               evas_object_smart_callback_add(pWebNativeNode, "text,style,state", OnWebPageBlockSelected, this);
+               evas_object_smart_callback_add(pWebNativeNode, "text,selected", OnWebPageBlockSelected, this);
+
+               evas_object_smart_callback_add(pWebNativeNode, "fullscreen,enterfullscreen", OnFullScreenEntered, this);
+               evas_object_smart_callback_add(pWebNativeNode, "fullscreen,exitfullscreen", OnFullScreenExited, this);
 
-               ewk_view_open_panel_callback_set(pWebNativeNode, OnSelectUploadFile, const_cast< _WebImpl* >(this));
                Ewk_Context* pContext = ewk_view_context_get(pWebNativeNode);
                SysAssertf(pContext, "Failed to get webkit instance.");
                ewk_context_did_start_download_callback_set(pContext, OnDidStartDownloadCallback, const_cast< _WebImpl* >(this));
                ewk_context_vibration_client_callbacks_set(pContext, OnVibrationRequested, OnVibrationCanceled, const_cast< _WebImpl* >(this));
+
                ewk_view_application_cache_permission_callback_set(pWebNativeNode, OnApplicationCachePermissionRequested, const_cast< _WebImpl* >(this));
+               ewk_view_exceeded_indexed_database_quota_callback_set(pWebNativeNode, OnIndexedDatabaseQuotaExceeded, const_cast< _WebImpl* >(this));
+               ewk_view_exceeded_database_quota_callback_set(pWebNativeNode, OnDatabaseQuotaExceeded, const_cast< _WebImpl* >(this));
+               ewk_view_exceeded_local_file_system_quota_callback_set(pWebNativeNode, OnLocalFileSystemQuotaExceeded, const_cast< _WebImpl* >(this));
 
                evas_object_event_callback_add(pWebNativeNode, EVAS_CALLBACK_FOCUS_IN, OnWebNativeNodeFocusGained, this);
        }
@@ -3438,9 +3591,9 @@ _WebImpl::RemoveEventListenerCallback(void) const
 
                evas_object_smart_callback_del(pWebNativeNode, "geolocation,permission,request", OnGeolocationPermissionRequested);
 
-               ewk_view_javascript_alert_callback_set(null, null, null);
-               ewk_view_javascript_prompt_callback_set(null, null, null);
-               ewk_view_javascript_confirm_callback_set(null, null, null);
+               ewk_view_javascript_alert_callback_set(pWebNativeNode, null, null);
+               ewk_view_javascript_prompt_callback_set(pWebNativeNode, null, null);
+               ewk_view_javascript_confirm_callback_set(pWebNativeNode, null, null);
 
                evas_object_smart_callback_del(pWebNativeNode, "policy,response,decide", OnWebDataReceived);
 
@@ -3464,62 +3617,105 @@ _WebImpl::RemoveEventListenerCallback(void) const
                evas_object_smart_callback_del(pWebNativeNode, "touchmove,handled", OnWebPreventDefaultTriggered);
                evas_object_smart_callback_del(pWebNativeNode, "icon,received", OnFaviconReceived);
 
-               evas_object_smart_callback_del(pWebNativeNode, "text,style,state", OnWebPageBlockSelected);
+               evas_object_smart_callback_del(pWebNativeNode, "text,selected", OnWebPageBlockSelected);
+
+               evas_object_smart_callback_del(pWebNativeNode, "fullscreen,enterfullscreen", OnFullScreenEntered);
+               evas_object_smart_callback_del(pWebNativeNode, "fullscreen,exitfullscreen", OnFullScreenExited);
 
-               ewk_view_open_panel_callback_set(null, null, null);
                Ewk_Context* pContext = ewk_view_context_get(pWebNativeNode);
                SysAssertf(pContext, "Failed to get webkit instance.");
                ewk_context_vibration_client_callbacks_set(pContext, null, null, null);
+
                ewk_view_application_cache_permission_callback_set(pWebNativeNode, null, null);
+               ewk_view_exceeded_indexed_database_quota_callback_set(pWebNativeNode, null, null);
+               ewk_view_exceeded_database_quota_callback_set(pWebNativeNode, null, null);
+               ewk_view_exceeded_local_file_system_quota_callback_set(pWebNativeNode, null, null);
 
                evas_object_event_callback_del(pWebNativeNode, EVAS_CALLBACK_FOCUS_IN, OnWebNativeNodeFocusGained);
        }
 }
 
 
-result
-_WebImpl::SetBlockSelectionPosition(const Point& startPoint)
+void
+_WebImpl::ClearCertificateDb(void)
 {
-       Evas_Object* pWebNativeNode = __pWebCore->GetWebNativeNode();
+       result r = E_SUCCESS;
 
-       Ewk_View_Smart_Data* pSmartData = (Ewk_View_Smart_Data*) evas_object_smart_data_get(pWebNativeNode);
-       SysAssertf(pSmartData, "Failed to request");
+       String certificatePath(Tizen::App::App::GetInstance()->GetAppRootPath() + CUSTOM_DB_DIRECTORY_PATH + USER_CONFIRM_DB_NAME);
+       String table(CERTIFICATE_TABLE_NAME);
+       _DatabaseImpl db;
 
-       Point absPoint(__pWebCore->GetAbsoluteCoordinate(startPoint));
+       r = db.Construct(certificatePath, "r+", null);
+       SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
 
-       Eina_Bool ret = pSmartData->api->text_selection_down(pSmartData, absPoint.x, absPoint.y);
-       if (ret)
-       {
-               pSmartData->api->text_selection_up(pSmartData, absPoint.x, absPoint.y);
+       db.BeginTransaction();
 
-               Ewk_Hit_Test* pEwkHitTest = ewk_view_hit_test_new(__pWebCore->GetWebNativeNode(), absPoint.x, absPoint.y, EWK_HIT_TEST_MODE_ALL);
-               SysTryReturnResult(NID_WEB_CTRL, pEwkHitTest, E_SYSTEM, "Failed to get hit test.");
+       r = db.ExecuteSql(L"Delete From " + table, true);
+       SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
 
-               String tagName(ewk_hit_test_tag_name_get(pEwkHitTest));
+       db.CommitTransaction();
 
-               if (tagName.Equals(L"INPUT", false) || tagName.Equals(L"TEXTAREA", false))
-               {
-                       ewk_view_command_execute(pWebNativeNode, "SelectWord", 0);
-               }
-       }
+       return;
 
-       SysTryReturnResult(NID_WEB_CTRL, GetTextFromBlock().GetLength() > 0, E_INVALID_ARG, "Failed to set text selection up.");
+CATCH:
+       db.RollbackTransaction();
+}
 
-       return E_SUCCESS;
+
+result
+_WebImpl::SetBlockSelectionPosition(const Point& startPoint)
+{
+       return SetBlockSelectionPosition(_CoordinateSystemUtils::ConvertToFloat(startPoint));
 }
 
 
 result
 _WebImpl::SetBlockSelectionPosition(const FloatPoint& startPoint)
 {
-       return SetBlockSelectionPosition(_CoordinateSystemUtils::ConvertToInteger(startPoint));
+       Evas_Object* pView = __pWebCore->GetWebNativeNode();
+       Ewk_View_Smart_Data* pSmartData = (Ewk_View_Smart_Data*) evas_object_smart_data_get(pView);
+       if (pSmartData && pSmartData->api)
+       {
+               Point absPoint( _CoordinateSystemUtils::ConvertToInteger(__pWebCore->GetAbsoluteCoordinate(startPoint)));
+
+               Eina_Bool ret = pSmartData->api->text_selection_down(pSmartData, absPoint.x, absPoint.y);
+               if (ret)
+               {
+                       pSmartData->api->text_selection_up(pSmartData, absPoint.x, absPoint.y);
+
+                       Ewk_Hit_Test* pEwkHitTest = ewk_view_hit_test_new(pView, absPoint.x, absPoint.y, EWK_HIT_TEST_MODE_ALL);
+                       SysTryReturnResult(NID_WEB_CTRL, pEwkHitTest, E_SYSTEM, "Failed to get hit test.");
+
+                       String tagName(ewk_hit_test_tag_name_get(pEwkHitTest));
+
+                       if (tagName.Equals(L"INPUT", false) || tagName.Equals(L"TEXTAREA", false))
+                       {
+                               ewk_view_command_execute(pView, "SelectWord", 0);
+                       }
+                       else
+                       {
+                               Eina_Hash* pAttrHash = ewk_hit_test_attribute_hash_get(pEwkHitTest);
+                               char* pValue = reinterpret_cast< char* >(eina_hash_find(pAttrHash, "contenteditable"));
+                               if(pValue)
+                               {
+                                       ewk_view_command_execute(pView, "SelectWord", 0);
+                               }
+                       }
+               }
+       }
+
+       SysTryReturnResult(NID_WEB_CTRL, GetTextFromBlock().GetLength() > 0, E_INVALID_ARG, "Failed to set text selection up.");
+
+       evas_object_smart_callback_call(pView, "text,selected", NULL);
+
+       return E_SUCCESS;
 }
 
 
 void
 _WebImpl::ReleaseBlock(void)
 {
-       ewk_view_command_execute(__pWebCore->GetWebNativeNode(), "Unselect", 0);
+       ewk_view_text_selection_range_clear(__pWebCore->GetWebNativeNode());
 }
 
 
@@ -3542,6 +3738,9 @@ _WebImpl::GetBlockRange(FloatPoint& startPoint, FloatPoint& endPoint) const
        Eina_Rectangle leftHandle;
        Eina_Rectangle rightHandle;
 
+       EINA_RECTANGLE_SET(&leftHandle, 0, 0, 0, 0);
+       EINA_RECTANGLE_SET(&rightHandle, 0, 0, 0, 0);
+
        ewk_view_text_selection_range_get(__pWebCore->GetWebNativeNode(), &leftHandle, &rightHandle);
 
        startPoint.x = _CoordinateSystemUtils::ConvertToFloat(leftHandle.x);
@@ -3563,18 +3762,9 @@ _WebImpl::GetFaviconN(void) const
        result r = E_SUCCESS;
 
        Evas_Object* pView = __pWebCore->GetWebNativeNode();
-
-       Evas* pEvas = evas_object_evas_get(pView);
        Ewk_Context* pContext = ewk_view_context_get(pView);
-       SysAssertf(pEvas && pContext, "Failed to request");
-
        const char* pUrl = ewk_view_url_get(pView);
-
-       Tizen::Graphics::BufferInfo bufferInfo;
-       Tizen::Base::ByteBuffer byteBuffer;
-
-       std::unique_ptr<Bitmap> pBitmapImage(new (std::nothrow) Bitmap());
-       SysTryReturn(NID_WEB_CTRL, pBitmapImage.get(), null, E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
+       Evas* pEvas = evas_object_evas_get(pView);
 
        Evas_Object* pFavicon = ewk_context_icon_database_icon_object_add(pContext, pUrl, pEvas);
        if (!pFavicon)
@@ -3582,18 +3772,24 @@ _WebImpl::GetFaviconN(void) const
                return null;
        }
 
+       Tizen::Graphics::BufferInfo bufferInfo;
+
        r = _Utility::GetPixelBufferFromEvasObject(pFavicon,  bufferInfo);
        SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
 
        const Dimension dimension(bufferInfo.width, bufferInfo.height);
-
+       Tizen::Base::ByteBuffer byteBuffer;
+       
        r = byteBuffer.Construct((byte*)bufferInfo.pPixels, 0, dimension.height * dimension.width * 32, dimension.height * dimension.width * 32 );
        SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
 
-       r = pBitmapImage->Construct(byteBuffer, dimension, BITMAP_PIXEL_FORMAT_ARGB8888);
+       std::unique_ptr<Bitmap> pImage(new (std::nothrow) Bitmap());
+       SysTryReturn(NID_WEB_CTRL, pImage.get(), null, E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
+
+       r = pImage->Construct(byteBuffer, dimension, BITMAP_PIXEL_FORMAT_ARGB8888);
        SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
 
-       return pBitmapImage.release();
+       return pImage.release();
 
 }
 
@@ -3637,6 +3833,36 @@ _WebImpl::GetPageSize(void) const
 }
 
 
+result
+_WebImpl::AddHttpHeaderField(const String& name, const String& value)
+{
+       SysTryReturnResult(NID_WEB_CTRL, name.GetLength() > 0, E_INVALID_ARG, "Invalid argument(s) is used. name key is missing.");
+
+       std::unique_ptr<char[]> pName(_StringConverter::CopyToCharArrayN(name));
+       SysTryReturn(NID_WEB_CTRL, pName.get(), GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+
+       std::unique_ptr<char[]> pValue(_StringConverter::CopyToCharArrayN(value));
+
+       ewk_view_custom_header_add(__pWebCore->GetWebNativeNode(), pName.get(), pValue.get());
+
+       return E_SUCCESS;
+}
+
+
+result
+_WebImpl::RemoveHttpHeaderField(const String& name)
+{
+       SysTryReturnResult(NID_WEB_CTRL, name.GetLength() > 0, E_INVALID_ARG, "Invalid argument(s) is used. name key is missing.");
+
+       std::unique_ptr<char[]> pName(_StringConverter::CopyToCharArrayN(name));
+       SysTryReturn(NID_WEB_CTRL, pName.get(), GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+
+       ewk_view_custom_header_remove(__pWebCore->GetWebNativeNode(), pName.get());
+
+       return E_SUCCESS;
+}
+
+
 void
 _WebImpl::SetLoadingErrorOccurred(bool arg)
 {
@@ -3693,6 +3919,13 @@ _WebImpl::IsCertificateRequested(void) const
 }
 
 
+void
+_WebImpl::SetCertificateConfirmed(bool arg)
+{
+       __isCertificateConfirmed = arg;
+}
+
+
 bool
 _WebImpl::IsCertificateConfirmed(void) const
 {
@@ -3701,100 +3934,31 @@ _WebImpl::IsCertificateConfirmed(void) const
 
 
 result
-_WebImpl::LaunchAppControl(const IEventArg& arg)
+_WebImpl::SetFullScreenKeypad(void)
 {
        result r = E_SUCCESS;
 
-       IEventArg* pArg = const_cast< IEventArg* >(&arg);
-       _WebEventArg* pWebEventArg = dynamic_cast< _WebEventArg* >(pArg);
-       SysTryReturnResult(NID_WEB_CTRL, pWebEventArg, E_INVALID_ARG, "Type casting failed. argument must be IEventArg type.");
+       std::unique_ptr<Keypad> pKeypad(new (std::nothrow) Keypad());
+       SysTryReturnResult(NID_WEB_CTRL, pKeypad.get(), E_OUT_OF_MEMORY, "Memory allocation failed.");
 
-       String operationId(L"");
-       String uriPattern(pWebEventArg->GetEventMessage());
-       SysLog(NID_WEB_CTRL, "The current value of web event type is %d", pWebEventArg->GetEventType());
+       r = pKeypad->Construct(KEYPAD_STYLE_NORMAL, 100);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
-       switch (pWebEventArg->GetEventType())
-       {
-       case WEB_EVENT_REQUEST_RTSP:
-       {
-               String ext;
-               String mimeType;
-               int uriLength = uriPattern.GetLength();
-               int index;
+       String text(ewk_view_focused_input_element_value_get(__pWebCore->GetWebNativeNode()));
+       pKeypad->SetText(text);
 
-               operationId = L"http://tizen.org/appcontrol/operation/view";
+       r = pKeypad->SetShowState(true);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
-               r = uriPattern.LastIndexOf(L".", uriLength - 1, index);
-               SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+       r = pKeypad->Show();
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
-               r = uriPattern.SubString(index + 1, ext);
-               SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+       pKeypad->AddTextEventListener(*this);
 
-               r = _AppControlManager::GetMimeFromExt(ext, mimeType);
-               SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+       __pKeypad = std::move(pKeypad);
 
-               r = _AppControlImpl::FindAndStart(operationId, &uriPattern, &mimeType, null, null, null);
-               SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
-
-               return r;
-       }
-       case WEB_EVENT_REQUEST_TEL:
-       {
-               operationId = L"http://tizen.org/appcontrol/operation/dial";
-               break;
-       }
-       case WEB_EVENT_REQUEST_EMAIL:
-       //fall through
-       case WEB_EVENT_REQUEST_SMS:
-       //fall through
-       case WEB_EVENT_REQUEST_MMS:
-       {
-               operationId = L"http://tizen.org/appcontrol/operation/compose";
-               break;
-       }
-       case WEB_EVENT_REQUEST_UNKNOWN:
-       {
-               operationId = L"http://tizen.org/appcontrol/operation/view";
-               break;
-       }
-       default:
-               SysAssert(false);
-               break;
-       }
-
-       r = _AppControlImpl::FindAndStart(operationId, &uriPattern, null, null, null, null);
-       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
-
-       return r;
-}
-
-
-result
-_WebImpl::SetFullScreenKeypad(void)
-{
-       result r = E_SUCCESS;
-
-       std::unique_ptr<Keypad> pKeypad(new (std::nothrow) Keypad());
-       SysTryReturnResult(NID_WEB_CTRL, pKeypad.get(), E_OUT_OF_MEMORY, "Memory allocation failed.");
-
-       r = pKeypad->Construct(KEYPAD_STYLE_NORMAL, 100);
-       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
-
-       String text(ewk_view_focused_input_element_value_get(__pWebCore->GetWebNativeNode()));
-       pKeypad->SetText(text);
-
-       r = pKeypad->SetShowState(true);
-       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
-
-       r = pKeypad->Show();
-       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
-
-       pKeypad->AddTextEventListener(*this);
-
-       __pKeypad = std::move(pKeypad);
-
-       return E_SUCCESS;
-}
+       return E_SUCCESS;
+}
 
 
 void
@@ -4286,13 +4450,14 @@ _WebImpl::ShowAuthenticationPopup(const String& host, const String& realm, Authe
 
        int modalResult = 0;
 
-       __pAuthPopup->SetOwner(&GetPublic());
-       
        r = __pAuthPopup->ShowAndWait(modalResult);
        SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
 
 CATCH:
-       __pAuthPopup.reset();
+       if (__pAuthPopup)
+       {
+               __pAuthPopup.reset();
+       }
 
        return r;
 }
@@ -4313,48 +4478,151 @@ _WebImpl::ShowCertificateConfirmPopup(_CertificatePopupMode userConfirmMode, Ewk
 
        int modalResult = 0;
 
-       __pCertConfirmPopup->SetOwner(&GetPublic());
-       
        r = __pCertConfirmPopup->ShowAndWait(modalResult);
        SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
 
-       if (userConfirmMode == CERTIFICATE_POPUP_MODE_USER_CONFIRM)
+       if (__pCertConfirmPopup.get() && userConfirmMode == CERTIFICATE_POPUP_MODE_USER_CONFIRM)
        {
                __isCertificateConfirmed = __pCertConfirmPopup->GetConfirmResult();
        }
 
 CATCH:
-       __pCertConfirmPopup.reset();
+       if (__pCertConfirmPopup.get())
+       {
+               __pCertConfirmPopup.reset();
+       }
 
        return r;
 }
 
+
 result
-_WebImpl::ShowUserConfirmPopup(_UserConfirmMode userConfirmMode, void* pPolicy)
+_WebImpl::ShowPromptPopup(String msg, String defVal)
 {
        result r = E_SUCCESS;
 
-       std::unique_ptr<_UserConfirmPopup> pUserConfirmPopup(new (std::nothrow) _UserConfirmPopup());
-       SysTryReturnResult(NID_WEB_CTRL, pUserConfirmPopup.get(), E_OUT_OF_MEMORY, "Memory Allocation failed.");
+       std::unique_ptr< _PromptPopup > pPromptPopup(new (std::nothrow) _PromptPopup());
+       SysTryReturnResult(NID_WEB_CTRL, pPromptPopup.get(), E_OUT_OF_MEMORY, "Memory Allocation failed.");
 
-       r = pUserConfirmPopup->Construct(userConfirmMode, pPolicy, true);
+       r = pPromptPopup->Construct(msg, defVal, __pWebCore->GetWebNativeNode(), this);
        SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
-       __pUserConfirmPopup = std::move(pUserConfirmPopup);
+       __pPromptPopup = std::move(pPromptPopup);
 
-       int modalResult = 0;
-
-       __pUserConfirmPopup->SetOwner(&GetPublic());
-       
-       r = __pUserConfirmPopup->ShowAndWait(modalResult);
+       r = __pPromptPopup->ShowPopup();
        SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
-       
+
+       return E_SUCCESS;
+
 CATCH:
-       __pUserConfirmPopup.reset();
+       __pPromptPopup.reset();
 
        return r;
+
 }
 
+
+result
+_WebImpl::ShowUserConfirmPopup(_UserConfirmMode userConfirmMode, void* pPolicy, String msg)
+{
+       result r = E_SUCCESS;
+
+       std::unique_ptr<_UserConfirmPopup> pUserConfirmPopup(new (std::nothrow) _UserConfirmPopup());
+       SysTryReturnResult(NID_WEB_CTRL, pUserConfirmPopup.get(), E_OUT_OF_MEMORY, "Memory Allocation failed.");
+
+       r = pUserConfirmPopup->Construct(userConfirmMode, pPolicy, this, true, msg);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       int modalResult = 0;
+
+       switch(userConfirmMode)
+       {
+       case USER_CONTENT_HANDLER:
+       {
+               __pContentHandlerConfirmPopup = std::move(pUserConfirmPopup);
+
+               r = __pContentHandlerConfirmPopup->ShowAndWait(modalResult);
+               SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, __pContentHandlerConfirmPopup.reset(), r, "[%s] Propagating.", GetErrorMessage(r));
+
+               __pContentHandlerConfirmPopup.reset();
+
+               ewk_view_resume(__pWebCore->GetWebNativeNode());
+
+               break;
+       }
+       case USER_PROTOCOL_HANDLER:
+       {
+               __pProtocolHandlerConfirmPopup = std::move(pUserConfirmPopup);
+
+               r = __pProtocolHandlerConfirmPopup->ShowAndWait(modalResult);
+               SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, __pProtocolHandlerConfirmPopup.reset(), r, "[%s] Propagating.", GetErrorMessage(r));
+
+               __pProtocolHandlerConfirmPopup.reset();
+
+               ewk_view_resume(__pWebCore->GetWebNativeNode());
+
+               break;
+       }
+       case USER_CONFIRM_APP_CACHE:
+       {
+               __pAppCacheConfirmPopup = std::move(pUserConfirmPopup);
+
+               r = __pAppCacheConfirmPopup->ShowAndWait(modalResult);
+               SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, __pAppCacheConfirmPopup.reset(), r, "[%s] Propagating.", GetErrorMessage(r));
+
+               __pAppCacheConfirmPopup.reset();
+
+               ewk_view_resume(__pWebCore->GetWebNativeNode());
+
+               break;
+       }
+       case USER_CONFIRM_DB_QUOTA_EXCEDED:
+       {
+               __pDbQuotaConfirmPopup = std::move(pUserConfirmPopup);
+
+               r = __pDbQuotaConfirmPopup->ShowAndWait(modalResult);
+               SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, __pDbQuotaConfirmPopup.reset(), r, "[%s] Propagating.", GetErrorMessage(r));
+
+               __pDbQuotaConfirmPopup.reset();
+
+               ewk_view_resume(__pWebCore->GetWebNativeNode());
+
+               break;
+       }
+       case USER_CONFIRM_LOCAL_FS_QUOTA_EXCEDED:
+       {
+               __pLocalFsQuotaConfirmPopup = std::move(pUserConfirmPopup);
+
+               r = __pLocalFsQuotaConfirmPopup->ShowAndWait(modalResult);
+               SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, __pLocalFsQuotaConfirmPopup.reset(), r, "[%s] Propagating.", GetErrorMessage(r));
+
+               __pLocalFsQuotaConfirmPopup.reset();
+
+               ewk_view_resume(__pWebCore->GetWebNativeNode());
+
+               break;
+       }
+       case USER_CONFIRM_INDEXED_DB_QUOTA_EXCEDED:
+       {
+               __pIndexedDbQuotaConfirmPopup = std::move(pUserConfirmPopup);
+
+               r = __pIndexedDbQuotaConfirmPopup->ShowAndWait(modalResult);
+               SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, __pIndexedDbQuotaConfirmPopup.reset(), r, "[%s] Propagating.", GetErrorMessage(r));
+
+               __pIndexedDbQuotaConfirmPopup.reset();
+
+               ewk_view_resume(__pWebCore->GetWebNativeNode());
+
+               break;
+       }
+       default:
+               break;
+       }
+CATCH:
+               return r;
+}
+
+
 result
 _WebImpl::ShowUserConfirmPopupAsync(_UserConfirmMode userConfirmMode, void* pPolicy, String msg)
 {
@@ -4363,53 +4631,113 @@ _WebImpl::ShowUserConfirmPopupAsync(_UserConfirmMode userConfirmMode, void* pPol
        std::unique_ptr<_UserConfirmPopup> pUserConfirmPopup(new (std::nothrow) _UserConfirmPopup());
        SysTryReturnResult(NID_WEB_CTRL, pUserConfirmPopup.get(), E_OUT_OF_MEMORY, "Memory Allocation failed.");
 
-       r = pUserConfirmPopup->Construct(userConfirmMode, pPolicy, false, msg);
+       r = pUserConfirmPopup->Construct(userConfirmMode, pPolicy, this, false, msg);
        SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
-       __pUserConfirmPopup = std::move(pUserConfirmPopup);
+       switch(userConfirmMode)
+       {
+       case USER_CONFIRM_USERMEDIA:
+       {
+        __pUserMediaConfirmPopup.reset();
+
+               __pUserMediaConfirmPopup = std::move(pUserConfirmPopup);
 
-       __pUserConfirmPopup->SetOwner(&GetPublic());
+               r = __pUserMediaConfirmPopup->ShowPopup();
+               SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, __pUserMediaConfirmPopup.reset(), r, "[%s] Propagating.", GetErrorMessage(r));
 
-       r = __pUserConfirmPopup->ShowPopup();
-       SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
+               __pUserMediaConfirmPopup.release();
+               break;
+       }
+       case USER_CONFIRM_GEOLOCATION:
+       {
+               __pGeolocationConfirmPopup.reset();
+
+               __pGeolocationConfirmPopup = std::move(pUserConfirmPopup);
+
+               r = __pGeolocationConfirmPopup->ShowPopup();
+               SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, __pGeolocationConfirmPopup.reset(), r, "[%s] Propagating.", GetErrorMessage(r));
+
+               __pGeolocationConfirmPopup.release();
+               break;
+       }
+       case USER_CONFIRM_NOTIFICATION:
+       {
+               __pNotificationConfirmPopup.reset();
+
+               __pNotificationConfirmPopup = std::move(pUserConfirmPopup);
+
+               r = __pNotificationConfirmPopup->ShowPopup();
+               SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, __pNotificationConfirmPopup.reset(), r, "[%s] Propagating.", GetErrorMessage(r));
+
+               __pNotificationConfirmPopup.release();
+               break;
+       }
+       case USER_SCRIPT_ALERT:
+       {
+               __pScriptAlertConfirmPopup.reset();
+
+               __pScriptAlertConfirmPopup = std::move(pUserConfirmPopup);
+
+               r = __pScriptAlertConfirmPopup->ShowPopup();
+               SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, __pScriptAlertConfirmPopup.reset(), r, "[%s] Propagating.", GetErrorMessage(r));
+
+               __pScriptAlertConfirmPopup.release();
+               break;
+       }
+       case USER_SCRIPT_CONFIRM:
+       {
+               __pScriptConfirmPopup.reset();
+
+               __pScriptConfirmPopup = std::move(pUserConfirmPopup);
+
+               r = __pScriptConfirmPopup->ShowPopup();
+               SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, __pScriptConfirmPopup.reset(), r, "[%s] Propagating.", GetErrorMessage(r));
+
+               __pScriptConfirmPopup.release();
 
-       __pUserConfirmPopup.release();
+               break;
+       }
+       default:
+               break;
+       }
 
        return E_SUCCESS;
 
 CATCH:
-       __pUserConfirmPopup.reset();
-
        return r;
 }
 
 
-_Form*
-_WebImpl::GetParentFormCore(_Control* pControlCore)
+_FormImpl*
+_WebImpl::GetParentFormImpl(_ControlImpl* pControlImpl)
 {
        String parentName;
-       _Form* pFormCore = null;
+       _FormImpl* pFormImpl = null;
 
-       _Control* pParentControlCore = dynamic_cast< _Control* >(pControlCore->GetParent());
-       if (!pParentControlCore)
+       _ControlImpl* pParentControlImpl = dynamic_cast< _ControlImpl* >(pControlImpl->GetParent());
+       if (!pParentControlImpl)
        {
                return null;
        }
 
-       pFormCore = dynamic_cast< _Form* >(pParentControlCore);
-       if (pFormCore)
+       pFormImpl = dynamic_cast< _FormImpl* >(pParentControlImpl);
+       if (pFormImpl)
        {
-               return pFormCore;
+               return pFormImpl;
        }
 
-       return GetParentFormCore(pParentControlCore);
+       return GetParentFormImpl(pParentControlImpl);
 }
 
 
 bool 
 _WebImpl::OnFocusGained(const _ControlImpl& source)
 {
-       return true;
+       Ewk_Settings* pSettings = ewk_view_settings_get(__pWebCore->GetWebNativeNode());
+       SysAssertf(pSettings, "Failed to get webkit instance.");
+       ewk_settings_clear_text_selection_automatically_set(pSettings, true);
+
+       return false;
 }
 
 
@@ -4423,9 +4751,13 @@ _WebImpl::OnFocusLost(const _ControlImpl& source)
                SetKeypadVisibleState(false);
        }
 
+       Ewk_Settings* pSettings = ewk_view_settings_get(__pWebCore->GetWebNativeNode());
+       SysAssertf(pSettings, "Failed to get webkit instance.");
+       ewk_settings_clear_text_selection_automatically_set(pSettings, false);
+
        evas_object_focus_set(__pWebCore->GetWebNativeNode(), EINA_FALSE);
 
-       return true;
+       return false;
 }
 
 
@@ -4446,13 +4778,44 @@ _WebImpl::OnPreAttachedToMainTree(void)
 {
        result r = E_SUCCESS;
 
-       r = __pWebCore->InitializeWebNativeNode();
-       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+       if (IsVisible() == true)
+       {
+               _WebManager* pWebManager = _WebManager::GetInstance();
+               pWebManager->SetActiveWeb(this);
+       }
 
-       r = InitializeSetting();
+       r = _ContainerImpl::OnPreAttachedToMainTree();
        SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
-       r = _ContainerImpl::OnPreAttachedToMainTree();
+       if (!HasValidNativeNode())
+       {
+               r = __pWebCore->InitializeWebNativeNode();
+               SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+               _ControlManager* pControlManager = _ControlManager::GetInstance();
+               SysTryReturnResult(NID_WEB_CTRL, pControlManager, E_SYSTEM, "Failed to get the ControlManager instance.");
+               OnChangeLayout(pControlManager->GetScreenRotation());
+
+               r = InitializeSetting();
+               SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+               _WebManager* pWebManager = _WebManager::GetInstance();
+               pWebManager->AddWeb(reinterpret_cast< int >(this));
+       }
+
+       return E_SUCCESS;
+}
+
+
+result
+_WebImpl::OnDetachingFromMainTree(void)
+{
+       result r = E_SUCCESS;
+
+       _WebManager* pWebManager = _WebManager::GetInstance();
+       pWebManager->RemoveActiveWeb(this);
+
+       r = _ContainerImpl::OnDetachingFromMainTree();
        SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
        return E_SUCCESS;
@@ -4460,6 +4823,32 @@ _WebImpl::OnPreAttachedToMainTree(void)
 
 
 void
+_WebImpl::OnChangeLayout(_ControlRotation rotation)
+{
+       int degree = 0;
+
+       switch (rotation)
+       {
+               case _CONTROL_ROTATION_0:
+                       degree =  0;
+                       break;
+               case _CONTROL_ROTATION_90:
+                       degree =  90;
+                       break;
+               case _CONTROL_ROTATION_180:
+                       degree =  180;
+                       break;
+               case _CONTROL_ROTATION_270:
+                       degree =  -90;
+                       break;
+               default:
+                       SysAssert(false);
+       }
+       ewk_view_orientation_send(__pWebCore->GetWebNativeNode(), degree);
+}
+
+
+void
 _WebImpl::OnChangeLayout(_ControlOrientation orientation)
 {
        _ContainerImpl::OnChangeLayout(orientation);
@@ -4468,23 +4857,71 @@ _WebImpl::OnChangeLayout(_ControlOrientation orientation)
        {
                __pColorPicker->ChangeLayout(orientation);
        }
+
+       HideFormDataWindow();
+
+       std::unique_ptr< IEnumerator > pEnum(__webNotificationList.GetEnumeratorN());
+       _WebNotification* pWebNotification = null;
+
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               pWebNotification = static_cast< _WebNotification* >(pEnum->GetCurrent());
+               pWebNotification->OnChangeLayout();
+       }
 }
 
 
 void
 _WebImpl::OnAncestorVisibleStateChanged(const _Control& control)
 {
+       _WebManager* pWebManager = _WebManager::GetInstance();
        if (IsVisible() == true)
        {
+               pWebManager->SetActiveWeb(this);
                ewk_view_page_visibility_state_set(__pWebCore->GetWebNativeNode(), EWK_PAGE_VISIBILITY_STATE_VISIBLE, false);
        }
        else
        {
+               pWebManager->RemoveActiveWeb(this);
                ewk_view_page_visibility_state_set(__pWebCore->GetWebNativeNode(), EWK_PAGE_VISIBILITY_STATE_HIDDEN, false);
        }
 }
 
 
+void
+_WebImpl::OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::IList* pArgs)
+{
+       _ContainerImpl::OnUserEventReceivedN(requestId, pArgs);
+       
+       switch (requestId)
+       {
+       case ID_CERTIFICATE_CONFIRM_POPUP_CLOSE:
+               __pCertConfirmPopup.reset();
+               break;
+       case ID_PROMPT_POPUP_CLOSE:
+               __pPromptPopup.reset();
+               break;
+       case ID_USER_CONFIRM_USERMEDIA_CLOSE:
+               __pUserMediaConfirmPopup.reset();
+               break;
+       case ID_USER_CONFIRM_GEOLOCATION_CLOSE:
+               __pGeolocationConfirmPopup.reset();
+               break;
+       case ID_USER_CONFIRM_NOTIFICATION_CLOSE:
+               __pNotificationConfirmPopup.reset();
+               break;
+       case ID_USER_SCRIPT_ALERT_CLOSE:
+               __pScriptAlertConfirmPopup.reset();
+               break;
+       case ID_USER_SCRIPT_CONFIRM_CLOSE:
+               __pScriptConfirmPopup.reset();
+               break;
+       default:
+               break;
+       }
+}
+
+
 _WebDataHandler*
 _WebImpl::GetDownloadHandler(void) const
 {
@@ -4519,12 +4956,16 @@ _WebImpl::ShowColorPicker(int red, int green, int blue, int alpha, Color& color)
        r = __pColorPicker->ShowPopup();
        SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
 
-       color = __pColorPicker->GetColor();
-
-       return E_SUCCESS;
+       if (__pColorPicker)
+       {
+               color = __pColorPicker->GetColor();
+       }
 
 CATCH:
-       __pColorPicker.reset();
+       if (__pColorPicker)
+       {
+               __pColorPicker.reset();
+       }
 
        return r;
 }
@@ -4546,10 +4987,16 @@ _WebImpl::ShowDatePicker(Ewk_Input_Type inputType, const char* inputValue, Strin
        r = __pDatePicker->ShowPopup();
        SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
 
-       dateStr = __pDatePicker->GetDate();
+       if (__pDatePicker)
+       {
+               dateStr = __pDatePicker->GetDate();
+       }
 
 CATCH:
-       __pDatePicker.reset();
+       if (__pDatePicker)
+       {
+               __pDatePicker.reset();
+       }
 
        return r;
 }
@@ -4803,4 +5250,85 @@ _WebImpl::GetRedirectUri(const Tizen::Base::String& originUri, const Tizen::Base
 }
 
 
+void
+_WebImpl::SetFormDataList(Eina_List* pFormDataList)
+{
+       __pFormDataList = pFormDataList;
+}
+
+
+bool
+_WebImpl::IsFormDataWindowVisible(void) const
+{
+       return __isFormDataVisible;
+}
+
+
+result
+_WebImpl::ShowFormDataWindow(const Rectangle& windowRect, Evas_Object* pWebView)
+{
+       Rectangle rect(_CoordinateSystemUtils::InverseTransform(Rectangle(windowRect.x, windowRect.y + windowRect.height, windowRect.width, windowRect.height)));
+
+       if (__isFormDataVisible)
+       {
+               result r = __pFormDataWindow->UpdateList(__pFormDataList, rect);
+               SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+       }
+       else
+       {
+               __pFormDataWindow.reset();
+
+               std::unique_ptr<_FormDataWindow> pFormDataWindow( new (std::nothrow) _FormDataWindow());
+               SysTryReturnResult(NID_WEB_CTRL, pFormDataWindow.get(), E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
+
+               result r = pFormDataWindow->Construct(rect, this, pWebView);
+               SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+               r = pFormDataWindow->UpdateList(__pFormDataList, rect);
+               SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+               r = pFormDataWindow->LaunchFormDataWindow();
+               SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+               __pFormDataWindow = std::move(pFormDataWindow);
+               __isFormDataVisible = true;
+       }
+
+       return E_SUCCESS;
+}
+
+
+void
+_WebImpl::HideFormDataWindow(bool delWindow)
+{
+       if (delWindow)
+       {
+               __pFormDataWindow.reset();
+       }
+
+       __isFormDataVisible = false;
+}
+
+
+void
+_WebImpl::ClearWebNotification(_WebNotification* pWebNotification)
+{
+       __webNotificationList.Remove(*pWebNotification);
+}
+
+
+void
+_WebImpl::SetWebNotification(_WebNotification* pWebNotification)
+{
+       __webNotificationList.Add(pWebNotification);
+}
+
+
+void
+_WebImpl::OnDownloadCompleted(RequestId reqId, const String &path)
+{
+       _ContentManagerImpl::ScanFile(path);
+}
+
+
 }}} // Tizen::Web::Controls