fix once crash issue
authorSeongjun Yim <se201.yim@samsung.com>
Tue, 16 Jul 2013 08:57:47 +0000 (17:57 +0900)
committerSeongjun Yim <se201.yim@samsung.com>
Tue, 16 Jul 2013 08:57:47 +0000 (17:57 +0900)
Change-Id: Ie1b2d5405d10d66de817b97c77d36b20e23acaba
Signed-off-by: Seongjun Yim <se201.yim@samsung.com>
CMakeLists.txt
src/controls/FWebCtrl_Web.cpp
src/controls/FWebCtrl_Web.h
src/controls/FWebCtrl_WebImpl.cpp
src/controls/FWebCtrl_WebManager.cpp [new file with mode: 0755]
src/controls/FWebCtrl_WebManager.h [new file with mode: 0755]
src/controls/FWebCtrl_WebPresenter.cpp
src/controls/FWebCtrl_WebPresenter.h
src/controls/FWebCtrl_WebStorageManagerImpl.cpp
src/controls/inc/FWebCtrl_WebImpl.h

index 7383223..edbe3ef 100755 (executable)
@@ -89,6 +89,7 @@ SET (${this_target}_SOURCE_FILES
        src/controls/FWebCtrl_WebNotification.cpp
        src/controls/FWebCtrl_WebNotificationHandler.cpp
        src/controls/FWebCtrl_FormDataWindow.cpp
+       src/controls/FWebCtrl_WebManager.cpp
 )
 ## Add Definitions
 ADD_DEFINITIONS(${OSP_DEFINITIONS} -D_MODEL_RES_WVGA)
index 74782d2..44a5586 100755 (executable)
@@ -340,6 +340,7 @@ _Web::_Web(void)
        , __pPinchGestureHandler(null)
        , __gestureType(WEB_GESTURE_TYPE_TAP)
        , __edgeType(WEB_EDGE_NONE)
+       , __focus(false)
        , __pTextElement(null)
        , __previousTouchedPosition(0.0f, 0.0f)
 {
@@ -691,6 +692,62 @@ _Web::SetEdgeReachedEvent(_WebEdgeType type)
 }
 
 
+void
+_Web::SetFocusEnd(bool focus)
+{
+       __focus = focus;
+}
+
+
+bool
+_Web::IsFocusEnd(void)
+{
+       return __focus;
+}
+
+
+bool
+_Web::OnKeyPressed(const _Control& source, const _KeyInfo& keyInfo)
+{
+       _KeyCode keyCode = keyInfo.GetKeyCode();
+
+       if (IsFocusEnd() == true)
+       {
+               SetFocusEnd(false);
+               evas_object_focus_set(GetWebNativeNode(), EINA_FALSE);
+               return false;
+       }
+
+       switch(keyCode)
+       {
+       case _KEY_UP:
+       case _KEY_DOWN:
+               evas_object_focus_set(GetWebNativeNode(), EINA_FALSE);
+               return false;
+               break;
+       default:
+               break;
+       }
+
+       evas_object_focus_set(GetWebNativeNode(), EINA_TRUE);
+
+       return true;
+}
+
+
+bool
+_Web::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
+{
+       return false;
+}
+
+
+void
+_Web::OnDrawFocus(void)
+{
+}
+
+
 bool
 _Web::OnTouchPressed(const _Control& source, const _TouchInfo& touchInfo)
 {
index a1878ae..bf6fa51 100755 (executable)
@@ -115,9 +115,16 @@ public:
 
        void SetEdgeReachedEvent(_WebEdgeType type);
 
+       void SetFocusEnd(bool focus);
+       bool IsFocusEnd(void);
+
        virtual result OnAttaching(const _Control* pParent);
        virtual result OnBoundsChanging(const Tizen::Graphics::Rectangle& bounds);
 
+       virtual bool OnKeyPressed(const Tizen::Ui::_Control& source, const Tizen::Ui::_KeyInfo& keyInfo);
+       virtual bool OnKeyReleased(const Tizen::Ui::_Control& source, const Tizen::Ui::_KeyInfo& keyInfo);
+       virtual void OnDrawFocus(void);
+
        virtual bool OnTouchPressed(const Tizen::Ui::_Control& source, const Tizen::Ui::_TouchInfo& touchInfo);
        virtual bool OnTouchReleased(const Tizen::Ui::_Control& source, const Tizen::Ui::_TouchInfo& touchInfo);
        virtual bool OnTouchMoved(const Tizen::Ui::_Control& source, const Tizen::Ui::_TouchInfo& touchInfo);
@@ -193,6 +200,8 @@ private:
 
        int __edgeType;
 
+       bool __focus;
+
        Tizen::Ui::_AccessibilityElement* __pTextElement;
 
        Tizen::Graphics::FloatPoint __previousTouchedPosition;
index 0f7e88e..49bd587 100755 (executable)
 #include "FWebCtrl_WebEvent.h"
 #include "FWebCtrl_WebEventArg.h"
 #include "FWebCtrl_WebImpl.h"
+#include "FWebCtrl_WebManager.h"
 #include "FWebCtrl_WebPresenter.h"
 #include "FWebCtrl_WebSettingImpl.h"
 
@@ -861,8 +862,8 @@ 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);
+//     _Web* pWebCore = dynamic_cast< _Web* >(&(pImpl->GetCore()));
+//     pWebCore->SetFocusEnd(true);
 }
 
 
