Diff
Modified: trunk/LayoutTests/ChangeLog (239005 => 239006)
--- trunk/LayoutTests/ChangeLog 2018-12-08 03:10:39 UTC (rev 239005)
+++ trunk/LayoutTests/ChangeLog 2018-12-08 03:11:36 UTC (rev 239006)
@@ -1,3 +1,16 @@
+2018-12-07 Eric Carlson <[email protected]>
+
+ [MediaStream] 'devicechange' event should not fire in frames that can't access capture devices
+ https://bugs.webkit.org/show_bug.cgi?id=192511
+ <rdar://problem/46562063>
+
+ Reviewed by Youenn Fablet.
+
+ * fast/mediastream/device-change-event.html: Fix bogus title.
+ * http/tests/media/media-stream/device-change-event-in-iframe-expected.txt: Added.
+ * http/tests/media/media-stream/device-change-event-in-iframe.html: Added.
+ * http/tests/media/media-stream/resources/device-change-iframe.html: Added.
+
2018-12-07 Truitt Savell <[email protected]>
[ MacOS Debug ] Layout Test webgl/2.0.0/conformance2/textures/misc/tex-unpack-params.html is flaky timeout
Modified: trunk/LayoutTests/fast/mediastream/device-change-event.html (239005 => 239006)
--- trunk/LayoutTests/fast/mediastream/device-change-event.html 2018-12-08 03:10:39 UTC (rev 239005)
+++ trunk/LayoutTests/fast/mediastream/device-change-event.html 2018-12-08 03:11:36 UTC (rev 239006)
@@ -2,7 +2,7 @@
<html>
<head>
<meta charset="utf-8">
- <title>Testing local audio capture playback causes "playing" event to fire</title>
+ <title>'devicechange' event tests</title>
<script src=""
<script src=""
<script>
Added: trunk/LayoutTests/http/tests/media/media-stream/device-change-event-in-iframe-expected.txt (0 => 239006)
--- trunk/LayoutTests/http/tests/media/media-stream/device-change-event-in-iframe-expected.txt (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-stream/device-change-event-in-iframe-expected.txt 2018-12-08 03:11:36 UTC (rev 239006)
@@ -0,0 +1,8 @@
+
+<iframe id=camera> got a 'devicechange' event
+<iframe id=main> got a 'devicechange' event
+<iframe id=microphone> got a 'devicechange' event
+<iframe id=same-origin> got a 'devicechange' event
+
+PASS: 'devicechange' only fired on frames with access to devices
+
Added: trunk/LayoutTests/http/tests/media/media-stream/device-change-event-in-iframe.html (0 => 239006)
--- trunk/LayoutTests/http/tests/media/media-stream/device-change-event-in-iframe.html (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-stream/device-change-event-in-iframe.html 2018-12-08 03:11:36 UTC (rev 239006)
@@ -0,0 +1,63 @@
+<!doctype html>
+<html>
+<script src=""
+<body _onload_="start()">
+ <iframe id="none"" src=""
+ <iframe id="camera" allow="camera" src=""
+ <iframe id="microphone" allow="camera" src=""
+ <iframe id="same-origin" src=""
+
+ <script>
+
+ if (window.testRunner) {
+ testRunner.dumpAsText();
+ testRunner.waitUntilDone();
+ testRunner.setUserMediaPermission(true);
+ }
+
+ let count = new Set();
+ let success = true;
+ let results = [];
+ function countEvent(id)
+ {
+ results.push(`<iframe id=${id}> got a 'devicechange' event`);
+ if (id == "none") {
+ result.innerHTML += `FAIL: <iframe id=${id}> got 'devicechange' event<br>`;
+ success = false;
+ } else
+ count.add(id);
+
+ if (count.size == 4) {
+ setTimeout(() => {
+ result.innerHTML = results.sort().join('<br>');
+ if (success)
+ result.innerHTML += "<br><br>PASS: 'devicechange' only fired on frames with access to devices<br>";
+ if (window.testRunner) {
+ testRunner.notifyDone();
+ testRunner.resetMockMediaDevices();
+ }
+ }, 500);
+ }
+ }
+
+ async function start()
+ {
+ await window.navigator.mediaDevices.getUserMedia({audio:true});
+ if (window.testRunner)
+ testRunner.addMockMicrophoneDevice("id4", "microphone 3");
+ }
+
+ window._onmessage_ = (event) => { countEvent(event.data); };
+ navigator.mediaDevices._ondevicechange_ = (event) => { countEvent('main'); };
+
+ Array.from(document.getElementsByTagName('iframe')).forEach(element => {
+ element._onload_ = (evt) => {
+ evt.target.contentWindow.postMessage(evt.target.id, '*');
+ }
+ });
+
+ </script>
+
+ <div id="result"></div>
+</body>
+</html>
Added: trunk/LayoutTests/http/tests/media/media-stream/resources/device-change-iframe.html (0 => 239006)
--- trunk/LayoutTests/http/tests/media/media-stream/resources/device-change-iframe.html (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-stream/resources/device-change-iframe.html 2018-12-08 03:11:36 UTC (rev 239006)
@@ -0,0 +1,12 @@
+<script>
+ let myID;
+ navigator.mediaDevices._ondevicechange_ = (event) => {
+ parent.postMessage(myID, '*');
+ result.innerHTML = `${myID} got 'devicechange' event`;
+ };
+ window.addEventListener("message", (event) => { myID = event.data; });
+</script>
+
+<div id='result'></div>
+
+
Modified: trunk/Source/WebCore/ChangeLog (239005 => 239006)
--- trunk/Source/WebCore/ChangeLog 2018-12-08 03:10:39 UTC (rev 239005)
+++ trunk/Source/WebCore/ChangeLog 2018-12-08 03:11:36 UTC (rev 239006)
@@ -1,5 +1,19 @@
2018-12-07 Eric Carlson <[email protected]>
+ [MediaStream] 'devicechange' event should not fire in frames that can't access capture devices
+ https://bugs.webkit.org/show_bug.cgi?id=192511
+ <rdar://problem/46562063>
+
+ Reviewed by Youenn Fablet.
+
+ Test: http/tests/media/media-stream/device-change-event-in-iframe.html
+
+ * Modules/mediastream/MediaDevices.cpp:
+ (WebCore::MediaDevices::addEventListener): Don't fire the event unless the document can
+ access a camera or microphone.
+
+2018-12-07 Eric Carlson <[email protected]>
+
[MediaStream] Address post-review comments after r238904
https://bugs.webkit.org/show_bug.cgi?id=192514
<rdar://problem/46564302>
Modified: trunk/Source/WebCore/Modules/mediastream/MediaDevices.cpp (239005 => 239006)
--- trunk/Source/WebCore/Modules/mediastream/MediaDevices.cpp 2018-12-08 03:10:39 UTC (rev 239005)
+++ trunk/Source/WebCore/Modules/mediastream/MediaDevices.cpp 2018-12-08 03:11:36 UTC (rev 239006)
@@ -190,6 +190,16 @@
if (!weakThis || m_scheduledEventTimer.isActive())
return;
+ auto* document = this->document();
+ auto* controller = document ? UserMediaController::from(document->page()) : nullptr;
+ if (!controller)
+ return;
+
+ bool canAccessMicrophone = controller->canCallGetUserMedia(*document, { UserMediaController::CaptureType::Microphone }) == UserMediaController::GetUserMediaAccess::CanCall;
+ bool canAccessCamera = controller->canCallGetUserMedia(*document, { UserMediaController::CaptureType::Camera }) == UserMediaController::GetUserMediaAccess::CanCall;
+ if (!canAccessMicrophone && !canAccessCamera)
+ return;
+
m_scheduledEventTimer.startOneShot(Seconds(randomNumber() / 2));
});
}
Modified: trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h (239005 => 239006)
--- trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h 2018-12-08 03:10:39 UTC (rev 239005)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h 2018-12-08 03:11:36 UTC (rev 239006)
@@ -177,8 +177,8 @@
void trackEnabledChanged(MediaStreamTrackPrivate&) final;
Vector<Observer*> m_observers;
-
+
MediaTrackConstraints m_constraints;
std::optional<DOMPromiseDeferred<void>> m_promise;
GenericTaskQueue<ScriptExecutionContext> m_taskQueue;
Modified: trunk/Source/WebKit/ChangeLog (239005 => 239006)
--- trunk/Source/WebKit/ChangeLog 2018-12-08 03:10:39 UTC (rev 239005)
+++ trunk/Source/WebKit/ChangeLog 2018-12-08 03:11:36 UTC (rev 239006)
@@ -1,3 +1,27 @@
+2018-12-07 Eric Carlson <[email protected]>
+
+ [MediaStream] 'devicechange' event should not fire in frames that can't access capture devices
+ https://bugs.webkit.org/show_bug.cgi?id=192511
+ <rdar://problem/46562063>
+
+ Reviewed by Youenn Fablet.
+
+ * UIProcess/UserMediaPermissionCheckProxy.cpp:
+ (WebKit::UserMediaPermissionCheckProxy::UserMediaPermissionCheckProxy): Remove userMediaID parameter.
+ (WebKit::UserMediaPermissionCheckProxy::setUserMediaAccessInfo): ID not passed to callback.
+ * UIProcess/UserMediaPermissionCheckProxy.h:
+ (WebKit::UserMediaPermissionCheckProxy::create):
+ (WebKit::UserMediaPermissionCheckProxy::completionHandler): Deleted.
+
+ * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
+ (WebKit::generateRequestID): New.
+ (WebKit::UserMediaPermissionRequestManagerProxy::captureDevicesChanged): Don't notify if
+ the page does not have a granted request and does not have persistent access.
+ (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame): Use generateRequestID.
+ (WebKit::UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo): Change variable name.
+ (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame): Use generateRequestID.
+ * UIProcess/UserMediaPermissionRequestManagerProxy.h:
+
2018-12-07 Saam Barati <[email protected]>
WKWebProcessPlugInLoadDelegate should have API for saying which rendering events it wants to listen for
Modified: trunk/Source/WebKit/Scripts/webkit/messages.py (239005 => 239006)
--- trunk/Source/WebKit/Scripts/webkit/messages.py 2018-12-08 03:10:39 UTC (rev 239005)
+++ trunk/Source/WebKit/Scripts/webkit/messages.py 2018-12-08 03:11:36 UTC (rev 239006)
@@ -440,7 +440,6 @@
'WebCore::SelectionRect': ['"EditorState.h"'],
'WebKit::ActivityStateChangeID': ['"DrawingAreaInfo.h"'],
'WebKit::BackForwardListItemState': ['"SessionState.h"'],
- 'WebKit::DeviceAccessState': ['"UserMediaPermissionRequestManager.h"'],
'WebKit::LayerHostingMode': ['"LayerTreeContext.h"'],
'WebKit::PageState': ['"SessionState.h"'],
'WebKit::WebGestureEvent': ['"WebEvent.h"'],
Modified: trunk/Source/WebKit/UIProcess/UserMediaPermissionCheckProxy.cpp (239005 => 239006)
--- trunk/Source/WebKit/UIProcess/UserMediaPermissionCheckProxy.cpp 2018-12-08 03:10:39 UTC (rev 239005)
+++ trunk/Source/WebKit/UIProcess/UserMediaPermissionCheckProxy.cpp 2018-12-08 03:11:36 UTC (rev 239006)
@@ -33,9 +33,8 @@
namespace WebKit {
using namespace WebCore;
-UserMediaPermissionCheckProxy::UserMediaPermissionCheckProxy(uint64_t userMediaID, uint64_t frameID, CompletionHandler&& handler, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin)
- : m_userMediaID(userMediaID)
- , m_frameID(frameID)
+UserMediaPermissionCheckProxy::UserMediaPermissionCheckProxy(uint64_t frameID, CompletionHandler&& handler, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin)
+ : m_frameID(frameID)
, m_completionHandler(WTFMove(handler))
, m_userMediaDocumentSecurityOrigin(WTFMove(userMediaDocumentOrigin))
, m_topLevelDocumentSecurityOrigin(WTFMove(topLevelDocumentOrigin))
@@ -48,7 +47,7 @@
if (!m_completionHandler)
return;
- m_completionHandler(m_userMediaID, allowed);
+ m_completionHandler(allowed);
m_completionHandler = nullptr;
}
Modified: trunk/Source/WebKit/UIProcess/UserMediaPermissionCheckProxy.h (239005 => 239006)
--- trunk/Source/WebKit/UIProcess/UserMediaPermissionCheckProxy.h 2018-12-08 03:10:39 UTC (rev 239005)
+++ trunk/Source/WebKit/UIProcess/UserMediaPermissionCheckProxy.h 2018-12-08 03:11:36 UTC (rev 239006)
@@ -39,11 +39,11 @@
class UserMediaPermissionCheckProxy : public API::ObjectImpl<API::Object::Type::UserMediaPermissionCheck> {
public:
- using CompletionHandler = WTF::Function<void(uint64_t, bool allowed)>;
+ using CompletionHandler = WTF::Function<void(bool allowed)>;
- static Ref<UserMediaPermissionCheckProxy> create(uint64_t userMediaID, uint64_t frameID, CompletionHandler&& handler, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin)
+ static Ref<UserMediaPermissionCheckProxy> create(uint64_t frameID, CompletionHandler&& handler, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin)
{
- return adoptRef(*new UserMediaPermissionCheckProxy(userMediaID, frameID, WTFMove(handler), WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin)));
+ return adoptRef(*new UserMediaPermissionCheckProxy(frameID, WTFMove(handler), WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin)));
}
void setUserMediaAccessInfo(bool);
@@ -53,12 +53,9 @@
WebCore::SecurityOrigin& userMediaDocumentSecurityOrigin() { return m_userMediaDocumentSecurityOrigin.get(); }
WebCore::SecurityOrigin& topLevelDocumentSecurityOrigin() { return m_topLevelDocumentSecurityOrigin.get(); }
- CompletionHandler& completionHandler() { return m_completionHandler; }
-
private:
- UserMediaPermissionCheckProxy(uint64_t userMediaID, uint64_t frameID, CompletionHandler&&, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin);
+ UserMediaPermissionCheckProxy(uint64_t frameID, CompletionHandler&&, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin);
- uint64_t m_userMediaID;
uint64_t m_frameID;
CompletionHandler m_completionHandler;
Ref<WebCore::SecurityOrigin> m_userMediaDocumentSecurityOrigin;
Modified: trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp (239005 => 239006)
--- trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp 2018-12-08 03:10:39 UTC (rev 239005)
+++ trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp 2018-12-08 03:11:36 UTC (rev 239006)
@@ -43,6 +43,12 @@
static const MediaProducer::MediaStateFlags activeCaptureMask = MediaProducer::HasActiveAudioCaptureDevice | MediaProducer::HasActiveVideoCaptureDevice;
#endif
+static uint64_t generateRequestID()
+{
+ static uint64_t uniqueRequestID = 1;
+ return uniqueRequestID++;
+}
+
UserMediaPermissionRequestManagerProxy::UserMediaPermissionRequestManagerProxy(WebPageProxy& page)
: m_page(page)
, m_rejectionTimer(RunLoop::main(), this, &UserMediaPermissionRequestManagerProxy::rejectionTimerFired)
@@ -81,9 +87,24 @@
void UserMediaPermissionRequestManagerProxy::captureDevicesChanged()
{
#if ENABLE(MEDIA_STREAM)
- // FIXME: a page with persistent access should always get device change notifications.
- auto accessState = m_grantedRequests.isEmpty() ? DeviceAccessState::NoAccess : DeviceAccessState::SessionAccess;
- m_page.process().send(Messages::WebPage::CaptureDevicesChanged(accessState), m_page.pageID());
+ if (!m_page.isValid() || !m_page.mainFrame())
+ return;
+
+ auto requestID = generateRequestID();
+ auto handler = [this, requestID](bool originHasPersistentAccess) mutable {
+
+ auto pendingRequest = m_pendingDeviceRequests.take(requestID);
+ if (!pendingRequest || !m_page.isValid())
+ return;
+
+ if (m_grantedRequests.isEmpty() && !originHasPersistentAccess)
+ return;
+
+ m_page.process().send(Messages::WebPage::CaptureDevicesChanged(), m_page.pageID());
+ };
+
+ auto origin = WebCore::SecurityOrigin::create(m_page.mainFrame()->url());
+ getUserMediaPermissionInfo(requestID, m_page.mainFrame()->frameID(), WTFMove(handler), origin.get(), WTFMove(origin));
#endif
}
@@ -357,9 +378,10 @@
userMediaAccessWasDenied(userMediaID, UserMediaPermissionRequestProxy::UserMediaAccessDenialReason::UserMediaDisabled);
};
- auto havePermissionInfoHandler = [this, validHandler = WTFMove(validHandler), invalidHandler = WTFMove(invalidHandler), localUserRequest = userRequest](uint64_t userMediaID, bool originHasPersistentAccess) mutable {
+ auto requestID = generateRequestID();
+ auto havePermissionInfoHandler = [this, requestID, validHandler = WTFMove(validHandler), invalidHandler = WTFMove(invalidHandler), localUserRequest = userRequest](bool originHasPersistentAccess) mutable {
- auto pendingRequest = m_pendingDeviceRequests.take(userMediaID);
+ auto pendingRequest = m_pendingDeviceRequests.take(requestID);
if (!pendingRequest)
return;
@@ -372,7 +394,7 @@
RealtimeMediaSourceCenter::singleton().validateRequestConstraints(WTFMove(validHandler), WTFMove(invalidHandler), WTFMove(localUserRequest), WTFMove(deviceIDHashSalt));
};
- getUserMediaPermissionInfo(userMediaID, frameID, WTFMove(havePermissionInfoHandler), WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin));
+ getUserMediaPermissionInfo(requestID, frameID, WTFMove(havePermissionInfoHandler), WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin));
#else
UNUSED_PARAM(userMediaID);
UNUSED_PARAM(frameID);
@@ -383,21 +405,21 @@
}
#if ENABLE(MEDIA_STREAM)
-void UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo(uint64_t userMediaID, uint64_t frameID, UserMediaPermissionCheckProxy::CompletionHandler&& handler, Ref<SecurityOrigin>&& userMediaDocumentOrigin, Ref<SecurityOrigin>&& topLevelDocumentOrigin)
+void UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo(uint64_t requestID, uint64_t frameID, UserMediaPermissionCheckProxy::CompletionHandler&& handler, Ref<SecurityOrigin>&& userMediaDocumentOrigin, Ref<SecurityOrigin>&& topLevelDocumentOrigin)
{
if (!m_page.websiteDataStore().deviceIdHashSaltStorage()) {
- handler(userMediaID, false);
+ handler(false);
return;
}
auto userMediaOrigin = API::SecurityOrigin::create(userMediaDocumentOrigin.get());
auto topLevelOrigin = API::SecurityOrigin::create(topLevelDocumentOrigin.get());
- auto request = UserMediaPermissionCheckProxy::create(userMediaID, frameID, WTFMove(handler), WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin));
+ auto request = UserMediaPermissionCheckProxy::create(frameID, WTFMove(handler), WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin));
- m_pendingDeviceRequests.add(userMediaID, request.copyRef());
+ m_pendingDeviceRequests.add(requestID, request.copyRef());
if (!m_page.uiClient().checkUserMediaPermissionForOrigin(m_page, *m_page.process().webFrame(frameID), userMediaOrigin.get(), topLevelOrigin.get(), request.get())) {
- m_pendingDeviceRequests.take(userMediaID);
- request->completionHandler()(userMediaID, false);
+ m_pendingDeviceRequests.take(requestID);
+ handler(false);
}
}
@@ -432,8 +454,9 @@
#endif
static const int defaultMaximumMicrophoneCount = 1;
- auto completionHandler = [this, requestOrigin = userMediaDocumentOrigin.copyRef(), topOrigin = topLevelDocumentOrigin.copyRef()](uint64_t userMediaID, bool originHasPersistentAccess) {
- auto pendingRequest = m_pendingDeviceRequests.take(userMediaID);
+ auto requestID = generateRequestID();
+ auto completionHandler = [this, requestID, userMediaID, requestOrigin = userMediaDocumentOrigin.copyRef(), topOrigin = topLevelDocumentOrigin.copyRef()](bool originHasPersistentAccess) {
+ auto pendingRequest = m_pendingDeviceRequests.take(requestID);
if (!pendingRequest)
return;
@@ -478,7 +501,7 @@
m_page.process().send(Messages::WebPage::DidCompleteMediaDeviceEnumeration(userMediaID, WTFMove(filteredDevices), WTFMove(deviceIDHashSalt), originHasPersistentAccess), m_page.pageID());
};
- getUserMediaPermissionInfo(userMediaID, frameID, WTFMove(completionHandler), WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin));
+ getUserMediaPermissionInfo(requestID, frameID, WTFMove(completionHandler), WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin));
#else
UNUSED_PARAM(userMediaID);
UNUSED_PARAM(frameID);
Modified: trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.h (239005 => 239006)
--- trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.h 2018-12-08 03:10:39 UTC (rev 239005)
+++ trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.h 2018-12-08 03:11:36 UTC (rev 239006)
@@ -75,7 +75,7 @@
const UserMediaPermissionRequestProxy* searchForGrantedRequest(uint64_t frameID, const WebCore::SecurityOrigin& userMediaDocumentOrigin, const WebCore::SecurityOrigin& topLevelDocumentOrigin, bool needsAudio, bool needsVideo) const;
bool wasRequestDenied(uint64_t mainFrameID, const WebCore::SecurityOrigin& userMediaDocumentOrigin, const WebCore::SecurityOrigin& topLevelDocumentOrigin, bool needsAudio, bool needsVideo, bool needsScreenCapture);
- void getUserMediaPermissionInfo(uint64_t userMediaID, uint64_t frameID, UserMediaPermissionCheckProxy::CompletionHandler&&, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin);
+ void getUserMediaPermissionInfo(uint64_t requestID, uint64_t frameID, UserMediaPermissionCheckProxy::CompletionHandler&&, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin);
enum class RequestAction {
Deny,
Modified: trunk/Source/WebKit/WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp (239005 => 239006)
--- trunk/Source/WebKit/WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp 2018-12-08 03:10:39 UTC (rev 239005)
+++ trunk/Source/WebKit/WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp 2018-12-08 03:11:36 UTC (rev 239006)
@@ -53,8 +53,6 @@
UserMediaPermissionRequestManager::~UserMediaPermissionRequestManager()
{
- if (m_monitoringActivityStateChange)
- m_page.corePage()->removeActivityStateChangeObserver(*this);
for (auto& sandboxExtension : m_userMediaDeviceSandboxExtensions)
sandboxExtension.value->revoke();
}
@@ -245,7 +243,7 @@
ASSERT_UNUSED(wasRemoved, wasRemoved);
}
-void UserMediaPermissionRequestManager::captureDevicesChanged(DeviceAccessState accessState)
+void UserMediaPermissionRequestManager::captureDevicesChanged()
{
// When new media input and/or output devices are made available, or any available input and/or
// output device becomes unavailable, the User Agent MUST run the following steps in browsing
@@ -255,19 +253,6 @@
// * any of the input devices are attached to an active MediaStream in the browsing context, or
// * the active document is fully active and has focus.
- bool isActive = m_page.corePage()->activityState().containsAll(focusedActiveWindow);
- if (!isActive && accessState == DeviceAccessState::NoAccess) {
- if (!isActive) {
- if (!m_monitoringActivityStateChange) {
- m_monitoringActivityStateChange = true;
- m_page.corePage()->addActivityStateChangeObserver(*this);
- }
- m_pendingDeviceChangeEvent = true;
- m_accessStateWhenDevicesChanged = accessState;
- }
- return;
- }
-
auto identifiers = m_deviceChangeObserverMap.keys();
for (auto& identifier : identifiers) {
auto iterator = m_deviceChangeObserverMap.find(identifier);
@@ -276,28 +261,6 @@
}
}
-void UserMediaPermissionRequestManager::activityStateDidChange(OptionSet<WebCore::ActivityState::Flag> oldActivityState, OptionSet<WebCore::ActivityState::Flag> newActivityState)
-{
- if (!newActivityState.containsAll(focusedActiveWindow))
- return;
-
- RunLoop::main().dispatch([this, weakThis = makeWeakPtr(*this)]() mutable {
- if (!weakThis || !m_monitoringActivityStateChange)
- return;
-
- m_monitoringActivityStateChange = false;
- m_page.corePage()->removeActivityStateChangeObserver(*this);
- });
-
- if (!m_pendingDeviceChangeEvent)
- return;
-
- m_pendingDeviceChangeEvent = false;
- auto accessState = m_accessStateWhenDevicesChanged;
- m_accessStateWhenDevicesChanged = DeviceAccessState::NoAccess;
- captureDevicesChanged(accessState);
-}
-
} // namespace WebKit
#endif // ENABLE(MEDIA_STREAM)
Modified: trunk/Source/WebKit/WebProcess/MediaStream/UserMediaPermissionRequestManager.h (239005 => 239006)
--- trunk/Source/WebKit/WebProcess/MediaStream/UserMediaPermissionRequestManager.h 2018-12-08 03:10:39 UTC (rev 239005)
+++ trunk/Source/WebKit/WebProcess/MediaStream/UserMediaPermissionRequestManager.h 2018-12-08 03:11:36 UTC (rev 239006)
@@ -23,7 +23,6 @@
#include "MediaDeviceSandboxExtensions.h"
#include "SandboxExtension.h"
-#include <WebCore/ActivityStateChangeObserver.h>
#include <WebCore/MediaCanStartListener.h>
#include <WebCore/MediaConstraints.h>
#include <WebCore/MediaDevicesEnumerationRequest.h>
@@ -37,9 +36,7 @@
class WebPage;
-enum class DeviceAccessState : uint8_t { NoAccess, SessionAccess, PersistentAccess };
-
-class UserMediaPermissionRequestManager : public CanMakeWeakPtr<UserMediaPermissionRequestManager>, private WebCore::MediaCanStartListener, private WebCore::ActivityStateChangeObserver {
+class UserMediaPermissionRequestManager : public CanMakeWeakPtr<UserMediaPermissionRequestManager>, private WebCore::MediaCanStartListener {
public:
explicit UserMediaPermissionRequestManager(WebPage&);
~UserMediaPermissionRequestManager();
@@ -59,7 +56,7 @@
WebCore::UserMediaClient::DeviceChangeObserverToken addDeviceChangeObserver(WTF::Function<void()>&&);
void removeDeviceChangeObserver(WebCore::UserMediaClient::DeviceChangeObserverToken);
- void captureDevicesChanged(DeviceAccessState);
+ void captureDevicesChanged();
private:
void sendUserMediaRequest(WebCore::UserMediaRequest&);
@@ -67,9 +64,6 @@
// WebCore::MediaCanStartListener
void mediaCanStart(WebCore::Document&) final;
- // WebCore::ActivityStateChangeObserver
- void activityStateDidChange(OptionSet<WebCore::ActivityState::Flag> oldActivityState, OptionSet<WebCore::ActivityState::Flag> newActivityState) final;
-
void removeMediaRequestFromMaps(WebCore::UserMediaRequest&);
WebPage& m_page;
@@ -84,10 +78,7 @@
HashMap<String, RefPtr<SandboxExtension>> m_userMediaDeviceSandboxExtensions;
HashMap<WebCore::UserMediaClient::DeviceChangeObserverToken, WTF::Function<void()>> m_deviceChangeObserverMap;
- DeviceAccessState m_accessStateWhenDevicesChanged { DeviceAccessState::NoAccess };
bool m_monitoringDeviceChange { false };
- bool m_pendingDeviceChangeEvent { false };
- bool m_monitoringActivityStateChange { false };
};
} // namespace WebKit
@@ -94,15 +85,6 @@
namespace WTF {
-template<> struct EnumTraits<WebKit::DeviceAccessState> {
- using values = EnumValues<
- WebKit::DeviceAccessState,
- WebKit::DeviceAccessState::NoAccess,
- WebKit::DeviceAccessState::SessionAccess,
- WebKit::DeviceAccessState::PersistentAccess
- >;
-};
-
} // namespace WTF
#endif // ENABLE(MEDIA_STREAM)
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (239005 => 239006)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2018-12-08 03:10:39 UTC (rev 239005)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2018-12-08 03:11:36 UTC (rev 239006)
@@ -3978,9 +3978,9 @@
m_userMediaPermissionRequestManager->didCompleteMediaDeviceEnumeration(userMediaID, devices, WTFMove(deviceIdentifierHashSalt), originHasPersistentAccess);
}
-void WebPage::captureDevicesChanged(DeviceAccessState accessState)
+void WebPage::captureDevicesChanged()
{
- m_userMediaPermissionRequestManager->captureDevicesChanged(accessState);
+ m_userMediaPermissionRequestManager->captureDevicesChanged();
}
#if ENABLE(SANDBOX_EXTENSIONS)
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (239005 => 239006)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2018-12-08 03:10:39 UTC (rev 239005)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2018-12-08 03:11:36 UTC (rev 239006)
@@ -234,7 +234,6 @@
class WebWheelEvent;
class RemoteLayerTreeTransaction;
-enum class DeviceAccessState : uint8_t;
enum FindOptions : uint16_t;
enum class DragControllerAction : uint8_t;
@@ -578,7 +577,7 @@
#if ENABLE(MEDIA_STREAM)
UserMediaPermissionRequestManager& userMediaPermissionRequestManager() { return *m_userMediaPermissionRequestManager; }
void prepareToSendUserMediaPermissionRequest();
- void captureDevicesChanged(DeviceAccessState);
+ void captureDevicesChanged();
#endif
void elementDidFocus(WebCore::Node*);
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in (239005 => 239006)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in 2018-12-08 03:10:39 UTC (rev 239005)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in 2018-12-08 03:11:36 UTC (rev 239006)
@@ -340,7 +340,7 @@
UserMediaAccessWasGranted(uint64_t userMediaID, WebCore::CaptureDevice audioDevice, WebCore::CaptureDevice videoDevice, String mediaDeviceIdentifierHashSalt)
UserMediaAccessWasDenied(uint64_t userMediaID, uint64_t reason, String invalidConstraint)
DidCompleteMediaDeviceEnumeration(uint64_t userMediaID, Vector<WebCore::CaptureDevice> devices, String mediaDeviceIdentifierHashSalt, bool hasPersistentAccess)
- CaptureDevicesChanged(enum:uint8_t WebKit::DeviceAccessState accessState)
+ CaptureDevicesChanged()
#if ENABLE(SANDBOX_EXTENSIONS)
GrantUserMediaDeviceSandboxExtensions(WebKit::MediaDeviceSandboxExtensions sandboxExtensions)
RevokeUserMediaDeviceSandboxExtensions(Vector<String> sandboxExtensionIDs)