Diff
Modified: trunk/Source/WebKit/ChangeLog (244367 => 244368)
--- trunk/Source/WebKit/ChangeLog 2019-04-17 01:32:38 UTC (rev 244367)
+++ trunk/Source/WebKit/ChangeLog 2019-04-17 01:41:00 UTC (rev 244368)
@@ -1,3 +1,36 @@
+2019-04-16 Megan Gardner <[email protected]>
+
+ Allow sharing from imageSheet on an image document
+ https://bugs.webkit.org/show_bug.cgi?id=196891
+ <rdar://problem/25377386>
+
+ Reviewed by Tim Horton.
+
+ Allow sharing from an image sheet generated from an image document
+ by storing the image URL and using it as a fallback for the URL.
+ Store it as an image on WKElementAction to not accidentally trigger
+ any actions that should actually be associated with pure URLs.
+
+ * UIProcess/API/Cocoa/_WKActivatedElementInfo.h:
+ * UIProcess/API/Cocoa/_WKActivatedElementInfo.mm:
+ (-[_WKActivatedElementInfo _initWithInteractionInformationAtPosition:]):
+ (-[_WKActivatedElementInfo _initWithType:URL:imageURL:location:title:ID:rect:image:]):
+ (-[_WKActivatedElementInfo _initWithType:URL:imageURL:location:title:ID:rect:image:userInfo:]):
+ (-[_WKActivatedElementInfo imageURL]):
+ (-[_WKActivatedElementInfo _initWithType:URL:location:title:ID:rect:image:]): Deleted.
+ (-[_WKActivatedElementInfo _initWithType:URL:location:title:ID:rect:image:userInfo:]): Deleted.
+ * UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h:
+ * UIProcess/API/Cocoa/_WKElementAction.mm:
+ (+[_WKElementAction _elementActionWithType:customTitle:assistant:]):
+ * UIProcess/ios/WKActionSheetAssistant.mm:
+ (-[WKActionSheetAssistant showImageSheet]):
+ (-[WKActionSheetAssistant defaultActionsForImageSheet:]):
+ (-[WKActionSheetAssistant showLinkSheet]):
+ * UIProcess/ios/WKContentViewInteraction.mm:
+ (-[WKContentView _showAttachmentSheet]):
+ (-[WKContentView _dataForPreviewItemController:atPosition:type:]):
+ (-[WKContentView _presentedViewControllerForPreviewItemController:]):
+
2019-04-16 Wenson Hsieh <[email protected]>
[Cocoa] Add a way for Apple-internal clients to opt into recommended compatibility mode
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfo.h (244367 => 244368)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfo.h 2019-04-17 01:32:38 UTC (rev 244367)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfo.h 2019-04-17 01:41:00 UTC (rev 244368)
@@ -42,6 +42,7 @@
@interface _WKActivatedElementInfo : NSObject
@property (nonatomic, readonly) NSURL *URL;
+@property (nonatomic, readonly) NSURL *imageURL;
@property (nonatomic, readonly) NSString *title;
@property (nonatomic, readonly) _WKActivatedElementType type;
@property (nonatomic, readonly) CGRect boundingRect;
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfo.mm (244367 => 244368)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfo.mm 2019-04-17 01:32:38 UTC (rev 244367)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfo.mm 2019-04-17 01:41:00 UTC (rev 244368)
@@ -39,6 +39,7 @@
@implementation _WKActivatedElementInfo {
RetainPtr<NSURL> _URL;
+ RetainPtr<NSURL> _imageURL;
RetainPtr<NSString> _title;
CGPoint _interactionLocation;
RetainPtr<NSString> _ID;
@@ -64,6 +65,7 @@
return nil;
_URL = information.url;
+ _imageURL = information.imageURL;
_interactionLocation = information.request.point;
_title = information.title;
_boundingRect = information.bounds;
@@ -84,17 +86,18 @@
}
#endif
-- (instancetype)_initWithType:(_WKActivatedElementType)type URL:(NSURL *)url location:(CGPoint)location title:(NSString *)title ID:(NSString *)ID rect:(CGRect)rect image:(WebKit::ShareableBitmap*)image
+- (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
{
- return [self _initWithType:type URL:url location:location title:title ID:ID rect:rect image:image userInfo:nil];
+ return [self _initWithType:type URL:url imageURL:imageURL location:location title:title ID:ID rect:rect image:image userInfo:nil];
}
-- (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
+- (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
{
if (!(self = [super init]))
return nil;
_URL = adoptNS([url copy]);
+ _imageURL = adoptNS([imageURL copy]);
_interactionLocation = location;
_title = adoptNS([title copy]);
_boundingRect = rect;
@@ -113,6 +116,11 @@
return _URL.get();
}
+- (NSURL *)imageURL
+{
+ return _imageURL.get();
+}
+
- (NSString *)title
{
return _title.get();
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h (244367 => 244368)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h 2019-04-17 01:32:38 UTC (rev 244367)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h 2019-04-17 01:41:00 UTC (rev 244368)
@@ -38,8 +38,8 @@
+ (instancetype)activatedElementInfoWithInteractionInformationAtPosition:(const WebKit::InteractionInformationAtPosition&)information;
- (instancetype)_initWithInteractionInformationAtPosition:(const WebKit::InteractionInformationAtPosition&)information;
#endif
-- (instancetype)_initWithType:(_WKActivatedElementType)type URL:(NSURL *)url location:(CGPoint)location title:(NSString *)title ID:(NSString *)ID rect:(CGRect)rect image:(WebKit::ShareableBitmap*)image;
-- (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;
+- (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;
+- (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;
@property (nonatomic, readonly) CGPoint _interactionLocation;
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKElementAction.mm (244367 => 244368)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKElementAction.mm 2019-04-17 01:32:38 UTC (rev 244367)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKElementAction.mm 2019-04-17 01:41:00 UTC (rev 244368)
@@ -129,7 +129,7 @@
case _WKElementActionTypeShare:
title = WEB_UI_STRING("Share…", "Title for Share action button");
handler = ^(WKActionSheetAssistant *assistant, _WKActivatedElementInfo *actionInfo) {
- [assistant.delegate actionSheetAssistant:assistant shareElementWithURL:actionInfo.URL rect:actionInfo.boundingRect];
+ [assistant.delegate actionSheetAssistant:assistant shareElementWithURL:actionInfo.URL ?: actionInfo.imageURL rect:actionInfo.boundingRect];
};
break;
default:
Modified: trunk/Source/WebKit/UIProcess/ios/WKActionSheetAssistant.mm (244367 => 244368)
--- trunk/Source/WebKit/UIProcess/ios/WKActionSheetAssistant.mm 2019-04-17 01:32:38 UTC (rev 244367)
+++ trunk/Source/WebKit/UIProcess/ios/WKActionSheetAssistant.mm 2019-04-17 01:41:00 UTC (rev 244368)
@@ -392,10 +392,11 @@
void (^showImageSheetWithAlternateURLBlock)(NSURL*, NSDictionary *userInfo) = ^(NSURL *alternateURL, NSDictionary *userInfo) {
NSURL *targetURL = _positionInformation->url;
+ NSURL *imageURL = _positionInformation->imageURL;
if (!targetURL)
targetURL = alternateURL;
auto elementBounds = _positionInformation->bounds;
- 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]);
+ 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]);
if ([delegate respondsToSelector:@selector(actionSheetAssistant:showCustomSheetForElement:)] && [delegate actionSheetAssistant:self showCustomSheetForElement:elementInfo.get()])
return;
auto defaultActions = [self defaultActionsForImageSheet:elementInfo.get()];
@@ -536,7 +537,8 @@
if (targetURL) {
[self _appendOpenActionsForURL:targetURL actions:defaultActions.get() elementInfo:elementInfo];
[defaultActions addObject:[_WKElementAction _elementActionWithType:_WKElementActionTypeShare assistant:self]];
- }
+ } else if ([elementInfo imageURL])
+ [defaultActions addObject:[_WKElementAction _elementActionWithType:_WKElementActionTypeShare assistant:self]];
#if HAVE(SAFARI_SERVICES_FRAMEWORK)
if ([getSSReadingListClass() supportsURL:targetURL])
@@ -571,7 +573,7 @@
return;
}
- 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()]);
+ 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()]);
if ([_delegate respondsToSelector:@selector(actionSheetAssistant:showCustomSheetForElement:)] && [_delegate actionSheetAssistant:self showCustomSheetForElement:elementInfo.get()]) {
_needsLinkIndicator = NO;
return;
Modified: trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm (244367 => 244368)
--- trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm 2019-04-17 01:32:38 UTC (rev 244367)
+++ trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm 2019-04-17 01:41:00 UTC (rev 244368)
@@ -1799,7 +1799,7 @@
if (![uiDelegate respondsToSelector:@selector(_webView:showCustomSheetForElement:)])
return;
- 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]);
+ 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]);
[uiDelegate _webView:_webView showCustomSheetForElement:element.get()];
}
@@ -7271,7 +7271,7 @@
dataForPreview[UIPreviewDataLink] = (NSURL *)_positionInformation.imageURL;
} else if (canShowAttachmentPreview) {
*type = UIPreviewItemTypeAttachment;
- 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]);
+ 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]);
NSUInteger index = [uiDelegate _webView:_webView indexIntoAttachmentListForElement:element.get()];
if (index != NSNotFound) {
BOOL sourceIsManaged = NO;
@@ -7333,7 +7333,7 @@
// Treat animated images like a link preview
if (isValidURLForImagePreview && _positionInformation.isAnimatedImage) {
- 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()]);
+ 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()]);
if ([uiDelegate respondsToSelector:@selector(_webView:previewViewControllerForAnimatedImageAtURL:defaultActions:elementInfo:imageSize:)]) {
RetainPtr<NSArray> actions = [_actionSheetAssistant defaultActionsForImageSheet:animatedImageElementInfo.get()];
@@ -7341,7 +7341,7 @@
}
}
- 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()]);
+ 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()]);
auto actions = [_actionSheetAssistant defaultActionsForLinkSheet:elementInfo.get()];
if ([uiDelegate respondsToSelector:@selector(webView:previewingViewControllerForElement:defaultActions:)]) {
@@ -7379,7 +7379,7 @@
imageInfo = userInfo;
}
- 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()]);
+ 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()]);
_page->startInteractionWithElementAtPosition(_positionInformation.request.point);
if ([uiDelegate respondsToSelector:@selector(_webView:willPreviewImageWithURL:)])
Modified: trunk/Tools/ChangeLog (244367 => 244368)
--- trunk/Tools/ChangeLog 2019-04-17 01:32:38 UTC (rev 244367)
+++ trunk/Tools/ChangeLog 2019-04-17 01:41:00 UTC (rev 244368)
@@ -1,3 +1,16 @@
+2019-04-16 Megan Gardner <[email protected]>
+
+ Allow sharing from imageSheet on an image document
+ https://bugs.webkit.org/show_bug.cgi?id=196891
+ <rdar://problem/25377386>
+
+ Reviewed by Tim Horton.
+
+ Test to make sure that the correct imageURL is extracted from an image element.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm:
+ (TestWebKitAPI::TEST):
+
2019-04-16 Alex Christensen <[email protected]>
REGRESSION(r244162) Clearing website data from ephemeral WKWebsiteDataStore should finish instead of asserting or hanging
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm (244367 => 244368)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm 2019-04-17 01:32:38 UTC (rev 244367)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm 2019-04-17 01:41:00 UTC (rev 244368)
@@ -72,6 +72,30 @@
TestWebKitAPI::Util::run(&finished);
}
+TEST(WebKit, RequestActivatedElementInfoForImage)
+{
+ auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 215, 174)]);
+ NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"icon" withExtension:@"png" subdirectory:@"TestWebKitAPI.resources"]];
+ [webView loadRequest:request];
+ [webView _test_waitForDidFinishNavigation];
+
+ __block bool finished = false;
+ [webView _requestActivatedElementAtPosition:CGPointMake(50, 50) completionBlock: ^(_WKActivatedElementInfo *elementInfo) {
+
+ EXPECT_TRUE(elementInfo.type == _WKActivatedElementTypeImage);
+ EXPECT_WK_STREQ(elementInfo.imageURL.lastPathComponent, "icon.png");
+ EXPECT_NOT_NULL(elementInfo.image);
+ EXPECT_EQ(elementInfo.boundingRect.size.width, 215);
+ EXPECT_EQ(elementInfo.boundingRect.size.height, 174);
+ EXPECT_EQ(elementInfo.image.size.width, 215);
+ EXPECT_EQ(elementInfo.image.size.height, 174);
+
+ finished = true;
+ }];
+
+ TestWebKitAPI::Util::run(&finished);
+}
+
TEST(WebKit, RequestActivatedElementInfoForBlank)
{
auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)]);