From: huayong.xu Date: Thu, 15 Dec 2022 09:47:35 +0000 (+0800) Subject: Add an API for 'create,window' event. X-Git-Tag: dali_2.2.8~1^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F19%2F285619%2F1;p=platform%2Fcore%2Fuifw%2Fdali-extension.git Add an API for 'create,window' event. Change-Id: I6c9ef56370039491f998b9628a5b0ab1656fd95c --- diff --git a/dali-extension/web-engine-chromium/tizen-web-engine-chromium.cpp b/dali-extension/web-engine-chromium/tizen-web-engine-chromium.cpp index fd786a1..9fad478 100755 --- a/dali-extension/web-engine-chromium/tizen-web-engine-chromium.cpp +++ b/dali-extension/web-engine-chromium/tizen-web-engine-chromium.cpp @@ -68,6 +68,15 @@ void ExecuteCallback(Callback callback, std::unique_ptr arg) } } +template +void ExecuteCallback(Callback callback, Arg*& arg) +{ + if (callback) + { + callback(arg); + } +} + template Ret ExecuteCallbackReturn(Callback callback, Args... args) { @@ -92,43 +101,11 @@ Ret ExecuteCallbackReturn(Callback callback, std::unique_ptr arg) } // Anonymous namespace -class TBMSurfaceSourceInitializer -{ -public: - explicit TBMSurfaceSourceInitializer(NativeImageSourcePtr& imageSrc, uint32_t width, uint32_t height) - { - mSurface = tbm_surface_create(width, height, TBM_FORMAT_ARGB8888); - if(!mSurface) - { - DALI_LOG_ERROR("Failed to create tbm surface."); - } - - Any tbmSource(mSurface); - imageSrc = NativeImageSource::New(tbmSource); - Any emptySource(0); - imageSrc->SetSource(emptySource); - } - - ~TBMSurfaceSourceInitializer() - { - if(mSurface) - { - if(tbm_surface_destroy(mSurface) != TBM_SURFACE_ERROR_NONE) - { - DALI_LOG_ERROR("Failed to destroy tbm surface."); - } - } - } - -private: - tbm_surface_h mSurface; -}; - TizenWebEngineChromium::TizenWebEngineChromium() -: mWebView(nullptr), +: mDaliImageSrc(NativeImageSource::New(0, 0, NativeImageSource::COLOR_DEPTH_DEFAULT)), + mWebView(nullptr), mWidth(0), - mHeight(0), - mJavaScriptEvaluationCount(0) + mHeight(0) { } @@ -150,7 +127,6 @@ void TizenWebEngineChromium::Create(uint32_t width, uint32_t height, const std:: mHeight = height; InitWebView(0, nullptr); WebEngineManager::Get().Add(mWebView, this); - TBMSurfaceSourceInitializer initializer(mDaliImageSrc, mWidth, mHeight); } void TizenWebEngineChromium::Create(uint32_t width, uint32_t height, uint32_t argc, char** argv) @@ -166,23 +142,64 @@ void TizenWebEngineChromium::Create(uint32_t width, uint32_t height, uint32_t ar mHeight = height; InitWebView(argc, argv); WebEngineManager::Get().Add(mWebView, this); - TBMSurfaceSourceInitializer initializer(mDaliImageSrc, mWidth, mHeight); } -void TizenWebEngineChromium::Destroy() +void TizenWebEngineChromium::InitWebView(uint32_t argc, char** argv) { - mJavaScriptEvaluationResultHandlers.clear(); - mJavaScriptMessageHandlers.clear(); + if(argc > 0) + { + ewk_set_arguments(argc, argv); + } + + Ecore_Wl2_Window* win = AnyCast(Adaptor::Get().GetNativeWindowHandle()); + Ewk_Context* context = ewk_context_default_get(); + ewk_context_max_refresh_rate_set(context, 60); + mWebView = ewk_view_add(ecore_evas_get(WebEngineManager::Get().GetWindow())); + ewk_view_offscreen_rendering_enabled_set(mWebView, true); + ewk_view_ime_window_set(mWebView, win); + + Ewk_Settings* settings = ewk_view_settings_get(mWebView); + mWebEngineSettings.reset(new TizenWebEngineSettings(settings)); + + Ewk_Back_Forward_List* backForwardList = ewk_view_back_forward_list_get(mWebView); + mWebEngineBackForwardList.reset(new TizenWebEngineBackForwardList(backForwardList)); + + ewk_settings_viewport_meta_tag_set(settings, false); + + evas_object_smart_callback_add(mWebView, "offscreen,frame,rendered", &TizenWebEngineChromium::OnFrameRendered, this); + evas_object_smart_callback_add(mWebView, "load,started", &TizenWebEngineChromium::OnLoadStarted, this); + evas_object_smart_callback_add(mWebView, "load,progress", &TizenWebEngineChromium::OnLoadInProgress, this); + evas_object_smart_callback_add(mWebView, "load,finished", &TizenWebEngineChromium::OnLoadFinished, this); + evas_object_smart_callback_add(mWebView, "load,error", &TizenWebEngineChromium::OnLoadError, this); + evas_object_smart_callback_add(mWebView, "url,changed", &TizenWebEngineChromium::OnUrlChanged, this); + evas_object_smart_callback_add(mWebView, "console,message", &TizenWebEngineChromium::OnConsoleMessageReceived, this); + evas_object_smart_callback_add(mWebView, "edge,left", &TizenWebEngineChromium::OnEdgeLeft, this); + evas_object_smart_callback_add(mWebView, "edge,right", &TizenWebEngineChromium::OnEdgeRight, this); + evas_object_smart_callback_add(mWebView, "edge,top", &TizenWebEngineChromium::OnEdgeTop, this); + evas_object_smart_callback_add(mWebView, "edge,bottom", &TizenWebEngineChromium::OnEdgeBottom, this); + evas_object_smart_callback_add(mWebView, "form,repost,warning,show", &TizenWebEngineChromium::OnFormRepostDecided, this); + evas_object_smart_callback_add(mWebView, "policy,response,decide", &TizenWebEngineChromium::OnResponsePolicyDecided, this); + evas_object_smart_callback_add(mWebView, "policy,navigation,decide", &TizenWebEngineChromium::OnNavigationPolicyDecided, this); + evas_object_smart_callback_add(mWebView, "create,window", &TizenWebEngineChromium::OnNewWindowCreated, this); + evas_object_smart_callback_add(mWebView, "request,certificate,confirm", &TizenWebEngineChromium::OnCertificateConfirmed, this); + evas_object_smart_callback_add(mWebView, "ssl,certificate,changed", &TizenWebEngineChromium::OnSslCertificateChanged, this); + evas_object_smart_callback_add(mWebView, "contextmenu,show", &TizenWebEngineChromium::OnContextMenuShown, this); + evas_object_smart_callback_add(mWebView, "contextmenu,hide", &TizenWebEngineChromium::OnContextMenuHidden, this); + + ewk_view_authentication_callback_set(mWebView, &TizenWebEngineChromium::OnAuthenticationChallenged, this); + + evas_object_resize(mWebView, mWidth, mHeight); + evas_object_show(mWebView); +} - if(mWebView) +void TizenWebEngineChromium::Destroy() +{ + if(WebEngineManager::IsAvailable()) { - if(WebEngineManager::IsAvailable()) - { - WebEngineManager::Get().Remove(mWebView); - } - evas_object_del(mWebView); - mWebView = nullptr; + WebEngineManager::Get().Remove(mWebView); } + evas_object_del(mWebView); + mWebView = nullptr; } void TizenWebEngineChromium::LoadUrl(const std::string& path) @@ -350,35 +367,14 @@ void TizenWebEngineChromium::GoBack() void TizenWebEngineChromium::EvaluateJavaScript(const std::string& script, JavaScriptMessageHandlerCallback resultHandler) { - bool badAlloc = false; - - try - { - mJavaScriptEvaluationResultHandlers.emplace(mJavaScriptEvaluationCount, resultHandler); - } - catch(std::bad_alloc& e) - { - badAlloc = true; - DALI_LOG_ERROR("Too many ongoing JavaScript evaluations."); - } - - if(!badAlloc) - { - ewk_view_script_execute(mWebView, script.c_str(), &TizenWebEngineChromium::OnEvaluateJavaScript, (void*)mJavaScriptEvaluationCount); - mJavaScriptEvaluationCount++; - } + mJavaScriptEvaluatedCallback = resultHandler; + ewk_view_script_execute(mWebView, script.c_str(), &TizenWebEngineChromium::OnJavaScriptEvaluated, this); } void TizenWebEngineChromium::AddJavaScriptMessageHandler(const std::string& exposedObjectName, JavaScriptMessageHandlerCallback handler) { - if(mJavaScriptMessageHandlers.emplace(exposedObjectName, handler).second) - { - ewk_view_javascript_message_handler_add(mWebView, &TizenWebEngineChromium::OnJavaScriptMessage, exposedObjectName.c_str()); - } - else - { - DALI_LOG_ERROR("Callback for (%s) already exists.", exposedObjectName.c_str()); - } + mJavaScriptInjectedCallback = handler; + ewk_view_javascript_message_handler_add(mWebView, &TizenWebEngineChromium::OnJavaScriptInjected, exposedObjectName.c_str()); } void TizenWebEngineChromium::RegisterJavaScriptAlertCallback(JavaScriptAlertCallback callback) @@ -505,6 +501,112 @@ bool TizenWebEngineChromium::SendTouchEvent(const Dali::TouchEvent& touch) #endif } +bool TizenWebEngineChromium::FeedMouseEvent(const TouchEvent& touch) +{ + Ewk_Mouse_Button_Type type = (Ewk_Mouse_Button_Type)0; + switch(touch.GetMouseButton(0)) + { + case MouseButton::PRIMARY: + { + type = EWK_Mouse_Button_Left; + break; + } + case MouseButton::TERTIARY: + { + type = EWK_Mouse_Button_Middle; + break; + } + case MouseButton::SECONDARY: + { + type = EWK_Mouse_Button_Right; + break; + } + default: + { + break; + } + } + + switch(touch.GetState(0)) + { + case PointState::DOWN: + { + float x = touch.GetScreenPosition(0).x; + float y = touch.GetScreenPosition(0).y; + ewk_view_feed_mouse_down(mWebView, type, x, y); + break; + } + case PointState::UP: + { + float x = touch.GetScreenPosition(0).x; + float y = touch.GetScreenPosition(0).y; + ewk_view_feed_mouse_up(mWebView, type, x, y); + break; + } + case PointState::MOTION: + { + float x = touch.GetScreenPosition(0).x; + float y = touch.GetScreenPosition(0).y; + ewk_view_feed_mouse_move(mWebView, x, y); + break; + } + default: + { + break; + } + } + return false; +} + +bool TizenWebEngineChromium::FeedTouchEvent(const TouchEvent& touch) +{ + Ewk_Touch_Event_Type type = EWK_TOUCH_START; + Evas_Touch_Point_State state = EVAS_TOUCH_POINT_DOWN; + switch(touch.GetState(0)) + { + case PointState::DOWN: + { + type = EWK_TOUCH_START; + state = EVAS_TOUCH_POINT_DOWN; + break; + } + case PointState::UP: + { + type = EWK_TOUCH_END; + state = EVAS_TOUCH_POINT_UP; + break; + } + case PointState::MOTION: + { + type = EWK_TOUCH_MOVE; + state = EVAS_TOUCH_POINT_MOVE; + break; + } + case PointState::INTERRUPTED: + { + type = EWK_TOUCH_CANCEL; + state = EVAS_TOUCH_POINT_CANCEL; + break; + } + default: + { + break; + } + } + + Eina_List* pointList = 0; + Ewk_Touch_Point point; + point.id = 0; + point.x = touch.GetScreenPosition(0).x; + point.y = touch.GetScreenPosition(0).y; + point.state = state; + pointList = eina_list_append(pointList, &point); + + bool fed = ewk_view_feed_touch_event(mWebView, type, pointList, 0); + eina_list_free(pointList); + return fed; +} + bool TizenWebEngineChromium::SendKeyEvent(const Dali::KeyEvent& keyEvent) { void* evasKeyEvent = 0; @@ -688,9 +790,9 @@ void TizenWebEngineChromium::EnableVideoHole(bool enabled) ewk_view_set_support_video_hole(mWebView, win, enabled, EINA_FALSE); } -Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType& TizenWebEngineChromium::FrameRenderedSignal() +void TizenWebEngineChromium::RegisterFrameRenderedCallback(WebEngineFrameRenderedCallback callback) { - return mFrameRenderedSignal; + mFrameRenderedCallback = callback; } void TizenWebEngineChromium::RegisterPageLoadStartedCallback(WebEnginePageLoadCallback callback) @@ -743,6 +845,11 @@ void TizenWebEngineChromium::RegisterNavigationPolicyDecidedCallback(WebEngineNa mNavigationPolicyDecidedCallback = callback; } +void TizenWebEngineChromium::RegisterNewWindowCreatedCallback(WebEngineNewWindowCreatedCallback callback) +{ + mNewWindowCreatedCallback = callback; +} + void TizenWebEngineChromium::RegisterCertificateConfirmedCallback(WebEngineCertificateCallback callback) { mCertificateConfirmedCallback = callback; @@ -768,228 +875,6 @@ void TizenWebEngineChromium::RegisterContextMenuHiddenCallback(WebEngineContextM mContextMenuHiddenCallback = callback; } -void TizenWebEngineChromium::RunJavaScriptEvaluationResultHandler(size_t key, const char* result) -{ - auto handler = mJavaScriptEvaluationResultHandlers.find(key); - if(handler == mJavaScriptEvaluationResultHandlers.end()) - { - return; - } - - if(handler->second) - { - std::string stored(result); - handler->second(stored); - } - - mJavaScriptEvaluationResultHandlers.erase(handler); -} - -void TizenWebEngineChromium::RunJavaScriptMessageHandler(const std::string& objectName, const std::string& message) -{ - auto handler = mJavaScriptMessageHandlers.find(objectName); - if(handler == mJavaScriptMessageHandlers.end()) - { - return; - } - - handler->second(message); -} - -bool TizenWebEngineChromium::JavaScriptAlert(const std::string& alert_text) -{ - return ExecuteCallbackReturn(mJavaScriptAlertCallback, alert_text); -} - -bool TizenWebEngineChromium::JavaScriptConfirm(const std::string& message) -{ - return ExecuteCallbackReturn(mJavaScriptConfirmCallback, message); -} - -bool TizenWebEngineChromium::JavaScriptPrompt(const std::string& message, const std::string& default_value) -{ - return ExecuteCallbackReturn(mJavaScriptPromptCallback, message, default_value); -} - -void TizenWebEngineChromium::ScreenshotCaptured(Dali::PixelData pixelData) -{ - DALI_LOG_RELEASE_INFO("#ScreenshotCaptured.\n"); - ExecuteCallback(mScreenshotCapturedCallback, pixelData); -} - -void TizenWebEngineChromium::VideoPlaying(bool isPlaying) -{ - ExecuteCallback(mVideoPlayingCallback, isPlaying); -} - -bool TizenWebEngineChromium::GeolocationPermission(const std::string& host, const std::string& protocol) -{ - return ExecuteCallbackReturn(mGeolocationPermissionCallback, host, protocol); -} - -bool TizenWebEngineChromium::HitTestCreated(std::unique_ptr hitTest) -{ - return ExecuteCallbackReturn(mHitTestCreatedCallback, std::move(hitTest)); -} - -void TizenWebEngineChromium::PlainTextRecieved(const std::string& plainText) -{ - ExecuteCallback(mPlainTextReceivedCallback, plainText); -} - -void TizenWebEngineChromium::InitWebView(uint32_t argc, char** argv) -{ - if(argc > 0) - { - ewk_set_arguments(argc, argv); - } - - Ecore_Wl2_Window* win = AnyCast(Adaptor::Get().GetNativeWindowHandle()); - Ewk_Context* context = ewk_context_default_get(); - ewk_context_max_refresh_rate_set(context, 60); - mWebView = ewk_view_add(ecore_evas_get(WebEngineManager::Get().GetWindow())); - ewk_view_offscreen_rendering_enabled_set(mWebView, true); - ewk_view_ime_window_set(mWebView, win); - - Ewk_Settings* settings = ewk_view_settings_get(mWebView); - mWebEngineSettings.reset(new TizenWebEngineSettings(settings)); - - Ewk_Back_Forward_List* backForwardList = ewk_view_back_forward_list_get(mWebView); - mWebEngineBackForwardList.reset(new TizenWebEngineBackForwardList(backForwardList)); - - ewk_settings_viewport_meta_tag_set(settings, false); - - evas_object_smart_callback_add(mWebView, "offscreen,frame,rendered", &TizenWebEngineChromium::OnFrameRendered, this); - evas_object_smart_callback_add(mWebView, "load,started", &TizenWebEngineChromium::OnLoadStarted, this); - evas_object_smart_callback_add(mWebView, "load,progress", &TizenWebEngineChromium::OnLoadInProgress, this); - evas_object_smart_callback_add(mWebView, "load,finished", &TizenWebEngineChromium::OnLoadFinished, this); - evas_object_smart_callback_add(mWebView, "load,error", &TizenWebEngineChromium::OnLoadError, this); - evas_object_smart_callback_add(mWebView, "url,changed", &TizenWebEngineChromium::OnUrlChanged, this); - evas_object_smart_callback_add(mWebView, "console,message", &TizenWebEngineChromium::OnConsoleMessageReceived, this); - evas_object_smart_callback_add(mWebView, "edge,left", &TizenWebEngineChromium::OnEdgeLeft, this); - evas_object_smart_callback_add(mWebView, "edge,right", &TizenWebEngineChromium::OnEdgeRight, this); - evas_object_smart_callback_add(mWebView, "edge,top", &TizenWebEngineChromium::OnEdgeTop, this); - evas_object_smart_callback_add(mWebView, "edge,bottom", &TizenWebEngineChromium::OnEdgeBottom, this); - evas_object_smart_callback_add(mWebView, "form,repost,warning,show", &TizenWebEngineChromium::OnFormRepostDecided, this); - evas_object_smart_callback_add(mWebView, "policy,response,decide", &TizenWebEngineChromium::OnResponsePolicyDecided, this); - evas_object_smart_callback_add(mWebView, "policy,navigation,decide", &TizenWebEngineChromium::OnNavigationPolicyDecided, this); - evas_object_smart_callback_add(mWebView, "request,certificate,confirm", &TizenWebEngineChromium::OnCertificateConfirmed, this); - evas_object_smart_callback_add(mWebView, "ssl,certificate,changed", &TizenWebEngineChromium::OnSslCertificateChanged, this); - evas_object_smart_callback_add(mWebView, "contextmenu,show", &TizenWebEngineChromium::OnContextMenuShown, this); - evas_object_smart_callback_add(mWebView, "contextmenu,hide", &TizenWebEngineChromium::OnContextMenuHidden, this); - - ewk_view_authentication_callback_set(mWebView, &TizenWebEngineChromium::OnAuthenticationChallenged, this); - - evas_object_resize(mWebView, mWidth, mHeight); - evas_object_show(mWebView); -} - -bool TizenWebEngineChromium::FeedMouseEvent(const TouchEvent& touch) -{ - Ewk_Mouse_Button_Type type = (Ewk_Mouse_Button_Type)0; - switch(touch.GetMouseButton(0)) - { - case MouseButton::PRIMARY: - { - type = EWK_Mouse_Button_Left; - break; - } - case MouseButton::TERTIARY: - { - type = EWK_Mouse_Button_Middle; - break; - } - case MouseButton::SECONDARY: - { - type = EWK_Mouse_Button_Right; - break; - } - default: - { - break; - } - } - - switch(touch.GetState(0)) - { - case PointState::DOWN: - { - float x = touch.GetScreenPosition(0).x; - float y = touch.GetScreenPosition(0).y; - ewk_view_feed_mouse_down(mWebView, type, x, y); - break; - } - case PointState::UP: - { - float x = touch.GetScreenPosition(0).x; - float y = touch.GetScreenPosition(0).y; - ewk_view_feed_mouse_up(mWebView, type, x, y); - break; - } - case PointState::MOTION: - { - float x = touch.GetScreenPosition(0).x; - float y = touch.GetScreenPosition(0).y; - ewk_view_feed_mouse_move(mWebView, x, y); - break; - } - default: - { - break; - } - } - return false; -} - -bool TizenWebEngineChromium::FeedTouchEvent(const TouchEvent& touch) -{ - Ewk_Touch_Event_Type type = EWK_TOUCH_START; - Evas_Touch_Point_State state = EVAS_TOUCH_POINT_DOWN; - switch(touch.GetState(0)) - { - case PointState::DOWN: - { - type = EWK_TOUCH_START; - state = EVAS_TOUCH_POINT_DOWN; - break; - } - case PointState::UP: - { - type = EWK_TOUCH_END; - state = EVAS_TOUCH_POINT_UP; - break; - } - case PointState::MOTION: - { - type = EWK_TOUCH_MOVE; - state = EVAS_TOUCH_POINT_MOVE; - break; - } - case PointState::INTERRUPTED: - { - type = EWK_TOUCH_CANCEL; - state = EVAS_TOUCH_POINT_CANCEL; - break; - } - default: - { - break; - } - } - - Eina_List* pointList = 0; - Ewk_Touch_Point point; - point.id = 0; - point.x = touch.GetScreenPosition(0).x; - point.y = touch.GetScreenPosition(0).y; - point.state = state; - pointList = eina_list_append(pointList, &point); - - bool fed = ewk_view_feed_touch_event(mWebView, type, pointList, 0); - eina_list_free(pointList); - return fed; -} - Dali::PixelData TizenWebEngineChromium::ConvertImageColorSpace(Evas_Object* image) { // color-space is argb8888. @@ -1017,6 +902,19 @@ Dali::PixelData TizenWebEngineChromium::ConvertImageColorSpace(Evas_Object* imag return Dali::PixelData::New(convertedBuffer, bufferSize, width, height, Dali::Pixel::Format::RGBA8888, Dali::PixelData::ReleaseFunction::DELETE_ARRAY); } +void TizenWebEngineChromium::UpdateImage(tbm_surface_h buffer) +{ + if(!buffer) + { + return; + } + DALI_LOG_RELEASE_INFO("#UpdateImage : %s\n", GetUrl().c_str()); + Any source(buffer); + mDaliImageSrc->SetSource(source); + Dali::Stage::GetCurrent().KeepRendering(0.0f); + ExecuteCallback(mFrameRenderedCallback); +} + void TizenWebEngineChromium::OnFrameRendered(void* data, Evas_Object*, void* buffer) { auto pThis = static_cast(data); @@ -1026,19 +924,22 @@ void TizenWebEngineChromium::OnFrameRendered(void* data, Evas_Object*, void* buf void TizenWebEngineChromium::OnLoadStarted(void* data, Evas_Object*, void*) { auto pThis = static_cast(data); - pThis->LoadStarted(); + DALI_LOG_RELEASE_INFO("#LoadStarted : %s\n", pThis->GetUrl().c_str()); + ExecuteCallback(pThis->mLoadStartedCallback, pThis->GetUrl()); } void TizenWebEngineChromium::OnLoadInProgress(void* data, Evas_Object*, void*) { auto pThis = static_cast(data); - pThis->LoadInProgress(); + DALI_LOG_RELEASE_INFO("#LoadInProgress : %s\n", pThis->GetUrl().c_str()); + ExecuteCallback(pThis->mLoadInProgressCallback, pThis->GetUrl().c_str()); } void TizenWebEngineChromium::OnLoadFinished(void* data, Evas_Object*, void*) { auto pThis = static_cast(data); - pThis->LoadFinished(); + DALI_LOG_RELEASE_INFO("#LoadFinished : %s\n", pThis->GetUrl().c_str()); + ExecuteCallback(pThis->mLoadFinishedCallback, pThis->GetUrl()); } void TizenWebEngineChromium::OnLoadError(void* data, Evas_Object*, void* rawError) @@ -1046,14 +947,20 @@ void TizenWebEngineChromium::OnLoadError(void* data, Evas_Object*, void* rawErro auto pThis = static_cast(data); Ewk_Error* error = static_cast(rawError); std::unique_ptr loadError(new TizenWebEngineLoadError(error)); - pThis->LoadError(std::move(loadError)); + DALI_LOG_RELEASE_INFO("#LoadError : %s\n", loadError->GetUrl().c_str()); + ExecuteCallback(pThis->mLoadErrorCallback, std::move(loadError)); } void TizenWebEngineChromium::OnUrlChanged(void* data, Evas_Object*, void* newUrl) { auto pThis = static_cast(data); - std::string url = static_cast(newUrl); - pThis->UrlChanged(url); + std::string url; + if (newUrl != nullptr) + { + url = static_cast(newUrl); + DALI_LOG_RELEASE_INFO("#UrlChanged : %s\n", url.c_str()); + } + ExecuteCallback(pThis->mUrlChangedCallback, url); } void TizenWebEngineChromium::OnConsoleMessageReceived(void* data, Evas_Object*, void* eventInfo) @@ -1061,147 +968,187 @@ void TizenWebEngineChromium::OnConsoleMessageReceived(void* data, Evas_Object*, auto pThis = static_cast(data); Ewk_Console_Message* message = static_cast(eventInfo); std::unique_ptr webConsoleMessage(new TizenWebEngineConsoleMessage(message)); - pThis->ConsoleMessageReceived(std::move(webConsoleMessage)); + DALI_LOG_RELEASE_INFO("#ConsoleMessageReceived : %s\n", webConsoleMessage->GetSource().c_str()); + ExecuteCallback(pThis->mConsoleMessageReceivedCallback, std::move(webConsoleMessage)); } void TizenWebEngineChromium::OnEdgeLeft(void* data, Evas_Object*, void*) { + DALI_LOG_RELEASE_INFO("#ScrollEdgeReached : LEFT\n"); auto pThis = static_cast(data); - pThis->ScrollEdgeReached(Dali::WebEnginePlugin::ScrollEdge::LEFT); + ExecuteCallback(pThis->mScrollEdgeReachedCallback, Dali::WebEnginePlugin::ScrollEdge::LEFT); } void TizenWebEngineChromium::OnEdgeRight(void* data, Evas_Object*, void*) { + DALI_LOG_RELEASE_INFO("#ScrollEdgeReached : RIGHT\n"); auto pThis = static_cast(data); - pThis->ScrollEdgeReached(Dali::WebEnginePlugin::ScrollEdge::RIGHT); + ExecuteCallback(pThis->mScrollEdgeReachedCallback, Dali::WebEnginePlugin::ScrollEdge::RIGHT); } void TizenWebEngineChromium::OnEdgeTop(void* data, Evas_Object*, void*) { + DALI_LOG_RELEASE_INFO("#ScrollEdgeReached : TOP\n"); auto pThis = static_cast(data); - pThis->ScrollEdgeReached(Dali::WebEnginePlugin::ScrollEdge::TOP); + ExecuteCallback(pThis->mScrollEdgeReachedCallback, Dali::WebEnginePlugin::ScrollEdge::TOP); } void TizenWebEngineChromium::OnEdgeBottom(void* data, Evas_Object*, void*) { + DALI_LOG_RELEASE_INFO("#ScrollEdgeReached : BOTTOM\n"); auto pThis = static_cast(data); - pThis->ScrollEdgeReached(Dali::WebEnginePlugin::ScrollEdge::BOTTOM); + ExecuteCallback(pThis->mScrollEdgeReachedCallback, Dali::WebEnginePlugin::ScrollEdge::BOTTOM); } void TizenWebEngineChromium::OnFormRepostDecided(void* data, Evas_Object*, void* eventInfo) { + DALI_LOG_RELEASE_INFO("#FormRepostDecidedRequest\n"); auto pThis = static_cast(data); Ewk_Form_Repost_Decision_Request* decisionRequest = static_cast(eventInfo); std::unique_ptr webDecisionRequest(new TizenWebEngineFormRepostDecision(decisionRequest)); - pThis->RequestFormRepostDecided(std::move(webDecisionRequest)); + ExecuteCallback(pThis->mFormRepostDecidedCallback, std::move(webDecisionRequest)); } void TizenWebEngineChromium::OnResponsePolicyDecided(void* data, Evas_Object*, void* policy) { + DALI_LOG_RELEASE_INFO("#ResponsePolicyDecided.\n"); auto pThis = static_cast(data); Ewk_Policy_Decision* policyDecision = static_cast(policy); std::unique_ptr webPolicyDecision(new TizenWebEnginePolicyDecision(policyDecision)); - pThis->ResponsePolicyDecided(std::move(webPolicyDecision)); + ExecuteCallback(pThis->mResponsePolicyDecidedCallback, std::move(webPolicyDecision)); } void TizenWebEngineChromium::OnNavigationPolicyDecided(void* data, Evas_Object*, void* policy) { + DALI_LOG_RELEASE_INFO("#NavigationPolicyDecided.\n"); auto pThis = static_cast(data); Ewk_Policy_Decision* policyDecision = static_cast(policy); std::unique_ptr webPolicyDecision(new TizenWebEnginePolicyDecision(policyDecision)); - pThis->NavigationPolicyDecided(std::move(webPolicyDecision)); + ExecuteCallback(pThis->mNavigationPolicyDecidedCallback, std::move(webPolicyDecision)); +} + +void TizenWebEngineChromium::OnNewWindowCreated(void* data, Evas_Object*, void* out_view) +{ + DALI_LOG_RELEASE_INFO("#NewWindowCreated.\n"); + auto pThis = static_cast(data); + Dali::WebEnginePlugin* outPlugin = nullptr; + ExecuteCallback(pThis->mNewWindowCreatedCallback, outPlugin); + if (outPlugin) + { + *static_cast(out_view) = WebEngineManager::Get().Find(outPlugin); + } + else + { + DALI_LOG_ERROR("Failed to create a new window.\n"); + } } void TizenWebEngineChromium::OnCertificateConfirmed(void* data, Evas_Object*, void* eventInfo) { + DALI_LOG_RELEASE_INFO("#CertificateConfirmed.\n"); auto pThis = static_cast(data); Ewk_Certificate_Policy_Decision* policyDecision = static_cast(eventInfo); std::unique_ptr webPolicyDecision(new TizenWebEngineCertificate(policyDecision)); - pThis->CertificateConfirmed(std::move(webPolicyDecision)); + ExecuteCallback(pThis->mCertificateConfirmedCallback, std::move(webPolicyDecision)); } void TizenWebEngineChromium::OnSslCertificateChanged(void* data, Evas_Object*, void* eventInfo) { + DALI_LOG_RELEASE_INFO("#SslCertificateChanged.\n"); auto pThis = static_cast(data); Ewk_Certificate_Info* info = static_cast(eventInfo); std::unique_ptr webCertiInfo(new TizenWebEngineCertificate(info)); - pThis->SslCertificateChanged(std::move(webCertiInfo)); + ExecuteCallback(pThis->mSslCertificateChangedCallback, std::move(webCertiInfo)); } void TizenWebEngineChromium::OnContextMenuShown(void* data, Evas_Object*, void* eventInfo) { + DALI_LOG_RELEASE_INFO("#ContextMenuShown.\n"); auto pThis = static_cast(data); Ewk_Context_Menu* menu = (Ewk_Context_Menu*)eventInfo; std::unique_ptr contextMenu(new TizenWebEngineContextMenu(menu)); - pThis->ContextMenuShown(std::move(contextMenu)); + ExecuteCallback(pThis->mContextMenuShownCallback, std::move(contextMenu)); } void TizenWebEngineChromium::OnContextMenuHidden(void* data, Evas_Object*, void* eventInfo) { + DALI_LOG_RELEASE_INFO("#ContextMenuHidden.\n"); auto pThis = static_cast(data); Ewk_Context_Menu* menu = (Ewk_Context_Menu*)eventInfo; std::unique_ptr contextMenu(new TizenWebEngineContextMenu(menu)); - pThis->ContextMenuHidden(std::move(contextMenu)); + ExecuteCallback(pThis->mContextMenuHiddenCallback, std::move(contextMenu)); } void TizenWebEngineChromium::OnAuthenticationChallenged(Evas_Object*, Ewk_Auth_Challenge* authChallenge, void* data) { + DALI_LOG_RELEASE_INFO("#AuthenticationChallenged.\n"); auto pThis = static_cast(data); std::unique_ptr authHandler(new TizenWebEngineHttpAuthHandler(authChallenge)); - pThis->AuthenticationChallenged(std::move(authHandler)); + ExecuteCallback(pThis->mHttpAuthHandlerCallback, std::move(authHandler)); } -void TizenWebEngineChromium::OnEvaluateJavaScript(Evas_Object* o, const char* result, void* data) +void TizenWebEngineChromium::OnJavaScriptEvaluated(Evas_Object*, const char* result, void* data) { - auto plugin = WebEngineManager::Get().Find(o); - if(plugin) + auto pThis = static_cast(data); + std::string jsResult; + if (result != nullptr) { - auto pThis = static_cast(plugin); - pThis->RunJavaScriptEvaluationResultHandler((size_t)data, result); + jsResult = result; } + ExecuteCallback(pThis->mJavaScriptEvaluatedCallback, jsResult); } -void TizenWebEngineChromium::OnJavaScriptMessage(Evas_Object* o, Ewk_Script_Message message) +void TizenWebEngineChromium::OnJavaScriptInjected(Evas_Object* o, Ewk_Script_Message message) { auto plugin = WebEngineManager::Get().Find(o); if(plugin) { auto pThis = static_cast(plugin); - pThis->RunJavaScriptMessageHandler(message.name, static_cast(message.body)); + std::string resultText; + if (message.body != nullptr) + { + resultText = static_cast(message.body); + } + ExecuteCallback(pThis->mJavaScriptInjectedCallback, resultText); } } Eina_Bool TizenWebEngineChromium::OnJavaScriptAlert(Evas_Object* o, const char* alert_text, void* data) { - bool result = false; auto pThis = static_cast(data); - if(pThis) + std::string alertText; + if(alert_text != nullptr) { - result = pThis->JavaScriptAlert(const_cast(alert_text)); + alertText = alert_text; } - return result; + return ExecuteCallbackReturn(pThis->mJavaScriptAlertCallback, alertText); } Eina_Bool TizenWebEngineChromium::OnJavaScriptConfirm(Evas_Object* o, const char* message, void* data) { - bool result = false; auto pThis = static_cast(data); - if(pThis) + std::string messageText; + if(message != nullptr) { - result = pThis->JavaScriptConfirm(const_cast(message)); + messageText = message; } - return result; + return ExecuteCallbackReturn(pThis->mJavaScriptConfirmCallback, messageText); } Eina_Bool TizenWebEngineChromium::OnJavaScriptPrompt(Evas_Object* o, const char* message, const char* default_value, void* data) { - bool result = false; auto pThis = static_cast(data); - if(pThis) + std::string messageText; + if(message != nullptr) { - result = pThis->JavaScriptPrompt(const_cast(message), const_cast(default_value)); + messageText = message; } - return result; + std::string defaultValueText; + if(default_value != nullptr) + { + defaultValueText = default_value; + } + return ExecuteCallbackReturn(pThis->mJavaScriptPromptCallback, messageText, defaultValueText); } void TizenWebEngineChromium::OnHitTestCreated(Evas_Object*, int x, int y, int hitTestMode, Ewk_Hit_Test* hitTest, void* data) @@ -1209,33 +1156,32 @@ void TizenWebEngineChromium::OnHitTestCreated(Evas_Object*, int x, int y, int hi auto pThis = static_cast(data); Evas* evas = ecore_evas_get(WebEngineManager::Get().GetWindow()); std::unique_ptr webHitTest(new TizenWebEngineHitTest(hitTest, evas, false)); - pThis->HitTestCreated(std::move(webHitTest)); + ExecuteCallbackReturn(pThis->mHitTestCreatedCallback, std::move(webHitTest)); } void TizenWebEngineChromium::OnScreenshotCaptured(Evas_Object* image, void* data) { + DALI_LOG_RELEASE_INFO("#ScreenshotCaptured.\n"); auto pThis = static_cast(data); Dali::PixelData pixelData = ConvertImageColorSpace(image); - pThis->ScreenshotCaptured(pixelData); + ExecuteCallback(pThis->mScreenshotCapturedCallback, pixelData); } void TizenWebEngineChromium::OnVideoPlaying(Evas_Object*, Eina_Bool isPlaying, void* data) { auto pThis = static_cast(data); - pThis->VideoPlaying(isPlaying); + ExecuteCallback(pThis->mVideoPlayingCallback, isPlaying); } void TizenWebEngineChromium::OnPlainTextReceived(Evas_Object* o, const char* plainText, void* data) { auto pThis = static_cast(data); std::string resultText; - if(plainText != nullptr) { - resultText = std::string(plainText); + resultText = plainText; } - - pThis->PlainTextRecieved(resultText); + ExecuteCallback(pThis->mPlainTextReceivedCallback, resultText); } Eina_Bool TizenWebEngineChromium::OnGeolocationPermission(Evas_Object*, Ewk_Geolocation_Permission_Request* request, void* data) @@ -1244,109 +1190,7 @@ Eina_Bool TizenWebEngineChromium::OnGeolocationPermission(Evas_Object*, Ewk_Geol const Ewk_Security_Origin* securityOrigin = ewk_geolocation_permission_request_origin_get(request); std::string host = ewk_security_origin_host_get(securityOrigin); std::string protocol = ewk_security_origin_protocol_get(securityOrigin); - return pThis->GeolocationPermission(host, protocol); -} - -void TizenWebEngineChromium::UpdateImage(tbm_surface_h buffer) -{ - if(!buffer) - { - return; - } - Any source(buffer); - mDaliImageSrc->SetSource(source); - Dali::Stage::GetCurrent().KeepRendering(0.0f); - mFrameRenderedSignal.Emit(); -} - -void TizenWebEngineChromium::LoadStarted() -{ - DALI_LOG_RELEASE_INFO("#LoadStarted : %s\n", GetUrl().c_str()); - ExecuteCallback(mLoadStartedCallback, GetUrl()); -} - -void TizenWebEngineChromium::LoadInProgress() -{ - DALI_LOG_RELEASE_INFO("#LoadInProgress : %s\n", GetUrl().c_str()); - ExecuteCallback(mLoadInProgressCallback, ""); -} - -void TizenWebEngineChromium::LoadFinished() -{ - DALI_LOG_RELEASE_INFO("#LoadFinished : %s\n", GetUrl().c_str()); - ExecuteCallback(mLoadFinishedCallback, GetUrl()); -} - -void TizenWebEngineChromium::LoadError(std::unique_ptr error) -{ - DALI_LOG_RELEASE_INFO("#LoadError : %s\n", error->GetUrl().c_str()); - ExecuteCallback(mLoadErrorCallback, std::move(error)); -} - -void TizenWebEngineChromium::ScrollEdgeReached(Dali::WebEnginePlugin::ScrollEdge edge) -{ - DALI_LOG_RELEASE_INFO("#ScrollEdgeReached : %d\n", edge); - ExecuteCallback(mScrollEdgeReachedCallback, edge); -} - -void TizenWebEngineChromium::UrlChanged(const std::string& url) -{ - DALI_LOG_RELEASE_INFO("#UrlChanged : %s\n", url.c_str()); - ExecuteCallback(mUrlChangedCallback, url); -} - -void TizenWebEngineChromium::RequestFormRepostDecided(std::unique_ptr decision) -{ - DALI_LOG_RELEASE_INFO("#FormRepostDecidedRequest\n"); - ExecuteCallback(mFormRepostDecidedCallback, std::move(decision)); -} - -void TizenWebEngineChromium::ConsoleMessageReceived(std::unique_ptr message) -{ - DALI_LOG_RELEASE_INFO("#ConsoleMessageReceived : %s\n", message->GetSource().c_str()); - ExecuteCallback(mConsoleMessageReceivedCallback, std::move(message)); -} - -void TizenWebEngineChromium::ResponsePolicyDecided(std::unique_ptr decision) -{ - DALI_LOG_RELEASE_INFO("#ResponsePolicyDecided.\n"); - ExecuteCallback(mResponsePolicyDecidedCallback, std::move(decision)); -} - -void TizenWebEngineChromium::NavigationPolicyDecided(std::unique_ptr decision) -{ - DALI_LOG_RELEASE_INFO("#NavigationPolicyDecided.\n"); - ExecuteCallback(mNavigationPolicyDecidedCallback, std::move(decision)); -} - -void TizenWebEngineChromium::CertificateConfirmed(std::unique_ptr confirm) -{ - DALI_LOG_RELEASE_INFO("#CertificateConfirmed.\n"); - ExecuteCallback(mCertificateConfirmedCallback, std::move(confirm)); -} - -void TizenWebEngineChromium::SslCertificateChanged(std::unique_ptr info) -{ - DALI_LOG_RELEASE_INFO("#SslCertificateChanged.\n"); - ExecuteCallback(mSslCertificateChangedCallback, std::move(info)); -} - -void TizenWebEngineChromium::AuthenticationChallenged(std::unique_ptr handler) -{ - DALI_LOG_RELEASE_INFO("#AuthenticationChallenged.\n"); - ExecuteCallback(mHttpAuthHandlerCallback, std::move(handler)); -} - -void TizenWebEngineChromium::ContextMenuShown(std::unique_ptr menu) -{ - DALI_LOG_RELEASE_INFO("#ContextMenuShown.\n"); - ExecuteCallback(mContextMenuShownCallback, std::move(menu)); -} - -void TizenWebEngineChromium::ContextMenuHidden(std::unique_ptr menu) -{ - DALI_LOG_RELEASE_INFO("#ContextMenuHidden.\n"); - ExecuteCallback(mContextMenuHiddenCallback, std::move(menu)); + return ExecuteCallbackReturn(pThis->mGeolocationPermissionCallback, host, protocol); } } // namespace Plugin diff --git a/dali-extension/web-engine-chromium/tizen-web-engine-chromium.h b/dali-extension/web-engine-chromium/tizen-web-engine-chromium.h index df5782c..d524691 100755 --- a/dali-extension/web-engine-chromium/tizen-web-engine-chromium.h +++ b/dali-extension/web-engine-chromium/tizen-web-engine-chromium.h @@ -429,11 +429,6 @@ public: bool CheckVideoPlayingAsynchronously(VideoPlayingCallback callback) override; /** - * @copydoc Dali::WebEnginePlugin::RegisterGeolocationPermissionCallback() - */ - void RegisterGeolocationPermissionCallback(GeolocationPermissionCallback callback) override; - - /** * @copydoc Dali::WebEnginePlugin::UpdateDisplayArea() */ void UpdateDisplayArea(Dali::Rect displayArea) override; @@ -454,9 +449,9 @@ public: bool SendWheelEvent(const Dali::WheelEvent& event) override; /** - * @copydoc Dali::WebEnginePlugin::FrameRenderedSignal() + * @copydoc Dali::WebEnginePlugin::RegisterFrameRenderedCallback() */ - Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType& FrameRenderedSignal() override; + void RegisterFrameRenderedCallback(WebEngineFrameRenderedCallback callback) override; /** * @copydoc Dali::WebEnginePlugin::RegisterPageLoadStartedCallback() @@ -509,6 +504,16 @@ public: void RegisterNavigationPolicyDecidedCallback(WebEngineNavigationPolicyDecidedCallback callback) override; /** + * @copydoc Dali::WebEnginePlugin::RegisterNewWindowCreatedCallback() + */ + void RegisterNewWindowCreatedCallback(WebEngineNewWindowCreatedCallback callback) override; + + /** + * @copydoc Dali::WebEnginePlugin::RegisterGeolocationPermissionCallback() + */ + void RegisterGeolocationPermissionCallback(GeolocationPermissionCallback callback) override; + + /** * @copydoc Dali::WebEnginePlugin::RegisterCertificateConfirmedCallback() */ void RegisterCertificateConfirmedCallback(WebEngineCertificateCallback callback) override; @@ -542,266 +547,49 @@ private: static Dali::PixelData ConvertImageColorSpace(Evas_Object* image); static void OnFrameRendered(void* data, Evas_Object*, void* buffer); - static void OnLoadStarted(void* data, Evas_Object*, void*); - static void OnLoadInProgress(void* data, Evas_Object*, void*); - static void OnLoadFinished(void* data, Evas_Object*, void*); - static void OnLoadError(void* data, Evas_Object*, void* rawError); - static void OnUrlChanged(void* data, Evas_Object*, void* newUrl); - static void OnConsoleMessageReceived(void* data, Evas_Object*, void* eventInfo); - static void OnEdgeLeft(void* data, Evas_Object*, void*); - static void OnEdgeRight(void* data, Evas_Object*, void*); - static void OnEdgeTop(void* data, Evas_Object*, void*); - static void OnEdgeBottom(void* data, Evas_Object*, void*); - static void OnFormRepostDecided(void* data, Evas_Object*, void* eventInfo); - static void OnResponsePolicyDecided(void* data, Evas_Object*, void* policy); - static void OnNavigationPolicyDecided(void* data, Evas_Object*, void* policy); - + static void OnNewWindowCreated(void* data, Evas_Object*, void* out_view); static void OnCertificateConfirmed(void* data, Evas_Object*, void* eventInfo); - static void OnSslCertificateChanged(void* data, Evas_Object*, void* eventInfo); - static void OnContextMenuShown(void* data, Evas_Object*, void* eventInfo); - static void OnContextMenuHidden(void* data, Evas_Object*, void* eventInfo); - static void OnAuthenticationChallenged(Evas_Object*, Ewk_Auth_Challenge* authChallenge, void* data); - - static void OnEvaluateJavaScript(Evas_Object* o, const char* result, void* data); - - static void OnJavaScriptMessage(Evas_Object* o, Ewk_Script_Message message); - + static void OnJavaScriptEvaluated(Evas_Object* o, const char* result, void* data); + static void OnJavaScriptInjected(Evas_Object* o, Ewk_Script_Message message); static Eina_Bool OnJavaScriptAlert(Evas_Object* o, const char* alert_text, void*); - static Eina_Bool OnJavaScriptConfirm(Evas_Object* o, const char* message, void*); - static Eina_Bool OnJavaScriptPrompt(Evas_Object* o, const char* message, const char* default_value, void*); - static void OnHitTestCreated(Evas_Object*, int x, int y, int hitTestMode, Ewk_Hit_Test* hitTest, void* data); - static void OnScreenshotCaptured(Evas_Object* image, void* data); - static void OnVideoPlaying(Evas_Object*, Eina_Bool isPlaying, void* data); - static void OnPlainTextReceived(Evas_Object* o, const char* plainText, void* data); - static Eina_Bool OnGeolocationPermission(Evas_Object*, Ewk_Geolocation_Permission_Request* request, void* data); - /** - * @brief Callback function to be called by WebViewContainer when surface is - * updated. - * @param [in] buffer The surface - */ void UpdateImage(tbm_surface_h buffer); - - /** - * @brief Callback function to be called by WebViewContainer when page loading - * is started. - */ - void LoadStarted(); - - /** - * @brief Callback function to be called by WebViewContainer when page loading - * is in progress. - */ - void LoadInProgress(); - - /** - * @brief Callback function to be called by WebViewContainer when page loading - * is finished. - */ - void LoadFinished(); - - /** - * @brief Callback function to be called by WebViewContainer when an error - * occurs in page loading. - * @param [in] error The error when loading a page. - */ - void LoadError(std::unique_ptr error); - - /** - * @brief Callback function to be called by WebViewContainer when scroll edge - * is reached. - * @param [in] edge Scroll edge reached. - */ - void ScrollEdgeReached(Dali::WebEnginePlugin::ScrollEdge edge); - - /** - * @brief Callback function to be called by WebViewContainer when form repost - * policy would be decided. - * @param [in] decision The decision policy to show warning when form repost. - */ - void RequestFormRepostDecided(std::unique_ptr decision); - - /** - * @brief Callback function to be called by WebViewContainer when http response - * policy would be decided. - * @param [in] decision Policy need be decided. - */ - void ResponsePolicyDecided(std::unique_ptr policy); - - /** - * @brief Callback function to be called by WebViewContainer when navigation - * policy would be decided. - * @param [in] decision Policy need be decided. - */ - void NavigationPolicyDecided(std::unique_ptr policy); - - /** - * @brief Callback function to be called by WebViewContainer when url is - * changed. - * @param [in] url New url after url is changed. - */ - void UrlChanged(const std::string& url); - - /** - * @brief Callback function to be called by WebViewContainer when console - * message is logged out. - * @param [in] message Message need be logged out. - */ - void ConsoleMessageReceived(std::unique_ptr message); - - /** - * @brief Callback function to be called by WebViewContainer when certificate - * need be confirmed. - * @param [in] confirm Policy confirm request. - */ - void CertificateConfirmed(std::unique_ptr confirm); - - /** - * @brief Callback function to be called by WebViewContainer when certificate - * is changed. - * @param [in] info Certificate information. - */ - void SslCertificateChanged(std::unique_ptr info); - - /** - * @brief Callback function to be called by WebViewContainer when - * authentication need be confirmed. - * @param [in] handler Http authentication challenge handler. - */ - void AuthenticationChallenged(std::unique_ptr handler); - - /** - * @brief Callback function to be called by WebViewContainer when context menu - * would be shown. - * @param [in] menu Menu would be shown. - */ - void ContextMenuShown(std::unique_ptr menu); - - /** - * @brief Callback function to be called by WebViewContainer when context menu - * would be hidden. - * @param [in] menu Menu would be hidden. - */ - void ContextMenuHidden(std::unique_ptr menu); - - /** - * @brief Callback function to be called by WebViewContainer when it gets - * JavaScript evalution result. - * @param [in] key An unsigned integer representing the result handler - * @param [in] result Result string from JavaScript runtime - * @see Dali::Plugin::TizenWebEngineChromium::EvaluateJavaScript - */ - void RunJavaScriptEvaluationResultHandler(size_t key, const char* result); - - /** - * @brief Callback function to be called by WebViewContainer when a message - * handler is called from JavaScript runtime. - * @param [in] objectName Exposed object name of the message handler - * @param [in] message Message from JavaScript runtime - * @see Dali::Plugin::TizenWebEngineChromium::AddJavaScriptMessageHandler - */ - void RunJavaScriptMessageHandler(const std::string& objectName, const std::string& message); - - /** - * @brief Callback function to be called by WebViewContainer when javascript - * alert is running. - * @param [in] alertText Alert text - * @return true if a pop-up is shown, false otherwise - */ - bool JavaScriptAlert(const std::string& alert_text); - - /** - * @brief Callback function to be called by WebViewContainer when javascript - * confirm is running. - * @param [in] message Message that need be confirmed - * @return true if a pop-up is shown, false otherwise - */ - bool JavaScriptConfirm(const std::string& message); - - /** - * @brief Callback function to be called by WebViewContainer when javascript - * prompt is running. - * @param [in] message Message that need be promted - * @param [in] defaultValue Default value that need be promted - * @return true if a pop-up is shown, false otherwise - */ - bool JavaScriptPrompt(const std::string& message, const std::string& default_value); - - /** - * @brief Callback function to be called by WebViewContainer when screen shot - * is captured. - * @param [in] pixelData Pixel data captured - */ - void ScreenshotCaptured(Dali::PixelData pixelData); - - /** - * @brief Callback function to be called by WebViewContainer when video is - * playing. - * @param [in] isPlaying Video is playing or not - */ - void VideoPlaying(bool isPlaying); - - /** - * @brief Callback function to be called by WebViewContainer when requesting - * geolocation permissions with host and protocol provided. - * @param [in] host Host that requests geolocation permission - * @param [in] protocol Protocol that requests geolocation permission - * @return true if a pop-up is shown, false otherwise - */ - bool GeolocationPermission(const std::string& host, const std::string& protocol); - - /** - * @brief Callback function to be called by WebViewContainer after hit test is created. - */ - bool HitTestCreated(std::unique_ptr hitTest); - - /** - * @brief Callback function to be called by WebViewContainer as a result of getting plain text. - * @param [in] plainText The obtained plain text. - */ - void PlainTextRecieved(const std::string& plainText); - void InitWebView(uint32_t argc, char** argv); - bool FeedMouseEvent(const TouchEvent& touch); - bool FeedTouchEvent(const TouchEvent& touch); // ewk web view. + Dali::NativeImageSourcePtr mDaliImageSrc; Evas_Object* mWebView; uint32_t mWidth; uint32_t mHeight; std::unique_ptr mWebEngineBackForwardList; std::unique_ptr mWebEngineSettings; - // render. - Dali::NativeImageSourcePtr mDaliImageSrc; - WebEngineFrameRenderedSignalType mFrameRenderedSignal; - // callback. WebEnginePageLoadCallback mLoadStartedCallback; WebEnginePageLoadCallback mLoadInProgressCallback; @@ -813,6 +601,8 @@ private: WebEngineConsoleMessageReceivedCallback mConsoleMessageReceivedCallback; WebEngineResponsePolicyDecidedCallback mResponsePolicyDecidedCallback; WebEngineNavigationPolicyDecidedCallback mNavigationPolicyDecidedCallback; + WebEngineNewWindowCreatedCallback mNewWindowCreatedCallback; + WebEngineFrameRenderedCallback mFrameRenderedCallback; WebEngineCertificateCallback mCertificateConfirmedCallback; WebEngineCertificateCallback mSslCertificateChangedCallback; WebEngineHttpAuthHandlerCallback mHttpAuthHandlerCallback; @@ -826,11 +616,8 @@ private: VideoPlayingCallback mVideoPlayingCallback; GeolocationPermissionCallback mGeolocationPermissionCallback; PlainTextReceivedCallback mPlainTextReceivedCallback; - - // javascript. - size_t mJavaScriptEvaluationCount; - std::unordered_map mJavaScriptEvaluationResultHandlers; - std::unordered_map mJavaScriptMessageHandlers; + JavaScriptMessageHandlerCallback mJavaScriptEvaluatedCallback; + JavaScriptMessageHandlerCallback mJavaScriptInjectedCallback; }; } // namespace Plugin } // namespace Dali diff --git a/dali-extension/web-engine-chromium/tizen-web-engine-manager.cpp b/dali-extension/web-engine-chromium/tizen-web-engine-manager.cpp index 56f78e0..ed0ed11 100755 --- a/dali-extension/web-engine-chromium/tizen-web-engine-manager.cpp +++ b/dali-extension/web-engine-chromium/tizen-web-engine-manager.cpp @@ -29,6 +29,8 @@ #include #include +#include + namespace Dali { namespace Plugin @@ -69,8 +71,15 @@ WebEngineManager::~WebEngineManager() { if(mWebEngineManagerAvailable) { - // Call OnTerminated directly. - OnTerminated(); + try + { + // Call OnTerminated directly. + OnTerminated(); + } + catch(std::invalid_argument const& ex) + { + DALI_LOG_RELEASE_INFO("Failed to destroy web engine:%s!\n", ex.what()); + } } } @@ -110,10 +119,19 @@ Dali::WebEnginePlugin* WebEngineManager::Find(Evas_Object* webView) { return iter->second; } - else + return nullptr; +} + +Evas_Object* WebEngineManager::Find(Dali::WebEnginePlugin* plugin) +{ + for(auto it = mWebEngines.begin(); it != mWebEngines.end(); it++) { - return nullptr; + if (it->second == plugin) + { + return it->first; + } } + return nullptr; } void WebEngineManager::OnTerminated() diff --git a/dali-extension/web-engine-chromium/tizen-web-engine-manager.h b/dali-extension/web-engine-chromium/tizen-web-engine-manager.h index b6a9362..4348263 100755 --- a/dali-extension/web-engine-chromium/tizen-web-engine-manager.h +++ b/dali-extension/web-engine-chromium/tizen-web-engine-manager.h @@ -30,6 +30,9 @@ namespace Dali { +class WebEngineContext; +class WebEngineCookieManager; + namespace Plugin { /** @@ -58,6 +61,8 @@ public: Dali::WebEnginePlugin* Find(Evas_Object* o); + Evas_Object* Find(Dali::WebEnginePlugin* plugin); + private: WebEngineManager(); diff --git a/dali-extension/web-engine-lwe/tizen-web-engine-lwe.cpp b/dali-extension/web-engine-lwe/tizen-web-engine-lwe.cpp old mode 100644 new mode 100755 index a1af533..26a957a --- a/dali-extension/web-engine-lwe/tizen-web-engine-lwe.cpp +++ b/dali-extension/web-engine-lwe/tizen-web-engine-lwe.cpp @@ -1278,6 +1278,11 @@ bool TizenWebEngineLWE::SendWheelEvent(const Dali::WheelEvent& event) return false; } +void TizenWebEngineLWE::RegisterFrameRenderedCallback(WebEngineFrameRenderedCallback callback) +{ + // NOT IMPLEMENTED +} + void TizenWebEngineLWE::RegisterPageLoadStartedCallback(WebEnginePageLoadCallback callback) { // NOT IMPLEMENTED @@ -1328,6 +1333,11 @@ void TizenWebEngineLWE::RegisterNavigationPolicyDecidedCallback(WebEngineNavigat // NOT IMPLEMENTED } +void TizenWebEngineLWE::RegisterNewWindowCreatedCallback(WebEngineNewWindowCreatedCallback callback) +{ + // NOT IMPLEMENTED +} + void TizenWebEngineLWE::RegisterCertificateConfirmedCallback(WebEngineCertificateCallback callback) { // NOT IMPLEMENTED diff --git a/dali-extension/web-engine-lwe/tizen-web-engine-lwe.h b/dali-extension/web-engine-lwe/tizen-web-engine-lwe.h old mode 100644 new mode 100755 index b1d729c..3186a7f --- a/dali-extension/web-engine-lwe/tizen-web-engine-lwe.h +++ b/dali-extension/web-engine-lwe/tizen-web-engine-lwe.h @@ -459,12 +459,9 @@ public: bool SendWheelEvent(const Dali::WheelEvent& event) override; /** - * @copydoc Dali::WebEnginePlugin::FrameRenderedSignal() + * @copydoc Dali::WebEnginePlugin::RegisterFrameRenderedCallback() */ - Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType& FrameRenderedSignal() override - { - return mFrameRenderedSignal; - } + void RegisterFrameRenderedCallback(WebEngineFrameRenderedCallback callback) override; /** * @copydoc Dali::WebEnginePlugin::RegisterPageLoadStartedCallback() @@ -517,6 +514,11 @@ public: void RegisterNavigationPolicyDecidedCallback(WebEngineNavigationPolicyDecidedCallback callback) override; /** + * @copydoc Dali::WebEnginePlugin::RegisterNewWindowCreatedCallback() + */ + void RegisterNewWindowCreatedCallback(WebEngineNewWindowCreatedCallback callback) override; + + /** * @copydoc Dali::WebEnginePlugin::RegisterCertificateConfirmedCallback() */ void RegisterCertificateConfirmedCallback(WebEngineCertificateCallback callback) override; @@ -589,8 +591,6 @@ private: std::function mOnLoadResourceHandler; EventThreadCallback mUpdateBufferTrigger; - - WebEngineFrameRenderedSignalType mFrameRenderedSignal; }; } // namespace Plugin