Diff
Modified: trunk/LayoutTests/ChangeLog (217080 => 217081)
--- trunk/LayoutTests/ChangeLog 2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/LayoutTests/ChangeLog 2017-05-19 01:16:47 UTC (rev 217081)
@@ -1,3 +1,15 @@
+2017-05-18 Eric Carlson <[email protected]>
+
+ [MediaStream] do not cache gUM permissions
+ https://bugs.webkit.org/show_bug.cgi?id=172245
+
+ Reviewed by Youenn Fablet.
+
+ * fast/mediastream/MediaDevices-getUserMedia-expected.txt: Updated.
+ * fast/mediastream/MediaDevices-getUserMedia.html:
+ * http/tests/media/media-stream/get-user-media-prompt-expected.txt:
+ * http/tests/media/media-stream/get-user-media-prompt.html:
+
2017-05-18 Zalan Bujtas <[email protected]>
Redundant ellipsis box triggers ASSERT_WITH_SECURITY_IMPLICATION in InlineBox::parent().
Modified: trunk/LayoutTests/fast/mediastream/MediaDevices-getUserMedia-expected.txt (217080 => 217081)
--- trunk/LayoutTests/fast/mediastream/MediaDevices-getUserMedia-expected.txt 2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/LayoutTests/fast/mediastream/MediaDevices-getUserMedia-expected.txt 2017-05-19 01:16:47 UTC (rev 217081)
@@ -49,9 +49,6 @@
PASS navigator.mediaDevices.getUserMedia({audio:false, video:videoConstraints}).then(invalidGotStream).catch(errorWithConstraints2) did not throw exception.
PASS Error callback called.
PASS errorArg.name is "Error"
-
-PASS navigator.mediaDevices.getUserMedia({audio:true}).then(validStream).catch(error1); did not throw exception.
-PASS Stream generated because page has already authenticated.
PASS successfullyParsed is true
TEST COMPLETE
Modified: trunk/LayoutTests/fast/mediastream/MediaDevices-getUserMedia.html (217080 => 217081)
--- trunk/LayoutTests/fast/mediastream/MediaDevices-getUserMedia.html 2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/LayoutTests/fast/mediastream/MediaDevices-getUserMedia.html 2017-05-19 01:16:47 UTC (rev 217081)
@@ -27,11 +27,6 @@
finishJSTest();
}
- function validStream(e) {
- testPassed("Stream generated because page has already authenticated.");
- finishJSTest();
- }
-
function error1(e) {
testFailed(`Error callback called, error = ${e}`);
finishJSTest();
@@ -42,12 +37,7 @@
errorArg = e;
shouldBeEqualToString("errorArg.name", "Error");
- // We tell LayoutTestRunner to deny user media requests but expect the gUM call to succeed
- // as it should not see the request because the current browsing context has already
- // successfully created a stream for the mock audio device.
- setUserMediaPermission(false);
- debug("");
- shouldNotThrow("navigator.mediaDevices.getUserMedia({audio:true}).then(validStream).catch(error1);");
+ finishJSTest();
}
function errorWithConstraints1() {
Modified: trunk/LayoutTests/http/tests/media/media-stream/get-user-media-prompt-expected.txt (217080 => 217081)
--- trunk/LayoutTests/http/tests/media/media-stream/get-user-media-prompt-expected.txt 2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/LayoutTests/http/tests/media/media-stream/get-user-media-prompt-expected.txt 2017-05-19 01:16:47 UTC (rev 217081)
@@ -17,9 +17,9 @@
PASS stream.getAudioTracks().length is 0
PASS stream.getVideoTracks().length is 1
-** Request a stream with video and audio, the user should be not prompted **
+** Request a stream with video and audio, the user should be prompted again **
PASS navigator.mediaDevices.getUserMedia({audio:true, video:true}).then(gotStream3); did not throw exception.
-PASS numberOfTimesGetUserMediaHasBeenCalled() is 2
+PASS numberOfTimesGetUserMediaHasBeenCalled() is 3
PASS stream.getAudioTracks().length is 1
PASS stream.getVideoTracks().length is 1
Modified: trunk/LayoutTests/http/tests/media/media-stream/get-user-media-prompt.html (217080 => 217081)
--- trunk/LayoutTests/http/tests/media/media-stream/get-user-media-prompt.html 2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/LayoutTests/http/tests/media/media-stream/get-user-media-prompt.html 2017-05-19 01:16:47 UTC (rev 217081)
@@ -15,7 +15,7 @@
function gotStream3(s)
{
stream = s;
- shouldBe("numberOfTimesGetUserMediaHasBeenCalled()", "2");
+ shouldBe("numberOfTimesGetUserMediaHasBeenCalled()", "3");
shouldBe("stream.getAudioTracks().length", "1");
shouldBe("stream.getVideoTracks().length", "1");
@@ -30,7 +30,7 @@
shouldBe("stream.getAudioTracks().length", "0");
shouldBe("stream.getVideoTracks().length", "1");
- debug("<br>** Request a stream with video and audio, the user should be not prompted **");
+ debug("<br>** Request a stream with video and audio, the user should be prompted again **");
shouldNotThrow("navigator.mediaDevices.getUserMedia({audio:true, video:true}).then(gotStream3);");
}
Modified: trunk/Source/WebCore/ChangeLog (217080 => 217081)
--- trunk/Source/WebCore/ChangeLog 2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/Source/WebCore/ChangeLog 2017-05-19 01:16:47 UTC (rev 217081)
@@ -1,3 +1,16 @@
+2017-05-18 Eric Carlson <[email protected]>
+
+ [MediaStream] do not cache gUM permissions
+ https://bugs.webkit.org/show_bug.cgi?id=172245
+
+ Reviewed by Youenn Fablet.
+
+ No new tests, updated fast/mediastream/MediaDevices-getUserMedia.html.
+
+ * platform/mediastream/RealtimeMediaSourceCenter.cpp:
+ (WebCore::RealtimeMediaSourceCenter::validateRequestConstraints): Add salt parameter.
+ * platform/mediastream/RealtimeMediaSourceCenter.h:
+
2017-05-18 Zalan Bujtas <[email protected]>
Redundant ellipsis box triggers ASSERT_WITH_SECURITY_IMPLICATION in InlineBox::parent().
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp (217080 => 217081)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp 2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp 2017-05-19 01:16:47 UTC (rev 217081)
@@ -206,7 +206,7 @@
it.value();
}
-void RealtimeMediaSourceCenter::validateRequestConstraints(ValidConstraintsHandler&& validHandler, InvalidConstraintsHandler&& invalidHandler, const MediaConstraints& audioConstraints, const MediaConstraints& videoConstraints)
+void RealtimeMediaSourceCenter::validateRequestConstraints(ValidConstraintsHandler&& validHandler, InvalidConstraintsHandler&& invalidHandler, const MediaConstraints& audioConstraints, const MediaConstraints& videoConstraints, String&& deviceIdentifierHashSalt)
{
struct DeviceInfo {
unsigned fitnessScore;
@@ -265,7 +265,7 @@
videoSourceIds.uncheckedAppend(WTFMove(info.id));
}
- validHandler(WTFMove(audioSourceIds), WTFMove(videoSourceIds));
+ validHandler(WTFMove(audioSourceIds), WTFMove(videoSourceIds), WTFMove(deviceIdentifierHashSalt));
}
void RealtimeMediaSourceCenter::setVisibility(bool isVisible)
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h (217080 => 217081)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h 2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h 2017-05-19 01:16:47 UTC (rev 217081)
@@ -58,9 +58,9 @@
WEBCORE_EXPORT static RealtimeMediaSourceCenter& singleton();
static void setSharedStreamCenterOverride(RealtimeMediaSourceCenter*);
- using ValidConstraintsHandler = WTF::Function<void(Vector<String>&& audioDeviceUIDs, Vector<String>&& videoDeviceUIDs)>;
+ using ValidConstraintsHandler = WTF::Function<void(Vector<String>&& audioDeviceUIDs, Vector<String>&& videoDeviceUIDs, String&&)>;
using InvalidConstraintsHandler = WTF::Function<void(const String& invalidConstraint)>;
- virtual void validateRequestConstraints(ValidConstraintsHandler&&, InvalidConstraintsHandler&&, const MediaConstraints& audioConstraints, const MediaConstraints& videoConstraints);
+ virtual void validateRequestConstraints(ValidConstraintsHandler&&, InvalidConstraintsHandler&&, const MediaConstraints& audioConstraints, const MediaConstraints& videoConstraints, String&&);
using NewMediaStreamHandler = std::function<void(RefPtr<MediaStreamPrivate>&&)>;
virtual void createMediaStream(NewMediaStreamHandler&&, const String& audioDeviceID, const String& videoDeviceID, const MediaConstraints* audioConstraints, const MediaConstraints* videoConstraints) = 0;
Modified: trunk/Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp (217080 => 217081)
--- trunk/Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp 2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp 2017-05-19 01:16:47 UTC (rev 217081)
@@ -77,7 +77,7 @@
{
}
-void RealtimeMediaSourceCenterOwr::validateRequestConstraints(ValidConstraintsHandler&& validHandler, InvalidConstraintsHandler&& invalidHandler, const MediaConstraints& audioConstraints, const MediaConstraints& videoConstraints)
+void RealtimeMediaSourceCenterOwr::validateRequestConstraints(ValidConstraintsHandler&& validHandler, InvalidConstraintsHandler&& invalidHandler, const MediaConstraints& audioConstraints, const MediaConstraints& videoConstraints, String&& deviceIdentifierHashSalt)
{
m_validConstraintsHandler = WTFMove(validHandler);
m_invalidConstraintsHandler = WTFMove(invalidHandler);
@@ -94,7 +94,7 @@
if (videoConstraints.isValid)
videoSources.append(String("video"));
- m_validConstraintsHandler(WTFMove(audioSources), WTFMove(videoSources));
+ m_validConstraintsHandler(WTFMove(audioSources), WTFMove(videoSources), WTFMove(deviceIdentifierHashSalt));
m_validConstraintsHandler = nullptr;
m_invalidConstraintsHandler = nullptr;
}
Modified: trunk/Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h (217080 => 217081)
--- trunk/Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h 2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h 2017-05-19 01:16:47 UTC (rev 217081)
@@ -53,7 +53,7 @@
RealtimeMediaSourceCenterOwr();
~RealtimeMediaSourceCenterOwr();
- void validateRequestConstraints(ValidConstraintsHandler&& validHandler, InvalidConstraintsHandler&& invalidHandler, const MediaConstraints& audioConstraints, const MediaConstraints& videoConstraints) final;
+ void validateRequestConstraints(ValidConstraintsHandler&& validHandler, InvalidConstraintsHandler&& invalidHandler, const MediaConstraints& audioConstraints, const MediaConstraints& videoConstraints, String&&) final;
void createMediaStream(NewMediaStreamHandler&&, const String& audioDeviceID, const String& videoDeviceID, const MediaConstraints* videoConstraints, const MediaConstraints* audioConstraints) final;
Modified: trunk/Source/WebKit2/ChangeLog (217080 => 217081)
--- trunk/Source/WebKit2/ChangeLog 2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/Source/WebKit2/ChangeLog 2017-05-19 01:16:47 UTC (rev 217081)
@@ -1,3 +1,31 @@
+2017-05-18 Eric Carlson <[email protected]>
+
+ [MediaStream] do not cache gUM permissions
+ https://bugs.webkit.org/show_bug.cgi?id=172245
+
+ Reviewed by Youenn Fablet.
+
+ * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
+ (WebKit::UserMediaPermissionRequestManagerProxy::invalidatePendingRequests):
+ (WebKit::UserMediaPermissionRequestManagerProxy::createRequest):
+ (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasDenied):
+ (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted):
+ (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
+ (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):
+ (WebKit::FrameAuthorizationState::FrameAuthorizationState): Deleted.
+ (WebKit::FrameAuthorizationState::hasPermissionToUseCaptureDevice): Deleted.
+ (WebKit::FrameAuthorizationState::setHasPermissionToUseCaptureDevice): Deleted.
+ (WebKit::FrameAuthorizationState::ensureSecurityOriginsAreEqual): Deleted.
+ (WebKit::UserMediaPermissionRequestManagerProxy::stateForRequest): Deleted.
+ * UIProcess/UserMediaPermissionRequestManagerProxy.h:
+ (WebKit::FrameAuthorizationState::setDeviceIdentifierHashSalt): Deleted.
+ (WebKit::FrameAuthorizationState::deviceIdentifierHashSalt): Deleted.
+ * UIProcess/UserMediaPermissionRequestProxy.cpp:
+ (WebKit::UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy):
+ * UIProcess/UserMediaPermissionRequestProxy.h:
+ (WebKit::UserMediaPermissionRequestProxy::create):
+ (WebKit::UserMediaPermissionRequestProxy::deviceIdentifierHashSalt):
+
2017-05-18 Tim Horton <[email protected]>
Data interaction conclusion snapshot has too much margin
Modified: trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp (217080 => 217081)
--- trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp 2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp 2017-05-19 01:16:47 UTC (rev 217081)
@@ -40,56 +40,6 @@
namespace WebKit {
-FrameAuthorizationState::FrameAuthorizationState(Ref<SecurityOrigin>&& userMediaDocumentSecurityOrigin, Ref<SecurityOrigin>&& topLevelDocumentSecurityOrigin)
- : m_userMediaDocumentSecurityOrigin(WTFMove(userMediaDocumentSecurityOrigin))
- , m_topLevelDocumentSecurityOrigin(WTFMove(topLevelDocumentSecurityOrigin))
-{
-}
-
-bool FrameAuthorizationState::hasPermissionToUseCaptureDevice(const String& deviceUID)
-{
- return m_authorizedDeviceUIDs.find(deviceUID) != notFound;
-}
-
-void FrameAuthorizationState::setHasPermissionToUseCaptureDevice(const String& deviceUID, bool hasPermission)
-{
- if (deviceUID.isEmpty())
- return;
-
- size_t index = m_authorizedDeviceUIDs.find(deviceUID);
- if (hasPermission == (index != notFound))
- return;
-
- if (hasPermission)
- m_authorizedDeviceUIDs.append(deviceUID);
- else
- m_authorizedDeviceUIDs.remove(index);
-}
-
-void FrameAuthorizationState::ensureSecurityOriginsAreEqual(WebCore::SecurityOrigin& userMediaDocumentSecurityOrigin, WebCore::SecurityOrigin& topLevelDocumentSecurityOrigin)
-{
- if (m_userMediaDocumentSecurityOrigin->equal(&userMediaDocumentSecurityOrigin) && m_topLevelDocumentSecurityOrigin->equal(&topLevelDocumentSecurityOrigin))
- return;
-
- m_userMediaDocumentSecurityOrigin = userMediaDocumentSecurityOrigin;
- m_topLevelDocumentSecurityOrigin = topLevelDocumentSecurityOrigin;
- m_authorizedDeviceUIDs.clear();
- m_deviceIdentifierHashSalt = emptyString();
-}
-
-template <typename RequestType>
-FrameAuthorizationState& UserMediaPermissionRequestManagerProxy::stateForRequest(RequestType& request)
-{
- auto& state = m_frameStates.add(request.frameID(), nullptr).iterator->value;
- if (state) {
- state->ensureSecurityOriginsAreEqual(request.userMediaDocumentSecurityOrigin(), request.topLevelDocumentSecurityOrigin());
- return *state;
- }
-
- state = std::make_unique<FrameAuthorizationState>(request.userMediaDocumentSecurityOrigin(), request.topLevelDocumentSecurityOrigin());
- return *state;
-}
-
UserMediaPermissionRequestManagerProxy::UserMediaPermissionRequestManagerProxy(WebPageProxy& page)
: m_page(page)
, m_rejectionTimer(*this, &UserMediaPermissionRequestManagerProxy::rejectionTimerFired)
@@ -116,8 +66,6 @@
for (auto& request : m_pendingDeviceRequests.values())
request->invalidate();
m_pendingDeviceRequests.clear();
-
- m_frameStates.clear();
}
void UserMediaPermissionRequestManagerProxy::stopCapture()
@@ -131,9 +79,9 @@
invalidatePendingRequests();
}
-Ref<UserMediaPermissionRequestProxy> UserMediaPermissionRequestManagerProxy::createRequest(uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<String>&& audioDeviceUIDs, Vector<String>&& videoDeviceUIDs)
+Ref<UserMediaPermissionRequestProxy> UserMediaPermissionRequestManagerProxy::createRequest(uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<String>&& audioDeviceUIDs, Vector<String>&& videoDeviceUIDs, String&& deviceIDHashSalt)
{
- auto request = UserMediaPermissionRequestProxy::create(*this, userMediaID, frameID, WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin), WTFMove(audioDeviceUIDs), WTFMove(videoDeviceUIDs));
+ auto request = UserMediaPermissionRequestProxy::create(*this, userMediaID, frameID, WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin), WTFMove(audioDeviceUIDs), WTFMove(videoDeviceUIDs), WTFMove(deviceIDHashSalt));
m_pendingUserMediaRequests.add(userMediaID, request.ptr());
return request;
}
@@ -179,12 +127,6 @@
if (!request)
return;
- auto& frameState = stateForRequest(*request);
- for (const auto& deviceUID : request->videoDeviceUIDs())
- frameState.setHasPermissionToUseCaptureDevice(deviceUID, false);
- for (const auto& deviceUID : request->audioDeviceUIDs())
- frameState.setHasPermissionToUseCaptureDevice(deviceUID, false);
-
denyRequest(userMediaID, reason, emptyString());
}
@@ -212,15 +154,8 @@
if (!request)
return;
- auto& frameState = stateForRequest(*request);
- if (!audioDeviceUID.isEmpty())
- frameState.setHasPermissionToUseCaptureDevice(audioDeviceUID, true);
- if (!videoDeviceUID.isEmpty())
- frameState.setHasPermissionToUseCaptureDevice(videoDeviceUID, true);
-
UserMediaProcessManager::singleton().willCreateMediaStream(*this, !audioDeviceUID.isEmpty(), !videoDeviceUID.isEmpty());
-
- m_page.process().send(Messages::WebPage::UserMediaAccessWasGranted(userMediaID, audioDeviceUID, videoDeviceUID, frameState.deviceIdentifierHashSalt()), m_page.pageID());
+ m_page.process().send(Messages::WebPage::UserMediaAccessWasGranted(userMediaID, audioDeviceUID, videoDeviceUID, request->deviceIdentifierHashSalt()), m_page.pageID());
#else
UNUSED_PARAM(userMediaID);
UNUSED_PARAM(audioDeviceUID);
@@ -248,6 +183,12 @@
void UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame(uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, const WebCore::MediaConstraints& audioConstraints, const WebCore::MediaConstraints& videoConstraints)
{
#if ENABLE(MEDIA_STREAM)
+ if (!UserMediaProcessManager::singleton().captureEnabled()) {
+ m_pendingRejections.append(userMediaID);
+ scheduleNextRejection();
+ return;
+ }
+
WebCore::RealtimeMediaSourceCenter::InvalidConstraintsHandler invalidHandler = [this, userMediaID](const String& invalidConstraint) {
if (!m_page.isValid())
return;
@@ -255,7 +196,7 @@
denyRequest(userMediaID, UserMediaPermissionRequestProxy::UserMediaAccessDenialReason::InvalidConstraint, invalidConstraint);
};
- WebCore::RealtimeMediaSourceCenter::ValidConstraintsHandler validHandler = [this, userMediaID, frameID, userMediaDocumentOrigin = userMediaDocumentOrigin.copyRef(), topLevelDocumentOrigin = topLevelDocumentOrigin.copyRef()](Vector<String>&& audioDeviceUIDs, Vector<String>&& videoDeviceUIDs) mutable {
+ WebCore::RealtimeMediaSourceCenter::ValidConstraintsHandler validHandler = [this, userMediaID, frameID, userMediaDocumentOrigin = userMediaDocumentOrigin.copyRef(), topLevelDocumentOrigin = topLevelDocumentOrigin.copyRef()](Vector<String>&& audioDeviceUIDs, Vector<String>&& videoDeviceUIDs, String&& deviceIdentifierHashSalt) mutable {
if (!m_page.isValid())
return;
@@ -264,44 +205,14 @@
return;
}
- bool authorizedForAudio = false;
- bool authorizedForVideo = false;
-
auto userMediaOrigin = API::SecurityOrigin::create(userMediaDocumentOrigin.get());
auto topLevelOrigin = API::SecurityOrigin::create(topLevelDocumentOrigin.get());
-
- auto request = createRequest(userMediaID, frameID, WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin), WTFMove(audioDeviceUIDs), WTFMove(videoDeviceUIDs));
+ auto request = createRequest(userMediaID, frameID, WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin), WTFMove(audioDeviceUIDs), WTFMove(videoDeviceUIDs), WTFMove(deviceIdentifierHashSalt));
- auto& frameState = stateForRequest(request.get());
- for (const auto& deviceUID : request->audioDeviceUIDs()) {
- if (frameState.hasPermissionToUseCaptureDevice(deviceUID)) {
- authorizedForAudio = true;
- break;
- }
- }
- for (const auto& deviceUID : request->videoDeviceUIDs()) {
- if (frameState.hasPermissionToUseCaptureDevice(deviceUID)) {
- authorizedForVideo = true;
- break;
- }
- }
-
- if (authorizedForAudio == !request->audioDeviceUIDs().isEmpty() && authorizedForVideo == !request->videoDeviceUIDs().isEmpty()) {
- userMediaAccessWasGranted(userMediaID, authorizedForAudio ? request->audioDeviceUIDs()[0] : emptyString(), authorizedForVideo ? request->videoDeviceUIDs()[0] : emptyString());
- return;
- }
-
if (!m_page.uiClient().decidePolicyForUserMediaPermissionRequest(m_page, *m_page.process().webFrame(frameID), WTFMove(userMediaOrigin), WTFMove(topLevelOrigin), request.get()))
userMediaAccessWasDenied(userMediaID, UserMediaPermissionRequestProxy::UserMediaAccessDenialReason::UserMediaDisabled);
-
};
- if (!UserMediaProcessManager::singleton().captureEnabled()) {
- m_pendingRejections.append(userMediaID);
- scheduleNextRejection();
- return;
- }
-
auto haveDeviceSaltHandler = [this, userMediaID, validHandler = WTFMove(validHandler), invalidHandler = WTFMove(invalidHandler), audioConstraints = WebCore::MediaConstraints(audioConstraints), videoConstraints = WebCore::MediaConstraints(videoConstraints)](uint64_t userMediaID, String&& deviceIdentifierHashSalt, bool originHasPersistentAccess) mutable {
auto request = m_pendingDeviceRequests.take(userMediaID);
@@ -314,12 +225,9 @@
audioConstraints.deviceIDHashSalt = deviceIdentifierHashSalt;
videoConstraints.deviceIDHashSalt = deviceIdentifierHashSalt;
- auto& frameState = stateForRequest(request.value().get());
- frameState.setDeviceIdentifierHashSalt(WTFMove(deviceIdentifierHashSalt));
-
syncWithWebCorePrefs();
- RealtimeMediaSourceCenter::singleton().validateRequestConstraints(WTFMove(validHandler), WTFMove(invalidHandler), audioConstraints, videoConstraints);
+ RealtimeMediaSourceCenter::singleton().validateRequestConstraints(WTFMove(validHandler), WTFMove(invalidHandler), audioConstraints, videoConstraints, WTFMove(deviceIdentifierHashSalt));
};
getUserMediaPermissionInfo(userMediaID, frameID, WTFMove(haveDeviceSaltHandler), WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin));
@@ -358,9 +266,6 @@
if (!m_page.isValid())
return;
- auto& frameState = stateForRequest(request.value().get());
- frameState.setDeviceIdentifierHashSalt(String(deviceIdentifierHashSalt));
-
syncWithWebCorePrefs();
auto deviceInfo = RealtimeMediaSourceCenter::singleton().getMediaStreamDevices();
m_page.process().send(Messages::WebPage::DidCompleteMediaDeviceEnumeration(userMediaID, deviceInfo, deviceIdentifierHashSalt, originHasPersistentAccess), m_page.pageID());
Modified: trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.h (217080 => 217081)
--- trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.h 2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.h 2017-05-19 01:16:47 UTC (rev 217081)
@@ -36,25 +36,6 @@
class WebPageProxy;
-class FrameAuthorizationState {
-public:
- FrameAuthorizationState(Ref<WebCore::SecurityOrigin>&& userMediaDocumentSecurityOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentSecurityOrigin);
-
- bool hasPermissionToUseCaptureDevice(const String& deviceUID);
- void setHasPermissionToUseCaptureDevice(const String&, bool);
-
- void ensureSecurityOriginsAreEqual(WebCore::SecurityOrigin& userMediaDocumentSecurityOrigin, WebCore::SecurityOrigin& topLevelDocumentSecurityOrigin);
-
- void setDeviceIdentifierHashSalt(String&& hashSalt) { m_deviceIdentifierHashSalt = hashSalt; }
- const String& deviceIdentifierHashSalt() const { return m_deviceIdentifierHashSalt; }
-
-private:
- Ref<WebCore::SecurityOrigin> m_userMediaDocumentSecurityOrigin;
- Ref<WebCore::SecurityOrigin> m_topLevelDocumentSecurityOrigin;
- Vector<String> m_authorizedDeviceUIDs;
- String m_deviceIdentifierHashSalt;
-};
-
class UserMediaPermissionRequestManagerProxy {
public:
explicit UserMediaPermissionRequestManagerProxy(WebPageProxy&);
@@ -69,9 +50,6 @@
void userMediaAccessWasGranted(uint64_t, const String& audioDeviceUID, const String& videoDeviceUID);
void userMediaAccessWasDenied(uint64_t, UserMediaPermissionRequestProxy::UserMediaAccessDenialReason);
- template <typename RequestType>
- FrameAuthorizationState& stateForRequest(RequestType&);
-
void enumerateMediaDevicesForFrame(uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin);
void stopCapture();
@@ -83,7 +61,7 @@
void endedCaptureSession();
private:
- Ref<UserMediaPermissionRequestProxy> createRequest(uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<String>&& audioDeviceUIDs, Vector<String>&& videoDeviceUIDs);
+ Ref<UserMediaPermissionRequestProxy> createRequest(uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<String>&& audioDeviceUIDs, Vector<String>&& videoDeviceUIDs, String&&);
void denyRequest(uint64_t userMediaID, UserMediaPermissionRequestProxy::UserMediaAccessDenialReason, const String& invalidConstraint);
void getUserMediaPermissionInfo(uint64_t userMediaID, uint64_t frameID, UserMediaPermissionCheckProxy::CompletionHandler&&, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin);
@@ -92,7 +70,6 @@
HashMap<uint64_t, RefPtr<UserMediaPermissionRequestProxy>> m_pendingUserMediaRequests;
HashMap<uint64_t, Ref<UserMediaPermissionCheckProxy>> m_pendingDeviceRequests;
- HashMap<uint64_t, std::unique_ptr<FrameAuthorizationState>> m_frameStates;
WebPageProxy& m_page;
Modified: trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.cpp (217080 => 217081)
--- trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.cpp 2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.cpp 2017-05-19 01:16:47 UTC (rev 217081)
@@ -30,7 +30,7 @@
namespace WebKit {
-UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy(UserMediaPermissionRequestManagerProxy& manager, uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<String>&& audioDeviceUIDs, Vector<String>&& videoDeviceUIDs)
+UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy(UserMediaPermissionRequestManagerProxy& manager, uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<String>&& audioDeviceUIDs, Vector<String>&& videoDeviceUIDs, String&& deviceIDHashSalt)
: m_manager(&manager)
, m_userMediaID(userMediaID)
, m_frameID(frameID)
@@ -38,6 +38,7 @@
, m_topLevelDocumentSecurityOrigin(WTFMove(topLevelDocumentOrigin))
, m_videoDeviceUIDs(WTFMove(videoDeviceUIDs))
, m_audioDeviceUIDs(WTFMove(audioDeviceUIDs))
+ , m_deviceIdentifierHashSalt(WTFMove(deviceIDHashSalt))
{
}
Modified: trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.h (217080 => 217081)
--- trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.h 2017-05-19 00:47:59 UTC (rev 217080)
+++ trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestProxy.h 2017-05-19 01:16:47 UTC (rev 217081)
@@ -33,9 +33,9 @@
class UserMediaPermissionRequestProxy : public API::ObjectImpl<API::Object::Type::UserMediaPermissionRequest> {
public:
- static Ref<UserMediaPermissionRequestProxy> create(UserMediaPermissionRequestManagerProxy& manager, uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<String>&& videoDeviceUIDs, Vector<String>&& audioDeviceUIDs)
+ static Ref<UserMediaPermissionRequestProxy> create(UserMediaPermissionRequestManagerProxy& manager, uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<String>&& videoDeviceUIDs, Vector<String>&& audioDeviceUIDs, String&& deviceIDHashSalt)
{
- return adoptRef(*new UserMediaPermissionRequestProxy(manager, userMediaID, frameID, WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin), WTFMove(videoDeviceUIDs), WTFMove(audioDeviceUIDs)));
+ return adoptRef(*new UserMediaPermissionRequestProxy(manager, userMediaID, frameID, WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin), WTFMove(videoDeviceUIDs), WTFMove(audioDeviceUIDs), WTFMove(deviceIDHashSalt)));
}
void allow(const String& videoDeviceUID, const String& audioDeviceUID);
@@ -55,8 +55,10 @@
WebCore::SecurityOrigin& userMediaDocumentSecurityOrigin() { return m_userMediaDocumentSecurityOrigin.get(); }
WebCore::SecurityOrigin& topLevelDocumentSecurityOrigin() { return m_topLevelDocumentSecurityOrigin.get(); }
+ const String& deviceIdentifierHashSalt() const { return m_deviceIdentifierHashSalt; }
+
private:
- UserMediaPermissionRequestProxy(UserMediaPermissionRequestManagerProxy&, uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<String>&& videoDeviceUIDs, Vector<String>&& audioDeviceUIDs);
+ UserMediaPermissionRequestProxy(UserMediaPermissionRequestManagerProxy&, uint64_t userMediaID, uint64_t frameID, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin, Vector<String>&& videoDeviceUIDs, Vector<String>&& audioDeviceUIDs, String&&);
UserMediaPermissionRequestManagerProxy* m_manager;
uint64_t m_userMediaID;
@@ -65,6 +67,7 @@
Ref<WebCore::SecurityOrigin> m_topLevelDocumentSecurityOrigin;
Vector<String> m_videoDeviceUIDs;
Vector<String> m_audioDeviceUIDs;
+ String m_deviceIdentifierHashSalt;
};
} // namespace WebKit