X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fweb-view%2Fweb-view-impl.cpp;h=6a3af8d94c7099ddc2782829979c9fbcece8b36c;hb=095b91efc760ccafa552387387188c4cebb18a0e;hp=7db2689f1a258be91e1e58dee3ca87c3b9754a6e;hpb=ca1f0e15a7bb259871c16968340b76afe7e169c6;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/web-view/web-view-impl.cpp b/dali-toolkit/internal/controls/web-view/web-view-impl.cpp index 7db2689..6a3af8d 100644 --- a/dali-toolkit/internal/controls/web-view/web-view-impl.cpp +++ b/dali-toolkit/internal/controls/web-view/web-view-impl.cpp @@ -20,13 +20,18 @@ // EXTERNAL INCLUDES #include +#include #include +#include +#include #include #include #include -#include +#include +#include #include #include +#include #include #include #include @@ -42,7 +47,6 @@ #include #include #include -#include #include #include #include @@ -83,17 +87,22 @@ DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "pageZoomFactor", FLOAT, DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "textZoomFactor", FLOAT, TEXT_ZOOM_FACTOR ) DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "loadProgressPercentage", FLOAT, LOAD_PROGRESS_PERCENTAGE ) -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, "pageLoadFinished", PAGE_LOAD_FINISHED_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_SIGNAL_REGISTRATION(Toolkit, WebView, "requestInterceptor", REQUEST_INTERCEPTOR_SIGNAL ) -DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "consoleMessage", CONSOLE_MESSAGE_SIGNAL ) -DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "policyDecision", POLICY_DECISION ) +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, "pageLoadFinished", PAGE_LOAD_FINISHED_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_SIGNAL_REGISTRATION(Toolkit, WebView, "requestInterceptor", REQUEST_INTERCEPTOR_SIGNAL ) +DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "consoleMessage", CONSOLE_MESSAGE_SIGNAL ) +DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "policyDecision", POLICY_DECISION ) +DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "certificateConfirm", CERTIFICATE_CONFIRM_SIGNAL ) +DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "sslCertificateChanged", SSL_CERTIFICATE_CHANGED_SIGNAL ) +DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "httpAuthRequest", HTTP_AUTH_REQUEST_SIGNAL ) +DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "contextMenuCustomized", CONTEXT_MENU_CUSTOMIZED_SIGNAL ) +DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "contextMenuItemSelected", CONTEXT_MENU_ITEM_SELECTED_SIGNAL) DALI_TYPE_REGISTRATION_END() // clang-format on @@ -132,7 +141,7 @@ WebView::WebView(const std::string& locale, const std::string& timezoneId) } } -WebView::WebView(int argc, char** argv) +WebView::WebView(uint32_t argc, char** argv) : Control(ControlBehaviour(ACTOR_BEHAVIOUR_DEFAULT | DISABLE_STYLE_CHANGE_SIGNALS)), mUrl(), mVisual(), @@ -187,7 +196,7 @@ Toolkit::WebView WebView::New(const std::string& locale, const std::string& time return handle; } -Toolkit::WebView WebView::New(int argc, char** argv) +Toolkit::WebView WebView::New(uint32_t argc, char** argv) { WebView* impl = new WebView(argc, argv); Toolkit::WebView handle = Toolkit::WebView(*impl); @@ -226,6 +235,11 @@ void WebView::OnInitialize() mWebEngine.RequestInterceptorSignal().Connect(this, &WebView::OnInterceptRequest); mWebEngine.ConsoleMessageSignal().Connect(this, &WebView::OnConsoleMessage); mWebEngine.PolicyDecisionSignal().Connect(this, &WebView::OnPolicyDecisionRequest); + mWebEngine.CertificateConfirmSignal().Connect(this, &WebView::OnCertificateConfirm); + mWebEngine.SslCertificateChangedSignal().Connect(this, &WebView::OnSslCertificateChanged); + mWebEngine.HttpAuthHandlerSignal().Connect(this, &WebView::OnHttpAuthenticationRequest); + mWebEngine.ContextMenuCustomizedSignal().Connect(this, &WebView::OnContextMenuCustomized); + mWebEngine.ContextMenuItemSelectedSignal().Connect(this, &WebView::OnContextMenuItemSelected); mWebContext = std::unique_ptr(new WebContext(mWebEngine.GetContext())); mWebCookieManager = std::unique_ptr(new WebCookieManager(mWebEngine.GetCookieManager())); @@ -435,7 +449,7 @@ bool WebView::StopInspectorServer() return mWebEngine ? mWebEngine.StopInspectorServer() : false; } -void WebView::ScrollBy(int deltaX, int deltaY) +void WebView::ScrollBy(int32_t deltaX, int32_t deltaY) { if(mWebEngine) { @@ -443,7 +457,7 @@ void WebView::ScrollBy(int deltaX, int deltaY) } } -bool WebView::ScrollEdgeBy(int deltaX, int deltaY) +bool WebView::ScrollEdgeBy(int32_t deltaX, int32_t deltaY) { return mWebEngine ? mWebEngine.ScrollEdgeBy(deltaX, deltaY) : false; } @@ -538,6 +552,27 @@ void WebView::JavaScriptPromptReply(const std::string& result) } } +std::unique_ptr WebView::CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode) +{ + std::unique_ptr webHitTest; + if(!mWebEngine) + { + return webHitTest; + } + + return mWebEngine.CreateHitTest(x, y, mode); +} + +bool WebView::CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback callback) +{ + bool result = false; + if(mWebEngine) + { + result = mWebEngine.CreateHitTestAsynchronously(x, y, mode, callback); + } + return result; +} + void WebView::ClearHistory() { if(mWebEngine) @@ -588,7 +623,7 @@ void WebView::AddDynamicCertificatePath(const std::string& host, const std::stri } } -Dali::Toolkit::ImageView WebView::GetScreenshot(Dali::Rect viewArea, float scaleFactor) +Dali::Toolkit::ImageView WebView::GetScreenshot(Dali::Rect viewArea, float scaleFactor) { Dali::Toolkit::ImageView imageView; if(mWebEngine) @@ -599,7 +634,7 @@ Dali::Toolkit::ImageView WebView::GetScreenshot(Dali::Rect viewArea, float return imageView; } -bool WebView::GetScreenshotAsynchronously(Dali::Rect viewArea, float scaleFactor, Dali::Toolkit::WebView::WebViewScreenshotCapturedCallback callback) +bool WebView::GetScreenshotAsynchronously(Dali::Rect viewArea, float scaleFactor, Dali::Toolkit::WebView::WebViewScreenshotCapturedCallback callback) { mScreenshotCapturedCallback = callback; return mWebEngine ? mWebEngine.GetScreenshotAsynchronously(viewArea, scaleFactor, std::bind(&WebView::OnScreenshotCaptured, this, std::placeholders::_1)) : false; @@ -630,7 +665,7 @@ void WebView::UpdateDisplayArea(Dali::PropertyNotification& /*source*/) Vector3 anchorPointOffSet = actorSize * (positionUsesAnchorPoint ? self.GetCurrentProperty(Actor::Property::ANCHOR_POINT) : AnchorPoint::TOP_LEFT); Vector2 screenPosition = self.GetProperty(Actor::Property::SCREEN_POSITION); - Dali::Rect displayArea; + Dali::Rect displayArea; displayArea.x = screenPosition.x - anchorPointOffSet.x; displayArea.y = screenPosition.y - anchorPointOffSet.y; displayArea.width = actorSize.x; @@ -734,6 +769,31 @@ Dali::Toolkit::WebView::WebViewPolicyDecisionSignalType& WebView::PolicyDecision return mPolicyDecisionSignal; } +Dali::Toolkit::WebView::WebViewCertificateSignalType& WebView::CertificateConfirmSignal() +{ + return mCertificateConfirmSignal; +} + +Dali::Toolkit::WebView::WebViewCertificateSignalType& WebView::SslCertificateChangedSignal() +{ + return mSslCertificateChangedSignal; +} + +Dali::Toolkit::WebView::WebViewHttpAuthHandlerSignalType& WebView::HttpAuthHandlerSignal() +{ + return mHttpAuthHandlerSignal; +} + +Dali::Toolkit::WebView::WebViewContextMenuCustomizedSignalType& WebView::ContextMenuCustomizedSignal() +{ + return mContextMenuCustomizedSignal; +} + +Dali::Toolkit::WebView::WebViewContextMenuItemSelectedSignalType& WebView::ContextMenuItemSelectedSignal() +{ + return mContextMenuItemSelectedSignal; +} + void WebView::OnPageLoadStarted(const std::string& url) { if(!mPageLoadStartedSignal.Empty()) @@ -792,9 +852,8 @@ void WebView::OnFormRepostDecision(std::shared_ptr repostDecision(new Dali::Toolkit::WebFormRepostDecision(decision)); - mFormRepostDecisionSignal.Emit(handle, std::move(repostDecision)); + Dali::Toolkit::WebView handle(GetOwner()); + mFormRepostDecisionSignal.Emit(handle, std::move(decision)); } } @@ -851,6 +910,51 @@ void WebView::OnPolicyDecisionRequest(std::shared_ptr certificate) +{ + if(!mCertificateConfirmSignal.Empty()) + { + Dali::Toolkit::WebView handle(GetOwner()); + mCertificateConfirmSignal.Emit(handle, std::move(certificate)); + } +} + +void WebView::OnSslCertificateChanged(std::shared_ptr certificate) +{ + if(!mSslCertificateChangedSignal.Empty()) + { + Dali::Toolkit::WebView handle(GetOwner()); + mSslCertificateChangedSignal.Emit(handle, std::move(certificate)); + } +} + +void WebView::OnHttpAuthenticationRequest(std::shared_ptr handler) +{ + if(!mHttpAuthHandlerSignal.Empty()) + { + Dali::Toolkit::WebView handle(GetOwner()); + mHttpAuthHandlerSignal.Emit(handle, std::move(handler)); + } +} + +void WebView::OnContextMenuCustomized(std::shared_ptr menu) +{ + if(!mContextMenuCustomizedSignal.Empty()) + { + Dali::Toolkit::WebView handle(GetOwner()); + mContextMenuCustomizedSignal.Emit(handle, std::move(menu)); + } +} + +void WebView::OnContextMenuItemSelected(std::shared_ptr item) +{ + if(!mContextMenuItemSelectedSignal.Empty()) + { + Dali::Toolkit::WebView handle(GetOwner()); + mContextMenuItemSelectedSignal.Emit(handle, std::move(item)); + } +} + bool WebView::DoConnectSignal(BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor) { Dali::BaseHandle handle(object); @@ -913,6 +1017,31 @@ bool WebView::DoConnectSignal(BaseObject* object, ConnectionTrackerInterface* tr webView.PolicyDecisionSignal().Connect(tracker, functor); connected = true; } + else if(0 == strcmp(signalName.c_str(), CERTIFICATE_CONFIRM_SIGNAL)) + { + webView.CertificateConfirmSignal().Connect(tracker, functor); + connected = true; + } + else if(0 == strcmp(signalName.c_str(), SSL_CERTIFICATE_CHANGED_SIGNAL)) + { + webView.SslCertificateChangedSignal().Connect(tracker, functor); + connected = true; + } + else if(0 == strcmp(signalName.c_str(), HTTP_AUTH_REQUEST_SIGNAL)) + { + webView.HttpAuthHandlerSignal().Connect(tracker, functor); + connected = true; + } + else if(0 == strcmp(signalName.c_str(), CONTEXT_MENU_CUSTOMIZED_SIGNAL)) + { + webView.ContextMenuCustomizedSignal().Connect(tracker, functor); + connected = true; + } + else if(0 == strcmp(signalName.c_str(), CONTEXT_MENU_ITEM_SELECTED_SIGNAL)) + { + webView.ContextMenuItemSelectedSignal().Connect(tracker, functor); + connected = true; + } return connected; } @@ -1168,7 +1297,7 @@ bool WebView::OnKeyEvent(const Dali::KeyEvent& event) bool WebView::OnHoverEvent(Actor actor, const Dali::HoverEvent& hover) { bool result = false; - if(mWebEngine) + if(mWebEngine && mMouseEventsEnabled) { result = mWebEngine.SendHoverEvent(hover); } @@ -1178,7 +1307,7 @@ bool WebView::OnHoverEvent(Actor actor, const Dali::HoverEvent& hover) bool WebView::OnWheelEvent(Actor actor, const Dali::WheelEvent& wheel) { bool result = false; - if(mWebEngine) + if(mWebEngine && mMouseEventsEnabled) { result = mWebEngine.SendWheelEvent(wheel); } @@ -1205,7 +1334,7 @@ void WebView::OnKeyInputFocusLost() EmitKeyInputFocusSignal(false); // Calls back into the Control hence done last. } -void WebView::SetScrollPosition(int x, int y) +void WebView::SetScrollPosition(int32_t x, int32_t y) { if(mWebEngine) {