From 1315368b6b601c94806ecfe7f876dfc7812a7bab Mon Sep 17 00:00:00 2001 From: Seoyeon Kim Date: Mon, 16 Oct 2017 11:25:14 +0900 Subject: [PATCH] [Tizen] Implement WebEngineLite interface and plugin for Minimized Web Engine - Applied WebEngineLite implementation in tizen branch. Change-Id: I6e60bc2cf6a372bb40f170479a2891a48acb0386 --- build/tizen/adaptor/Makefile.am | 6 + build/tizen/adaptor/module.list | 4 + build/tizen/configure.ac | 8 +- build/tizen/plugins/Makefile.am | 67 +++++++++ build/tizen/plugins/configure.ac | 11 ++ .../adaptor-framework/web-engine-lite-plugin.h | 82 +++++++++++ .../adaptor-framework/web-engine-lite.cpp | 92 +++++++++++++ dali/devel-api/adaptor-framework/web-engine-lite.h | 130 ++++++++++++++++++ dali/devel-api/file.list | 5 +- .../common/web-engine-lite-impl.cpp | 151 +++++++++++++++++++++ .../web-engine-lite/common/web-engine-lite-impl.h | 137 +++++++++++++++++++ dali/internal/web-engine-lite/file.list | 5 + packaging/dali-adaptor.spec | 77 +++++++++++ plugins/file.list | 3 + plugins/tizen-web-engine-lite.cpp | 75 ++++++++++ plugins/tizen-web-engine-lite.h | 84 ++++++++++++ 16 files changed, 935 insertions(+), 2 deletions(-) mode change 100644 => 100755 build/tizen/plugins/Makefile.am create mode 100644 dali/devel-api/adaptor-framework/web-engine-lite-plugin.h create mode 100644 dali/devel-api/adaptor-framework/web-engine-lite.cpp create mode 100644 dali/devel-api/adaptor-framework/web-engine-lite.h create mode 100644 dali/internal/web-engine-lite/common/web-engine-lite-impl.cpp create mode 100644 dali/internal/web-engine-lite/common/web-engine-lite-impl.h create mode 100644 dali/internal/web-engine-lite/file.list create mode 100644 plugins/tizen-web-engine-lite.cpp create mode 100644 plugins/tizen-web-engine-lite.h diff --git a/build/tizen/adaptor/Makefile.am b/build/tizen/adaptor/Makefile.am index 278db2c..3f699fa 100644 --- a/build/tizen/adaptor/Makefile.am +++ b/build/tizen/adaptor/Makefile.am @@ -64,6 +64,7 @@ LIBDALI_ADAPTOR_LA_SOURCES = \ $(adaptor_text_ubuntu_src_files) \ $(adaptor_resampler_src_files) \ $(adaptor_video_common_src_files) \ + $(adaptor_web_engine_common_src_files) \ $(adaptor_window_system_common_src_files) \ $(adaptor_window_system_ubuntu_x11_src_files) \ $(devel_api_text_abstraction_src_files) \ @@ -108,6 +109,7 @@ LIBDALI_ADAPTOR_LA_SOURCES = \ $(adaptor_text_common_src_files) \ $(adaptor_resampler_src_files) \ $(adaptor_video_common_src_files) \ + $(adaptor_web_engine_common_src_files) \ $(adaptor_window_system_common_src_files) \ $(adaptor_window_system_tizen_mobile_src_files) \ $(adaptor_window_system_tizen_src_files) \ @@ -155,6 +157,7 @@ LIBDALI_ADAPTOR_LA_SOURCES = \ $(adaptor_text_common_src_files) \ $(adaptor_resampler_src_files) \ $(adaptor_video_common_src_files) \ + $(adaptor_web_engine_common_src_files) \ $(adaptor_window_system_common_src_files) \ $(adaptor_window_system_tizen_src_files) \ $(adaptor_window_system_tizen_wayland_src_files) \ @@ -200,6 +203,7 @@ LIBDALI_ADAPTOR_LA_SOURCES = \ $(adaptor_text_common_src_files) \ $(adaptor_resampler_src_files) \ $(adaptor_video_common_src_files) \ + $(adaptor_web_engine_common_src_files) \ $(adaptor_window_system_common_src_files) \ $(adaptor_window_system_tizen_src_files) \ $(adaptor_window_system_tizen_wayland_src_files) \ @@ -244,6 +248,7 @@ LIBDALI_ADAPTOR_LA_SOURCES = \ $(adaptor_text_common_src_files) \ $(adaptor_resampler_src_files) \ $(adaptor_video_common_src_files) \ + $(adaptor_web_engine_common_src_files) \ $(adaptor_window_system_common_src_files) \ $(adaptor_window_system_tizen_src_files) \ $(adaptor_window_system_tizen_wayland_src_files) \ @@ -291,6 +296,7 @@ LIBDALI_ADAPTOR_LA_SOURCES = \ $(adaptor_text_common_src_files) \ $(adaptor_resampler_src_files) \ $(adaptor_video_common_src_files) \ + $(adaptor_web_engine_common_src_files) \ $(adaptor_window_system_common_src_files) \ $(adaptor_window_system_tizen_src_files) \ $(adaptor_window_system_tizen_wayland_src_files) \ diff --git a/build/tizen/adaptor/module.list b/build/tizen/adaptor/module.list index 40c846f..bd5c9cd 100644 --- a/build/tizen/adaptor/module.list +++ b/build/tizen/adaptor/module.list @@ -55,6 +55,10 @@ include ../../../dali/internal/text/file.list adaptor_video_dir = ../../../dali/internal/video include ../../../dali/internal/video/file.list +# Module: web-engine-lite +adaptor_web_engine_dir = ../../../dali/internal/web-engine-lite +include ../../../dali/internal/web-engine-lite/file.list + # Module: window-system adaptor_window_system_dir = ../../../dali/internal/window-system include ../../../dali/internal/window-system/file.list diff --git a/build/tizen/configure.ac b/build/tizen/configure.ac index c0d295d..0197e4f 100644 --- a/build/tizen/configure.ac +++ b/build/tizen/configure.ac @@ -24,9 +24,15 @@ AC_ARG_ENABLE([feedback], [enable_feedback=yes], [enable_feedback=no]) +AC_ARG_ENABLE([web_engine_lite], + [AC_HELP_STRING([ --enable-web-engine-lite], + [Enable web engine lite plugin])], + [enable_web_engine_lite=yes], + [enable_web_engine_lite=no]) + AC_CONFIG_SUBDIRS(adaptor) -if test "x$enable_feedback" = "xyes"; then +if test "x$enable_feedback" = "xyes"|| test "x$enable_web_engine_lite" = "xyes"; then # build dali-adaptor & plugins AC_CONFIG_SUBDIRS(plugins) fi diff --git a/build/tizen/plugins/Makefile.am b/build/tizen/plugins/Makefile.am old mode 100644 new mode 100755 index bdbd546..1197157 --- a/build/tizen/plugins/Makefile.am +++ b/build/tizen/plugins/Makefile.am @@ -31,12 +31,20 @@ if USE_FEEDBACK lib_LTLIBRARIES += libdali-feedback-plugin.la endif +if USE_WEBENGINELITE +lib_LTLIBRARIES += libdali-web-engine-lite-plugin.la +endif + else # ENABLE_CXX03_ABI if USE_FEEDBACK lib_LTLIBRARIES += libdali-feedback-plugin-cxx11.la endif +if USE_WEBENGINELITE +lib_LTLIBRARIES += libdali-web-engine-lite-plugin-cxx11.la +endif + endif # ENABLE_CXX03_ABI if USE_FEEDBACK @@ -73,6 +81,35 @@ LIBDALI_FEEDBACK_PLUGIN_LA_LIBADD += \ endif +if USE_WEBENGINELITE +LIBDALI_WEB_ENGINE_LITE_PLUGIN_LA_SOURCES = \ + $(web_engine_lite_plugin_src_files) + +libdali_web_engine_lite_plugin_la_DEPENDENCIES = + +LIBDALI_WEB_ENGINE_LITE_PLUGIN_LA_CXXFLAGS = -DDALI_COMPILATION \ + $(DLOG_CFLAGS) \ + $(DALICORE_CFLAGS) \ + $(WEB_ENGINE_LITE_CFLAGS) \ + $(DALI_PROFILE_CFLAGS) \ + $(DALI_ADAPTOR_CFLAGS) \ + -I../../../adaptors/public-api \ + -I../../../adaptors/integration-api \ + -I../../../adaptors/public-api/adaptor-framework \ + -I../../../adaptors/devel-api/adaptor-framework \ + -I/usr/include/lightweight-web-engine \ + -Werror -Wall + +LIBDALI_WEB_ENGINE_LITE_PLUGIN_LA_LIBADD = \ + $(DALICORE_LIBS) \ + $(DLOG_LIBS) \ + -llightweight-web-engine + +LIBDALI_WEB_ENGINE_LITE_PLUGIN_LA_LDFLAGS = \ + -rdynamic + +endif # WEB_ENGINE_LITE + if ENABLE_CXX03_ABI if USE_FEEDBACK @@ -90,6 +127,21 @@ install: install-am endif endif +if USE_WEBENGINELITE +libdali_web_engine_lite_plugin_la_SOURCES = $(LIBDALI_WEB_ENGINE_LITE_PLUGIN_LA_SOURCES) +libdali_web_engine_lite_plugin_la_LIBADD = $(LIBDALI_WEB_ENGINE_LITE_PLUGIN_LA_LIBADD) +libdali_web_engine_lite_plugin_la_CXXFLAGS = $(LIBDALI_WEB_ENGINE_LITE_PLUGIN_LA_CXXFLAGS) +libdali_web_engine_lite_plugin_la_LDFLAGS = $(LIBDALI_WEB_ENGINE_LITE_PLUGIN_LA_LDFLAGS) + +if ENABLE_RENAME_SO +#rename +install: install-am + rm -rf $(libdir)/libdali_web_engine_lite_plugin.so + rm -rf $(libdir)/libdali_web_engine_lite_plugin-cxx03.so + ln -s $(libdir)/libdali_web_engine_lite_plugin.so.0.0.* $(libdir)/libdali_web_engine_lite_plugin-cxx03.so +endif +endif + else # CXX03 if USE_FEEDBACK @@ -107,4 +159,19 @@ install: install-am endif endif +if USE_WEBENGINELITE +libdali_web_engine_lite_plugin_cxx11_la_SOURCES = $(LIBDALI_WEB_ENGINE_LITE_PLUGIN_LA_SOURCES) +libdali_web_engine_lite_plugin_cxx11_la_LIBADD = $(LIBDALI_WEB_ENGINE_LITE_PLUGIN_LA_LIBADD) +libdali_web_engine_lite_plugin_cxx11_la_CXXFLAGS = $(LIBDALI_WEB_ENGINE_LITE_PLUGIN_LA_CXXFLAGS) +libdali_web_engine_lite_plugin_cxx11_la_LDFLAGS = $(LIBDALI_WEB_ENGINE_LITE_PLUGIN_LA_LDFLAGS) + +if ENABLE_RENAME_SO +#rename +install: install-am + rm -rf $(libdir)/libdali_web_engine_lite_plugin-cxx11.so + rm -rf $(libdir)/libdali_web_engine_lite_plugin.so + ln -s $(libdir)/libdali_web_engine_lite_plugin-cxx11.so.0.0.* $(libdir)/libdali_web_engine_lite_plugin.so +endif +endif + endif # CXX03 diff --git a/build/tizen/plugins/configure.ac b/build/tizen/plugins/configure.ac index 83b8a95..cabafda 100644 --- a/build/tizen/plugins/configure.ac +++ b/build/tizen/plugins/configure.ac @@ -23,6 +23,7 @@ AM_CONDITIONAL([UBUNTU_PROFILE], [test x$enable_profile = xUBUNTU]) AM_CONDITIONAL([WAYLAND], [test x$enable_wayland = xyes]) AM_CONDITIONAL([USE_FEEDBACK], [test x$enable_feedback = xyes]) +AM_CONDITIONAL([USE_WEBENGINELITE], [test x$enable_web_engine_lite = xyes]) AM_CONDITIONAL([ENABLE_CXX03_ABI], [test x$enable_cxx03_abi = xyes]) AM_CONDITIONAL([ENABLE_RENAME_SO], [test x$enable_rename_so = xyes]) @@ -40,6 +41,16 @@ PKG_CHECK_MODULES(MMFSOUND, mm-sound) fi # check UNBUNTU fi # enable_feedback +if test "x$enable_web_engine_lite" = "xyes"; then +if test "x$enable_profile" != "xUBUNTU"; then + +PKG_CHECK_MODULES(FEEDBACK, feedback) +PKG_CHECK_MODULES(WEBENGINELITE, lightweight-web-engine) +#PKG_CHECK_MODULES(MMFSOUND, mm-sound) + +fi # check UNBUNTU +fi # enable_web_engine_lite + AC_CONFIG_FILES(Makefile) AC_OUTPUT diff --git a/dali/devel-api/adaptor-framework/web-engine-lite-plugin.h b/dali/devel-api/adaptor-framework/web-engine-lite-plugin.h new file mode 100644 index 0000000..d60f9b7 --- /dev/null +++ b/dali/devel-api/adaptor-framework/web-engine-lite-plugin.h @@ -0,0 +1,82 @@ +#ifndef __DALI_WEBENGINELITE_PLUGIN_H__ +#define __DALI_WEBENGINELITE_PLUGIN_H__ + +/* + * Copyright (c) 2017 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 + +namespace Dali +{ + +/** + * @brief WebEngineLitePlugin is an abstract interface, used by dali-adaptor to access WebEngineLite plugin. + * A concrete implementation must be created for each platform and provided as dynamic library. + */ +class WebEngineLitePlugin +{ +public: + + typedef Signal< void () > WebEngineLiteSignalType; + + /** + * @brief Constructor. + */ + WebEngineLitePlugin(){} + + /** + * @brief Destructor. + */ + virtual ~WebEngineLitePlugin(){} + + /** + * @brief Creates WebEngineLite instance. + * + * @param [in] width The width of Web + * @param [in] height The height of Web + * @param [in] windowX The x position of window + * @param [in] windowY The y position of window + * @param [in] locale The locale of Web + * @param [in] timezoneID The timezoneID of Web + */ + virtual void CreateInstance(int width, int height, int windowX, int windowY, const std::string& locale, const std::string& timezoneID) = 0; + + /** + * @brief Destroys WebEngineLite instance. + */ + virtual void DestroyInstance() = 0; + + /** + * @brief Loads a html. + * + * @param [in] path The path of Web + */ + virtual void LoadHtml(const std::string& path) = 0; + + /** + * @brief Connect to this signal to be notified when a web view has finished. + * + * @return A signal object to connect with. + */ + virtual WebEngineLiteSignalType& FinishedSignal() = 0; + +}; + +} // namespace Dali; + +#endif diff --git a/dali/devel-api/adaptor-framework/web-engine-lite.cpp b/dali/devel-api/adaptor-framework/web-engine-lite.cpp new file mode 100644 index 0000000..f800a62 --- /dev/null +++ b/dali/devel-api/adaptor-framework/web-engine-lite.cpp @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2017 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. + * + */ + +// CLASS HEADER +#include "web-engine-lite.h" + +// INTERNAL INCLUDES +#include + +namespace Dali +{ + +WebEngineLite::WebEngineLite() +{ +} + +WebEngineLite::WebEngineLite( Internal::Adaptor::WebEngineLite* internal ) +: BaseHandle( internal ) +{ +} + +WebEngineLite::~WebEngineLite() +{ +} + +WebEngineLite WebEngineLite::New() +{ + Internal::Adaptor::WebEngineLitePtr webEngineLite = Internal::Adaptor::WebEngineLite::New(); + + if( webEngineLite ) + { + webEngineLite->Initialize(); + } + + return WebEngineLite( webEngineLite.Get() ); +} + +WebEngineLite::WebEngineLite( const WebEngineLite& webEngineLite ) +: BaseHandle( webEngineLite ) +{ +} + +WebEngineLite& WebEngineLite::operator=( const WebEngineLite& webEngineLite ) +{ + if( *this != webEngineLite ) + { + BaseHandle::operator=( webEngineLite ); + } + return *this; +} + +WebEngineLite WebEngineLite::DownCast( BaseHandle handle ) +{ + return WebEngineLite( dynamic_cast< Internal::Adaptor::WebEngineLite* >( handle.GetObjectPtr() ) ); +} + +void WebEngineLite::CreateInstance(int width, int height, int windowX, int windowY, const std::string& locale, const std::string& timezoneID) +{ + GetImplementation( *this ).CreateInstance(width, height, windowX, windowY, locale, timezoneID); +} + +void WebEngineLite::DestroyInstance() +{ + GetImplementation( *this ).DestroyInstance(); +} + +void WebEngineLite::LoadHtml(const std::string& path) +{ + return GetImplementation( *this ).LoadHtml(path); +} + +Dali::WebEngineLitePlugin::WebEngineLiteSignalType& WebEngineLite::FinishedSignal() +{ + return GetImplementation( *this ).FinishedSignal(); +} + +} // namespace Dali; + diff --git a/dali/devel-api/adaptor-framework/web-engine-lite.h b/dali/devel-api/adaptor-framework/web-engine-lite.h new file mode 100644 index 0000000..1967695 --- /dev/null +++ b/dali/devel-api/adaptor-framework/web-engine-lite.h @@ -0,0 +1,130 @@ +#ifndef __DALI_WEBENGINELITE_H__ +#define __DALI_WEBENGINELITE_H__ + +/* + * Copyright (c) 2017 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 + +//INTERNAL INCLUDES +#include "web-engine-lite-plugin.h" + +namespace Dali +{ + +namespace Internal +{ + +namespace Adaptor +{ + class WebEngineLite; +} // namespace Adaptor + +} // namespace Internal + +/** + * @brief WebEngineLite class is used for Web. + */ +class DALI_IMPORT_API WebEngineLite: public BaseHandle +{ +public: + + /** + * @brief Constructor. + */ + WebEngineLite(); + + /** + * @brief Destructor. + */ + ~WebEngineLite(); + + /** + * @brief Creates a new instance of a WebEngineLite. + */ + static WebEngineLite New(); + + /** + * @brief Copy constructor. + * + * @param[in] webEngineLite WebEngineLite to copy. The copied webEngineLite will point at the same implementation + */ + WebEngineLite( const WebEngineLite& webEngineLite ); + + /** + * @brief Assignment operator. + * + * @param[in] webEngineLite The WebEngineLite to assign from. + * @return The updated WebEngineLite. + */ + WebEngineLite& operator=( const WebEngineLite& webEngineLite ); + + /** + * @brief Downcast a handle to WebEngineLite handle. + * + * If handle points to a WebEngineLite the downcast produces valid + * handle. If not the returned handle is left uninitialized. + * + * @param[in] handle Handle to an object + * @return Handle to a WebEngineLite or an uninitialized handle + */ + static WebEngineLite DownCast( BaseHandle handle ); + + /** + * @brief Creates WebEngineLite instance. + * + * @param [in] width The width of Web + * @param [in] height The height of Web + * @param [in] windowX The x position of window + * @param [in] windowY The y position of window + * @param [in] locale The locale of Web + * @param [in] timezoneID The timezoneID of Web + */ + void CreateInstance(int width, int height, int windowX, int windowY, const std::string& locale, const std::string& timezoneID); + + /** + * @brief Destroys WebEngineLite instance. + */ + void DestroyInstance(); + + /** + * @brief Loads a html. + * + * @param [in] path The path of Web + */ + void LoadHtml(const std::string& path); + + /** + * @brief Connect to this signal to be notified when a web view has finished. + * + * @return A signal object to connect with. + */ + Dali::WebEngineLitePlugin::WebEngineLiteSignalType& FinishedSignal(); + +private: // Not intended for application developers + + /** + * @brief Internal constructor + */ + explicit DALI_INTERNAL WebEngineLite( Internal::Adaptor::WebEngineLite* internal ); +}; + +} // namespace Dali; + +#endif + diff --git a/dali/devel-api/file.list b/dali/devel-api/file.list index 6ca2599..63df564 100644 --- a/dali/devel-api/file.list +++ b/dali/devel-api/file.list @@ -26,7 +26,8 @@ devel_api_src_files = \ $(adaptor_devel_api_dir)/adaptor-framework/tilt-sensor.cpp \ $(adaptor_devel_api_dir)/adaptor-framework/lifecycle-controller.cpp \ $(adaptor_devel_api_dir)/adaptor-framework/video-player.cpp \ - $(adaptor_devel_api_dir)/adaptor-framework/virtual-keyboard.cpp + $(adaptor_devel_api_dir)/adaptor-framework/virtual-keyboard.cpp \ + $(adaptor_devel_api_dir)/adaptor-framework/web-engine-lite.cpp devel_api_adaptor_framework_header_files = \ @@ -62,6 +63,8 @@ devel_api_adaptor_framework_header_files = \ $(adaptor_devel_api_dir)/adaptor-framework/tilt-sensor.h \ $(adaptor_devel_api_dir)/adaptor-framework/video-player.h \ $(adaptor_devel_api_dir)/adaptor-framework/video-player-plugin.h \ + $(adaptor_devel_api_dir)/adaptor-framework/web-engine-lite.h \ + $(adaptor_devel_api_dir)/adaptor-framework/web-engine-lite-plugin.h \ $(adaptor_devel_api_dir)/adaptor-framework/key-extension-plugin.h \ $(adaptor_devel_api_dir)/adaptor-framework/virtual-keyboard.h \ $(adaptor_devel_api_dir)/adaptor-framework/physical-keyboard.h \ diff --git a/dali/internal/web-engine-lite/common/web-engine-lite-impl.cpp b/dali/internal/web-engine-lite/common/web-engine-lite-impl.cpp new file mode 100644 index 0000000..8b399b3 --- /dev/null +++ b/dali/internal/web-engine-lite/common/web-engine-lite-impl.cpp @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2017 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. + * + */ + +// CLASS HEADER +#include "web-engine-lite-impl.h" + +// EXTERNAL INCLUDES +#include +#include +#include +#include + + +namespace Dali +{ + +namespace Internal +{ + +namespace Adaptor +{ + +namespace // unnamed namespace +{ +const char* WEB_ENGINE_LITE_PLUGIN_SO( "libdali-web-engine-lite-plugin.so" ); + +Dali::BaseHandle Create() +{ + return Dali::WebEngineLite::New(); +} + +Dali::TypeRegistration type( typeid( Dali::WebEngineLite ), typeid( Dali::BaseHandle ), Create ); + +} // unnamed namespace + +WebEngineLitePtr WebEngineLite::New() +{ + WebEngineLitePtr webEngineLite = new WebEngineLite(); + return webEngineLite; +} + +WebEngineLite::WebEngineLite() +: mPlugin( NULL ), + mHandle( NULL ), + mCreateWebEngineLitePtr( NULL ), + mDestroyWebEngineLitePtr( NULL ) +{ +} + +WebEngineLite::~WebEngineLite() +{ + if( mHandle != NULL ) + { + if( mDestroyWebEngineLitePtr != NULL ) + { + mDestroyWebEngineLitePtr( mPlugin ); + } + + dlclose( mHandle ); + } +} + +void WebEngineLite::Initialize() +{ + char* error = NULL; + + mHandle = dlopen( WEB_ENGINE_LITE_PLUGIN_SO, RTLD_LAZY ); + + error = dlerror(); + if( mHandle == NULL || error != NULL ) + { + DALI_LOG_ERROR( "WebEngineLite::Initialize(), dlopen error: %s\n", error ); + return; + } + + mCreateWebEngineLitePtr = reinterpret_cast< CreateWebEngineLiteFunction >( dlsym( mHandle, "CreateWebEngineLitePlugin" ) ); + if( mCreateWebEngineLitePtr == NULL ) + { + DALI_LOG_ERROR( "Can't load symbol CreateWebEngineLitePlugin(), error: %s\n", error ); + return; + } + + mPlugin = mCreateWebEngineLitePtr(); + + if( mPlugin == NULL ) + { + DALI_LOG_ERROR( "Can't create the WebEngineLitePlugin object\n" ); + return; + } + + mDestroyWebEngineLitePtr = reinterpret_cast< DestroyWebEngineLiteFunction >( dlsym( mHandle, "DestroyWebEngineLitePlugin" ) ); + if( mDestroyWebEngineLitePtr == NULL ) + { + DALI_LOG_ERROR( "Can't load symbol DestroyWebEngineLitePlugin(), error: %s\n", error ); + return; + } + +} + +void WebEngineLite::CreateInstance(int width, int height, int windowX, int windowY, const std::string& locale, const std::string& timezoneID) +{ + if( mPlugin != NULL ) + { + mPlugin->CreateInstance(width, height, windowX, windowY, locale, timezoneID); + } +} + +void WebEngineLite::DestroyInstance() +{ + if( mPlugin != NULL ) + { + mPlugin->DestroyInstance(); + } +} + +void WebEngineLite::LoadHtml(const std::string& path) +{ + if( mPlugin != NULL ) + { + mPlugin->LoadHtml(path); + } +} + +Dali::WebEngineLitePlugin::WebEngineLiteSignalType& WebEngineLite::FinishedSignal() +{ + if( mPlugin != NULL ) + { + return mPlugin->FinishedSignal(); + } + + return mFinishedSignal; +} + +} // namespace Adaptor; +} // namespace Internal; +} // namespace Dali; + diff --git a/dali/internal/web-engine-lite/common/web-engine-lite-impl.h b/dali/internal/web-engine-lite/common/web-engine-lite-impl.h new file mode 100644 index 0000000..8b9e70b --- /dev/null +++ b/dali/internal/web-engine-lite/common/web-engine-lite-impl.h @@ -0,0 +1,137 @@ +#ifndef __DALI_WEBENGINELITE_IMPL_H__ +#define __DALI_WEBENGINELITE_IMPL_H__ + +/* + * Copyright (c) 2017 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 + +// INTERNAL INCLUDES +#include +#include + +namespace Dali +{ +class Any; + +namespace Internal +{ + +namespace Adaptor +{ + +class WebEngineLite; + +typedef IntrusivePtr< WebEngineLite > WebEngineLitePtr; + +/** + * @brief WebEngineLite class is used for Web. + */ +class WebEngineLite: public Dali::BaseObject +{ +public: + + /** + * @brief Creates a new WebEngineLite handle + * + * @return WebEngineLite pointer + */ + static WebEngineLitePtr New(); + + /** + * @copydoc Dali::WebEngineLite::CreateInstance() + */ + void CreateInstance(int width, int height, int windowX, int windowY, const std::string& locale, const std::string& timezoneID); + + /** + * @copydoc Dali::WebEngineLite::DestroyInstance() + */ + void DestroyInstance(); + + /** + * @copydoc Dali::WebEngineLite::LoadHtml() + */ + void LoadHtml(const std::string& path); + + /** + * @copydoc Dali::WebEngineLite::FinishedSignal() + */ + Dali::WebEngineLitePlugin::WebEngineLiteSignalType& FinishedSignal(); + + /** + * @brief Initializes member data. + */ + void Initialize(); + +private: + + /** + * @brief Constructor. + */ + WebEngineLite(); + + /** + * @brief Destructor. + */ + virtual ~WebEngineLite(); + + // Undefined copy constructor + WebEngineLite( const WebEngineLite& webEngineLite ); + + // Undefined assignment operator + WebEngineLite& operator=( const WebEngineLite& webEngineLite ); + +private: + + Dali::WebEngineLitePlugin* mPlugin; ///< WebEngineLite plugin handle + void* mHandle; ///< Handle for the loaded library + + typedef Dali::WebEngineLitePlugin* (*CreateWebEngineLiteFunction)(); + typedef void (*DestroyWebEngineLiteFunction)( Dali::WebEngineLitePlugin* plugin ); + + CreateWebEngineLiteFunction mCreateWebEngineLitePtr; + DestroyWebEngineLiteFunction mDestroyWebEngineLitePtr; + + Dali::WebEngineLitePlugin::WebEngineLiteSignalType mFinishedSignal; +}; + +} // namespace Adaptor +} // namespace Internal + +inline static Internal::Adaptor::WebEngineLite& GetImplementation( Dali::WebEngineLite& webEngineLite ) +{ + DALI_ASSERT_ALWAYS( webEngineLite && "WebEngineLite handle is empty." ); + + BaseObject& handle = webEngineLite.GetBaseObject(); + + return static_cast< Internal::Adaptor::WebEngineLite& >( handle ); +} + +inline static const Internal::Adaptor::WebEngineLite& GetImplementation( const Dali::WebEngineLite& webEngineLite ) +{ + DALI_ASSERT_ALWAYS( webEngineLite && "WebEngineLite handle is empty." ); + + const BaseObject& handle = webEngineLite.GetBaseObject(); + + return static_cast< const Internal::Adaptor::WebEngineLite& >( handle ); +} + +} // namespace Dali; + +#endif + diff --git a/dali/internal/web-engine-lite/file.list b/dali/internal/web-engine-lite/file.list new file mode 100644 index 0000000..f78c4ed --- /dev/null +++ b/dali/internal/web-engine-lite/file.list @@ -0,0 +1,5 @@ + + +# module: web-engine, backend: common +adaptor_web_engine_common_src_files=\ + ${adaptor_web_engine_dir}/common/web-engine-lite-impl.cpp diff --git a/packaging/dali-adaptor.spec b/packaging/dali-adaptor.spec index c94f3f9..817a319 100644 --- a/packaging/dali-adaptor.spec +++ b/packaging/dali-adaptor.spec @@ -138,6 +138,12 @@ BuildRequires: pkgconfig(mm-sound) BuildRequires: pkgconfig(feedback) %endif +# for Web Engine Lite Plugin +%if 0%{?enable_web_engine_lite} +BuildRequires: lightweight-web-engine +BuildRequires: lightweight-web-engine-devel +%endif + # for multiprofile Requires: %{name}-compat = %{version}-%{release} Recommends: %{name}-profile_common = %{version}-%{release} @@ -368,6 +374,16 @@ Requires: %{name} = %{version}-%{release} %description dali-feedback-plugin Feedback plugin to play haptic and audio feedback for Dali +############################## +# Dali WebEngineLite Plugin +############################## + +%package dali-web-engine-lite-plugin +Summary: Plugin WebEngineLite for Dali +Group: System/Libraries +%description dali-web-engine-lite-plugin +WebEngineLite plugin for Dali + %if !0%{?disable_cxx03_build} ############################## # Dali Feedback Plugin cxx03 @@ -380,6 +396,15 @@ Requires: %{name}-cxx03 = %{version}-%{release} %description dali-feedback-plugin-cxx03 Feedback plugin to play haptic and audio feedback for Dali +############################## +# Dali WebEngineLite Plugin +############################## + +%package dali-web-engine-lite-plugin-cxx03 +Summary: Plugin WebEngineLite for Dali with cxx03 abi +Group: System/Libraries +%description dali-web-engine-lite-plugin-cxx03 +WebEngineLite plugin for Dali %endif ############################## @@ -476,6 +501,9 @@ TIZEN_PLATFORM_CONFIG_SUPPORTED="%{tizen_platform_config_supported}" ; export TI %else --enable-efl=yes \ %endif +%if 0%{?enable_web_engine_lite} + --enable-web-engine-lite \ +%endif %if 0%{?enable_debug} --enable-debug \ %endif @@ -518,6 +546,9 @@ make clean %else --enable-efl=yes \ %endif +%if 0%{?enable_web_engine_lite} + --enable-web-engine-lite \ +%endif %if 0%{?enable_debug} --enable-debug \ %endif @@ -559,6 +590,9 @@ make clean %else --enable-efl=yes \ %endif +%if 0%{?enable_web_engine_lite} + --enable-web-engine-lite \ +%endif %if 0%{?enable_debug} --enable-debug \ %endif @@ -600,6 +634,9 @@ make clean %else --enable-efl=yes \ %endif +%if 0%{?enable_web_engine_lite} + --enable-web-engine-lite \ +%endif %if 0%{?enable_debug} --enable-debug \ %endif @@ -643,6 +680,9 @@ make clean %else --enable-efl=yes \ %endif +%if 0%{?enable_web_engine_lite} + --enable-web-engine-lite \ +%endif %if 0%{?enable_debug} --enable-debug \ %endif @@ -694,6 +734,9 @@ make clean %else --enable-efl=yes \ %endif +%if 0%{?enable_web_engine_lite} + --enable-web-engine-lite \ +%endif %if 0%{?enable_debug} --enable-debug \ %endif @@ -737,6 +780,9 @@ make clean %else --enable-efl=yes \ %endif +%if 0%{?enable_web_engine_lite} + --enable-web-engine-lite \ +%endif %if 0%{?enable_debug} --enable-debug \ %endif @@ -779,6 +825,9 @@ make clean %else --enable-efl=yes \ %endif +%if 0%{?enable_web_engine_lite} + --enable-web-engine-lite \ +%endif %if 0%{?enable_debug} --enable-debug \ %endif @@ -821,6 +870,9 @@ make clean %else --enable-efl=yes \ %endif +%if 0%{?enable_web_engine_lite} + --enable-web-engine-lite \ +%endif %if 0%{?enable_debug} --enable-debug \ %endif @@ -864,6 +916,9 @@ make clean %else --enable-efl=yes \ %endif +%if 0%{?enable_web_engine_lite} + --enable-web-engine-lite \ +%endif %if 0%{?enable_debug} --enable-debug \ %endif @@ -990,6 +1045,12 @@ exit 0 /sbin/ldconfig exit 0 +#%if %{with wayland} +%post dali-web-engine-lite-plugin +/sbin/ldconfig +exit 0 +#%endif + ############################## # This is for backward-compatibility. This does not deteriorate 4.0 Configurability @@ -1174,6 +1235,14 @@ exit 0 #%endif %if 0%{?tizen_version_major} >= 3 +%if 0%{?enable_web_engine_lite} +%files dali-web-engine-lite-plugin-cxx03 +%manifest dali-adaptor.manifest +%defattr(-,root,root,-) +%{_libdir}/libdali-web-engine-lite-plugin.so* +%license LICENSE +%endif + %files dali-feedback-plugin-cxx03 %manifest dali-adaptor.manifest %defattr(-,root,root,-) @@ -1185,6 +1254,14 @@ exit 0 ################################################# %if 0%{?tizen_version_major} >= 3 +%if 0%{?enable_web_engine_lite} +%files dali-web-engine-lite-plugin +%manifest dali-adaptor.manifest +%defattr(-,root,root,-) +%{_libdir}/libdali-web-engine-lite-plugin-cxx11.so* +%license LICENSE +%endif + %files dali-feedback-plugin %manifest dali-adaptor.manifest %defattr(-,root,root,-) diff --git a/plugins/file.list b/plugins/file.list index 80ab92b..8b5f618 100644 --- a/plugins/file.list +++ b/plugins/file.list @@ -2,3 +2,6 @@ feedback_plugin_src_files = \ $(plugin_src_dir)/dali-feedback.cpp + +web_engine_lite_plugin_src_files = \ + $(plugin_src_dir)/tizen-web-engine-lite.cpp \ No newline at end of file diff --git a/plugins/tizen-web-engine-lite.cpp b/plugins/tizen-web-engine-lite.cpp new file mode 100644 index 0000000..36aa1fb --- /dev/null +++ b/plugins/tizen-web-engine-lite.cpp @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2017 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. + * + */ + +// CLASS HEADER +#include "tizen-web-engine-lite.h" + +// The plugin factories +extern "C" DALI_EXPORT_API Dali::WebEngineLitePlugin* CreateWebEngineLitePlugin( void ) +{ + return new Dali::Plugin::TizenWebEngineLite; +} + +extern "C" DALI_EXPORT_API void DestroyWebEngineLitePlugin( Dali::WebEngineLitePlugin* plugin ) +{ + if( plugin != NULL ) + { + delete plugin; + } +} + +namespace Dali +{ + +namespace Plugin +{ + +namespace +{ +} // unnamed namespace + +TizenWebEngineLite::TizenWebEngineLite() +: mWebEngineLiteInstance( NULL ) +{ +} + +TizenWebEngineLite::~TizenWebEngineLite() +{ +} + +void TizenWebEngineLite::CreateInstance(int width, int height, int windowX, int windowY, const std::string& locale, const std::string& timezoneID) +{ + mWebEngineLiteInstance = starfishCreate(NULL, width, height, windowX, windowY, locale.c_str(), timezoneID.c_str(), 1); +} + +void TizenWebEngineLite::DestroyInstance() +{ + starfishRemove(mWebEngineLiteInstance); +} + +void TizenWebEngineLite::LoadHtml(const std::string& path) +{ + starfishLoadHTMLDocument(mWebEngineLiteInstance, path.c_str()); +} + +Dali::WebEngineLitePlugin::WebEngineLiteSignalType& TizenWebEngineLite::FinishedSignal() +{ + return mFinishedSignal; +} + +} // namespace Plugin +} // namespace Dali; diff --git a/plugins/tizen-web-engine-lite.h b/plugins/tizen-web-engine-lite.h new file mode 100644 index 0000000..bda8ca3 --- /dev/null +++ b/plugins/tizen-web-engine-lite.h @@ -0,0 +1,84 @@ +#ifndef __DALI_TIZEN_WebEngineLite_PLUGIN_H__ +#define __DALI_TIZEN_WebEngineLite_PLUGIN_H__ + +/* + * Copyright (c) 2017 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 +#include + +// INTERNAL INCLUDES +#include "StarFishPublic.h" +#include +#include + +namespace Dali +{ + +namespace Plugin +{ + +/** + * @brief Implementation of the Tizen WebEngineLite class which has Tizen platform dependency. + */ +class TizenWebEngineLite : public Dali::WebEngineLitePlugin, public Dali::ConnectionTracker +{ +public: + + /** + * @brief Constructor. + */ + TizenWebEngineLite(); + + /** + * @brief Destructor. + */ + virtual ~TizenWebEngineLite(); + + /** + * @copydoc Dali::WebEngineLitePlugin::CreateInstance() + */ + virtual void CreateInstance(int width, int height, int windowX, int windowY, const std::string& locale, const std::string& timezoneID); + + /** + * @copydoc Dali::WebEngineLitePlugin::DestroyInstance() + */ + virtual void DestroyInstance(); + + /** + * @copydoc Dali::WebEngineLitePlugin::LoadHtml() + */ + virtual void LoadHtml(const std::string& path); + + /** + * @copydoc Dali::WebEngineLitePlugin::FinishedSignal() + */ + virtual Dali::WebEngineLitePlugin::WebEngineLiteSignalType& FinishedSignal(); + +private: + StarFishInstance* mWebEngineLiteInstance; + +public: + + Dali::WebEngineLitePlugin::WebEngineLiteSignalType mFinishedSignal; +}; + +} // namespace Plugin +} // namespace Dali; + +#endif -- 2.7.4