Changeset 249171 in webkit
- Timestamp:
- Aug 27, 2019, 2:14:56 PM (7 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 8 edited
-
ChangeLog (modified) (1 diff)
-
UIProcess/API/APIContextMenuElementInfo.cpp (modified) (1 diff)
-
UIProcess/API/APIContextMenuElementInfo.h (modified) (1 diff)
-
UIProcess/API/Cocoa/WKContextMenuElementInfo.mm (modified) (1 diff)
-
UIProcess/API/Cocoa/WKWebView.mm (modified) (1 diff)
-
UIProcess/API/Cocoa/_WKActivatedElementInfo.mm (modified) (2 diffs)
-
UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h (modified) (1 diff)
-
UIProcess/ios/WKContentViewInteraction.mm (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r249158 r249171 1 2019-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 1 37 2019-08-27 Basuke Suzuki <Basuke.Suzuki@sony.com> 2 38 -
trunk/Source/WebKit/UIProcess/API/APIContextMenuElementInfo.cpp
r246224 r249171 33 33 ContextMenuElementInfo::ContextMenuElementInfo(const WebKit::InteractionInformationAtPosition& info) 34 34 : m_interactionInformation(info) 35 , m_userInfo(nullptr) 36 { 37 } 38 39 ContextMenuElementInfo::ContextMenuElementInfo(const WebKit::InteractionInformationAtPosition& info, NSDictionary *userInfo) 40 : m_interactionInformation(info) 41 , m_userInfo(userInfo) 35 42 { 36 43 } -
trunk/Source/WebKit/UIProcess/API/APIContextMenuElementInfo.h
r246224 r249171 44 44 const WebKit::InteractionInformationAtPosition& interactionInformation() const { return m_interactionInformation; } 45 45 46 const RetainPtr<NSDictionary> userInfo() const { return m_userInfo; } 47 46 48 private: 47 49 ContextMenuElementInfo(const WebKit::InteractionInformationAtPosition&); 50 ContextMenuElementInfo(const WebKit::InteractionInformationAtPosition&, NSDictionary *); 48 51 49 52 WebKit::InteractionInformationAtPosition m_interactionInformation; 53 RetainPtr<NSDictionary> m_userInfo; 50 54 }; 51 55 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKContextMenuElementInfo.mm
r246224 r249171 49 49 - (_WKActivatedElementInfo *)_activatedElementInfo 50 50 { 51 return [_WKActivatedElementInfo activatedElementInfoWithInteractionInformationAtPosition:_elementInfo->interactionInformation() ];51 return [_WKActivatedElementInfo activatedElementInfoWithInteractionInformationAtPosition:_elementInfo->interactionInformation() userInfo:_elementInfo->userInfo().get()]; 52 52 } 53 53 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
r249112 r249171 6740 6740 6741 6741 [_contentView doAfterPositionInformationUpdate:[capturedBlock = makeBlockPtr(block)] (WebKit::InteractionInformationAtPosition information) { 6742 capturedBlock([_WKActivatedElementInfo activatedElementInfoWithInteractionInformationAtPosition:information ]);6742 capturedBlock([_WKActivatedElementInfo activatedElementInfoWithInteractionInformationAtPosition:information userInfo:nil]); 6743 6743 } forRequest:infoRequest]; 6744 6744 } -
trunk/Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfo.mm
r247326 r249171 56 56 57 57 #if PLATFORM(IOS_FAMILY) 58 + (instancetype)activatedElementInfoWithInteractionInformationAtPosition:(const WebKit::InteractionInformationAtPosition&)information 58 + (instancetype)activatedElementInfoWithInteractionInformationAtPosition:(const WebKit::InteractionInformationAtPosition&)information userInfo:(NSDictionary *)userInfo 59 59 { 60 return [[[self alloc] _initWithInteractionInformationAtPosition:information ] autorelease];60 return [[[self alloc] _initWithInteractionInformationAtPosition:information userInfo:userInfo] autorelease]; 61 61 } 62 62 63 - (instancetype)_initWithInteractionInformationAtPosition:(const WebKit::InteractionInformationAtPosition&)information 63 - (instancetype)_initWithInteractionInformationAtPosition:(const WebKit::InteractionInformationAtPosition&)information userInfo:(NSDictionary *)userInfo 64 64 { 65 65 if (!(self = [super init])) … … 84 84 _ID = information.idAttribute; 85 85 _animatedImage = information.isAnimatedImage; 86 87 _userInfo = userInfo; 86 88 87 89 return self; -
trunk/Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h
r247326 r249171 38 38 39 39 #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; 42 42 #endif 43 43 - (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 46 46 #import "WKActionSheetAssistant.h" 47 47 #import "WKContextMenuElementInfoInternal.h" 48 #import "WKContextMenuElementInfoPrivate.h" 48 49 #import "WKDatePickerViewController.h" 49 50 #import "WKDrawingCoordinator.h" … … 7871 7872 UIViewController *previewViewController = nil; 7872 7873 7873 auto elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithInteractionInformationAtPosition:_positionInformation ]);7874 auto elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithInteractionInformationAtPosition:_positionInformation userInfo:nil]); 7874 7875 7875 7876 if (_positionInformation.isLink) { … … 8074 8075 strongSelf->_contextMenuActionProviderDelegateNeedsOverride = NO; 8075 8076 8076 auto elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithInteractionInformationAtPosition:strongSelf->_positionInformation ]);8077 auto elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithInteractionInformationAtPosition:strongSelf->_positionInformation userInfo:nil]); 8077 8078 8078 8079 UIContextMenuActionProvider actionMenuProvider = [weakSelf, elementInfo] (NSArray<UIMenuElement *> *) -> UIMenu * { … … 8118 8119 8119 8120 _contextMenuActionProviderDelegateNeedsOverride = NO; 8120 _contextMenuElementInfo = wrapper(API::ContextMenuElementInfo::create(_positionInformation ));8121 _contextMenuElementInfo = wrapper(API::ContextMenuElementInfo::create(_positionInformation, nil)); 8121 8122 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 8122 8131 auto checker = WebKit::CompletionHandlerCallChecker::create(uiDelegate, @selector(_webView:contextMenuConfigurationForElement:completionHandler:)); 8123 8132 [uiDelegate _webView:_webView contextMenuConfigurationForElement:_contextMenuElementInfo.get() completionHandler:makeBlockPtr([completionBlock = WTFMove(completionBlock), checker = WTFMove(checker)] (UIContextMenuConfiguration *configuration) { … … 8162 8171 { 8163 8172 if (_contextMenuActionProviderDelegateNeedsOverride) { 8164 auto elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithInteractionInformationAtPosition:_positionInformation ]);8173 auto elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithInteractionInformationAtPosition:_positionInformation userInfo:nil]); 8165 8174 RetainPtr<NSArray<_WKElementAction *>> defaultActionsFromAssistant = _positionInformation.isLink ? [_actionSheetAssistant defaultActionsForLinkSheet:elementInfo.get()] : [_actionSheetAssistant defaultActionsForImageSheet:elementInfo.get()]; 8166 8175 return menuElementsFromDefaultActions(defaultActionsFromAssistant, elementInfo);
Note:
See TracChangeset
for help on using the changeset viewer.