@@ -872,8 +873,8 @@ 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);
+//     _Web* pWebCore = dynamic_cast< _Web* >(&(pImpl->GetCore()));
+//     pWebCore->SetFocusEnd(true);
 }
 
 
@@ -2093,7 +2094,8 @@ OnScriptExecuted(Evas_Object* pView, const char* pResult, void* pUserData)
        SysLog(NID_WEB_CTRL, "result : %ls", result.GetPointer());
 
        _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(evas_object_data_get(pView, WEB_CTRL));
-       if (pImpl && pImpl->IsPresenterAlived(pPresenter))
+       _WebManager* pWebManager = _WebManager::GetInstance();
+       if (pWebManager->IsValidCallback(reinterpret_cast< int >(pImpl), reinterpret_cast< int >(pPresenter)))
        {
                pPresenter->EndAsyncProcess(result);
        }
@@ -2255,6 +2257,9 @@ _WebImpl::_WebImpl(Web* pWeb, Tizen::Ui::_Control* pCore)
 
 _WebImpl::~_WebImpl()
 {
+       _WebManager* pWebManager = _WebManager::GetInstance();
+       pWebManager->RemoveWeb(reinterpret_cast< int >(this));
+
        _DownloadManagerImpl* pManagerImpl = _DownloadManagerImpl::GetInstance();
        pManagerImpl->SetDownloadListener(null);
 
@@ -2336,9 +2341,6 @@ _WebImpl::Construct(void)
        r = __textSearch.__searchQueue.Construct();
        SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
-       r = __callbackList.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));
 
@@ -2356,6 +2358,9 @@ _WebImpl::Construct(void)
        __pWebCore = dynamic_cast< _Web* >(&(GetCore()));
        SysTryReturnResult(NID_WEB_CTRL, __pWebCore, E_SYSTEM, "A system error has been occurred. Failed to get web control");
 
+       _WebManager* pWebManager = _WebManager::GetInstance();
+       pWebManager->AddWeb(reinterpret_cast< int >(this));
+
        return E_SUCCESS;
 }
 
@@ -2663,35 +2668,20 @@ _WebImpl::EvaluateJavascriptN(const String& scriptCode)
                return null;
        }
        
-       result r = E_SUCCESS;
-
        std::unique_ptr<char[]> pScript(_StringConverter::CopyToCharArrayN(scriptCode));
        SysTryReturn(NID_WEB_CTRL, pScript.get(), null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
 
-       std::unique_ptr<_WebPresenter> pPresenter(new (std::nothrow) _WebPresenter());
+       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));
 
