- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / renderer_host / pepper / pepper_broker_message_filter.cc
1 // Copyright (c) 2012 The Chromium Authors. 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 "chrome/browser/renderer_host/pepper/pepper_broker_message_filter.h"
6
7 #include <string>
8
9 #include "chrome/browser/content_settings/host_content_settings_map.h"
10 #include "chrome/browser/profiles/profile.h"
11 #include "chrome/common/content_settings.h"
12 #include "content/public/browser/browser_ppapi_host.h"
13 #include "content/public/browser/browser_thread.h"
14 #include "content/public/browser/render_process_host.h"
15 #include "ipc/ipc_message_macros.h"
16 #include "ppapi/c/pp_errors.h"
17 #include "ppapi/host/dispatch_host_message.h"
18 #include "ppapi/proxy/ppapi_messages.h"
19 #include "url/gurl.h"
20
21 using content::BrowserPpapiHost;
22 using content::BrowserThread;
23 using content::RenderProcessHost;
24
25 namespace chrome {
26
27 PepperBrokerMessageFilter::PepperBrokerMessageFilter(
28     PP_Instance instance,
29     BrowserPpapiHost* host)
30     : document_url_(host->GetDocumentURLForInstance(instance)) {
31   int unused;
32   host->GetRenderViewIDsForInstance(instance, &render_process_id_, &unused);
33 }
34
35 PepperBrokerMessageFilter::~PepperBrokerMessageFilter() {
36 }
37
38 scoped_refptr<base::TaskRunner>
39 PepperBrokerMessageFilter::OverrideTaskRunnerForMessage(
40     const IPC::Message& message) {
41   return BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI);
42 }
43
44 int32_t PepperBrokerMessageFilter::OnResourceMessageReceived(
45     const IPC::Message& msg,
46     ppapi::host::HostMessageContext* context) {
47   IPC_BEGIN_MESSAGE_MAP(PepperBrokerMessageFilter, msg)
48     PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_Broker_IsAllowed,
49                                         OnIsAllowed)
50   IPC_END_MESSAGE_MAP()
51   return PP_ERROR_FAILED;
52 }
53
54 int32_t PepperBrokerMessageFilter::OnIsAllowed(
55     ppapi::host::HostMessageContext* context) {
56   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
57   if (!document_url_.is_valid())
58     return PP_ERROR_FAILED;
59   RenderProcessHost* render_process_host =
60       RenderProcessHost::FromID(render_process_id_);
61   if (!render_process_host)
62     return PP_ERROR_FAILED;
63   Profile* profile =
64       Profile::FromBrowserContext(render_process_host->GetBrowserContext());
65   HostContentSettingsMap* content_settings =
66       profile->GetHostContentSettingsMap();
67   ContentSetting setting =
68       content_settings->GetContentSetting(document_url_, document_url_,
69                                           CONTENT_SETTINGS_TYPE_PPAPI_BROKER,
70                                           std::string());
71   if (setting == CONTENT_SETTING_ALLOW)
72     return PP_OK;
73   return PP_ERROR_FAILED;
74 }
75
76 }  // namespace chrome