2 * Copyright (C) 2014 Igalia S.L.
3 * Copyright (C) 2016 Apple Inc. All rights reserved.
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.
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.
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
20 #ifndef UserMediaPermissionRequestManager_h
21 #define UserMediaPermissionRequestManager_h
23 #if ENABLE(MEDIA_STREAM)
25 #include "SandboxExtension.h"
26 #include <WebCore/MediaCanStartListener.h>
27 #include <WebCore/MediaConstraints.h>
28 #include <WebCore/MediaDevicesEnumerationRequest.h>
29 #include <WebCore/UserMediaClient.h>
30 #include <WebCore/UserMediaRequest.h>
31 #include <wtf/HashMap.h>
33 #include <wtf/RefPtr.h>
39 class UserMediaPermissionRequestManager
40 : private WebCore::MediaCanStartListener {
42 explicit UserMediaPermissionRequestManager(WebPage&);
43 ~UserMediaPermissionRequestManager();
45 void startUserMediaRequest(WebCore::UserMediaRequest&);
46 void cancelUserMediaRequest(WebCore::UserMediaRequest&);
47 void userMediaAccessWasGranted(uint64_t, const String& audioDeviceUID, const String& videoDeviceUID);
48 void userMediaAccessWasDenied(uint64_t, WebCore::UserMediaRequest::MediaAccessDenialReason, const String&);
50 void enumerateMediaDevices(WebCore::MediaDevicesEnumerationRequest&);
51 void cancelMediaDevicesEnumeration(WebCore::MediaDevicesEnumerationRequest&);
52 void didCompleteMediaDeviceEnumeration(uint64_t, const Vector<WebCore::CaptureDevice>& deviceList, const String& deviceIdentifierHashSalt, bool originHasPersistentAccess);
54 void grantUserMediaDevicesSandboxExtension(const SandboxExtension::HandleArray&);
57 void sendUserMediaRequest(WebCore::UserMediaRequest&);
59 // WebCore::MediaCanStartListener
60 void mediaCanStart(WebCore::Document&) override;
62 void removeMediaRequestFromMaps(WebCore::UserMediaRequest&);
66 HashMap<uint64_t, RefPtr<WebCore::UserMediaRequest>> m_idToUserMediaRequestMap;
67 HashMap<RefPtr<WebCore::UserMediaRequest>, uint64_t> m_userMediaRequestToIDMap;
69 HashMap<uint64_t, RefPtr<WebCore::MediaDevicesEnumerationRequest>> m_idToMediaDevicesEnumerationRequestMap;
70 HashMap<RefPtr<WebCore::MediaDevicesEnumerationRequest>, uint64_t> m_mediaDevicesEnumerationRequestToIDMap;
72 Vector<RefPtr<SandboxExtension>> m_userMediaDeviceSandboxExtensions;
74 HashMap<RefPtr<WebCore::Document>, Vector<RefPtr<WebCore::UserMediaRequest>>> m_blockedRequests;
79 #endif // ENABLE(MEDIA_STREAM)
81 #endif // UserMediaPermissionRequestManager_h