#include <dali/devel-api/adaptor-framework/web-engine-back-forward-list.h>
#include <dali/devel-api/adaptor-framework/web-engine-context.h>
#include <dali/devel-api/adaptor-framework/web-engine-cookie-manager.h>
+#include <dali/devel-api/adaptor-framework/web-engine-form-repost-decision.h>
#include <dali/devel-api/adaptor-framework/web-engine-settings.h>
#include <dali/devel-api/common/stage.h>
#include <dali/devel-api/scripting/enum-helper.h>
#include <dali/public-api/object/type-registry-helper.h>
#include <dali/public-api/object/type-registry.h>
#include <cstring>
+#include <memory>
// INTERNAL INCLUDES
#include <dali-toolkit/devel-api/controls/control-devel.h>
#include <dali-toolkit/devel-api/controls/web-view/web-back-forward-list.h>
#include <dali-toolkit/devel-api/controls/web-view/web-context.h>
#include <dali-toolkit/devel-api/controls/web-view/web-cookie-manager.h>
+#include <dali-toolkit/devel-api/controls/web-view/web-form-repost-decision.h>
#include <dali-toolkit/devel-api/controls/web-view/web-settings.h>
#include <dali-toolkit/devel-api/image-loader/texture-manager.h>
#include <dali-toolkit/internal/visuals/visual-factory-impl.h>
// clang-format off
DALI_TYPE_REGISTRATION_BEGIN(Toolkit::WebView, Toolkit::Control, Create)
-DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "url", STRING, URL )
-DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "userAgent", STRING, USER_AGENT )
-DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "scrollPosition", VECTOR2, SCROLL_POSITION )
-DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "scrollSize", VECTOR2, SCROLL_SIZE )
-DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "contentSize", VECTOR2, CONTENT_SIZE )
-DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "title", STRING, TITLE )
-DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "videoHoleEnabled", BOOLEAN, VIDEO_HOLE_ENABLED)
+DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "url", STRING, URL )
+DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "userAgent", STRING, USER_AGENT )
+DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "scrollPosition", VECTOR2, SCROLL_POSITION )
+DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "scrollSize", VECTOR2, SCROLL_SIZE )
+DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "contentSize", VECTOR2, CONTENT_SIZE )
+DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "title", STRING, TITLE )
+DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "videoHoleEnabled", BOOLEAN, VIDEO_HOLE_ENABLED )
+DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "mouseEventsEnabled", BOOLEAN, MOUSE_EVENTS_ENABLED )
+DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "keyEventsEnabled", BOOLEAN, KEY_EVENTS_ENABLED )
+DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "documentBackgroundColor", VECTOR4, DOCUMENT_BACKGROUND_COLOR )
+DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "tilesClearedWhenHidden", BOOLEAN, TILES_CLEARED_WHEN_HIDDEN )
+DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "tileCoverAreaMultiplier", FLOAT, TILE_COVER_AREA_MULTIPLIER)
+DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "cursorEnabledByClient", BOOLEAN, CURSOR_ENABLED_BY_CLIENT )
+DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "selectedText", STRING, SELECTED_TEXT )
DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "pageLoadStarted", PAGE_LOAD_STARTED_SIGNAL )
DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "pageLoadInProgress", PAGE_LOAD_IN_PROGRESS_SIGNAL)
DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "pageLoadError", PAGE_LOAD_ERROR_SIGNAL )
DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "scrollEdgeReached", SCROLL_EDGE_REACHED_SIGNAL )
DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "urlChanged", URL_CHANGED_SIGNAL )
+DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "formRepostDecision", FORM_REPOST_DECISION_SIGNAL )
+DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "frameRendered", FRAME_RENDERED_SIGNAL )
DALI_TYPE_REGISTRATION_END()
// clang-format on
mPageLoadStartedSignal(),
mPageLoadFinishedSignal(),
mPageLoadErrorSignal(),
+ mUrlChangedSignal(),
mVideoHoleEnabled(true),
mWebViewArea(0, 0, mWebViewSize.width, mWebViewSize.height),
- mUrlChangedSignal()
+ mMouseEventsEnabled(true),
+ mKeyEventsEnabled(true)
{
mWebEngine = Dali::WebEngine::New();
mPageLoadStartedSignal(),
mPageLoadFinishedSignal(),
mPageLoadErrorSignal(),
+ mUrlChangedSignal(),
mVideoHoleEnabled(true),
mWebViewArea(0, 0, mWebViewSize.width, mWebViewSize.height),
- mUrlChangedSignal()
+ mMouseEventsEnabled(true),
+ mKeyEventsEnabled(true)
{
mWebEngine = Dali::WebEngine::New();
self.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
self.TouchedSignal().Connect(this, &WebView::OnTouchEvent);
+ self.HoveredSignal().Connect(this, &WebView::OnHoverEvent);
+ self.WheelEventSignal().Connect(this, &WebView::OnWheelEvent);
mPositionUpdateNotification = self.AddPropertyNotification(Actor::Property::WORLD_POSITION, StepCondition(1.0f, 1.0f));
mSizeUpdateNotification = self.AddPropertyNotification(Actor::Property::SIZE, StepCondition(1.0f, 1.0f));
if(mWebEngine)
{
- mWebEngine.PageLoadStartedSignal().Connect( this, &WebView::OnPageLoadStarted );
+ mWebEngine.PageLoadStartedSignal().Connect(this, &WebView::OnPageLoadStarted);
mWebEngine.PageLoadInProgressSignal().Connect(this, &WebView::OnPageLoadInProgress);
- mWebEngine.PageLoadFinishedSignal().Connect( this, &WebView::OnPageLoadFinished );
- mWebEngine.PageLoadErrorSignal().Connect( this, &WebView::OnPageLoadError );
- mWebEngine.ScrollEdgeReachedSignal().Connect( this, &WebView::OnScrollEdgeReached );
+ mWebEngine.PageLoadFinishedSignal().Connect(this, &WebView::OnPageLoadFinished);
+ mWebEngine.PageLoadErrorSignal().Connect(this, &WebView::OnPageLoadError);
+ mWebEngine.ScrollEdgeReachedSignal().Connect(this, &WebView::OnScrollEdgeReached);
mWebEngine.UrlChangedSignal().Connect(this, &WebView::OnUrlChanged);
+ mWebEngine.FormRepostDecisionSignal().Connect(this, &WebView::OnFormRepostDecision);
+ mWebEngine.FrameRenderedSignal().Connect(this, &WebView::OnFrameRendered);
mWebContext = std::unique_ptr<Dali::Toolkit::WebContext>(new WebContext(mWebEngine.GetContext()));
mWebCookieManager = std::unique_ptr<Dali::Toolkit::WebCookieManager>(new WebCookieManager(mWebEngine.GetCookieManager()));
}
}
-void WebView::RegisterJavaScriptAlertCallback( Dali::WebEnginePlugin::JavaScriptAlertCallback callback )
+void WebView::RegisterJavaScriptAlertCallback(Dali::WebEnginePlugin::JavaScriptAlertCallback callback)
{
if(mWebEngine)
{
- mWebEngine.RegisterJavaScriptAlertCallback( callback );
+ mWebEngine.RegisterJavaScriptAlertCallback(callback);
}
}
void WebView::JavaScriptAlertReply()
{
- if ( mWebEngine )
+ if(mWebEngine)
{
mWebEngine.JavaScriptAlertReply();
}
}
-void WebView::RegisterJavaScriptConfirmCallback( Dali::WebEnginePlugin::JavaScriptConfirmCallback callback )
+void WebView::RegisterJavaScriptConfirmCallback(Dali::WebEnginePlugin::JavaScriptConfirmCallback callback)
{
- if ( mWebEngine )
+ if(mWebEngine)
{
- mWebEngine.RegisterJavaScriptConfirmCallback( callback );
+ mWebEngine.RegisterJavaScriptConfirmCallback(callback);
}
}
-void WebView::JavaScriptConfirmReply( bool confirmed )
+void WebView::JavaScriptConfirmReply(bool confirmed)
{
- if ( mWebEngine )
+ if(mWebEngine)
{
- mWebEngine.JavaScriptConfirmReply( confirmed );
+ mWebEngine.JavaScriptConfirmReply(confirmed);
}
}
-void WebView::RegisterJavaScriptPromptCallback( Dali::WebEnginePlugin::JavaScriptPromptCallback callback )
+void WebView::RegisterJavaScriptPromptCallback(Dali::WebEnginePlugin::JavaScriptPromptCallback callback)
{
- if ( mWebEngine )
+ if(mWebEngine)
{
- mWebEngine.RegisterJavaScriptPromptCallback( callback );
+ mWebEngine.RegisterJavaScriptPromptCallback(callback);
}
}
-void WebView::JavaScriptPromptReply( const std::string& result )
+void WebView::JavaScriptPromptReply(const std::string& result)
{
- if ( mWebEngine )
+ if(mWebEngine)
{
- mWebEngine.JavaScriptPromptReply( result );
+ mWebEngine.JavaScriptPromptReply(result);
}
}
void WebView::ClearAllTilesResources()
{
- if( mWebEngine )
+ if(mWebEngine)
{
mWebEngine.ClearAllTilesResources();
}
return mUrlChangedSignal;
}
-void WebView::OnPageLoadStarted( const std::string& url )
+Dali::Toolkit::WebView::WebViewFormRepostDecisionSignalType& WebView::FormRepostDecisionSignal()
+{
+ return mFormRepostDecisionSignal;
+}
+
+Dali::Toolkit::WebView::WebViewFrameRenderedSignalType& WebView::FrameRenderedSignal()
+{
+ return mFrameRenderedSignal;
+}
+
+void WebView::OnPageLoadStarted(const std::string& url)
{
if(!mPageLoadStartedSignal.Empty())
{
}
}
-void WebView::OnPageLoadInProgress( const std::string& url )
+void WebView::OnPageLoadInProgress(const std::string& url)
{
- if ( !mPageLoadInProgressSignal.Empty() )
+ if(!mPageLoadInProgressSignal.Empty())
{
- Dali::Toolkit::WebView handle( GetOwner() );
- mPageLoadInProgressSignal.Emit( handle, url );
+ Dali::Toolkit::WebView handle(GetOwner());
+ mPageLoadInProgressSignal.Emit(handle, url);
}
}
-void WebView::OnPageLoadFinished( const std::string& url )
+void WebView::OnPageLoadFinished(const std::string& url)
{
if(!mPageLoadFinishedSignal.Empty())
{
void WebView::OnUrlChanged(const std::string& url)
{
- if (!mUrlChangedSignal.Empty())
+ if(!mUrlChangedSignal.Empty())
{
Dali::Toolkit::WebView handle(GetOwner());
mUrlChangedSignal.Emit(handle, url);
}
}
-bool WebView::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor )
+void WebView::OnFormRepostDecision(std::shared_ptr<Dali::WebEngineFormRepostDecision> decision)
+{
+ if(!mFormRepostDecisionSignal.Empty())
+ {
+ Dali::Toolkit::WebView handle(GetOwner());
+ std::shared_ptr<Dali::Toolkit::WebFormRepostDecision> repostDecision(new Dali::Toolkit::WebFormRepostDecision(decision));
+ mFormRepostDecisionSignal.Emit(handle, std::move(repostDecision));
+ }
+}
+
+void WebView::OnFrameRendered()
+{
+ if(!mFrameRenderedSignal.Empty())
+ {
+ Dali::Toolkit::WebView handle(GetOwner());
+ mFrameRenderedSignal.Emit(handle);
+ }
+}
+
+bool WebView::DoConnectSignal(BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor)
{
Dali::BaseHandle handle(object);
webView.PageLoadStartedSignal().Connect(tracker, functor);
connected = true;
}
- else if (0 == strcmp(signalName.c_str(), PAGE_LOAD_IN_PROGRESS_SIGNAL))
+ else if(0 == strcmp(signalName.c_str(), PAGE_LOAD_IN_PROGRESS_SIGNAL))
{
webView.PageLoadInProgressSignal().Connect(tracker, functor);
connected = true;
webView.ScrollEdgeReachedSignal().Connect(tracker, functor);
connected = true;
}
- else if (0 == strcmp(signalName.c_str(), URL_CHANGED_SIGNAL))
+ else if(0 == strcmp(signalName.c_str(), URL_CHANGED_SIGNAL))
{
- webView.UrlChangedSignal().Connect( tracker, functor );
+ webView.UrlChangedSignal().Connect(tracker, functor);
+ connected = true;
+ }
+ else if(0 == strcmp(signalName.c_str(), FORM_REPOST_DECISION_SIGNAL))
+ {
+ webView.FormRepostDecisionSignal().Connect(tracker, functor);
+ connected = true;
+ }
+ else if(0 == strcmp(signalName.c_str(), FRAME_RENDERED_SIGNAL))
+ {
+ webView.FrameRenderedSignal().Connect(tracker, functor);
connected = true;
}
}
break;
}
+ case Toolkit::WebView::Property::MOUSE_EVENTS_ENABLED:
+ {
+ bool input;
+ if(value.Get(input))
+ {
+ impl.EnableMouseEvents(input);
+ }
+ break;
+ }
+ case Toolkit::WebView::Property::KEY_EVENTS_ENABLED:
+ {
+ bool input;
+ if(value.Get(input))
+ {
+ impl.EnableKeyEvents(input);
+ }
+ break;
+ }
+ case Toolkit::WebView::Property::DOCUMENT_BACKGROUND_COLOR:
+ {
+ Vector4 input;
+ if(value.Get(input))
+ {
+ impl.SetDocumentBackgroundColor(input);
+ }
+ break;
+ }
+ case Toolkit::WebView::Property::TILES_CLEARED_WHEN_HIDDEN:
+ {
+ bool input;
+ if(value.Get(input))
+ {
+ impl.ClearTilesWhenHidden(input);
+ }
+ break;
+ }
+ case Toolkit::WebView::Property::TILE_COVER_AREA_MULTIPLIER:
+ {
+ float input;
+ if(value.Get(input))
+ {
+ impl.SetTileCoverAreaMultiplier(input);
+ }
+ break;
+ }
+ case Toolkit::WebView::Property::CURSOR_ENABLED_BY_CLIENT:
+ {
+ bool input;
+ if(value.Get(input))
+ {
+ impl.EnableCursorByClient(input);
+ }
+ break;
+ }
}
}
}
value = impl.mVideoHoleEnabled;
break;
}
+ case Toolkit::WebView::Property::MOUSE_EVENTS_ENABLED:
+ {
+ value = impl.mMouseEventsEnabled;
+ break;
+ }
+ case Toolkit::WebView::Property::KEY_EVENTS_ENABLED:
+ {
+ value = impl.mKeyEventsEnabled;
+ break;
+ }
+ case Toolkit::WebView::Property::SELECTED_TEXT:
+ {
+ value = impl.GetSelectedText();
+ break;
+ }
default:
break;
}
return result;
}
+bool WebView::OnHoverEvent(Actor actor, const Dali::HoverEvent& hover)
+{
+ bool result = false;
+ if(mWebEngine)
+ {
+ result = mWebEngine.SendHoverEvent(hover);
+ }
+ return result;
+}
+
+bool WebView::OnWheelEvent(Actor actor, const Dali::WheelEvent& wheel)
+{
+ bool result = false;
+ if(mWebEngine)
+ {
+ result = mWebEngine.SendWheelEvent(wheel);
+ }
+ return result;
+}
+
void WebView::OnKeyInputFocusGained()
{
if(mWebEngine)
return mWebEngine ? mWebEngine.GetTitle() : kEmptyString;
}
+void WebView::SetDocumentBackgroundColor(Dali::Vector4 color)
+{
+ if(mWebEngine)
+ {
+ mWebEngine.SetDocumentBackgroundColor(color);
+ }
+}
+
+void WebView::ClearTilesWhenHidden(bool cleared)
+{
+ if(mWebEngine)
+ {
+ mWebEngine.ClearTilesWhenHidden(cleared);
+ }
+}
+
+void WebView::SetTileCoverAreaMultiplier(float multiplier)
+{
+ if(mWebEngine)
+ {
+ mWebEngine.SetTileCoverAreaMultiplier(multiplier);
+ }
+}
+
+void WebView::EnableCursorByClient(bool enabled)
+{
+ if(mWebEngine)
+ {
+ mWebEngine.EnableCursorByClient(enabled);
+ }
+}
+
+std::string WebView::GetSelectedText() const
+{
+ return mWebEngine ? mWebEngine.GetSelectedText() : kEmptyString;
+}
+
const std::string& WebView::GetUserAgent() const
{
return mWebEngine ? mWebEngine.GetUserAgent() : kEmptyString;
}
}
+void WebView::EnableMouseEvents(bool enabled)
+{
+ if(mWebEngine)
+ {
+ mMouseEventsEnabled = enabled;
+ mWebEngine.EnableMouseEvents(enabled);
+ }
+}
+
+void WebView::EnableKeyEvents(bool enabled)
+{
+ if(mWebEngine)
+ {
+ mKeyEventsEnabled = enabled;
+ mWebEngine.EnableKeyEvents(enabled);
+ }
+}
+
#undef GET_ENUM_STRING
#undef GET_ENUM_VALUE