[M47_2526] Chromium upversion to m47_2526 branch
[platform/framework/web/chromium-efl.git] / tizen_src / ewk / efl_integration / browser / render_message_filter_efl.cc
1 // Copyright 2014 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.
4
5 #include "browser/render_message_filter_efl.h"
6
7 #include "common/web_contents_utils.h"
8 #include "content/common/render_messages_efl.h"
9 #include "common/render_messages_ewk.h"
10 #include "content/public/browser/browser_thread.h"
11 #include "content/public/browser/render_view_host.h"
12 #include "content/public/browser/web_contents.h"
13 #include "eweb_view.h"
14 #include "net/url_request/url_request_context_getter.h"
15 #include "ipc_message_start_ewk.h"
16
17 #if defined(TIZEN_MULTIMEDIA_SUPPORT)
18 #include "content/browser/media/efl/webaudio_decoder_browser_gstreamer.h"
19 #endif
20
21 using web_contents_utils::WebContentsFromViewID;
22 using web_contents_utils::WebViewFromWebContents;
23 using content::BrowserThread;
24
25 const uint32 kFilteredMessageClasses[] = {
26   EwkMsgStart,
27   ChromeMsgStart,
28 };
29
30 RenderMessageFilterEfl::RenderMessageFilterEfl(int render_process_id)
31   : BrowserMessageFilter(kFilteredMessageClasses,
32         arraysize(kFilteredMessageClasses))
33   , render_process_id_(render_process_id) {
34 }
35
36 RenderMessageFilterEfl::~RenderMessageFilterEfl() { }
37
38 void RenderMessageFilterEfl::OverrideThreadForMessage(
39     const IPC::Message& message, content::BrowserThread::ID* thread)
40 {
41   switch (message.type()) {
42   case EwkHostMsg_DecideNavigationPolicy::ID:
43     *thread = content::BrowserThread::UI;
44     break;
45   }
46 }
47
48 bool RenderMessageFilterEfl::OnMessageReceived(const IPC::Message& message) {
49   bool handled = true;
50   IPC_BEGIN_MESSAGE_MAP(RenderMessageFilterEfl, message)
51     IPC_MESSAGE_HANDLER(EwkHostMsg_DecideNavigationPolicy,
52                         OnDecideNavigationPolicy)
53 #if defined(TIZEN_MULTIMEDIA_SUPPORT)
54     IPC_MESSAGE_HANDLER(EflViewHostMsg_GstWebAudioDecode,
55                         OnGstWebAudioDecode)
56 #endif
57     IPC_MESSAGE_UNHANDLED(handled = false)
58   IPC_END_MESSAGE_MAP()
59   return handled;
60 }
61
62 void RenderMessageFilterEfl::OnDecideNavigationPolicy(
63     NavigationPolicyParams params, bool* handled) {
64   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
65
66   if (content::WebContents* web_contents =
67       WebContentsFromViewID(render_process_id_, params.render_view_id)) {
68     WebViewFromWebContents(web_contents)->InvokePolicyNavigationCallback(
69         web_contents->GetRenderViewHost(), params, handled);
70   }
71 }
72
73 #if defined(TIZEN_MULTIMEDIA_SUPPORT)
74 void RenderMessageFilterEfl::OnGstWebAudioDecode(
75     base::SharedMemoryHandle encoded_data_handle,
76     base::FileDescriptor pcm_output,
77     uint32_t data_size) {
78   content::WebAudioDecoderGStreamer::GetInstance()->EncodedDataReceived(
79       encoded_data_handle, pcm_output, data_size);
80 }
81 #endif