Implement navigation decision policy. 60/281060/4 accepted/tizen/6.0/unified/20220915.050742 submit/tizen_6.0/20220915.012244
authorhuayong.xu <huayong.xu@samsung.com>
Thu, 8 Sep 2022 06:08:27 +0000 (14:08 +0800)
committerhuayong.xu <huayong.xu@samsung.com>
Fri, 9 Sep 2022 01:11:16 +0000 (09:11 +0800)
Change-Id: I17deb7f86c1752a9f4de4201d51b975c703cd1db

dali-extension/web-engine-chromium/file.list
dali-extension/web-engine-chromium/tizen-web-engine-chromium.cpp
dali-extension/web-engine-chromium/tizen-web-engine-chromium.h
dali-extension/web-engine-chromium/tizen-web-engine-frame.cpp [new file with mode: 0755]
dali-extension/web-engine-chromium/tizen-web-engine-frame.h [new file with mode: 0755]
dali-extension/web-engine-chromium/tizen-web-engine-policy-decision.cpp [new file with mode: 0755]
dali-extension/web-engine-chromium/tizen-web-engine-policy-decision.h [new file with mode: 0755]
dali-extension/web-engine-lwe/tizen-web-engine-lwe.cpp
dali-extension/web-engine-lwe/tizen-web-engine-lwe.h

index e74afb0..5157dfd 100755 (executable)
@@ -4,4 +4,6 @@ web_engine_chromium_plugin_src_files = \
    $(extension_src_dir)/web-engine-chromium/tizen-web-engine-chromium.cpp \
    $(extension_src_dir)/web-engine-chromium/tizen-web-engine-context.cpp \
    $(extension_src_dir)/web-engine-chromium/tizen-web-engine-cookie-manager.cpp \
+   $(extension_src_dir)/web-engine-chromium/tizen-web-engine-frame.cpp \
+   $(extension_src_dir)/web-engine-chromium/tizen-web-engine-policy-decision.cpp \
    $(extension_src_dir)/web-engine-chromium/tizen-web-engine-settings.cpp
index fd0dec4..6114152 100755 (executable)
@@ -20,6 +20,7 @@
 #include "tizen-web-engine-back-forward-list.h"
 #include "tizen-web-engine-context.h"
 #include "tizen-web-engine-cookie-manager.h"
+#include "tizen-web-engine-policy-decision.h"
 #include "tizen-web-engine-settings.h"
 
 #include <Ecore.h>
@@ -45,10 +46,52 @@ namespace Plugin
 
 namespace
 {
+
 // const
 const std::string EMPTY_STRING;
+
+template <typename Callback, typename... Args>
+void ExecuteCallback(Callback callback, Args... args)
+{
+  if (callback)
+  {
+    callback(args...);
+  }
 }
 
+template <typename Callback, typename Arg>
+void ExecuteCallback(Callback callback, std::unique_ptr<Arg> arg)
+{
+  if (callback)
+  {
+    callback(std::move(arg));
+  }
+}
+
+template <typename Ret, typename Callback, typename... Args>
+Ret ExecuteCallbackReturn(Callback callback, Args... args)
+{
+  Ret returnVal = Ret();
+  if (callback)
+  {
+    returnVal = callback(args...);
+  }
+  return returnVal;
+}
+
+template <typename Ret, typename Callback, typename Arg>
+Ret ExecuteCallbackReturn(Callback callback, std::unique_ptr<Arg> arg)
+{
+  Ret returnVal = Ret();
+  if (callback)
+  {
+    returnVal = callback(std::move(arg));
+  }
+  return returnVal;
+}
+
+} // anonymous namespace.
+
 class WebViewContainerClientPair {
 public:
   WebViewContainerClientPair( WebViewContainerClient* client, Evas_Object* webView )
@@ -61,10 +104,10 @@ public:
   Evas_Object* mWebView;
 };
 
+//
+// A class for managing multiple WebViews
+//
 class WebEngineManager {
-  //
-  // A class for managing multiple WebViews
-  //
 public:
   static WebEngineManager& Get()
   {
@@ -108,7 +151,7 @@ public:
         return webViewClient.mClient;
       }
     }
-    return 0;
+    return nullptr;
   }
 
 private:
