From 797cdbda422a019512dab213e9c414d5cdc867d5 Mon Sep 17 00:00:00 2001 From: hyun lee Date: Thu, 24 Oct 2013 23:08:44 +0900 Subject: [PATCH] Fix for memoryleak Change-Id: Idd66c0a51f3286be9cfc0b43e3b8ed4bfd82330f Signed-off-by: hyun lee --- src/controls/FWebCtrl_Web.cpp | 30 ++++++++++++++++++------------ src/controls/FWebCtrl_Web.h | 6 ++++++ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/controls/FWebCtrl_Web.cpp b/src/controls/FWebCtrl_Web.cpp index 8c268c8..90edf4b 100755 --- a/src/controls/FWebCtrl_Web.cpp +++ b/src/controls/FWebCtrl_Web.cpp @@ -62,7 +62,7 @@ using namespace Tizen::Ui; using namespace Tizen::Ui::Animations; -namespace +namespace Tizen { namespace Web { namespace Controls { @@ -280,13 +280,6 @@ _WebAccessibilityFocusHandler::OnMoveFocus(const Tizen::Graphics::Point& point) } -} - - -namespace Tizen { namespace Web { namespace Controls -{ - - void OnEdgeLeft(void* pUserData, Evas_Object* pView, void* pEventInfo) { @@ -340,6 +333,8 @@ _Web::_Web(void) , __pPanningGestureHandler(null) , __pFlickGestureHandler(null) , __pPinchGestureHandler(null) + , __pWebAccessibilityListener(null) + , __pWebAccessibilityFocusHandler(null) , __gestureType(WEB_GESTURE_TYPE_TAP) , __edgeType(WEB_EDGE_NONE) , __focus(false) @@ -356,6 +351,13 @@ _Web::_Web(void) _Web::~_Web(void) { RemoveGestureListener(); + + _AccessibilityContainer* pContainer = GetAccessibilityContainer(); + if (pContainer) + { + pContainer->RemoveListener(*dynamic_cast<_IAccessibilityListener*>(__pWebAccessibilityListener.get())); + pContainer->SetFocusHandler(null); + } } @@ -545,15 +547,19 @@ _Web::InitializeWebNativeNode(void) pContainer->AddElement(*__pTextElement); pContainer->Activate(true); - _WebAccessibilityListener* pListener = new (std::nothrow) _WebAccessibilityListener(GetWebNativeNode()); + std::unique_ptr<_WebAccessibilityListener> pListener(new (std::nothrow) _WebAccessibilityListener(GetWebNativeNode())); SysTryReturn(NID_WEB_CTRL, pListener, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY)); - pContainer->AddListener(*dynamic_cast<_IAccessibilityListener*>(pListener)); + __pWebAccessibilityListener = std::move(pListener); + + pContainer->AddListener(*dynamic_cast<_IAccessibilityListener*>(__pWebAccessibilityListener.get())); - _WebAccessibilityFocusHandler* pFocusHandler = new (std::nothrow) _WebAccessibilityFocusHandler(GetWebNativeNode()); + std::unique_ptr<_WebAccessibilityFocusHandler> pFocusHandler(new (std::nothrow) _WebAccessibilityFocusHandler(GetWebNativeNode())); SysTryReturn(NID_WEB_CTRL, pFocusHandler, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY)); - pContainer->SetFocusHandler(dynamic_cast<_IAccessibilityFocusHandler*>(pFocusHandler)); + __pWebAccessibilityFocusHandler = std::move(pFocusHandler); + + pContainer->SetFocusHandler(dynamic_cast<_IAccessibilityFocusHandler*>(__pWebAccessibilityFocusHandler.get())); return E_SUCCESS; } diff --git a/src/controls/FWebCtrl_Web.h b/src/controls/FWebCtrl_Web.h index be00cbc..8d525b9 100755 --- a/src/controls/FWebCtrl_Web.h +++ b/src/controls/FWebCtrl_Web.h @@ -61,6 +61,8 @@ class _TapGestureState; class _PanningGestureState; class _FlickGestureState; class _PinchGestureState; +class _WebAccessibilityListener; +class _WebAccessibilityFocusHandler; class WebSetting; enum _WebGestureType @@ -204,6 +206,10 @@ private: std::unique_ptr<_PinchGestureState> __pPinchGestureHandler; + std::unique_ptr<_WebAccessibilityListener> __pWebAccessibilityListener; + + std::unique_ptr<_WebAccessibilityFocusHandler> __pWebAccessibilityFocusHandler; + _WebGestureType __gestureType; int __edgeType; -- 2.7.4