Update To 11.40.268.0
[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/profiles/profile.h"
10 #include "components/content_settings/core/browser/host_content_settings_map.h"
11 #include "components/content_settings/core/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(PP_Instance instance,
28                                                      BrowserPpapiHost* host)
29     : document_url_(host->GetDocumentURLForInstance(instance)) {
30   int unused;
31   host->GetRenderFrameIDsForInstance(instance, &render_process_id_, &unused);
32 }
33
34 PepperBrokerMessageFilter::~PepperBrokerMessageFilter() {}
35
36 scoped_refptr<base::TaskRunner>
37 PepperBrokerMessageFilter::OverrideTaskRunnerForMessage(
38     const IPC::Message& message) {
39   return BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI);
40 }
41
42 int32_t PepperBrokerMessageFilter::OnResourceMessageReceived(
43     const IPC::Message& msg,
44     ppapi::host::HostMessageContext* context) {
45   PPAPI_BEGIN_MESSAGE_MAP(PepperBrokerMessageFilter, msg)
46     PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_Broker_IsAllowed,
47                                         OnIsAllowed)
48   PPAPI_END_MESSAGE_MAP()
49   return PP_ERROR_FAILED;
50 }
51
52 int32_t PepperBrokerMessageFilter::OnIsAllowed(
53     ppapi::host::HostMessageContext* context) {
54   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
55   if (!document_url_.is_valid())
56     return PP_ERROR_FAILED;
57   RenderProcessHost* render_process_host =
58       RenderProcessHost::FromID(render_process_id_);
59   if (!render_process_host)
60     return PP_ERROR_FAILED;
61   Profile* profile =
62       Profile::FromBrowserContext(render_process_host->GetBrowserContext());
63   HostContentSettingsMap* content_settings =
64       profile->GetHostContentSettingsMap();
65   ContentSetting setting =
66       content_settings->GetContentSetting(document_url_,
67                                           document_url_,
68                                           CONTENT_SETTINGS_TYPE_PPAPI_BROKER,
69                                           std::string());
70   if (setting == CONTENT_SETTING_ALLOW)
71     return PP_OK;
72   return PP_ERROR_FAILED;
73 }
74
75 }  // namespace chrome