@@ -220,6 +263,9 @@ public:
     evas_object_smart_callback_add( mWebView, "edge,bottom",
                                     &WebViewContainerForDali::OnEdgeBottom,
                                     &mClient );
+    evas_object_smart_callback_add(mWebView, "policy,navigation,decide",
+                                   &WebViewContainerForDali::OnNavigationPolicyDecided,
+                                   &mClient);
 
     evas_object_resize( mWebView, mWidth, mHeight );
     evas_object_show( mWebView );
@@ -563,6 +609,14 @@ private:
     client->ScrollEdgeReached( Dali::WebEnginePlugin::ScrollEdge::BOTTOM );
   }
 
+  static void OnNavigationPolicyDecided(void* data, Evas_Object*, void* policy)
+  {
+    auto client = static_cast<WebViewContainerClient*>(data);
+    Ewk_Policy_Decision* policyDecision = static_cast<Ewk_Policy_Decision*>(policy);
+    std::unique_ptr<Dali::WebEnginePolicyDecision> webPolicyDecision(new TizenWebEnginePolicyDecision(policyDecision));
+    client->NavigationPolicyDecided(std::move(webPolicyDecision));
+  }
+
   static void OnEvaluateJavaScript( Evas_Object* o, const char* result, void* data )
   {
     auto client = WebEngineManager::Get().FindContainerClient( o );
@@ -828,7 +882,7 @@ void TizenWebEngineChromium::GoBack()
   }
 }
 
