Fix efl error regarding deleting evas of dynamic box
authorYunchan Cho <yunchan.cho@samsung.com>
Tue, 11 Jun 2013 09:55:08 +0000 (18:55 +0900)
committerYunchan Cho <yunchan.cho@samsung.com>
Fri, 14 Jun 2013 08:29:29 +0000 (17:29 +0900)
[Issue#] N/A
[Problem] web-provider is crashed during removing dynamic box
[Cause] invalid window object tried to be hided on removing dynamic box
[Solution] valid window object is only hided by web-provider

Change-Id: Ib6b99552de28f5bb48f077aa8ed94d4c742cb559

src/Core/Buffer/RenderBuffer.cpp
src/Plugin/AppBoxPlugin/AppBoxRenderView.cpp

index 6013fac..3088541 100644 (file)
@@ -31,10 +31,12 @@ RenderBuffer::RenderBuffer()
     : m_bufferAddr(NULL)
     , m_bufferInfo(NULL)
 {
+    LogD("enter");
 }
 
 RenderBuffer::~RenderBuffer()
 {
+    LogD("enter");
 }
 
 bool RenderBuffer::allocate()
index cced9c5..e7b90c9 100644 (file)
@@ -69,7 +69,6 @@ AppBoxRenderView::AppBoxRenderView(
         throw; //exception throw!
     }
 
-    evas_object_show(m_boxWin);
     m_renderBuffer = AppBoxObserver::Instance()->getRenderBuffer(m_instanceId);
     m_pdFastOpen = web_provider_livebox_get_pd_fast_open(m_boxId.c_str()) ? true : false;
     AppBoxObserver::Instance()->registerRenderView(m_instanceId, this);
@@ -78,9 +77,6 @@ AppBoxRenderView::AppBoxRenderView(
 AppBoxRenderView::~AppBoxRenderView()
 {
     LogD("enter");
-    if (m_boxWin) {
-        evas_object_hide(m_boxWin);
-    }
     AppBoxObserver::Instance()->unregisterRenderView(m_instanceId);
 }
 
@@ -88,6 +84,10 @@ void AppBoxRenderView::showBox(RenderInfoPtr renderInfo)
 {
     LogD("enter");
 
+    if (!m_boxWin) {
+        return;
+    }
+
     // stop updating render buffer
     m_renderBuffer->stopCanvasUpdate();
     clearSnapShot();
@@ -121,6 +121,8 @@ void AppBoxRenderView::showBox(RenderInfoPtr renderInfo)
             renderInfo->width,
             renderInfo->height);
 
+
+    evas_object_show(m_boxWin);
     m_boxWrt->Show();
     m_renderInfo = renderInfo;
 }
@@ -187,6 +189,7 @@ void AppBoxRenderView::destroyBoxWrtCore()
     deleteRenderTimer();
     destroyWrtCore(m_boxWrt);
     m_boxWrt.reset();
+
     // temp
     m_boxWrt_isSuspended = false;
 }
@@ -212,6 +215,10 @@ void AppBoxRenderView::hideBox()
 {
     LogD("enter");
     destroyBoxWrtCore();
+    if (m_boxWin) {
+        evas_object_hide(m_boxWin);
+        m_boxWin = NULL;
+    }
 }
 
 void AppBoxRenderView::pauseBox()
@@ -228,6 +235,10 @@ void AppBoxRenderView::showPd(Evas_Object* pdWin, RenderInfoPtr renderInfo)
 {
     LogD("enter");
 
+    if (!pdWin) {
+        return;
+    }
+
     // create pd helper
     std::string pdStartUrl = getStartUrl(URL_TYPE_PD, renderInfo->defaultUrlParams);
     if (m_pdFastOpen) {