-       r = __callbackList.Add(pPresenter.get());
-       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
-
        ewk_view_script_execute(pView, pScript.get(), OnScriptExecuted, pPresenter.get());
 
        std::unique_ptr<String> pResult(new (std::nothrow) String(L""));
        SysTryReturn(NID_WEB_CTRL, pResult.get(), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
-       pPresenter->WaitAsyncProcess(*pResult.get());
-       
-       r = __callbackList.Remove(*pPresenter.get());
-       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
-       pPresenter.release();
-       
-       return pResult.release();
-}
 
+       pPresenter->WaitAsyncProcess(*pResult.get());
 
-bool
-_WebImpl::IsPresenterAlived(_WebPresenter* pPresenter) const
-{
-       return __callbackList.Contains(*pPresenter);
+       return pResult.release();
 }
 
 
@@ -2811,14 +2801,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, pView, condition, text, searchForward, false, &presenter);
-       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+       r = SynchronizeSearch(SEARCH_SYNC, pView, condition, text, searchForward, false, pPresenter.get());
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));
 
        int result = 0;
-       presenter.WaitAsyncProcess(result);
+       pPresenter->WaitAsyncProcess(result);
 
        return static_cast < bool >(result);
 }
@@ -3313,13 +3303,13 @@ _WebImpl::IsCookieEnabled(void) const
        Ewk_Cookie_Manager* pCookieManager =  ewk_context_cookie_manager_get(pContext);
        SysAssertf(pCookieManager, "Failed to get webkit instance.");
 
-       _WebPresenter presenter;
-       presenter.InitAsyncProcess();
+       std::unique_ptr<_WebPresenter> pPresenter(new (std::nothrow) _WebPresenter(this));
+       SysTryReturn(NID_WEB_CTRL, pPresenter.get(), false, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
 
-       ewk_cookie_manager_async_accept_policy_get(pCookieManager, OnCookiesPolicyGot, &presenter);
+       ewk_cookie_manager_async_accept_policy_get(pCookieManager, OnCookiesPolicyGot, pPresenter.get());
 
        bool result = false;
-       presenter.WaitAsyncProcess(result);
+       pPresenter->WaitAsyncProcess(result);
 
        return result;
 }
