[M120 Migration][WRTjs] Support NavigationPolicy on decide Navigation 73/307673/6
authorliwei90727 <wei90727.li@samsung.com>
Tue, 12 Mar 2024 06:38:36 +0000 (14:38 +0800)
committerDongHyun Song <dh81.song@samsung.com>
Mon, 25 Mar 2024 06:54:01 +0000 (06:54 +0000)
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 <wei90727.li@samsung.com>
wrt/src/browser/wrt_render_message_filter.cc [changed mode: 0755->0644]
wrt/src/browser/wrt_render_message_filter.h [changed mode: 0755->0644]

old mode 100755 (executable)
new mode 100644 (file)
index 5fe9e7e..bfd8ab8
@@ -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<content::PolicyDecisionUtil> 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
old mode 100755 (executable)
new mode 100644 (file)
index ef3b992..638f374
@@ -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