Implement newly updated WebEnginePlugin interface 20/205720/3
authorJiyun Yang <ji.yang@samsung.com>
Wed, 8 May 2019 11:13:16 +0000 (20:13 +0900)
committerJiyun Yang <ji.yang@samsung.com>
Tue, 14 May 2019 05:14:26 +0000 (14:14 +0900)
Change-Id: Ib074c65bc76cfc561a6b4a9002d2243f93163025
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
dali-extension/web-engine-lwe/tizen-web-engine-lwe.cpp
dali-extension/web-engine-lwe/tizen-web-engine-lwe.h

index 1468ce4..49abe8a 100644 (file)
@@ -113,9 +113,10 @@ class WebViewContainerForDali
 {
 public:
   WebViewContainerForDali( WebViewContainerClient& client, int width, int height )
-      : mClient( client ),
-        mWidth( width ),
-        mHeight( height )
+    : mClient( client ),
+      mWidth( width ),
+      mHeight( height ),
+      mCookieAcceptancePolicy( EWK_COOKIE_ACCEPT_POLICY_NO_THIRD_PARTY )
   {
     InitWebView();
 
@@ -147,6 +148,9 @@ public:
     evas_object_smart_callback_add( mWebView, "load,finished",
                                     &WebViewContainerForDali::OnLoadFinished,
                                     &mClient );
+    evas_object_smart_callback_add( mWebView, "load,error",
+                                    &WebViewContainerForDali::OnLoadError,
+                                    &mClient );
     evas_object_smart_callback_add( mWebView, "console,message",
                                     &WebViewContainerForDali::OnConsoleMessage,
                                     this );
@@ -181,6 +185,16 @@ public:
     ewk_view_stop( mWebView );
   }
 
+  void Suspend()
+  {
+    ewk_view_suspend( mWebView );
+  }
+
+  void Resume()
+  {
+    ewk_view_resume( mWebView );
+  }
+
   void GoBack()
   {
     ewk_view_back( mWebView );
@@ -201,9 +215,9 @@ public:
     return ewk_view_forward_possible( mWebView );
   }
 
-  void EvaluateJavaScript( const std::string& script )
+  void EvaluateJavaScript( uint32_t key, const std::string& script )
   {
-    ewk_view_script_execute( mWebView, script.c_str(), 0, 0 );
+    ewk_view_script_execute( mWebView, script.c_str(), OnEvaluateJavaScript, (void*)key );
   }
 
   void AddJavaScriptMessageHandler( const std::string& exposedObjectName )
@@ -222,6 +236,84 @@ public:
     ewk_context_cache_clear( ewk_view_context_get( mWebView ) );
   }
 
+  void ClearCookies()
+  {
+    ewk_cookie_manager_cookies_clear( ewk_context_cookie_manager_get( ewk_view_context_get( mWebView ) ) );
+  }
+
+  Ewk_Cache_Model GetCacheModel()
+  {
+    return ewk_context_cache_model_get( ewk_view_context_get( mWebView ) );
+  }
+
+  void SetCacheModel( Ewk_Cache_Model cacheModel )
+  {
+    ewk_context_cache_model_set( ewk_view_context_get( mWebView ), cacheModel );
+  }
+
+  Ewk_Cookie_Accept_Policy GetCookieAcceptPolicy()
+  {
+    return mCookieAcceptancePolicy;
+  }
+
+  void SetCookieAcceptPolicy( Ewk_Cookie_Accept_Policy policy )
+  {
+    ewk_cookie_manager_accept_policy_set( ewk_context_cookie_manager_get( ewk_view_context_get( mWebView ) ), policy );
+    mCookieAcceptancePolicy = policy;
+  }
+
+  const std::string& GetUserAgent()
+  {
+    mUserAgent = std::string( ewk_view_user_agent_get( mWebView ) );
+    return mUserAgent;
+  }
+
+  void SetUserAgent( const std::string& userAgent )
+  {
+    ewk_view_user_agent_set( mWebView, userAgent.c_str() );
+  }
+
+  bool IsJavaScriptEnabled()
+  {
+    return ewk_settings_javascript_enabled_get( ewk_view_settings_get( mWebView ) );
+  }
+
+  void EnableJavaScript( bool enabled )
+  {
+    ewk_settings_javascript_enabled_set( ewk_view_settings_get( mWebView ), enabled );
+  }
+
+  bool AreImagesAutomaticallyLoaded()
+  {
+    return ewk_settings_loads_images_automatically_get( ewk_view_settings_get( mWebView ) );
+  }
+
+  void LoadImagesAutomatically( bool automatic )
+  {
+    ewk_settings_loads_images_automatically_set( ewk_view_settings_get( mWebView ), automatic );
+  }
+
+  const std::string& GetDefaultTextEncodingName()
+  {
+    mDefaultTextEncodingName = std::string( ewk_settings_default_text_encoding_name_get( ewk_view_settings_get( mWebView ) ) );
+    return mDefaultTextEncodingName;
+  }
+
+  void SetDefaultTextEncodingName( const std::string& defaultTextEncodingName )
+  {
+    ewk_settings_default_text_encoding_name_set( ewk_view_settings_get( mWebView ), defaultTextEncodingName.c_str() );
+  }
+
+  int GetDefaultFontSize()
+  {
+    return ewk_settings_default_font_size_get( ewk_view_settings_get( mWebView ) );
+  }
+
+  void SetDefaultFontSize( int defaultFontSize )
+  {
+    ewk_settings_default_font_size_set( ewk_view_settings_get( mWebView ), defaultFontSize );
+  }
+
   void SetSize( int width, int height )
   {
     mWidth = width;
@@ -281,7 +373,7 @@ public:
   bool SendKeyEvent( const KeyEvent& keyEvent )
   {
     void* evasKeyEvent = 0;
-    if ( keyEvent.state == KeyEvent::Down )
+    if( keyEvent.state == KeyEvent::Down )
     {
       Evas_Event_Key_Down downEvent;
       memset( &downEvent, 0, sizeof(Evas_Event_Key_Down) );
@@ -321,6 +413,14 @@ private:
     client->LoadFinished();
   }
 
+  static void OnLoadError( void* data, Evas_Object*, void* rawError )
+  {
+    auto client = static_cast<WebViewContainerClient*>(data);
+    Ewk_Error* error = static_cast< Ewk_Error* >( rawError );
+
+    client->LoadError( ewk_error_url_get( error ), ewk_error_code_get( error ) );
+  }
+
   static void OnConsoleMessage( void*, Evas_Object*, void* eventInfo )
   {
     Ewk_Console_Message* message = (Ewk_Console_Message*)eventInfo;
@@ -331,12 +431,21 @@ private:
         ewk_console_message_text_get( message ) );
   }
 
+  static void OnEvaluateJavaScript( Evas_Object* o, const char* result, void* data )
+  {
+    auto client = WebEngineManager::Get().FindContainerClient( o );
+    if( client )
+    {
+      client->RunJavaScriptEvaluationResultHandler( (int)data, result );
+    }
+  }
+
   static void OnJavaScriptMessage( Evas_Object* o, Ewk_Script_Message message )
   {
     auto client = WebEngineManager::Get().FindContainerClient( o );
     if( client )
     {
-      client->RunJavaScriptInterfaceCallback( message.name, static_cast<char*>( message.body ) );
+      client->RunJavaScriptMessageHandler( message.name, static_cast<char*>( message.body ) );
     }
   }
 
@@ -346,6 +455,10 @@ private:
 
   int mWidth;
   int mHeight;
+
+  Ewk_Cookie_Accept_Policy mCookieAcceptancePolicy;
+  std::string mUserAgent;
+  std::string mDefaultTextEncodingName;
 };
 
 class TBMSurfaceSourceInitializer
