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_BROWSER_MEDIA_MIDI_DISPATCHER_HOST_H_
      6 #define CONTENT_BROWSER_MEDIA_MIDI_DISPATCHER_HOST_H_
      7 
      8 #include <vector>
      9 
     10 #include "base/callback_forward.h"
     11 #include "base/memory/weak_ptr.h"
     12 #include "content/public/browser/web_contents_observer.h"
     13 
     14 namespace content {
     15 
     16 class BrowserContext;
     17 
     18 // MidiDispatcherHost handles permissions for using system exclusive messages.
     19 class MidiDispatcherHost : public WebContentsObserver {
     20  public:
     21   explicit MidiDispatcherHost(WebContents* web_contents);
     22   virtual ~MidiDispatcherHost();
     23 
     24   // WebContentsObserver implementation.
     25   virtual bool OnMessageReceived(const IPC::Message& message,
     26                                  RenderFrameHost* render_frame_host) OVERRIDE;
     27 
     28  private:
     29   void OnRequestSysExPermission(RenderFrameHost* render_frame_host,
     30                                 int bridge_id,
     31                                 const GURL& origin,
     32                                 bool user_gesture);
     33   void OnCancelSysExPermissionRequest(RenderFrameHost* render_frame_host,
     34                                       int bridge_id,
     35                                       const GURL& requesting_frame);
     36   void WasSysExPermissionGranted(int render_process_id,
     37                                  int render_frame_id,
     38                                  int bridge_id,
     39                                  bool is_allowed);
     40 
     41   struct PendingPermission {
     42     PendingPermission(int render_process_id,
     43                       int render_frame_id,
     44                       int bridge_id);
     45     ~PendingPermission();
     46     int render_process_id;
     47     int render_frame_id;
     48     int bridge_id;
     49     base::Closure cancel;
     50   };
     51   std::vector<PendingPermission> pending_permissions_;
     52 
     53   base::WeakPtrFactory<MidiDispatcherHost> weak_factory_;
     54 
     55   DISALLOW_COPY_AND_ASSIGN(MidiDispatcherHost);
     56 };
     57 
     58 }  // namespace content
     59 
     60 #endif  // CONTENT_BROWSER_MEDIA_MIDI_DISPATCHER_HOST_H_
     61