[webkit-changes] [WebKit/WebKit] 1358c8: REGRESSION (272448.703 at safari-7618-branch): [iOS] ...

Aditya Keerthi noreply at github.com
Wed May 15 15:00:48 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 1358c81b18526a7f44d21b66983c82e59ba44056
      https://github.com/WebKit/WebKit/commit/1358c81b18526a7f44d21b66983c82e59ba44056
  Author: Aditya Keerthi <akeerthi at apple.com>
  Date:   2024-05-15 (Wed, 15 May 2024)

  Changed paths:
    A Source/WebKit/UIProcess/Cocoa/PickerDismissalReason.h
    M Source/WebKit/UIProcess/Cocoa/WKContactPicker.h
    M Source/WebKit/UIProcess/Cocoa/WKContactPicker.mm
    M Source/WebKit/UIProcess/Cocoa/WKShareSheet.h
    M Source/WebKit/UIProcess/Cocoa/WKShareSheet.mm
    M Source/WebKit/UIProcess/ios/UIKitUtilities.h
    M Source/WebKit/UIProcess/ios/UIKitUtilities.mm
    M Source/WebKit/UIProcess/ios/WKContentView.mm
    M Source/WebKit/UIProcess/ios/WKContentViewInteraction.h
    M Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm
    M Source/WebKit/UIProcess/ios/WKPDFView.mm
    M Source/WebKit/UIProcess/ios/forms/WKFileUploadPanel.h
    M Source/WebKit/UIProcess/ios/forms/WKFileUploadPanel.mm
    M Source/WebKit/UIProcess/mac/WebViewImpl.mm
    M Source/WebKit/WebKit.xcodeproj/project.pbxproj

  Log Message:
  -----------
  REGRESSION (272448.703 at safari-7618-branch): [iOS] <input type=file> camera capture instantly dismisses
rdar://125046135

Reviewed by Abrar Rahman Protyasha and Wenson Hsieh.

272448.703 at safari-7618-branch added logic to dismiss presented pickers, such as
the file upload panel, when the `WKWebView` was removed from the hierarchy. The
behavior is necessary to avoid scenarios where a picker can be displayed over a
site that's unrelated to the one requesting the information.

While that solution is correct for modal presentations, it is incorrect for
fullscreen presentations, which remove views from the hierarchy following
presentation. The camera view controller uses a fullscreen presentation.
Consequently, once it gets presented, the web view is removed from the
hierarchy, and following 272448.703 at safari-7618-branch, it is instantly
dismissed.

To fix, reduce the scope of the previous fix to exclude fullscreen presentations.
In this case, there is no need to dismiss presented view controllers, as the
web view content is already hidden.

Note that there is no way to detect whether a view was removed from the hierarchy
due to a fullscreen presentation. Consequently, the solution checks the status
of various presented pickers.

* Source/WebKit/UIProcess/Cocoa/PickerDismissalReason.h:

Introduce `PickerDismissalReason`s to control the dimissal behavior.

In particular, `ViewRemoved` now checks for fullscreen presentations, to avoid
instant dismissal.

* Source/WebKit/UIProcess/Cocoa/WKContactPicker.h:
* Source/WebKit/UIProcess/Cocoa/WKContactPicker.mm:
(-[WKContactPicker dismissIfNeededWithReason:]):
* Source/WebKit/UIProcess/Cocoa/WKShareSheet.h:
* Source/WebKit/UIProcess/Cocoa/WKShareSheet.mm:
(-[WKShareSheet dismissIfNeededWithReason:]):
* Source/WebKit/UIProcess/ios/UIKitUtilities.h:
* Source/WebKit/UIProcess/ios/UIKitUtilities.mm:
(-[UIViewController _wk_isInFullscreenPresentation]):
* Source/WebKit/UIProcess/ios/WKContentView.mm:
(-[WKContentView willMoveToWindow:]):
* Source/WebKit/UIProcess/ios/WKContentViewInteraction.h:
* Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView cleanUpInteraction]):
(-[WKContentView dismissFilePicker]):
(-[WKContentView _showShareSheet:inRect:completionHandler:]):
(-[WKContentView dismissPickersIfNeededWithReason:]):
(-[WKContentView dismissPickers]): Deleted.
* Source/WebKit/UIProcess/ios/WKPDFView.mm:
(-[WKPDFView dealloc]):

`ProcessExited` is used here, since it has the desired semantics.

In effect, the remote process of the host view controller is exited here.

(-[WKPDFView actionSheetAssistant:shareElementWithURL:rect:]):
* Source/WebKit/UIProcess/ios/forms/WKFileUploadPanel.h:
* Source/WebKit/UIProcess/ios/forms/WKFileUploadPanel.mm:
(-[WKFileUploadPanel dismissIfNeededWithReason:]):
* Source/WebKit/UIProcess/mac/WebViewImpl.mm:
(WebKit::WebViewImpl::showShareSheet):
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:

Originally-landed-as: 272448.818 at safari-7618-branch (1db2f6a6a042). rdar://128086989
Canonical link: https://commits.webkit.org/278827@main



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list