// 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) : render_process_id_(render_process_id), browser_context_(browser_context) { } MIDIDispatcherHost::~MIDIDispatcherHost() { } bool MIDIDispatcherHost::OnMessageReceived(const IPC::Message& message, bool* message_was_ok) { bool handled = true; IPC_BEGIN_MESSAGE_MAP_EX(MIDIDispatcherHost, message, *message_was_ok) IPC_MESSAGE_HANDLER(MIDIHostMsg_RequestSysExPermission, OnRequestSysExPermission) IPC_MESSAGE_HANDLER(MIDIHostMsg_CancelSysExPermissionRequest, OnCancelSysExPermissionRequest) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP_EX() 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) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); browser_context_->RequestMIDISysExPermission( render_process_id_, render_view_id, bridge_id, origin, 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(BrowserThread::CurrentlyOn(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