Changeset 244553 in webkit


Ignore:
Timestamp:
Apr 23, 2019 11:15:39 AM (5 years ago)
Author:
timothy_horton@apple.com
Message:

Action sheet shares a stringified URL instead of a URL object
https://bugs.webkit.org/show_bug.cgi?id=197185
<rdar://problem/49962249>

Reviewed by Darin Adler.

  • UIProcess/Cocoa/WKShareSheet.h:
  • UIProcess/Cocoa/WKShareSheet.mm:

(-[WKShareSheet presentWithParameters:inRect:completionHandler:]):
(-[WKShareSheet presentWithParameters:completionHandler:]): Deleted.

  • UIProcess/Cocoa/WebViewImpl.mm:

(WebKit::WebViewImpl::showShareSheet):

  • UIProcess/ios/PageClientImplIOS.mm:

(WebKit::PageClientImpl::showShareSheet):
Make it possible to optionally provide WKShareSheet with
a rect to present relative to.

  • UIProcess/ios/WKContentViewInteraction.h:
  • UIProcess/ios/WKContentViewInteraction.mm:

(-[WKContentView _showShareSheet:inRect:completionHandler:]):
(-[WKContentView actionSheetAssistant:shareElementWithURL:rect:]):
(-[WKContentView _showShareSheet:completionHandler:]): Deleted.
Instead of stringifying the URL and using the text selection assistant's
share method, hand WKShareSheet a proper URL.

