// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "content/browser/renderer_host/media/midi_dispatcher_host.h" #include "base/bind.h" #include "content/browser/child_process_security_policy_impl.h" #include "content/browser/renderer_host/render_view_host_impl.h" #include "content/common/media/midi_messages.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/browser_thread.h" #include "url/gurl.h" namespace content { MidiDispatcherHost::MidiDispatcherHost(int render_process_id, BrowserContext* browser_context) : BrowserMessageFilter(MidiMsgStart), render_process_id_(render_process_id), browser_context_(browser_context) { } MidiDispatcherHost::~MidiDispatcherHost() { } bool MidiDispatcherHost::OnMessageReceived(const IPC::Message& message) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(MidiDispatcherHost, message) IPC_MESSAGE_HANDLER(MidiHostMsg_RequestSysExPermission, OnRequestSysExPermission) IPC_MESSAGE_HANDLER(MidiHostMsg_CancelSysExPermissionRequest, OnCancelSysExPermissionRequest) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; } void MidiDispatcherHost::OverrideThreadForMessage( const IPC::Message& message, BrowserThread::ID* thread) { if (IPC_MESSAGE_CLASS(message) == MidiMsgStart) *thread = BrowserThread::UI; } void MidiDispatcherHost::OnRequestSysExPermission(int render_view_id, int bridge_id, const GURL& origin, bool user_gesture) { DCHECK_CURRENTLY_ON(BrowserThread::UI); browser_context_->RequestMidiSysExPermission( render_process_id_, render_view_id, bridge_id, origin, user_gesture, base::Bind(&MidiDispatcherHost::WasSysExPermissionGranted, base::Unretained(this), render_view_id, bridge_id)); } void MidiDispatcherHost::OnCancelSysExPermissionRequest( int render_view_id, int bridge_id, const GURL& requesting_frame) { DCHECK_CURRENTLY_ON(BrowserThread::UI); DVLOG(1) << __FUNCTION__ << " " << render_process_id_ << ":" << render_view_id << ":" << bridge_id; browser_context_->CancelMidiSysExPermissionRequest( render_process_id_, render_view_id, bridge_id, requesting_frame); } void MidiDispatcherHost::WasSysExPermissionGranted(int render_view_id, int bridge_id, bool success) { ChildProcessSecurityPolicyImpl::GetInstance()->GrantSendMidiSysExMessage( render_process_id_); Send(new MidiMsg_SysExPermissionApproved(render_view_id, bridge_id, success)); } } // namespace content