1 // Copyright 2019 Samsung Electronics. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "wrt/src/browser/wrt_render_message_filter.h"
7 #include "third_party/blink/public/web/web_navigation_policy.h"
8 #include "tizen_src/ewk/efl_integration/common/render_messages_ewk.h"
9 #include "tizen_src/ewk/efl_integration/private/ewk_policy_decision_private.h"
10 #include "wrt/src/browser/native_web_runtime.h"
14 const uint32_t kFilteredMessageClasses[] = {EwkMsgStart};
20 WRTRenderMessageFilter::WRTRenderMessageFilter()
21 : BrowserMessageFilter(kFilteredMessageClasses,
22 std::size(kFilteredMessageClasses)) {}
24 WRTRenderMessageFilter::~WRTRenderMessageFilter() {}
26 void WRTRenderMessageFilter::OverrideThreadForMessage(
27 const IPC::Message& message,
28 content::BrowserThread::ID* thread) {
29 switch (message.type()) {
30 case EwkHostMsg_DecideNavigationPolicy::ID:
31 *thread = content::BrowserThread::UI;
36 bool WRTRenderMessageFilter::OnMessageReceived(const IPC::Message& message) {
38 IPC_BEGIN_MESSAGE_MAP(WRTRenderMessageFilter, message)
39 IPC_MESSAGE_HANDLER(EwkHostMsg_DecideNavigationPolicy,
40 OnDecideNavigationPolicy)
41 IPC_MESSAGE_UNHANDLED(handled = false)
46 void WRTRenderMessageFilter::OnDecideNavigationPolicy(
47 NavigationPolicyParams params,
49 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
51 std::unique_ptr<_Ewk_Policy_Decision> policy_decision(
52 new _Ewk_Policy_Decision(params));
54 if (NativeWebRuntime::GetInstance().ShouldAllowNavigation(params.url.spec()))
55 policy_decision->Use();
57 policy_decision->Ignore();
59 CHECK(!policy_decision->isSuspended());
61 *handled = policy_decision->GetNavigationPolicyHandler()->GetDecision() ==
62 NavigationPolicyHandlerEfl::Handled;