blob: 0bc1daa27b62aa071abd33bd9d3a0d1bd0e800c2 [file] [log] [blame]
[email protected]44ecb832013-08-02 09:06:451// 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 CHROME_BROWSER_MEDIA_CHROME_MIDI_PERMISSION_CONTEXT_H_
6#define CHROME_BROWSER_MEDIA_CHROME_MIDI_PERMISSION_CONTEXT_H_
7
8#include "base/memory/scoped_ptr.h"
[email protected]95003d522014-03-13 20:22:319#include "components/keyed_service/core/keyed_service.h"
[email protected]44ecb832013-08-02 09:06:4510#include "content/public/browser/browser_context.h"
11
[email protected]7babfcbe2014-02-12 22:56:3812namespace content {
13class WebContents;
14}
15
[email protected]44ecb832013-08-02 09:06:4516class GURL;
17class PermissionQueueController;
18class PermissionRequestID;
19class Profile;
20
21// This class manages MIDI permissions flow. Used on the UI thread.
[email protected]95003d522014-03-13 20:22:3122class ChromeMidiPermissionContext : public KeyedService {
[email protected]44ecb832013-08-02 09:06:4523 public:
[email protected]6e068ea2014-02-04 07:05:4724 explicit ChromeMidiPermissionContext(Profile* profile);
25 virtual ~ChromeMidiPermissionContext();
[email protected]44ecb832013-08-02 09:06:4526
[email protected]95003d522014-03-13 20:22:3127 // KeyedService methods:
[email protected]44ecb832013-08-02 09:06:4528 virtual void Shutdown() OVERRIDE;
29
30 // Request to ask users permission about MIDI.
[email protected]6e068ea2014-02-04 07:05:4731 void RequestMidiSysExPermission(
[email protected]44ecb832013-08-02 09:06:4532 int render_process_id,
33 int render_view_id,
[email protected]00880a02013-10-30 03:18:3034 int bridge_id,
[email protected]44ecb832013-08-02 09:06:4535 const GURL& requesting_frame,
[email protected]6e068ea2014-02-04 07:05:4736 const content::BrowserContext::MidiSysExPermissionCallback& callback);
[email protected]44ecb832013-08-02 09:06:4537
[email protected]00880a02013-10-30 03:18:3038 // Cancel a pending MIDI permission request.
[email protected]6e068ea2014-02-04 07:05:4739 void CancelMidiSysExPermissionRequest(int render_process_id,
[email protected]00880a02013-10-30 03:18:3040 int render_view_id,
41 int bridge_id,
42 const GURL& requesting_frame);
43
[email protected]7babfcbe2014-02-12 22:56:3844 // Called when the permission decision is made. If a permissions prompt is
45 // shown to the user it will be called when the user selects an option
46 // from that prompt.
47 void NotifyPermissionSet(
48 const PermissionRequestID& id,
49 const GURL& requesting_frame,
50 const content::BrowserContext::MidiSysExPermissionCallback& callback,
51 bool allowed);
52
[email protected]44ecb832013-08-02 09:06:4553 private:
54 // Decide whether the permission should be granted.
55 // Calls PermissionDecided if permission can be decided non-interactively,
56 // or NotifyPermissionSet if permission decided by presenting an infobar.
57 void DecidePermission(
[email protected]7babfcbe2014-02-12 22:56:3858 content::WebContents* web_contents,
[email protected]44ecb832013-08-02 09:06:4559 const PermissionRequestID& id,
60 const GURL& requesting_frame,
61 const GURL& embedder,
[email protected]6e068ea2014-02-04 07:05:4762 const content::BrowserContext::MidiSysExPermissionCallback& callback);
[email protected]44ecb832013-08-02 09:06:4563
64 // Called when permission is granted without interactively asking the user.
65 void PermissionDecided(
66 const PermissionRequestID& id,
67 const GURL& requesting_frame,
68 const GURL& embedder,
[email protected]6e068ea2014-02-04 07:05:4769 const content::BrowserContext::MidiSysExPermissionCallback& callback,
[email protected]44ecb832013-08-02 09:06:4570 bool allowed);
71
[email protected]44ecb832013-08-02 09:06:4572 // Return an instance of the infobar queue controller, creating it if needed.
73 PermissionQueueController* GetQueueController();
74
[email protected]00880a02013-10-30 03:18:3075 // Removes any pending InfoBar request.
[email protected]566755f82014-01-08 01:14:5776 void CancelPendingInfobarRequest(const PermissionRequestID& id);
[email protected]00880a02013-10-30 03:18:3077
[email protected]44ecb832013-08-02 09:06:4578 Profile* const profile_;
79 bool shutting_down_;
80 scoped_ptr<PermissionQueueController> permission_queue_controller_;
81
[email protected]6e068ea2014-02-04 07:05:4782 DISALLOW_COPY_AND_ASSIGN(ChromeMidiPermissionContext);
[email protected]44ecb832013-08-02 09:06:4583};
84
85#endif // CHROME_BROWSER_MEDIA_CHROME_MIDI_PERMISSION_CONTEXT_H_