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

Reply via email to