Destroy web engine completely when app is terminated. 47/277647/2
authorhuayong.xu <huayong.xu@samsung.com>
Mon, 11 Jul 2022 09:54:47 +0000 (17:54 +0800)
committerhuayong.xu <huayong.xu@samsung.com>
Wed, 20 Jul 2022 11:13:04 +0000 (19:13 +0800)
Change-Id: I1863705d0ca43cc7b8623450eaf0d6c9d0fb4b0d

dali-extension/web-engine-chromium/tizen-web-engine-chromium.cpp

index 767fe394f331f531ff9a376109dbcc2f7f610e8d..daf13dba877f3618af76e4046e1422fb28bb564b 100755 (executable)
 #include <Elementary.h>
 #include <Evas.h>
 
+#include <dali/devel-api/adaptor-framework/lifecycle-controller.h>
 #include <dali/devel-api/common/stage.h>
 #include <dali/integration-api/adaptor-framework/adaptor.h>
 #include <dali/integration-api/debug.h>
 #include <dali/public-api/images/pixel-data.h>
+#include <dali/public-api/signals/slot-delegate.h>
 
 #include <ewk_main_internal.h>
 #include <ewk_settings_product.h>
@@ -176,7 +178,7 @@ public:
   }
 
 private:
-  WebEngineManager()
+  WebEngineManager() : mSlotDelegate(this)
   {
     elm_init(0, 0);
     ewk_init();
@@ -187,8 +189,23 @@ private:
 
     Ewk_Cookie_Manager* manager = ewk_context_cookie_manager_get(context);
     mWebEngineCookieManager.reset(new TizenWebEngineCookieManager(manager));
+    LifecycleController::Get().TerminateSignal().Connect(mSlotDelegate, &WebEngineManager::OnTerminated);
   }
 
+  void OnTerminated()
+  {
+    for (auto it = mContainerClients.begin(); it != mContainerClients.end(); it++)
+    {
+      evas_object_del(it->mWebView);
+    }
+    mContainerClients.clear();
+    ecore_evas_free(mWindow);
+    ewk_shutdown();
+    elm_shutdown();
+    DALI_LOG_RELEASE_INFO("#WebEngineManager is destroyed fully.\n");
+  }
+
+  SlotDelegate<WebEngineManager>          mSlotDelegate;
   std::unique_ptr<WebEngineContext>       mWebEngineContext;
   std::unique_ptr<WebEngineCookieManager> mWebEngineCookieManager;
   Ecore_Evas*                             mWindow;