Diff
Modified: trunk/Source/WebKit/mac/ChangeLog (217836 => 217837)
--- trunk/Source/WebKit/mac/ChangeLog 2017-06-06 16:29:20 UTC (rev 217836)
+++ trunk/Source/WebKit/mac/ChangeLog 2017-06-06 16:53:55 UTC (rev 217837)
@@ -1,3 +1,19 @@
+2017-06-06 Youenn Fablet <[email protected]>
+
+ Add an option to disable getUserMedia prompt in case of mock capture sources
+ https://bugs.webkit.org/show_bug.cgi?id=172981
+ <rdar://problem/32580325>
+
+ Reviewed by Eric Carlson.
+
+ Defining the option, getter and setter.
+
+ * WebView/WebPreferences.mm:
+ (+[WebPreferences initialize]):
+ (-[WebPreferences mockCaptureDevicesPromptEnabled]):
+ (-[WebPreferences setMockCaptureDevicesPromptEnabled:]):
+ * WebView/WebPreferencesPrivate.h:
+
2017-06-05 Dan Bernstein <[email protected]>
Tried to fix the build when targrting macOS 10.12 using the macOS 10.13 developer beta SDK.
Modified: trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h (217836 => 217837)
--- trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h 2017-06-06 16:29:20 UTC (rev 217836)
+++ trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h 2017-06-06 16:53:55 UTC (rev 217837)
@@ -228,6 +228,7 @@
#define WebKitEnableInheritURIQueryComponentPreferenceKey @"WebKitEnableInheritURIQueryComponent"
#define WebKitMediaDataLoadsAutomaticallyPreferenceKey @"WebKitMediaDataLoadsAutomatically"
#define WebKitMockCaptureDevicesEnabledPreferenceKey @"WebKitMockCaptureDevicesEnabled"
+#define WebKitMockCaptureDevicesPromptEnabledPreferenceKey @"WebKitMockCaptureDevicesPromptEnabled"
#define WebKitEnumeratingAllNetworkInterfacesEnabledPreferenceKey @"WebKitEnumeratingAllNetworkInterfacesEnabled"
#define WebKitICECandidateFilteringEnabledPreferenceKey @"WebKitICECandidateFilteringEnabled"
#define WebKitMediaCaptureRequiresSecureConnectionPreferenceKey @"WebKitMediaCaptureRequiresSecureConnection"
Modified: trunk/Source/WebKit/mac/WebView/WebPreferences.mm (217836 => 217837)
--- trunk/Source/WebKit/mac/WebView/WebPreferences.mm 2017-06-06 16:29:20 UTC (rev 217836)
+++ trunk/Source/WebKit/mac/WebView/WebPreferences.mm 2017-06-06 16:53:55 UTC (rev 217837)
@@ -618,6 +618,7 @@
#endif
#if ENABLE(MEDIA_STREAM)
[NSNumber numberWithBool:NO], WebKitMockCaptureDevicesEnabledPreferenceKey,
+ [NSNumber numberWithBool:YES], WebKitMockCaptureDevicesPromptEnabledPreferenceKey,
[NSNumber numberWithBool:YES], WebKitMediaCaptureRequiresSecureConnectionPreferenceKey,
#endif
[NSNumber numberWithBool:YES], WebKitShadowDOMEnabledPreferenceKey,
@@ -2883,6 +2884,16 @@
[self _setBoolValue:flag forKey:WebKitMockCaptureDevicesEnabledPreferenceKey];
}
+- (BOOL)mockCaptureDevicesPromptEnabled
+{
+ return [self _boolValueForKey:WebKitMockCaptureDevicesPromptEnabledPreferenceKey];
+}
+
+- (void)setMockCaptureDevicesPromptEnabled:(BOOL)flag
+{
+ [self _setBoolValue:flag forKey:WebKitMockCaptureDevicesPromptEnabledPreferenceKey];
+}
+
- (BOOL)enumeratingAllNetworkInterfacesEnabled
{
return [self _boolValueForKey:WebKitEnumeratingAllNetworkInterfacesEnabledPreferenceKey];
Modified: trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h (217836 => 217837)
--- trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h 2017-06-06 16:29:20 UTC (rev 217836)
+++ trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h 2017-06-06 16:53:55 UTC (rev 217837)
@@ -505,6 +505,9 @@
- (void)setMockCaptureDevicesEnabled:(BOOL)flag;
- (BOOL)mockCaptureDevicesEnabled;
+- (void)setMockCaptureDevicesPromptEnabled:(BOOL)flag;
+- (BOOL)mockCaptureDevicesPromptEnabled;
+
- (void)setEnumeratingAllNetworkInterfacesEnabled:(BOOL)flag;
- (BOOL)enumeratingAllNetworkInterfacesEnabled;
Modified: trunk/Source/WebKit2/ChangeLog (217836 => 217837)
--- trunk/Source/WebKit2/ChangeLog 2017-06-06 16:29:20 UTC (rev 217836)
+++ trunk/Source/WebKit2/ChangeLog 2017-06-06 16:53:55 UTC (rev 217837)
@@ -1,3 +1,30 @@
+2017-06-06 Youenn Fablet <[email protected]>
+
+ Add an option to disable getUserMedia prompt in case of mock capture sources
+ https://bugs.webkit.org/show_bug.cgi?id=172981
+ <rdar://problem/32580325>
+
+ Reviewed by Eric Carlson.
+
+ Adding mockCaptureDevicesPromptEnabled option.
+ Allowing any getUserMedia request if mock is on and prompt is off.
+
+ Renaming UserMediaProcessManager::willEnableMediaStreamInPage to muteCaptureMediaStreamsExceptIn.
+ This eases reading the code.
+ Making sure that a page for which a new getUserMedia MediaStream will be created is capture-unmuted.
+
+ * Shared/WebPreferencesDefinitions.h:
+ * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
+ (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
+ * UIProcess/UserMediaProcessManager.cpp:
+ (WebKit::UserMediaProcessManager::muteCaptureMediaStreamsExceptIn):
+ (WebKit::UserMediaProcessManager::willCreateMediaStream):
+ * UIProcess/UserMediaProcessManager.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::setMuted):
+ * UIProcess/WebPageProxy.h:
+ (WebKit::WebPageProxy::activateMediaStreamCaptureInPage):
+
2017-06-06 Carlos Garcia Campos <[email protected]>
[WPE] Enable remote inspector
Modified: trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h (217836 => 217837)
--- trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h 2017-06-06 16:29:20 UTC (rev 217836)
+++ trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h 2017-06-06 16:53:55 UTC (rev 217837)
@@ -248,6 +248,7 @@
macro(DeferredCSSParserEnabled, deferredCSSParserEnabled, Bool, bool, false, "", "") \
macro(HTTPEquivEnabled, httpEquivEnabled, Bool, bool, true, "", "") \
macro(MockCaptureDevicesEnabled, mockCaptureDevicesEnabled, Bool, bool, false, "", "") \
+ macro(MockCaptureDevicesPromptEnabled, mockCaptureDevicesPromptEnabled, Bool, bool, true, "", "") \
macro(MediaCaptureRequiresSecureConnection, mediaCaptureRequiresSecureConnection, Bool, bool, true, "", "") \
macro(EnumeratingAllNetworkInterfacesEnabled, enumeratingAllNetworkInterfacesEnabled, Bool, bool, false, "", "") \
macro(ICECandidateFilteringEnabled, iceCandidateFilteringEnabled, Bool, bool, true, "", "") \
Modified: trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp (217836 => 217837)
--- trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp 2017-06-06 16:29:20 UTC (rev 217836)
+++ trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp 2017-06-06 16:53:55 UTC (rev 217837)
@@ -209,6 +209,14 @@
auto topLevelOrigin = API::SecurityOrigin::create(topLevelDocumentOrigin.get());
auto request = createRequest(userMediaID, frameID, WTFMove(userMediaDocumentOrigin), WTFMove(topLevelDocumentOrigin), WTFMove(audioDeviceUIDs), WTFMove(videoDeviceUIDs), WTFMove(deviceIdentifierHashSalt));
+ if (m_page.preferences().mockCaptureDevicesEnabled() && !m_page.preferences().mockCaptureDevicesPromptEnabled()) {
+ // FIXME: https://bugs.webkit.org/show_bug.cgi?id=172989
+ // We should probably only allow this if page is already actively capturing or page is visible.
+ // If page is hidden and not capturing, we should wait for page to be visible before allowing the request.
+ request->allow(request->audioDeviceUIDs().isEmpty() ? String() : request->audioDeviceUIDs()[0], request->videoDeviceUIDs().isEmpty() ? String() : request->videoDeviceUIDs()[0]);
+ return;
+ }
+
if (!m_page.uiClient().decidePolicyForUserMediaPermissionRequest(m_page, *m_page.process().webFrame(frameID), WTFMove(userMediaOrigin), WTFMove(topLevelOrigin), request.get()))
userMediaAccessWasDenied(userMediaID, UserMediaPermissionRequestProxy::UserMediaAccessDenialReason::UserMediaDisabled);
};
Modified: trunk/Source/WebKit2/UIProcess/UserMediaProcessManager.cpp (217836 => 217837)
--- trunk/Source/WebKit2/UIProcess/UserMediaProcessManager.cpp 2017-06-06 16:29:20 UTC (rev 217836)
+++ trunk/Source/WebKit2/UIProcess/UserMediaProcessManager.cpp 2017-06-06 16:53:55 UTC (rev 217837)
@@ -109,7 +109,7 @@
}
}
-void UserMediaProcessManager::willEnableMediaStreamInPage(WebPageProxy& pageStartingCapture)
+void UserMediaProcessManager::muteCaptureMediaStreamsExceptIn(WebPageProxy& pageStartingCapture)
{
#if PLATFORM(COCOA)
for (auto& state : stateMap()) {
@@ -116,7 +116,6 @@
for (auto& manager : state.value->managers()) {
if (&manager->page() == &pageStartingCapture)
continue;
-
manager->page().setMuted(WebCore::MediaProducer::CaptureDevicesAreMuted);
}
}
@@ -132,7 +131,7 @@
ASSERT(stateMap().contains(&processStartingCapture));
- willEnableMediaStreamInPage(proxy.page());
+ proxy.page().activateMediaStreamCaptureInPage();
auto& state = processState(processStartingCapture);
size_t extensionCount = 0;
Modified: trunk/Source/WebKit2/UIProcess/UserMediaProcessManager.h (217836 => 217837)
--- trunk/Source/WebKit2/UIProcess/UserMediaProcessManager.h 2017-06-06 16:29:20 UTC (rev 217836)
+++ trunk/Source/WebKit2/UIProcess/UserMediaProcessManager.h 2017-06-06 16:53:55 UTC (rev 217837)
@@ -35,7 +35,7 @@
void removeUserMediaPermissionRequestManagerProxy(UserMediaPermissionRequestManagerProxy&);
void willCreateMediaStream(UserMediaPermissionRequestManagerProxy&, bool withAudio, bool withVideo);
- void willEnableMediaStreamInPage(WebPageProxy&);
+ void muteCaptureMediaStreamsExceptIn(WebPageProxy&);
void startedCaptureSession(UserMediaPermissionRequestManagerProxy&);
void endedCaptureSession(UserMediaPermissionRequestManagerProxy&);
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (217836 => 217837)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2017-06-06 16:29:20 UTC (rev 217836)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2017-06-06 16:53:55 UTC (rev 217837)
@@ -4184,7 +4184,7 @@
#if ENABLE(MEDIA_STREAM)
if (!(state & WebCore::MediaProducer::CaptureDevicesAreMuted))
- UserMediaProcessManager::singleton().willEnableMediaStreamInPage(*this);
+ UserMediaProcessManager::singleton().muteCaptureMediaStreamsExceptIn(*this);
#endif
m_process->send(Messages::WebPage::SetMuted(state), m_pageID);
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (217836 => 217837)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2017-06-06 16:29:20 UTC (rev 217836)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2017-06-06 16:53:55 UTC (rev 217837)
@@ -470,6 +470,8 @@
void setEditable(bool);
bool isEditable() const { return m_isEditable; }
+ void activateMediaStreamCaptureInPage() { setMuted(m_mutedState & ~WebCore::MediaProducer::CaptureDevicesAreMuted); }
+
#if PLATFORM(IOS)
void executeEditCommand(const String& commandName, std::function<void (CallbackBase::Error)>);
double displayedContentScale() const { return m_lastVisibleContentRectUpdate.scale(); }