Diff
Modified: trunk/Source/WebCore/ChangeLog (238908 => 238909)
--- trunk/Source/WebCore/ChangeLog 2018-12-05 21:35:50 UTC (rev 238908)
+++ trunk/Source/WebCore/ChangeLog 2018-12-05 22:32:26 UTC (rev 238909)
@@ -1,5 +1,18 @@
2018-12-05 Youenn Fablet <you...@apple.com>
+ Enable the possibility to do video capture in UIProcess
+ https://bugs.webkit.org/show_bug.cgi?id=192394
+
+ Reviewed by Eric Carlson.
+
+ Create IOSurface-backed sample buffers so that we can easily send them through IPC.
+ Manually tested.
+
+ * platform/mediastream/mac/AVVideoCaptureSource.mm:
+ (WebCore::AVVideoCaptureSource::setSizeAndFrameRateWithPreset):
+
+2018-12-05 Youenn Fablet <you...@apple.com>
+
Update ServiceWorkerContainer::getRegistration lambdas
https://bugs.webkit.org/show_bug.cgi?id=192376
Modified: trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm (238908 => 238909)
--- trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm 2018-12-05 21:35:50 UTC (rev 238908)
+++ trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm 2018-12-05 22:32:26 UTC (rev 238909)
@@ -342,7 +342,8 @@
auto settingsDictionary = @{
(__bridge NSString *)kCVPixelBufferPixelFormatTypeKey: @(avVideoCapturePixelBufferFormat()),
(__bridge NSString *)kCVPixelBufferWidthKey: @(avPreset->size.width()),
- (__bridge NSString *)kCVPixelBufferHeightKey: @(avPreset->size.height())
+ (__bridge NSString *)kCVPixelBufferHeightKey: @(avPreset->size.height()),
+ (__bridge NSString *)kCVPixelBufferIOSurfacePropertiesKey : @{ }
};
[m_videoOutput setVideoSettings:settingsDictionary];
#endif
Modified: trunk/Source/WebKit/ChangeLog (238908 => 238909)
--- trunk/Source/WebKit/ChangeLog 2018-12-05 21:35:50 UTC (rev 238908)
+++ trunk/Source/WebKit/ChangeLog 2018-12-05 22:32:26 UTC (rev 238909)
@@ -1,3 +1,34 @@
+2018-12-05 Youenn Fablet <you...@apple.com>
+
+ Enable the possibility to do video capture in UIProcess
+ https://bugs.webkit.org/show_bug.cgi?id=192394
+
+ Reviewed by Eric Carlson.
+
+ Add two web preferences to toggle audio/video capture in UIProcess or WebProcess.
+ Add mechanism for video capture that was not implemented yet.
+
+ * Shared/WebPreferences.yaml:
+ * Shared/WebPreferencesDefaultValues.h:
+ * Shared/WebProcessCreationParameters.cpp:
+ (WebKit::WebProcessCreationParameters::encode const):
+ (WebKit::WebProcessCreationParameters::decode):
+ * Shared/WebProcessCreationParameters.h:
+ * UIProcess/API/APIProcessPoolConfiguration.h:
+ * UIProcess/API/C/WKPreferences.cpp:
+ (WKPreferencesSetCaptureAudioInUIProcessEnabled):
+ (WKPreferencesGetCaptureAudioInUIProcessEnabled):
+ (WKPreferencesSetCaptureVideoInUIProcessEnabled):
+ (WKPreferencesGetCaptureVideoInUIProcessEnabled):
+ * UIProcess/API/C/WKPreferencesRef.h:
+ * UIProcess/WebPreferences.cpp:
+ (WebKit::WebPreferences::updateBoolValueForInternalDebugFeatureKey):
+ * UIProcess/WebProcessPool.cpp:
+ (WebKit::WebProcessPool::initializeNewWebProcess):
+ (WebKit::WebProcessPool::createWebPage):
+ * WebProcess/cocoa/UserMediaCaptureManager.cpp:
+ (WebKit::UserMediaCaptureManager::initialize):
+
2018-12-05 Alex Christensen <achristen...@webkit.org>
Make WebsiteDataStoreConfiguration a proper API object
Modified: trunk/Source/WebKit/Shared/WebPreferences.yaml (238908 => 238909)
--- trunk/Source/WebKit/Shared/WebPreferences.yaml 2018-12-05 21:35:50 UTC (rev 238908)
+++ trunk/Source/WebKit/Shared/WebPreferences.yaml 2018-12-05 22:32:26 UTC (rev 238909)
@@ -1474,3 +1474,20 @@
webcoreBinding: RuntimeEnabledFeatures
condition: ENABLE(LAYOUT_FORMATTING_CONTEXT)
+CaptureAudioInUIProcessEnabled:
+ type: bool
+ defaultValue: DEFAULT_CAPTURE_AUDIO_IN_UIPROCESS
+ humanReadableName: "Capture audio in UIProcess"
+ humanReadableDescription: "Enable audio capture in UIProcess"
+ category: internal
+ webcoreBinding: none
+ condition: ENABLE(MEDIA_STREAM)
+
+CaptureVideoInUIProcessEnabled:
+ type: bool
+ defaultValue: false
+ humanReadableName: "Capture video in UIProcess"
+ humanReadableDescription: "Enable video capture in UIProcess"
+ category: internal
+ webcoreBinding: none
+ condition: ENABLE(MEDIA_STREAM)
Modified: trunk/Source/WebKit/Shared/WebPreferencesDefaultValues.h (238908 => 238909)
--- trunk/Source/WebKit/Shared/WebPreferencesDefaultValues.h 2018-12-05 21:35:50 UTC (rev 238908)
+++ trunk/Source/WebKit/Shared/WebPreferencesDefaultValues.h 2018-12-05 22:32:26 UTC (rev 238909)
@@ -223,6 +223,12 @@
bool defaultPassiveTouchListenersAsDefaultOnDocument();
bool defaultCustomPasteboardDataEnabled();
+#if PLATFORM(MAC)
+#define DEFAULT_CAPTURE_AUDIO_IN_UIPROCESS true
+#else
+#define DEFAULT_CAPTURE_AUDIO_IN_UIPROCESS false
+#endif
+
#if PLATFORM(WATCHOS)
#define DEFAULT_INPUT_TYPE_COLOR_ENABLED false
#define DEFAULT_DATALIST_ELEMENT_ENABLED false
Modified: trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp (238908 => 238909)
--- trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp 2018-12-05 21:35:50 UTC (rev 238908)
+++ trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp 2018-12-05 22:32:26 UTC (rev 238909)
@@ -69,6 +69,7 @@
#if ENABLE(MEDIA_STREAM)
encoder << audioCaptureExtensionHandle;
encoder << shouldCaptureAudioInUIProcess;
+ encoder << shouldCaptureVideoInUIProcess;
encoder << shouldCaptureDisplayInUIProcess;
#endif
encoder << shouldUseTestingNetworkSession;
@@ -261,6 +262,8 @@
if (!decoder.decode(parameters.shouldCaptureAudioInUIProcess))
return false;
+ if (!decoder.decode(parameters.shouldCaptureVideoInUIProcess))
+ return false;
if (!decoder.decode(parameters.shouldCaptureDisplayInUIProcess))
return false;
#endif
Modified: trunk/Source/WebKit/Shared/WebProcessCreationParameters.h (238908 => 238909)
--- trunk/Source/WebKit/Shared/WebProcessCreationParameters.h 2018-12-05 21:35:50 UTC (rev 238908)
+++ trunk/Source/WebKit/Shared/WebProcessCreationParameters.h 2018-12-05 22:32:26 UTC (rev 238909)
@@ -93,6 +93,7 @@
#if ENABLE(MEDIA_STREAM)
SandboxExtension::Handle audioCaptureExtensionHandle;
bool shouldCaptureAudioInUIProcess { false };
+ bool shouldCaptureVideoInUIProcess { false };
bool shouldCaptureDisplayInUIProcess { false };
#endif
String mediaKeyStorageDirectory;
Modified: trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h (238908 => 238909)
--- trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h 2018-12-05 21:35:50 UTC (rev 238908)
+++ trunk/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h 2018-12-05 22:32:26 UTC (rev 238909)
@@ -138,6 +138,9 @@
bool shouldCaptureAudioInUIProcess() const { return m_shouldCaptureAudioInUIProcess; }
void setShouldCaptureAudioInUIProcess(bool shouldCaptureAudioInUIProcess) { m_shouldCaptureAudioInUIProcess = shouldCaptureAudioInUIProcess; }
+ bool shouldCaptureVideoInUIProcess() const { return m_shouldCaptureVideoInUIProcess; }
+ void setShouldCaptureVideoInUIProcess(bool shouldCaptureVideoInUIProcess) { m_shouldCaptureVideoInUIProcess = shouldCaptureVideoInUIProcess; }
+
bool shouldCaptureDisplayInUIProcess() const { return m_shouldCaptureDisplayInUIProcess; }
void setShouldCaptureDisplayInUIProcess(bool shouldCaptureDisplayInUIProcess) { m_shouldCaptureDisplayInUIProcess = shouldCaptureDisplayInUIProcess; }
@@ -206,6 +209,7 @@
bool m_alwaysRunsAtBackgroundPriority { false };
bool m_shouldTakeUIBackgroundAssertion { true };
bool m_shouldCaptureAudioInUIProcess { false };
+ bool m_shouldCaptureVideoInUIProcess { false };
bool m_shouldCaptureDisplayInUIProcess { DEFAULT_CAPTURE_DISPLAY_IN_UI_PROCESS };
ProcessID m_presentingApplicationPID { getCurrentProcessID() };
std::optional<bool> m_processSwapsOnNavigationFromClient;
Modified: trunk/Source/WebKit/UIProcess/API/C/WKPreferences.cpp (238908 => 238909)
--- trunk/Source/WebKit/UIProcess/API/C/WKPreferences.cpp 2018-12-05 21:35:50 UTC (rev 238908)
+++ trunk/Source/WebKit/UIProcess/API/C/WKPreferences.cpp 2018-12-05 22:32:26 UTC (rev 238909)
@@ -2079,3 +2079,23 @@
{
return toImpl(preferencesRef)->webSQLDisabled();
}
+
+void WKPreferencesSetCaptureAudioInUIProcessEnabled(WKPreferencesRef preferencesRef, bool flag)
+{
+ toImpl(preferencesRef)->setCaptureAudioInUIProcessEnabled(flag);
+}
+
+bool WKPreferencesGetCaptureAudioInUIProcessEnabled(WKPreferencesRef preferencesRef)
+{
+ return toImpl(preferencesRef)->captureAudioInUIProcessEnabled();
+}
+
+void WKPreferencesSetCaptureVideoInUIProcessEnabled(WKPreferencesRef preferencesRef, bool flag)
+{
+ toImpl(preferencesRef)->setCaptureVideoInUIProcessEnabled(flag);
+}
+
+bool WKPreferencesGetCaptureVideoInUIProcessEnabled(WKPreferencesRef preferencesRef)
+{
+ return toImpl(preferencesRef)->captureVideoInUIProcessEnabled();
+}
Modified: trunk/Source/WebKit/UIProcess/API/C/WKPreferencesRef.h (238908 => 238909)
--- trunk/Source/WebKit/UIProcess/API/C/WKPreferencesRef.h 2018-12-05 21:35:50 UTC (rev 238908)
+++ trunk/Source/WebKit/UIProcess/API/C/WKPreferencesRef.h 2018-12-05 22:32:26 UTC (rev 238909)
@@ -332,6 +332,11 @@
WK_EXPORT bool WKPreferencesGetWebSQLDisabled(WKPreferencesRef preferencesRef);
WK_EXPORT void WKPreferencesSetWebSQLDisabled(WKPreferencesRef preferencesRef, bool enabled);
+WK_EXPORT void WKPreferencesSetCaptureAudioInUIProcessEnabled(WKPreferencesRef preferencesRef, bool flag);
+WK_EXPORT bool WKPreferencesGetCaptureAudioInUIProcessEnabled(WKPreferencesRef preferencesRef);
+WK_EXPORT void WKPreferencesSetCaptureVideoInUIProcessEnabled(WKPreferencesRef preferencesRef, bool flag);
+WK_EXPORT bool WKPreferencesGetCaptureVideoInUIProcessEnabled(WKPreferencesRef preferencesRef);
+
#ifdef __cplusplus
}
#endif
Modified: trunk/Source/WebKit/UIProcess/WebPreferences.cpp (238908 => 238909)
--- trunk/Source/WebKit/UIProcess/WebPreferences.cpp 2018-12-05 21:35:50 UTC (rev 238908)
+++ trunk/Source/WebKit/UIProcess/WebPreferences.cpp 2018-12-05 22:32:26 UTC (rev 238909)
@@ -139,7 +139,19 @@
return;
}
+ if (key == WebPreferencesKey::captureAudioInUIProcessEnabledKey()) {
+ for (auto* page : m_pages)
+ page->process().processPool().configuration().setShouldCaptureAudioInUIProcess(value);
+ return;
+ }
+ if (key == WebPreferencesKey::captureVideoInUIProcessEnabledKey()) {
+ for (auto* page : m_pages)
+ page->process().processPool().configuration().setShouldCaptureVideoInUIProcess(value);
+
+ return;
+ }
+
update(); // FIXME: Only send over the changed key and value.
}
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (238908 => 238909)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2018-12-05 21:35:50 UTC (rev 238908)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2018-12-05 22:32:26 UTC (rev 238909)
@@ -919,6 +919,7 @@
parameters.resourceLoadStatisticsEnabled = websiteDataStore.resourceLoadStatisticsEnabled();
#if ENABLE(MEDIA_STREAM)
parameters.shouldCaptureAudioInUIProcess = m_configuration->shouldCaptureAudioInUIProcess();
+ parameters.shouldCaptureVideoInUIProcess = m_configuration->shouldCaptureVideoInUIProcess();
parameters.shouldCaptureDisplayInUIProcess = m_configuration->shouldCaptureDisplayInUIProcess();
#endif
@@ -1146,6 +1147,8 @@
auto page = process->createWebPage(pageClient, WTFMove(pageConfiguration));
m_configuration->setProcessSwapsOnNavigationFromExperimentalFeatures(page->preferences().processSwapOnCrossSiteNavigationEnabled());
+ m_configuration->setShouldCaptureAudioInUIProcess(page->preferences().captureAudioInUIProcessEnabled());
+ m_configuration->setShouldCaptureVideoInUIProcess(page->preferences().captureVideoInUIProcessEnabled());
return page;
}
Modified: trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp (238908 => 238909)
--- trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp 2018-12-05 21:35:50 UTC (rev 238908)
+++ trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp 2018-12-05 22:32:26 UTC (rev 238909)
@@ -219,6 +219,8 @@
{
if (parameters.shouldCaptureAudioInUIProcess)
RealtimeMediaSourceCenter::setAudioFactory(*this);
+ if (parameters.shouldCaptureVideoInUIProcess)
+ RealtimeMediaSourceCenter::setVideoFactory(*this);
if (parameters.shouldCaptureDisplayInUIProcess)
RealtimeMediaSourceCenter::setDisplayCaptureFactory(*this);
}