Title: [264383] trunk
Revision
264383
Author
[email protected]
Date
2020-07-14 17:20:21 -0700 (Tue, 14 Jul 2020)

Log Message

REGRESSION (r264101): Sharing a link attaches an image instead of the URL
https://bugs.webkit.org/show_bug.cgi?id=214329
<rdar://problem/65513607>

Reviewed by Tim Horton and Devin Rousso.

Source/WebKit:

r264101 added logic that attempts to share an activated (i.e. long-pressed) element as an image, if the image
URL scheme for the element is equal to "data" (ignoring case sensitivity). However, in the case where the image
URL is nil, the call to `[element.imageURL.scheme caseInsensitiveCompare:@"data"]` is 0, which (conveniently) is
equal to `NSOrderedSame`. This causes us to incorrectly proceed by sharing the element as an image.

Fix this by going through URL::protocolIsData(), so we don't end up with 0 (`NSOrderedSame`) when
`element.imageURL.scheme` is `nil`.

Test: ShareSheetTests.ShareAnchorElementAsURL

* UIProcess/ios/WKActionSheetAssistant.mm:
(-[WKActionSheetAssistant handleElementActionWithType:element:needsInteraction:]):

Tools:

Add a new API test to verify that the "share action" for a link shares the URL, rather than a snapshot of the
anchor element.

* TestWebKitAPI/Tests/ios/ShareSheetTests.mm:

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (264382 => 264383)


--- trunk/Source/WebKit/ChangeLog	2020-07-14 23:36:58 UTC (rev 264382)
+++ trunk/Source/WebKit/ChangeLog	2020-07-15 00:20:21 UTC (rev 264383)
@@ -1,5 +1,26 @@
 2020-07-14  Wenson Hsieh  <[email protected]>
 
+        REGRESSION (r264101): Sharing a link attaches an image instead of the URL
+        https://bugs.webkit.org/show_bug.cgi?id=214329
+        <rdar://problem/65513607>
+
+        Reviewed by Tim Horton and Devin Rousso.
+
+        r264101 added logic that attempts to share an activated (i.e. long-pressed) element as an image, if the image
+        URL scheme for the element is equal to "data" (ignoring case sensitivity). However, in the case where the image
+        URL is nil, the call to `[element.imageURL.scheme caseInsensitiveCompare:@"data"]` is 0, which (conveniently) is
+        equal to `NSOrderedSame`. This causes us to incorrectly proceed by sharing the element as an image.
+
+        Fix this by going through URL::protocolIsData(), so we don't end up with 0 (`NSOrderedSame`) when
+        `element.imageURL.scheme` is `nil`.
+
+        Test: ShareSheetTests.ShareAnchorElementAsURL
+
+        * UIProcess/ios/WKActionSheetAssistant.mm:
+        (-[WKActionSheetAssistant handleElementActionWithType:element:needsInteraction:]):
+
+2020-07-14  Wenson Hsieh  <[email protected]>
+
         [iOS] The completion handler in -handleKeyWebEvent:withCompletionHandler: is sometimes never called
         https://bugs.webkit.org/show_bug.cgi?id=214295
         <rdar://problem/60539389>

Modified: trunk/Source/WebKit/UIProcess/ios/WKActionSheetAssistant.mm (264382 => 264383)


--- trunk/Source/WebKit/UIProcess/ios/WKActionSheetAssistant.mm	2020-07-14 23:36:58 UTC (rev 264382)
+++ trunk/Source/WebKit/UIProcess/ios/WKActionSheetAssistant.mm	2020-07-15 00:20:21 UTC (rev 264383)
@@ -828,7 +828,7 @@
         [delegate actionSheetAssistant:self performAction:WebKit::SheetAction::SaveImage];
         break;
     case _WKElementActionTypeShare:
-        if ([element.imageURL.scheme caseInsensitiveCompare:@"data"] == NSOrderedSame && element.image && [delegate respondsToSelector:@selector(actionSheetAssistant:shareElementWithImage:rect:)])
+        if (URL(element.imageURL).protocolIsData() && element.image && [delegate respondsToSelector:@selector(actionSheetAssistant:shareElementWithImage:rect:)])
             [delegate actionSheetAssistant:self shareElementWithImage:element.image rect:element.boundingRect];
         else
             [delegate actionSheetAssistant:self shareElementWithURL:element.URL ?: element.imageURL rect:element.boundingRect];

Modified: trunk/Tools/ChangeLog (264382 => 264383)


--- trunk/Tools/ChangeLog	2020-07-14 23:36:58 UTC (rev 264382)
+++ trunk/Tools/ChangeLog	2020-07-15 00:20:21 UTC (rev 264383)
@@ -1,3 +1,16 @@
+2020-07-14  Wenson Hsieh  <[email protected]>
+
+        REGRESSION (r264101): Sharing a link attaches an image instead of the URL
+        https://bugs.webkit.org/show_bug.cgi?id=214329
+        <rdar://problem/65513607>
+
+        Reviewed by Tim Horton and Devin Rousso.
+
+        Add a new API test to verify that the "share action" for a link shares the URL, rather than a snapshot of the
+        anchor element.
+
+        * TestWebKitAPI/Tests/ios/ShareSheetTests.mm:
+
 2020-07-14  Alex Christensen  <[email protected]>
 
         REGRESSION(r262341) URL::createCFURL should produce a CFURL that uses UTF-8 to decode its percent-encoded sequences

Modified: trunk/Tools/TestWebKitAPI/Tests/ios/ShareSheetTests.mm (264382 => 264383)


--- trunk/Tools/TestWebKitAPI/Tests/ios/ShareSheetTests.mm	2020-07-14 23:36:58 UTC (rev 264382)
+++ trunk/Tools/TestWebKitAPI/Tests/ios/ShareSheetTests.mm	2020-07-15 00:20:21 UTC (rev 264383)
@@ -101,6 +101,24 @@
     TestWebKitAPI::Util::run(&done);
 }
 
+TEST(ShareSheetTests, ShareAnchorElementAsURL)
+{
+    auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)]);
+    auto observer = adoptNS([[ShareSheetObserver alloc] init]);
+    [webView setUIDelegate:observer.get()];
+    [webView synchronouslyLoadTestPageNamed:@"link-and-input"];
+
+    __block bool done = false;
+    [observer setActivityItemsHandler:^(NSArray *activityItems) {
+        EXPECT_EQ(1UL, activityItems.count);
+        EXPECT_WK_STREQ("https://www.apple.com/", [[activityItems objectAtIndex:0] absoluteString]);
+        done = true;
+    }];
+
+    showShareSheet(webView.get(), observer.get(), CGPointMake(100, 100));
+    TestWebKitAPI::Util::run(&done);
+}
+
 #endif // !PLATFORM(WATCHOS) && !PLATFORM(APPLETV)
 
 } // namespace TestWebKitAPI
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to