⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 249171 in webkit


Ignore:
Timestamp:
Aug 27, 2019, 2:14:56 PM (7 years ago)
Author:
commit-queue@webkit.org
Message:

Populate alternate URL for _WKActivatedElementInfo in UIContextMenu SPI.
https://bugs.webkit.org/show_bug.cgi?id=201165.
rdar://problem/54729648.

Patch by James Savage <James Savage> on 2019-08-27
Reviewed by Dean Jackson.

  • UIProcess/API/APIContextMenuElementInfo.h:
  • UIProcess/API/APIContextMenuElementInfo.cpp:

(API::ContextMenuElementInfo::ContextMenuElementInfo): Initialize new memeber.

  • UIProcess/API/Cocoa/WKContextMenuElementInfo.mm:

(-[WKContextMenuElementInfo _activatedElementInfo]): Use new initializer.

  • UIProcess/API/Cocoa/WKWebView.mm:

(-[WKWebView _requestActivatedElementAtPosition:completionBlock:]): Ditto.

  • UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h:
  • UIProcess/API/Cocoa/_WKActivatedElementInfo.mm:

(+[_WKActivatedElementInfo activatedElementInfoWithInteractionInformationAtPosition:userInfo:]):

Ditto.

(-[_WKActivatedElementInfo _initWithInteractionInformationAtPosition:userInfo:]): Set new ivar.
(+[_WKActivatedElementInfo activatedElementInfoWithInteractionInformationAtPosition:]): Deleted.
(-[_WKActivatedElementInfo _initWithInteractionInformationAtPosition:]): Deleted.

  • UIProcess/ios/WKContentViewInteraction.mm:

(-[WKContentView assignLegacyDataForContextMenuInteraction]): Use new initializer.
(-[WKContentView continueContextMenuInteraction:]): If the context menu is being generated for

an image, and we do not have a URL associated with the position information, try to
generate one using existing SPI. This change also passes through the userInfo via a new
property on _WKActivatedElementInfo. We only do this for the SPI version of this delegate
method, because the API is not called for image previews.

(-[WKContentView _contextMenuInteraction:overrideSuggestedActionsForConfiguration:]): Use new

initializer.

