X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fweb-view%2Fweb-view-impl.cpp;h=632baafe1f490ef77798d7253542fa50a76a2cda;hp=170495cbe63dad253a082d6421ae5268819fad9a;hb=2f810b8a969d39e569b39107a02dfaf35c0c48bc;hpb=c729115e0abda4fbf302eec33ccffa7aab1f0b29 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 170495c..632baaf 100755 --- a/dali-toolkit/internal/controls/web-view/web-view-impl.cpp +++ b/dali-toolkit/internal/controls/web-view/web-view-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 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,20 +19,19 @@ #include "web-view-impl.h" // EXTERNAL INCLUDES -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -45,14 +44,11 @@ // INTERNAL INCLUDES #include #include -#include -#include #include -#include #include #include -#include #include +#include namespace Dali { @@ -99,6 +95,8 @@ DALI_TYPE_REGISTRATION_END() #define GET_ENUM_VALUE(structName, inputExp, outputExp) \ Scripting::GetEnumerationProperty(inputExp, structName##_TABLE, structName##_TABLE_COUNT, outputExp) +std::unordered_map> WebView::mPluginWebViewMap; + WebView::WebView(const std::string& locale, const std::string& timezoneId) : Control(ControlBehaviour(ACTOR_BEHAVIOUR_DEFAULT | DISABLE_STYLE_CHANGE_SIGNALS)), mVisual(), @@ -149,6 +147,11 @@ WebView::~WebView() if(mWebEngine) { mWebEngine.FrameRenderedSignal().Disconnect(this, &WebView::OnFrameRendered); + auto iter = mPluginWebViewMap.find(mWebEngine.GetPlugin()); + if (iter != mPluginWebViewMap.end()) + { + mPluginWebViewMap.erase(iter); + } mWebEngine.Destroy(); } } @@ -157,7 +160,10 @@ Toolkit::WebView WebView::New() { WebView* impl = new WebView(); Toolkit::WebView handle = Toolkit::WebView(*impl); - + if (impl->GetPlugin()) + { + mPluginWebViewMap[impl->GetPlugin()] = handle; + } impl->Initialize(); return handle; } @@ -166,7 +172,10 @@ Toolkit::WebView WebView::New(const std::string& locale, const std::string& time { WebView* impl = new WebView(locale, timezoneId); Toolkit::WebView handle = Toolkit::WebView(*impl); - + if (impl->GetPlugin()) + { + mPluginWebViewMap[impl->GetPlugin()] = handle; + } impl->Initialize(); return handle; } @@ -175,16 +184,40 @@ Toolkit::WebView WebView::New(uint32_t argc, char** argv) { WebView* impl = new WebView(argc, argv); Toolkit::WebView handle = Toolkit::WebView(*impl); - + if (impl->GetPlugin()) + { + mPluginWebViewMap[impl->GetPlugin()] = handle; + } impl->Initialize(); return handle; } +Toolkit::WebView WebView::FindWebView(Dali::WebEnginePlugin* plugin) +{ + auto iter = mPluginWebViewMap.find(plugin); + if (iter != mPluginWebViewMap.end()) + { + return iter->second.GetHandle(); + } + return Toolkit::WebView(); +} + +Dali::WebEngineContext* WebView::GetContext() +{ + return Dali::WebEngine::GetContext(); +} + +Dali::WebEngineCookieManager* WebView::GetCookieManager() +{ + return Dali::WebEngine::GetCookieManager(); +} + void WebView::OnInitialize() { Actor self = Self(); self.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true); + self.SetProperty(DevelActor::Property::TOUCH_FOCUSABLE, true); self.TouchedSignal().Connect(this, &WebView::OnTouchEvent); self.HoveredSignal().Connect(this, &WebView::OnHoverEvent); self.WheelEventSignal().Connect(this, &WebView::OnWheelEvent); @@ -200,26 +233,26 @@ void WebView::OnInitialize() if(mWebEngine) { mWebEngine.FrameRenderedSignal().Connect(this, &WebView::OnFrameRendered); - mWebContext = std::unique_ptr(new WebContext(mWebEngine.GetContext())); - mWebCookieManager = std::unique_ptr(new WebCookieManager(mWebEngine.GetCookieManager())); mWebSettings = std::unique_ptr(new WebSettings(mWebEngine.GetSettings())); mWebBackForwardList = std::unique_ptr(new WebBackForwardList(mWebEngine.GetBackForwardList())); } + + self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER); } -Dali::Toolkit::WebSettings* WebView::GetSettings() const +Dali::WebEnginePlugin* WebView::GetPlugin() const { - return mWebSettings.get(); + return mWebEngine ? mWebEngine.GetPlugin() : nullptr; } -Dali::Toolkit::WebContext* WebView::GetContext() const +DevelControl::ControlAccessible* WebView::CreateAccessibleObject() { - return mWebContext.get(); + return new WebViewAccessible(Self(), mWebEngine); } -Dali::Toolkit::WebCookieManager* WebView::GetCookieManager() const +Dali::Toolkit::WebSettings* WebView::GetSettings() const { - return mWebCookieManager.get(); + return mWebSettings.get(); } Dali::Toolkit::WebBackForwardList* WebView::GetBackForwardList() const @@ -635,7 +668,7 @@ Dali::Toolkit::ImageView WebView::CreateImageView(Dali::PixelData pixel) const return Dali::Toolkit::ImageView(); } - Dali::Toolkit::ImageUrl url = Dali::Toolkit::Image::GenerateUrl(pixel); + Dali::Toolkit::ImageUrl url = Dali::Toolkit::Image::GenerateUrl(pixel); Dali::Toolkit::ImageView imageView = Dali::Toolkit::ImageView::New(url.GetUrl()); imageView.SetProperty(Dali::Actor::Property::SIZE, Vector2(pixel.GetWidth(), pixel.GetHeight())); return imageView; @@ -702,27 +735,27 @@ void WebView::RegisterFrameRenderedCallback(Dali::WebEnginePlugin::WebEngineFram mFrameRenderedCallback = callback; } -void WebView::RegisterRequestInterceptorCallback(Dali::WebEnginePlugin::WebEngineRequestInterceptorCallback callback) +void WebView::RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback) { if(mWebEngine) { - mWebEngine.RegisterRequestInterceptorCallback(callback); + mWebEngine.RegisterConsoleMessageReceivedCallback(callback); } } -void WebView::RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback) +void WebView::RegisterResponsePolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback callback) { if(mWebEngine) { - mWebEngine.RegisterConsoleMessageReceivedCallback(callback); + mWebEngine.RegisterResponsePolicyDecidedCallback(callback); } } -void WebView::RegisterResponsePolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback callback) +void WebView::RegisterNavigationPolicyDecidedCallback(Dali::WebEnginePlugin::WebEngineNavigationPolicyDecidedCallback callback) { if(mWebEngine) { - mWebEngine.RegisterResponsePolicyDecidedCallback(callback); + mWebEngine.RegisterNavigationPolicyDecidedCallback(callback); } } @@ -766,6 +799,14 @@ void WebView::RegisterContextMenuHiddenCallback(Dali::WebEnginePlugin::WebEngine } } +void WebView::GetPlainTextAsynchronously(Dali::WebEnginePlugin::PlainTextReceivedCallback callback) +{ + if(mWebEngine) + { + mWebEngine.GetPlainTextAsynchronously(callback); + } +} + void WebView::OnFrameRendered() { if(mFrameRenderedCallback) @@ -778,9 +819,8 @@ void WebView::OnInitialFrameRendered() { mWebEngine.FrameRenderedSignal().Disconnect(this, &WebView::OnInitialFrameRendered); - Texture texture = Dali::Texture::New(*mWebEngine.GetNativeImageSource()); - const std::string nativeImageUrl = Dali::Toolkit::TextureManager::AddTexture(texture); - mVisual = Toolkit::VisualFactory::Get().CreateVisual({{Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE}, {Toolkit::ImageVisual::Property::URL, nativeImageUrl}}); + Dali::Toolkit::ImageUrl nativeImageUrl = Dali::Toolkit::Image::GenerateUrl(mWebEngine.GetNativeImageSource()); + mVisual = Toolkit::VisualFactory::Get().CreateVisual({{Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE}, {Toolkit::ImageVisual::Property::URL, nativeImageUrl.GetUrl()}}); if(mVisual) { @@ -1230,6 +1270,65 @@ bool WebView::SetVisibility(bool visible) return mWebEngine ? mWebEngine.SetVisibility(visible) : false; } +WebView::WebViewAccessible::WebViewAccessible(Dali::Actor self, Dali::WebEngine& webEngine) +: ControlAccessible(self), mRemoteChild{}, mWebEngine{webEngine} +{ + mRemoteChild.SetParent(this); + + Dali::Accessibility::Bridge::EnabledSignal().Connect(this, &WebViewAccessible::OnAccessibilityEnabled); + Dali::Accessibility::Bridge::DisabledSignal().Connect(this, &WebViewAccessible::OnAccessibilityDisabled); + + if(Dali::Accessibility::IsUp()) + { + OnAccessibilityEnabled(); + } + else + { + OnAccessibilityDisabled(); + } +} + +void WebView::WebViewAccessible::DoGetChildren(std::vector& children) +{ + if(mRemoteChild.GetAddress()) + { + children.push_back(&mRemoteChild); + } +} + +void WebView::WebViewAccessible::OnAccessibilityEnabled() +{ + if(!mWebEngine) + { + return; + } + + mWebEngine.ActivateAccessibility(true); + SetRemoteChildAddress(mWebEngine.GetAccessibilityAddress()); +} + +void WebView::WebViewAccessible::OnAccessibilityDisabled() +{ + if(!mWebEngine) + { + return; + } + + SetRemoteChildAddress({}); + mWebEngine.ActivateAccessibility(false); +} + +void WebView::WebViewAccessible::SetRemoteChildAddress(Dali::Accessibility::Address address) +{ + mRemoteChild.SetAddress(address); + OnChildrenChanged(); + + if(address) + { + Accessibility::Bridge::GetCurrentBridge()->EmbedAtkSocket(GetAddress(), address); + } +} + #undef GET_ENUM_STRING #undef GET_ENUM_VALUE