diff --git a/src/controls/FWebCtrl_WebManager.cpp b/src/controls/FWebCtrl_WebManager.cpp
new file mode 100755 (executable)
index 0000000..364ede6
--- /dev/null
@@ -0,0 +1,155 @@
+//\r
+// Open Service Platform\r
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.\r
+//\r
+// Licensed under the Apache License, Version 2.0 (the License);\r
+// you may not use this file except in compliance with the License.\r
+// You may obtain a copy of the License at\r
+//\r
+//     http://www.apache.org/licenses/LICENSE-2.0\r
+//\r
+// Unless required by applicable law or agreed to in writing, software\r
+// distributed under the License is distributed on an "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+// See the License for the specific language governing permissions and\r
+// limitations under the License.\r
+//\r
+\r
+/**\r
+ * @file               FWebCtrl_WebManager.cpp\r
+ * @brief              The file contains the definition of _WebManager class.\r
+ *\r
+ * The file contains the definition of _WebManager class.\r
+ */\r
+\r
+#include <FBaseSysLog.h>\r
+#include "FWebCtrl_WebImpl.h"\r
+#include "FWebCtrl_WebManager.h"\r
+\r
+using namespace Tizen::Base;\r
+using namespace Tizen::Base::Collection;\r
+\r
+namespace Tizen { namespace Web { namespace Controls\r
+{\r
+\r
+_WebManager::_WebManager(void)\r
+       : __pWebList(null)\r
+       , __pCallbackList(null)\r
+{\r
+}\r
+\r
+_WebManager::~_WebManager(void)\r
+{\r
+}\r
+\r
+_WebManager*\r
+_WebManager::GetInstance(void)\r
+{\r
+       result r = E_SUCCESS;\r
+       static _WebManager* pWebMgr = null;\r
+\r
+       if (pWebMgr == null)\r
+       {\r
+               pWebMgr = new (std::nothrow) _WebManager();\r
+               SysTryReturn(NID_WEB_CTRL, pWebMgr != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] _WebManager allocation failed.");\r
+\r
+               r = pWebMgr->Construct();\r
+               SysTryCatch(NID_WEB_CTRL, !IsFailed(r), , r, "[%s] _WebManager construction failed.", GetErrorMessage(r));\r
+       }\r
+\r
+       return pWebMgr;\r
+\r
+CATCH:\r
+       delete pWebMgr;\r
+       pWebMgr = null;\r
+\r
+       return null;\r
+}\r
+\r
+result\r
+_WebManager::Construct(void)\r
+{\r
+       result r = E_SUCCESS;\r
+\r
+       std::unique_ptr<ArrayListT< int> > pWebList(new (std::nothrow) ArrayListT< int >());\r
+       SysTryReturnResult(NID_WEB_CTRL, pWebList.get(), E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");\r
+       r = pWebList->Construct();\r
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
+\r
+       std::unique_ptr<MultiHashMapT< int, int > > pCallbackList(new (std::nothrow) MultiHashMapT< int, int >());\r
+       SysTryReturnResult(NID_WEB_CTRL, pCallbackList.get(), E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");\r
+       r = pCallbackList->Construct();\r
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
+\r
+       __pWebList = std::move(pWebList);\r
+       __pCallbackList = std::move(pCallbackList);\r
+\r
+       return E_SUCCESS;\r
+}\r
+\r
+result\r
+_WebManager::AddWeb(int webAdress)\r
+{\r
+       result r = E_SUCCESS;\r
+\r
+       r = __pWebList->Add(webAdress);\r
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
+\r
+       return E_SUCCESS;\r
+}\r
+\r
+result\r
+_WebManager::RemoveWeb(int webAdress)\r
+{\r
+       result r = E_SUCCESS;\r
+\r
+       r = __pWebList->Remove(webAdress);\r
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
+\r
+       r = __pCallbackList->Remove(webAdress);\r
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
+\r
+       return E_SUCCESS;\r
+}\r
+\r
+bool\r
+_WebManager::IsValidWeb(int webAdress) const\r
+{\r
+       return __pWebList->Contains(webAdress);\r
+}\r
+\r
+\r
+result\r
+_WebManager::AddCallback(int callerAdress, int callbackAdress)\r
+{\r
+       result r = E_SUCCESS;\r
+\r
+       r = __pCallbackList->Add(callerAdress, callbackAdress);\r
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
+\r
+       return E_SUCCESS;\r
+}\r
+\r
+result\r
+_WebManager::RemoveCallback(int callerAdress, int callbackAdress)\r
+{\r
+       result r = E_SUCCESS;\r
+\r
+       r = __pCallbackList->Remove(callerAdress, callbackAdress);\r
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));\r
+\r
+       return E_SUCCESS;\r
+}\r
+\r
+bool\r
+_WebManager::IsValidCallback(int callerAdress, int callbackAdress) const\r
+{\r
+       bool ret = true;\r
+\r
+       result r = __pCallbackList->Contains(callerAdress, callbackAdress, ret);\r
+       SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, true, r, "[%s] Propagating.", GetErrorMessage(r));\r
+\r
+       return ret;\r
+}\r
+\r
+} } }\r
diff --git a/src/controls/FWebCtrl_WebManager.h b/src/controls/FWebCtrl_WebManager.h
new file mode 100755 (executable)
index 0000000..ed0adca
--- /dev/null
@@ -0,0 +1,64 @@
+//\r
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.\r
+//\r
+// Licensed under the Apache License, Version 2.0 (the License);\r
+// you may not use this file except in compliance with the License.\r
+// You may obtain a copy of the License at\r
+//\r
+//     http://www.apache.org/licenses/LICENSE-2.0\r
+//\r
+// Unless required by applicable law or agreed to in writing, software\r
+// distributed under the License is distributed on an "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+// See the License for the specific language governing permissions and\r
+// limitations under the License.\r
+//\r
+\r
+/**\r
+ * @file       FWebCtrl_WebManager.h\r
+ * @brief      This is the header file for the %_WebManager class.\r
+ *\r
+ * This header file contains the declarations of the %_WebManager class.\r
+ */\r
\r
+#ifndef _FWEB_CTRL_INTERNAL_WEB_MANAGER_H_\r
+#define _FWEB_CTRL_INTERNAL_WEB_MANAGER_H_\r
+\r
+#include <unique_ptr.h>\r
+#include <FBaseColArrayListT.h>\r
+#include <FBaseColMultiHashMapT.h>\r
+\r
+namespace Tizen { namespace Web { namespace Controls\r
+{\r
+class _WebImpl;\r
+\r
+class _WebManager\r
+       : public Tizen::Base::Object\r
+{\r
+public:\r
+       static _WebManager* GetInstance(void);\r
+       \r
+       result AddWeb(int webAdress);\r
+       result RemoveWeb(int webAdress);\r
+       bool IsValidWeb(int webAdress) const;\r
+\r
+       result AddCallback(int callerAdress, int callbackAdress);\r
+       result RemoveCallback(int callerAdress, int callbackAdress);\r
+       bool IsValidCallback(int callerAdress, int callbackAdress) const;\r
+\r
+private:\r
+       _WebManager(void);\r
+       _WebManager(const _WebManager& rhs);\r
+       virtual ~_WebManager(void);\r
+       result Construct(void);\r
+       _WebManager& operator=(const _WebManager& rhs);\r
+\r
+private:\r
+       std::unique_ptr<Tizen::Base::Collection::ArrayListT< int > > __pWebList;\r
+       std::unique_ptr<Tizen::Base::Collection::MultiHashMapT< int, int > > __pCallbackList;\r
+};\r
+\r
+} } }\r
+#endif\r
+\r
\ No newline at end of file
index 5511084..becae77 100755 (executable)
@@ -23,6 +23,7 @@
  */
 #include <FBaseSysLog.h>
 #include <FApp_AppImpl.h>
