Home | History | Annotate | Download | only in media
      1 // Copyright 2013 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.
      4 
      5 #ifndef CONTENT_RENDERER_MEDIA_MIDI_DISPATCHER_H_
      6 #define CONTENT_RENDERER_MEDIA_MIDI_DISPATCHER_H_
      7 
      8 #include "base/id_map.h"
      9 #include "content/public/renderer/render_view_observer.h"
     10 #include "third_party/WebKit/public/web/WebMIDIClient.h"
     11 
     12 namespace blink {
     13 class WebMIDIPermissionRequest;
     14 }
     15 
     16 namespace content {
     17 
     18 class RenderViewImpl;
     19 
     20 // MIDIDispatcher implements WebMIDIClient to handle permissions for using
     21 // system exclusive messages.
     22 // It works as RenderViewObserver to handle IPC messages between
     23 // MIDIDispatcherHost owned by RenderViewHost since permissions are managed in
     24 // the browser process.
     25 class MIDIDispatcher : public RenderViewObserver,
     26                        public blink::WebMIDIClient {
     27  public:
     28   explicit MIDIDispatcher(RenderViewImpl* render_view);
     29   virtual ~MIDIDispatcher();
     30 
     31  private:
     32   // RenderView::Observer implementation.
     33   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
     34 
     35   // blink::WebMIDIClient implementation.
     36   virtual void requestSysExPermission(
     37       const blink::WebMIDIPermissionRequest& request) OVERRIDE;
     38   virtual void cancelSysExPermissionRequest(
     39       const blink::WebMIDIPermissionRequest& request) OVERRIDE;
     40 
     41   // Permission for using system exclusive messages has been set.
     42   void OnSysExPermissionApproved(int client_id, bool is_allowed);
     43 
     44   // Each WebMIDIPermissionRequest object is valid until
     45   // cancelSysExPermissionRequest() is called with the object, or used to call
     46   // WebMIDIPermissionRequest::setIsAllowed().
     47   IDMap<blink::WebMIDIPermissionRequest> requests_;
     48 
     49   DISALLOW_COPY_AND_ASSIGN(MIDIDispatcher);
     50 };
     51 
     52 }  // namespace content
     53 
     54 #endif  // CONTENT_RENDERER_MEDIA_MIDI_DISPATCHER_H_
     55