WebKit Bugzilla
Attachment 357077 Details for
Bug 192607
: Add an SPI to mute camera/microphone capture as soon as page is no longer visible
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
WIP
bug-192607-20181211142848.patch (text/plain), 7.61 KB, created by
youenn fablet
on 2018-12-11 14:28:48 PST
(
hide
)
Description:
WIP
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2018-12-11 14:28:48 PST
Size:
7.61 KB
patch
obsolete
>Subversion Revision: 239028 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index b88fc27b804a01e1578665eae36d4fbd588b163c..2a4e2f4dbd6d61001b386b19f70d8920175cb02c 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,26 @@ >+2018-12-11 Youenn Fablet <youenn@apple.com> >+ >+ Add an SPI to mute camera/microphone capture as soon as page is no longer visible >+ https://bugs.webkit.org/show_bug.cgi?id=192607 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * UIProcess/API/APIPageConfiguration.cpp: >+ (API::PageConfiguration::copy const): >+ * UIProcess/API/APIPageConfiguration.h: >+ (API::PageConfiguration::setIsMediaCaptureMutedWhenNotVisible): >+ (API::PageConfiguration::isMediaCaptureMutedWhenNotVisible const): >+ * UIProcess/API/Cocoa/WKWebViewConfiguration.mm: >+ (-[WKWebViewConfiguration _setIsMediaCaptureMutedWhenNotVisible:]): >+ (-[WKWebViewConfiguration _isMediaCaptureMutedWhenNotVisible]): >+ * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h: >+ * UIProcess/WebPageProxy.cpp: >+ (WebKit::WebPageProxy::dispatchActivityStateChange): >+ (WebKit::WebPageProxy::setMediaStreamCaptureMuted): >+ (WebKit::WebPageProxy::viewIsChangingVisibility): >+ (WebKit::WebPageProxy::viewIsBecomingVisible): Deleted. >+ * UIProcess/WebPageProxy.h: >+ > 2018-12-10 Youenn Fablet <youenn@apple.com> > > Remove derived classes of RealtimeMediaSourceCenter >diff --git a/Source/WebKit/UIProcess/API/APIPageConfiguration.cpp b/Source/WebKit/UIProcess/API/APIPageConfiguration.cpp >index 91270ee7ddb8c187c00bcccf5a41fc35ef3b3b10..30ba2d270175721ce865e5dd293aa48e794ffbb6 100644 >--- a/Source/WebKit/UIProcess/API/APIPageConfiguration.cpp >+++ b/Source/WebKit/UIProcess/API/APIPageConfiguration.cpp >@@ -85,6 +85,8 @@ Ref<PageConfiguration> PageConfiguration::copy() const > for (auto& pair : this->m_urlSchemeHandlers) > copy->m_urlSchemeHandlers.set(pair.key, pair.value.copyRef()); > >+ copy->m_isMediaCaptureMutedWhenNotVisible = m_isMediaCaptureMutedWhenNotVisible; >+ > return copy; > } > >diff --git a/Source/WebKit/UIProcess/API/APIPageConfiguration.h b/Source/WebKit/UIProcess/API/APIPageConfiguration.h >index 67ac5c66d895168c310de053b3a09c01ef067a76..b940c42033bc7b217291e5496bae11404ce6e39f 100644 >--- a/Source/WebKit/UIProcess/API/APIPageConfiguration.h >+++ b/Source/WebKit/UIProcess/API/APIPageConfiguration.h >@@ -124,6 +124,9 @@ public: > void setURLSchemeHandlerForURLScheme(Ref<WebKit::WebURLSchemeHandler>&&, const WTF::String&); > const HashMap<WTF::String, Ref<WebKit::WebURLSchemeHandler>>& urlSchemeHandlers() { return m_urlSchemeHandlers; } > >+ void setIsMediaCaptureMutedWhenNotVisible(bool value) { m_isMediaCaptureMutedWhenNotVisible = value; } >+ bool isMediaCaptureMutedWhenNotVisible() const { return m_isMediaCaptureMutedWhenNotVisible; } >+ > private: > > RefPtr<WebKit::WebProcessPool> m_processPool; >@@ -160,6 +163,8 @@ private: > #endif > > HashMap<WTF::String, Ref<WebKit::WebURLSchemeHandler>> m_urlSchemeHandlers; >+ >+ bool m_isMediaCaptureMutedWhenNotVisible { true }; > }; > > } // namespace API >diff --git a/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.mm b/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.mm >index d287fd95bdc79bc9486c3ed4f836e6ec003203ec..d90975bbc0a46988fd8421f69091e853c8863a79 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.mm >+++ b/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.mm >@@ -1037,6 +1037,16 @@ - (BOOL)_editableImagesEnabled > return _editableImagesEnabled; > } > >+- (void)_setIsMediaCaptureMutedWhenNotVisible:(BOOL)enabled >+{ >+ _pageConfiguration->setIsMediaCaptureMutedWhenNotVisible(enabled); >+} >+ >+- (BOOL)_isMediaCaptureMutedWhenNotVisible >+{ >+ return _pageConfiguration->isMediaCaptureMutedWhenNotVisible(); >+} >+ > @end > > @implementation WKWebViewConfiguration (WKDeprecated) >diff --git a/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h b/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h >index 37c430fbe8a5160df669e013e0e12e51617799bd..1b2c73aeba0cbf95c9ff274747d8b83bc3b164c0 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h >+++ b/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h >@@ -107,6 +107,8 @@ typedef NS_ENUM(NSUInteger, _WKDragLiftDelay) { > > @property (nonatomic, setter=_setEditableImagesEnabled:) BOOL _editableImagesEnabled WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); > >+@property (nonatomic, setter=_setIsMediaCaptureMutedWhenNotVisible:) BOOL _isMediaCaptureMutedWhenNotVisible WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); >+ > @end > > #endif >diff --git a/Source/WebKit/UIProcess/WebPageProxy.cpp b/Source/WebKit/UIProcess/WebPageProxy.cpp >index 76a9653f4bd0236fa32bb342c4aa6eb85220a2d9..368e86f97d57c506c96450aa777c1f17ff453f46 100644 >--- a/Source/WebKit/UIProcess/WebPageProxy.cpp >+++ b/Source/WebKit/UIProcess/WebPageProxy.cpp >@@ -1662,8 +1662,8 @@ void WebPageProxy::dispatchActivityStateChange() > if ((changed & ActivityState::WindowIsActive) && isViewWindowActive()) > updateCurrentModifierState(); > >- if ((m_potentiallyChangedActivityStateFlags & ActivityState::IsVisible) && isViewVisible()) >- viewIsBecomingVisible(); >+ if ((m_potentiallyChangedActivityStateFlags & ActivityState::IsVisible)) >+ viewIsChangingVisibility(); > > bool isNowInWindow = (changed & ActivityState::IsInWindow) && isInWindow(); > // We always want to wait for the Web process to reply if we've been in-window before and are coming back in-window. >@@ -1980,9 +1980,10 @@ void WebPageProxy::setEditable(bool editable) > > void WebPageProxy::setMediaStreamCaptureMuted(bool muted) > { >- if (muted) >+ if (muted) { >+ m_isCaptureMutedAsNoLongerVisible = false; > setMuted(m_mutedState | WebCore::MediaProducer::CaptureDevicesAreMuted); >- else >+ } else > setMuted(m_mutedState & ~WebCore::MediaProducer::CaptureDevicesAreMuted); > } > >@@ -4106,9 +4107,19 @@ void WebPageProxy::didChangeMainDocument(uint64_t frameID) > #endif > } > >-void WebPageProxy::viewIsBecomingVisible() >+void WebPageProxy::viewIsChangingVisibility() > { > #if ENABLE(MEDIA_STREAM) >+ if (!isViewVisible()) { >+ if (configuration().isMediaCaptureMutedWhenNotVisible() && m_activityState.contains(WebCore::ActivityState::IsCapturingMedia)) >+ m_isCaptureMutedAsNoLongerVisible = true; >+ setMuted(m_mutedState | WebCore::MediaProducer::CaptureDevicesAreMuted); >+ return; >+ } >+ if (m_isCaptureMutedAsNoLongerVisible) { >+ m_isCaptureMutedAsNoLongerVisible = false; >+ setMuted(m_mutedState & ~WebCore::MediaProducer::CaptureDevicesAreMuted); >+ } > userMediaPermissionRequestManager().viewIsBecomingVisible(); > #endif > } >diff --git a/Source/WebKit/UIProcess/WebPageProxy.h b/Source/WebKit/UIProcess/WebPageProxy.h >index 53d8c3db094df7061d83c6e52e08290e1f37e126..a92e76fbd72779a89cd23498b9da99364f256eaf 100644 >--- a/Source/WebKit/UIProcess/WebPageProxy.h >+++ b/Source/WebKit/UIProcess/WebPageProxy.h >@@ -1856,7 +1856,7 @@ private: > void handleMessage(IPC::Connection&, const String& messageName, const UserData& messageBody); > void handleSynchronousMessage(IPC::Connection&, const String& messageName, const UserData& messageBody, UserData& returnUserData); > >- void viewIsBecomingVisible(); >+ void viewIsChangingVisibility(); > > void stopAllURLSchemeTasks(); > >@@ -2298,6 +2298,8 @@ private: > #if HAVE(PENCILKIT) > std::unique_ptr<EditableImageController> m_editableImageController; > #endif >+ >+ bool m_isCaptureMutedAsNoLongerVisible { false }; > }; > > } // namespace WebKit
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 192607
: 357077