#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, "mouseEventsEnabled", BOOLEAN, MOUSE_EVENTS_ENABLED)
-DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "keyEventsEnabled", BOOLEAN, KEY_EVENTS_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)
{
mPageLoadStartedSignal(),
mPageLoadFinishedSignal(),
mPageLoadErrorSignal(),
+ mUrlChangedSignal(),
mVideoHoleEnabled(true),
mWebViewArea(0, 0, mWebViewSize.width, mWebViewSize.height),
- mUrlChangedSignal(),
mMouseEventsEnabled(true),
mKeyEventsEnabled(true)
{
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()));
return mUrlChangedSignal;
}
+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::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.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;
+ }
return connected;
}
}
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.mKeyEventsEnabled;
break;
}
+ case Toolkit::WebView::Property::SELECTED_TEXT:
+ {
+ value = impl.GetSelectedText();
+ break;
+ }
default:
break;
}
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;