WebKit Bugzilla
Attachment 356582 Details for
Bug 192394
: Enable the possibility to do video capture in UIProcess
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-192394-20181204220052.patch (text/plain), 13.77 KB, created by
youenn fablet
on 2018-12-04 22:00:56 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2018-12-04 22:00:56 PST
Size:
13.77 KB
patch
obsolete
>Subversion Revision: 238855 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 35f323aa6b13190b7e70fde72093e392b3a5094b..184a24a0c5ade29485fe1aa064e6b5e9903fa53b 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,16 @@ >+2018-12-04 Youenn Fablet <youenn@apple.com> >+ >+ Enable the possibility to do video capture in UIProcess >+ https://bugs.webkit.org/show_bug.cgi?id=192394 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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-04 Youenn Fablet <youenn@apple.com> > > Update ServiceWorkerContainer::getRegistration lambdas >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 315e7fba7e0a93dc02601f1f02b5295bc42f924d..070f05f635565896c25a2618d15b65caedad912b 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,34 @@ >+2018-12-04 Youenn Fablet <youenn@apple.com> >+ >+ Enable the possibility to do video capture in UIProcess >+ https://bugs.webkit.org/show_bug.cgi?id=192394 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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-04 Carlos Eduardo Ramalho <cadubentzen@gmail.com> > > [WPE] Add gtk-doc >diff --git a/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm b/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm >index 40179614d6790b6a314cbf658dbd527d72c393f0..55ebac8dcf3d68eee8d1db9ff8cf9b1e9dc05338 100644 >--- a/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm >+++ b/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm >@@ -342,7 +342,8 @@ void AVVideoCaptureSource::setSizeAndFrameRateWithPreset(IntSize requestedSize, > 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 >diff --git a/Source/WebKit/Shared/WebPreferences.yaml b/Source/WebKit/Shared/WebPreferences.yaml >index 6d25e71f13cf26010b9237f73cebc9c9dc26d214..b94b97cbe47cb099182b2332cfd0ac9a7ef5213f 100644 >--- a/Source/WebKit/Shared/WebPreferences.yaml >+++ b/Source/WebKit/Shared/WebPreferences.yaml >@@ -1474,3 +1474,20 @@ LayoutFormattingContextEnabled: > 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) >diff --git a/Source/WebKit/Shared/WebPreferencesDefaultValues.h b/Source/WebKit/Shared/WebPreferencesDefaultValues.h >index 7a88f2194029bea95978592513740ed137781e7e..1d07882bef39cabfa89d477f0d1fab87f81ee543 100644 >--- a/Source/WebKit/Shared/WebPreferencesDefaultValues.h >+++ b/Source/WebKit/Shared/WebPreferencesDefaultValues.h >@@ -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 >diff --git a/Source/WebKit/Shared/WebProcessCreationParameters.cpp b/Source/WebKit/Shared/WebProcessCreationParameters.cpp >index 11fc195ffca9aa2f1ce832054915f3a0e21b7ce5..475f208a949f2abc424611244cfe271d0e17325d 100644 >--- a/Source/WebKit/Shared/WebProcessCreationParameters.cpp >+++ b/Source/WebKit/Shared/WebProcessCreationParameters.cpp >@@ -69,6 +69,7 @@ void WebProcessCreationParameters::encode(IPC::Encoder& encoder) const > #if ENABLE(MEDIA_STREAM) > encoder << audioCaptureExtensionHandle; > encoder << shouldCaptureAudioInUIProcess; >+ encoder << shouldCaptureVideoInUIProcess; > encoder << shouldCaptureDisplayInUIProcess; > #endif > encoder << shouldUseTestingNetworkSession; >@@ -261,6 +262,8 @@ bool WebProcessCreationParameters::decode(IPC::Decoder& decoder, WebProcessCreat > > if (!decoder.decode(parameters.shouldCaptureAudioInUIProcess)) > return false; >+ if (!decoder.decode(parameters.shouldCaptureVideoInUIProcess)) >+ return false; > if (!decoder.decode(parameters.shouldCaptureDisplayInUIProcess)) > return false; > #endif >diff --git a/Source/WebKit/Shared/WebProcessCreationParameters.h b/Source/WebKit/Shared/WebProcessCreationParameters.h >index a9668496a90610d0041cff08bce10ddff36ae622..7b67f892c1c6bd53d4cecdc5edc93a6f81b07fd3 100644 >--- a/Source/WebKit/Shared/WebProcessCreationParameters.h >+++ b/Source/WebKit/Shared/WebProcessCreationParameters.h >@@ -93,6 +93,7 @@ struct WebProcessCreationParameters { > #if ENABLE(MEDIA_STREAM) > SandboxExtension::Handle audioCaptureExtensionHandle; > bool shouldCaptureAudioInUIProcess { false }; >+ bool shouldCaptureVideoInUIProcess { false }; > bool shouldCaptureDisplayInUIProcess { false }; > #endif > String mediaKeyStorageDirectory; >diff --git a/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h b/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h >index e7d60c3a6da9c5f1d45e7ddeae081545a8c51554..19dd0582e23de66c8b764844a19a9c9823e39e3e 100644 >--- a/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h >+++ b/Source/WebKit/UIProcess/API/APIProcessPoolConfiguration.h >@@ -144,6 +144,9 @@ public: > 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; } > >@@ -214,6 +217,7 @@ private: > 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; >diff --git a/Source/WebKit/UIProcess/API/C/WKPreferences.cpp b/Source/WebKit/UIProcess/API/C/WKPreferences.cpp >index 823174a29d94997854a07a1a39386179c0a2d8c0..9bc94b477548b1f961b5f019f298416bd42a9450 100644 >--- a/Source/WebKit/UIProcess/API/C/WKPreferences.cpp >+++ b/Source/WebKit/UIProcess/API/C/WKPreferences.cpp >@@ -2079,3 +2079,23 @@ bool WKPreferencesGetWebSQLDisabled(WKPreferencesRef preferencesRef) > { > 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(); >+} >diff --git a/Source/WebKit/UIProcess/API/C/WKPreferencesRef.h b/Source/WebKit/UIProcess/API/C/WKPreferencesRef.h >index 9716693f6d8603481951adea40e65df96857001c..88c475d754b40a066b77428a76b4b08c641f809e 100644 >--- a/Source/WebKit/UIProcess/API/C/WKPreferencesRef.h >+++ b/Source/WebKit/UIProcess/API/C/WKPreferencesRef.h >@@ -332,6 +332,11 @@ WK_EXPORT void WKPreferencesSetProcessSwapOnNavigationEnabled(WKPreferencesRef p > WK_EXPORT bool WKPreferencesGetWebSQLDisabled(WKPreferencesRef preferencesRef); > WK_EXPORT void WKPreferencesSetWebSQLDisabled(WKPreferencesRef preferencesRef, bool enabled); > >+void WKPreferencesSetCaptureAudioInUIProcessEnabled(WKPreferencesRef preferencesRef, bool flag); >+bool WKPreferencesGetCaptureAudioInUIProcessEnabled(WKPreferencesRef preferencesRef); >+void WKPreferencesSetCaptureVideoInUIProcessEnabled(WKPreferencesRef preferencesRef, bool flag); >+bool WKPreferencesGetCaptureVideoInUIProcessEnabled(WKPreferencesRef preferencesRef); >+ > #ifdef __cplusplus > } > #endif >diff --git a/Source/WebKit/UIProcess/WebPreferences.cpp b/Source/WebKit/UIProcess/WebPreferences.cpp >index 44a0a02b98bc6cb1b1312dd6e3a5bb24cf32d1d9..7002db2064cf6751d9b19e358b5460a92f2820f5 100644 >--- a/Source/WebKit/UIProcess/WebPreferences.cpp >+++ b/Source/WebKit/UIProcess/WebPreferences.cpp >@@ -139,6 +139,18 @@ void WebPreferences::updateBoolValueForInternalDebugFeatureKey(const String& key > > 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. > } >diff --git a/Source/WebKit/UIProcess/WebProcessPool.cpp b/Source/WebKit/UIProcess/WebProcessPool.cpp >index 413a9746ec386fa6770c9d982dac8102c735eaaa..f93476be6d2a8b07b56eba72ac560ab68f409c94 100644 >--- a/Source/WebKit/UIProcess/WebProcessPool.cpp >+++ b/Source/WebKit/UIProcess/WebProcessPool.cpp >@@ -919,6 +919,7 @@ void WebProcessPool::initializeNewWebProcess(WebProcessProxy& process, WebsiteDa > 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 @@ Ref<WebPageProxy> WebProcessPool::createWebPage(PageClient& pageClient, Ref<API: > > 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; > } >diff --git a/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp b/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp >index 7236a5b5d756a3c46d288ded086f11fc567244aa..9608e683f378b30c096d1fd2c3c09c6c275d61a1 100644 >--- a/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp >+++ b/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp >@@ -219,6 +219,8 @@ void UserMediaCaptureManager::initialize(const WebProcessCreationParameters& par > { > if (parameters.shouldCaptureAudioInUIProcess) > RealtimeMediaSourceCenter::setAudioFactory(*this); >+ if (parameters.shouldCaptureVideoInUIProcess) >+ RealtimeMediaSourceCenter::setVideoFactory(*this); > if (parameters.shouldCaptureDisplayInUIProcess) > RealtimeMediaSourceCenter::setDisplayCaptureFactory(*this); > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 192394
:
356582
|
356647