From: liwei90727 Date: Tue, 12 Mar 2024 06:38:36 +0000 (+0800) Subject: [M120 Migration][WRTjs] Support NavigationPolicy on decide Navigation X-Git-Tag: submit/tizen/20240325.160016~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=53bb9e3daf8f45d9609a60445b8bc88bae1a36c9;p=platform%2Fframework%2Fweb%2Fchromium-efl.git [M120 Migration][WRTjs] Support NavigationPolicy on decide Navigation From M108, OnDecideNavigationPolicy() doesn't have logic for open media, only logic related with NavigationPolicy. Reference Patch https://review.tizen.org/gerrit/271794/ https://review.tizen.org/gerrit/230348/ Change-Id: Id51431ea975a7625061f89a1589a9893bdd3a716 Signed-off-by: liwei90727 --- diff --git a/wrt/src/browser/wrt_render_message_filter.cc b/wrt/src/browser/wrt_render_message_filter.cc old mode 100755 new mode 100644 index 5fe9e7e..bfd8ab8 --- a/wrt/src/browser/wrt_render_message_filter.cc +++ b/wrt/src/browser/wrt_render_message_filter.cc @@ -2,56 +2,64 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "wrt_render_message_filter.h" +#include "wrt/src/browser/wrt_render_message_filter.h" -#if !defined(WRT_JS_BRINGUP) -#include "tizen_src/chromium_impl/content/public/browser/policy_decision_util.h" -#endif +#include "third_party/blink/public/web/web_navigation_policy.h" +#include "tizen_src/ewk/efl_integration/common/render_messages_ewk.h" #include "tizen_src/ewk/efl_integration/private/ewk_policy_decision_private.h" #include "wrt/src/browser/native_web_runtime.h" -#include "wrt/src/browser/wrt_browser_context.h" namespace { -static void NavigationPolicyDecision(void* /*data*/, - const std::string& url, - void* event_info) { - if (!event_info) { - LOG(ERROR) << "event_info is nullptr"; - return; - } - - auto policy_decision = static_cast<_Ewk_Policy_Decision*>(event_info); - if (wrt::NativeWebRuntime::GetInstance().ShouldAllowNavigation(url)) - policy_decision->Use(); - else - policy_decision->Ignore(); -} +const uint32_t kFilteredMessageClasses[] = {EwkMsgStart}; } // namespace namespace wrt { -WRTRenderMessageFilter::WRTRenderMessageFilter() {} +WRTRenderMessageFilter::WRTRenderMessageFilter() + : BrowserMessageFilter(kFilteredMessageClasses, + std::size(kFilteredMessageClasses)) {} WRTRenderMessageFilter::~WRTRenderMessageFilter() {} +void WRTRenderMessageFilter::OverrideThreadForMessage( + const IPC::Message& message, + content::BrowserThread::ID* thread) { + switch (message.type()) { + case EwkHostMsg_DecideNavigationPolicy::ID: + *thread = content::BrowserThread::UI; + break; + } +} + +bool WRTRenderMessageFilter::OnMessageReceived(const IPC::Message& message) { + bool handled = true; + IPC_BEGIN_MESSAGE_MAP(WRTRenderMessageFilter, message) + IPC_MESSAGE_HANDLER(EwkHostMsg_DecideNavigationPolicy, + OnDecideNavigationPolicy) + IPC_MESSAGE_UNHANDLED(handled = false) + IPC_END_MESSAGE_MAP() + return handled; +} + void WRTRenderMessageFilter::OnDecideNavigationPolicy( - const NavigationPolicyParams& params, + NavigationPolicyParams params, bool* handled) { DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); -#if defined(WRT_JS_BRINGUP) - *handled = false; -#else - std::unique_ptr navigation( - new content::PolicyDecisionUtil()); - auto* browser_context = WRTBrowserContext::GetInstance(); - DCHECK(browser_context); - navigation->SetNavigationPolicyDecisionCallback(NavigationPolicyDecision); - navigation->PolicyNavigation(params, browser_context->GetProxyURI(), handled, - nullptr); -#endif + std::unique_ptr<_Ewk_Policy_Decision> policy_decision( + new _Ewk_Policy_Decision(params)); + + if (NativeWebRuntime::GetInstance().ShouldAllowNavigation(params.url.spec())) + policy_decision->Use(); + else + policy_decision->Ignore(); + + CHECK(!policy_decision->isSuspended()); + + *handled = policy_decision->GetNavigationPolicyHandler()->GetDecision() == + NavigationPolicyHandlerEfl::Handled; } } // namespace wrt diff --git a/wrt/src/browser/wrt_render_message_filter.h b/wrt/src/browser/wrt_render_message_filter.h old mode 100755 new mode 100644 index ef3b992..638f374 --- a/wrt/src/browser/wrt_render_message_filter.h +++ b/wrt/src/browser/wrt_render_message_filter.h @@ -5,36 +5,26 @@ #ifndef BROWSER_WRT_RENDER_MESSAGE_FILTER_H #define BROWSER_WRT_RENDER_MESSAGE_FILTER_H -#if defined(WRT_JS_BRINGUP) +#include "base/threading/thread.h" +#include "content/public/browser/browser_associated_interface.h" #include "content/public/browser/browser_message_filter.h" + struct NavigationPolicyParams; -namespace content { -class BrowserMessageFilterCommon : public content::BrowserMessageFilter { - public: - bool OnMessageReceived(const IPC::Message& message) override { return false; } - virtual void OnDecideNavigationPolicy(const NavigationPolicyParams&, - bool* handled) {} -}; -} -#else -#include "tizen_src/chromium_impl/content/browser/message_filter/browser_message_filter_common.h" -#endif namespace wrt { -class WRTRenderMessageFilter - : public content::BrowserMessageFilterCommon { +class WRTRenderMessageFilter : public content::BrowserMessageFilter { public: WRTRenderMessageFilter(); ~WRTRenderMessageFilter(); - WRTRenderMessageFilter(const WRTRenderMessageFilter&) = delete; - WRTRenderMessageFilter& operator=(const WRTRenderMessageFilter&) = delete; + // BrowserMessageFilter methods: + bool OnMessageReceived(const IPC::Message&) override; + void OverrideThreadForMessage(const IPC::Message&, + content::BrowserThread::ID*) override; private: - // override content::BrowserMessageFilterCommon - void OnDecideNavigationPolicy(const NavigationPolicyParams&, - bool* handled) override; + void OnDecideNavigationPolicy(NavigationPolicyParams, bool* handled); }; } // namespace wrt