12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/renderer_host/pepper/pepper_broker_message_filter.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/content_settings/host_content_settings_map.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/common/content_settings.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/browser_ppapi_host.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/browser_thread.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/render_process_host.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ipc/ipc_message_macros.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/c/pp_errors.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/host/dispatch_host_message.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/proxy/ppapi_messages.h" 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::BrowserPpapiHost; 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::BrowserThread; 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::RenderProcessHost; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chrome { 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 27a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochPepperBrokerMessageFilter::PepperBrokerMessageFilter(PP_Instance instance, 28a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch BrowserPpapiHost* host) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : document_url_(host->GetDocumentURLForInstance(instance)) { 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int unused; 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) host->GetRenderFrameIDsForInstance(instance, &render_process_id_, &unused); 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 34a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochPepperBrokerMessageFilter::~PepperBrokerMessageFilter() {} 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_refptr<base::TaskRunner> 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PepperBrokerMessageFilter::OverrideTaskRunnerForMessage( 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const IPC::Message& message) { 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int32_t PepperBrokerMessageFilter::OnResourceMessageReceived( 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const IPC::Message& msg, 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ppapi::host::HostMessageContext* context) { 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PPAPI_BEGIN_MESSAGE_MAP(PepperBrokerMessageFilter, msg) 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PPAPI_DISPATCH_HOST_RESOURCE_CALL_0(PpapiHostMsg_Broker_IsAllowed, 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) OnIsAllowed) 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PPAPI_END_MESSAGE_MAP() 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return PP_ERROR_FAILED; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int32_t PepperBrokerMessageFilter::OnIsAllowed( 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ppapi::host::HostMessageContext* context) { 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!document_url_.is_valid()) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return PP_ERROR_FAILED; 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderProcessHost* render_process_host = 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderProcessHost::FromID(render_process_id_); 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!render_process_host) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return PP_ERROR_FAILED; 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile = 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile::FromBrowserContext(render_process_host->GetBrowserContext()); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HostContentSettingsMap* content_settings = 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile->GetHostContentSettingsMap(); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSetting setting = 66a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch content_settings->GetContentSetting(document_url_, 67a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch document_url_, 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CONTENT_SETTINGS_TYPE_PPAPI_BROKER, 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string()); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (setting == CONTENT_SETTING_ALLOW) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return PP_OK; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return PP_ERROR_FAILED; 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace chrome 76