Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: d97f5a09e4f10a05d93ad47f08ac293180c75f77
https://github.com/WebKit/WebKit/commit/d97f5a09e4f10a05d93ad47f08ac293180c75f77
Author: Andy Estes <[email protected]>
Date: 2024-02-23 (Fri, 23 Feb 2024)
Changed paths:
M Source/WebKit/Platform/cocoa/MediaCapability.h
M Source/WebKit/Platform/cocoa/MediaCapability.mm
M Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm
M Source/WebKit/UIProcess/WebPageProxy.cpp
M Source/WebKit/UIProcess/WebPageProxy.h
M Source/WebKit/WebKit.xcodeproj/project.pbxproj
Log Message:
-----------
getUserMedia camera stream lost on history pushState in iOS 17.4 Beta 4
https://bugs.webkit.org/show_bug.cgi?id=269846
rdar://123381737
Reviewed by Eric Carlson and Youenn Fablet.
When WebKit adopted media capability grants for camera capture we chose to tie
the lifetime of the
media environment to the top frame document's current URL, such that if the URL
changes (ignoring
fragment identifiers) then the current media environment is destroyed and a new
one is created. If
a capture session is active when the media environment changes then the system
will pause the
capture session as it's no longer associated with the current media
environment. The logic of
comparing URLs was meant as a proxy for detecting cross-document navigations
but failed to account
for same-document navigations that changed the path of the current URL (e.g.,
via pushState). Since
the origin associated with the media environment does not change during a
same-document navigation
there is no need to recreate the media environment.
Addressed this by moving the logic for creating and destroying media
environments to
WebPageProxy::didChangeMainDocument. Further, since only the top document's
origin is displayed to
the user in iOS's privacy accounting UI, changed MediaCapability to only track
a SecurityOrigin.
The logic for when to activate and deactivate a media environment's capability
remains unchanged.
Manually verified that this resolves the issue reported in bug #269846.
Unfortunately no new tests
are possible since the underlying platform support for media capabilities is
not available in
iOS Simulator.
* Source/WebKit/Platform/cocoa/MediaCapability.h:
* Source/WebKit/Platform/cocoa/MediaCapability.mm:
(WebKit::MediaCapability::MediaCapability):
(WebKit::m_mediaEnvironment):
(WebKit::MediaCapability::registrableDomain const): Deleted.
* Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm:
(WebKit::WebPageProxy::setMediaCapability):
(WebKit::WebPageProxy::deactivateMediaCapability):
(WebKit::WebPageProxy::resetMediaCapability):
(WebKit::WebPageProxy::updateMediaCapability):
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::didCommitLoadForFrame):
(WebKit::WebPageProxy::didChangeMainDocument):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
Canonical link: https://commits.webkit.org/275244@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes