87d3c63e4b45bd1f1ec691b4bdfe3ae730e69532
[WebKit-https.git] / Source / WebKit2 / WebProcess / MediaStream / UserMediaPermissionRequestManager.h
1 /*
2  * Copyright (C) 2014 Igalia S.L.
3  * Copyright (C) 2016 Apple Inc. All rights reserved.
4  *
5  *  This library is free software; you can redistribute it and/or
6  *  modify it under the terms of the GNU Lesser General Public
7  *  License as published by the Free Software Foundation; either
8  *  version 2 of the License, or (at your option) any later version.
9  *
10  *  This library is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  *  Lesser General Public License for more details.
14  *
15  *  You should have received a copy of the GNU Lesser General Public
16  *  License along with this library; if not, write to the Free Software
17  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
18  */
19
20 #ifndef UserMediaPermissionRequestManager_h
21 #define UserMediaPermissionRequestManager_h
22
23 #if ENABLE(MEDIA_STREAM)
24
25 #include "SandboxExtension.h"
26 #include <WebCore/MediaConstraints.h>
27 #include <WebCore/MediaDevicesEnumerationRequest.h>
28 #include <WebCore/UserMediaClient.h>
29 #include <WebCore/UserMediaRequest.h>
30 #include <wtf/HashMap.h>
31 #include <wtf/Ref.h>
32 #include <wtf/RefPtr.h>
33
34 namespace WebKit {
35
36 class WebPage;
37
38 class UserMediaPermissionRequestManager {
39 public:
40     explicit UserMediaPermissionRequestManager(WebPage&);
41     ~UserMediaPermissionRequestManager();
42
43     void startUserMediaRequest(WebCore::UserMediaRequest&);
44     void cancelUserMediaRequest(WebCore::UserMediaRequest&);
45     void userMediaAccessWasGranted(uint64_t, const String& audioDeviceUID, const String& videoDeviceUID);
46     void userMediaAccessWasDenied(uint64_t, WebCore::UserMediaRequest::MediaAccessDenialReason, const String&);
47
48     void enumerateMediaDevices(WebCore::MediaDevicesEnumerationRequest&);
49     void cancelMediaDevicesEnumeration(WebCore::MediaDevicesEnumerationRequest&);
50     void didCompleteMediaDeviceEnumeration(uint64_t, const Vector<WebCore::CaptureDevice>& deviceList, const String& deviceIdentifierHashSalt, bool originHasPersistentAccess);
51
52     void grantUserMediaDevicesSandboxExtension(const SandboxExtension::HandleArray&);
53
54 private:
55     WebPage& m_page;
56
57     HashMap<uint64_t, RefPtr<WebCore::UserMediaRequest>> m_idToUserMediaRequestMap;
58     HashMap<RefPtr<WebCore::UserMediaRequest>, uint64_t> m_userMediaRequestToIDMap;
59
60     HashMap<uint64_t, RefPtr<WebCore::MediaDevicesEnumerationRequest>> m_idToMediaDevicesEnumerationRequestMap;
61     HashMap<RefPtr<WebCore::MediaDevicesEnumerationRequest>, uint64_t> m_mediaDevicesEnumerationRequestToIDMap;
62
63     Vector<RefPtr<SandboxExtension>> m_userMediaDeviceSandboxExtensions;
64 };
65
66 } // namespace WebKit
67
68 #endif // ENABLE(MEDIA_STREAM)
69
70 #endif // UserMediaPermissionRequestManager_h