X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fcontrols%2FFWebCtrl_WebImpl.cpp;h=4e0d109cde56a8e849eac05767bd429b29e49b73;hb=refs%2Ftags%2Faccepted%2Ftizen%2F2.2%2Fmain%2F20140102.100224;hp=e88ea048c2a41c0af964ef0c44af3f9a5ace7472;hpb=d229bf0ce50b10cb6df637941177775c26795690;p=framework%2Fosp%2Fweb.git diff --git a/src/controls/FWebCtrl_WebImpl.cpp b/src/controls/FWebCtrl_WebImpl.cpp index e88ea04..4e0d109 100755 --- a/src/controls/FWebCtrl_WebImpl.cpp +++ b/src/controls/FWebCtrl_WebImpl.cpp @@ -37,7 +37,6 @@ #include #include #include -#include #include #include #include @@ -47,6 +46,7 @@ #include #include #include +#include #include #include #include @@ -69,28 +69,33 @@ #include #include #include -#include #include +#include #include #include +#include +#include #include #include #include #include +#include #include #include #include #include #include -#include +#include #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_WebNotification.h" #include "FWebCtrl_PageNavigationListImpl.h" #include "FWebCtrl_PromptPopup.h" #include "FWebCtrl_SelectBox.h" @@ -100,6 +105,7 @@ #include "FWebCtrl_WebEvent.h" #include "FWebCtrl_WebEventArg.h" #include "FWebCtrl_WebImpl.h" +#include "FWebCtrl_WebManager.h" #include "FWebCtrl_WebPresenter.h" #include "FWebCtrl_WebSettingImpl.h" @@ -114,6 +120,7 @@ using namespace Tizen::Graphics; using namespace Tizen::Io; using namespace Tizen::Media; using namespace Tizen::Net::Http; +using namespace Tizen::System; using namespace Tizen::Ui; using namespace Tizen::Ui::Animations; using namespace Tizen::Ui::Controls; @@ -140,23 +147,7 @@ static const int MAX_TEXT_MATCH = pow(2, 31) - 1; static const int PORTRAIT_KEYPAD_HEIGHT = 444; static const int LANDSCAPE_KEYPAD_HEIGHT = 316; - - -Eina_Bool -AddHttpHeaderData(const Eina_Hash* pHash, const void* pKey, void* pValue, void* pUserData) -{ - result r = E_SUCCESS; - - String key(reinterpret_cast< const char* >(pKey)); - String value(reinterpret_cast< char* >(pValue)); - - SysLog(NID_WEB_CTRL, "The current value of key is %ls, value is %ls", key.GetPointer(), value.GetPointer()); - - r = reinterpret_cast< HttpHeader* >(pUserData)->AddField(key, value); - SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r)); - - return EINA_TRUE; -} +static const int DEFAULT_LIST_ITEM_COUNT = 5; Eina_Bool @@ -168,7 +159,7 @@ AddHttpAttributeData(const Eina_Hash* pHash, const void* pKey, void* pValue, voi std::unique_ptr pAttrValue(new (std::nothrow) String(reinterpret_cast< char* >(pValue))); SysTryReturn(NID_WEB_CTRL, pAttrKey.get() && pAttrValue.get(), EINA_FALSE, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY)); - SysLog(NID_WEB_CTRL, "The current value of key is %ls, value is %ls", pAttrKey->GetPointer(), pAttrValue->GetPointer()); + SysSecureLog(NID_WEB_CTRL, "The current value of key is %ls, value is %ls", pAttrKey->GetPointer(), pAttrValue->GetPointer()); r = reinterpret_cast< HashMap* >(pUserData)->Add(*pAttrKey, *pAttrValue); SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r)); @@ -333,20 +324,15 @@ OnScriptAlertRequested(Evas_Object* pView, const char* pMessage, void* pUserData { SysLog(NID_WEB_CTRL, "The current value of message is %s", pMessage); - result r = E_SUCCESS; - + _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData); String msg(pMessage); - MessageBox messageBox; - r = messageBox.Construct(L"", msg, MSGBOX_STYLE_OK); - SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r)); - - int modalResult = 0; - r = messageBox.ShowAndWait(modalResult); - SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r)); + result r = pImpl->ShowUserConfirmPopupAsync(USER_SCRIPT_ALERT, pView, msg); + SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r)); + return EINA_TRUE; +CATCH: ewk_view_javascript_alert_reply(pView); - return EINA_TRUE; } @@ -357,26 +343,15 @@ OnScriptConfirmRequested(Evas_Object* pView, const char* pMessage, void* pUserDa SysLog(NID_WEB_CTRL, "The current value of message is %s", pMessage); result r = E_SUCCESS; - + _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; - 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; } @@ -387,32 +362,39 @@ OnScriptPromptRequested(Evas_Object* pView, const char* pMessage, const char* pD SysLog(NID_WEB_CTRL, "The current value of message is %s, defaulValue is %s", pMessage, pDefaultValue); result r = E_SUCCESS; + _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData); String msg(pMessage); String defVal(pDefaultValue); - int modalResult = -1; - Eina_Bool returnValue = EINA_TRUE; - _PromptPopup pPromptPopup; + r = pImpl->ShowPromptPopup(msg, defVal); + SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r)); - r = pPromptPopup.Construct(msg, defVal); - SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, returnValue = EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r)); + return EINA_TRUE; - r = pPromptPopup.ShowAndWait(modalResult); - SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, returnValue = EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r)); +CATCH: + ewk_view_javascript_prompt_reply(pView, null); - if (modalResult == ID_BUTTON_PROMPT_OK) - { - std::unique_ptr pResult(_StringConverter::CopyToCharArrayN(pPromptPopup.GetPromptText())); - SysTryCatch(NID_WEB_CTRL, pResult.get(), returnValue = EINA_FALSE, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult())); + return EINA_TRUE; +} - ewk_view_javascript_prompt_reply(pView, pResult.get()); - return EINA_TRUE; - } + +Eina_Bool +_WebImpl::OnBeforeUnloadConfirmRequested(Evas_Object* pView, const char* pMessage, void* pUserData) +{ + _WebImpl* pWebImpl = reinterpret_cast< _WebImpl* >(pUserData); + SysAssertf(pWebImpl, "Failed to request"); + result r = E_SUCCESS; + + String msg(pMessage); + + r = pWebImpl->ShowUserConfirmPopupAsync(USER_BEFORE_UNLOAD_CONFIRM, pView, msg); + SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r)); + return EINA_TRUE; CATCH: - ewk_view_javascript_prompt_reply(pView, null); - return returnValue; + ewk_view_javascript_confirm_reply(pView, EINA_FALSE); + return EINA_TRUE; } @@ -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 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(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,121 @@ 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"); + + _SystemResource* pSysResource = _SystemResource::GetInstance(); + SysAssertf(pSysResource != null, "Failed to get _SystemResource instance"); + + result r = E_SUCCESS; + + String message(L""); + r = message.Format(512, + pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BODY_P1SS_HP2SS_IS_REQUESTING_PERMISSION_TO_STORE_DATA_ON_YOUR_DEVICE_FOR_OFFLINE_USE").GetPointer(), + _StringConverter::CopyToCharArrayN(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_BR_BODY_THIS_WEBPAGE")), + ewk_security_origin_host_get(pSecOrigin)); + SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r)); + + r = pImpl->ShowUserConfirmPopup(USER_CONFIRM_APP_CACHE, pView, message); + SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r)); + + return EINA_TRUE; + +CATCH: + ewk_view_application_cache_permission_reply(pView, EINA_FALSE); + 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"); + + _SystemResource* pSysResource = _SystemResource::GetInstance(); + SysAssertf(pSysResource != null, "Failed to get _SystemResource instance"); + + result r = E_SUCCESS; + + String message(L""); + r = message.Format(512, + pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BODY_P1SS_HP2SS_IS_ATTEMPTING_TO_STORE_A_LARGE_AMOUNT_OF_DATA_ON_YOUR_DEVICE_FOR_OFFLINE_USE").GetPointer(), + _StringConverter::CopyToCharArrayN(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_BR_BODY_THIS_WEBPAGE")), + ewk_security_origin_host_get(pSecOrigin)); + SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r)); + + r = pImpl->ShowUserConfirmPopup(USER_CONFIRM_INDEXED_DB_QUOTA_EXCEDED, pView, message); + SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r)); + + return EINA_TRUE; + +CATCH: + ewk_view_exceeded_indexed_database_quota_reply(pView, EINA_FALSE); + 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"); + + _SystemResource* pSysResource = _SystemResource::GetInstance(); + SysAssertf(pSysResource != null, "Failed to get _SystemResource instance"); + + result r = E_SUCCESS; + + String message(L""); + r = message.Format(512, + pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BODY_P1SS_HP2SS_IS_ATTEMPTING_TO_STORE_A_LARGE_AMOUNT_OF_DATA_ON_YOUR_DEVICE_FOR_OFFLINE_USE").GetPointer(), + _StringConverter::CopyToCharArrayN(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_BR_BODY_THIS_WEBPAGE")), + ewk_security_origin_host_get(pSecOrigin)); + SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r)); + + r = pImpl->ShowUserConfirmPopup(USER_CONFIRM_DB_QUOTA_EXCEDED, pView, message); + SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r)); + + return EINA_TRUE; + +CATCH: + ewk_view_exceeded_database_quota_reply(pView, EINA_FALSE); + 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"); + + _SystemResource* pSysResource = _SystemResource::GetInstance(); + SysAssertf(pSysResource != null, "Failed to get _SystemResource instance"); + + result r = E_SUCCESS; + + String message(L""); + r = message.Format(512, + pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_TPLATFORM_BODY_P1SS_HP2SS_IS_ATTEMPTING_TO_STORE_A_LARGE_AMOUNT_OF_DATA_ON_YOUR_DEVICE_FOR_OFFLINE_USE").GetPointer(), + _StringConverter::CopyToCharArrayN(pSysResource->GetString(_RESOURCE_DOMAIN_ID_OSP, "IDS_BR_BODY_THIS_WEBPAGE")), + ewk_security_origin_host_get(pSecOrigin)); + SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r)); + + r = pImpl->ShowUserConfirmPopup(USER_CONFIRM_LOCAL_FS_QUOTA_EXCEDED, pView, message); + SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r)); + + return EINA_TRUE; + +CATCH: + ewk_view_exceeded_local_file_system_quota_reply(pView, EINA_FALSE); + return EINA_TRUE; +} + void OnGeolocationPermissionRequested(void* pUserData, Evas_Object* pView, void* pEventInfo) @@ -565,20 +706,20 @@ CATCH: void OnNotificationPermissionRequested(void* pUserData, Evas_Object* pView, void* pEventInfo) { + result r = E_SUCCESS; _WebImpl* pImpl = reinterpret_cast<_WebImpl*>(pUserData); + Ewk_Notification_Permission_Request* pPermissionRequest = reinterpret_cast< Ewk_Notification_Permission_Request* >(pEventInfo); SysAssertf(pImpl && pPermissionRequest, "Failed to request"); - SysLog(NID_WEB_CTRL, "The permission popup has not Implemented yet. allow is the default value now."); - - //ToDo : Show NotificationPermissionPopup - - Ewk_Context* pContext = ewk_view_context_get(pView); - SysAssertf(pContext, "Failed to get webkit instance."); + ewk_notification_permission_request_suspend(pPermissionRequest); - //ewk_notification_permission_request_origin_get(pPermissionRequest); + r = pImpl->ShowUserConfirmPopupAsync(USER_CONFIRM_NOTIFICATION, pPermissionRequest); + SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r)); + return; - ewk_notification_permission_request_set(pPermissionRequest, EINA_TRUE); +CATCH: + ewk_notification_permission_request_set(pPermissionRequest, EINA_FALSE); } @@ -589,17 +730,26 @@ OnNotificationShow(void* pUserData, Evas_Object* pView, void* pEventInfo) Ewk_Notification* pNotification = reinterpret_cast< Ewk_Notification* >(pEventInfo); SysAssertf(pImpl && pNotification, "Failed to request"); + result r = E_SUCCESS; Ewk_Context* pContext = ewk_view_context_get(pView); SysAssertf(pContext, "Failed to get webkit instance."); + uint64_t notificationId = ewk_notification_id_get(pNotification); - //ToDo : Show Notification - //Perform ewk_notification_clicked //ewk_notification_security_origin_get(pNotification) - SysLog(NID_WEB_CTRL, "The current value of title is %s", ewk_notification_title_get(pNotification)); - SysLog(NID_WEB_CTRL, "The current value of body is %s", ewk_notification_body_get(pNotification)); - SysLog(NID_WEB_CTRL, "The current value of icon path is %s",ewk_notification_icon_url_get(pNotification)); - uint64_t notificationId = ewk_notification_id_get(pNotification); + const char* text = ewk_notification_body_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)); + + r = pNotificationWindow->Construct(pContext, notificationId, pImpl); + SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Error propogated.", GetErrorMessage(r)); + + pNotificationWindow->SetText(String(text)); + pNotificationWindow->LaunchNotification(); + pImpl->SetWebNotification(pNotificationWindow.release()); + ewk_notification_showed(pContext, notificationId); } @@ -709,6 +859,7 @@ OnIsContentHandlerRegistered(void* pUserData, Evas_Object* pView, void* pEventIn } } + void OnContentHandlerUnregistrationRequested(void* pUserData, Evas_Object* pView, void* pEventInfo) { @@ -723,6 +874,77 @@ OnContentHandlerUnregistrationRequested(void* pUserData, Evas_Object* pView, voi void +OnFullScreenEntered(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(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 +OnFocusDownRequested(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())); + pWebCore->SetFocusEnd(true); +} + + +void +OnFocusUpRequested(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())); + pWebCore->SetFocusEnd(true); +} + + +void +OnVibrationRequested(uint64_t duration, void* pUserData) +{ + result r = E_SUCCESS; + + _WebImpl* pImpl = reinterpret_cast<_WebImpl*>(pUserData); + SysAssertf(pImpl, "Failed to request"); + + r = pImpl->VibrationRequested(duration); + SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r)); +} + + +void +OnVibrationCanceled(void* pUserData) +{ + _WebImpl* pImpl = reinterpret_cast<_WebImpl*>(pUserData); + SysAssertf(pImpl, "Failed to request"); + + pImpl->VibrationCanceled(); +} + + +void OnLoadingRequested(void* pUserData, Evas_Object* pView, void* pEventInfo) { _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData); @@ -730,66 +952,77 @@ OnLoadingRequested(void* pUserData, Evas_Object* pView, void* pEventInfo) SysAssertf(pImpl && pPolicy, "Failed to request"); String url(ewk_policy_decision_url_get(pPolicy)); - SysLog(NID_WEB_CTRL, "The current value of url is %ls", url.GetPointer()); - - if (url == L"about:blank") - { - ewk_policy_decision_use(pPolicy); - return; - } + SysSecureLog(NID_WEB_CTRL, "The current value of url is %ls", url.GetPointer()); - if (pImpl->GetLoadingListener() && ewk_frame_is_main_frame(ewk_policy_decision_frame_get(pPolicy)) + if (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()) { pImpl->DisableAsyncSearch(); } - - WebNavigationType navigationType = WEB_NAVIGATION_OTHER; - Ewk_Policy_Navigation_Type ewkNavigationType = ewk_policy_decision_navigation_type_get(pPolicy); - - switch (ewkNavigationType) - { - case EWK_POLICY_NAVIGATION_TYPE_LINK_CLICKED: - navigationType = WEB_NAVIGATION_LINK_CLICKED; - break; - case EWK_POLICY_NAVIGATION_TYPE_FORM_SUBMITTED: - navigationType = WEB_NAVIGATION_FORM_SUBMITTED; - break; - case EWK_POLICY_NAVIGATION_TYPE_BACK_FORWARD: - navigationType = WEB_NAVIGATION_BACKFORWARD; - break; - case EWK_POLICY_NAVIGATION_TYPE_RELOAD: - navigationType = WEB_NAVIGATION_RELOAD; - break; - case EWK_POLICY_NAVIGATION_TYPE_FORM_RESUBMITTED: - navigationType = WEB_NAVIGATION_FORM_RESUBMITTED; - break; - case EWK_POLICY_NAVIGATION_TYPE_OTHER: - navigationType = WEB_NAVIGATION_OTHER; - break; - default: - SysAssert(false); - } - if (pImpl->GetLoadingListener()->OnLoadingRequested(url, navigationType)) + ILoadingListener* pLoadingListener = pImpl->GetLoadingListener(); + if (pLoadingListener) { - ewk_policy_decision_ignore(pPolicy); + WebNavigationType navigationType = WEB_NAVIGATION_OTHER; + Ewk_Policy_Navigation_Type ewkNavigationType = ewk_policy_decision_navigation_type_get(pPolicy); - return; + switch (ewkNavigationType) + { + case EWK_POLICY_NAVIGATION_TYPE_LINK_CLICKED: + navigationType = WEB_NAVIGATION_LINK_CLICKED; + break; + case EWK_POLICY_NAVIGATION_TYPE_FORM_SUBMITTED: + navigationType = WEB_NAVIGATION_FORM_SUBMITTED; + break; + case EWK_POLICY_NAVIGATION_TYPE_BACK_FORWARD: + navigationType = WEB_NAVIGATION_BACKFORWARD; + break; + case EWK_POLICY_NAVIGATION_TYPE_RELOAD: + navigationType = WEB_NAVIGATION_RELOAD; + break; + case EWK_POLICY_NAVIGATION_TYPE_FORM_RESUBMITTED: + navigationType = WEB_NAVIGATION_FORM_RESUBMITTED; + break; + case EWK_POLICY_NAVIGATION_TYPE_OTHER: + navigationType = WEB_NAVIGATION_OTHER; + break; + default: + SysAssert(false); + } + + if (pLoadingListener->OnLoadingRequested(url, navigationType)) + { + ewk_policy_decision_ignore(pPolicy); + + return; + } } } + if (url == L"about:blank") + { + ewk_policy_decision_use(pPolicy); + + return; + } + String currentUrl(pImpl->GetUrl()); String redirectUrl(pImpl->GetProtocolFromUri(url, currentUrl)); if (redirectUrl != L"") { - pImpl->LoadUrl(redirectUrl); ewk_policy_decision_ignore(pPolicy); + pImpl->LoadUrl(redirectUrl); + return; } @@ -797,50 +1030,34 @@ OnLoadingRequested(void* pUserData, Evas_Object* pView, void* pEventInfo) uri.SetUri(url); String uriScheme(uri.GetScheme()); - SysLog(NID_WEB_CTRL, "The current value of scheme is %ls", uriScheme.GetPointer()); + SysSecureLog(NID_WEB_CTRL, "The current value of scheme is %ls", uriScheme.GetPointer()); - if ((uriScheme != L"http") && (uriScheme != L"https") && (uriScheme != L"file")) + if ((uriScheme != L"http") && (uriScheme != L"https") && (uriScheme != L"file") && (uriScheme != L"")) { - ewk_policy_decision_ignore(pPolicy); - - if (uriScheme == L"") - { - return; - } - 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(); + if (r == E_SUCCESS) + { + ewk_policy_decision_ignore(pPolicy); - return; + return; + } } ewk_policy_decision_use(pPolicy); @@ -932,34 +1149,48 @@ OnWebDataReceived(void* pUserData, Evas_Object* pView, void* pEventInfo) result r = E_SUCCESS; - 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)); - SysLog(NID_WEB_CTRL, "url : %s, mime : %ls, code : %d", pUrl, mime.GetPointer(), code); - - ILoadingListener* pLoadingListener = pImpl->GetLoadingListener(); - String url(ewk_policy_decision_url_get(pPolicy)); + String mime(ewk_policy_decision_response_mime_get(pPolicy)); + SysSecureLog(NID_WEB_CTRL, "code : %d, url : %ls, mime : %ls", code, url.GetPointer(), mime.GetPointer()); - - if (pLoadingListener && ewk_frame_is_main_frame(ewk_policy_decision_frame_get(pPolicy))) + if (ewk_frame_is_main_frame(ewk_policy_decision_frame_get(pPolicy))) { - const Eina_Hash* pHeader = ewk_policy_decision_response_headers_get(pPolicy); - - DecisionPolicy policy; - HttpHeader httpHeader; - if (code >= REDIRECTION_HEADER_GROUP && code < REDIRECTION_HEADER_GROUP + 100) { pImpl->SetRedirectRequested(true); - mime = L""; } - eina_hash_foreach(pHeader, AddHttpHeaderData, &httpHeader); - SysTryCatch(NID_WEB_CTRL, GetLastResult() == E_SUCCESS, , GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult())); + ILoadingListener* pLoadingListener = pImpl->GetLoadingListener(); + if (pLoadingListener) + { + HttpHeader httpHeader; + + Eina_Iterator* iterator = eina_hash_iterator_tuple_new(ewk_policy_decision_response_headers_get(pPolicy)); + if (iterator) + { + Eina_Hash_Tuple *tuple = null; + + EINA_ITERATOR_FOREACH(iterator, tuple) + { + String key(reinterpret_cast< const char* >(tuple->key)); + String value(reinterpret_cast< char* >(tuple->data)); + + SysSecureLog(NID_WEB_CTRL, "The current value of key is %ls, value is %ls", key.GetPointer(), value.GetPointer()); + + r = httpHeader.AddField(key, value); + SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, eina_iterator_free(iterator), r, "[%s] Propagating.", GetErrorMessage(r)); + } + + eina_iterator_free(iterator); + } - policy = pLoadingListener->OnWebDataReceived(mime, httpHeader); - pImpl->SetPolicyDecision(policy); + pImpl->SetPolicyDecision(pLoadingListener->OnWebDataReceived(mime, httpHeader)); + } + else + { + pImpl->SetPolicyDecision(WEB_DECISION_CONTINUE); + } } switch (pImpl->GetPolicyDecision()) @@ -970,82 +1201,30 @@ OnWebDataReceived(void* pUserData, Evas_Object* pView, void* pEventInfo) String redirectUrl(pImpl->GetRedirectUri(url, currentUrl, mime)); if (redirectUrl != L"") { - pImpl->LoadUrl(redirectUrl); ewk_policy_decision_ignore(pPolicy); + pImpl->LoadUrl(redirectUrl); + return; } - if (pImpl->IsMimeSupported(mime) || mime == L"") + if (ewk_policy_decision_type_get(pPolicy) == EWK_POLICY_DECISION_USE) { break; } - 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 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); - - HashMap dataList; - r = dataList.Construct(); - 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())); + String operationId(L"http://tizen.org/appcontrol/operation/download"); - r = pAcImpl->Start(null, null, &dataList, null); + r = _AppControlImpl::FindAndStart(operationId, &url, null, null, null, null); SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r)); } @@ -1053,6 +1232,7 @@ OnWebDataReceived(void* pUserData, Evas_Object* pView, void* pEventInfo) } break; } + case WEB_DECISION_DOWNLOAD: { ewk_policy_decision_ignore(pPolicy); @@ -1063,16 +1243,18 @@ OnWebDataReceived(void* pUserData, Evas_Object* pView, void* pEventInfo) Ewk_Context* pContext = ewk_view_context_get(pView); SysAssertf(pContext, "Failed to get webkit instance."); - pDownloadHandler->StartDownload(pUrl); + pDownloadHandler->StartDownload(url); return; } + case WEB_DECISION_IGNORE: { ewk_policy_decision_ignore(pPolicy); return; } + default: { SysAssert(false); @@ -1119,19 +1301,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; @@ -1182,7 +1368,6 @@ OnLoadingCompleted(void* pUserData, Evas_Object* pView, void* pEventInfo) SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r)); pEventArg.release(); } - } @@ -1220,7 +1405,7 @@ OnDidStartDownloadCallback(const char* pUrl, void* pUserData) _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData); SysAssertf(pUrl && pImpl != null, "Failed to request"); - SysLog(NID_WEB_CTRL, "The current value of url is %s", pUrl); + SysSecureLog(NID_WEB_CTRL, "The current value of url is %s", pUrl); } @@ -1433,7 +1618,6 @@ FireWebPageBlockSelectedEventF(_WebImpl* pImpl) SysTryReturnResult(NID_WEB_CTRL, startPoint.get() && endPoint.get(), E_OUT_OF_MEMORY, "Memory Allocation failed."); pImpl->GetBlockRange(*startPoint.get(), *endPoint.get()); - if ((endPoint->x != 0.0f) && (endPoint->y != 0.0f)) { std::unique_ptr<_WebUiEventArg> pEventArg(new (std::nothrow) _WebUiEventArg(WEB_EVENT_WEBUIEVENTLISTENER_PAGE_BLOCK_SELECTED_FLOAT)); @@ -1460,8 +1644,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()) { @@ -1480,99 +1663,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) -{ - Eina_Bool ret = EINA_FALSE; - Eina_List* pSelectedFileNames = null; - String isMultipleSelection(L"single"); - - if (multipleFile) - { - isMultipleSelection.Append(L"multiple"); - } - - std::unique_ptr<_MediaSelectionListener> pMediaListener(new (std::nothrow) _MediaSelectionListener()); - SysTryCatch(NID_WEB_CTRL, pMediaListener.get(), , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY)); - - { - int itemCount = eina_list_count(pAcceptTypes); - String fileType = L"all"; - - 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"; - } - } - - HashMap dataList; - result r = dataList.Construct(); - SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r)); - - String mode(L"selectionType"); - r = dataList.Add(mode, isMultipleSelection); - SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r)); - - String type(L"type"); - r = dataList.Add(type, fileType); - SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r)); - - std::unique_ptr pMediaAppControl(_AppManagerImpl::FindAppControlN(L"tizen.filemanager", L"http://tizen.org/appcontrol/operation/pick")); - SysTryCatch(NID_WEB_CTRL, pMediaAppControl.get(), r = GetLastResult(), r, "[%s] Propagating.", GetErrorMessage(r)); - - _AppControlImpl* pMediaAppControlImpl = _AppControlImpl::GetInstance(*pMediaAppControl); - r = pMediaAppControlImpl->Start(null, null, &dataList, pMediaListener.get()); - SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r)); - - while (true) - { - if (pMediaListener->IsSelectionCompleted()) - { - const ArrayList* pSelectedFiles = pMediaListener->GetSelectedFiles(); - SysTryCatch(NID_WEB_CTRL, pSelectedFiles, r = GetLastResult(), r, "[%s] Propagating.", GetErrorMessage(r)); - - int fileCount = pSelectedFiles->GetCount(); - - for (int i = 0; i < fileCount; i++) - { - String* pFile = (String*)pSelectedFiles->GetAt(i); - SysTryCatch(NID_WEB_CTRL, pFile, r = GetLastResult(), r, "[%s] Propagating.", GetErrorMessage(r)); - - std::unique_ptr pByteBuf(StringUtil::StringToUtf8N(*pFile)); - SysTryCatch(NID_WEB_CTRL, pByteBuf.get(), r = GetLastResult(), r, "[%s] Propagating.", GetErrorMessage(r)); - - pSelectedFileNames = eina_list_append(pSelectedFileNames, strdup((const char*)pByteBuf->GetPointer())); - } - - ret = EINA_TRUE; - break; - } - - ecore_main_loop_iterate(); - } - - ewk_view_open_panel_reply(pView, pSelectedFileNames, ret); - return ret; - } - -CATCH: - ewk_view_open_panel_reply(pView, null, ret); - eina_list_free(pSelectedFileNames); - return ret; -} - - void OnHandleJavaScriptRequest(void* pUserData, Evas_Object* pView, void* pEventInfo) { @@ -1615,13 +1705,12 @@ OnWebKeypadStateChanged(void* pUserData, Evas_Object* pView, void* pEventInfo) return; } - _Form* pFormCore = pImpl->GetParentFormCore(dynamic_cast< _Control* >(&pImpl->GetCore())); - SysAssertf(pFormCore != null, "Failed to get FormCore"); - - if (pFormCore->HasFooter() && pFormCore->IsFooterVisible()) + _FormImpl* pFormImpl = pImpl->GetParentFormImpl(dynamic_cast< _ControlImpl* >(pImpl)); + if (pFormImpl) { - pImpl->SetFooterVisibleState(true); - pFormCore->SetActionBarsVisible(FORM_ACTION_BAR_FOOTER, false); + pFormImpl->DeflateClientRectHeight(pXformer->TransformVertical(rect.height)); + + pFormImpl->Invalidate(false); } if (pImpl->GetWebKeypadEventListener()) @@ -1635,11 +1724,10 @@ OnWebKeypadStateChanged(void* pUserData, Evas_Object* pView, void* pEventInfo) } else { - pFormCore->DeflateClientRectHeight(pXformer->TransformVertical(rect.height)); pImpl->GetWebKeypadEventListener()->OnWebKeypadWillOpen(*dynamic_cast< Web* >(&pImpl->GetPublic())); } } - pImpl->SetKeypadVisibleState(true); + pImpl->SetPreviousKeypadBounds(rect); } else @@ -1656,6 +1744,23 @@ OnWebKeypadOpened(void* pUserData, Evas_Object* pView, void* pEventInfo) _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData); SysAssertf(pImpl, "Failed to request"); + pImpl->SetKeypadVisibleState(true); + + _FormImpl* pFormImpl = pImpl->GetParentFormImpl(dynamic_cast< _ControlImpl* >(pImpl)); + if (pFormImpl) + { + _ICoordinateSystemTransformer* pXformer = _CoordinateSystem::GetInstance()->GetInverseTransformer(); + SysAssertf(pXformer, "Failed to get CoordinateTransformer"); + + pFormImpl->DeflateClientRectHeight(pXformer->TransformVertical(pImpl->GetPreviousKeypadBounds().height)); + + if (pFormImpl->HasFooter()) + { + pFormImpl->GetCore().SetKeypadShowState(true); + pFormImpl->Draw(); + } + } + if (pImpl->GetWebKeypadEventListener()) { pImpl->GetWebKeypadEventListener()->OnWebKeypadOpened(*static_cast< Web* >(&pImpl->GetPublic())); @@ -1669,49 +1774,74 @@ 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())); - SysAssertf(pFormCore != null, "Failed to get FormCore"); - - if (pImpl->IsKeypadVisible()) + _FormImpl* pFormImpl = pImpl->GetParentFormImpl(dynamic_cast< _ControlImpl* >(pImpl)); + if (pFormImpl) { - if (pFormCore->HasFooter() && pImpl->IsFooterVisible()) - { - pImpl->SetFooterVisibleState(false); - pFormCore->SetActionBarsVisible(FORM_ACTION_BAR_FOOTER, true); - } + pFormImpl->DeflateClientRectHeight(0); - pFormCore->DeflateClientRectHeight(0); + pFormImpl->Invalidate(false); - if (pImpl->GetWebKeypadEventListener()) + if (pFormImpl->HasFooter()) { - pImpl->GetWebKeypadEventListener()->OnWebKeypadClosed(*dynamic_cast< Web* >(&pImpl->GetPublic())); + pFormImpl->GetCore().SetKeypadShowState(false); + pFormImpl->Draw(); } + } - pImpl->SetKeypadVisibleState(false); + if (pImpl->GetWebKeypadEventListener()) + { + pImpl->GetWebKeypadEventListener()->OnWebKeypadClosed(*dynamic_cast< Web* >(&pImpl->GetPublic())); } + + pImpl->SetKeypadVisibleState(false); } void -OnWindowObjectFocusGained(void *pUserData, Evas_Object *pWin, void *pEvent_info) +OnWindowObjectFocusLost(void* pUserData, Evas_Object* pWin, void* pEvent_info) { _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData); SysAssertf(pImpl, "Failed to request"); - if (pImpl->IsKeypadOpened() == true) + pImpl->SetWinFocusLost(true); +} + + +void +OnWindowObjectFocusGained(void* pUserData, Evas_Object* pWin, void* pEvent_info) +{ + _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData); + SysAssertf(pImpl, "Failed to request"); + + if (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); + if (pImpl->IsWinFocusLost() == true) + { + Ewk_Settings* pSettings = ewk_view_settings_get(pWebCore->GetWebNativeNode()); + SysAssertf(pSettings, "Failed to get settings instance."); + + if (ewk_settings_clear_text_selection_automatically_get(pSettings) == EINA_FALSE) + { + ewk_settings_clear_text_selection_automatically_set(pSettings, EINA_TRUE); - pImpl->SetKeypadOpened(false); + evas_object_focus_set(pWebCore->GetWebNativeNode(), EINA_TRUE); + } + else if (pImpl->IsKeypadOpened() == true) + { + evas_object_focus_set(pWebCore->GetWebNativeNode(), EINA_TRUE); + } + } } + + pImpl->SetWinFocusLost(false); } 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"); @@ -1720,11 +1850,43 @@ OnWebNativeNodeFocusGained(void *pUserData, Evas *pCanvas, Evas_Object* pView, v { pImpl->SetKeypadOpened(false); } + else if (pImpl->IsWinFocusLost() == true && pImpl->IsFocused() == false) + { + _Web* pWebCore = dynamic_cast< _Web* >(&(pImpl->GetCore())); + SysAssertf(pWebCore, "Failed to get Web core object"); + + evas_object_focus_set(pWebCore->GetWebNativeNode(), EINA_FALSE); + } +} + + +void +OnWebNativeNodeFocusLost(void* pUserData, Evas* pCanvas, 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"); + + Eina_Rectangle leftHandle; + Eina_Rectangle rightHandle; + + EINA_RECTANGLE_SET(&leftHandle, 0, 0, 0, 0); + EINA_RECTANGLE_SET(&rightHandle, 0, 0, 0, 0); + + if (pImpl->IsWinFocusLost() == true && ewk_view_text_selection_range_get(pWebCore->GetWebNativeNode(), &leftHandle, &rightHandle)) + { + Ewk_Settings* pSettings = ewk_view_settings_get(pWebCore->GetWebNativeNode()); + SysAssertf(pSettings, "Failed to get settings instance."); + + ewk_settings_clear_text_selection_automatically_set(pSettings, EINA_FALSE); + } } Eina_Bool -OnColorPickerProviderRequested(Ewk_View_Smart_Data *pSmartData, int red, int green, int blue, int alpha) +OnColorPickerProviderRequested(Ewk_View_Smart_Data* pSmartData, 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)); @@ -1751,7 +1913,7 @@ OnColorPickerProviderRequested(Ewk_View_Smart_Data *pSmartData, int red, int gre Eina_Bool -OnColorPickerProviderDismissed(Ewk_View_Smart_Data *pSmartData) +OnColorPickerProviderDismissed(Ewk_View_Smart_Data* pSmartData) { SysAssertf(pSmartData, "invalid smartdata"); @@ -1763,7 +1925,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_Data* pSmartData, 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)); @@ -1793,7 +1955,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_Data* pSmartData, Eina_Rectangle rect, Ewk_Text_Direction textDirection, double pageScaleFactor, Eina_List* pItems, int selectedIndex) { SysAssertf(pSmartData, "Failed to request"); @@ -1808,7 +1970,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"); @@ -1837,34 +2014,100 @@ 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"); - - 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 - ret = EINA_FALSE; - break; + SysAssertf(pSmartData, "Failed to request"); - default: - SysAssert(false); - } + _WebImpl* pWebImpl = reinterpret_cast<_WebImpl*>(evas_object_data_get(pSmartData->self, WEB_CTRL)); + SysAssertf(pWebImpl, "Failed to get Impl"); - SysLog(NID_WEB_CTRL, "The current value of policy is %d", ret); + 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)); - pPresenter->EndAsyncProcess(ret); + 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 + ret = EINA_FALSE; + break; + + default: + SysAssert(false); + } + + SysLog(NID_WEB_CTRL, "The current value of policy is %d", ret); + + pPresenter->EndAsyncProcess(ret); } @@ -1877,7 +2120,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); + } } @@ -1983,10 +2231,12 @@ _WebImpl::_WebImpl(Web* pWeb, Tizen::Ui::_Control* pCore) , __isFooterVisible(false) , __isKeypadVisible(false) , __isKeypadOpened(false) + , __isWinFocusLost(false) , __isLoadingErrorOccurred(false) , __isRedirectRequested(false) , __isCertificateRequested(false) , __isCertificateConfirmed(false) + , __isFormDataVisible(false) , __keypadBounds(0, 0, 0, 0) , __pWebCore(null) , __pUserLoadingListener(null) @@ -2002,12 +2252,29 @@ _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) + , __pBeforeUnloadConfirmPopup(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; @@ -2021,9 +2288,16 @@ _WebImpl::_WebImpl(Web* pWeb, Tizen::Ui::_Control* pCore) _WebImpl::~_WebImpl() { + _WebManager* pWebManager = _WebManager::GetInstance(); + SysTryCatch(NID_WEB_CTRL, pWebManager, , E_SYSTEM, "[%s] Failed to get the _ControlManager instance.", GetErrorMessage(E_SYSTEM)); + pWebManager->RemoveWeb(reinterpret_cast< int >(this)); + +CATCH: + _SettingInfoImpl::RemoveSettingEventListener(*this); RemoveEventListenerCallback(); } + _WebImpl* _WebImpl::CreateWebImplN(Web* pControl, const Rectangle& bounds) { @@ -2097,6 +2371,9 @@ _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)); @@ -2115,19 +2392,18 @@ _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()); - SetEventListenerCallback(); + __defaultUserAgent = pWebSettingImpl->GetUserAgent(); + + r = SetSetting(*pWebSetting); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); - _Form* pFormCore = GetParentFormCore(dynamic_cast< _Control* >(&this->GetCore())); - SysAssertf(pFormCore != null, "Failed to get FormCore"); + SetEventListenerCallback(); return E_SUCCESS; } @@ -2208,10 +2484,16 @@ CATCH: result _WebImpl::LoadUrl(const String& url) const { + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return E_SUCCESS; + } + std::unique_ptr pUrl(_StringConverter::CopyToCharArrayN(url)); SysTryReturn(NID_WEB_CTRL, pUrl.get(), GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult())); - ewk_view_url_set(__pWebCore->GetWebNativeNode(), pUrl.get()); + ewk_view_url_set(pWebview, pUrl.get()); return E_SUCCESS; } @@ -2220,12 +2502,18 @@ _WebImpl::LoadUrl(const String& url) const result _WebImpl::LoadUrl(const String& url, const HttpHeader& header) { + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return E_SUCCESS; + } + std::unique_ptr pUrl(_StringConverter::CopyToCharArrayN(url)); SysTryReturn(NID_WEB_CTRL, pUrl.get(), GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult())); - + Eina_Hash* pHttpHeader = ConvertToSlpHeaderN(header); - ewk_view_url_request_set(__pWebCore->GetWebNativeNode(), pUrl.get(), EWK_HTTP_METHOD_GET, pHttpHeader, null); + ewk_view_url_request_set(pWebview, pUrl.get(), EWK_HTTP_METHOD_GET, pHttpHeader, null); eina_hash_free(pHttpHeader); @@ -2236,12 +2524,18 @@ _WebImpl::LoadUrl(const String& url, const HttpHeader& header) result _WebImpl::LoadUrlWithPostRequest(const String& url, const HttpHeader& header, const ByteBuffer& body) const { + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return E_SUCCESS; + } + std::unique_ptr pUrl(_StringConverter::CopyToCharArrayN(url)); SysTryReturn(NID_WEB_CTRL, pUrl.get(), GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult())); Eina_Hash* pHttpHeader = ConvertToSlpHeaderN(header); - ewk_view_url_request_set(__pWebCore->GetWebNativeNode(), pUrl.get(), EWK_HTTP_METHOD_POST, pHttpHeader, reinterpret_cast< const char* >(body.GetPointer())); + ewk_view_url_request_set(pWebview, pUrl.get(), EWK_HTTP_METHOD_POST, pHttpHeader, reinterpret_cast< const char* >(body.GetPointer())); eina_hash_free(pHttpHeader); @@ -2252,6 +2546,12 @@ _WebImpl::LoadUrlWithPostRequest(const String& url, const HttpHeader& header, co result _WebImpl::LoadData(const String& baseUrl, const ByteBuffer& content, const String& mime, const String& encoding) const { + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return E_SUCCESS; + } + SysTryReturnResult(NID_WEB_CTRL, content.GetLimit() > 0, E_INVALID_ARG, "The content buffer is empty."); std::unique_ptr pUrl(_StringConverter::CopyToCharArrayN(baseUrl)); @@ -2259,7 +2559,7 @@ _WebImpl::LoadData(const String& baseUrl, const ByteBuffer& content, const Strin std::unique_ptr pEncoding(_StringConverter::CopyToCharArrayN(encoding)); SysTryReturn(NID_WEB_CTRL, pUrl.get() && pMime.get() && pEncoding.get(), GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult())); - ewk_view_contents_set(__pWebCore->GetWebNativeNode(), reinterpret_cast< const char* >(content.GetPointer()), content.GetLimit(), pMime.get(), pEncoding.get(), pUrl.get()); + ewk_view_contents_set(pWebview, reinterpret_cast< const char* >(content.GetPointer()), content.GetLimit(), pMime.get(), pEncoding.get(), pUrl.get()); return E_SUCCESS; } @@ -2268,14 +2568,26 @@ _WebImpl::LoadData(const String& baseUrl, const ByteBuffer& content, const Strin void _WebImpl::Pause(void) { - ewk_view_suspend(__pWebCore->GetWebNativeNode()); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return; + } + + ewk_view_suspend(pWebview); } void _WebImpl::Resume(void) { - ewk_view_resume(__pWebCore->GetWebNativeNode()); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return; + } + + ewk_view_resume(pWebview); } @@ -2284,15 +2596,21 @@ _WebImpl::ShowSelectBoxPopup(bool isMultiSelect, const String& title, Eina_List* { __pSelectBox.reset(); - int itemCount = eina_list_count(pItems); - SysTryReturnResult(NID_WEB_CTRL, itemCount > 0, E_SYSTEM, "ItemCount is invalid."); + SysTryReturnResult(NID_WEB_CTRL, eina_list_count(pItems) > 0, E_SYSTEM, "ItemCount is invalid."); result r = E_SUCCESS; std::unique_ptr<_SelectBox> pSelectBox(new (std::nothrow) _SelectBox()); SysTryReturnResult(NID_WEB_CTRL, pSelectBox.get(), E_OUT_OF_MEMORY, "Memory allocation failed."); - r = pSelectBox->Construct(isMultiSelect, title, itemCount, pWebView); + if (isMultiSelect) + { + r = pSelectBox->Construct(this, isMultiSelect, title, DEFAULT_LIST_ITEM_COUNT - 1, pWebView); + } + else + { + r = pSelectBox->Construct(this, isMultiSelect, title, DEFAULT_LIST_ITEM_COUNT, pWebView); + } SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); r = pSelectBox->UpdateList(pItems, selectedIndex, false, false); @@ -2320,6 +2638,8 @@ _WebImpl::ClearSelectBoxPopup(void) __pSelectBox.reset(); + Resume(); + return E_SUCCESS; } @@ -2351,89 +2671,145 @@ _WebImpl::GetColorpicker(void) bool _WebImpl::CanGoBack(void) const { - return static_cast< bool >(ewk_view_back_possible(__pWebCore->GetWebNativeNode())); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return false; + } + + return static_cast< bool >(ewk_view_back_possible(pWebview)); } bool _WebImpl::CanGoForward(void) const { - return static_cast< bool >(ewk_view_forward_possible(__pWebCore->GetWebNativeNode())); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return false; + } + + return static_cast< bool >(ewk_view_forward_possible(pWebview)); } void _WebImpl::GoBack(void) const { - ewk_view_back(__pWebCore->GetWebNativeNode()); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return; + } + + ewk_view_back(pWebview); } void _WebImpl::GoForward(void) const { - ewk_view_forward(__pWebCore->GetWebNativeNode()); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return; + } + + ewk_view_forward(pWebview); } Tizen::Base::String _WebImpl::GetUrl(void) const { - return ewk_view_url_get(__pWebCore->GetWebNativeNode()); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return L""; + } + + return ewk_view_url_get(pWebview); } Tizen::Base::String _WebImpl::GetTitle(void) const { - return ewk_view_title_get(__pWebCore->GetWebNativeNode()); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return L""; + } + + return ewk_view_title_get(pWebview); } void _WebImpl::StopLoading(void) const { - ewk_view_stop(__pWebCore->GetWebNativeNode()); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return; + } + + ewk_view_stop(pWebview); } void _WebImpl::Reload(void) const { - ewk_view_reload_bypass_cache(__pWebCore->GetWebNativeNode()); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return; + } + + ewk_view_reload(pWebview); } String* -_WebImpl::EvaluateJavascriptN(const String& scriptCode) const +_WebImpl::EvaluateJavascriptN(const String& scriptCode) { - if (scriptCode.GetLength()) + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) { - std::unique_ptr pScript(_StringConverter::CopyToCharArrayN(scriptCode)); - SysTryReturn(NID_WEB_CTRL, pScript.get(), null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult())); + return null; + } + + std::unique_ptr pScript(_StringConverter::CopyToCharArrayN(scriptCode)); + SysTryReturn(NID_WEB_CTRL, pScript.get(), null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult())); - _WebPresenter presenter; - presenter.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, &presenter); + ewk_view_script_execute(pWebview, pScript.get(), OnScriptExecuted, pPresenter.get()); - Tizen::Base::String* pResult = new (std::nothrow) Tizen::Base::String(L""); - SysTryReturn(NID_WEB_CTRL, pResult, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY)); - presenter.WaitAsyncProcess(*pResult); + String* pResult = new (std::nothrow) String(L""); + SysTryReturn(NID_WEB_CTRL, pResult, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY)); - return pResult; - } + pPresenter->WaitAsyncProcess(*pResult); - return null; + return pResult; } result _WebImpl::SetZoomLevel(float level) { + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return E_SUCCESS; + } + SysTryReturnResult(NID_WEB_CTRL, level >= MIN_ZOOM_LEVEL && level <= MAX_ZOOM_LEVEL, E_OUT_OF_RANGE, "The level(%f) must be between 0.3 and 2.0(%f).", level, level); - ewk_view_scale_set(__pWebCore->GetWebNativeNode(), static_cast< double >(level), 0, 0); + ewk_view_scale_set(pWebview, static_cast< double >(level), 0, 0); return E_SUCCESS; } @@ -2442,13 +2818,25 @@ _WebImpl::SetZoomLevel(float level) float _WebImpl::GetZoomLevel(void) const { - return static_cast< float >(ewk_view_scale_get(__pWebCore->GetWebNativeNode())); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return -1.0f; + } + + return static_cast< float >(ewk_view_scale_get(pWebview)); } const PageNavigationList* _WebImpl::GetBackForwardListN(void) const { + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return null; + } + result r = E_SUCCESS; _PageNavigationListImpl* pNavigationListImpl = null; @@ -2463,7 +2851,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(pWebview); 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); @@ -2498,7 +2886,7 @@ _WebImpl::GetBackForwardListN(void) const url = ewk_history_item_uri_get(pEwkItem); title = ewk_history_item_title_get(pEwkItem); - SysLog(NID_WEB_CTRL, "The current value of url is %s, title is %s", url.GetPointer(), title.GetPointer()); + SysSecureLog(NID_WEB_CTRL, "The current value of url is %s, title is %s", url.GetPointer(), title.GetPointer()); pHistoryItemImpl->SetHistoryItem(url, title); @@ -2523,6 +2911,12 @@ CATCH: bool _WebImpl::SearchText(const String& text, bool searchForward) { + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + 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); @@ -2532,14 +2926,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, pWebview, 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); } @@ -2548,6 +2942,12 @@ _WebImpl::SearchText(const String& text, bool searchForward) result _WebImpl::SearchTextAllAsync(const Tizen::Base::String& text, bool caseSensitive) { + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return E_SUCCESS; + } + result r = E_SUCCESS; Ewk_Find_Options condition = EWK_FIND_OPTIONS_SHOW_HIGHLIGHT; @@ -2557,7 +2957,7 @@ _WebImpl::SearchTextAllAsync(const Tizen::Base::String& text, bool caseSensitive condition = static_cast (condition | EWK_FIND_OPTIONS_CASE_INSENSITIVE); } - r = SynchronizeSearch(SEARCH_ALL_ASYNC, __pWebCore->GetWebNativeNode(), condition, text, true, caseSensitive); + r = SynchronizeSearch(SEARCH_ALL_ASYNC, pWebview, condition, text, true, caseSensitive); SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); return E_SUCCESS; @@ -2567,6 +2967,12 @@ _WebImpl::SearchTextAllAsync(const Tizen::Base::String& text, bool caseSensitive result _WebImpl::SearchNextAsync(bool searchForward) { + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + 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."); @@ -2575,7 +2981,7 @@ _WebImpl::SearchNextAsync(bool searchForward) Ewk_Find_Options condition = EWK_FIND_OPTIONS_SHOW_HIGHLIGHT; - if (__textSearch.__caseSensitive) + if (!__textSearch.__caseSensitive) { condition = static_cast (condition | EWK_FIND_OPTIONS_CASE_INSENSITIVE); } @@ -2585,7 +2991,7 @@ _WebImpl::SearchNextAsync(bool searchForward) condition = static_cast (condition | EWK_FIND_OPTIONS_BACKWARDS); } - r = SynchronizeSearch(SEARCH_NEXT_ASYNC, __pWebCore->GetWebNativeNode(), condition, __textSearch.__text, searchForward); + r = SynchronizeSearch(SEARCH_NEXT_ASYNC, pWebview, condition, __textSearch.__text, searchForward); SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); return E_SUCCESS; @@ -2748,10 +3154,13 @@ _WebImpl::SetSetting(const WebSetting& setting) ewk_settings_loads_images_automatically_set(pSettings, static_cast< Eina_Bool >(setting.IsAutoImageLoadEnabled())); - std::unique_ptr pAgent(_StringConverter::CopyToCharArrayN(setting.GetUserAgent())); - SysTryReturn(NID_WEB_CTRL, pAgent.get(), GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult())); + if (__defaultUserAgent != setting.GetUserAgent()) + { + std::unique_ptr 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())); @@ -2792,6 +3201,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* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + 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; @@ -2800,9 +3224,9 @@ _WebImpl::GetElementByPointN(const Point& point) const std::unique_ptr pImage; std::unique_ptr 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(pWebview, 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); @@ -2811,7 +3235,7 @@ _WebImpl::GetElementByPointN(const Point& point) const String tagName(ewk_hit_test_tag_name_get(pEwkHitTest)); String nodeValue(ewk_hit_test_node_value_get(pEwkHitTest)); - SysLog(NID_WEB_CTRL, "The current value of url is %ls, tag is %ls, value is %ls", url.GetPointer(), tagName.GetPointer(), nodeValue.GetPointer()); + SysSecureLog(NID_WEB_CTRL, "The current value of url is %ls, tag is %ls, value is %ls", url.GetPointer(), tagName.GetPointer(), nodeValue.GetPointer()); pHitElementResult = std::unique_ptr(new (std::nothrow) HitElementResult()); SysTryCatch(NID_WEB_CTRL, pHitElementResult.get(), , E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY)); @@ -2894,22 +3318,16 @@ CATCH: } -const HitElementResult* -_WebImpl::GetElementByPointN(const FloatPoint& point) const -{ - const Point integerPoint(_CoordinateSystemUtils::ConvertToInteger(point)); - - std::unique_ptr pHitElementResult(GetElementByPointN(integerPoint)); - SysTryReturn(NID_WEB_CTRL, pHitElementResult.get(), null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult())); - - return pHitElementResult.release(); -} - - bool _WebImpl::IsLoading(void) const { - double percent = ewk_view_load_progress_get(__pWebCore->GetWebNativeNode()); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return false; + } + + double percent = ewk_view_load_progress_get(pWebview); if (Double::Compare(percent, 0.0) > 0 && Double::Compare(percent, 1.0) < 0) { @@ -2925,19 +3343,26 @@ _WebImpl::IsLoading(void) const String _WebImpl::GetTextFromBlock(void) const { - return ewk_view_text_selection_text_get(__pWebCore->GetWebNativeNode()); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return L""; + } + + return ewk_view_text_selection_text_get(pWebview); } bool _WebImpl::IsPrivateBrowsingEnabled(void) const { - if (__pWebCore->GetWebNativeNode() == null) + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) { return _WebSettingImpl::GetInstance(__pWebCore->GetSetting())->IsPrivateBrowsingEnabled(); } - Ewk_Settings* pSettings = ewk_view_settings_get(__pWebCore->GetWebNativeNode()); + Ewk_Settings* pSettings = ewk_view_settings_get(pWebview); SysAssertf(pSettings, "Failed to get webkit instance."); return static_cast< bool >(ewk_settings_private_browsing_enabled_get(pSettings)); @@ -2947,13 +3372,15 @@ _WebImpl::IsPrivateBrowsingEnabled(void) const void _WebImpl::SetPrivateBrowsingEnabled(bool enable) { - if (__pWebCore->GetWebNativeNode() == null) + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) { _WebSettingImpl::GetInstance(__pWebCore->GetSetting())->SetPrivateBrowsingEnabled(enable); + return; } - Ewk_Settings* pSettings = ewk_view_settings_get(__pWebCore->GetWebNativeNode()); + Ewk_Settings* pSettings = ewk_view_settings_get(pWebview); SysAssertf(pSettings, "Failed to get webkit instance."); ewk_settings_private_browsing_enabled_set(pSettings, static_cast< Eina_Bool >(enable)); @@ -2963,15 +3390,26 @@ _WebImpl::SetPrivateBrowsingEnabled(bool enable) void _WebImpl::ClearHistory(void) { - ewk_view_back_forward_list_clear(__pWebCore->GetWebNativeNode()); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return; + } + + ewk_view_back_forward_list_clear(pWebview); } void _WebImpl::ClearCache(void) { - Ewk_Context* pContext = ewk_view_context_get(__pWebCore->GetWebNativeNode()); - SysAssertf(pContext, "Failed to get webkit instance."); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return; + } + + Ewk_Context* pContext = ewk_view_context_get(pWebview); ewk_context_cache_clear(pContext); } @@ -2980,9 +3418,14 @@ _WebImpl::ClearCache(void) void _WebImpl::ClearCookie(void) { - Ewk_Context* pContext = ewk_view_context_get(__pWebCore->GetWebNativeNode()); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return; + } + + Ewk_Context* pContext = ewk_view_context_get(pWebview); Ewk_Cookie_Manager* pCookieManager = ewk_context_cookie_manager_get(pContext); - SysAssertf(pCookieManager, "Failed to get webkit instance."); ewk_cookie_manager_cookies_clear(pCookieManager); } @@ -2991,8 +3434,13 @@ _WebImpl::ClearCookie(void) void _WebImpl::ClearFormData(void) { - Ewk_Context* pContext = ewk_view_context_get(__pWebCore->GetWebNativeNode()); - SysAssertf(pContext, "Failed to get webkit instance."); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return; + } + + Ewk_Context* pContext = ewk_view_context_get(pWebview); ewk_context_form_candidate_data_clear(pContext); } @@ -3001,8 +3449,13 @@ _WebImpl::ClearFormData(void) void _WebImpl::ClearLoginFormData(void) { - Ewk_Context* pContext = ewk_view_context_get(__pWebCore->GetWebNativeNode()); - SysAssertf(pContext, "Failed to get webkit instance."); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return; + } + + Ewk_Context* pContext = ewk_view_context_get(pWebview); ewk_context_form_password_data_clear(pContext); } @@ -3011,22 +3464,23 @@ _WebImpl::ClearLoginFormData(void) bool _WebImpl::IsCookieEnabled(void) const { - if (__pWebCore->GetWebNativeNode() == null) + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) { return _WebSettingImpl::GetInstance(__pWebCore->GetSetting())->IsCookieEnabled(); } - Ewk_Context* pContext = ewk_view_context_get(__pWebCore->GetWebNativeNode()); + Ewk_Context* pContext = ewk_view_context_get(pWebview); 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; } @@ -3035,20 +3489,21 @@ _WebImpl::IsCookieEnabled(void) const void _WebImpl::SetCookieEnabled(bool enable) { - if (__pWebCore->GetWebNativeNode() == null) + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) { _WebSettingImpl::GetInstance(__pWebCore->GetSetting())->SetCookiEnabled(enable); return; } - Ewk_Context* pContext = ewk_view_context_get(__pWebCore->GetWebNativeNode()); + Ewk_Context* pContext = ewk_view_context_get(pWebview); Ewk_Cookie_Manager* pCookieManager = ewk_context_cookie_manager_get(pContext); SysAssertf(pCookieManager, "Failed to get webkit instance."); if (enable) { - ewk_cookie_manager_accept_policy_set(pCookieManager, EWK_COOKIE_ACCEPT_POLICY_NO_THIRD_PARTY); + ewk_cookie_manager_accept_policy_set(pCookieManager, EWK_COOKIE_ACCEPT_POLICY_ALWAYS); } else { @@ -3061,6 +3516,12 @@ _WebImpl::SetCookieEnabled(bool enable) result _WebImpl::SavePageAsPdf(const String& filePath, const Dimension* pSize) const { + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return E_SUCCESS; + } + result r = E_SUCCESS; std::unique_ptr pFilePath(_StringConverter::CopyToCharArrayN(filePath)); @@ -3085,15 +3546,15 @@ _WebImpl::SavePageAsPdf(const String& filePath, const Dimension* pSize) const { SysTryReturnResult(NID_WEB_CTRL, pSize->width > 0 && pSize->height > 0, E_INVALID_ARG, "Invalid argument(s) is used. Size of pdf file is invalid."); - ewk_view_contents_pdf_get(__pWebCore->GetWebNativeNode(), pSize->width, pSize->height, pFilePath.get()); + ewk_view_contents_pdf_get(pWebview, pSize->width, pSize->height, pFilePath.get()); } else { Evas_Coord contentsWidth; Evas_Coord contentsHeight; - ewk_view_contents_size_get(__pWebCore->GetWebNativeNode(), &contentsWidth, &contentsHeight); - ewk_view_contents_pdf_get(__pWebCore->GetWebNativeNode(), contentsWidth, contentsHeight, pFilePath.get()); + ewk_view_contents_size_get(pWebview, &contentsWidth, &contentsHeight); + ewk_view_contents_pdf_get(pWebview, contentsWidth, contentsHeight, pFilePath.get()); } return E_SUCCESS; @@ -3103,10 +3564,16 @@ _WebImpl::SavePageAsPdf(const String& filePath, const Dimension* pSize) const bool _WebImpl::IsMimeSupported(const String& mime) const { + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return false; + } + std::unique_ptr pMime(_StringConverter::CopyToCharArrayN(mime)); SysTryReturn(NID_WEB_CTRL, pMime.get(), false, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult())); - return static_cast< bool >(ewk_frame_can_show_mime_type(ewk_view_main_frame_get(__pWebCore->GetWebNativeNode()), pMime.get())); + return static_cast< bool >(ewk_frame_can_show_mime_type(ewk_view_main_frame_get(pWebview), pMime.get())); } @@ -3306,6 +3773,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; @@ -3313,6 +3781,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 @@ -3332,6 +3805,7 @@ _WebImpl::SetEventListenerCallback(void) const evas_object_smart_callback_add(pWebNativeNode, "requestToNative,json", OnHandleJavaScriptRequest, this); evas_object_smart_callback_add(pWinObject, "focus,in", OnWindowObjectFocusGained, this); + evas_object_smart_callback_add(pWinObject, "focus,out", OnWindowObjectFocusLost, this); evas_object_smart_callback_add(pWebNativeNode, "inputmethod,changed", OnWebKeypadStateChanged, this); evas_object_smart_callback_add(pWebNativeNode, "editorclient,ime,opened", OnWebKeypadOpened, this); @@ -3345,6 +3819,7 @@ _WebImpl::SetEventListenerCallback(void) const ewk_view_javascript_alert_callback_set(pWebNativeNode, OnScriptAlertRequested, const_cast< _WebImpl* >(this)); ewk_view_javascript_prompt_callback_set(pWebNativeNode, OnScriptPromptRequested, const_cast< _WebImpl* >(this)); ewk_view_javascript_confirm_callback_set(pWebNativeNode, OnScriptConfirmRequested, const_cast< _WebImpl* >(this)); + ewk_view_before_unload_confirm_panel_callback_set(pWebNativeNode, OnBeforeUnloadConfirmRequested, const_cast< _WebImpl* >(this)); evas_object_smart_callback_add(pWebNativeNode, "policy,response,decide", OnWebDataReceived, this); @@ -3368,14 +3843,26 @@ _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, "magnifier,hide", OnWebPageBlockSelected, this); + + evas_object_smart_callback_add(pWebNativeNode, "fullscreen,enterfullscreen", OnFullScreenEntered, this); + evas_object_smart_callback_add(pWebNativeNode, "fullscreen,exitfullscreen", OnFullScreenExited, this); + + evas_object_smart_callback_add(pWebNativeNode, "keyevent,down,not,handled", OnFocusDownRequested, this); + evas_object_smart_callback_add(pWebNativeNode, "keyevent,up,not,handled", OnFocusUpRequested, 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_view_open_panel_callback_set(pWebNativeNode, OnSelectUploadFile, 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); + evas_object_event_callback_add(pWebNativeNode, EVAS_CALLBACK_FOCUS_OUT, OnWebNativeNodeFocusLost, this); } } @@ -3403,10 +3890,12 @@ _WebImpl::RemoveEventListenerCallback(void) const evas_object_smart_callback_del(pWebNativeNode, "load,stop", OnLoadingCanceled); evas_object_smart_callback_del(pWebNativeNode, "load,error", OnLoadingErrorOccurred); evas_object_smart_callback_del(pWebNativeNode, "title,changed", OnPageTitleReceived); + evas_object_smart_callback_del(pWebNativeNode, "load,committed", OnLoadingCommitted); evas_object_smart_callback_del(pWebNativeNode, "requestToNative,json", OnHandleJavaScriptRequest); - evas_object_smart_callback_del(pWinObject, "focus,in", OnWindowObjectFocusGained); + evas_object_smart_callback_del_full(pWinObject, "focus,in", OnWindowObjectFocusGained, this); + evas_object_smart_callback_del_full(pWinObject, "focus,out", OnWindowObjectFocusLost, this); evas_object_smart_callback_del(pWebNativeNode, "inputmethod,changed", OnWebKeypadStateChanged); evas_object_smart_callback_del(pWebNativeNode, "editorclient,ime,opened", OnWebKeypadOpened); @@ -3417,9 +3906,10 @@ _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); + ewk_view_before_unload_confirm_panel_callback_set(pWebNativeNode, null, null); evas_object_smart_callback_del(pWebNativeNode, "policy,response,decide", OnWebDataReceived); @@ -3443,11 +3933,25 @@ _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, "magnifier,hide", OnWebPageBlockSelected); - ewk_view_open_panel_callback_set(null, null, null); + evas_object_smart_callback_del(pWebNativeNode, "fullscreen,enterfullscreen", OnFullScreenEntered); + evas_object_smart_callback_del(pWebNativeNode, "fullscreen,exitfullscreen", OnFullScreenExited); + + evas_object_smart_callback_del(pWebNativeNode, "keyevent,down,not,handled", OnFocusDownRequested); + evas_object_smart_callback_del(pWebNativeNode, "keyevent,up,not,handled", OnFocusUpRequested); + + 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); + evas_object_event_callback_del(pWebNativeNode, EVAS_CALLBACK_FOCUS_OUT, OnWebNativeNodeFocusLost); } } @@ -3455,26 +3959,39 @@ _WebImpl::RemoveEventListenerCallback(void) const result _WebImpl::SetBlockSelectionPosition(const Point& startPoint) { - Evas_Object* pWebNativeNode = __pWebCore->GetWebNativeNode(); + return SetBlockSelectionPosition(_CoordinateSystemUtils::ConvertToFloat(startPoint)); +} - Ewk_View_Smart_Data* pSmartData = (Ewk_View_Smart_Data*) evas_object_smart_data_get(pWebNativeNode); - SysAssertf(pSmartData, "Failed to request"); - Point absPoint(__pWebCore->GetAbsoluteCoordinate(startPoint)); +result +_WebImpl::SetBlockSelectionPosition(const FloatPoint& startPoint) +{ + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return E_SUCCESS; + } + + Ewk_View_Smart_Data* pSmartData = reinterpret_cast< Ewk_View_Smart_Data* >(evas_object_smart_data_get(pWebview)); + SysAssertf(pSmartData && pSmartData->api, "Failed to get webkit instance."); + 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(__pWebCore->GetWebNativeNode(), absPoint.x, absPoint.y, EWK_HIT_TEST_MODE_ALL); + Ewk_Hit_Test* pEwkHitTest = ewk_view_hit_test_new(pWebview, 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)) + Eina_Hash* pAttrHash = ewk_hit_test_attribute_hash_get(pEwkHitTest); + char* pValue = reinterpret_cast< char* >(eina_hash_find(pAttrHash, "contenteditable")); + if (tagName.Equals(L"INPUT", false) || tagName.Equals(L"TEXTAREA", false) || pValue) { - ewk_view_command_execute(pWebNativeNode, "SelectWord", 0); + ewk_view_command_execute(pWebview, "SelectWord", null); + evas_object_smart_callback_call(pWebview, "magnifier,hide", NULL); } } @@ -3484,17 +4001,16 @@ _WebImpl::SetBlockSelectionPosition(const Point& startPoint) } -result -_WebImpl::SetBlockSelectionPosition(const FloatPoint& startPoint) -{ - return SetBlockSelectionPosition(_CoordinateSystemUtils::ConvertToInteger(startPoint)); -} - - void _WebImpl::ReleaseBlock(void) { - ewk_view_command_execute(__pWebCore->GetWebNativeNode(), "Unselect", 0); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return; + } + + ewk_view_text_selection_range_clear(pWebview); } @@ -3514,9 +4030,19 @@ _WebImpl::GetBlockRange(Point& startPoint, Point& endPoint) const void _WebImpl::GetBlockRange(FloatPoint& startPoint, FloatPoint& endPoint) const { + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + startPoint.x = startPoint.y = endPoint.x = endPoint.y = 0.0f; + + } + 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); @@ -3535,21 +4061,17 @@ _WebImpl::GetBlockRange(FloatPoint& startPoint, FloatPoint& endPoint) const Bitmap* _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); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return null; + } - Tizen::Graphics::BufferInfo bufferInfo; - Tizen::Base::ByteBuffer byteBuffer; + result r = E_SUCCESS; - std::unique_ptr 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)); + Ewk_Context* pContext = ewk_view_context_get(pWebview); + const char* pUrl = ewk_view_url_get(pWebview); + Evas* pEvas = evas_object_evas_get(pWebview); Evas_Object* pFavicon = ewk_context_icon_database_icon_object_add(pContext, pUrl, pEvas); if (!pFavicon) @@ -3557,18 +4079,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 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(); } @@ -3576,23 +4104,41 @@ _WebImpl::GetFaviconN(void) const void _WebImpl::ScrollBy(const Tizen::Graphics::Point& diff) { - ewk_view_scroll_by(__pWebCore->GetWebNativeNode(), diff.x, diff.y); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return; + } + + ewk_view_scroll_by(pWebview, diff.x, diff.y); } void _WebImpl::ScrollTo(const Tizen::Graphics::Point& dest) { - ewk_view_scroll_set(__pWebCore->GetWebNativeNode(), dest.x, dest.y); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return; + } + + ewk_view_scroll_set(pWebview, dest.x, dest.y); } Point _WebImpl::GetScrollPosition(void) const { + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return Point(0, 0); + } + Point position; - ewk_view_scroll_pos_get(__pWebCore->GetWebNativeNode(), &position.x, &position.y); + ewk_view_scroll_pos_get(pWebview, &position.x, &position.y); return position; } @@ -3601,10 +4147,16 @@ _WebImpl::GetScrollPosition(void) const Dimension _WebImpl::GetPageSize(void) const { + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return Dimension(0, 0); + } + Evas_Coord width = 0; Evas_Coord height = 0; - ewk_view_contents_size_get(__pWebCore->GetWebNativeNode(), &width, &height); + ewk_view_contents_size_get(pWebview, &width, &height); Dimension size(static_cast< int >(width), static_cast< int >(height)); @@ -3668,6 +4220,13 @@ _WebImpl::IsCertificateRequested(void) const } +void +_WebImpl::SetCertificateConfirmed(bool arg) +{ + __isCertificateConfirmed = arg; +} + + bool _WebImpl::IsCertificateConfirmed(void) const { @@ -3676,77 +4235,14 @@ _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."); - - String operationId(L""); - String uriPattern(pWebEventArg->GetEventMessage()); - SysLog(NID_WEB_CTRL, "The current value of web event type is %d", pWebEventArg->GetEventType()); - - switch (pWebEventArg->GetEventType()) - { - case WEB_EVENT_REQUEST_RTSP: + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) { - String ext; - String mimeType; - int uriLength = uriPattern.GetLength(); - int index; - - operationId = L"http://tizen.org/appcontrol/operation/view"; - - r = uriPattern.LastIndexOf(L".", uriLength - 1, index); - 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)); - - r = _AppControlManager::GetMimeFromExt(ext, mimeType); - SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); - - 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; + return E_SUCCESS; } - 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 pKeypad(new (std::nothrow) Keypad()); @@ -3755,8 +4251,23 @@ _WebImpl::SetFullScreenKeypad(void) 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); + Point absPoint(_CoordinateSystemUtils::ConvertToInteger(__pWebCore->GetAbsoluteCoordinate(__pWebCore->GetTouchPosition()))); + + Ewk_Hit_Test* pEwkHitTest = ewk_view_hit_test_new(pWebview, 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)) + { + String text(ewk_view_focused_input_element_value_get(pWebview)); + pKeypad->SetText(text); + } + else + { + String* pText = EvaluateJavascriptN(L"document.activeElement.value"); + SysTryReturnResult(NID_WEB_CTRL, pText, E_OUT_OF_MEMORY, "Memory allocation failed."); + pKeypad->SetText(*pText); + } r = pKeypad->SetShowState(true); SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); @@ -3822,6 +4333,20 @@ _WebImpl::SetKeypadOpened(bool isKeypadOpened) } +bool +_WebImpl::IsWinFocusLost(void) const +{ + return __isWinFocusLost; +} + + +void +_WebImpl::SetWinFocusLost(bool isWinFocusLost) +{ + __isWinFocusLost = isWinFocusLost; +} + + Rectangle _WebImpl::GetPreviousKeypadBounds(void) const { @@ -3846,9 +4371,31 @@ _WebImpl::OnTextValueChangeCanceled(const Control& source) void _WebImpl::OnTextValueChanged(const Control& source) { + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return; + } + std::unique_ptr pText(_StringConverter::CopyToCharArrayN(__pKeypad->GetText())); + SysTryReturnVoidResult(NID_WEB_CTRL, pText.get(), E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed."); - ewk_view_focused_input_element_value_set(__pWebCore->GetWebNativeNode(), pText.get()); + Point absPoint(_CoordinateSystemUtils::ConvertToInteger(__pWebCore->GetAbsoluteCoordinate(__pWebCore->GetTouchPosition()))); + + Ewk_Hit_Test* pEwkHitTest = ewk_view_hit_test_new(pWebview, absPoint.x, absPoint.y, EWK_HIT_TEST_MODE_ALL); + SysTryReturnVoidResult(NID_WEB_CTRL, pEwkHitTest, E_SYSTEM, "[E_SYSTEM] Failed to get hit test."); + + String tagName(ewk_hit_test_tag_name_get(pEwkHitTest)); + if (tagName.Equals(L"INPUT", false)) + { + ewk_view_focused_input_element_value_set(__pWebCore->GetWebNativeNode(), pText.get()); + } + else + { + ewk_view_command_execute(pWebview, "SelectAll", null); + ewk_view_command_execute(pWebview, "Delete", null); + ewk_view_command_execute(pWebview, "InsertText", pText.get()); + } RemoveFullScreenKeypad(); } @@ -4019,8 +4566,6 @@ _WebImpl::OnHandleWebDownloadEvent(const IEventArg& arg) result _WebImpl::OnHandleWebUiEvent(const IEventArg& arg) { - result r = E_SUCCESS; - const _WebUiEventArg* pEventArg = dynamic_cast< const _WebUiEventArg* >(&arg); SysTryReturnResult(NID_WEB_CTRL, pEventArg, E_INVALID_ARG, "Invalid argument(s) is used. Type casting failed. argument must be IEventArg type."); @@ -4084,8 +4629,6 @@ _WebImpl::OnHandleWebUiEvent(const IEventArg& arg) result _WebImpl::OnHandleWebUiEventF(const IEventArg& arg) { - result r = E_SUCCESS; - const _WebUiEventArg* pEventArg = dynamic_cast< const _WebUiEventArg* >(&arg); SysTryReturnResult(NID_WEB_CTRL, pEventArg, E_INVALID_ARG, "Invalid argument(s) is used. Type casting failed. argument must be IEventArg type."); @@ -4184,6 +4727,37 @@ _WebImpl::OnHandleTextSearchEvent(const IEventArg& arg) result +_WebImpl::VibrationRequested(uint64_t duration) +{ + result r = E_SUCCESS; + + __pVibrator.reset(); + + std::unique_ptr pVibrator(new (std::nothrow) Vibrator()); + SysTryReturnResult(NID_WEB_CTRL, pVibrator.get(), E_OUT_OF_MEMORY, "Memory allocation failed."); + + r = pVibrator->Construct(); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); + + __pVibrator = std::move(pVibrator); + + IntensityDurationVibrationPattern pattern = {static_cast< int >(duration), -1}; + + r = __pVibrator->Start(&pattern, 1); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); + + return E_SUCCESS; +} + + +void +_WebImpl::VibrationCanceled(void) +{ + __pVibrator.reset(); +} + + +result _WebImpl::HttpAuthenticationRequested(Ewk_Auth_Challenge* pChallenge) { result r = E_SUCCESS; @@ -4230,16 +4804,13 @@ _WebImpl::ShowAuthenticationPopup(const String& host, const String& realm, Authe r = pAuthPopup->Construct(host, realm, pAuthChallenge); SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); + __pAuthPopup.reset(); __pAuthPopup = std::move(pAuthPopup); - int modalResult = 0; - r = __pAuthPopup->ShowAndWait(modalResult); - SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r)); - -CATCH: - __pAuthPopup.reset(); + r = __pAuthPopup->ShowPopup(); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); - return r; + return E_SUCCESS; } @@ -4257,123 +4828,286 @@ _WebImpl::ShowCertificateConfirmPopup(_CertificatePopupMode userConfirmMode, Ewk __pCertConfirmPopup = std::move(pCertConfirmPopup); int modalResult = 0; + 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; - 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::ShowUserConfirmPopupAsync(_UserConfirmMode userConfirmMode, void* pPolicy) +_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, false); + r = pUserConfirmPopup->Construct(userConfirmMode, pPolicy, this, true, msg); SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); - __pUserConfirmPopup = std::move(pUserConfirmPopup); + int modalResult = 0; - r = __pUserConfirmPopup->ShowPopup(); - SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r)); + switch(userConfirmMode) + { + case USER_CONTENT_HANDLER: + { + __pContentHandlerConfirmPopup = std::move(pUserConfirmPopup); - __pUserConfirmPopup.release(); + r = __pContentHandlerConfirmPopup->ShowAndWait(modalResult); + SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, __pContentHandlerConfirmPopup.reset(), r, "[%s] Propagating.", GetErrorMessage(r)); - return E_SUCCESS; + __pContentHandlerConfirmPopup.reset(); -CATCH: - __pUserConfirmPopup.reset(); + ewk_view_resume(__pWebCore->GetWebNativeNode()); - return r; + 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; } -_Form* -_WebImpl::GetParentFormCore(_Control* pControlCore) +result +_WebImpl::ShowUserConfirmPopupAsync(_UserConfirmMode userConfirmMode, void* pPolicy, String msg) { - String parentName; - _Form* pFormCore = null; + result r = E_SUCCESS; - _Control* pParentControlCore = dynamic_cast< _Control* >(pControlCore->GetParent()); + std::unique_ptr<_UserConfirmPopup> pUserConfirmPopup(new (std::nothrow) _UserConfirmPopup()); + SysTryReturnResult(NID_WEB_CTRL, pUserConfirmPopup.get(), E_OUT_OF_MEMORY, "Memory Allocation failed."); - if (pParentControlCore == null) + r = pUserConfirmPopup->Construct(userConfirmMode, pPolicy, this, false, msg); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); + + switch(userConfirmMode) { - _Window* pWindowCore = dynamic_cast< _Window* >(pControlCore); - SysAssertf(pWindowCore, "Failed to get parent control and window core."); - pFormCore = dynamic_cast< _Form* >(pWindowCore->GetOwner()); - if (pFormCore == null) - { - pParentControlCore = dynamic_cast< _Control* >(pWindowCore->GetOwner()); - SysTryReturn(NID_WEB_CTRL, pParentControlCore, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult())); - } + case USER_CONFIRM_USERMEDIA: + { + __pUserMediaConfirmPopup.reset(); + + __pUserMediaConfirmPopup = std::move(pUserConfirmPopup); + + r = __pUserMediaConfirmPopup->ShowPopup(); + SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, __pUserMediaConfirmPopup.reset(), r, "[%s] Propagating.", GetErrorMessage(r)); + + break; } - else + 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)); + + 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)); + + 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)); + + 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)); + + break; + } + case USER_BEFORE_UNLOAD_CONFIRM: { - pFormCore = dynamic_cast< _Form* >(pParentControlCore); + __pBeforeUnloadConfirmPopup.reset(); + + __pBeforeUnloadConfirmPopup = std::move(pUserConfirmPopup); + + r = __pBeforeUnloadConfirmPopup->ShowPopup(); + SysTryCatch(NID_WEB_CTRL, r == E_SUCCESS, __pBeforeUnloadConfirmPopup.reset(), r, "[%s] Propagating.", GetErrorMessage(r)); + + break; + } + default: + break; } - if (pFormCore != null) + return E_SUCCESS; + +CATCH: + return r; +} + + +_FormImpl* +_WebImpl::GetParentFormImpl(_ControlImpl* pControlImpl) +{ + String parentName; + _FormImpl* pFormImpl = null; + + _ControlImpl* pParentControlImpl = dynamic_cast< _ControlImpl* >(pControlImpl->GetParent()); + if (!pParentControlImpl) { - return pFormCore; + return null; + } + + pFormImpl = dynamic_cast< _FormImpl* >(pParentControlImpl); + if (pFormImpl) + { + return pFormImpl; } - return GetParentFormCore(pParentControlCore); + return GetParentFormImpl(pParentControlImpl); } bool _WebImpl::OnFocusGained(const _ControlImpl& source) { - return true; + return false; } bool _WebImpl::OnFocusLost(const _ControlImpl& source) { - if(IsKeypadVisible() == true) + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) { - OnWebKeypadClosed(this, null, null); + return false; + } + if(IsKeypadVisible() == true) + { SetKeypadOpened(true); } - evas_object_focus_set(__pWebCore->GetWebNativeNode(), EINA_FALSE); - - return true; + return false; } @@ -4390,60 +5124,218 @@ _WebImpl::HasValidNativeNode(void) const result -_WebImpl::OnAttachedToMainTree(void) +_WebImpl::OnPreAttachedToMainTree(void) { result r = E_SUCCESS; - r = __pWebCore->InitializeWebNativeNode(); + r = _ContainerImpl::OnPreAttachedToMainTree(); SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); - r = InitializeSetting(); - SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); + if (!HasValidNativeNode()) + { + r = __pWebCore->InitializeWebNativeNode(); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); - r = _ContainerImpl::OnAttachedToMainTree(); + _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)); + + _SettingInfoImpl::AddSettingEventListener(*this); + + _WebManager* pWebManager = _WebManager::GetInstance(); + SysTryReturnResult(NID_WEB_CTRL, pWebManager, E_SYSTEM, "Failed to get the _WebManager instance."); + pWebManager->AddWeb(reinterpret_cast< int >(this)); + } + + if (IsVisible() == true) + { + _WebManager* pWebManager = _WebManager::GetInstance(); + SysTryReturnResult(NID_WEB_CTRL, pWebManager, E_SYSTEM, "Failed to get the _WebManager instance."); + pWebManager->SetActiveWeb(this); + } + + return E_SUCCESS; +} + + +result +_WebImpl::OnDetachingFromMainTree(void) +{ + result r = E_SUCCESS; + + r = _ContainerImpl::OnDetachingFromMainTree(); SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); + _WebManager* pWebManager = _WebManager::GetInstance(); + SysTryReturnResult(NID_WEB_CTRL, pWebManager, E_SYSTEM, "Failed to get the _WebManager instance."); + pWebManager->RemoveActiveWeb(this); + return E_SUCCESS; } void -_WebImpl::OnChangeLayout(_ControlOrientation orientation) +_WebImpl::OnSettingChanged(String& key) { - _ContainerImpl::OnChangeLayout(orientation); + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return; + } + + if (key == L"http://tizen.org/setting/font.type") + { + ewk_view_use_settings_font(pWebview); + } +} - if (IsKeypadVisible() == true) + +void +_WebImpl::OnChangeLayout(_ControlRotation rotation) +{ + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) { - int x = 0; - int y = 0; - int w = 0; - int h = 0; - ecore_imf_context_input_panel_geometry_get(ecore_imf_context_add(ecore_imf_context_default_id_get()), &x, &y, &w, &h); + return; + } - _Form* pFormCore = GetParentFormCore(dynamic_cast< _Control* >(&this->GetCore())); - SysAssertf(pFormCore != null, "Failed to get FormCore"); + int degree = 0; - pFormCore->DeflateClientRectHeight(h); + 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(pWebview, degree); +} + + +void +_WebImpl::OnChangeLayout(_ControlOrientation orientation) +{ + _ContainerImpl::OnChangeLayout(orientation); if (__pColorPicker.get()) { __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(); + } + + if (IsKeypadVisible()) + { + _ICoordinateSystemTransformer* pXformer = _CoordinateSystem::GetInstance()->GetInverseTransformer(); + SysAssertf(pXformer, "Failed to get CoordinateTransformer"); + + _FormImpl* pFormImpl = GetParentFormImpl(dynamic_cast< _ControlImpl* >(this)); + pFormImpl->DeflateClientRectHeight(pXformer->TransformVertical(GetPreviousKeypadBounds().height)); + } } void _WebImpl::OnAncestorVisibleStateChanged(const _Control& control) { + Evas_Object* pWebview = __pWebCore->GetWebNativeNode(); + if (!pWebview) + { + return; + } + + _WebManager* pWebManager = _WebManager::GetInstance(); + SysTryReturnVoidResult(NID_WEB_CTRL, pWebManager, E_SYSTEM, "[E_SYSTEM] Failed to get the _WebManager instance."); if (IsVisible() == true) { - ewk_view_page_visibility_state_set(__pWebCore->GetWebNativeNode(), EWK_PAGE_VISIBILITY_STATE_VISIBLE, false); + pWebManager->SetActiveWeb(this); + if (IsLoading()) + { +// ewk_view_page_visibility_state_set(pWebview, EWK_PAGE_VISIBILITY_STATE_VISIBLE, true); + } + else + { +// ewk_view_page_visibility_state_set(pWebview, EWK_PAGE_VISIBILITY_STATE_VISIBLE, false); + } } else { - ewk_view_page_visibility_state_set(__pWebCore->GetWebNativeNode(), EWK_PAGE_VISIBILITY_STATE_HIDDEN, false); + pWebManager->RemoveActiveWeb(this); + if (IsLoading()) + { +// ewk_view_page_visibility_state_set(pWebview, EWK_PAGE_VISIBILITY_STATE_HIDDEN, true); + } + else + { +// ewk_view_page_visibility_state_set(pWebview, 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; + + case ID_USER_BEFORE_UNLOAD_CONFIRM_CLOSE: + __pBeforeUnloadConfirmPopup.reset(); + break; + + case ID_USER_SCRIPT_SELECTBOX_CLOSE: + __pSelectBox.reset(); + break; + default: + break; } + + Resume(); } @@ -4459,6 +5351,8 @@ _WebImpl::HideColorPicker(void) { __pColorPicker.reset(); + Resume(); + return EINA_TRUE; } @@ -4473,20 +5367,26 @@ _WebImpl::ShowColorPicker(int red, int green, int blue, int alpha, Color& color) Tizen::Graphics::Color colorVal(static_cast< byte >(red), static_cast< byte >(green), static_cast< byte >(blue), static_cast< byte >(alpha)); - r = pColorHadler->Construct(colorVal); + r = pColorHadler->Construct(colorVal, this); SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); __pColorPicker = std::move(pColorHadler); - r = __pColorPicker->ShowPopup(); + int modalResult = 0; + r = __pColorPicker->ShowAndWait(modalResult); 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(); + Resume(); + } return r; } @@ -4500,18 +5400,26 @@ _WebImpl::ShowDatePicker(Ewk_Input_Type inputType, const char* inputValue, Strin std::unique_ptr<_InputPickerPopup> pInputPicker(new (std::nothrow) _InputPickerPopup()); SysTryReturnResult(NID_WEB_CTRL, pInputPicker.get(), E_OUT_OF_MEMORY, "Memory allocation failed."); - r = pInputPicker->Construct(String(inputValue), inputType); + r = pInputPicker->Construct(String(inputValue), inputType, this); SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); __pDatePicker = std::move(pInputPicker); - r = __pDatePicker->ShowPopup(); + int modalResult = 0; + r = __pDatePicker->ShowAndWait(modalResult); 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(); + Resume(); + } return r; } @@ -4552,7 +5460,7 @@ _WebImpl::SearchHandler(Ewk_Custom_Handlers_Data* pHandlerData, bool checkmime) String uri(ewk_custom_handlers_data_url_get(pHandlerData)); String target(ewk_custom_handlers_data_target_get(pHandlerData)); - SysLog(NID_WEB_CTRL, "BaseUrl : %s, Url : %s, mime : %s", baseUri.GetPointer(), uri.GetPointer(), target.GetPointer()); + SysSecureLog(NID_WEB_CTRL, "BaseUrl : %s, Url : %s, mime : %s", baseUri.GetPointer(), uri.GetPointer(), target.GetPointer()); result r = db.Construct(handlerPath, "r+", null); SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, -1, r, "[%s] Propagating.", GetErrorMessage(r)); @@ -4597,7 +5505,7 @@ _WebImpl::UnregistrationHandler(Ewk_Custom_Handlers_Data* pHandlerData, bool che String uri(ewk_custom_handlers_data_url_get(pHandlerData)); String target(ewk_custom_handlers_data_target_get(pHandlerData)); - SysLog(NID_WEB_CTRL, "BaseUrl : %s, Url : %s, mime : %s", baseUri.GetPointer(), uri.GetPointer(), target.GetPointer()); + SysSecureLog(NID_WEB_CTRL, "BaseUrl : %s, Url : %s, mime : %s", baseUri.GetPointer(), uri.GetPointer(), target.GetPointer()); result r = db.Construct(handlerPath, "r+", null); SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); @@ -4765,4 +5673,78 @@ _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); +} + + }}} // Tizen::Web::Controls