Changeset 244368 in webkit
- Timestamp:
- Apr 16, 2019, 6:41:00 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 9 edited
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfo.h (modified) (1 diff)
-
Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfo.mm (modified) (5 diffs)
-
Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h (modified) (1 diff)
-
Source/WebKit/UIProcess/API/Cocoa/_WKElementAction.mm (modified) (1 diff)
-
Source/WebKit/UIProcess/ios/WKActionSheetAssistant.mm (modified) (3 diffs)
-
Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm (modified) (5 diffs)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r244367 r244368 1 2019-04-16 Megan Gardner <megan_gardner@apple.com> 2 3 Allow sharing from imageSheet on an image document 4 https://bugs.webkit.org/show_bug.cgi?id=196891 5 <rdar://problem/25377386> 6 7 Reviewed by Tim Horton. 8 9 Allow sharing from an image sheet generated from an image document 10 by storing the image URL and using it as a fallback for the URL. 11 Store it as an image on WKElementAction to not accidentally trigger 12 any actions that should actually be associated with pure URLs. 13 14 * UIProcess/API/Cocoa/_WKActivatedElementInfo.h: 15 * UIProcess/API/Cocoa/_WKActivatedElementInfo.mm: 16 (-[_WKActivatedElementInfo _initWithInteractionInformationAtPosition:]): 17 (-[_WKActivatedElementInfo _initWithType:URL:imageURL:location:title:ID:rect:image:]): 18 (-[_WKActivatedElementInfo _initWithType:URL:imageURL:location:title:ID:rect:image:userInfo:]): 19 (-[_WKActivatedElementInfo imageURL]): 20 (-[_WKActivatedElementInfo _initWithType:URL:location:title:ID:rect:image:]): Deleted. 21 (-[_WKActivatedElementInfo _initWithType:URL:location:title:ID:rect:image:userInfo:]): Deleted. 22 * UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h: 23 * UIProcess/API/Cocoa/_WKElementAction.mm: 24 (+[_WKElementAction _elementActionWithType:customTitle:assistant:]): 25 * UIProcess/ios/WKActionSheetAssistant.mm: 26 (-[WKActionSheetAssistant showImageSheet]): 27 (-[WKActionSheetAssistant defaultActionsForImageSheet:]): 28 (-[WKActionSheetAssistant showLinkSheet]): 29 * UIProcess/ios/WKContentViewInteraction.mm: 30 (-[WKContentView _showAttachmentSheet]): 31 (-[WKContentView _dataForPreviewItemController:atPosition:type:]): 32 (-[WKContentView _presentedViewControllerForPreviewItemController:]): 33 1 34 2019-04-16 Wenson Hsieh <wenson_hsieh@apple.com> 2 35 -
trunk/Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfo.h
r243376 r244368 43 43 44 44 @property (nonatomic, readonly) NSURL *URL; 45 @property (nonatomic, readonly) NSURL *imageURL; 45 46 @property (nonatomic, readonly) NSString *title; 46 47 @property (nonatomic, readonly) _WKActivatedElementType type; -
trunk/Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfo.mm
r242339 r244368 40 40 @implementation _WKActivatedElementInfo { 41 41 RetainPtr<NSURL> _URL; 42 RetainPtr<NSURL> _imageURL; 42 43 RetainPtr<NSString> _title; 43 44 CGPoint _interactionLocation; … … 65 66 66 67 _URL = information.url; 68 _imageURL = information.imageURL; 67 69 _interactionLocation = information.request.point; 68 70 _title = information.title; … … 85 87 #endif 86 88 87 - (instancetype)_initWithType:(_WKActivatedElementType)type URL:(NSURL *)url location:(CGPoint)location title:(NSString *)title ID:(NSString *)ID rect:(CGRect)rect image:(WebKit::ShareableBitmap*)image89 - (instancetype)_initWithType:(_WKActivatedElementType)type URL:(NSURL *)url imageURL:(NSURL *)imageURL location:(CGPoint)location title:(NSString *)title ID:(NSString *)ID rect:(CGRect)rect image:(WebKit::ShareableBitmap*)image 88 90 { 89 return [self _initWithType:type URL:url location:location title:title ID:ID rect:rect image:image userInfo:nil];91 return [self _initWithType:type URL:url imageURL:imageURL location:location title:title ID:ID rect:rect image:image userInfo:nil]; 90 92 } 91 93 92 - (instancetype)_initWithType:(_WKActivatedElementType)type URL:(NSURL *)url location:(CGPoint)location title:(NSString *)title ID:(NSString *)ID rect:(CGRect)rect image:(WebKit::ShareableBitmap*)image userInfo:(NSDictionary *)userInfo94 - (instancetype)_initWithType:(_WKActivatedElementType)type URL:(NSURL *)url imageURL:(NSURL *)imageURL location:(CGPoint)location title:(NSString *)title ID:(NSString *)ID rect:(CGRect)rect image:(WebKit::ShareableBitmap*)image userInfo:(NSDictionary *)userInfo 93 95 { 94 96 if (!(self = [super init])) … … 96 98 97 99 _URL = adoptNS([url copy]); 100 _imageURL = adoptNS([imageURL copy]); 98 101 _interactionLocation = location; 99 102 _title = adoptNS([title copy]); … … 112 115 { 113 116 return _URL.get(); 117 } 118 119 - (NSURL *)imageURL 120 { 121 return _imageURL.get(); 114 122 } 115 123 -
trunk/Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h
r242339 r244368 39 39 - (instancetype)_initWithInteractionInformationAtPosition:(const WebKit::InteractionInformationAtPosition&)information; 40 40 #endif 41 - (instancetype)_initWithType:(_WKActivatedElementType)type URL:(NSURL *)url location:(CGPoint)location title:(NSString *)title ID:(NSString *)ID rect:(CGRect)rect image:(WebKit::ShareableBitmap*)image;42 - (instancetype)_initWithType:(_WKActivatedElementType)type URL:(NSURL *)url location:(CGPoint)location title:(NSString *)title ID:(NSString *)ID rect:(CGRect)rect image:(WebKit::ShareableBitmap*)image userInfo:(NSDictionary *)userInfo;41 - (instancetype)_initWithType:(_WKActivatedElementType)type URL:(NSURL *)url imageURL:(NSURL *)imageURL location:(CGPoint)location title:(NSString *)title ID:(NSString *)ID rect:(CGRect)rect image:(WebKit::ShareableBitmap*)image; 42 - (instancetype)_initWithType:(_WKActivatedElementType)type URL:(NSURL *)url imageURL:(NSURL *)imageURL location:(CGPoint)location title:(NSString *)title ID:(NSString *)ID rect:(CGRect)rect image:(WebKit::ShareableBitmap*)image userInfo:(NSDictionary *)userInfo; 43 43 44 44 @property (nonatomic, readonly) CGPoint _interactionLocation; -
trunk/Source/WebKit/UIProcess/API/Cocoa/_WKElementAction.mm
r244205 r244368 130 130 title = WEB_UI_STRING("Share…", "Title for Share action button"); 131 131 handler = ^(WKActionSheetAssistant *assistant, _WKActivatedElementInfo *actionInfo) { 132 [assistant.delegate actionSheetAssistant:assistant shareElementWithURL:actionInfo.URL rect:actionInfo.boundingRect];132 [assistant.delegate actionSheetAssistant:assistant shareElementWithURL:actionInfo.URL ?: actionInfo.imageURL rect:actionInfo.boundingRect]; 133 133 }; 134 134 break; -
trunk/Source/WebKit/UIProcess/ios/WKActionSheetAssistant.mm
r243618 r244368 393 393 void (^showImageSheetWithAlternateURLBlock)(NSURL*, NSDictionary *userInfo) = ^(NSURL *alternateURL, NSDictionary *userInfo) { 394 394 NSURL *targetURL = _positionInformation->url; 395 NSURL *imageURL = _positionInformation->imageURL; 395 396 if (!targetURL) 396 397 targetURL = alternateURL; 397 398 auto elementBounds = _positionInformation->bounds; 398 auto elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithType:_WKActivatedElementTypeImage URL:targetURL location:_positionInformation->request.point title:_positionInformation->title ID:_positionInformation->idAttribute rect:elementBounds image:_positionInformation->image.get() userInfo:userInfo]);399 auto elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithType:_WKActivatedElementTypeImage URL:targetURL imageURL:imageURL location:_positionInformation->request.point title:_positionInformation->title ID:_positionInformation->idAttribute rect:elementBounds image:_positionInformation->image.get() userInfo:userInfo]); 399 400 if ([delegate respondsToSelector:@selector(actionSheetAssistant:showCustomSheetForElement:)] && [delegate actionSheetAssistant:self showCustomSheetForElement:elementInfo.get()]) 400 401 return; … … 537 538 [self _appendOpenActionsForURL:targetURL actions:defaultActions.get() elementInfo:elementInfo]; 538 539 [defaultActions addObject:[_WKElementAction _elementActionWithType:_WKElementActionTypeShare assistant:self]]; 539 } 540 } else if ([elementInfo imageURL]) 541 [defaultActions addObject:[_WKElementAction _elementActionWithType:_WKElementActionTypeShare assistant:self]]; 540 542 541 543 #if HAVE(SAFARI_SERVICES_FRAMEWORK) … … 572 574 } 573 575 574 auto elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithType:_WKActivatedElementTypeLink URL:targetURL location:_positionInformation->request.point title:_positionInformation->title ID:_positionInformation->idAttribute rect:_positionInformation->bounds image:_positionInformation->image.get()]);576 auto elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithType:_WKActivatedElementTypeLink URL:targetURL imageURL:(NSURL*)_positionInformation->imageURL location:_positionInformation->request.point title:_positionInformation->title ID:_positionInformation->idAttribute rect:_positionInformation->bounds image:_positionInformation->image.get()]); 575 577 if ([_delegate respondsToSelector:@selector(actionSheetAssistant:showCustomSheetForElement:)] && [_delegate actionSheetAssistant:self showCustomSheetForElement:elementInfo.get()]) { 576 578 _needsLinkIndicator = NO; -
trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm
r244302 r244368 1800 1800 return; 1801 1801 1802 auto element = adoptNS([[_WKActivatedElementInfo alloc] _initWithType:_WKActivatedElementTypeAttachment URL:(NSURL *)_positionInformation.url location:_positionInformation.request.point title:_positionInformation.title ID:_positionInformation.idAttribute rect:_positionInformation.bounds image:nil]);1802 auto element = adoptNS([[_WKActivatedElementInfo alloc] _initWithType:_WKActivatedElementTypeAttachment URL:(NSURL *)_positionInformation.url imageURL:(NSURL *)_positionInformation.imageURL location:_positionInformation.request.point title:_positionInformation.title ID:_positionInformation.idAttribute rect:_positionInformation.bounds image:nil]); 1803 1803 [uiDelegate _webView:_webView showCustomSheetForElement:element.get()]; 1804 1804 } … … 7272 7272 } else if (canShowAttachmentPreview) { 7273 7273 *type = UIPreviewItemTypeAttachment; 7274 auto element = adoptNS([[_WKActivatedElementInfo alloc] _initWithType:_WKActivatedElementTypeAttachment URL:(NSURL *)linkURL location:_positionInformation.request.point title:_positionInformation.title ID:_positionInformation.idAttribute rect:_positionInformation.bounds image:nil]);7274 auto element = adoptNS([[_WKActivatedElementInfo alloc] _initWithType:_WKActivatedElementTypeAttachment URL:(NSURL *)linkURL imageURL:(NSURL *)_positionInformation.imageURL location:_positionInformation.request.point title:_positionInformation.title ID:_positionInformation.idAttribute rect:_positionInformation.bounds image:nil]); 7275 7275 NSUInteger index = [uiDelegate _webView:_webView indexIntoAttachmentListForElement:element.get()]; 7276 7276 if (index != NSNotFound) { … … 7334 7334 // Treat animated images like a link preview 7335 7335 if (isValidURLForImagePreview && _positionInformation.isAnimatedImage) { 7336 RetainPtr<_WKActivatedElementInfo> animatedImageElementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithType:_WKActivatedElementTypeImage URL:targetURL location:_positionInformation.request.point title:_positionInformation.title ID:_positionInformation.idAttribute rect:_positionInformation.bounds image:_positionInformation.image.get()]);7336 RetainPtr<_WKActivatedElementInfo> animatedImageElementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithType:_WKActivatedElementTypeImage URL:targetURL imageURL:nil location:_positionInformation.request.point title:_positionInformation.title ID:_positionInformation.idAttribute rect:_positionInformation.bounds image:_positionInformation.image.get()]); 7337 7337 7338 7338 if ([uiDelegate respondsToSelector:@selector(_webView:previewViewControllerForAnimatedImageAtURL:defaultActions:elementInfo:imageSize:)]) { … … 7342 7342 } 7343 7343 7344 RetainPtr<_WKActivatedElementInfo> elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithType:_WKActivatedElementTypeLink URL:targetURL location:_positionInformation.request.point title:_positionInformation.title ID:_positionInformation.idAttribute rect:_positionInformation.bounds image:_positionInformation.image.get()]);7344 RetainPtr<_WKActivatedElementInfo> elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithType:_WKActivatedElementTypeLink URL:targetURL imageURL:nil location:_positionInformation.request.point title:_positionInformation.title ID:_positionInformation.idAttribute rect:_positionInformation.bounds image:_positionInformation.image.get()]); 7345 7345 7346 7346 auto actions = [_actionSheetAssistant defaultActionsForLinkSheet:elementInfo.get()]; … … 7380 7380 } 7381 7381 7382 RetainPtr<_WKActivatedElementInfo> elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithType:_WKActivatedElementTypeImage URL:alternateURL.get() location:_positionInformation.request.point title:_positionInformation.title ID:_positionInformation.idAttribute rect:_positionInformation.bounds image:_positionInformation.image.get() userInfo:imageInfo.get()]);7382 RetainPtr<_WKActivatedElementInfo> elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithType:_WKActivatedElementTypeImage URL:alternateURL.get() imageURL:nil location:_positionInformation.request.point title:_positionInformation.title ID:_positionInformation.idAttribute rect:_positionInformation.bounds image:_positionInformation.image.get() userInfo:imageInfo.get()]); 7383 7383 _page->startInteractionWithElementAtPosition(_positionInformation.request.point); 7384 7384 -
trunk/Tools/ChangeLog
r244364 r244368 1 2019-04-16 Megan Gardner <megan_gardner@apple.com> 2 3 Allow sharing from imageSheet on an image document 4 https://bugs.webkit.org/show_bug.cgi?id=196891 5 <rdar://problem/25377386> 6 7 Reviewed by Tim Horton. 8 9 Test to make sure that the correct imageURL is extracted from an image element. 10 11 * TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm: 12 (TestWebKitAPI::TEST): 13 1 14 2019-04-16 Alex Christensen <achristensen@webkit.org> 2 15 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm
r242339 r244368 66 66 EXPECT_EQ(elementInfo.image.size.width, 320); 67 67 EXPECT_EQ(elementInfo.image.size.height, 500); 68 69 finished = true; 70 }]; 71 72 TestWebKitAPI::Util::run(&finished); 73 } 74 75 TEST(WebKit, RequestActivatedElementInfoForImage) 76 { 77 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 215, 174)]); 78 NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"icon" withExtension:@"png" subdirectory:@"TestWebKitAPI.resources"]]; 79 [webView loadRequest:request]; 80 [webView _test_waitForDidFinishNavigation]; 81 82 __block bool finished = false; 83 [webView _requestActivatedElementAtPosition:CGPointMake(50, 50) completionBlock: ^(_WKActivatedElementInfo *elementInfo) { 84 85 EXPECT_TRUE(elementInfo.type == _WKActivatedElementTypeImage); 86 EXPECT_WK_STREQ(elementInfo.imageURL.lastPathComponent, "icon.png"); 87 EXPECT_NOT_NULL(elementInfo.image); 88 EXPECT_EQ(elementInfo.boundingRect.size.width, 215); 89 EXPECT_EQ(elementInfo.boundingRect.size.height, 174); 90 EXPECT_EQ(elementInfo.image.size.width, 215); 91 EXPECT_EQ(elementInfo.image.size.height, 174); 68 92 69 93 finished = true;
Note:
See TracChangeset
for help on using the changeset viewer.