[Web] Fix "undefined symbol: elm_init" error 15/284315/3
authorEunki, Hong <eunkiki.hong@samsung.com>
Tue, 15 Nov 2022 11:28:45 +0000 (20:28 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Tue, 15 Nov 2022 12:39:05 +0000 (21:39 +0900)
Since elm_init symbol not founded before ewk_context_default_get() API called,
Let we use WebEngineManager::IsAvailable() API don't call
WebEngineManager::Get() API.

Change-Id: I3bd2819f03b90fc31418e21bff3857606300dfcb
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
dali-extension/web-engine-chromium/tizen-web-engine-manager.cpp
dali-extension/web-engine-chromium/tizen-web-engine-manager.h

index 17f8303..fc7e264 100644 (file)
@@ -33,6 +33,12 @@ namespace Dali
 {
 namespace Plugin
 {
+namespace
+{
+// @todo : If we make this value as member of WebEngineManager, we got crashed due to 'elm_init' symbol found failed.
+static bool gWebEngineManagerAvailable = true; // Default as true
+} // namespace
+
 WebEngineManager& WebEngineManager::Get()
 {
   static WebEngineManager instance;
@@ -41,13 +47,14 @@ WebEngineManager& WebEngineManager::Get()
 
 bool WebEngineManager::IsAvailable()
 {
-  return Get().mWebEngineManagerAvailable;
+  return gWebEngineManagerAvailable;
 }
 
 WebEngineManager::WebEngineManager()
-: mSlotDelegate(this),
-  mWebEngineManagerAvailable(true)
+: mSlotDelegate(this)
 {
+  DALI_LOG_RELEASE_INFO("#WebEngineManager is created.\n");
+
   elm_init(0, 0);
   ewk_init();
   mWindow = ecore_evas_new("wayland_egl", 0, 0, 1, 1, 0);
@@ -58,11 +65,13 @@ WebEngineManager::WebEngineManager()
   Ewk_Cookie_Manager* manager = ewk_context_cookie_manager_get(context);
   mWebEngineCookieManager.reset(new TizenWebEngineCookieManager(manager));
   Dali::LifecycleController::Get().TerminateSignal().Connect(mSlotDelegate, &WebEngineManager::OnTerminated);
+
+  DALI_LOG_RELEASE_INFO("#WebEngineManager is created fully.\n");
 }
 
 WebEngineManager::~WebEngineManager()
 {
-  if(mWebEngineManagerAvailable)
+  if(gWebEngineManagerAvailable)
   {
     // Call OnTerminated directly.
     OnTerminated();
@@ -114,13 +123,14 @@ Dali::WebEnginePlugin* WebEngineManager::Find(Evas_Object* webView)
 void WebEngineManager::OnTerminated()
 {
   // Ignore duplicated termination
-  if(DALI_UNLIKELY(!mWebEngineManagerAvailable))
+  if(DALI_UNLIKELY(!gWebEngineManagerAvailable))
   {
     return;
   }
+  DALI_LOG_RELEASE_INFO("#WebEngineManager is destroyed.\n");
 
   // App is terminated. Now web engine is not available anymore.
-  mWebEngineManagerAvailable = false;
+  gWebEngineManagerAvailable = false;
 
   for(auto it = mWebEngines.begin(); it != mWebEngines.end(); it++)
   {
index b6a9362..e19ca7f 100644 (file)
@@ -70,7 +70,6 @@ private:
   std::unique_ptr<WebEngineCookieManager>        mWebEngineCookieManager;
   Ecore_Evas*                                    mWindow;
   std::map<Evas_Object*, Dali::WebEnginePlugin*> mWebEngines;
-  bool                                           mWebEngineManagerAvailable;
 };
 
 } // namespace Plugin