-void TizenWebEngineChromium::EvaluateJavaScript( const std::string& script, std::function< void( const std::string& ) > resultHandler )
+void TizenWebEngineChromium::EvaluateJavaScript( const std::string& script, JavaScriptMessageHandlerCallback resultHandler )
 {
   if( mWebViewContainer )
   {
@@ -851,7 +905,7 @@ void TizenWebEngineChromium::EvaluateJavaScript( const std::string& script, std:
   }
 }
 
-void TizenWebEngineChromium::AddJavaScriptMessageHandler( const std::string& exposedObjectName, std::function< void( const std::string& ) > handler )
+void TizenWebEngineChromium::AddJavaScriptMessageHandler( const std::string& exposedObjectName, JavaScriptMessageHandlerCallback handler )
 {
   if( mWebViewContainer )
   {
@@ -1001,24 +1055,29 @@ void TizenWebEngineChromium::EnableVideoHole( bool enabled )
   }
 }
 
-Dali::WebEnginePlugin::WebEnginePageLoadSignalType& TizenWebEngineChromium::PageLoadStartedSignal()
+void TizenWebEngineChromium::RegisterPageLoadStartedCallback(WebEnginePageLoadCallback callback)
 {
-  return mLoadStartedSignal;
+  mLoadStartedCallback = callback;
 }
 
-Dali::WebEnginePlugin::WebEnginePageLoadSignalType& TizenWebEngineChromium::PageLoadFinishedSignal()
+void TizenWebEngineChromium::RegisterPageLoadFinishedCallback(WebEnginePageLoadCallback callback)
 {
-  return mLoadFinishedSignal;
+  mLoadFinishedCallback = callback;
 }
 
-Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType& TizenWebEngineChromium::PageLoadErrorSignal()
+void TizenWebEngineChromium::RegisterPageLoadErrorCallback(WebEnginePageLoadErrorCallback callback)
 {
-  return mLoadErrorSignal;
+  mLoadErrorCallback = callback;
 }
 
-Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType& TizenWebEngineChromium::ScrollEdgeReachedSignal()
+void TizenWebEngineChromium::RegisterScrollEdgeReachedCallback(WebEngineScrollEdgeReachedCallback callback)
 {
-  return mScrollEdgeReachedSignal;
+  mScrollEdgeReachedCallback = callback;
+}
+
+void TizenWebEngineChromium::RegisterNavigationPolicyDecidedCallback(WebEngineNavigationPolicyDecidedCallback callback)
+{
+  mNavigationPolicyDecidedCallback = callback;
 }
 
 void TizenWebEngineChromium::GetPlainTextAsynchronously(PlainTextReceivedCallback callback)
@@ -1046,25 +1105,31 @@ void TizenWebEngineChromium::UpdateImage( tbm_surface_h buffer )
 void TizenWebEngineChromium::LoadStarted()
 {
   DALI_LOG_RELEASE_INFO( "#LoadStarted : %s\n", GetUrl().c_str() );
-  mLoadStartedSignal.Emit( GetUrl() );
+  ExecuteCallback(mLoadStartedCallback, GetUrl());
 }
 
 void TizenWebEngineChromium::LoadFinished()
 {
   DALI_LOG_RELEASE_INFO( "#LoadFinished : %s\n", GetUrl().c_str() );
-  mLoadFinishedSignal.Emit( GetUrl() );
+  ExecuteCallback(mLoadFinishedCallback, GetUrl());
 }
 
 void TizenWebEngineChromium::LoadError( const char* url, int errorCode )
 {
   std::string stdUrl( url );
-  mLoadErrorSignal.Emit( stdUrl, errorCode );
+  ExecuteCallback(mLoadErrorCallback, stdUrl, errorCode);
 }
 
 void TizenWebEngineChromium::ScrollEdgeReached( Dali::WebEnginePlugin::ScrollEdge edge )
 {
   DALI_LOG_RELEASE_INFO( "#ScrollEdgeReached : %d\n", edge );
-  mScrollEdgeReachedSignal.Emit( edge );
+  ExecuteCallback(mScrollEdgeReachedCallback, edge);
+}
+
+void TizenWebEngineChromium::NavigationPolicyDecided(std::unique_ptr<Dali::WebEnginePolicyDecision> decision)
+{
+  DALI_LOG_RELEASE_INFO("#NavigationPolicyDecided.\n");
+  ExecuteCallback(mNavigationPolicyDecidedCallback, std::move(decision));
 }
 
 void TizenWebEngineChromium::RunJavaScriptEvaluationResultHandler( size_t key, const char* result )
@@ -1097,10 +1162,7 @@ void TizenWebEngineChromium::RunJavaScriptMessageHandler( const std::string& obj
 
 void TizenWebEngineChromium::PlainTextRecieved(const std::string& plainText)
 {
-  if (mPlainTextReceivedCallback)
-  {
-    mPlainTextReceivedCallback(plainText);
-  }
+  ExecuteCallback(mPlainTextReceivedCallback, plainText);
 }
 
 } // namespace Plugin
index 13af3c3..d89b2b2 100755 (executable)
@@ -24,6 +24,7 @@
 #include <dali/devel-api/adaptor-framework/web-engine-plugin.h>
 #include <dali/public-api/images/native-image-interface.h>
 
+#include <memory>
 #include <tbm_surface.h>
 #include <unordered_map>
 
@@ -75,6 +76,13 @@ public:
   virtual void ScrollEdgeReached( Dali::WebEnginePlugin::ScrollEdge edge ) = 0;
 
   /**
+   * @brief Callback function to be called by WebViewContainer when navigation
+   * policy would be decided.
+   * @param [in] decision Policy need be decided.
+   */
+  virtual void NavigationPolicyDecided(std::unique_ptr<Dali::WebEnginePolicyDecision> decision) = 0;
+
+  /**
    * @brief Callback function to be called by WebViewContainer when it gets JavaScript evalution result.
    * @param [in] key An unsigned integer representing the result handler
    * @param [in] result Result string from JavaScript runtime
@@ -105,8 +113,6 @@ class TizenWebEngineChromium : public Dali::WebEnginePlugin, public WebViewConta
 
 public:
 
-  typedef std::function< void(const std::string&) > JavaScriptCallback;
-
   /**
    * @brief Constructor.
    */
@@ -253,12 +259,12 @@ public:
   /**
    * @copydoc Dali::WebEnginePlugin::EvaluateJavaScript()
    */
-  void EvaluateJavaScript( const std::string& script, std::function< void( const std::string& ) > resultHandler ) override;
+  void EvaluateJavaScript( const std::string& script, JavaScriptMessageHandlerCallback resultHandler ) override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::AddJavaScriptMessageHandler()
    */
-  void AddJavaScriptMessageHandler( const std::string& exposedObjectName, std::function< void( const std::string& ) > handler ) override;
+  void AddJavaScriptMessageHandler( const std::string& exposedObjectName, JavaScriptMessageHandlerCallback handler ) override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::ClearAllTilesResources()
@@ -315,24 +321,29 @@ public:
   void EnableVideoHole( bool enabled ) override;
 
   /**
-   * @copydoc Dali::WebEnginePlugin::PageLoadStartedSignal()
+   * @copydoc Dali::WebEnginePlugin::RegisterPageLoadStartedCallback()
    */
-  Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadStartedSignal() override;
+  void RegisterPageLoadStartedCallback(WebEnginePageLoadCallback callback) override;
 
   /**
-   * @copydoc Dali::WebEnginePlugin::PageLoadFinishedSignal()
+   * @copydoc Dali::WebEnginePlugin::RegisterPageLoadFinishedCallback()
    */
-  Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadFinishedSignal() override;
+  void RegisterPageLoadFinishedCallback(WebEnginePageLoadCallback callback) override;
 
   /**
-   * @copydoc Dali::WebEnginePlugin::PageLoadErrorSignal()
+   * @copydoc Dali::WebEnginePlugin::RegisterPageLoadErrorCallback()
    */
-  Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType& PageLoadErrorSignal() override;
+  void RegisterPageLoadErrorCallback(WebEnginePageLoadErrorCallback callback) override;
 
   /**
-   * @copydoc Dali::WebEnginePlugin::ScrollEdgeReachedSignal()
+   * @copydoc Dali::WebEnginePlugin::RegisterScrollEdgeReachedCallback()
    */
-  Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType& ScrollEdgeReachedSignal() override;
+  void RegisterScrollEdgeReachedCallback(WebEngineScrollEdgeReachedCallback callback) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::RegisterNavigationPolicyDecidedCallback()
+   */
+  void RegisterNavigationPolicyDecidedCallback(WebEngineNavigationPolicyDecidedCallback callback) override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::GetPlainTextAsynchronously()
@@ -368,6 +379,11 @@ public:
   void ScrollEdgeReached( Dali::WebEnginePlugin::ScrollEdge edge ) override;
 
   /**
+   * @copydoc Dali::Plugin::WebViewContainerClient::NavigationPolicyDecided()
+   */
+  void NavigationPolicyDecided(std::unique_ptr<Dali::WebEnginePolicyDecision> policy) override;
+
+  /**
    * @copydoc Dali::Plugin::WebViewContainerClient::RunJavaScriptEvaluationResultHandler()
    */
   void RunJavaScriptEvaluationResultHandler( size_t key, const char* result ) override;
@@ -389,16 +405,15 @@ private:
   std::string                                             mUrl;
   size_t                                                  mJavaScriptEvaluationCount;
 
-  Dali::WebEnginePlugin::WebEnginePageLoadSignalType      mLoadStartedSignal;
-  Dali::WebEnginePlugin::WebEnginePageLoadSignalType      mLoadFinishedSignal;
-  Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType mLoadErrorSignal;
-
-  Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType mScrollEdgeReachedSignal;
+  WebEnginePageLoadCallback                mLoadStartedCallback;
+  WebEnginePageLoadCallback                mLoadFinishedCallback;
+  WebEnginePageLoadErrorCallback           mLoadErrorCallback;
+  WebEngineScrollEdgeReachedCallback       mScrollEdgeReachedCallback;
+  WebEngineNavigationPolicyDecidedCallback mNavigationPolicyDecidedCallback;
+  PlainTextReceivedCallback                mPlainTextReceivedCallback;
 
-  std::unordered_map< size_t, JavaScriptCallback >        mJavaScriptEvaluationResultHandlers;
-  std::unordered_map< std::string, JavaScriptCallback >   mJavaScriptMessageHandlers;
-  
-  PlainTextReceivedCallback                               mPlainTextReceivedCallback;
+  std::unordered_map< size_t, JavaScriptMessageHandlerCallback >      mJavaScriptEvaluationResultHandlers;
+  std::unordered_map< std::string, JavaScriptMessageHandlerCallback > mJavaScriptMessageHandlers;
 };
 } // namespace Plugin
 } // namespace Dali
