From 9236997f306bdbb2e75f5d2cf7ec6adbecd95f03 Mon Sep 17 00:00:00 2001 From: Praveen Gattu Date: Mon, 15 Apr 2013 12:42:24 +0530 Subject: [PATCH] Addition of new confirmation UI for HTML5 appcache,db usage. Change-Id: I35211b560a3105fa1377ddbe5127c6e6a35ec62d Signed-off-by: Praveen Gattu --- src/controls/FWebCtrl_UserConfirmPopup.cpp | 43 ++++++++++++++- src/controls/FWebCtrl_UserConfirmPopup.h | 9 +++- src/controls/FWebCtrl_WebImpl.cpp | 86 ++++++++++++++++++++++++++++-- src/controls/FWebCtrl_WebImpl.h | 4 +- 4 files changed, 132 insertions(+), 10 deletions(-) diff --git a/src/controls/FWebCtrl_UserConfirmPopup.cpp b/src/controls/FWebCtrl_UserConfirmPopup.cpp index 4b46e02..b74831d 100755 --- a/src/controls/FWebCtrl_UserConfirmPopup.cpp +++ b/src/controls/FWebCtrl_UserConfirmPopup.cpp @@ -70,11 +70,11 @@ _UserConfirmPopup::~_UserConfirmPopup(void) result -_UserConfirmPopup::Construct(_UserConfirmMode userConfirmMode, void* pEventInfo, bool sync) +_UserConfirmPopup::Construct(_UserConfirmMode userConfirmMode, void* pEventInfo, Tizen::Base::String msg, bool sync) { result r = E_SUCCESS; SysTryReturnResult(NID_WEB_CTRL, pEventInfo, E_INVALID_ARG, "Invalid argument(s) is used. pPolicy is null."); - SysTryReturnResult(NID_WEB_CTRL, userConfirmMode >= USER_CONFIRM_USERMEDIA && userConfirmMode <= USER_CONFIRM_GEOLOCATION, E_INVALID_ARG, + SysTryReturnResult(NID_WEB_CTRL, userConfirmMode >= USER_CONFIRM_USERMEDIA && userConfirmMode <= USER_CONFIRM_INDEXED_DB_QUOTA_EXCEDED, E_INVALID_ARG, "Invalid userConfirmMode is used. [%d]", userConfirmMode); _WebPopupData* pPopupData = _WebPopup::GetPopupData(); @@ -83,6 +83,7 @@ _UserConfirmPopup::Construct(_UserConfirmMode userConfirmMode, void* pEventInfo, __pUserPolicyData = pEventInfo; __userConfirmMode = userConfirmMode; __sync = sync; + __defMsg = msg; int popupMaxHeight = 2*pPopupData->labelDim.height + 2*pPopupData->btnDim.height + 6*pPopupData->sideMargin; if (__userConfirmMode == USER_CONFIRM_GEOLOCATION) @@ -241,6 +242,16 @@ _UserConfirmPopup::GetMessageFromPolicy(void) message.Append(" Requests your Location"); break; } + case USER_CONFIRM_APP_CACHE: + //fall through + case USER_CONFIRM_DB_QUOTA_EXCEDED: + //fall through + case USER_CONFIRM_LOCAL_FS_QUOTA_EXCEDED: + //fall through + case USER_CONFIRM_INDEXED_DB_QUOTA_EXCEDED: + message = __defMsg; + break; + default: SysAssert(false); } @@ -282,6 +293,34 @@ CATCH: ewk_geolocation_permission_request_set(pPolicy, allow); break; } + case USER_CONFIRM_APP_CACHE: + { + Evas_Object *pObj = reinterpret_cast< Evas_Object* >(__pUserPolicyData); + ewk_view_application_cache_permission_reply(pObj, allow); + break; + } + + case USER_CONFIRM_DB_QUOTA_EXCEDED: + { + Evas_Object *pObj = reinterpret_cast< Evas_Object* >(__pUserPolicyData); + ewk_view_exceeded_database_quota_reply(pObj, allow); + break; + } + + case USER_CONFIRM_LOCAL_FS_QUOTA_EXCEDED: + { + Evas_Object *pObj = reinterpret_cast< Evas_Object* >(__pUserPolicyData); + ewk_view_exceeded_local_file_system_quota_reply(pObj, allow); + break; + } + + case USER_CONFIRM_INDEXED_DB_QUOTA_EXCEDED: + { + Evas_Object *pObj = reinterpret_cast< Evas_Object* >(__pUserPolicyData); + ewk_view_exceeded_indexed_database_quota_reply(pObj, allow); + break; + } + default: SysAssert(false); } diff --git a/src/controls/FWebCtrl_UserConfirmPopup.h b/src/controls/FWebCtrl_UserConfirmPopup.h index e285e4b..a2134b6 100755 --- a/src/controls/FWebCtrl_UserConfirmPopup.h +++ b/src/controls/FWebCtrl_UserConfirmPopup.h @@ -48,7 +48,11 @@ enum _UserConfirmMode USER_CONFIRM_USERMEDIA, USER_CONTENT_HANDLER, USER_PROTOCOL_HANDLER, - USER_CONFIRM_GEOLOCATION + USER_CONFIRM_GEOLOCATION, + USER_CONFIRM_APP_CACHE, + USER_CONFIRM_DB_QUOTA_EXCEDED, + USER_CONFIRM_LOCAL_FS_QUOTA_EXCEDED, + USER_CONFIRM_INDEXED_DB_QUOTA_EXCEDED }; class _UserConfirmPopup @@ -66,7 +70,7 @@ public: */ virtual ~_UserConfirmPopup(void); - result Construct(_UserConfirmMode userConfirmMode, void* pEventInfo, bool sync = false); + result Construct(_UserConfirmMode userConfirmMode, void* pEventInfo, Tizen::Base::String msg = L"", bool sync = false); virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); @@ -86,6 +90,7 @@ private: void* __pUserPolicyData; _UserConfirmMode __userConfirmMode; Tizen::Ui::Controls::CheckButton* __pCheckButton; + Tizen::Base::String __defMsg; bool __sync; }; // _UserConfirmPopup diff --git a/src/controls/FWebCtrl_WebImpl.cpp b/src/controls/FWebCtrl_WebImpl.cpp index 378d1c8..ba6a05a 100755 --- a/src/controls/FWebCtrl_WebImpl.cpp +++ b/src/controls/FWebCtrl_WebImpl.cpp @@ -635,6 +635,75 @@ OnNotificationCancel(void* pUserData, Evas_Object* pView, void* pEventInfo) } +Eina_Bool +OnApplicationCachePermissionRequested(Evas_Object* pView, Ewk_Security_Origin* pSecOrigin, void* pUserData) +{ + _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData); + SysAssertf(pImpl , "Failed to request"); + + const char* pHostName = ewk_security_origin_host_get(pSecOrigin); + String msg; + result r = msg.Format(256, L"Allow %s to use offline application cache?", pHostName); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r)); + + r = pImpl->ShowUserConfirmPopup(USER_CONFIRM_APP_CACHE, pView, msg); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r)); + + return EINA_TRUE; +} + + +Eina_Bool OnIndexedDatabaseQuotaExceeded(Evas_Object* pView, Ewk_Security_Origin* pSecOrigin, long long currentQuota, void* pUserData) +{ + _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData); + SysAssertf(pImpl , "Failed to request"); + + const char* pHostName = ewk_security_origin_host_get(pSecOrigin); + String msg; + result r = msg.Format(512, L"%s Used %lld of storage. Allow %s to use upto 2GB of indexed db?", pHostName, currentQuota, pHostName); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r)); + + r = pImpl->ShowUserConfirmPopup(USER_CONFIRM_INDEXED_DB_QUOTA_EXCEDED, pView, msg); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r)); + + return EINA_TRUE; +} + + +Eina_Bool OnDatabaseQuotaExceeded(Evas_Object* pView, Ewk_Security_Origin* pSecOrigin, const char* database_name, unsigned long long expectedQuota, void* pUserData) +{ + _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData); + SysAssertf(pImpl , "Failed to request"); + + const char* pHostName = ewk_security_origin_host_get(pSecOrigin); + String msg; + result r = msg.Format(512, L"Allow %s to open %s use upto %lld of web database?", pHostName, database_name, expectedQuota); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r)); + + r = pImpl->ShowUserConfirmPopup(USER_CONFIRM_DB_QUOTA_EXCEDED, pView, msg); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r)); + + return EINA_TRUE; +} + + +Eina_Bool OnLocalFileSystemQuotaExceeded(Evas_Object* pView, Ewk_Security_Origin* pSecOrigin, long long currentQuota, void* pUserData) +{ + _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData); + SysAssertf(pImpl , "Failed to request"); + + const char* pHostName = ewk_security_origin_host_get(pSecOrigin); + String msg; + result r = msg.Format(512, L"%s Used %lld of storgae. Allow %s to use upto 2GB of file system?", pHostName, currentQuota, pHostName); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r)); + + r = pImpl->ShowUserConfirmPopup(USER_CONFIRM_LOCAL_FS_QUOTA_EXCEDED, pView, msg); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r)); + + return EINA_TRUE; +} + + void OnProtocolHandlerRegistrationRequested(void* pUserData, Evas_Object* pView, void* pEventInfo) { @@ -3417,6 +3486,10 @@ _WebImpl::SetEventListenerCallback(void) const SysAssertf(pContext, "Failed to get webkit instance."); ewk_context_did_start_download_callback_set(pContext, OnDidStartDownloadCallback, const_cast< _WebImpl* >(this)); ewk_context_vibration_client_callbacks_set(pContext, OnVibrationRequested, OnVibrationCanceled, const_cast< _WebImpl* >(this)); + ewk_view_application_cache_permission_callback_set(pWebNativeNode, OnApplicationCachePermissionRequested, const_cast< _WebImpl* >(this)); + ewk_view_exceeded_indexed_database_quota_callback_set(pWebNativeNode, OnIndexedDatabaseQuotaExceeded, const_cast< _WebImpl* >(this)); + ewk_view_exceeded_database_quota_callback_set(pWebNativeNode, OnDatabaseQuotaExceeded, const_cast< _WebImpl* >(this)); + ewk_view_exceeded_local_file_system_quota_callback_set(pWebNativeNode, OnLocalFileSystemQuotaExceeded, const_cast< _WebImpl* >(this)); evas_object_event_callback_add(pWebNativeNode, EVAS_CALLBACK_FOCUS_IN, OnWebNativeNodeFocusGained, this); } @@ -3488,6 +3561,11 @@ _WebImpl::RemoveEventListenerCallback(void) const evas_object_smart_callback_del(pWebNativeNode, "text,style,state", OnWebPageBlockSelected); + 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); + ewk_view_open_panel_callback_set(null, null, null); Ewk_Context* pContext = ewk_view_context_get(pWebNativeNode); SysAssertf(pContext, "Failed to get webkit instance."); @@ -4345,14 +4423,14 @@ CATCH: } result -_WebImpl::ShowUserConfirmPopup(_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, true); + r = pUserConfirmPopup->Construct(userConfirmMode, pPolicy, msg, true); SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); __pUserConfirmPopup = std::move(pUserConfirmPopup); @@ -4368,14 +4446,14 @@ CATCH: } result -_WebImpl::ShowUserConfirmPopupAsync(_UserConfirmMode userConfirmMode, void* pPolicy) +_WebImpl::ShowUserConfirmPopupAsync(_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, msg, false); SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); __pUserConfirmPopup = std::move(pUserConfirmPopup); diff --git a/src/controls/FWebCtrl_WebImpl.h b/src/controls/FWebCtrl_WebImpl.h index 6355ef1..f3522d0 100755 --- a/src/controls/FWebCtrl_WebImpl.h +++ b/src/controls/FWebCtrl_WebImpl.h @@ -335,8 +335,8 @@ public: result ShowCertificateConfirmPopup(_CertificatePopupMode userConfirmMode, Ewk_Certificate_Policy_Decision *pPolicy); - result ShowUserConfirmPopup(_UserConfirmMode userConfirmMode, void* pPolicy); - result ShowUserConfirmPopupAsync(_UserConfirmMode userConfirmMode, void* pPolicy); + result ShowUserConfirmPopup(_UserConfirmMode userConfirmMode, void* pPolicy, Tizen::Base::String msg = L""); + result ShowUserConfirmPopupAsync(_UserConfirmMode userConfirmMode, void* pPolicy, Tizen::Base::String msg = L""); Tizen::Ui::Controls::_Form* GetParentFormCore(Tizen::Ui::_Control* pControlCore); -- 2.7.4