Location:
trunk/Source/WebKit
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r244546 r244553  
     12019-04-23  Tim Horton  <timothy_horton@apple.com>
     2
     3        Action sheet shares a stringified URL instead of a URL object
     4        https://bugs.webkit.org/show_bug.cgi?id=197185
     5        <rdar://problem/49962249>
     6
     7        Reviewed by Darin Adler.
     8
     9        * UIProcess/Cocoa/WKShareSheet.h:
     10        * UIProcess/Cocoa/WKShareSheet.mm:
     11        (-[WKShareSheet presentWithParameters:inRect:completionHandler:]):
     12        (-[WKShareSheet presentWithParameters:completionHandler:]): Deleted.
     13        * UIProcess/Cocoa/WebViewImpl.mm:
     14        (WebKit::WebViewImpl::showShareSheet):
     15        * UIProcess/ios/PageClientImplIOS.mm:
     16        (WebKit::PageClientImpl::showShareSheet):
     17        Make it possible to optionally provide WKShareSheet with
     18        a rect to present relative to.
     19
     20        * UIProcess/ios/WKContentViewInteraction.h:
     21        * UIProcess/ios/WKContentViewInteraction.mm:
     22        (-[WKContentView _showShareSheet:inRect:completionHandler:]):
     23        (-[WKContentView actionSheetAssistant:shareElementWithURL:rect:]):
     24        (-[WKContentView _showShareSheet:completionHandler:]): Deleted.
     25        Instead of stringifying the URL and using the text selection assistant's
     26        share method, hand WKShareSheet a proper URL.
     27
    1282019-04-23  Ryosuke Niwa  <rniwa@webkit.org>
    229
  • trunk/Source/WebKit/UIProcess/Cocoa/WKShareSheet.h

    r242339 r244553  
    3939- (instancetype)initWithView:(WKWebView *)view;
    4040
    41 - (void)presentWithParameters:(const WebCore::ShareDataWithParsedURL&)data completionHandler:(WTF::CompletionHandler<void(bool)>&&)completionHandler;
     41- (void)presentWithParameters:(const WebCore::ShareDataWithParsedURL&)data inRect:(WTF::Optional<WebCore::FloatRect>)rect completionHandler:(WTF::CompletionHandler<void(bool)>&&)completionHandler;
    4242- (void)dismiss;
    4343
  • trunk/Source/WebKit/UIProcess/Cocoa/WKShareSheet.mm

    r242339 r244553  
    6969}
    7070
    71 - (void)presentWithParameters:(const WebCore::ShareDataWithParsedURL &)data completionHandler:(WTF::CompletionHandler<void(bool)>&&)completionHandler
     71- (void)presentWithParameters:(const WebCore::ShareDataWithParsedURL &)data inRect:(WTF::Optional<WebCore::FloatRect>)rect completionHandler:(WTF::CompletionHandler<void(bool)>&&)completionHandler
    7272{
    7373    auto shareDataArray = adoptNS([[NSMutableArray alloc] init]);
     
    104104    // WKShareSheet can be released under NSSharingServicePicker delegate callbacks.
    105105    RetainPtr<WKShareSheet> protector(self);
    106    
    107     NSPoint location = [NSEvent mouseLocation];
    108     NSRect mouseLocationRect = NSMakeRect(location.x, location.y, 1.0, 1.0);
    109     NSRect mouseLocationInWindow = [webView.window convertRectFromScreen:mouseLocationRect];
    110     NSRect mouseLocationInView = [webView convertRect:mouseLocationInWindow fromView:nil];
    111     [_sharingServicePicker showRelativeToRect:mouseLocationInView ofView:webView preferredEdge:NSMinYEdge];
     106    NSRect presentationRect;
     107
     108    if (rect)
     109        presentationRect = *rect;
     110    else {
     111        NSPoint location = [NSEvent mouseLocation];
     112        NSRect mouseLocationRect = NSMakeRect(location.x, location.y, 1.0, 1.0);
     113        NSRect mouseLocationInWindow = [webView.window convertRectFromScreen:mouseLocationRect];
     114        presentationRect = [webView convertRect:mouseLocationInWindow fromView:nil];
     115    }
     116    [_sharingServicePicker showRelativeToRect:presentationRect ofView:webView preferredEdge:NSMinYEdge];
    112117#else
    113118    _shareSheetViewController = adoptNS([[UIActivityViewController alloc] initWithActivityItems:shareDataArray.get() applicationActivities:nil]);
     
    118123   
    119124    UIPopoverPresentationController *popoverController = [_shareSheetViewController popoverPresentationController];
    120     popoverController._centersPopoverIfSourceViewNotSet = YES;
     125    if (rect) {
     126        popoverController.sourceView = webView;
     127        popoverController.sourceRect = *rect;
     128    } else
     129        popoverController._centersPopoverIfSourceViewNotSet = YES;
    121130   
    122131    _presentationViewController = [UIViewController _viewControllerForFullScreenPresentationFromView:webView];
  • trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm

    r244545 r244553  
    27832783    [_shareSheet setDelegate:view];
    27842784   
    2785     [_shareSheet presentWithParameters:data completionHandler:WTFMove(completionHandler)];
     2785    [_shareSheet presentWithParameters:data inRect:WTF::nullopt completionHandler:WTFMove(completionHandler)];
    27862786}
    27872787   
  • trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm

    r244085 r244553  
    587587bool PageClientImpl::showShareSheet(const ShareDataWithParsedURL& shareData, WTF::CompletionHandler<void(bool)>&& completionHandler)
    588588{
    589     [m_contentView _showShareSheet:shareData completionHandler:WTFMove(completionHandler)];
     589    [m_contentView _showShareSheet:shareData inRect:WTF::nullopt completionHandler:WTFMove(completionHandler)];
    590590    return true;
    591591}
  • trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h

    r244370 r244553  
    430430- (void)_showPlaybackTargetPicker:(BOOL)hasVideo fromRect:(const WebCore::IntRect&)elementRect routeSharingPolicy:(WebCore::RouteSharingPolicy)policy routingContextUID:(NSString *)contextUID;
    431431- (void)_showRunOpenPanel:(API::OpenPanelParameters*)parameters resultListener:(WebKit::WebOpenPanelResultListenerProxy*)listener;
    432 - (void)_showShareSheet:(const WebCore::ShareDataWithParsedURL&)shareData completionHandler:(WTF::CompletionHandler<void(bool)>&&)completionHandler;
     432- (void)_showShareSheet:(const WebCore::ShareDataWithParsedURL&)shareData inRect:(WTF::Optional<WebCore::FloatRect>)rect completionHandler:(WTF::CompletionHandler<void(bool)>&&)completionHandler;
    433433- (void)dismissFilePicker;
    434434- (void)_didHandleKeyEvent:(::WebEvent *)event eventWasHandled:(BOOL)eventWasHandled;
  • trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm

    r244474 r244553  
    57945794}
    57955795
    5796 - (void)_showShareSheet:(const WebCore::ShareDataWithParsedURL&)data completionHandler:(CompletionHandler<void(bool)>&&)completionHandler
     5796- (void)_showShareSheet:(const WebCore::ShareDataWithParsedURL&)data inRect:(WTF::Optional<WebCore::FloatRect>)rect completionHandler:(CompletionHandler<void(bool)>&&)completionHandler
    57975797{
    57985798#if !PLATFORM(WATCHOS) && !PLATFORM(APPLETV)
     
    58035803    [_shareSheet setDelegate:self];
    58045804   
    5805     [_shareSheet presentWithParameters:data completionHandler:WTFMove(completionHandler)];
     5805    [_shareSheet presentWithParameters:data inRect:rect completionHandler:WTFMove(completionHandler)];
    58065806#endif
    58075807}
     
    59045904- (void)actionSheetAssistant:(WKActionSheetAssistant *)assistant shareElementWithURL:(NSURL *)url rect:(CGRect)boundingRect
    59055905{
    5906     if (_textSelectionAssistant)
    5907         [_textSelectionAssistant showShareSheetFor:WTF::userVisibleString(url) fromRect:boundingRect];
     5906    WebCore::ShareDataWithParsedURL shareData;
     5907    shareData.url = { url };
     5908    [self _showShareSheet:shareData inRect: { [self convertRect:boundingRect toView:_webView] } completionHandler:[] (bool success) { }];
    59085909}
    59095910
Note: See TracChangeset for help on using the changeset viewer.