Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: f134a54c03b71e8e3c4da00af4612e28769cecdf
      
https://github.com/WebKit/WebKit/commit/f134a54c03b71e8e3c4da00af4612e28769cecdf
  Author: Wenson Hsieh <wenson_hs...@apple.com>
  Date:   2022-10-11 (Tue, 11 Oct 2022)

  Changed paths:
    M Source/WebKit/Shared/EditorState.cpp
    M Source/WebKit/Shared/EditorState.h
    M Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm
    M Source/WebKit/WebProcess/WebPage/WebPage.cpp
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/PasteMixedContent.mm

  Log Message:
  -----------
  [iOS] Paste alert should not show up in WebKit apps when presenting the edit 
menu
https://bugs.webkit.org/show_bug.cgi?id=246364
rdar://100730751

Reviewed by Aditya Keerthi.

In r235079, we made it possible for the Paste action to show up in the callout 
bar (i.e. edit menu)
when the pasteboard only contains the 
`"com.apple.WebKit.custom-pasteboard-data"` type, as long as
the custom pasteboard data was written by the same origin. To achieve this, we 
inspect the contents
of the custom pasteboard data in `-canPerformActionForWebView:withSender:`, 
when determining whether
"Paste" is a valid action in the web view, which requires us to access 
pasteboard data before the
user has explicitly pasted.

However, in iOS 16, this now causes a programmatic paste prompt to (rightfully) 
show up, since we're
reading from the pasteboard outside of a user-driven paste. To mitigate this, 
we refactor the code
such that we'll return `YES` as long as the 
`"com.apple.WebKit.custom-pasteboard-data"` type is
present.

Note that this still means we'll avoid exposing custom pasteboard data across 
origins on iOS — just
that we now unconditionally show the Paste action when 
`"com.apple.WebKit.custom-pasteboard-data"`
is present, in order to avoid reading from the pasteboard.

While it's technically possible for us to preserve shipping behavior by writing 
a new pasteboard
type that contains the security origin string, I opted to avoid this approach, 
since it would allow
native apps to observe which websites the user had copied content from, 
*without* triggering a
system paste notification.

* Source/WebKit/Shared/EditorState.cpp:
(WebKit::EditorState::encode const):
(WebKit::EditorState::decode):
* Source/WebKit/Shared/EditorState.h:

Additionally remove `EditorState::originIdentifierForPasteboard`, now that it's 
unused.

* Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView supportedPasteboardTypesForCurrentSelection]):
(-[WKContentView canPerformActionForWebView:withSender:]):
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::editorState const):
* Tools/TestWebKitAPI/Tests/WebKitCocoa/PasteMixedContent.mm:
(TestWebKitAPI::PasteboardAccessChecker::PasteboardAccessChecker):
(TestWebKitAPI::PasteboardAccessChecker::didAccessPasteboard const):
(TestWebKitAPI::PasteboardAccessChecker::returnNil):
(TestWebKitAPI::TEST):

Adjust this API test to verify that `-canPerformAction:withSender:` now returns 
`YES`, and does not
attempt to read from the pasteboard in doing so.

Canonical link: https://commits.webkit.org/255418@main


_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to