X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fweb-engine%2Fcommon%2Fweb-engine-impl.cpp;h=f4753f0700d36ac24abede7e7bdebab5beb15580;hb=7f9f13e07e11fb8acbe4d0efdd04a5fa24b01348;hp=988462daf5ce520b070de6248e169ec241c08ed7;hpb=9942dff874fa63dd6de76e709c3cfc22521fb701;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git diff --git a/dali/internal/web-engine/common/web-engine-impl.cpp b/dali/internal/web-engine/common/web-engine-impl.cpp old mode 100644 new mode 100755 index 988462d..f4753f0 --- a/dali/internal/web-engine/common/web-engine-impl.cpp +++ b/dali/internal/web-engine/common/web-engine-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 Samsung Electronics Co., Ltd. + * 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. @@ -19,125 +19,171 @@ #include // EXTERNAL INCLUDES -#include #include -#include #include +#include +#include + +// INTERNAL INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include namespace Dali { - namespace Internal { - namespace Adaptor { - namespace // unnamed namespace { +constexpr char const* const kPluginFullNamePrefix = "libdali2-web-engine-"; +constexpr char const* const kPluginFullNamePostfix = "-plugin.so"; +constexpr char const* const kPluginFullNameDefault = "libdali2-web-engine-plugin.so"; -const char* WEB_ENGINE_PLUGIN_SO( "libdali-web-engine-plugin.so" ); +// Note: Dali WebView policy does not allow to use multiple web engines in an application. +// So once pluginName is set to non-empty string, it will not change. +std::string pluginName; + +std::string MakePluginName(const char* environmentName) +{ + std::stringstream fullName; + fullName << kPluginFullNamePrefix << environmentName << kPluginFullNamePostfix; + return std::move(fullName.str()); +} Dali::BaseHandle Create() { return Dali::WebEngine::New(); } -Dali::TypeRegistration type( typeid( Dali::WebEngine ), typeid( Dali::BaseHandle ), Create ); +Dali::TypeRegistration type(typeid(Dali::WebEngine), typeid(Dali::BaseHandle), Create); } // unnamed namespace WebEnginePtr WebEngine::New() { - WebEnginePtr ptr; - WebEngine* engine = new WebEngine(); + WebEngine* instance = new WebEngine(); - if ( !engine->Initialize() ) + if(!instance->Initialize()) { - delete engine; - engine = nullptr; + delete instance; + return nullptr; } - ptr = engine; - return ptr; + return instance; } WebEngine::WebEngine() -: mPlugin( NULL ), - mHandle( NULL ), - mCreateWebEnginePtr( NULL ), - mDestroyWebEnginePtr( NULL ) +: mPlugin(NULL), + mHandle(NULL), + mCreateWebEnginePtr(NULL), + mDestroyWebEnginePtr(NULL) { } WebEngine::~WebEngine() { - if( mHandle != NULL ) + if(mHandle != NULL) { - if( mDestroyWebEnginePtr != NULL ) + if(mDestroyWebEnginePtr != NULL) { mPlugin->Destroy(); - mDestroyWebEnginePtr( mPlugin ); + mDestroyWebEnginePtr(mPlugin); + } + + dlclose(mHandle); + } +} + +bool WebEngine::InitializePluginHandle() +{ + if(pluginName.length() == 0) + { + // pluginName is not initialized yet. + const char* name = EnvironmentVariable::GetEnvironmentVariable(DALI_ENV_WEB_ENGINE_NAME); + if(name) + { + pluginName = MakePluginName(name); + mHandle = dlopen(pluginName.c_str(), RTLD_LAZY); + if(mHandle) + { + return true; + } } + pluginName = std::string(kPluginFullNameDefault); + } - dlclose( mHandle ); + mHandle = dlopen(pluginName.c_str(), RTLD_LAZY); + if(!mHandle) + { + DALI_LOG_ERROR("Can't load %s : %s\n", pluginName.c_str(), dlerror()); + return false; } + + return true; } bool WebEngine::Initialize() { char* error = NULL; - mHandle = dlopen( WEB_ENGINE_PLUGIN_SO, RTLD_LAZY ); - - error = dlerror(); - if( mHandle == NULL || error != NULL ) + if(!InitializePluginHandle()) { - DALI_LOG_ERROR( "WebEngine::Initialize(), dlopen error: %s\n", error ); return false; } - mCreateWebEnginePtr = reinterpret_cast< CreateWebEngineFunction >( dlsym( mHandle, "CreateWebEnginePlugin" ) ); - if( mCreateWebEnginePtr == NULL ) + mCreateWebEnginePtr = reinterpret_cast(dlsym(mHandle, "CreateWebEnginePlugin")); + if(mCreateWebEnginePtr == NULL) { - DALI_LOG_ERROR( "Can't load symbol CreateWebEnginePlugin(), error: %s\n", error ); + DALI_LOG_ERROR("Can't load symbol CreateWebEnginePlugin(), error: %s\n", error); return false; } - mPlugin = mCreateWebEnginePtr(); + mDestroyWebEnginePtr = reinterpret_cast(dlsym(mHandle, "DestroyWebEnginePlugin")); - if( mPlugin == NULL ) + if(mDestroyWebEnginePtr == NULL) { - DALI_LOG_ERROR( "Can't create the WebEnginePlugin object\n" ); + DALI_LOG_ERROR("Can't load symbol DestroyWebEnginePlugin(), error: %s\n", error); return false; } - mDestroyWebEnginePtr = reinterpret_cast< DestroyWebEngineFunction >( dlsym( mHandle, "DestroyWebEnginePlugin" ) ); + mPlugin = mCreateWebEnginePtr(); - if( mDestroyWebEnginePtr == NULL ) + if(mPlugin == NULL) { - - DALI_LOG_ERROR( "Can't load symbol DestroyWebEnginePlugin(), error: %s\n", error ); + DALI_LOG_ERROR("Can't create the WebEnginePlugin object\n"); return false; } return true; } -void WebEngine::Create( int width, int height, const std::string& locale, const std::string& timezoneId ) +void WebEngine::Create(uint32_t width, uint32_t height, const std::string& locale, const std::string& timezoneId) { - if( mPlugin != NULL ) - { - mPlugin->Create( width, height, locale, timezoneId ); - } + mPlugin->Create(width, height, locale, timezoneId); +} + +void WebEngine::Create(uint32_t width, uint32_t height, uint32_t argc, char** argv) +{ + mPlugin->Create(width, height, argc, argv); } void WebEngine::Destroy() { - if( mPlugin != NULL ) - { - mPlugin->Destroy(); - } + mPlugin->Destroy(); } Dali::NativeImageInterfacePtr WebEngine::GetNativeImageSource() @@ -145,149 +191,471 @@ Dali::NativeImageInterfacePtr WebEngine::GetNativeImageSource() return mPlugin->GetNativeImageSource(); } -void WebEngine::LoadUrl( const std::string& url ) +Dali::WebEngineSettings& WebEngine::GetSettings() const { - if( mPlugin != NULL ) - { - mPlugin->LoadUrl( url ); - } + return mPlugin->GetSettings(); } -const std::string& WebEngine::GetUrl() +Dali::WebEngineContext& WebEngine::GetContext() const { - static std::string emptyUrl; - return mPlugin ? mPlugin->GetUrl() : emptyUrl; + return mPlugin->GetContext(); } -void WebEngine::LoadHTMLString( const std::string& htmlString ) +Dali::WebEngineCookieManager& WebEngine::GetCookieManager() const { - if( mPlugin != NULL ) - { - mPlugin->LoadHTMLString( htmlString ); - } + return mPlugin->GetCookieManager(); +} + +Dali::WebEngineBackForwardList& WebEngine::GetBackForwardList() const +{ + return mPlugin->GetBackForwardList(); +} + +void WebEngine::LoadUrl(const std::string& url) +{ + mPlugin->LoadUrl(url); +} + +std::string WebEngine::GetTitle() const +{ + return mPlugin->GetTitle(); +} + +Dali::PixelData WebEngine::GetFavicon() const +{ + return mPlugin->GetFavicon(); +} + +std::string WebEngine::GetUrl() const +{ + return mPlugin->GetUrl(); +} + +std::string WebEngine::GetUserAgent() const +{ + return mPlugin->GetUserAgent(); +} + +void WebEngine::SetUserAgent(const std::string& userAgent) +{ + mPlugin->SetUserAgent(userAgent); +} + +void WebEngine::LoadHtmlString(const std::string& htmlString) +{ + mPlugin->LoadHtmlString(htmlString); +} + +bool WebEngine::LoadHtmlStringOverrideCurrentEntry(const std::string& html, const std::string& basicUri, const std::string& unreachableUrl) +{ + return mPlugin->LoadHtmlStringOverrideCurrentEntry(html, basicUri, unreachableUrl); +} + +bool WebEngine::LoadContents(const std::string& contents, uint32_t contentSize, const std::string& mimeType, const std::string& encoding, const std::string& baseUri) +{ + return mPlugin->LoadContents(contents, contentSize, mimeType, encoding, baseUri); } void WebEngine::Reload() { - if( mPlugin != NULL ) - { - mPlugin->Reload(); - } + mPlugin->Reload(); +} + +bool WebEngine::ReloadWithoutCache() +{ + return mPlugin->ReloadWithoutCache(); } void WebEngine::StopLoading() { - if( mPlugin != NULL ) - { - mPlugin->StopLoading(); - } + mPlugin->StopLoading(); +} + +void WebEngine::Suspend() +{ + mPlugin->Suspend(); +} + +void WebEngine::Resume() +{ + mPlugin->Resume(); +} + +void WebEngine::SuspendNetworkLoading() +{ + mPlugin->SuspendNetworkLoading(); +} + +void WebEngine::ResumeNetworkLoading() +{ + mPlugin->ResumeNetworkLoading(); +} + +bool WebEngine::AddCustomHeader(const std::string& name, const std::string& value) +{ + return mPlugin->AddCustomHeader(name, value); +} + +bool WebEngine::RemoveCustomHeader(const std::string& name) +{ + return mPlugin->RemoveCustomHeader(name); +} + +uint32_t WebEngine::StartInspectorServer(uint32_t port) +{ + return mPlugin->StartInspectorServer(port); +} + +bool WebEngine::StopInspectorServer() +{ + return mPlugin->StopInspectorServer(); +} + +void WebEngine::ScrollBy(int32_t deltaX, int32_t deltaY) +{ + mPlugin->ScrollBy(deltaX, deltaY); +} + +bool WebEngine::ScrollEdgeBy(int32_t deltaX, int32_t deltaY) +{ + return mPlugin->ScrollEdgeBy(deltaX, deltaY); +} + +void WebEngine::SetScrollPosition(int32_t x, int32_t y) +{ + mPlugin->SetScrollPosition(x, y); +} + +Dali::Vector2 WebEngine::GetScrollPosition() const +{ + return mPlugin->GetScrollPosition(); +} + +Dali::Vector2 WebEngine::GetScrollSize() const +{ + return mPlugin->GetScrollSize(); +} + +Dali::Vector2 WebEngine::GetContentSize() const +{ + return mPlugin->GetContentSize(); +} + +void WebEngine::RegisterJavaScriptAlertCallback(Dali::WebEnginePlugin::JavaScriptAlertCallback callback) +{ + mPlugin->RegisterJavaScriptAlertCallback(callback); +} + +void WebEngine::JavaScriptAlertReply() +{ + mPlugin->JavaScriptAlertReply(); +} + +void WebEngine::RegisterJavaScriptConfirmCallback(Dali::WebEnginePlugin::JavaScriptConfirmCallback callback) +{ + mPlugin->RegisterJavaScriptConfirmCallback(callback); +} + +void WebEngine::JavaScriptConfirmReply(bool confirmed) +{ + mPlugin->JavaScriptConfirmReply(confirmed); +} + +void WebEngine::RegisterJavaScriptPromptCallback(Dali::WebEnginePlugin::JavaScriptPromptCallback callback) +{ + mPlugin->RegisterJavaScriptPromptCallback(callback); +} + +void WebEngine::JavaScriptPromptReply(const std::string& result) +{ + mPlugin->JavaScriptPromptReply(result); +} + +std::unique_ptr WebEngine::CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode) +{ + return mPlugin->CreateHitTest(x, y, mode); +} + +bool WebEngine::CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback callback) +{ + return mPlugin->CreateHitTestAsynchronously(x, y, mode, callback); } bool WebEngine::CanGoForward() { - return mPlugin ? mPlugin->CanGoForward() : false; + return mPlugin->CanGoForward(); } void WebEngine::GoForward() { - if( mPlugin != NULL ) - { - mPlugin->GoForward(); - } + mPlugin->GoForward(); } bool WebEngine::CanGoBack() { - return mPlugin ? mPlugin->CanGoBack() : false; + return mPlugin->CanGoBack(); } void WebEngine::GoBack() { - if( mPlugin != NULL ) - { - mPlugin->GoBack(); - } + mPlugin->GoBack(); } -void WebEngine::EvaluateJavaScript( const std::string& script ) +void WebEngine::EvaluateJavaScript(const std::string& script, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback resultHandler) { - if( mPlugin != NULL ) - { - mPlugin->EvaluateJavaScript( script ); - } + mPlugin->EvaluateJavaScript(script, resultHandler); } -void WebEngine::AddJavaScriptInterface( const std::string& exposedObjectName, const std::string& jsFunctionName, std::function< std::string(const std::string&) > cb ) +void WebEngine::AddJavaScriptMessageHandler(const std::string& exposedObjectName, Dali::WebEnginePlugin::JavaScriptMessageHandlerCallback handler) { - if( mPlugin != NULL ) - { - mPlugin->AddJavaScriptInterface( exposedObjectName, jsFunctionName, cb ); - } + mPlugin->AddJavaScriptMessageHandler(exposedObjectName, handler); } -void WebEngine::RemoveJavascriptInterface( const std::string& exposedObjectName, const std::string& jsFunctionName ) +void WebEngine::ClearAllTilesResources() { - if( mPlugin != NULL ) - { - mPlugin->RemoveJavascriptInterface( exposedObjectName, jsFunctionName ); - } + mPlugin->ClearAllTilesResources(); } void WebEngine::ClearHistory() { - if( mPlugin != NULL ) - { - mPlugin->ClearHistory(); - } + mPlugin->ClearHistory(); } -void WebEngine::ClearCache() +void WebEngine::SetSize(uint32_t width, uint32_t height) { - if( mPlugin != NULL ) - { - mPlugin->ClearCache(); - } + mPlugin->SetSize(width, height); } -void WebEngine::SetSize( int width, int height ) +void WebEngine::EnableMouseEvents(bool enabled) { - if( mPlugin != NULL ) - { - mPlugin->SetSize( width, height ); - } + mPlugin->EnableMouseEvents(enabled); } -bool WebEngine::SendTouchEvent( const Dali::TouchData& touch ) +void WebEngine::EnableKeyEvents(bool enabled) { - if( mPlugin != NULL ) - { - return mPlugin->SendTouchEvent( touch ); - } + mPlugin->EnableKeyEvents(enabled); +} - return false; +bool WebEngine::SendTouchEvent(const Dali::TouchEvent& touch) +{ + return mPlugin->SendTouchEvent(touch); } -bool WebEngine::SendKeyEvent( const Dali::KeyEvent& event ) +bool WebEngine::SendKeyEvent(const Dali::KeyEvent& event) { - if( mPlugin != NULL ) - { - return mPlugin->SendKeyEvent( event ); - } + return mPlugin->SendKeyEvent(event); +} + +void WebEngine::SetFocus(bool focused) +{ + mPlugin->SetFocus(focused); +} + +void WebEngine::SetDocumentBackgroundColor(Dali::Vector4 color) +{ + mPlugin->SetDocumentBackgroundColor(color); +} + +void WebEngine::ClearTilesWhenHidden(bool cleared) +{ + mPlugin->ClearTilesWhenHidden(cleared); +} + +void WebEngine::SetTileCoverAreaMultiplier(float multiplier) +{ + mPlugin->SetTileCoverAreaMultiplier(multiplier); +} + +void WebEngine::EnableCursorByClient(bool enabled) +{ + mPlugin->EnableCursorByClient(enabled); +} + +std::string WebEngine::GetSelectedText() const +{ + return mPlugin->GetSelectedText(); +} + +void WebEngine::SetPageZoomFactor(float zoomFactor) +{ + mPlugin->SetPageZoomFactor(zoomFactor); +} + +float WebEngine::GetPageZoomFactor() const +{ + return mPlugin->GetPageZoomFactor(); +} + +void WebEngine::SetTextZoomFactor(float zoomFactor) +{ + mPlugin->SetTextZoomFactor(zoomFactor); +} + +float WebEngine::GetTextZoomFactor() const +{ + return mPlugin->GetTextZoomFactor(); +} + +float WebEngine::GetLoadProgressPercentage() const +{ + return mPlugin->GetLoadProgressPercentage(); +} + +void WebEngine::SetScaleFactor(float scaleFactor, Dali::Vector2 point) +{ + mPlugin->SetScaleFactor(scaleFactor, point); +} + +float WebEngine::GetScaleFactor() const +{ + return mPlugin->GetScaleFactor(); +} + +void WebEngine::ActivateAccessibility(bool activated) +{ + mPlugin->ActivateAccessibility(activated); +} + +bool WebEngine::SetVisibility(bool visible) +{ + return mPlugin->SetVisibility(visible); +} + +bool WebEngine::HighlightText(const std::string& text, Dali::WebEnginePlugin::FindOption options, uint32_t maxMatchCount) +{ + return mPlugin->HighlightText(text, options, maxMatchCount); +} + +void WebEngine::AddDynamicCertificatePath(const std::string& host, const std::string& certPath) +{ + mPlugin->AddDynamicCertificatePath(host, certPath); +} + +Dali::PixelData WebEngine::GetScreenshot(Dali::Rect viewArea, float scaleFactor) +{ + return mPlugin->GetScreenshot(viewArea, scaleFactor); +} + +bool WebEngine::GetScreenshotAsynchronously(Dali::Rect viewArea, float scaleFactor, Dali::WebEnginePlugin::ScreenshotCapturedCallback callback) +{ + return mPlugin->GetScreenshotAsynchronously(viewArea, scaleFactor, callback); +} + +bool WebEngine::CheckVideoPlayingAsynchronously(Dali::WebEnginePlugin::VideoPlayingCallback callback) +{ + return mPlugin->CheckVideoPlayingAsynchronously(callback); +} + +void WebEngine::RegisterGeolocationPermissionCallback(Dali::WebEnginePlugin::GeolocationPermissionCallback callback) +{ + mPlugin->RegisterGeolocationPermissionCallback(callback); +} + +void WebEngine::UpdateDisplayArea(Dali::Rect displayArea) +{ + mPlugin->UpdateDisplayArea(displayArea); +} + +void WebEngine::EnableVideoHole(bool enabled) +{ + mPlugin->EnableVideoHole(enabled); +} + +bool WebEngine::SendHoverEvent(const Dali::HoverEvent& event) +{ + return mPlugin->SendHoverEvent(event); +} + +bool WebEngine::SendWheelEvent(const Dali::WheelEvent& event) +{ + return mPlugin->SendWheelEvent(event); +} + +Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType& WebEngine::FrameRenderedSignal() +{ + return mPlugin->FrameRenderedSignal(); +} + +void WebEngine::RegisterPageLoadStartedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback) +{ + mPlugin->RegisterPageLoadStartedCallback(callback); +} + +void WebEngine::RegisterPageLoadInProgressCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback) +{ + mPlugin->RegisterPageLoadInProgressCallback(callback); +} + +void WebEngine::RegisterPageLoadFinishedCallback(Dali::WebEnginePlugin::WebEnginePageLoadCallback callback) +{ + mPlugin->RegisterPageLoadFinishedCallback(callback); +} + +void WebEngine::RegisterPageLoadErrorCallback(Dali::WebEnginePlugin::WebEnginePageLoadErrorCallback callback) +{ + mPlugin->RegisterPageLoadErrorCallback(callback); +} + +void WebEngine::RegisterScrollEdgeReachedCallback(Dali::WebEnginePlugin::WebEngineScrollEdgeReachedCallback callback) +{ + mPlugin->RegisterScrollEdgeReachedCallback(callback); +} + +void WebEngine::RegisterUrlChangedCallback(Dali::WebEnginePlugin::WebEngineUrlChangedCallback callback) +{ + mPlugin->RegisterUrlChangedCallback(callback); +} - return false; +void WebEngine::RegisterFormRepostDecidedCallback(Dali::WebEnginePlugin::WebEngineFormRepostDecidedCallback callback) +{ + mPlugin->RegisterFormRepostDecidedCallback(callback); +} + +void WebEngine::RegisterRequestInterceptorCallback(Dali::WebEnginePlugin::WebEngineRequestInterceptorCallback callback) +{ + mPlugin->RegisterRequestInterceptorCallback(callback); } -Dali::WebEnginePlugin::WebEngineSignalType& WebEngine::PageLoadStartedSignal() +void WebEngine::RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback) { - return mPlugin->PageLoadStartedSignal(); + mPlugin->RegisterConsoleMessageReceivedCallback(callback); } -Dali::WebEnginePlugin::WebEngineSignalType& WebEngine::PageLoadFinishedSignal() +void WebEngine::RegisterResponsePolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback callback) { - return mPlugin->PageLoadFinishedSignal(); + mPlugin->RegisterResponsePolicyDecidedCallback(callback); } -} // namespace Adaptor; -} // namespace Internal; -} // namespace Dali; +void WebEngine::RegisterCertificateConfirmedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback) +{ + mPlugin->RegisterCertificateConfirmedCallback(callback); +} + +void WebEngine::RegisterSslCertificateChangedCallback(Dali::WebEnginePlugin::WebEngineCertificateCallback callback) +{ + mPlugin->RegisterSslCertificateChangedCallback(callback); +} + +void WebEngine::RegisterHttpAuthHandlerCallback(Dali::WebEnginePlugin::WebEngineHttpAuthHandlerCallback callback) +{ + mPlugin->RegisterHttpAuthHandlerCallback(callback); +} + +void WebEngine::RegisterContextMenuShownCallback(Dali::WebEnginePlugin::WebEngineContextMenuShownCallback callback) +{ + mPlugin->RegisterContextMenuShownCallback(callback); +} + +void WebEngine::RegisterContextMenuHiddenCallback(Dali::WebEnginePlugin::WebEngineContextMenuHiddenCallback callback) +{ + mPlugin->RegisterContextMenuHiddenCallback(callback); +} + +void WebEngine::GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback) +{ + mPlugin->GetPlainTextAsynchronously(callback); +} +} // namespace Adaptor +} // namespace Internal +} // namespace Dali