+#include "FWebCtrl_WebManager.h"
 #include "FWebCtrl_WebPresenter.h"
 
 
@@ -30,32 +31,26 @@ namespace Tizen { namespace Web { namespace Controls
 {
 
 
-_WebPresenter::_WebPresenter(void)
+_WebPresenter::_WebPresenter(const Object* callerAddress)
        : __stopState(false)
        , __boolean(false)
        , __string(L"")
        , __integer(0)
        , __pIList(null)
        , __longInteger(0)
+       , __callerAddress(reinterpret_cast< int >(callerAddress))
 {
-       //empty statement
+       _WebManager* pWebManager = _WebManager::GetInstance();
+       pWebManager->AddCallback(__callerAddress, reinterpret_cast< int >(this));
 }
 
 
 _WebPresenter::~_WebPresenter(void)
 {
-}
-
-
-void
-_WebPresenter::InitAsyncProcess(void)
-{
        __stopState = false;
-       __boolean = false;
-       __string = L"";
-       __integer = 0;
-        __pIList = null;
-        __longInteger = 0;
+
+       _WebManager* pWebManager = _WebManager::GetInstance();
+       pWebManager->RemoveCallback(__callerAddress, reinterpret_cast< int >(this));
 }
 
 
index a5dde55..74eadb6 100755 (executable)
@@ -35,14 +35,12 @@ class _WebPresenter
 {
 // Lifecycle
 public:
-       _WebPresenter(void);
+       _WebPresenter(const Tizen::Base::Object* callerAddress);
 
        virtual ~_WebPresenter(void);
 
 // Operations
 public:
-       void InitAsyncProcess(void);
-
        void WaitAsyncProcess(bool& result);
        void WaitAsyncProcess(Tizen::Base::String& result);
        void WaitAsyncProcess(int& result);
@@ -70,6 +68,8 @@ private:
        int __integer;
        Eina_List* __pIList;
        long __longInteger;
+
+       int __callerAddress;
 };
 
 }}} // Tizen::Web::Controls
