adding new popups for indexeddb, app cache and FS access request
authorPraveen Gattu <gattu.p@samsung.com>
Wed, 22 May 2013 05:50:53 +0000 (11:20 +0530)
committerPraveen Gattu <gattu.p@samsung.com>
Thu, 23 May 2013 08:06:49 +0000 (13:36 +0530)
Change-Id: Iaf36f7904349dcd56040b06efed8d4f2db5d83ef

src/controls/FWebCtrl_UserConfirmPopup.cpp
src/controls/FWebCtrl_UserConfirmPopup.h
src/controls/FWebCtrl_WebImpl.cpp
src/controls/FWebCtrl_WebImpl.h

index a7b2135..bc7787b 100755 (executable)
@@ -74,7 +74,7 @@ _UserConfirmPopup::Construct(_UserConfirmMode userConfirmMode, void* pEventInfo,
 {
        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_SCRIPT_ALERT, 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();
@@ -116,7 +116,7 @@ _UserConfirmPopup::Construct(_UserConfirmMode userConfirmMode, void* pEventInfo,
        SysTryReturnResult(NID_WEB_CTRL, pLabel.get(), E_OUT_OF_MEMORY, "Memory Allocation failed.");
 
        String message = L"";
-       if (userConfirmMode == USER_SCRIPT_ALERT)
+       if (userConfirmMode >= USER_SCRIPT_ALERT && userConfirmMode <= USER_CONFIRM_INDEXED_DB_QUOTA_EXCEDED)
        {
                message = msg;
        }
@@ -329,6 +329,30 @@ CATCH:
                ewk_view_javascript_alert_reply(pView);
                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);
        }
index b090c3c..bc57332 100755 (executable)
@@ -50,7 +50,11 @@ enum _UserConfirmMode
        USER_PROTOCOL_HANDLER,
        USER_CONFIRM_GEOLOCATION,
        USER_CONFIRM_NOTIFICATION,
-       USER_SCRIPT_ALERT
+       USER_SCRIPT_ALERT,
+       USER_CONFIRM_APP_CACHE,
+       USER_CONFIRM_DB_QUOTA_EXCEDED,
+       USER_CONFIRM_LOCAL_FS_QUOTA_EXCEDED,
+       USER_CONFIRM_INDEXED_DB_QUOTA_EXCEDED
 };
 
 class _UserConfirmPopup
index d37deec..f9ae898 100755 (executable)
@@ -493,6 +493,76 @@ OnHttpAuthenticationCanceled(void* pUserData, Evas_Object* pView, void* pEventIn
        }
 }
 
+Eina_Bool
+OnApplicationCachePermissionRequested(Evas_Object* pView, Ewk_Security_Origin* pSecOrigin,  void* pUserData)
+{
+       _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData);
+       SysAssertf(pImpl , "Failed to request");
+
+       const char* pHostName = ewk_security_origin_host_get(pSecOrigin);
+       String msg;
+       result r = msg.Format(256, L"Allow %s to use offline application cache?", pHostName);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       r = pImpl->ShowUserConfirmPopup(USER_CONFIRM_APP_CACHE, pView, msg);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       return EINA_TRUE;
+}
+
+
+Eina_Bool
+OnIndexedDatabaseQuotaExceeded(Evas_Object* pView, Ewk_Security_Origin* pSecOrigin,  long long currentQuota, void* pUserData)
+{
+       _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData);
+       SysAssertf(pImpl , "Failed to request");
+
+       const char* pHostName = ewk_security_origin_host_get(pSecOrigin);
+       String msg;
+       result r = msg.Format(512, L"%s Used %lld of storage. Allow %s to use upto 2GB of indexed db?", pHostName, currentQuota, pHostName);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       r = pImpl->ShowUserConfirmPopup(USER_CONFIRM_INDEXED_DB_QUOTA_EXCEDED, pView, msg);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       return EINA_TRUE;
+}
+
+
+Eina_Bool
+OnDatabaseQuotaExceeded(Evas_Object* pView, Ewk_Security_Origin* pSecOrigin, const char* database_name, unsigned long long expectedQuota, void* pUserData)
+{
+       _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData);
+       SysAssertf(pImpl , "Failed to request");
+
+       const char* pHostName = ewk_security_origin_host_get(pSecOrigin);
+       String msg;
+       result r = msg.Format(512, L"Allow %s to open  %s use upto %lld  of web database?", pHostName, database_name, expectedQuota);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       r = pImpl->ShowUserConfirmPopup(USER_CONFIRM_DB_QUOTA_EXCEDED, pView, msg);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       return EINA_TRUE;
+}
+
+
+Eina_Bool OnLocalFileSystemQuotaExceeded(Evas_Object* pView, Ewk_Security_Origin* pSecOrigin,  long long currentQuota, void* pUserData)
+{
+       _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(pUserData);
+       SysAssertf(pImpl , "Failed to request");
+
+       const char* pHostName = ewk_security_origin_host_get(pSecOrigin);
+       String msg;
+       result r = msg.Format(512, L"%s Used %lld of storgae. Allow %s to use upto 2GB of file system?", pHostName, currentQuota, pHostName);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       r = pImpl->ShowUserConfirmPopup(USER_CONFIRM_LOCAL_FS_QUOTA_EXCEDED, pView, msg);
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, EINA_FALSE, r, "[%s] Propagating.", GetErrorMessage(r));
+
+       return EINA_TRUE;
+}
+
 
 void
 OnGeolocationPermissionRequested(void* pUserData, Evas_Object* pView, void* pEventInfo)
@@ -756,15 +826,6 @@ OnVibrationCanceled(void* pUserData)
 }
 
 
-Eina_Bool
-OnApplicationCachePermissionRequested(Evas_Object* pView, Ewk_Security_Origin* pOrigin, void* pUserData)
-{
-       ewk_view_application_cache_permission_reply(pView, EINA_TRUE);
-
-       return EINA_TRUE;
-}
-
-
 void
 OnLoadingRequested(void* pUserData, Evas_Object* pView, void* pEventInfo)
 {
@@ -3458,7 +3519,11 @@ _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);
        }
@@ -3535,7 +3600,11 @@ _WebImpl::RemoveEventListenerCallback(void) const
                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);
        }
@@ -4418,14 +4487,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, true, msg);
        SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
        __pUserConfirmPopup = std::move(pUserConfirmPopup);
index 1c61205..4fe886f 100755 (executable)
@@ -340,7 +340,7 @@ public:
 
        result ShowCertificateConfirmPopup(_CertificatePopupMode userConfirmMode, Ewk_Certificate_Policy_Decision *pPolicy);
 
-       result ShowUserConfirmPopup(_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);