Changeset 193944 in webkit
- Timestamp:
- Dec 10, 2015, 8:06:05 PM (9 years ago)
- Location:
- trunk
- Files:
-
- 6 added
- 3 deleted
- 40 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r193939 r193944 1 2015-12-10 Eric Carlson <eric.carlson@apple.com> 2 3 [MediaStream] Expose media capture devices persistent permissions to WebCore 4 https://bugs.webkit.org/show_bug.cgi?id=152087 5 6 Reviewed by Chris Dumez. 7 8 * fast/mediastream/MediaDevices-enumerateDevices-expected.txt: 9 * fast/mediastream/MediaDevices-enumerateDevices.html: 10 1 11 2015-12-10 Daniel Bates <dabates@apple.com> 2 12 -
trunk/LayoutTests/fast/mediastream/MediaDevices-enumerateDevices-expected.txt
r189982 r193944 7 7 PASS navigator.mediaDevices.enumerateDevices is an instance of Function 8 8 9 10 *** Calling mediaDevices.enumerateDevices when persistent access HAS NOT been granted 11 9 12 PASS captureDevices.length is non-zero. 10 13 … … 12 15 PASS captureDevice.deviceId is non-null. 13 16 PASS captureDevice.label is non-null. 17 PASS captureDevice.label is "" 14 18 PASS captureDevice.groupId is non-null. 15 19 … … 17 21 PASS captureDevice.deviceId is non-null. 18 22 PASS captureDevice.label is non-null. 23 PASS captureDevice.label is "" 24 PASS captureDevice.groupId is non-null. 25 26 27 *** Calling mediaDevices.enumerateDevices when persistent access HAS been granted 28 29 PASS captureDevices.length is non-zero. 30 31 PASS captureDevice.kind is non-null. 32 PASS captureDevice.deviceId is non-null. 33 PASS captureDevice.label is non-null. 34 PASS captureDevice.label is not "" 35 PASS captureDevice.groupId is non-null. 36 37 PASS captureDevice.kind is non-null. 38 PASS captureDevice.deviceId is non-null. 39 PASS captureDevice.label is non-null. 40 PASS captureDevice.label is not "" 19 41 PASS captureDevice.groupId is non-null. 20 42 -
trunk/LayoutTests/fast/mediastream/MediaDevices-enumerateDevices.html
r189982 r193944 10 10 var captureDevices; 11 11 var captureDevice; 12 var havePermission; 12 13 13 14 description("Tests MediaDevices.enumerateDevices()"); … … 18 19 debug(""); 19 20 20 navigator.mediaDevices.enumerateDevices() 21 .then(function(devices) { 22 captureDevices = devices; 23 shouldBeNonZero("captureDevices.length"); 24 debug(""); 25 devices.forEach(function(device) { 26 captureDevice = device; 27 shouldBeNonNull("captureDevice.kind"); 28 shouldBeNonNull("captureDevice.deviceId"); 29 shouldBeNonNull("captureDevice.label"); 30 shouldBeNonNull("captureDevice.groupId"); 21 function enumerate(next) 22 { 23 debug(`<br>*** Calling mediaDevices.enumerateDevices when persistent access HAS ${havePermission ? "" : "NOT "}been granted<br>`); 24 navigator.mediaDevices.enumerateDevices() 25 .then(function(devices) { 26 captureDevices = devices; 27 shouldBeNonZero("captureDevices.length"); 31 28 debug(""); 29 devices.forEach(function(device) { 30 captureDevice = device; 31 shouldBeNonNull("captureDevice.kind"); 32 shouldBeNonNull("captureDevice.deviceId"); 33 shouldBeNonNull("captureDevice.label"); 34 if (havePermission) 35 shouldNotBeEqualToString("captureDevice.label", ""); 36 else 37 shouldBeEmptyString("captureDevice.label"); 38 shouldBeNonNull("captureDevice.groupId"); 39 debug(""); 40 }); 41 if (next) 42 next(); 43 else 44 finishJSTest(); 45 }) 46 .catch(function(err) { 47 testFailed(err.name + ": " + err.message); 32 48 }); 49 } 50 51 function grantPermission() 52 { 53 if (window.testRunner) { 54 testRunner.setUserMediaPermission(true); 55 navigator.mediaDevices 56 .getUserMedia({audio:{}, video:{}}) 57 .then(function(stream) { 58 havePermission = true; 59 enumerate(null); 60 }) 61 .catch(function(err) { 62 testFailed(`mediaDevices.getUserMedia() failed with ${err.name}: ${err.message}`); 63 }); 64 } 65 } 33 66 34 finishJSTest(); 35 }) 36 .catch(function(err) { 37 testFailed(err.name + ": " + err.message); 38 }); 67 havePermission = false; 68 enumerate(grantPermission); 39 69 40 70 window.successfullyParsed = true; -
trunk/Source/WebCore/CMakeLists.txt
r193426 r193944 953 953 Modules/mediastream/MediaStreamTrack.cpp 954 954 Modules/mediastream/MediaStreamTrackEvent.cpp 955 Modules/mediastream/MediaStreamTrackSourcesRequest.cpp956 955 Modules/mediastream/MediaTrackConstraint.cpp 957 956 Modules/mediastream/MediaTrackConstraintSet.cpp … … 976 975 Modules/mediastream/SourceInfo.cpp 977 976 Modules/mediastream/UserMediaController.cpp 977 Modules/mediastream/UserMediaPermissionCheck.cpp 978 978 Modules/mediastream/UserMediaRequest.cpp 979 979 -
trunk/Source/WebCore/ChangeLog
r193942 r193944 1 2015-12-10 Eric Carlson <eric.carlson@apple.com> 2 3 [MediaStream] Expose media capture devices persistent permissions to WebCore 4 https://bugs.webkit.org/show_bug.cgi?id=152087 5 6 Reviewed by Chris Dumez. 7 8 No new tests, an existing test was updated to test the change. 9 10 * CMakeLists.txt: Add UserMediaPermissionCheck.cpp. 11 12 * Modules/mediastream/MediaDevicesRequest.cpp: 13 (WebCore::MediaDevicesRequest::~MediaDevicesRequest): Clear the permission checker client. 14 (WebCore::MediaDevicesRequest::contextDestroyed): Ditto. 15 (WebCore::MediaDevicesRequest::start): Create a permission checker and start it running. 16 (WebCore::MediaDevicesRequest::didCompleteCheck): Start the media source checker. 17 (WebCore::MediaDevicesRequest::didCompleteRequest): Only include a track's label if the 18 page has permission to use a capture device. 19 * Modules/mediastream/MediaDevicesRequest.h: 20 21 * Modules/mediastream/UserMediaClient.h: Include prototypes for permission checker. 22 (WebCore::UserMediaClient::~UserMediaClient): 23 24 * Modules/mediastream/MediaStreamTrackSourcesRequest.cpp: Removed, not longer used. 25 * Modules/mediastream/MediaStreamTrackSourcesRequest.h: 26 27 * Modules/mediastream/UserMediaController.h: 28 (WebCore::UserMediaController::checkUserMediaPermission): New. 29 (WebCore::UserMediaController::cancelUserMediaPermissionCheck): Ditto. 30 31 * Modules/mediastream/UserMediaPermissionCheck.cpp: Added. 32 (WebCore::UserMediaPermissionCheck::create): 33 (WebCore::UserMediaPermissionCheck::UserMediaPermissionCheck): 34 (WebCore::UserMediaPermissionCheck::~UserMediaPermissionCheck): 35 (WebCore::UserMediaPermissionCheck::securityOrigin): 36 (WebCore::UserMediaPermissionCheck::contextDestroyed): 37 (WebCore::UserMediaPermissionCheck::start): 38 (WebCore::UserMediaPermissionCheck::setDeviceAccessMode): 39 * Modules/mediastream/UserMediaPermissionCheck.h: Added. 40 (WebCore::UserMediaPermissionCheckClient::~UserMediaPermissionCheckClient): 41 (WebCore::UserMediaPermissionCheck::setClient): 42 43 * WebCore.xcodeproj/project.pbxproj: Add UserMediaPermissionCheck.cpp|.h 44 45 * platform/mock/UserMediaClientMock.h: Removed, it is no longer used. 46 47 * testing/Internals.cpp: Remove UserMediaClientMock.h include, it is gone. 48 1 49 2015-12-10 Myles C. Maxfield <mmaxfield@apple.com> 2 50 -
trunk/Source/WebCore/Modules/mediastream/MediaDevicesRequest.cpp
r189982 r193944 53 53 MediaDevicesRequest::~MediaDevicesRequest() 54 54 { 55 if (m_permissionCheck) 56 m_permissionCheck->setClient(nullptr); 55 57 } 56 58 … … 66 68 { 67 69 ContextDestructionObserver::contextDestroyed(); 70 if (m_permissionCheck) { 71 m_permissionCheck->setClient(nullptr); 72 m_permissionCheck = nullptr; 73 } 68 74 m_protector = nullptr; 69 75 } … … 72 78 { 73 79 m_protector = this; 74 RealtimeMediaSourceCenter::singleton().getMediaStreamTrackSources(this); 80 m_permissionCheck = UserMediaPermissionCheck::create(*downcast<Document>(scriptExecutionContext()), *this); 81 m_permissionCheck->start(); 82 } 83 84 void MediaDevicesRequest::didCompleteCheck(bool canAccess) 85 { 86 m_permissionCheck->setClient(nullptr); 87 m_permissionCheck = nullptr; 88 89 m_hasUserMediaPermission = canAccess; 90 91 callOnMainThread([this] { 92 RealtimeMediaSourceCenter::singleton().getMediaStreamTrackSources(this); 93 }); 75 94 } 76 95 77 96 void MediaDevicesRequest::didCompleteRequest(const TrackSourceInfoVector& capturedDevices) 78 97 { 79 if (!m_scriptExecutionContext) 98 if (!m_scriptExecutionContext) { 99 m_protector = nullptr; 80 100 return; 101 } 81 102 82 103 Vector<RefPtr<MediaDeviceInfo>> deviceInfo; … … 85 106 String deviceType = trackInfo->kind() == TrackSourceInfo::SourceKind::Audio ? MediaDeviceInfo::audioInputType() : MediaDeviceInfo::videoInputType(); 86 107 87 // FIXME: label is supposed to be empty unless a device is attached to an active MediaStreamTrack in the current browsing context, or 88 // persistent permission to access these local devices has been granted to the page's origin. 89 deviceInfo.append(MediaDeviceInfo::create(m_scriptExecutionContext, trackInfo->label(), trackInfo->id(), trackInfo->groupId(), deviceType)); 108 AtomicString label = m_hasUserMediaPermission ? trackInfo->label() : emptyAtom; 109 deviceInfo.append(MediaDeviceInfo::create(m_scriptExecutionContext, label, trackInfo->id(), trackInfo->groupId(), deviceType)); 90 110 } 91 111 -
trunk/Source/WebCore/Modules/mediastream/MediaDevicesRequest.h
r189982 r193944 34 34 #include "MediaStreamCreationClient.h" 35 35 #include "MediaStreamTrackSourcesRequestClient.h" 36 #include "UserMediaPermissionCheck.h" 36 37 #include <wtf/PassRefPtr.h> 37 38 #include <wtf/RefCounted.h> … … 46 47 typedef int ExceptionCode; 47 48 48 class MediaDevicesRequest : public MediaStreamTrackSourcesRequestClient, public ContextDestructionObserver {49 class MediaDevicesRequest : public MediaStreamTrackSourcesRequestClient, public UserMediaPermissionCheckClient, public ContextDestructionObserver { 49 50 public: 50 51 static RefPtr<MediaDevicesRequest> create(Document*, MediaDevices::EnumerateDevicesPromise&&, ExceptionCode&); … … 64 65 65 66 // ContextDestructionObserver 66 virtual void contextDestroyed() override final; 67 void contextDestroyed() override final; 68 69 // UserMediaPermissionCheckClient 70 void didCompleteCheck(bool) override final; 67 71 68 72 MediaDevices::EnumerateDevicesPromise m_promise; 69 73 RefPtr<MediaDevicesRequest> m_protector; 74 RefPtr<UserMediaPermissionCheck> m_permissionCheck; 75 76 bool m_hasUserMediaPermission { false }; 70 77 }; 71 78 -
trunk/Source/WebCore/Modules/mediastream/UserMediaClient.h
r193764 r193944 39 39 40 40 class Page; 41 class UserMediaPermissionCheck; 41 42 class UserMediaRequest; 42 43 … … 45 46 virtual void pageDestroyed() = 0; 46 47 47 virtual void requestUserMediaAccess( Ref<UserMediaRequest>&&) = 0;48 virtual void requestUserMediaAccess(UserMediaRequest&) = 0; 48 49 virtual void cancelUserMediaAccessRequest(UserMediaRequest&) = 0; 50 51 virtual void checkUserMediaPermission(UserMediaPermissionCheck&) = 0; 52 virtual void cancelUserMediaPermissionCheck(UserMediaPermissionCheck&) = 0; 49 53 50 54 protected: -
trunk/Source/WebCore/Modules/mediastream/UserMediaController.h
r193764 r193944 30 30 #include "Page.h" 31 31 #include "UserMediaClient.h" 32 #include "UserMediaPermissionCheck.h" 32 33 #include "UserMediaRequest.h" 33 34 … … 41 42 UserMediaClient* client() const { return m_client; } 42 43 43 void requestUserMediaAccess( Ref<UserMediaRequest>&&);44 void requestUserMediaAccess(UserMediaRequest&); 44 45 void cancelUserMediaAccessRequest(UserMediaRequest&); 46 47 void checkUserMediaPermission(UserMediaPermissionCheck&); 48 void cancelUserMediaPermissionCheck(UserMediaPermissionCheck&); 45 49 46 50 WEBCORE_EXPORT static const char* supplementName(); … … 51 55 }; 52 56 53 inline void UserMediaController::requestUserMediaAccess( Ref<UserMediaRequest>&& request)57 inline void UserMediaController::requestUserMediaAccess(UserMediaRequest& request) 54 58 { 55 m_client->requestUserMediaAccess( WTF::move(request));59 m_client->requestUserMediaAccess(request); 56 60 } 57 61 … … 61 65 } 62 66 67 inline void UserMediaController::checkUserMediaPermission(UserMediaPermissionCheck& request) 68 { 69 m_client->checkUserMediaPermission(request); 70 } 71 72 inline void UserMediaController::cancelUserMediaPermissionCheck(UserMediaPermissionCheck& request) 73 { 74 m_client->cancelUserMediaPermissionCheck(request); 75 } 76 63 77 } // namespace WebCore 64 78 -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r193937 r193944 131 131 07277E5417D018CC0015534D /* JSMediaStreamTrackEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07277E4817D018CC0015534D /* JSMediaStreamTrackEvent.cpp */; }; 132 132 07277E5517D018CC0015534D /* JSMediaStreamTrackEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 07277E4917D018CC0015534D /* JSMediaStreamTrackEvent.h */; }; 133 07297FA71C1881C5003F0735 /* UserMediaPermissionCheck.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07297FA51C1881C5003F0735 /* UserMediaPermissionCheck.cpp */; settings = {ASSET_TAGS = (); }; }; 134 07297FA81C1881C5003F0735 /* UserMediaPermissionCheck.h in Headers */ = {isa = PBXBuildFile; fileRef = 07297FA61C1881C5003F0735 /* UserMediaPermissionCheck.h */; settings = {ATTRIBUTES = (Private, ); }; }; 133 135 072AE1E5183C0741000A5988 /* PluginReplacement.h in Headers */ = {isa = PBXBuildFile; fileRef = 072AE1DF183C0741000A5988 /* PluginReplacement.h */; }; 134 136 072AE1E6183C0741000A5988 /* QuickTimePluginReplacement.mm in Sources */ = {isa = PBXBuildFile; fileRef = 072AE1E0183C0741000A5988 /* QuickTimePluginReplacement.mm */; }; … … 155 157 073794FE19F5864E00E5A045 /* RTCNotifiersMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 073794F819F5864E00E5A045 /* RTCNotifiersMock.h */; }; 156 158 07394EC81BAB2CCD00BE99CD /* MediaDevicesRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07394EC71BAB2CCD00BE99CD /* MediaDevicesRequest.cpp */; }; 157 07394ECA1BAB2CD700BE99CD /* MediaDevicesRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 07394EC91BAB2CD700BE99CD /* MediaDevicesRequest.h */; };159 07394ECA1BAB2CD700BE99CD /* MediaDevicesRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 07394EC91BAB2CD700BE99CD /* MediaDevicesRequest.h */; settings = {ATTRIBUTES = (Private, ); }; }; 158 160 073BE34017D17E01002BD431 /* JSNavigatorUserMedia.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 073BE33E17D17E01002BD431 /* JSNavigatorUserMedia.cpp */; }; 159 161 073BE34117D17E01002BD431 /* JSNavigatorUserMedia.h in Headers */ = {isa = PBXBuildFile; fileRef = 073BE33F17D17E01002BD431 /* JSNavigatorUserMedia.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 168 170 0753860314489E9800B78452 /* CachedTextTrack.h in Headers */ = {isa = PBXBuildFile; fileRef = 0753860114489E9800B78452 /* CachedTextTrack.h */; }; 169 171 076306D017E1478D005A7C4E /* MediaStreamTrackSourcesCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 076306CC17E1478D005A7C4E /* MediaStreamTrackSourcesCallback.h */; }; 170 076306D217E1478D005A7C4E /* MediaStreamTrackSourcesRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 076306CE17E1478D005A7C4E /* MediaStreamTrackSourcesRequest.cpp */; };171 076306D317E1478D005A7C4E /* MediaStreamTrackSourcesRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 076306CF17E1478D005A7C4E /* MediaStreamTrackSourcesRequest.h */; };172 172 076306D717E149CF005A7C4E /* SourceInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 076306D417E149CF005A7C4E /* SourceInfo.cpp */; }; 173 173 076306D817E149D0005A7C4E /* SourceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 076306D517E149CF005A7C4E /* SourceInfo.h */; }; … … 1149 1149 2D77AC2D1BF2B9A00072470A /* NSViewSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D77AC2C1BF2B9A00072470A /* NSViewSPI.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1150 1150 2D7ED0AB1BAE99170043B3E5 /* TimerEventBasedMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D7ED0A91BAE99170043B3E5 /* TimerEventBasedMock.h */; }; 1151 2D7ED0AC1BAE99170043B3E5 /* UserMediaClientMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D7ED0AA1BAE99170043B3E5 /* UserMediaClientMock.h */; };1152 1151 2D8287F616E4A0380086BD00 /* HitTestLocation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2D8287F416E4A0380086BD00 /* HitTestLocation.cpp */; }; 1153 1152 2D8287F716E4A0380086BD00 /* HitTestLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D8287F516E4A0380086BD00 /* HitTestLocation.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 7439 7438 07277E4917D018CC0015534D /* JSMediaStreamTrackEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMediaStreamTrackEvent.h; sourceTree = "<group>"; }; 7440 7439 072847E216EBC5B00043CFA4 /* PlatformTextTrack.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PlatformTextTrack.h; sourceTree = "<group>"; }; 7440 07297FA51C1881C5003F0735 /* UserMediaPermissionCheck.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserMediaPermissionCheck.cpp; sourceTree = "<group>"; }; 7441 07297FA61C1881C5003F0735 /* UserMediaPermissionCheck.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserMediaPermissionCheck.h; sourceTree = "<group>"; }; 7441 7442 072AE1DF183C0741000A5988 /* PluginReplacement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PluginReplacement.h; sourceTree = "<group>"; }; 7442 7443 072AE1E0183C0741000A5988 /* QuickTimePluginReplacement.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = QuickTimePluginReplacement.mm; sourceTree = "<group>"; }; … … 7478 7479 076306CC17E1478D005A7C4E /* MediaStreamTrackSourcesCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStreamTrackSourcesCallback.h; sourceTree = "<group>"; }; 7479 7480 076306CD17E1478D005A7C4E /* MediaStreamTrackSourcesCallback.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MediaStreamTrackSourcesCallback.idl; sourceTree = "<group>"; }; 7480 076306CE17E1478D005A7C4E /* MediaStreamTrackSourcesRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MediaStreamTrackSourcesRequest.cpp; sourceTree = "<group>"; };7481 076306CF17E1478D005A7C4E /* MediaStreamTrackSourcesRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaStreamTrackSourcesRequest.h; sourceTree = "<group>"; };7482 7481 076306D417E149CF005A7C4E /* SourceInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SourceInfo.cpp; sourceTree = "<group>"; }; 7483 7482 076306D517E149CF005A7C4E /* SourceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourceInfo.h; sourceTree = "<group>"; }; … … 8500 8499 2D77AC2C1BF2B9A00072470A /* NSViewSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSViewSPI.h; sourceTree = "<group>"; }; 8501 8500 2D7ED0A91BAE99170043B3E5 /* TimerEventBasedMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TimerEventBasedMock.h; sourceTree = "<group>"; }; 8502 2D7ED0AA1BAE99170043B3E5 /* UserMediaClientMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserMediaClientMock.h; sourceTree = "<group>"; };8503 8501 2D8287F416E4A0380086BD00 /* HitTestLocation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HitTestLocation.cpp; sourceTree = "<group>"; }; 8504 8502 2D8287F516E4A0380086BD00 /* HitTestLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HitTestLocation.h; sourceTree = "<group>"; }; … … 15127 15125 076306CC17E1478D005A7C4E /* MediaStreamTrackSourcesCallback.h */, 15128 15126 076306CD17E1478D005A7C4E /* MediaStreamTrackSourcesCallback.idl */, 15129 076306CE17E1478D005A7C4E /* MediaStreamTrackSourcesRequest.cpp */,15130 076306CF17E1478D005A7C4E /* MediaStreamTrackSourcesRequest.h */,15131 15127 0705853917FE0770005F2BCB /* MediaTrackConstraint.cpp */, 15132 15128 0705851D17FDC140005F2BCB /* MediaTrackConstraint.h */, … … 15205 15201 07221B8E17CEC32700848E51 /* UserMediaController.cpp */, 15206 15202 07221B8F17CEC32700848E51 /* UserMediaController.h */, 15203 07297FA51C1881C5003F0735 /* UserMediaPermissionCheck.cpp */, 15204 07297FA61C1881C5003F0735 /* UserMediaPermissionCheck.h */, 15207 15205 07221B9017CEC32700848E51 /* UserMediaRequest.cpp */, 15208 15206 07221B9117CEC32700848E51 /* UserMediaRequest.h */, … … 17152 17150 0FE71404142170B800DB33BA /* ScrollbarThemeMock.h */, 17153 17151 2D7ED0A91BAE99170043B3E5 /* TimerEventBasedMock.h */, 17154 2D7ED0AA1BAE99170043B3E5 /* UserMediaClientMock.h */,17155 17152 ); 17156 17153 path = mock; … … 26196 26193 159741DB1B7D140100201C92 /* JSMediaDeviceInfo.h in Headers */, 26197 26194 15739BBB1B42012D00D258C1 /* JSMediaDevices.h in Headers */, 26195 07297FA81C1881C5003F0735 /* UserMediaPermissionCheck.h in Headers */, 26198 26196 FD23A12613F5FA5900F67001 /* JSMediaElementAudioSourceNode.h in Headers */, 26199 26197 E44614190CD6826900FADA75 /* JSMediaError.h in Headers */, … … 26705 26703 07FFDE69181AED420072D409 /* MediaStreamTrackPrivate.h in Headers */, 26706 26704 076306D017E1478D005A7C4E /* MediaStreamTrackSourcesCallback.h in Headers */, 26707 076306D317E1478D005A7C4E /* MediaStreamTrackSourcesRequest.h in Headers */,26708 26705 076306E317E22A43005A7C4E /* MediaStreamTrackSourcesRequestClient.h in Headers */, 26709 26706 CD641EC01819B36000EE4C41 /* MediaTimeAVFoundation.h in Headers */, … … 27894 27891 9920398318B95BC600B39AF9 /* UserInputBridge.h in Headers */, 27895 27892 078E092E17D14D1C00420AA1 /* UserMediaClient.h in Headers */, 27896 2D7ED0AC1BAE99170043B3E5 /* UserMediaClientMock.h in Headers */,27897 27893 078E092F17D14D1C00420AA1 /* UserMediaController.h in Headers */, 27898 27894 078E093017D14D1C00420AA1 /* UserMediaRequest.h in Headers */, … … 29688 29684 4ACBC0CA12713D0A0094F9B2 /* JSDOMSettableTokenList.cpp in Sources */, 29689 29685 C5137CF211A58378004ADB99 /* JSDOMStringList.cpp in Sources */, 29686 07297FA71C1881C5003F0735 /* UserMediaPermissionCheck.cpp in Sources */, 29690 29687 9A1B6F97158869C80011A8C4 /* JSDOMStringListCustom.cpp in Sources */, 29691 29688 BC64649711D82349006455B0 /* JSDOMStringMap.cpp in Sources */, … … 30400 30397 078E090317D14CEE00420AA1 /* MediaStreamTrackEvent.cpp in Sources */, 30401 30398 07FFDE68181AED420072D409 /* MediaStreamTrackPrivate.cpp in Sources */, 30402 076306D217E1478D005A7C4E /* MediaStreamTrackSourcesRequest.cpp in Sources */,30403 30399 CD641EBF1819B36000EE4C41 /* MediaTimeAVFoundation.cpp in Sources */, 30404 30400 CD60C0C6193E87C7003C656B /* MediaTimeQTKit.mm in Sources */, -
trunk/Source/WebCore/testing/Internals.cpp
r193286 r193944 172 172 #include "RTCPeerConnection.h" 173 173 #include "RTCPeerConnectionHandlerMock.h" 174 #include "UserMediaClientMock.h"175 174 #endif 176 175 -
trunk/Source/WebKit/mac/ChangeLog
r193778 r193944 1 2015-12-10 Eric Carlson <eric.carlson@apple.com> 2 3 [MediaStream] Expose media capture devices persistent permissions to WebCore 4 https://bugs.webkit.org/show_bug.cgi?id=152087 5 6 Reviewed by Chris Dumez. 7 8 Add methods and helpers for WK1 permission checker interface. 9 * WebCoreSupport/WebUserMediaClient.h: 10 * WebCoreSupport/WebUserMediaClient.mm: 11 (userMediaRequestsMap): 12 (AddRequestToRequestMap): 13 (RemoveRequestFromRequestMap): 14 (userMediaCheckMap): 15 (AddPermissionCheckToMap): 16 (RemovePermissionCheckFromMap): 17 (WebUserMediaClient::WebUserMediaClient): 18 (WebUserMediaClient::requestUserMediaAccess): 19 (WebUserMediaClient::cancelUserMediaAccessRequest): 20 (WebUserMediaClient::checkUserMediaPermission): 21 (WebUserMediaClient::cancelUserMediaPermissionCheck): 22 (-[WebUserMediaPolicyListener allow]): 23 (-[WebUserMediaPolicyListener deny]): 24 (-[WebUserMediaPolicyCheckerListener initWithUserMediaPermissionCheck:]): 25 (-[WebUserMediaPolicyCheckerListener cancelUserMediaPermissionCheck]): 26 (-[WebUserMediaPolicyCheckerListener allow]): 27 (-[WebUserMediaPolicyCheckerListener deny]): 28 (-[WebUserMediaPolicyCheckerListener denyOnlyThisRequest]): 29 (-[WebUserMediaPolicyCheckerListener shouldClearCache]): 30 (AddRequestToMap): Deleted. 31 (RemoveRequestFromMap): Deleted. 32 * WebView/WebUIDelegatePrivate.h: 33 1 34 2015-12-08 Beth Dakin <bdakin@apple.com> 2 35 -
trunk/Source/WebKit/mac/WebCoreSupport/WebUserMediaClient.h
r193764 r193944 34 34 namespace WebCore { 35 35 class UserMediaClient; 36 class UserMediaPermissionCheck; 36 37 class UserMediaRequest; 37 38 } … … 45 46 46 47 // UserMediaClient 47 virtual void requestUserMediaAccess(Ref<WebCore::UserMediaRequest>&&) override; 48 virtual void cancelUserMediaAccessRequest(WebCore::UserMediaRequest&) override; 49 virtual void pageDestroyed() override; 48 void requestUserMediaAccess(WebCore::UserMediaRequest&) override; 49 void cancelUserMediaAccessRequest(WebCore::UserMediaRequest&) override; 50 51 void checkUserMediaPermission(WebCore::UserMediaPermissionCheck&) override; 52 void cancelUserMediaPermissionCheck(WebCore::UserMediaPermissionCheck&) override; 53 54 void pageDestroyed() override; 50 55 51 56 private: -
trunk/Source/WebKit/mac/WebCoreSupport/WebUserMediaClient.mm
r193764 r193944 35 35 #import <WebCore/Page.h> 36 36 #import <WebCore/ScriptExecutionContext.h> 37 #import <WebCore/UserMediaPermissionCheck.h> 37 38 #import <WebCore/UserMediaRequest.h> 38 39 #import <wtf/HashMap.h> 40 #import <wtf/NeverDestroyed.h> 39 41 #import <wtf/RefPtr.h> 40 42 #import <wtf/RetainPtr.h> … … 51 53 @end 52 54 55 @interface WebUserMediaPolicyCheckerListener : NSObject <WebAllowDenyPolicyListener> { 56 RefPtr<UserMediaPermissionCheck> _request; 57 } 58 - (id)initWithUserMediaPermissionCheck:(PassRefPtr<UserMediaPermissionCheck>)request; 59 - (void)cancelUserMediaPermissionCheck; 60 - (void)deny; 61 @end 62 53 63 typedef HashMap<RefPtr<UserMediaRequest>, RetainPtr<WebUserMediaPolicyListener>> UserMediaRequestsMap; 54 64 55 65 static UserMediaRequestsMap& userMediaRequestsMap() 56 66 { 57 DEPRECATED_DEFINE_STATIC_LOCAL(UserMediaRequestsMap, requests, ());67 static NeverDestroyed<UserMediaRequestsMap> requests; 58 68 return requests; 59 69 } 60 70 61 static void AddRequestTo Map(UserMediaRequest* request, RetainPtr<WebUserMediaPolicyListener> listener)71 static void AddRequestToRequestMap(UserMediaRequest* request, RetainPtr<WebUserMediaPolicyListener> listener) 62 72 { 63 73 userMediaRequestsMap().set(request, listener); 64 74 } 65 75 66 static void RemoveRequestFrom Map(UserMediaRequest* request)76 static void RemoveRequestFromRequestMap(UserMediaRequest* request) 67 77 { 68 78 userMediaRequestsMap().remove(request); 69 79 } 80 81 typedef HashMap<RefPtr<UserMediaPermissionCheck>, RetainPtr<WebUserMediaPolicyCheckerListener>> UserMediaCheckMap; 82 83 static UserMediaCheckMap& userMediaCheckMap() 84 { 85 DEPRECATED_DEFINE_STATIC_LOCAL(UserMediaCheckMap, requests, ()); 86 return requests; 87 } 88 89 static void AddPermissionCheckToMap(UserMediaPermissionCheck* request, RetainPtr<WebUserMediaPolicyCheckerListener> listener) 90 { 91 userMediaCheckMap().set(request, listener); 92 } 93 94 static void RemovePermissionCheckFromMap(UserMediaPermissionCheck* request) 95 { 96 userMediaCheckMap().remove(request); 97 } 98 70 99 71 100 WebUserMediaClient::WebUserMediaClient(WebView* webView) … … 89 118 } 90 119 91 void WebUserMediaClient::requestUserMediaAccess( Ref<UserMediaRequest>&& prpRequest)120 void WebUserMediaClient::requestUserMediaAccess(UserMediaRequest& request) 92 121 { 93 122 BEGIN_BLOCK_OBJC_EXCEPTIONS; 94 123 95 UserMediaRequest* request = &prpRequest.get();96 124 SEL selector = @selector(webView:decidePolicyForUserMediaRequestFromOrigin:listener:); 97 125 if (![[m_webView UIDelegate] respondsToSelector:selector]) { 98 request ->userMediaAccessDenied();126 request.userMediaAccessDenied(); 99 127 return; 100 128 } 101 129 102 WebUserMediaPolicyListener *listener = [[WebUserMediaPolicyListener alloc] initWithUserMediaRequest: request];103 WebSecurityOrigin *webOrigin = [[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:request ->securityOrigin()];130 WebUserMediaPolicyListener *listener = [[WebUserMediaPolicyListener alloc] initWithUserMediaRequest:&request]; 131 WebSecurityOrigin *webOrigin = [[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:request.securityOrigin()]; 104 132 105 133 CallUIDelegate(m_webView, selector, webOrigin, listener); 106 AddRequestTo Map(request, listener);134 AddRequestToRequestMap(&request, listener); 107 135 108 136 [webOrigin release]; … … 123 151 } 124 152 153 void WebUserMediaClient::checkUserMediaPermission(UserMediaPermissionCheck& request) 154 { 155 BEGIN_BLOCK_OBJC_EXCEPTIONS; 156 157 SEL selector = @selector(webView:checkPolicyForUserMediaRequestFromOrigin:listener:); 158 if (![[m_webView UIDelegate] respondsToSelector:selector]) { 159 request.setHasPersistentPermission(false); 160 return; 161 } 162 163 WebUserMediaPolicyCheckerListener *listener = [[WebUserMediaPolicyCheckerListener alloc] initWithUserMediaPermissionCheck:&request]; 164 WebSecurityOrigin *webOrigin = [[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:request.securityOrigin()]; 165 166 CallUIDelegate(m_webView, selector, webOrigin, listener); 167 AddPermissionCheckToMap(&request, listener); 168 169 [webOrigin release]; 170 [listener release]; 171 172 END_BLOCK_OBJC_EXCEPTIONS; 173 } 174 175 176 void WebUserMediaClient::cancelUserMediaPermissionCheck(WebCore::UserMediaPermissionCheck& request) 177 { 178 UserMediaCheckMap& requestsMap = userMediaCheckMap(); 179 UserMediaCheckMap::iterator it = requestsMap.find(&request); 180 if (it == requestsMap.end()) 181 return; 182 183 [it->value cancelUserMediaPermissionCheck]; 184 requestsMap.remove(it); 185 } 125 186 126 187 @implementation WebUserMediaPolicyListener … … 156 217 _request->userMediaAccessGranted(_request->allowedAudioDeviceUID(), _request->allowedVideoDeviceUID()); 157 218 158 RemoveRequestFrom Map(_request.get());219 RemoveRequestFromRequestMap(_request.get()); 159 220 #endif 160 221 } … … 167 228 168 229 _request->userMediaAccessDenied(); 169 RemoveRequestFrom Map(_request.get());230 RemoveRequestFromRequestMap(_request.get()); 170 231 #endif 171 232 } … … 185 246 186 247 @end 187 #endif 248 249 250 @implementation WebUserMediaPolicyCheckerListener 251 252 - (id)initWithUserMediaPermissionCheck:(PassRefPtr<UserMediaPermissionCheck>)request 253 { 254 #if ENABLE(MEDIA_STREAM) 255 if (!(self = [super init])) 256 return nil; 257 258 _request = request; 259 return self; 260 #endif 261 } 262 263 - (void)cancelUserMediaPermissionCheck 264 { 265 #if ENABLE(MEDIA_STREAM) 266 if (!_request) 267 return; 268 269 _request = nullptr; 270 #endif 271 272 } 273 274 - (void)allow 275 { 276 #if ENABLE(MEDIA_STREAM) 277 if (!_request) 278 return; 279 280 _request->setHasPersistentPermission(true); 281 RemovePermissionCheckFromMap(_request.get()); 282 #endif 283 } 284 285 - (void)deny 286 { 287 #if ENABLE(MEDIA_STREAM) 288 if (!_request) 289 return; 290 291 _request->setHasPersistentPermission(true); 292 RemovePermissionCheckFromMap(_request.get()); 293 #endif 294 } 295 296 #if PLATFORM(IOS) 297 - (void)denyOnlyThisRequest 298 { 299 } 300 301 - (BOOL)shouldClearCache 302 { 303 // FIXME: https://bugs.webkit.org/show_bug.cgi?id=146245 304 ASSERT_NOT_REACHED(); 305 return true; 306 } 307 #endif 308 309 @end 310 311 #endif // ENABLE(MEDIA_STREAM) -
trunk/Source/WebKit/mac/WebView/WebUIDelegatePrivate.h
r192393 r193944 259 259 260 260 - (void)webView:(WebView *)webView decidePolicyForUserMediaRequestFromOrigin:(WebSecurityOrigin *)origin listener:(id<WebAllowDenyPolicyListener>)listener; 261 - (void)webView:(WebView *)webView checkPolicyForUserMediaRequestFromOrigin:(WebSecurityOrigin *)origin listener:(id<WebAllowDenyPolicyListener>)listener; 261 262 262 263 - (void)webView:(WebView *)sender elementDidFocusNode:(DOMNode *)node; -
trunk/Source/WebKit2/CMakeLists.txt
r193468 r193944 348 348 UIProcess/StatisticsRequest.cpp 349 349 UIProcess/TextCheckerCompletion.cpp 350 UIProcess/UserMediaPermissionCheckProxy.cpp 350 351 UIProcess/UserMediaPermissionRequestManagerProxy.cpp 351 352 UIProcess/UserMediaPermissionRequestProxy.cpp … … 455 456 UIProcess/API/C/WKTextChecker.cpp 456 457 UIProcess/API/C/WKUserContentControllerRef.cpp 458 UIProcess/API/C/WKUserMediaPermissionCheck.cpp 457 459 UIProcess/API/C/WKUserMediaPermissionRequest.cpp 458 460 UIProcess/API/C/WKVibration.cpp -
trunk/Source/WebKit2/ChangeLog
r193937 r193944 1 2015-12-10 Eric Carlson <eric.carlson@apple.com> 2 3 [MediaStream] Expose media capture devices persistent permissions to WebCore 4 https://bugs.webkit.org/show_bug.cgi?id=152087 5 6 Reviewed by Chris Dumez. 7 8 * CMakeLists.txt: Add UserMediaPermissionCheckProxy.cpp and WKUserMediaPermissionCheck.cpp. 9 10 * Shared/API/APIObject.h: Define UserMediaPermissionCheck. 11 12 * Shared/API/c/WKBase.h: Add WKUserMediaPermissionCheckRef typedef. 13 14 * UIProcess/API/APIUIClient.h: 15 (API::UIClient::checkUserMediaPermissionForOrigin): New. 16 17 * UIProcess/API/C/WKAPICast.h: Add WKUserMediaPermissionCheckRef/UserMediaPermissionCheckProxy mapping. 18 19 * UIProcess/API/C/WKPage.cpp: 20 (WKPageSetPageUIClient): Implement checkUserMediaPermissionForOrigin. 21 22 * UIProcess/API/C/WKPageUIClient.h: Add WKCheckUserMediaPermissionCallback typedef and add 23 checkUserMediaPermissionForOrigin to WKPageUIClientV6. 24 25 * UIProcess/API/C/WKUserMediaPermissionCheck.cpp: Added. 26 (WKUserMediaPermissionCheckGetTypeID): 27 (WKUserMediaPermissionCheckSetHasPermission): 28 29 * UIProcess/API/C/WKUserMediaPermissionCheck.h: Added. 30 31 * UIProcess/UserMediaPermissionCheckProxy.cpp: Added. 32 (WebKit::UserMediaPermissionCheckProxy::UserMediaPermissionCheckProxy): 33 (WebKit::UserMediaPermissionCheckProxy::setHasPermission): 34 (WebKit::UserMediaPermissionCheckProxy::invalidate): 35 * UIProcess/UserMediaPermissionCheckProxy.h: Added. 36 (WebKit::UserMediaPermissionCheckProxy::create): 37 * UIProcess/UserMediaPermissionRequestManagerProxy.cpp: 38 (WebKit::UserMediaPermissionRequestManagerProxy::invalidateRequests): 39 (WebKit::UserMediaPermissionRequestManagerProxy::createRequest): 40 (WebKit::UserMediaPermissionRequestManagerProxy::didReceiveUserMediaPermissionDecision): 41 (WebKit::UserMediaPermissionRequestManagerProxy::createUserMediaPermissionCheck): 42 (WebKit::UserMediaPermissionRequestManagerProxy::didCompleteUserMediaPermissionCheck): 43 * UIProcess/UserMediaPermissionRequestManagerProxy.h: 44 * UIProcess/WebPageProxy.cpp: 45 (WebKit::WebPageProxy::requestUserMediaPermissionForFrame): 46 (WebKit::WebPageProxy::checkUserMediaPermissionForFrame): 47 (WebKit::WebPageProxy::requestNotificationPermission): 48 * UIProcess/WebPageProxy.h: 49 * UIProcess/WebPageProxy.messages.in: 50 51 * WebKit2.xcodeproj/project.pbxproj: Add UserMediaPermissionCheckProxy.*, and WKUserMediaPermissionCheck.*. 52 53 * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp: 54 (WebKit::UserMediaPermissionRequestManager::startUserMediaRequest): Renamed from startRequest. 55 (WebKit::UserMediaPermissionRequestManager::cancelUserMediaRequest): Renamed from cancelRequest. 56 (WebKit::UserMediaPermissionRequestManager::didReceiveUserMediaPermissionDecision): m_requestToIDMap -> 57 m_userMediaRequestToIDMap.remove. 58 (WebKit::UserMediaPermissionRequestManager::startUserMediaPermissionCheck): New, start the request. 59 (WebKit::UserMediaPermissionRequestManager::cancelUserMediaPermissionCheck): New, cancel 60 the request. 61 (WebKit::UserMediaPermissionRequestManager::didCompleteUserMediaPermissionCheck): New, 62 all the request completion method. 63 (WebKit::UserMediaPermissionRequestManager::startRequest): Deleted. 64 (WebKit::UserMediaPermissionRequestManager::cancelRequest): Deleted. 65 * WebProcess/MediaStream/UserMediaPermissionRequestManager.h: 66 67 * WebProcess/WebCoreSupport/WebUserMediaClient.cpp: 68 (WebKit::WebUserMediaClient::requestUserMediaAccess): startRequest -> startUserMediaRequest. 69 (WebKit::WebUserMediaClient::cancelUserMediaAccessRequest): cancelRequest -> cancelUserMediaRequest. 70 (WebKit::WebUserMediaClient::checkUserMediaPermission): New. 71 (WebKit::WebUserMediaClient::cancelUserMediaPermissionCheck): New. 72 * WebProcess/WebCoreSupport/WebUserMediaClient.h: 73 74 * WebProcess/WebPage/WebPage.cpp: 75 (WebKit::WebPage::didCompleteUserMediaPermissionCheck): New. 76 * WebProcess/WebPage/WebPage.h: 77 * WebProcess/WebPage/WebPage.messages.in: Add DidCompleteUserMediaPermissionCheck. 78 1 79 2015-12-10 Joseph Pecoraro <pecoraro@apple.com> 2 80 -
trunk/Source/WebKit2/Shared/API/APIObject.h
r192911 r193944 147 147 UserContentExtension, 148 148 UserContentExtensionStore, 149 UserMediaPermissionCheck, 149 150 UserMediaPermissionRequest, 150 151 Vibration, -
trunk/Source/WebKit2/Shared/API/c/WKBase.h
r192931 r193944 140 140 typedef const struct OpaqueWKUserContentExtensionStore* WKUserContentExtensionStoreRef; 141 141 typedef const struct OpaqueWKUserContentFilter* WKUserContentFilterRef; 142 typedef const struct OpaqueWKUserMediaPermissionCheck* WKUserMediaPermissionCheckRef; 142 143 typedef const struct OpaqueWKUserMediaPermissionRequest* WKUserMediaPermissionRequestRef; 143 144 typedef const struct OpaqueWKUserScript* WKUserScriptRef; -
trunk/Source/WebKit2/UIProcess/API/APIUIClient.h
r191323 r193944 51 51 class NativeWebWheelEvent; 52 52 class NotificationPermissionRequest; 53 class UserMediaPermissionCheckProxy; 53 54 class UserMediaPermissionRequestProxy; 54 55 class WebColorPickerResultListenerProxy; … … 132 133 virtual bool decidePolicyForGeolocationPermissionRequest(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, SecurityOrigin*, WebKit::GeolocationPermissionRequestProxy*) { return false; } 133 134 virtual bool decidePolicyForUserMediaPermissionRequest(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, WebKit::UserMediaPermissionRequestProxy&) { return false; } 135 virtual bool checkUserMediaPermissionForOrigin(WebKit::WebPageProxy&, WebKit::WebFrameProxy&, SecurityOrigin&, WebKit::UserMediaPermissionCheckProxy&) { return false; } 134 136 virtual bool decidePolicyForNotificationPermissionRequest(WebKit::WebPageProxy*, SecurityOrigin*, WebKit::NotificationPermissionRequest*) { return false; } 135 137 -
trunk/Source/WebKit2/UIProcess/API/C/WKAPICast.h
r192808 r193944 75 75 class GeolocationPermissionRequestProxy; 76 76 class NotificationPermissionRequest; 77 class UserMediaPermissionCheckProxy; 77 78 class UserMediaPermissionRequestProxy; 78 79 class WebBackForwardList; … … 162 163 WK_ADD_API_MAPPING(WKUserContentExtensionStoreRef, API::UserContentExtensionStore) 163 164 WK_ADD_API_MAPPING(WKUserContentFilterRef, API::UserContentExtension) 165 WK_ADD_API_MAPPING(WKUserMediaPermissionCheckRef, UserMediaPermissionCheckProxy) 164 166 WK_ADD_API_MAPPING(WKUserMediaPermissionRequestRef, UserMediaPermissionRequestProxy) 165 167 WK_ADD_API_MAPPING(WKUserScriptRef, API::UserScript) -
trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp
r193380 r193944 2018 2018 } 2019 2019 2020 virtual bool checkUserMediaPermissionForOrigin(WebPageProxy& page, WebFrameProxy& frame, API::SecurityOrigin& origin, UserMediaPermissionCheckProxy& request) override 2021 { 2022 if (!m_client.checkUserMediaPermissionForOrigin) 2023 return false; 2024 2025 m_client.checkUserMediaPermissionForOrigin(toAPI(&page), toAPI(&frame), toAPI(&origin), toAPI(&request), m_client.base.clientInfo); 2026 return true; 2027 } 2028 2020 2029 virtual bool decidePolicyForNotificationPermissionRequest(WebPageProxy* page, API::SecurityOrigin* origin, NotificationPermissionRequest* permissionRequest) override 2021 2030 { -
trunk/Source/WebKit2/UIProcess/API/C/WKPageUIClient.h
r192911 r193944 98 98 typedef void (*WKPageIsPlayingAudioDidChangeCallback)(WKPageRef page, const void* clientInfo); 99 99 typedef void (*WKPageDecidePolicyForUserMediaPermissionRequestCallback)(WKPageRef page, WKFrameRef frame, WKSecurityOriginRef origin, WKUserMediaPermissionRequestRef permissionRequest, const void* clientInfo); 100 typedef void (*WKCheckUserMediaPermissionCallback)(WKPageRef page, WKFrameRef frame, WKSecurityOriginRef origin, WKUserMediaPermissionCheckRef devicesRequest, const void *clientInfo); 100 101 typedef void (*WKPageDidClickAutoFillButtonCallback)(WKPageRef page, WKTypeRef userData, const void *clientInfo); 101 102 typedef void (*WKPageMediaSessionMetadataDidChangeCallback)(WKPageRef page, WKMediaSessionMetadataRef metadata, const void* clientInfo); … … 546 547 WKPageRunJavaScriptConfirmCallback runJavaScriptConfirm; 547 548 WKPageRunJavaScriptPromptCallback runJavaScriptPrompt; 549 WKCheckUserMediaPermissionCallback checkUserMediaPermissionForOrigin; 548 550 } WKPageUIClientV6; 549 551 -
trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp
r190262 r193944 33 33 void UserMediaPermissionRequestManagerProxy::invalidateRequests() 34 34 { 35 for (auto& request : m_pending Requests.values())35 for (auto& request : m_pendingUserMediaRequests.values()) 36 36 request->invalidate(); 37 37 38 m_pending Requests.clear();38 m_pendingUserMediaRequests.clear(); 39 39 } 40 40 41 PassRefPtr<UserMediaPermissionRequestProxy> UserMediaPermissionRequestManagerProxy::createRequest(uint64_t userMediaID, const Vector<String>& audioDeviceUIDs, const Vector<String>& videoDeviceUIDs)41 Ref<UserMediaPermissionRequestProxy> UserMediaPermissionRequestManagerProxy::createRequest(uint64_t userMediaID, const Vector<String>& audioDeviceUIDs, const Vector<String>& videoDeviceUIDs) 42 42 { 43 Ref Ptr<UserMediaPermissionRequestProxy> request = UserMediaPermissionRequestProxy::create(*this, userMediaID, audioDeviceUIDs, videoDeviceUIDs);44 m_pending Requests.add(userMediaID, request.get());45 return request .release();43 Ref<UserMediaPermissionRequestProxy> request = UserMediaPermissionRequestProxy::create(*this, userMediaID, audioDeviceUIDs, videoDeviceUIDs); 44 m_pendingUserMediaRequests.add(userMediaID, request.ptr()); 45 return request; 46 46 } 47 47 … … 51 51 return; 52 52 53 if (!m_pending Requests.take(userMediaID))53 if (!m_pendingUserMediaRequests.take(userMediaID)) 54 54 return; 55 55 … … 61 61 } 62 62 63 Ref<UserMediaPermissionCheckProxy> UserMediaPermissionRequestManagerProxy::createUserMediaPermissionCheck(uint64_t userMediaID) 64 { 65 Ref<UserMediaPermissionCheckProxy> request = UserMediaPermissionCheckProxy::create(*this, userMediaID); 66 m_pendingDeviceRequests.add(userMediaID, request.ptr()); 67 return request; 68 } 69 70 void UserMediaPermissionRequestManagerProxy::didCompleteUserMediaPermissionCheck(uint64_t userMediaID, bool allowed) 71 { 72 if (!m_page.isValid()) 73 return; 74 75 if (!m_pendingDeviceRequests.take(userMediaID)) 76 return; 77 78 #if ENABLE(MEDIA_STREAM) 79 m_page.process().send(Messages::WebPage::DidCompleteUserMediaPermissionCheck(userMediaID, allowed), m_page.pageID()); 80 #else 81 UNUSED_PARAM(allowed); 82 #endif 83 } 84 63 85 } // namespace WebKit -
trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.h
r190262 r193944 20 20 #define UserMediaPermissionRequestManagerProxy_h 21 21 22 #include "UserMediaPermissionCheckProxy.h" 22 23 #include "UserMediaPermissionRequestProxy.h" 23 24 #include <wtf/HashMap.h> … … 33 34 void invalidateRequests(); 34 35 35 // Create a request to be presented to the user. 36 PassRefPtr<UserMediaPermissionRequestProxy> createRequest(uint64_t userMediaID, const Vector<String>& audioDeviceUIDs, const Vector<String>& videoDeviceUIDs); 37 38 // Called by UserMediaPermissionRequestProxy when a decision is made by the user. 36 Ref<UserMediaPermissionRequestProxy> createRequest(uint64_t userMediaID, const Vector<String>& audioDeviceUIDs, const Vector<String>& videoDeviceUIDs); 39 37 void didReceiveUserMediaPermissionDecision(uint64_t, bool allow, const String& audioDeviceUID, const String& videoDeviceUID); 40 38 39 40 Ref<UserMediaPermissionCheckProxy> createUserMediaPermissionCheck(uint64_t userMediaID); 41 void didCompleteUserMediaPermissionCheck(uint64_t, bool allow); 42 41 43 private: 42 HashMap<uint64_t, RefPtr<UserMediaPermissionRequestProxy>> m_pendingRequests; 44 HashMap<uint64_t, RefPtr<UserMediaPermissionRequestProxy>> m_pendingUserMediaRequests; 45 HashMap<uint64_t, RefPtr<UserMediaPermissionCheckProxy>> m_pendingDeviceRequests; 43 46 WebPageProxy& m_page; 44 47 }; -
trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.h
r191504 r193944 22 22 #include "APIObject.h" 23 23 #include <WebCore/RealtimeMediaSource.h> 24 #include <wtf/PassRefPtr.h>25 24 #include <wtf/Vector.h> 26 25 #include <wtf/text/WTFString.h> … … 32 31 class UserMediaPermissionRequestProxy : public API::ObjectImpl<API::Object::Type::UserMediaPermissionRequest> { 33 32 public: 34 static PassRefPtr<UserMediaPermissionRequestProxy> create(UserMediaPermissionRequestManagerProxy& manager, uint64_t userMediaID, const Vector<String>& videoDeviceUIDs, const Vector<String>& audioDeviceUIDs)33 static Ref<UserMediaPermissionRequestProxy> create(UserMediaPermissionRequestManagerProxy& manager, uint64_t userMediaID, const Vector<String>& videoDeviceUIDs, const Vector<String>& audioDeviceUIDs) 35 34 { 36 return adoptRef( new UserMediaPermissionRequestProxy(manager, userMediaID, videoDeviceUIDs, audioDeviceUIDs));35 return adoptRef(*new UserMediaPermissionRequestProxy(manager, userMediaID, videoDeviceUIDs, audioDeviceUIDs)); 37 36 } 38 37 -
trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp
r193883 r193944 5262 5262 } 5263 5263 5264 void WebPageProxy::checkUserMediaPermissionForFrame(uint64_t userMediaID, uint64_t frameID, String originIdentifier) 5265 { 5266 WebFrameProxy* frame = m_process->webFrame(frameID); 5267 MESSAGE_CHECK(frame); 5268 5269 RefPtr<API::SecurityOrigin> origin = API::SecurityOrigin::create(SecurityOrigin::createFromDatabaseIdentifier(originIdentifier)); 5270 RefPtr<UserMediaPermissionCheckProxy> request = m_userMediaPermissionRequestManager.createUserMediaPermissionCheck(userMediaID); 5271 5272 if (!m_uiClient->checkUserMediaPermissionForOrigin(*this, *frame, *origin.get(), *request.get())) 5273 request->setHasPersistentPermission(false); 5274 } 5275 5264 5276 void WebPageProxy::requestNotificationPermission(uint64_t requestID, const String& originString) 5265 5277 { -
trunk/Source/WebKit2/UIProcess/WebPageProxy.h
r193664 r193944 1191 1191 1192 1192 void requestUserMediaPermissionForFrame(uint64_t userMediaID, uint64_t frameID, String originIdentifier, const Vector<String>& audioDeviceUIDs, const Vector<String>& videoDeviceUIDs); 1193 void checkUserMediaPermissionForFrame(uint64_t userMediaID, uint64_t frameID, String originIdentifier); 1193 1194 1194 1195 void runModal(); -
trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in
r193664 r193944 263 263 # MediaSteam messages 264 264 RequestUserMediaPermissionForFrame(uint64_t userMediaID, uint64_t frameID, String originIdentifier, Vector<String> audioDeviceUIDs, Vector<String> videoDeviceUIDs) 265 CheckUserMediaPermissionForFrame(uint64_t userMediaID, uint64_t frameID, String originIdentifier) 265 266 #endif 266 267 -
trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj
r193468 r193944 65 65 00B9661918E25AE100CE1F88 /* FindClient.mm in Sources */ = {isa = PBXBuildFile; fileRef = 00B9661718E25AE100CE1F88 /* FindClient.mm */; }; 66 66 00B9661A18E25AE100CE1F88 /* FindClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 00B9661818E25AE100CE1F88 /* FindClient.h */; }; 67 07297F9E1C17BBEA003F0735 /* UserMediaPermissionCheckProxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07297F9C1C17BBEA003F0735 /* UserMediaPermissionCheckProxy.cpp */; settings = {ASSET_TAGS = (); }; }; 68 07297F9F1C17BBEA003F0735 /* UserMediaPermissionCheckProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 07297F9D1C17BBEA003F0735 /* UserMediaPermissionCheckProxy.h */; settings = {ASSET_TAGS = (); }; }; 69 07297FA21C186ADB003F0735 /* WKUserMediaPermissionCheck.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07297FA01C186ADB003F0735 /* WKUserMediaPermissionCheck.cpp */; settings = {ASSET_TAGS = (); }; }; 70 07297FA31C186ADB003F0735 /* WKUserMediaPermissionCheck.h in Headers */ = {isa = PBXBuildFile; fileRef = 07297FA11C186ADB003F0735 /* WKUserMediaPermissionCheck.h */; settings = {ATTRIBUTES = (Private, ); }; }; 67 71 076E884E1A13CADF005E90FC /* APIContextMenuClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 076E884D1A13CADF005E90FC /* APIContextMenuClient.h */; }; 68 72 0F0C365818C051BA00F607D7 /* RemoteLayerTreeHostIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0F0C365718C051BA00F607D7 /* RemoteLayerTreeHostIOS.mm */; }; … … 2168 2172 00B9661718E25AE100CE1F88 /* FindClient.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FindClient.mm; sourceTree = "<group>"; }; 2169 2173 00B9661818E25AE100CE1F88 /* FindClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FindClient.h; sourceTree = "<group>"; }; 2174 07297F9C1C17BBEA003F0735 /* UserMediaPermissionCheckProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserMediaPermissionCheckProxy.cpp; sourceTree = "<group>"; }; 2175 07297F9D1C17BBEA003F0735 /* UserMediaPermissionCheckProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserMediaPermissionCheckProxy.h; sourceTree = "<group>"; }; 2176 07297FA01C186ADB003F0735 /* WKUserMediaPermissionCheck.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKUserMediaPermissionCheck.cpp; sourceTree = "<group>"; }; 2177 07297FA11C186ADB003F0735 /* WKUserMediaPermissionCheck.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKUserMediaPermissionCheck.h; sourceTree = "<group>"; }; 2170 2178 076E884D1A13CADF005E90FC /* APIContextMenuClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIContextMenuClient.h; sourceTree = "<group>"; }; 2171 2179 076E884F1A13CBC6005E90FC /* APIInjectedBundlePageContextMenuClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIInjectedBundlePageContextMenuClient.h; sourceTree = "<group>"; }; … … 6186 6194 BC06F43812DBCCFB002D78DE /* GeolocationPermissionRequestProxy.h */, 6187 6195 31607F3819627002009B87DA /* LegacySessionStateCoding.h */, 6196 07297F9C1C17BBEA003F0735 /* UserMediaPermissionCheckProxy.cpp */, 6197 07297F9D1C17BBEA003F0735 /* UserMediaPermissionCheckProxy.h */, 6188 6198 BC6EDAA5111271C600E7678B /* PageClient.h */, 6189 6199 1AC75379183A9FDA0072CB15 /* PageLoadState.cpp */, … … 6482 6492 7C2413061AACFCB400A58C15 /* WKUserContentExtensionStoreRef.cpp */, 6483 6493 7C2413071AACFCB400A58C15 /* WKUserContentExtensionStoreRef.h */, 6494 07297FA01C186ADB003F0735 /* WKUserMediaPermissionCheck.cpp */, 6495 07297FA11C186ADB003F0735 /* WKUserMediaPermissionCheck.h */, 6484 6496 4A410F3519AF7AC3002EBAB5 /* WKUserMediaPermissionRequest.cpp */, 6485 6497 4A410F3619AF7AC3002EBAB5 /* WKUserMediaPermissionRequest.h */, … … 7775 7787 2DA944A41884E4F000ED86DB /* GestureTypes.h in Headers */, 7776 7788 2DA049B8180CCD0A00AAFA9E /* GraphicsLayerCARemote.h in Headers */, 7789 07297FA31C186ADB003F0735 /* WKUserMediaPermissionCheck.h in Headers */, 7777 7790 C0CE72AD1247E78D00BC0EC4 /* HandleMessage.h in Headers */, 7778 7791 1AC75A1B1B3368270056745B /* HangDetectionDisabler.h in Headers */, … … 8267 8280 51A555F6128C6C47009ABCEC /* WKContextMenuItem.h in Headers */, 8268 8281 51A55601128C6D92009ABCEC /* WKContextMenuItemTypes.h in Headers */, 8282 07297F9F1C17BBEA003F0735 /* UserMediaPermissionCheckProxy.h in Headers */, 8269 8283 BCC938E11180DE440085E5FE /* WKContextPrivate.h in Headers */, 8270 8284 9FB5F395169E6A80002C25BF /* WKContextPrivateMac.h in Headers */, … … 10085 10099 BC06F44F12DBDF3F002D78DE /* WKGeolocationPermissionRequest.cpp in Sources */, 10086 10100 BC0E619912D6CD120012A72A /* WKGeolocationPosition.cpp in Sources */, 10101 07297FA21C186ADB003F0735 /* WKUserMediaPermissionCheck.cpp in Sources */, 10087 10102 0FCB4E5018BBE044000FCFC9 /* WKGeolocationProviderIOS.mm in Sources */, 10088 10103 0FCB4E5118BBE044000FCFC9 /* WKGeolocationProviderIOSObjCSecurityOrigin.mm in Sources */, … … 10099 10114 A54293A5195A43DD002782C7 /* WKInspectorNodeSearchGestureRecognizer.mm in Sources */, 10100 10115 51A9E10A1315CD18009E7031 /* WKKeyValueStorageManager.cpp in Sources */, 10116 07297F9E1C17BBEA003F0735 /* UserMediaPermissionCheckProxy.cpp in Sources */, 10101 10117 33D3A3B51339600B00709BE4 /* WKMediaCacheManager.cpp in Sources */, 10102 10118 C98C48A91B6FD5B500145103 /* WKMediaSessionFocusManager.cpp in Sources */, -
trunk/Source/WebKit2/WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp
r190262 r193944 46 46 } 47 47 48 void UserMediaPermissionRequestManager::start Request(UserMediaRequest& request)48 void UserMediaPermissionRequestManager::startUserMediaRequest(UserMediaRequest& request) 49 49 { 50 50 Document* document = downcast<Document>(request.scriptExecutionContext()); … … 57 57 58 58 uint64_t requestID = generateRequestID(); 59 m_idTo RequestMap.add(requestID, &request);60 m_ requestToIDMap.add(&request, requestID);59 m_idToUserMediaRequestMap.add(requestID, &request); 60 m_userMediaRequestToIDMap.add(&request, requestID); 61 61 62 62 WebFrame* webFrame = WebFrame::fromCoreFrame(*frame); … … 67 67 } 68 68 69 void UserMediaPermissionRequestManager::cancel Request(UserMediaRequest& request)69 void UserMediaPermissionRequestManager::cancelUserMediaRequest(UserMediaRequest& request) 70 70 { 71 uint64_t requestID = m_ requestToIDMap.take(&request);71 uint64_t requestID = m_userMediaRequestToIDMap.take(&request); 72 72 if (!requestID) 73 73 return; 74 m_idTo RequestMap.remove(requestID);74 m_idToUserMediaRequestMap.remove(requestID); 75 75 } 76 76 77 77 void UserMediaPermissionRequestManager::didReceiveUserMediaPermissionDecision(uint64_t requestID, bool allowed, const String& audioDeviceUID, const String& videoDeviceUID) 78 78 { 79 RefPtr<UserMediaRequest> request = m_idTo RequestMap.take(requestID);79 RefPtr<UserMediaRequest> request = m_idToUserMediaRequestMap.take(requestID); 80 80 if (!request) 81 81 return; 82 m_ requestToIDMap.remove(request);82 m_userMediaRequestToIDMap.remove(request); 83 83 84 84 if (allowed) … … 88 88 } 89 89 90 void UserMediaPermissionRequestManager::startUserMediaPermissionCheck(WebCore::UserMediaPermissionCheck& request) 91 { 92 Document* document = downcast<Document>(request.scriptExecutionContext()); 93 Frame* frame = document ? document->frame() : nullptr; 94 95 if (!frame) { 96 request.setHasPersistentPermission(false); 97 return; 98 } 99 100 uint64_t requestID = generateRequestID(); 101 m_idToUserMediaPermissionCheckMap.add(requestID, &request); 102 m_userMediaPermissionCheckToIDMap.add(&request, requestID); 103 104 WebFrame* webFrame = WebFrame::fromCoreFrame(*frame); 105 ASSERT(webFrame); 106 107 SecurityOrigin* origin = request.securityOrigin(); 108 m_page.send(Messages::WebPageProxy::CheckUserMediaPermissionForFrame(requestID, webFrame->frameID(), origin->databaseIdentifier())); 109 } 110 111 void UserMediaPermissionRequestManager::cancelUserMediaPermissionCheck(WebCore::UserMediaPermissionCheck& request) 112 { 113 uint64_t requestID = m_userMediaPermissionCheckToIDMap.take(&request); 114 if (!requestID) 115 return; 116 m_idToUserMediaPermissionCheckMap.remove(requestID); 117 } 118 119 void UserMediaPermissionRequestManager::didCompleteUserMediaPermissionCheck(uint64_t requestID, bool allowed) 120 { 121 RefPtr<UserMediaPermissionCheck> request = m_idToUserMediaPermissionCheckMap.take(requestID); 122 if (!request) 123 return; 124 m_userMediaPermissionCheckToIDMap.remove(request); 125 126 request->setHasPersistentPermission(allowed); 127 } 128 90 129 } // namespace WebKit 91 130 -
trunk/Source/WebKit2/WebProcess/MediaStream/UserMediaPermissionRequestManager.h
r190262 r193944 22 22 #if ENABLE(MEDIA_STREAM) 23 23 24 #include <WebCore/UserMediaPermissionCheck.h> 24 25 #include <WebCore/UserMediaRequest.h> 25 26 #include <wtf/HashMap.h> … … 35 36 explicit UserMediaPermissionRequestManager(WebPage&); 36 37 37 void startRequest(WebCore::UserMediaRequest&); 38 void cancelRequest(WebCore::UserMediaRequest&); 38 void startUserMediaRequest(WebCore::UserMediaRequest&); 39 void cancelUserMediaRequest(WebCore::UserMediaRequest&); 40 void didReceiveUserMediaPermissionDecision(uint64_t requestID, bool allowed, const String& audioDeviceUID, const String& videoDeviceUID); 39 41 40 void didReceiveUserMediaPermissionDecision(uint64_t userMediaID, bool allowed, const String& audioDeviceUID, const String& videoDeviceUID); 42 void startUserMediaPermissionCheck(WebCore::UserMediaPermissionCheck&); 43 void cancelUserMediaPermissionCheck(WebCore::UserMediaPermissionCheck&); 44 void didCompleteUserMediaPermissionCheck(uint64_t requestID, bool allowed); 41 45 42 46 private: 43 47 WebPage& m_page; 44 48 45 HashMap<uint64_t, RefPtr<WebCore::UserMediaRequest>> m_idToRequestMap; 46 HashMap<RefPtr<WebCore::UserMediaRequest>, uint64_t> m_requestToIDMap; 49 HashMap<uint64_t, RefPtr<WebCore::UserMediaRequest>> m_idToUserMediaRequestMap; 50 HashMap<RefPtr<WebCore::UserMediaRequest>, uint64_t> m_userMediaRequestToIDMap; 51 52 HashMap<uint64_t, RefPtr<WebCore::UserMediaPermissionCheck>> m_idToUserMediaPermissionCheckMap; 53 HashMap<RefPtr<WebCore::UserMediaPermissionCheck>, uint64_t> m_userMediaPermissionCheckToIDMap; 47 54 }; 48 55 -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebUserMediaClient.cpp
r193764 r193944 40 40 } 41 41 42 void WebUserMediaClient::requestUserMediaAccess( Ref<UserMediaRequest>&& prRequest)42 void WebUserMediaClient::requestUserMediaAccess(UserMediaRequest& request) 43 43 { 44 UserMediaRequest& request = prRequest.leakRef(); 45 m_page.userMediaPermissionRequestManager().startRequest(request); 44 m_page.userMediaPermissionRequestManager().startUserMediaRequest(request); 46 45 } 47 46 48 47 void WebUserMediaClient::cancelUserMediaAccessRequest(UserMediaRequest& request) 49 48 { 50 m_page.userMediaPermissionRequestManager().cancelRequest(request); 49 m_page.userMediaPermissionRequestManager().cancelUserMediaRequest(request); 50 } 51 52 void WebUserMediaClient::checkUserMediaPermission(WebCore::UserMediaPermissionCheck& request) 53 { 54 m_page.userMediaPermissionRequestManager().startUserMediaPermissionCheck(request); 55 } 56 57 void WebUserMediaClient::cancelUserMediaPermissionCheck(WebCore::UserMediaPermissionCheck& request) 58 { 59 m_page.userMediaPermissionRequestManager().cancelUserMediaPermissionCheck(request); 51 60 } 52 61 -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebUserMediaClient.h
r193764 r193944 34 34 35 35 private: 36 virtual void pageDestroyed() override; 37 void requestUserMediaAccess(Ref<WebCore::UserMediaRequest>&&) override; 36 void pageDestroyed() override; 37 38 void requestUserMediaAccess(WebCore::UserMediaRequest&) override; 38 39 void cancelUserMediaAccessRequest(WebCore::UserMediaRequest&) override; 40 41 void checkUserMediaPermission(WebCore::UserMediaPermissionCheck&) override; 42 void cancelUserMediaPermissionCheck(WebCore::UserMediaPermissionCheck&) override; 39 43 40 44 WebPage& m_page; -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
r193664 r193944 3366 3366 m_userMediaPermissionRequestManager.didReceiveUserMediaPermissionDecision(userMediaID, allowed, audioDeviceUID, videoDeviceUID); 3367 3367 } 3368 3369 void WebPage::didCompleteUserMediaPermissionCheck(uint64_t userMediaID, bool allowed) 3370 { 3371 m_userMediaPermissionRequestManager.didCompleteUserMediaPermissionCheck(userMediaID, allowed); 3372 } 3368 3373 #endif 3369 3374 -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h
r193664 r193944 1106 1106 #if ENABLE(MEDIA_STREAM) 1107 1107 WK_EXPORT void didReceiveUserMediaPermissionDecision(uint64_t userMediaID, bool allowed, const String& audioDeviceUID, const String& videoDeviceUID); 1108 WK_EXPORT void didCompleteUserMediaPermissionCheck(uint64_t userMediaID, bool allowed); 1108 1109 #endif 1109 1110 -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in
r193664 r193944 283 283 # MediaSteam 284 284 DidReceiveUserMediaPermissionDecision(uint64_t userMediaID, bool allowed, String audioDeviceUID, String videoDeviceUID) 285 DidCompleteUserMediaPermissionCheck(uint64_t userMediaID, bool allowed) 285 286 #endif 286 287 -
trunk/Tools/ChangeLog
r193924 r193944 1 2015-12-10 Eric Carlson <eric.carlson@apple.com> 2 3 [MediaStream] Expose media capture devices persistent permissions to WebCore 4 https://bugs.webkit.org/show_bug.cgi?id=152087 5 6 Add support for the new user media permission checker page UI client method. 7 8 Reviewed by Chris Dumez. 9 10 * WebKitTestRunner/TestController.cpp: 11 (WTR::decidePolicyForUserMediaPermissionRequest): 12 (WTR::checkUserMediaPermissionForOrigin): 13 (WTR::TestController::createOtherPage): Add checkUserMediaPermissionForOrigin. 14 (WTR::TestController::createWebViewWithOptions): Ditto. 15 (WTR::TestController::resetStateToConsistentValues): Clear m_userMediaOriginPermissions. 16 (WTR::originUserVisibleName): New, create a string for the origin. 17 (WTR::TestController::handleCheckOfUserMediaPermissionForOrigin): Set the WKUserMediaPermissionCheckRef 18 according to the state of the origin permission map. 19 (WTR::TestController::handleUserMediaPermissionRequest): Remember both the origin and the 20 request so we can update the origin permission map in decidePolicyForUserMediaPermissionRequestIfPossible. 21 (WTR::TestController::decidePolicyForUserMediaPermissionRequestIfPossible): Update the 22 origin permission map. 23 * WebKitTestRunner/TestController.h: 24 1 25 2015-12-10 Alex Christensen <achristensen@webkit.org> 2 26 -
trunk/Tools/WebKitTestRunner/TestController.cpp
r192911 r193944 52 52 #include <WebKit/WKProtectionSpace.h> 53 53 #include <WebKit/WKRetainPtr.h> 54 #include <WebKit/WKSecurityOriginRef.h> 55 #include <WebKit/WKUserMediaPermissionCheck.h> 54 56 #include <algorithm> 55 57 #include <cstdio> … … 202 204 } 203 205 204 static void decidePolicyForUserMediaPermissionRequest(WKPageRef, WKFrameRef, WKSecurityOriginRef, WKUserMediaPermissionRequestRef permissionRequest, const void* clientInfo) 205 { 206 TestController::singleton().handleUserMediaPermissionRequest(permissionRequest); 206 static void decidePolicyForUserMediaPermissionRequest(WKPageRef, WKFrameRef, WKSecurityOriginRef origin, WKUserMediaPermissionRequestRef permissionRequest, const void* clientInfo) 207 { 208 TestController::singleton().handleUserMediaPermissionRequest(origin, permissionRequest); 209 } 210 211 static void checkUserMediaPermissionForOrigin(WKPageRef, WKFrameRef, WKSecurityOriginRef origin, WKUserMediaPermissionCheckRef checkRequest, const void*) 212 { 213 TestController::singleton().handleCheckOfUserMediaPermissionForOrigin(origin, checkRequest); 207 214 } 208 215 … … 278 285 0, // runJavaScriptAlert 279 286 0, // runJavaScriptConfirm 280 0 // runJavaScriptPrompt 287 0, // runJavaScriptPrompt 288 checkUserMediaPermissionForOrigin, 281 289 }; 282 290 WKPageSetPageUIClient(newPage, &otherPageUIClient.base); … … 541 549 0, // runJavaScriptConfirm 542 550 0, // runJavaScriptPrompt 551 checkUserMediaPermissionForOrigin, 543 552 }; 544 553 WKPageSetPageUIClient(m_mainWebView->page(), &pageUIClient.base); … … 745 754 // Reset UserMedia permissions. 746 755 m_userMediaPermissionRequests.clear(); 756 m_userMediaOriginPermissions = nullptr; 747 757 m_isUserMediaPermissionSet = false; 748 758 m_isUserMediaPermissionAllowed = false; … … 1643 1653 } 1644 1654 1645 void TestController::handleUserMediaPermissionRequest(WKUserMediaPermissionRequestRef userMediaPermissionRequest) 1646 { 1647 m_userMediaPermissionRequests.append(userMediaPermissionRequest); 1655 static WKStringRef originUserVisibleName(WKSecurityOriginRef origin) 1656 { 1657 std::string host = toSTD(adoptWK(WKSecurityOriginCopyHost(origin))).c_str(); 1658 std::string protocol = toSTD(adoptWK(WKSecurityOriginCopyProtocol(origin))).c_str(); 1659 unsigned short port = WKSecurityOriginGetPort(origin); 1660 1661 String userVisibleName; 1662 if (port) 1663 userVisibleName = String::format("%s://%s:%d", protocol.c_str(), host.c_str(), port); 1664 else 1665 userVisibleName = String::format("%s://%s", protocol.c_str(), host.c_str()); 1666 1667 return WKStringCreateWithUTF8CString(userVisibleName.utf8().data()); 1668 } 1669 1670 void TestController::handleCheckOfUserMediaPermissionForOrigin(WKSecurityOriginRef origin, const WKUserMediaPermissionCheckRef& checkRequest) 1671 { 1672 bool allowed = false; 1673 1674 if (m_userMediaOriginPermissions) { 1675 WKRetainPtr<WKStringRef> originString = originUserVisibleName(origin); 1676 WKBooleanRef value = static_cast<WKBooleanRef>(WKDictionaryGetItemForKey(m_userMediaOriginPermissions.get(), originString.get())); 1677 if (WKGetTypeID(value) == WKBooleanGetTypeID()) 1678 allowed = WKBooleanGetValue(value); 1679 } 1680 1681 WKUserMediaPermissionCheckSetHasPersistentPermission(checkRequest, allowed); 1682 } 1683 1684 void TestController::handleUserMediaPermissionRequest(WKSecurityOriginRef origin, WKUserMediaPermissionRequestRef request) 1685 { 1686 m_userMediaPermissionRequests.append(std::make_pair(origin, request)); 1648 1687 decidePolicyForUserMediaPermissionRequestIfPossible(); 1649 1688 } … … 1654 1693 return; 1655 1694 1656 for (auto& request : m_userMediaPermissionRequests) { 1657 WKRetainPtr<WKArrayRef> audioDeviceUIDs = WKUserMediaPermissionRequestAudioDeviceUIDs(request.get()); 1658 WKRetainPtr<WKArrayRef> videoDeviceUIDs = WKUserMediaPermissionRequestVideoDeviceUIDs(request.get()); 1695 for (auto& pair : m_userMediaPermissionRequests) { 1696 auto origin = pair.first.get(); 1697 auto request = pair.second.get(); 1698 WKRetainPtr<WKArrayRef> audioDeviceUIDs = WKUserMediaPermissionRequestAudioDeviceUIDs(request); 1699 WKRetainPtr<WKArrayRef> videoDeviceUIDs = WKUserMediaPermissionRequestVideoDeviceUIDs(request); 1700 1701 WKRetainPtr<WKStringRef> originString = adoptWK(originUserVisibleName(origin)); 1702 if (!m_userMediaOriginPermissions) 1703 m_userMediaOriginPermissions = adoptWK(WKMutableDictionaryCreate()); 1704 WKRetainPtr<WKBooleanRef> allowed = adoptWK(WKBooleanCreate(m_isUserMediaPermissionAllowed)); 1705 WKDictionarySetItem(m_userMediaOriginPermissions.get(), originString.get(), allowed.get()); 1659 1706 1660 1707 if (m_isUserMediaPermissionAllowed && (WKArrayGetSize(videoDeviceUIDs.get()) || WKArrayGetSize(audioDeviceUIDs.get()))) { … … 1671 1718 audioDeviceUID = WKStringCreateWithUTF8CString(""); 1672 1719 1673 WKUserMediaPermissionRequestAllow(request .get(), audioDeviceUID.get(), videoDeviceUID.get());1720 WKUserMediaPermissionRequestAllow(request, audioDeviceUID.get(), videoDeviceUID.get()); 1674 1721 1675 1722 } else 1676 WKUserMediaPermissionRequestDeny(request .get());1723 WKUserMediaPermissionRequestDeny(request); 1677 1724 } 1678 1725 m_userMediaPermissionRequests.clear(); -
trunk/Tools/WebKitTestRunner/TestController.h
r190335 r193944 33 33 #include <string> 34 34 #include <vector> 35 #include <wtf/HashMap.h> 35 36 #include <wtf/Vector.h> 36 37 … … 96 97 // MediaStream. 97 98 void setUserMediaPermission(bool); 98 void handleUserMediaPermissionRequest(WKUserMediaPermissionRequestRef); 99 void handleUserMediaPermissionRequest(WKSecurityOriginRef, WKUserMediaPermissionRequestRef); 100 void handleCheckOfUserMediaPermissionForOrigin(WKSecurityOriginRef, const WKUserMediaPermissionCheckRef&); 99 101 100 102 // Policy delegate. … … 283 285 bool m_isGeolocationPermissionAllowed; 284 286 285 Vector<WKRetainPtr<WKUserMediaPermissionRequestRef>> m_userMediaPermissionRequests; 287 WKRetainPtr<WKMutableDictionaryRef> m_userMediaOriginPermissions; 288 289 typedef Vector<std::pair<WKRetainPtr<WKSecurityOriginRef>, WKRetainPtr<WKUserMediaPermissionRequestRef>>> PermissionRequestList; 290 PermissionRequestList m_userMediaPermissionRequests; 291 286 292 bool m_isUserMediaPermissionSet; 287 293 bool m_isUserMediaPermissionAllowed;
Note:
See TracChangeset
for help on using the changeset viewer.