diff --git a/dali-extension/web-engine-chromium/tizen-web-engine-frame.cpp b/dali-extension/web-engine-chromium/tizen-web-engine-frame.cpp
new file mode 100755 (executable)
index 0000000..d926a46
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "tizen-web-engine-frame.h"
+
+namespace Dali
+{
+namespace Plugin
+{
+
+TizenWebEngineFrame::TizenWebEngineFrame(Ewk_Frame_Ref frame)
+    : ewkFrame(frame)
+{
+}
+
+TizenWebEngineFrame::~TizenWebEngineFrame()
+{
+}
+
+bool TizenWebEngineFrame::IsMainFrame() const
+{
+  return ewk_frame_is_main_frame(ewkFrame);
+}
+
+} // namespace Plugin
+} // namespace Dali
diff --git a/dali-extension/web-engine-chromium/tizen-web-engine-frame.h b/dali-extension/web-engine-chromium/tizen-web-engine-frame.h
new file mode 100755 (executable)
index 0000000..336f1d3
--- /dev/null
@@ -0,0 +1,60 @@
+#ifndef DALI_PLUGIN_TIZEN_WEB_ENGINE_FRAME_H
+#define DALI_PLUGIN_TIZEN_WEB_ENGINE_FRAME_H
+
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// EXTERNAL INCLUDES
+#include <ewk_frame_internal.h>
+#include <string>
+
+#include <dali/devel-api/adaptor-framework/web-engine-frame.h>
+
+namespace Dali
+{
+namespace Plugin
+{
+
+/**
+ * @brief A class TizenWebEngineFrame for frame.
+ */
+class TizenWebEngineFrame : public Dali::WebEngineFrame
+{
+public:
+  /**
+   * @brief Constructor.
+   */
+  TizenWebEngineFrame(Ewk_Frame_Ref);
+
+  /**
+   * @brief Destructor.
+   */
+  ~TizenWebEngineFrame();
+
+  /**
+   * @copydoc Dali::WebEngineFrame::CanShowMimeType()
+   */
+  bool IsMainFrame() const override;
+
+private:
+  Ewk_Frame_Ref ewkFrame;
+};
+
+} // namespace Plugin
+} // namespace Dali
+
+#endif // DALI_PLUGIN_TIZEN_WEB_ENGINE_FRAME_H
diff --git a/dali-extension/web-engine-chromium/tizen-web-engine-policy-decision.cpp b/dali-extension/web-engine-chromium/tizen-web-engine-policy-decision.cpp
new file mode 100755 (executable)
index 0000000..ebd388c
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "tizen-web-engine-policy-decision.h"
+#include "tizen-web-engine-frame.h"
+
+#include <ewk_policy_decision_internal.h>
+
+namespace Dali
+{
+namespace Plugin
+{
+
+TizenWebEnginePolicyDecision::TizenWebEnginePolicyDecision(Ewk_Policy_Decision* decision)
+  : ewkPolicyDecision(decision)
+{
+}
+
+TizenWebEnginePolicyDecision::~TizenWebEnginePolicyDecision()
+{
+}
+
+std::string TizenWebEnginePolicyDecision::GetUrl() const
+{
+  return ewk_policy_decision_url_get(ewkPolicyDecision);
+}
+
+std::string TizenWebEnginePolicyDecision::GetCookie() const
+{
+  return ewk_policy_decision_cookie_get(ewkPolicyDecision);
+}
+
+Dali::WebEnginePolicyDecision::DecisionType TizenWebEnginePolicyDecision::GetDecisionType() const
+{
+  return (Dali::WebEnginePolicyDecision::DecisionType)ewk_policy_decision_type_get(ewkPolicyDecision);
+}
+
+std::string TizenWebEnginePolicyDecision::GetResponseMime() const
+{
+  return ewk_policy_decision_response_mime_get(ewkPolicyDecision);
+}
+
+int32_t TizenWebEnginePolicyDecision::GetResponseStatusCode() const
+{
+  return ewk_policy_decision_response_status_code_get(ewkPolicyDecision);
+}
+
+Dali::WebEnginePolicyDecision::NavigationType TizenWebEnginePolicyDecision::GetNavigationType() const
+{
+  return (Dali::WebEnginePolicyDecision::NavigationType)ewk_policy_decision_navigation_type_get(ewkPolicyDecision);
+}
+
+Dali::WebEngineFrame& TizenWebEnginePolicyDecision::GetFrame() const
+{
+  Ewk_Frame_Ref ewkFrame = ewk_policy_decision_frame_get(ewkPolicyDecision);
+  webEngineFrame.reset(new TizenWebEngineFrame(ewkFrame));
+  return *(webEngineFrame.get());
+}
+
+std::string TizenWebEnginePolicyDecision::GetScheme() const
+{
+  return std::string(ewk_policy_decision_scheme_get(ewkPolicyDecision));
+}
+
+bool TizenWebEnginePolicyDecision::Use()
+{
+  return ewk_policy_decision_use(ewkPolicyDecision);
+}
+
+bool TizenWebEnginePolicyDecision::Ignore()
+{
+  return ewk_policy_decision_ignore(ewkPolicyDecision);
+}
+
+bool TizenWebEnginePolicyDecision::Suspend()
+{
+  return ewk_policy_decision_suspend(ewkPolicyDecision);
+}
+
+} // namespace Plugin
+} // namespace Dali
diff --git a/dali-extension/web-engine-chromium/tizen-web-engine-policy-decision.h b/dali-extension/web-engine-chromium/tizen-web-engine-policy-decision.h
new file mode 100755 (executable)
index 0000000..269e47a
--- /dev/null
@@ -0,0 +1,113 @@
+#ifndef DALI_PLUGIN_TIZEN_WEB_ENGINE_POLICY_DECISION_H
+#define DALI_PLUGIN_TIZEN_WEB_ENGINE_POLICY_DECISION_H
+
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// EXTERNAL INCLUDES
+#include <ewk_policy_decision.h>
+#include <memory>
+#include <string>
+
+#include <dali/devel-api/adaptor-framework/web-engine-frame.h>
+#include <dali/devel-api/adaptor-framework/web-engine-policy-decision.h>
+
+namespace Dali
+{
+namespace Plugin
+{
+
+/**
+ * @brief A class TizenWebEnginePolicyDecision for policy decision of chromium.
+ */
+class TizenWebEnginePolicyDecision : public Dali::WebEnginePolicyDecision
+{
+public:
+  /**
+   * @brief Constructor.
+   */
+  TizenWebEnginePolicyDecision(Ewk_Policy_Decision*);
+
+  /**
+   * @brief Destructor.
+   */
+  ~TizenWebEnginePolicyDecision();
+
+  /**
+   * @copydoc Dali::WebEnginePolicyDecision::GetUrl()
+   */
+  std::string GetUrl() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePolicyDecision::GetCookie()
+   */
+  std::string GetCookie() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePolicyDecision::GetDecisionType()
+   */
+  DecisionType GetDecisionType() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePolicyDecision::GetResponseMime()
+   */
+  std::string GetResponseMime() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePolicyDecision::GetResponseStatusCode()
+   */
+  int32_t GetResponseStatusCode() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePolicyDecision::GetNavigationType()
+   */
+  NavigationType GetNavigationType() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePolicyDecision::GetFrame()
+   */
+  WebEngineFrame& GetFrame() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePolicyDecision::GetScheme()
+   */
+  std::string GetScheme() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePolicyDecision::Use()
+   */
+  bool Use() override;
+
+  /**
+   * @copydoc Dali::WebEnginePolicyDecision::Ignore()
+   */
+  bool Ignore() override;
+
+  /**
+   * @copydoc Dali::WebEnginePolicyDecision::Suspend()
+   */
+  bool Suspend() override;
+
+private:
+  Ewk_Policy_Decision*                    ewkPolicyDecision;
+  mutable std::unique_ptr<WebEngineFrame> webEngineFrame;
+};
+
+} // namespace Plugin
+} // namespace Dali
+
+#endif // DALI_PLUGIN_TIZEN_WEB_ENGINE_POLICY_DECISION_H
index 2e20df1..95b0ff8 100755 (executable)
@@ -894,6 +894,31 @@ void TizenWebEngineLWE::EnableVideoHole( bool enabled )
   // NOT IMPLEMENTED
 }
 
