// 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
#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