Location:
trunk/Source/WebKit
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r249158 r249171  
     12019-08-27  James Savage  <james.savage@apple.com>
     2
     3        Populate alternate URL for _WKActivatedElementInfo in UIContextMenu SPI.
     4        https://bugs.webkit.org/show_bug.cgi?id=201165.
     5        rdar://problem/54729648.
     6
     7        Reviewed by Dean Jackson.
     8
     9        * UIProcess/API/APIContextMenuElementInfo.h:
     10        * UIProcess/API/APIContextMenuElementInfo.cpp:
     11        (API::ContextMenuElementInfo::ContextMenuElementInfo): Initialize new memeber.
     12
     13        * UIProcess/API/Cocoa/WKContextMenuElementInfo.mm:
     14        (-[WKContextMenuElementInfo _activatedElementInfo]): Use new initializer.
     15
     16        * UIProcess/API/Cocoa/WKWebView.mm:
     17        (-[WKWebView _requestActivatedElementAtPosition:completionBlock:]): Ditto.
     18
     19        * UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h:
     20        * UIProcess/API/Cocoa/_WKActivatedElementInfo.mm:
     21        (+[_WKActivatedElementInfo activatedElementInfoWithInteractionInformationAtPosition:userInfo:]):
     22            Ditto.
     23        (-[_WKActivatedElementInfo _initWithInteractionInformationAtPosition:userInfo:]): Set new ivar.
     24        (+[_WKActivatedElementInfo activatedElementInfoWithInteractionInformationAtPosition:]): Deleted.
     25        (-[_WKActivatedElementInfo _initWithInteractionInformationAtPosition:]): Deleted.
     26
     27        * UIProcess/ios/WKContentViewInteraction.mm:
     28        (-[WKContentView assignLegacyDataForContextMenuInteraction]): Use new initializer.
     29        (-[WKContentView continueContextMenuInteraction:]): If the context menu is being generated for
     30            an image, and we do not have a URL associated with the position information, try to
     31            generate one using existing SPI. This change also passes through the userInfo via a new
     32            property on _WKActivatedElementInfo. We only do this for the SPI version of this delegate
     33            method, because the API is not called for image previews.
     34        (-[WKContentView _contextMenuInteraction:overrideSuggestedActionsForConfiguration:]): Use new
     35            initializer.
     36
    1372019-08-27  Basuke Suzuki  <Basuke.Suzuki@sony.com>
    238
  • trunk/Source/WebKit/UIProcess/API/APIContextMenuElementInfo.cpp

    r246224 r249171  
    3333ContextMenuElementInfo::ContextMenuElementInfo(const WebKit::InteractionInformationAtPosition& info)
    3434    : m_interactionInformation(info)
     35    , m_userInfo(nullptr)
     36{
     37}
     38
     39ContextMenuElementInfo::ContextMenuElementInfo(const WebKit::InteractionInformationAtPosition& info, NSDictionary *userInfo)
     40    : m_interactionInformation(info)
     41    , m_userInfo(userInfo)
    3542{
    3643}
  • trunk/Source/WebKit/UIProcess/API/APIContextMenuElementInfo.h

    r246224 r249171  
    4444    const WebKit::InteractionInformationAtPosition& interactionInformation() const { return m_interactionInformation; }
    4545
     46    const RetainPtr<NSDictionary> userInfo() const { return m_userInfo; }
     47
    4648private:
    4749    ContextMenuElementInfo(const WebKit::InteractionInformationAtPosition&);
     50    ContextMenuElementInfo(const WebKit::InteractionInformationAtPosition&, NSDictionary *);
    4851   
    4952    WebKit::InteractionInformationAtPosition m_interactionInformation;
     53    RetainPtr<NSDictionary> m_userInfo;
    5054};
    5155
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKContextMenuElementInfo.mm

    r246224 r249171  
    4949- (_WKActivatedElementInfo *)_activatedElementInfo
    5050{
    51     return [_WKActivatedElementInfo activatedElementInfoWithInteractionInformationAtPosition:_elementInfo->interactionInformation()];
     51    return [_WKActivatedElementInfo activatedElementInfoWithInteractionInformationAtPosition:_elementInfo->interactionInformation() userInfo:_elementInfo->userInfo().get()];
    5252}
    5353
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm

    r249112 r249171  
    67406740
    67416741    [_contentView doAfterPositionInformationUpdate:[capturedBlock = makeBlockPtr(block)] (WebKit::InteractionInformationAtPosition information) {
    6742         capturedBlock([_WKActivatedElementInfo activatedElementInfoWithInteractionInformationAtPosition:information]);
     6742        capturedBlock([_WKActivatedElementInfo activatedElementInfoWithInteractionInformationAtPosition:information userInfo:nil]);
    67436743    } forRequest:infoRequest];
    67446744}
  • trunk/Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfo.mm

    r247326 r249171  
    5656
    5757#if PLATFORM(IOS_FAMILY)
    58 + (instancetype)activatedElementInfoWithInteractionInformationAtPosition:(const WebKit::InteractionInformationAtPosition&)information
     58+ (instancetype)activatedElementInfoWithInteractionInformationAtPosition:(const WebKit::InteractionInformationAtPosition&)information userInfo:(NSDictionary *)userInfo
    5959{
    60     return [[[self alloc] _initWithInteractionInformationAtPosition:information] autorelease];
     60    return [[[self alloc] _initWithInteractionInformationAtPosition:information userInfo:userInfo] autorelease];
    6161}
    6262
    63 - (instancetype)_initWithInteractionInformationAtPosition:(const WebKit::InteractionInformationAtPosition&)information
     63- (instancetype)_initWithInteractionInformationAtPosition:(const WebKit::InteractionInformationAtPosition&)information userInfo:(NSDictionary *)userInfo
    6464{
    6565    if (!(self = [super init]))
     
    8484    _ID = information.idAttribute;
    8585    _animatedImage = information.isAnimatedImage;
     86
     87    _userInfo = userInfo;
    8688   
    8789    return self;
  • trunk/Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h

    r247326 r249171  
    3838
    3939#if PLATFORM(IOS_FAMILY)
    40 + (instancetype)activatedElementInfoWithInteractionInformationAtPosition:(const WebKit::InteractionInformationAtPosition&)information;
    41 - (instancetype)_initWithInteractionInformationAtPosition:(const WebKit::InteractionInformationAtPosition&)information;
     40+ (instancetype)activatedElementInfoWithInteractionInformationAtPosition:(const WebKit::InteractionInformationAtPosition&)information userInfo:(NSDictionary *)userInfo;
     41- (instancetype)_initWithInteractionInformationAtPosition:(const WebKit::InteractionInformationAtPosition&)information userInfo:(NSDictionary *)userInfo;
    4242#endif
    4343- (instancetype)_initWithType:(_WKActivatedElementType)type URL:(NSURL *)url imageURL:(NSURL *)imageURL location:(const WebCore::IntPoint&)location title:(NSString *)title ID:(NSString *)ID rect:(CGRect)rect image:(WebKit::ShareableBitmap*)image;
  • trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm

    r249112 r249171  
    4646#import "WKActionSheetAssistant.h"
    4747#import "WKContextMenuElementInfoInternal.h"
     48#import "WKContextMenuElementInfoPrivate.h"
    4849#import "WKDatePickerViewController.h"
    4950#import "WKDrawingCoordinator.h"
     
    78717872    UIViewController *previewViewController = nil;
    78727873
    7873     auto elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithInteractionInformationAtPosition:_positionInformation]);
     7874    auto elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithInteractionInformationAtPosition:_positionInformation userInfo:nil]);
    78747875
    78757876    if (_positionInformation.isLink) {
     
    80748075            strongSelf->_contextMenuActionProviderDelegateNeedsOverride = NO;
    80758076
    8076             auto elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithInteractionInformationAtPosition:strongSelf->_positionInformation]);
     8077            auto elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithInteractionInformationAtPosition:strongSelf->_positionInformation userInfo:nil]);
    80778078
    80788079            UIContextMenuActionProvider actionMenuProvider = [weakSelf, elementInfo] (NSArray<UIMenuElement *> *) -> UIMenu * {
     
    81188119
    81198120    _contextMenuActionProviderDelegateNeedsOverride = NO;
    8120     _contextMenuElementInfo = wrapper(API::ContextMenuElementInfo::create(_positionInformation));
     8121    _contextMenuElementInfo = wrapper(API::ContextMenuElementInfo::create(_positionInformation, nil));
    81218122    if ([uiDelegate respondsToSelector:@selector(_webView:contextMenuConfigurationForElement:completionHandler:)]) {
     8123        if (_positionInformation.isImage && _positionInformation.url.isNull() && [uiDelegate respondsToSelector:@selector(_webView:alternateURLFromImage:userInfo:)]) {
     8124            UIImage *uiImage = [[_contextMenuElementInfo _activatedElementInfo] image];
     8125            NSDictionary *userInfo = nil;
     8126            NSURL *nsURL = [uiDelegate _webView:_webView alternateURLFromImage:uiImage userInfo:&userInfo];
     8127            _positionInformation.url = nsURL;
     8128            _contextMenuElementInfo = wrapper(API::ContextMenuElementInfo::create(_positionInformation, userInfo));
     8129        }
     8130
    81228131        auto checker = WebKit::CompletionHandlerCallChecker::create(uiDelegate, @selector(_webView:contextMenuConfigurationForElement:completionHandler:));
    81238132        [uiDelegate _webView:_webView contextMenuConfigurationForElement:_contextMenuElementInfo.get() completionHandler:makeBlockPtr([completionBlock = WTFMove(completionBlock), checker = WTFMove(checker)] (UIContextMenuConfiguration *configuration) {
     
    81628171{
    81638172    if (_contextMenuActionProviderDelegateNeedsOverride) {
    8164         auto elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithInteractionInformationAtPosition:_positionInformation]);
     8173        auto elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithInteractionInformationAtPosition:_positionInformation userInfo:nil]);
    81658174        RetainPtr<NSArray<_WKElementAction *>> defaultActionsFromAssistant = _positionInformation.isLink ? [_actionSheetAssistant defaultActionsForLinkSheet:elementInfo.get()] : [_actionSheetAssistant defaultActionsForImageSheet:elementInfo.get()];
    81668175        return menuElementsFromDefaultActions(defaultActionsFromAssistant, elementInfo);
Note: See TracChangeset for help on using the changeset viewer.