@@ -355,7 +468,7 @@ public:
                                         int width, int height )
   {
     mSurface = tbm_surface_create( width, height, TBM_FORMAT_ARGB8888 );
-    if ( !mSurface )
+    if( !mSurface )
     {
       DALI_LOG_ERROR( "Failed to create tbm surface." );
     }
@@ -368,9 +481,9 @@ public:
 
   ~TBMSurfaceSourceInitializer()
   {
-    if ( mSurface )
+    if( mSurface )
     {
-      if ( tbm_surface_destroy( mSurface ) != TBM_SURFACE_ERROR_NONE )
+      if( tbm_surface_destroy( mSurface ) != TBM_SURFACE_ERROR_NONE )
       {
         DALI_LOG_ERROR( "Failed to destroy tbm surface." );
       }
@@ -381,7 +494,8 @@ private:
 };
 
 TizenWebEngineChromium::TizenWebEngineChromium()
-    : mWebViewContainer( 0 )
+  : mWebViewContainer( 0 )
+  , mJavaScriptEvaluationCount( 0 )
 {
 }
 
@@ -403,6 +517,9 @@ void TizenWebEngineChromium::Destroy()
 {
   if (mWebViewContainer)
   {
+    mJavaScriptEvaluationResultHandlers.clear();
+    mJavaScriptMessageHandlers.clear();
+
     delete mWebViewContainer;
     mWebViewContainer = 0;
   }
@@ -410,7 +527,7 @@ void TizenWebEngineChromium::Destroy()
 
 void TizenWebEngineChromium::LoadUrl( const std::string& path )
 {
-  if ( mWebViewContainer )
+  if( mWebViewContainer )
   {
     mWebViewContainer->LoadUrl( path );
   }
@@ -423,7 +540,7 @@ NativeImageInterfacePtr TizenWebEngineChromium::GetNativeImageSource()
 
 const std::string& TizenWebEngineChromium::GetUrl()
 {
-  if ( mWebViewContainer )
+  if( mWebViewContainer )
   {
     mUrl =  mWebViewContainer->GetUrl();
   }
@@ -432,7 +549,7 @@ const std::string& TizenWebEngineChromium::GetUrl()
 
 void TizenWebEngineChromium::LoadHTMLString( const std::string& string )
 {
-  if ( mWebViewContainer )
+  if( mWebViewContainer )
   {
     mWebViewContainer->LoadHtml( string );
   }
@@ -440,7 +557,7 @@ void TizenWebEngineChromium::LoadHTMLString( const std::string& string )
 
 void TizenWebEngineChromium::Reload()
 {
-  if ( mWebViewContainer )
+  if( mWebViewContainer )
   {
     mWebViewContainer->Reload();
   }
@@ -448,15 +565,31 @@ void TizenWebEngineChromium::Reload()
 
 void TizenWebEngineChromium::StopLoading()
 {
-  if ( mWebViewContainer )
+  if( mWebViewContainer )
   {
     mWebViewContainer->StopLoading();
   }
 }
 
+void TizenWebEngineChromium::Suspend()
+{
+  if( mWebViewContainer )
+  {
+    mWebViewContainer->Suspend();
+  }
+}
+
+void TizenWebEngineChromium::Resume()
+{
+  if( mWebViewContainer )
+  {
+    mWebViewContainer->Resume();
+  }
+}
+
 bool TizenWebEngineChromium::CanGoForward()
 {
-  if ( mWebViewContainer )
+  if( mWebViewContainer )
   {
     return mWebViewContainer->CanGoForward();
   }
@@ -465,7 +598,7 @@ bool TizenWebEngineChromium::CanGoForward()
 
 void TizenWebEngineChromium::GoForward()
 {
-  if ( mWebViewContainer )
+  if( mWebViewContainer )
   {
     mWebViewContainer->GoForward();
   }
@@ -473,7 +606,7 @@ void TizenWebEngineChromium::GoForward()
 
 bool TizenWebEngineChromium::CanGoBack()
 {
-  if ( mWebViewContainer )
+  if( mWebViewContainer )
   {
     return mWebViewContainer->CanGoBack();
   }
@@ -482,17 +615,24 @@ bool TizenWebEngineChromium::CanGoBack()
 
 void TizenWebEngineChromium::GoBack()
 {
-  if ( mWebViewContainer )
+  if( mWebViewContainer )
   {
     mWebViewContainer->GoBack();
   }
 }
 
-void TizenWebEngineChromium::EvaluateJavaScript( const std::string& script )
+void TizenWebEngineChromium::EvaluateJavaScript( const std::string& script, std::function< void( const std::string& ) > resultHandler )
 {
-  if ( mWebViewContainer )
+  if( mWebViewContainer )
   {
-    mWebViewContainer->EvaluateJavaScript( script );
+    if( mJavaScriptEvaluationResultHandlers.emplace( mJavaScriptEvaluationCount, resultHandler ).second )
+    {
+      mWebViewContainer->EvaluateJavaScript( mJavaScriptEvaluationCount++, script );
+    }
+    else
+    {
+      DALI_LOG_ERROR( "Too many ongoing JavaScript evaluations." );
+    }
   }
 }
 
@@ -500,22 +640,20 @@ void TizenWebEngineChromium::AddJavaScriptMessageHandler( const std::string& exp
 {
   if( mWebViewContainer )
   {
-    for( auto& callback : mJsCallbacks )
+    if( mJavaScriptMessageHandlers.emplace( exposedObjectName, handler ).second )
     {
-      if( callback.mObjectName == exposedObjectName )
-      {
-        DALI_LOG_ERROR( "Callback for (%s) already exists.", exposedObjectName.c_str() );
-        return;
-      }
+      mWebViewContainer->AddJavaScriptMessageHandler( exposedObjectName );
+    }
+    else
+    {
+      DALI_LOG_ERROR( "Callback for (%s) already exists.", exposedObjectName.c_str() );
     }
-    mJsCallbacks.push_back( JsCallback( exposedObjectName, handler ) );
-    mWebViewContainer->AddJavaScriptMessageHandler( exposedObjectName );
   }
 }
 
 void TizenWebEngineChromium::ClearHistory()
 {
-  if ( mWebViewContainer )
+  if( mWebViewContainer )
   {
     mWebViewContainer->ClearHistory();
   }
@@ -523,15 +661,144 @@ void TizenWebEngineChromium::ClearHistory()
 
 void TizenWebEngineChromium::ClearCache()
 {
-  if ( mWebViewContainer )
+  if( mWebViewContainer )
   {
     mWebViewContainer->ClearCache();
   }
 }
 
+void TizenWebEngineChromium::ClearCookies()
+{
+  if( mWebViewContainer )
+  {
+    mWebViewContainer->ClearCookies();
+  }
+}
+
+Dali::WebEnginePlugin::CacheModel TizenWebEngineChromium::GetCacheModel() const
+{
+  if( mWebViewContainer )
+  {
+    return static_cast< Dali::WebEnginePlugin::CacheModel >( mWebViewContainer->GetCacheModel() );
+  }
+  return Dali::WebEnginePlugin::CacheModel::DOCUMENT_VIEWER;
+}
+
+void TizenWebEngineChromium::SetCacheModel( Dali::WebEnginePlugin::CacheModel cacheModel )
+{
+  if( mWebViewContainer )
+  {
+    return mWebViewContainer->SetCacheModel( static_cast< Ewk_Cache_Model >( cacheModel ) );
+  }
+}
+
+Dali::WebEnginePlugin::CookieAcceptPolicy TizenWebEngineChromium::GetCookieAcceptPolicy() const
+{
+  if( mWebViewContainer )
+  {
+    return static_cast< Dali::WebEnginePlugin::CookieAcceptPolicy >( mWebViewContainer->GetCookieAcceptPolicy() );
+  }
+  return Dali::WebEnginePlugin::CookieAcceptPolicy::NO_THIRD_PARTY;
+}
+
+void TizenWebEngineChromium::SetCookieAcceptPolicy( Dali::WebEnginePlugin::CookieAcceptPolicy policy )
+{
+  if( mWebViewContainer )
+  {
+    mWebViewContainer->SetCookieAcceptPolicy( static_cast< Ewk_Cookie_Accept_Policy >( policy ) );
+  }
+}
+
+const std::string kEmpty;
+
+const std::string& TizenWebEngineChromium::GetUserAgent() const
+{
+  if( mWebViewContainer )
+  {
+    return mWebViewContainer->GetUserAgent();
+  }
+  return kEmpty;
+}
+
+void TizenWebEngineChromium::SetUserAgent( const std::string& userAgent )
+{
+  if( mWebViewContainer )
+  {
+    mWebViewContainer->SetUserAgent( userAgent );
+  }
+}
+
+bool TizenWebEngineChromium::IsJavaScriptEnabled() const
+{
+  if( mWebViewContainer )
+  {
+    return mWebViewContainer->IsJavaScriptEnabled();
+  }
+  return false;
+}
+
+void TizenWebEngineChromium::EnableJavaScript( bool enabled )
+{
+  if( mWebViewContainer )
+  {
+    mWebViewContainer->EnableJavaScript( enabled );
+  }
+}
+
+bool TizenWebEngineChromium::AreImagesAutomaticallyLoaded() const
+{
+  if( mWebViewContainer )
+  {
+    return mWebViewContainer->AreImagesAutomaticallyLoaded();
+  }
+  return false;
+}
+
+void TizenWebEngineChromium::LoadImagesAutomatically( bool automatic )
+{
+  if( mWebViewContainer )
+  {
+    mWebViewContainer->LoadImagesAutomatically( automatic );
+  }
+}
+
+const std::string& TizenWebEngineChromium::GetDefaultTextEncodingName() const
+{
+  if( mWebViewContainer )
+  {
+    return mWebViewContainer->GetDefaultTextEncodingName();
+  }
+  return kEmpty;
+}
+
+void TizenWebEngineChromium::SetDefaultTextEncodingName( const std::string& defaultTextEncodingName )
+{
+  if( mWebViewContainer )
+  {
+    mWebViewContainer->SetDefaultTextEncodingName( defaultTextEncodingName );
+  }
+}
+
+int TizenWebEngineChromium::GetDefaultFontSize() const
+{
+  if( mWebViewContainer )
+  {
+    return mWebViewContainer->AreImagesAutomaticallyLoaded();
+  }
+  return 0;
+}
+
+void TizenWebEngineChromium::SetDefaultFontSize( int defaultFontSize )
+{
+  if( mWebViewContainer )
+  {
+    mWebViewContainer->SetDefaultFontSize( defaultFontSize );
+  }
+}
+
 void TizenWebEngineChromium::SetSize( int width, int height )
 {
-  if ( mWebViewContainer )
+  if( mWebViewContainer )
   {
     mWebViewContainer->SetSize( width, height );
   }
@@ -539,7 +806,7 @@ void TizenWebEngineChromium::SetSize( int width, int height )
 
 bool TizenWebEngineChromium::SendTouchEvent( const Dali::TouchData& touch )
 {
-  if ( mWebViewContainer )
+  if( mWebViewContainer )
   {
     return mWebViewContainer->SendTouchEvent( touch );
   }
@@ -548,27 +815,32 @@ bool TizenWebEngineChromium::SendTouchEvent( const Dali::TouchData& touch )
 
 bool TizenWebEngineChromium::SendKeyEvent( const Dali::KeyEvent& event )
 {
-  if ( mWebViewContainer )
+  if( mWebViewContainer )
   {
     return mWebViewContainer->SendKeyEvent( event );
   }
   return false;
 }
 
-Dali::WebEnginePlugin::WebEngineSignalType& TizenWebEngineChromium::PageLoadStartedSignal()
+Dali::WebEnginePlugin::WebEnginePageLoadSignalType& TizenWebEngineChromium::PageLoadStartedSignal()
 {
   return mLoadStartedSignal;
 }
 
-Dali::WebEnginePlugin::WebEngineSignalType& TizenWebEngineChromium::PageLoadFinishedSignal()
+Dali::WebEnginePlugin::WebEnginePageLoadSignalType& TizenWebEngineChromium::PageLoadFinishedSignal()
 {
   return mLoadFinishedSignal;
 }
 
+Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType& TizenWebEngineChromium::PageLoadErrorSignal()
+{
+  return mLoadErrorSignal;
+}
+
 // WebViewContainerClient Interface
 void TizenWebEngineChromium::UpdateImage( tbm_surface_h buffer )
 {
-  if ( !buffer )
+  if( !buffer )
   {
     return;
   }
@@ -590,16 +862,35 @@ void TizenWebEngineChromium::LoadFinished()
   mLoadFinishedSignal.Emit( GetUrl() );
 }
 
-void TizenWebEngineChromium::RunJavaScriptInterfaceCallback( const std::string& objectName, const std::string& message )
+void TizenWebEngineChromium::LoadError( const char* url, int errorCode )
+{
+  std::string stdUrl( url );
+  mLoadErrorSignal.Emit( stdUrl, errorCode );
+}
+
+void TizenWebEngineChromium::RunJavaScriptEvaluationResultHandler( uint32_t key, const char* result )
 {
-  for( auto& callback : mJsCallbacks )
+  auto handler = mJavaScriptEvaluationResultHandlers.find( key );
+  if( handler == mJavaScriptEvaluationResultHandlers.end() )
   {
-    if( callback.mObjectName == objectName )
-    {
-      callback.mCallback( message );
-      return;
-    }
+    return;
   }
+
+  std::string stored( result );
+  handler->second( stored );
+
+  mJavaScriptEvaluationResultHandlers.erase( handler );
+}
+
+void TizenWebEngineChromium::RunJavaScriptMessageHandler( const std::string& objectName, const std::string& message )
+{
+  auto handler = mJavaScriptMessageHandlers.find( objectName );
+  if( handler == mJavaScriptMessageHandlers.end() )
+  {
+    return;
+  }
+
+  handler->second( message );
 }
 } // namespace Plugin
 } // namespace Dali
@@ -612,7 +903,7 @@ extern "C" DALI_EXPORT_API Dali::WebEnginePlugin* CreateWebEnginePlugin()
 
 extern "C" DALI_EXPORT_API void DestroyWebEnginePlugin( Dali::WebEnginePlugin* plugin )
 {
-  if ( plugin )
+  if( plugin )
   {
     delete plugin;
   }
index e1e268e..deab68b 100644 (file)
  * limitations under the License.
  *
  */
+
+// EXTERNAL INCLUDES
 #include <functional>
 #include <dali-toolkit/dali-toolkit.h>
 #include <dali/devel-api/adaptor-framework/web-engine-plugin.h>
 #include <dali/public-api/images/native-image-interface.h>
 
 #include <tbm_surface.h>
+#include <unordered_map>
 
 namespace Dali
 {
@@ -31,84 +34,320 @@ namespace Plugin
 
 class WebViewContainerForDali;
 
+/**
+ * @brief The interface class to represent client of corresponding WebView container (WebViewContainerForDali).
+ */
 class WebViewContainerClient
 {
+
 public:
+
+  /**
+   * @brief Callback function to be called by WebViewContainer when surface is updated.
+   * @param [in] buffer The surface
+   */
   virtual void UpdateImage( tbm_surface_h buffer ) = 0;
+
+  /**
+   * @brief Callback function to be called by WebViewContainer when page loading is started.
+   */
   virtual void LoadStarted() = 0;
+
+  /**
+   * @brief Callback function to be called by WebViewContainer when page loading is finished.
+   */
   virtual void LoadFinished() = 0;
-  virtual void RunJavaScriptInterfaceCallback( const std::string& objectName, const std::string& message ) = 0;
-};
 
-class JsCallback {
-public:
-  JsCallback( std::string objectName, std::function< void(const std::string&) > callback )
-  {
-    mObjectName = objectName;
-    mCallback = callback;
-  }
-
-  std::string mObjectName;
-  std::function< void( const std::string& ) > mCallback;
+  /**
+   * @brief Callback function to be called by WebViewContainer when an error occurs in page loading.
+   * @param [in] url Failing URL for this error
+   * @param [in] errorCode The error code
+   */
+  virtual void LoadError( const char* url, int errorCode ) = 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
+   * @see Dali::Plugin::TizenWebEngineChromium::EvaluateJavaScript
+   */
+  virtual void RunJavaScriptEvaluationResultHandler( uint32_t key, const char* result ) = 0;
+
+  /**
+   * @brief Callback function to be called by WebViewContainer when a message handler is called from JavaScript runtime.
+   * @param [in] objectName Exposed object name of the message handler
+   * @param [in] message Message from JavaScript runtime
+   * @see Dali::Plugin::TizenWebEngineChromium::AddJavaScriptMessageHandler
+   */
+  virtual void RunJavaScriptMessageHandler( const std::string& objectName, const std::string& message ) = 0;
 };
 
-class TizenWebEngineChromium
-    : public Dali::WebEnginePlugin,
-      public WebViewContainerClient
+/**
+ * @brief A class implements WebViewContainerClient and Dali::WebEnginePlugin for tizen chromium.
+ */
+class TizenWebEngineChromium : public Dali::WebEnginePlugin, public WebViewContainerClient
 {
+
 public:
+
+  typedef std::function< void(const std::string&) > JavaScriptCallback;
+
+  /**
+   * @brief Constructor.
+   */
   TizenWebEngineChromium();
+
+  /**
+   * @brief Destructor.
+   */
   ~TizenWebEngineChromium() override;
 
+
   // WebEnginePlugin Interface
-  void Create( int width, int height,
-               const std::string& locale,
-               const std::string& timezoneID ) override;
+
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::Create()
+   */
+  void Create( int width, int height, const std::string& locale, const std::string& timezoneID ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::Destroy()
+   */
   void Destroy() override;
 
+  /**
+   * @copydoc Dali::WebEnginePlugin::LoadUrl()
+   */
   void LoadUrl( const std::string& url ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::GetNativeImageSource()
+   */
   NativeImageInterfacePtr GetNativeImageSource() override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::GetUrl()
+   */
   const std::string& GetUrl() override;
 
+  /**
+   * @copydoc Dali::WebEnginePlugin::LoadHTMLString()
+   */
   void LoadHTMLString( const std::string& string ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::Reload()
+   */
   void Reload() override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::StopLoading()
+   */
   void StopLoading() override;
 
+  /**
+   * @copydoc Dali::WebEnginePlugin::Suspend()
+   */
+  void Suspend() override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::Resume()
+   */
+  void Resume() override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::CanGoForward()
+   */
   bool CanGoForward() override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::GoForward()
+   */
   void GoForward() override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::CanGoBack()
+   */
   bool CanGoBack() override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::GoBack()
+   */
   void GoBack() override;
 
-  void EvaluateJavaScript( const std::string& script ) override;
+  /**
+   * @copydoc Dali::WebEnginePlugin::EvaluateJavaScript()
+   */
+  void EvaluateJavaScript( const std::string& script, std::function< void( const std::string& ) > resultHandler ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::AddJavaScriptMessageHandler()
+   */
   void AddJavaScriptMessageHandler( const std::string& exposedObjectName, std::function< void( const std::string& ) > handler ) override;
 
+  /**
+   * @copydoc Dali::WebEnginePlugin::ClearHistory()
+   */
   void ClearHistory() override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::ClearCache()
+   */
   void ClearCache() override;
 
+  /**
+   * @copydoc Dali::WebEnginePlugin::ClearCookies()
+   */
+  void ClearCookies() override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::GetCacheModel()
+   */
+  Dali::WebEnginePlugin::CacheModel GetCacheModel() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::SetCacheModel()
+   */
+  void SetCacheModel( Dali::WebEnginePlugin::CacheModel cacheModel ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::GetCookieAcceptPolicy()
+   */
+  Dali::WebEnginePlugin::CookieAcceptPolicy GetCookieAcceptPolicy() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::SetCookieAcceptPolicy()
+   */
+  void SetCookieAcceptPolicy( Dali::WebEnginePlugin::CookieAcceptPolicy policy ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::GetUserAgent()
+   */
+  const std::string& GetUserAgent() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::SetUserAgent()
+   */
+  void SetUserAgent( const std::string& userAgent ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::IsJavaScriptEnabled()
+   */
+  bool IsJavaScriptEnabled() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::EnableJavaScript()
+   */
+  void EnableJavaScript( bool enabled ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::AreImagesAutomaticallyLoaded()
+   */
+  bool AreImagesAutomaticallyLoaded() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::LoadImagesAutomatically()
+   */
+  void LoadImagesAutomatically( bool automatic ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::GetDefaultTextEncodingName()
+   */
+  const std::string& GetDefaultTextEncodingName() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::SetDefaultTextEncodingName()
+   */
+  void SetDefaultTextEncodingName( const std::string& defaultTextEncodingName ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::GetDefaultFontSize()
+   */
+  int GetDefaultFontSize() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::SetDefaultFontSize()
+   */
+  void SetDefaultFontSize( int defaultFontSize ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::SetSize()
+   */
   void SetSize( int width, int height ) override;
 
+  /**
+   * @copydoc Dali::WebEnginePlugin::SendTouchEvent()
+   */
   bool SendTouchEvent( const Dali::TouchData& touch ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::SendKeyEvent()
+   */
   bool SendKeyEvent( const Dali::KeyEvent& event ) override;
 
-  Dali::WebEnginePlugin::WebEngineSignalType& PageLoadStartedSignal() override;
-  Dali::WebEnginePlugin::WebEngineSignalType& PageLoadFinishedSignal() override;
+  /**
+   * @copydoc Dali::WebEnginePlugin::PageLoadStartedSignal()
+   */
+  Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadStartedSignal() override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::PageLoadFinishedSignal()
+   */
+  Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadFinishedSignal() override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::PageLoadErrorSignal()
+   */
+  Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType& PageLoadErrorSignal() override;
+
 
   // WebViewContainerClient Interface
+
+
+  /**
+   * @copydoc Dali::Plugin::WebViewContainerClient::UpdateImage()
+   */
   void UpdateImage( tbm_surface_h buffer ) override;
+
+  /**
+   * @copydoc Dali::Plugin::WebViewContainerClient::LoadStarted()
+   */
   void LoadStarted() override;
+
+  /**
+   * @copydoc Dali::Plugin::WebViewContainerClient::LoadFinished()
+   */
   void LoadFinished() override;
-  void RunJavaScriptInterfaceCallback( const std::string& objectName, const std::string& message ) override;
+
+  /**
+   * @copydoc Dali::Plugin::WebViewContainerClient::LoadError()
+   */
+  void LoadError( const char* url, int errorCode ) override;
+
+  /**
+   * @copydoc Dali::Plugin::WebViewContainerClient::RunJavaScriptEvaluationResultHandler()
+   */
+  void RunJavaScriptEvaluationResultHandler( uint32_t key, const char* result ) override;
+
+  /**
+   * @copydoc Dali::Plugin::WebViewContainerClient::RunJavaScriptMessageHandler()
+   */
+  void RunJavaScriptMessageHandler( const std::string& objectName, const std::string& message ) override;
 
 private:
-  WebViewContainerForDali* mWebViewContainer;
-  Dali::NativeImageSourcePtr mDaliImageSrc;
 
-  Dali::WebEnginePlugin::WebEngineSignalType mLoadStartedSignal;
-  Dali::WebEnginePlugin::WebEngineSignalType mLoadFinishedSignal;
+  WebViewContainerForDali*                                mWebViewContainer;
+  Dali::NativeImageSourcePtr                              mDaliImageSrc;
+  std::string                                             mUrl;
+  uint32_t                                                mJavaScriptEvaluationCount;
 
-  std::vector< JsCallback > mJsCallbacks;
+  Dali::WebEnginePlugin::WebEnginePageLoadSignalType      mLoadStartedSignal;
+  Dali::WebEnginePlugin::WebEnginePageLoadSignalType      mLoadFinishedSignal;
+  Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType mLoadErrorSignal;
 
-  std::string mUrl;
+  std::unordered_map< uint32_t, JavaScriptCallback >      mJavaScriptEvaluationResultHandlers;
+  std::unordered_map< std::string, JavaScriptCallback >   mJavaScriptMessageHandlers;
 };
 } // namespace Plugin
 } // namespace Dali
index dac752d..91fe722 100644 (file)
@@ -529,6 +529,16 @@ void TizenWebEngineLWE::StopLoading()
   mWebContainer->StopLoading();
 }
 
+void TizenWebEngineLWE::Suspend()
+{
+  // NOT IMPLEMENTED
+}
+
+void TizenWebEngineLWE::Resume()
+{
+  // NOT IMPLEMENTED
+}
+
 void TizenWebEngineLWE::GoBack()
 {
   DALI_ASSERT_ALWAYS( mWebContainer );
@@ -553,17 +563,16 @@ bool TizenWebEngineLWE::CanGoForward()
   return mCanGoForward;
 }
 
-void TizenWebEngineLWE::EvaluateJavaScript( const std::string& script )
+void TizenWebEngineLWE::EvaluateJavaScript( const std::string& script, std::function< void(const std::string&) > resultHandler )
 {
-  DALI_ASSERT_ALWAYS( mWebContainer );
-  mWebContainer->EvaluateJavaScript( script );
+  // NOT IMPLEMENTED
 }
 
-void TizenWebEngineLWE::AddJavaScriptMessageHandler( const std::string& exposedObjectName, std::function< void(const std::string&) > callback )
+void TizenWebEngineLWE::AddJavaScriptMessageHandler( const std::string& exposedObjectName, std::function< void(const std::string&) > handler )
 {
   DALI_ASSERT_ALWAYS( mWebContainer );
-  mWebContainer->AddJavaScriptInterface( exposedObjectName, "postMessage", [callback]( const std::string& data )->std::string {
-    callback( data );
+  mWebContainer->AddJavaScriptInterface( exposedObjectName, "postMessage", [handler]( const std::string& data )->std::string {
+    handler( data );
     return "";
   } );
 }
@@ -581,6 +590,90 @@ void TizenWebEngineLWE::ClearCache()
   mWebContainer->ClearCache();
 }
 
+void TizenWebEngineLWE::ClearCookies()
+{
+  // NOT IMPLEMENTED
+}
+
+Dali::WebEnginePlugin::CacheModel TizenWebEngineLWE::GetCacheModel() const
+{
+  // NOT IMPLEMENTED
+  return Dali::WebEnginePlugin::CacheModel::DOCUMENT_VIEWER;
+}
+
+void TizenWebEngineLWE::SetCacheModel( Dali::WebEnginePlugin::CacheModel cacheModel )
+{
+  // NOT IMPLEMENTED
+}
+
+Dali::WebEnginePlugin::CookieAcceptPolicy TizenWebEngineLWE::GetCookieAcceptPolicy() const
+{
+  // NOT IMPLEMENTED
+  return Dali::WebEnginePlugin::CookieAcceptPolicy::NO_THIRD_PARTY;
+}
+
+void TizenWebEngineLWE::SetCookieAcceptPolicy( Dali::WebEnginePlugin::CookieAcceptPolicy policy )
+{
+  // NOT IMPLEMENTED
+}
+
+const std::string& TizenWebEngineLWE::GetUserAgent() const
+{
+  // NOT IMPLEMENTED
+  static const std::string kEmpty;
+  return kEmpty;
+}
+
+void TizenWebEngineLWE::SetUserAgent( const std::string& userAgent )
+{
+  // NOT IMPLEMENTED
+}
+
+bool TizenWebEngineLWE::IsJavaScriptEnabled() const
+{
+  // NOT IMPLEMENTED
+  return 0;
+}
+
+void TizenWebEngineLWE::EnableJavaScript( bool enabled )
+{
+  // NOT IMPLEMENTED
+}
+
+bool TizenWebEngineLWE::AreImagesAutomaticallyLoaded() const
+{
+  // NOT IMPLEMENTED
+  return 0;
+}
+
+void TizenWebEngineLWE::LoadImagesAutomatically( bool automatic )
+{
+  // NOT IMPLEMENTED
+}
+
+const std::string& TizenWebEngineLWE::GetDefaultTextEncodingName() const
+{
+  // NOT IMPLEMENTED
+  static const std::string kEmpty;
+  return kEmpty;
+}
+
+void TizenWebEngineLWE::SetDefaultTextEncodingName( const std::string& defaultTextEncodingName )
+{
+  // NOT IMPLEMENTED
+}
+
+int TizenWebEngineLWE::GetDefaultFontSize() const
+{
+  // NOT IMPLEMENTED
+  return 0;
+}
+
+void TizenWebEngineLWE::SetDefaultFontSize( int defaultFontSize )
+{
+  // NOT IMPLEMENTED
+}
+
 void TizenWebEngineLWE::SetSize( int width, int height )
 {
   DALI_ASSERT_ALWAYS( mWebContainer );
index 462d401..2168115 100644 (file)
@@ -65,102 +65,187 @@ public:
   /**
    * @copydoc Dali::WebEnginePlugin::Create()
    */
-  virtual void Create( int width, int height, const std::string& locale, const std::string& timezoneId );
+  void Create( int width, int height, const std::string& locale, const std::string& timezoneId ) override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::Destroy()
    */
-  virtual void Destroy();
+  void Destroy() override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::GetNativeImageSource()
    */
-  virtual Dali::NativeImageInterfacePtr GetNativeImageSource();
+  Dali::NativeImageInterfacePtr GetNativeImageSource() override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::LoadUrl()
    */
-  virtual void LoadUrl( const std::string& url );
+  void LoadUrl( const std::string& url ) override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::GetUrl()
    */
-  virtual const std::string& GetUrl();
+  const std::string& GetUrl() override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::LoadHTMLString()
    */
-  virtual void LoadHTMLString( const std::string& string );
+  void LoadHTMLString( const std::string& string ) override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::Reload()
    */
-  virtual void Reload();
+  void Reload() override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::StopLoading()
    */
-  virtual void StopLoading();
+  void StopLoading() override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::Suspend()
+   */
+  void Suspend() override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::Resume()
+   */
+  void Resume() override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::GoBack()
    */
-  virtual void GoBack();
+  void GoBack() override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::GoForward()
    */
-  virtual void GoForward();
+  void GoForward() override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::CanGoBack()
    */
-  virtual bool CanGoBack();
+  bool CanGoBack() override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::CanGoForward()
    */
-  virtual bool CanGoForward();
+  bool CanGoForward() override;
 
   /**
-   * @copydoc Dali::WebEnginePlugin::AddJavaScriptMessageHandler()
+   * @copydoc Dali::WebEnginePlugin::EvaluateJavaScript()
    */
-  virtual void AddJavaScriptMessageHandler( const std::string& exposedObjectName, std::function< void(const std::string&) > handler );
+  void EvaluateJavaScript( const std::string& script, std::function< void(const std::string&) > resultHandler ) override;
 
   /**
-   * @copydoc Dali::WebEnginePlugin::EvaluateJavaScript()
+   * @copydoc Dali::WebEnginePlugin::AddJavaScriptMessageHandler()
    */
-  virtual void EvaluateJavaScript( const std::string& script );
+  void AddJavaScriptMessageHandler( const std::string& exposedObjectName, std::function< void(const std::string&) > handler ) override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::ClearHistory()
    */
-  virtual void ClearHistory();
+  void ClearHistory() override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::ClearCache()
    */
-  virtual void ClearCache();
+  void ClearCache() override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::ClearCookies()
+   */
+  void ClearCookies() override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::GetCacheModel()
+   */
+  Dali::WebEnginePlugin::CacheModel GetCacheModel() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::SetCacheModel()
+   */
+  void SetCacheModel( Dali::WebEnginePlugin::CacheModel cacheModel ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::GetCookieAcceptPolicy()
+   */
+  Dali::WebEnginePlugin::CookieAcceptPolicy GetCookieAcceptPolicy() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::SetCookieAcceptPolicy()
+   */
+  void SetCookieAcceptPolicy( Dali::WebEnginePlugin::CookieAcceptPolicy policy ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::GetUserAgent()
+   */
+  const std::string& GetUserAgent() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::SetUserAgent()
+   */
+  void SetUserAgent( const std::string& userAgent ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::IsJavaScriptEnabled()
+   */
+  bool IsJavaScriptEnabled() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::EnableJavaScript()
+   */
+  void EnableJavaScript( bool enabled ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::AreImagesAutomaticallyLoaded()
+   */
+  bool AreImagesAutomaticallyLoaded() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::LoadImagesAutomatically()
+   */
+  void LoadImagesAutomatically( bool automatic ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::GetDefaultTextEncodingName()
+   */
+  const std::string& GetDefaultTextEncodingName() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::SetDefaultTextEncodingName()
+   */
+  void SetDefaultTextEncodingName( const std::string& defaultTextEncodingName ) override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::GetDefaultFontSize()
+   */
+  int GetDefaultFontSize() const override;
+
+  /**
+   * @copydoc Dali::WebEnginePlugin::SetDefaultFontSize()
+   */
+  void SetDefaultFontSize( int defaultFontSize ) override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::SetSize()
    */
-  virtual void SetSize( int width, int height );
+  void SetSize( int width, int height ) override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::SendTouchEvent()
    */
-  virtual bool SendTouchEvent( const Dali::TouchData& touch );
+  bool SendTouchEvent( const Dali::TouchData& touch ) override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::SendKeyEvent()
    */
-  virtual bool SendKeyEvent( const Dali::KeyEvent& event );
+  bool SendKeyEvent( const Dali::KeyEvent& event ) override;
 
   /**
    * @copydoc Dali::WebEnginePlugin::PageLoadStartedSignal()
    */
-  virtual Dali::WebEnginePlugin::WebEngineSignalType& PageLoadStartedSignal()
+  Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadStartedSignal() override
   {
     return mPageLoadStartedSignal;
   }
@@ -168,11 +253,19 @@ public:
   /**
    * @copydoc Dali::WebEnginePlugin::PageLoadFinishedSignal()
    */
-  virtual Dali::WebEnginePlugin::WebEngineSignalType& PageLoadFinishedSignal()
+  Dali::WebEnginePlugin::WebEnginePageLoadSignalType& PageLoadFinishedSignal() override
   {
     return mPageLoadFinishedSignal;
   }
 
+  /**
+   * @copydoc Dali::WebEnginePlugin::PageLoadErrorSignal()
+   */
+  Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType& PageLoadErrorSignal() override
+  {
+    return mPageLoadErrorSignal;
+  }
+
 private:
 
   void UpdateBuffer();
@@ -216,9 +309,10 @@ private:
   std::function<void(LWE::WebContainer*, const std::string&)> mOnPageStartedHandler;
   std::function<void(LWE::WebContainer*, const std::string&)> mOnLoadResourceHandler;
 
-  EventThreadCallback                        mUpdateBufferTrigger;
-  Dali::WebEnginePlugin::WebEngineSignalType mPageLoadStartedSignal;
-  Dali::WebEnginePlugin::WebEngineSignalType mPageLoadFinishedSignal;
+  EventThreadCallback                                     mUpdateBufferTrigger;
+  Dali::WebEnginePlugin::WebEnginePageLoadSignalType      mPageLoadStartedSignal;
+  Dali::WebEnginePlugin::WebEnginePageLoadSignalType      mPageLoadFinishedSignal;
+  Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType mPageLoadErrorSignal;
 };
 
 } // namespace Plugin