158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch// found in the LICENSE file. 458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#ifndef CONTENT_RENDERER_MEDIA_MIDI_DISPATCHER_H_ 658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#define CONTENT_RENDERER_MEDIA_MIDI_DISPATCHER_H_ 758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#include "base/id_map.h" 9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "content/public/renderer/render_frame_observer.h" 1058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#include "third_party/WebKit/public/web/WebMIDIClient.h" 1158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink { 1358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochclass WebMIDIPermissionRequest; 1458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch} 1558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 1658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochnamespace content { 1758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// MidiDispatcher implements WebMIDIClient to handle permissions for using 1958e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch// system exclusive messages. 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// It works as RenderFrameObserver to handle IPC messages between 21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// MidiDispatcherHost owned by WebContents since permissions are managed in 2258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch// the browser process. 23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class MidiDispatcher : public RenderFrameObserver, 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public blink::WebMIDIClient { 2558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch public: 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) explicit MidiDispatcher(RenderFrame* render_frame); 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~MidiDispatcher(); 2858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 2958e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch private: 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // RenderFrameObserver implementation. 3158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 3258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // blink::WebMIDIClient implementation. 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void requestSysexPermission( 35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const blink::WebMIDIPermissionRequest& request); 36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void cancelSysexPermissionRequest( 37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const blink::WebMIDIPermissionRequest& request); 3858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 3958e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch // Permission for using system exclusive messages has been set. 4058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch void OnSysExPermissionApproved(int client_id, bool is_allowed); 4158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 4258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch // Each WebMIDIPermissionRequest object is valid until 43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // cancelSysexPermissionRequest() is called with the object, or used to call 4458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch // WebMIDIPermissionRequest::setIsAllowed(). 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) typedef IDMap<blink::WebMIDIPermissionRequest, IDMapOwnPointer> Requests; 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Requests requests_; 4758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MidiDispatcher); 4958e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch}; 5058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 5158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch} // namespace content 5258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 5358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#endif // CONTENT_RENDERER_MEDIA_MIDI_DISPATCHER_H_ 54