blob: f292e7bd9776a73f229442ec38f5de957add66cb [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]7c6d9482014-03-28 20:19:3136 bool user_gesture,
[email protected]6e068ea2014-02-04 07:05:4737 const content::BrowserContext::MidiSysExPermissionCallback& callback);
[email protected]44ecb832013-08-02 09:06:4538
[email protected]00880a02013-10-30 03:18:3039 // Cancel a pending MIDI permission request.
[email protected]6e068ea2014-02-04 07:05:4740 void CancelMidiSysExPermissionRequest(int render_process_id,
[email protected]00880a02013-10-30 03:18:3041 int render_view_id,
42 int bridge_id,
43 const GURL& requesting_frame);
44
[email protected]7babfcbe2014-02-12 22:56:3845 // Called when the permission decision is made. If a permissions prompt is
46 // shown to the user it will be called when the user selects an option
47 // from that prompt.
48 void NotifyPermissionSet(
49 const PermissionRequestID& id,
50 const GURL& requesting_frame,
51 const content::BrowserContext::MidiSysExPermissionCallback& callback,
52 bool allowed);
53
[email protected]44ecb832013-08-02 09:06:4554 private:
55 // Decide whether the permission should be granted.
56 // Calls PermissionDecided if permission can be decided non-interactively,
57 // or NotifyPermissionSet if permission decided by presenting an infobar.
58 void DecidePermission(
[email protected]7babfcbe2014-02-12 22:56:3859 content::WebContents* web_contents,
[email protected]44ecb832013-08-02 09:06:4560 const PermissionRequestID& id,
61 const GURL& requesting_frame,
62 const GURL& embedder,
[email protected]7c6d9482014-03-28 20:19:3163 bool user_gesture,
[email protected]6e068ea2014-02-04 07:05:4764 const content::BrowserContext::MidiSysExPermissionCallback& callback);
[email protected]44ecb832013-08-02 09:06:4565
66 // Called when permission is granted without interactively asking the user.
67 void PermissionDecided(
68 const PermissionRequestID& id,
69 const GURL& requesting_frame,
70 const GURL& embedder,
[email protected]6e068ea2014-02-04 07:05:4771 const content::BrowserContext::MidiSysExPermissionCallback& callback,
[email protected]44ecb832013-08-02 09:06:4572 bool allowed);
73
[email protected]44ecb832013-08-02 09:06:4574 // Return an instance of the infobar queue controller, creating it if needed.
75 PermissionQueueController* GetQueueController();
76
[email protected]00880a02013-10-30 03:18:3077 // Removes any pending InfoBar request.
[email protected]566755f82014-01-08 01:14:5778 void CancelPendingInfobarRequest(const PermissionRequestID& id);
[email protected]00880a02013-10-30 03:18:3079
[email protected]44ecb832013-08-02 09:06:4580 Profile* const profile_;
81 bool shutting_down_;
82 scoped_ptr<PermissionQueueController> permission_queue_controller_;
83
[email protected]6e068ea2014-02-04 07:05:4784 DISALLOW_COPY_AND_ASSIGN(ChromeMidiPermissionContext);
[email protected]44ecb832013-08-02 09:06:4585};
86
87#endif // CHROME_BROWSER_MEDIA_CHROME_MIDI_PERMISSION_CONTEXT_H_