+void TizenWebEngineLWE::RegisterPageLoadStartedCallback(WebEnginePageLoadCallback callback)
+{
+  // NOT IMPLEMENTED
+}
+
+void TizenWebEngineLWE::RegisterPageLoadFinishedCallback(WebEnginePageLoadCallback callback)
+{
+  // NOT IMPLEMENTED
+}
+
+void TizenWebEngineLWE::RegisterPageLoadErrorCallback(WebEnginePageLoadErrorCallback callback)
+{
+  // NOT IMPLEMENTED
+}
+
+void TizenWebEngineLWE::RegisterScrollEdgeReachedCallback(WebEngineScrollEdgeReachedCallback callback)
+{
+  // NOT IMPLEMENTED
+}
+
+void TizenWebEngineLWE::RegisterNavigationPolicyDecidedCallback(WebEngineNavigationPolicyDecidedCallback callback)
+{
+  // NOT IMPLEMENTED
+}
+
 void TizenWebEngineLWE::GetPlainTextAsynchronously(PlainTextReceivedCallback callback)
 {
   // NOT IMPLEMENTED
index 3115382..0bcc7da 100755 (executable)
@@ -197,12 +197,12 @@ public:
   /**
    * @copydoc Dali::WebEnginePlugin::EvaluateJavaScript()
    */
-  void EvaluateJavaScript( const std::string& script, std::function< void(const std::string&) > resultHandler ) override;
+  void EvaluateJavaScript( const std::string& script, JavaScriptMessageHandlerCallback resultHandler ) override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::AddJavaScriptMessageHandler()
    */
-  void AddJavaScriptMessageHandler( const std::string& exposedObjectName, std::function< void(const std::string&) > handler ) override;
+  void AddJavaScriptMessageHandler( const std::string& exposedObjectName, JavaScriptMessageHandlerCallback handler ) override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::ClearAllTilesResources()
@@ -257,36 +257,29 @@ public:
   void EnableVideoHole( bool enabled ) override;
 
   /**
-   * @copydoc Dali::WebEnginePlugin::PageLoadStartedSignal()
+   * @copydoc Dali::WebEnginePlugin::RegisterPageLoadStartedCallback()
    */
-  Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadStartedSignal() override
-  {
-    return mPageLoadStartedSignal;
-  }
+  void RegisterPageLoadStartedCallback(WebEnginePageLoadCallback callback) override;
 
   /**
-   * @copydoc Dali::WebEnginePlugin::PageLoadFinishedSignal()
+   * @copydoc Dali::WebEnginePlugin::RegisterPageLoadFinishedCallback()
    */
-  Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadFinishedSignal() override
-  {
-    return mPageLoadFinishedSignal;
-  }
+  void RegisterPageLoadFinishedCallback(WebEnginePageLoadCallback callback) override;
 
   /**
-   * @copydoc Dali::WebEnginePlugin::PageLoadErrorSignal()
+   * @copydoc Dali::WebEnginePlugin::RegisterPageLoadErrorCallback()
    */
-  Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType& PageLoadErrorSignal() override
-  {
-    return mPageLoadErrorSignal;
-  }
+  void RegisterPageLoadErrorCallback(WebEnginePageLoadErrorCallback callback) override;
 
   /**
-   * @copydoc Dali::WebEnginePlugin::ScrollEdgeReachedSignal()
+   * @copydoc Dali::WebEnginePlugin::RegisterScrollEdgeReachedCallback()
    */
-  Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType& ScrollEdgeReachedSignal() override
-  {
-    return mScrollEdgeReachedSignal;
-  }
+  void RegisterScrollEdgeReachedCallback(WebEngineScrollEdgeReachedCallback callback) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::RegisterNavigationPolicyDecidedCallback()
+   */
+  void RegisterNavigationPolicyDecidedCallback(WebEngineNavigationPolicyDecidedCallback callback) override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::GetPlainTextAsynchronously()
@@ -336,11 +329,7 @@ private:
   std::function<void(LWE::WebContainer*, const std::string&)> mOnPageStartedHandler;
   std::function<void(LWE::WebContainer*, const std::string&)> mOnLoadResourceHandler;
 
-  EventThreadCallback                                     mUpdateBufferTrigger;
-  Dali::WebEnginePlugin::WebEnginePageLoadSignalType      mPageLoadStartedSignal;
-  Dali::WebEnginePlugin::WebEnginePageLoadSignalType      mPageLoadFinishedSignal;
-  Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType mPageLoadErrorSignal;
-  Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType mScrollEdgeReachedSignal;
+  EventThreadCallback                                         mUpdateBufferTrigger;
 };
 
 } // namespace Plugin