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.
5 #include "chrome/browser/renderer_host/pepper/pepper_broker_message_filter.h"
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"
21 using content::BrowserPpapiHost;
22 using content::BrowserThread;
23 using content::RenderProcessHost;
27 PepperBrokerMessageFilter::PepperBrokerMessageFilter(
29 BrowserPpapiHost* host)
30 : document_url_(host->GetDocumentURLForInstance(instance)) {
32 host->GetRenderViewIDsForInstance(instance, &render_process_id_, &unused);
35 PepperBrokerMessageFilter::~PepperBrokerMessageFilter() {
38 scoped_refptr<base::TaskRunner>
39 PepperBrokerMessageFilter::OverrideTaskRunnerForMessage(
40 const IPC::Message& message) {
41 return BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI);
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,
51 return PP_ERROR_FAILED;
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;
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,
71 if (setting == CONTENT_SETTING_ALLOW)
73 return PP_ERROR_FAILED;