index ed386a7..ea17405 100755 (executable)
@@ -81,32 +81,32 @@ _WebStorageManagerImpl::GetOriginListN(WebStorageType storageType)
 
        Ewk_Context* pDefaultContext = ewk_context_default_get();
 
-       _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));
 
        switch (storageType)
        {
        case WEB_STORAGE_TYPE_APPLICATION_CACHE:
-               ewk_context_application_cache_origins_get(pDefaultContext, OnOriginReceived, &presenter);
+               ewk_context_application_cache_origins_get(pDefaultContext, OnOriginReceived, pPresenter.get());
                break;
 
        case WEB_STORAGE_TYPE_WEB_SQL_DATABASE:
-               ewk_context_web_database_origins_get(pDefaultContext, OnOriginReceived, &presenter);
+               ewk_context_web_database_origins_get(pDefaultContext, OnOriginReceived, pPresenter.get());
                break;
 
        case WEB_STORAGE_TYPE_WEB_STORAGE:
-               ewk_context_web_storage_origins_get(pDefaultContext, OnOriginReceived, &presenter);
+               ewk_context_web_storage_origins_get(pDefaultContext, OnOriginReceived, pPresenter.get());
                break;
 
        case WEB_STORAGE_TYPE_FILE_SYSTEM:
-               ewk_context_local_file_system_origins_get(pDefaultContext, OnOriginReceived, &presenter);
+               ewk_context_local_file_system_origins_get(pDefaultContext, OnOriginReceived, pPresenter.get());
                break;
 
        default:
                break;
        }
 
