Support mutiple javascript message handlers 96/303696/2
authorJiyun Yang <ji.yang@samsung.com>
Wed, 3 Jan 2024 11:08:31 +0000 (20:08 +0900)
committerJiyun Yang <ji.yang@samsung.com>
Wed, 3 Jan 2024 11:21:33 +0000 (20:21 +0900)
Change-Id: If0a72eca07f738abd735a013036f2b44d4d9e12b
Signed-off-by: Jiyun Yang <ji.yang@samsung.com>
dali-extension/web-engine-chromium/tizen-web-engine-chromium.cpp
dali-extension/web-engine-chromium/tizen-web-engine-chromium.h

index 60c35a1..f6c821a 100644 (file)
@@ -190,6 +190,8 @@ void TizenWebEngineChromium::InitWebView()
 
 void TizenWebEngineChromium::Destroy()
 {
+  mJavaScriptInjectedCallbacks.clear();
+
   if(WebEngineManager::IsAvailable())
   {
     WebEngineManager::Get().Remove(mWebView);
@@ -369,7 +371,8 @@ void TizenWebEngineChromium::EvaluateJavaScript(const std::string& script, JavaS
 
 void TizenWebEngineChromium::AddJavaScriptMessageHandler(const std::string& exposedObjectName, JavaScriptMessageHandlerCallback handler)
 {
-  mJavaScriptInjectedCallback = handler;
+  mJavaScriptInjectedCallbacks.erase(exposedObjectName);
+  mJavaScriptInjectedCallbacks.insert(std::pair<std::string, JavaScriptMessageHandlerCallback>(exposedObjectName, handler));
   ewk_view_javascript_message_handler_add(mWebView, &TizenWebEngineChromium::OnJavaScriptInjected, exposedObjectName.c_str());
 }
 
@@ -1148,7 +1151,14 @@ void TizenWebEngineChromium::OnJavaScriptInjected(Evas_Object* o, Ewk_Script_Mes
     {
       resultText = static_cast<char*>(message.body);
     }
-    ExecuteCallback(pThis->mJavaScriptInjectedCallback, resultText);
+
+    std::string key = static_cast<const char*>(message.name);
+    auto targetCallback = pThis->mJavaScriptInjectedCallbacks.find(key);
+
+    if (targetCallback != pThis->mJavaScriptInjectedCallbacks.end())
+    {
+      ExecuteCallback(targetCallback->second, resultText);
+    }
   }
 }
 
index 1455f17..b2afb00 100644 (file)
@@ -593,6 +593,7 @@ private:
   uint32_t                                  mHeight;
   std::unique_ptr<WebEngineBackForwardList> mWebEngineBackForwardList;
   std::unique_ptr<WebEngineSettings>        mWebEngineSettings;
+  std::unordered_map<std::string, JavaScriptMessageHandlerCallback> mJavaScriptInjectedCallbacks;
 
   // callback.
   WebEnginePageLoadCallback                mLoadStartedCallback;
@@ -621,7 +622,6 @@ private:
   GeolocationPermissionCallback            mGeolocationPermissionCallback;
   PlainTextReceivedCallback                mPlainTextReceivedCallback;
   JavaScriptMessageHandlerCallback         mJavaScriptEvaluatedCallback;
-  JavaScriptMessageHandlerCallback         mJavaScriptInjectedCallback;
 };
 } // namespace Plugin
 } // namespace Dali