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