-       Eina_List* pOriginEinaList = presenter.WaitAsyncProcess();
+       Eina_List* pOriginEinaList = pPresenter->WaitAsyncProcess();
        if (!pOriginEinaList)
        {
                return null;
@@ -172,14 +172,14 @@ _WebStorageManagerImpl::GetQuotaForOrigin(WebStorageType storageType, const Stri
        SysTryReturn(NID_WEB_CTRL, storageType == WEB_STORAGE_TYPE_WEB_SQL_DATABASE, -1, E_UNSUPPORTED_TYPE, "[%s] This storage type is not supported.", GetErrorMessage(E_UNSUPPORTED_TYPE));
 
        Ewk_Security_Origin* pOrigin = CompareOrigin(storageType, origin);
-       SysTryReturn(NID_WEB_CTRL, pOrigin, -1, E_INVALID_ARG, "[%s] This origin does not exist.", GetErrorMessage(E_INVALID_ARG));
+       SysTryReturn(NID_WEB_CTRL, pOrigin, -1.0, E_INVALID_ARG, "[%s] This origin does not exist.", GetErrorMessage(E_INVALID_ARG));
 
-       _WebPresenter presenter;
-       presenter.InitAsyncProcess();
+       std::unique_ptr<_WebPresenter> pPresenter(new (std::nothrow) _WebPresenter(this));
+       SysTryReturn(NID_WEB_CTRL, pPresenter.get(), -1.0, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
 
-       ewk_context_web_database_quota_for_origin_get(pDefaultContext, OnUIntReceived, &presenter, pOrigin);
+       ewk_context_web_database_quota_for_origin_get(pDefaultContext, OnUIntReceived, pPresenter.get(), pOrigin);
 
-       presenter.WaitAsyncProcess(quota);
+       pPresenter->WaitAsyncProcess(quota);
 
        return quota;
 }
@@ -196,28 +196,28 @@ _WebStorageManagerImpl::GetUsageForOrigin(WebStorageType storageType, const Stri
        Ewk_Security_Origin* pOrigin = CompareOrigin(storageType, origin);
        SysTryReturn(NID_WEB_CTRL, pOrigin, -1, E_INVALID_ARG, "[%s] This origin does not exist.", GetErrorMessage(E_INVALID_ARG));
 
-       _WebPresenter presenter;
-       presenter.InitAsyncProcess();
+       std::unique_ptr<_WebPresenter> pPresenter(new (std::nothrow) _WebPresenter(this));
+       SysTryReturn(NID_WEB_CTRL, pPresenter.get(), -1.0, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
 
        switch (storageType)
        {
        case WEB_STORAGE_TYPE_APPLICATION_CACHE:
-//             ewk_context_application_cache_usage_for_origin_get(pDefaultContext, pOrigin, OnIntReceived, &presenter);
+//             ewk_context_application_cache_usage_for_origin_get(pDefaultContext, pOrigin, OnIntReceived, pPresenter.get());
                break;
 
        case WEB_STORAGE_TYPE_WEB_SQL_DATABASE:
-               ewk_context_web_database_usage_for_origin_get(pDefaultContext, OnUIntReceived, &presenter, pOrigin);
+               ewk_context_web_database_usage_for_origin_get(pDefaultContext, OnUIntReceived, pPresenter.get(), pOrigin);
                break;
 
        case WEB_STORAGE_TYPE_WEB_STORAGE :
-               ewk_context_web_storage_usage_for_origin_get(pDefaultContext, pOrigin, OnUIntReceived, &presenter);
+               ewk_context_web_storage_usage_for_origin_get(pDefaultContext, pOrigin, OnUIntReceived, pPresenter.get());
                break;
 
        default:
                break;
        }
 
-       presenter.WaitAsyncProcess(usage);
+       pPresenter->WaitAsyncProcess(usage);
 
        return usage;
 }
@@ -298,33 +298,33 @@ Ewk_Security_Origin*
 _WebStorageManagerImpl::CompareOrigin(WebStorageType storageType, const String& origin)
 {
        Ewk_Context* pDefaultContext = ewk_context_default_get();
-       _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));
 
        switch (storageType)
        {
        case WEB_STORAGE_TYPE_APPLICATION_CACHE:
-               ewk_context_application_cache_origins_get(pDefaultContext, OnOriginReceived, &presenter);
+               ewk_context_application_cache_origins_get(pDefaultContext, OnOriginReceived, pPresenter.get());
                break;
 
        case WEB_STORAGE_TYPE_WEB_SQL_DATABASE:
-               ewk_context_web_database_origins_get(pDefaultContext, OnOriginReceived, &presenter);
+               ewk_context_web_database_origins_get(pDefaultContext, OnOriginReceived, pPresenter.get());
                break;
 
        case WEB_STORAGE_TYPE_WEB_STORAGE:
-               ewk_context_web_storage_origins_get(pDefaultContext, OnOriginReceived, &presenter);
+               ewk_context_web_storage_origins_get(pDefaultContext, OnOriginReceived, pPresenter.get());
                break;
 
        case WEB_STORAGE_TYPE_FILE_SYSTEM:
-               ewk_context_local_file_system_origins_get(pDefaultContext, OnOriginReceived, &presenter);
+               ewk_context_local_file_system_origins_get(pDefaultContext, OnOriginReceived, pPresenter.get());
                break;
 
        default:
                break;
        }
 
-       Eina_List* pOriginList = presenter.WaitAsyncProcess();
+       Eina_List* pOriginList = pPresenter->WaitAsyncProcess();
        if (!pOriginList)
        {
                return null;
index 930ed7e..316bda2 100755 (executable)
@@ -347,7 +347,6 @@ public:
 
        void SetKeypadOpened(bool isKeypadOpened);
 
-       bool IsPresenterAlived(_WebPresenter* pPresenter) const;
        Tizen::Graphics::Rectangle GetPreviousKeypadBounds(void) const;
 
        void SetPreviousKeypadBounds(Tizen::Graphics::Rectangle& bounds);
@@ -506,8 +505,6 @@ private:
 
        _TextSearch __textSearch;
 
-       Tizen::Base::Collection::ArrayList __callbackList;
-
        Tizen::Base::Collection::ArrayList __webNotificationList;
 
        DecisionPolicy __policy;