Diff
Modified: trunk/Source/WebCore/ChangeLog (197595 => 197596)
--- trunk/Source/WebCore/ChangeLog 2016-03-04 23:33:22 UTC (rev 197595)
+++ trunk/Source/WebCore/ChangeLog 2016-03-04 23:55:55 UTC (rev 197596)
@@ -1,3 +1,16 @@
+2016-03-03 Enrica Casucci <[email protected]>
+
+ Add a mechanism to customize the long press action.
+ https://bugs.webkit.org/show_bug.cgi?id=154995
+ rdar://problem/24823732
+
+ Reviewed by Tim Horton.
+
+ We want to allow long press on attachment elements as well.
+
+ * WebCore.xcodeproj/project.pbxproj: Making HTMLAttachmentElement.h private.
+ * html/HTMLAttachmentElement.h: Adding exported functions.
+
2016-03-04 Andreas Kling <[email protected]>
[iOS] Throw away compiled RegExp code when navigating to a new page.
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (197595 => 197596)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2016-03-04 23:33:22 UTC (rev 197595)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2016-03-04 23:55:55 UTC (rev 197596)
@@ -2743,7 +2743,7 @@
7C5343FC17B74B63004232F0 /* JSMediaQueryListListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C5343FA17B74B63004232F0 /* JSMediaQueryListListener.cpp */; };
7C5343FD17B74B63004232F0 /* JSMediaQueryListListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C5343FB17B74B63004232F0 /* JSMediaQueryListListener.h */; };
7C5F28FB1A827D8400C0F31F /* HTMLAttachmentElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C5F28F91A827D8400C0F31F /* HTMLAttachmentElement.cpp */; };
- 7C5F28FC1A827D8400C0F31F /* HTMLAttachmentElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C5F28FA1A827D8400C0F31F /* HTMLAttachmentElement.h */; };
+ 7C5F28FC1A827D8400C0F31F /* HTMLAttachmentElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C5F28FA1A827D8400C0F31F /* HTMLAttachmentElement.h */; settings = {ATTRIBUTES = (Private, ); }; };
7C73FB07191EF417007DE061 /* UserMessageHandlersNamespace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C73FB05191EF416007DE061 /* UserMessageHandlersNamespace.cpp */; };
7C73FB08191EF417007DE061 /* UserMessageHandlersNamespace.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C73FB06191EF417007DE061 /* UserMessageHandlersNamespace.h */; settings = {ATTRIBUTES = (Private, ); }; };
7C73FB0C191EF5A8007DE061 /* JSUserMessageHandlersNamespace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C73FB0A191EF5A8007DE061 /* JSUserMessageHandlersNamespace.cpp */; };
Modified: trunk/Source/WebCore/html/HTMLAttachmentElement.h (197595 => 197596)
--- trunk/Source/WebCore/html/HTMLAttachmentElement.h 2016-03-04 23:33:22 UTC (rev 197595)
+++ trunk/Source/WebCore/html/HTMLAttachmentElement.h 2016-03-04 23:55:55 UTC (rev 197596)
@@ -37,10 +37,10 @@
class HTMLAttachmentElement final : public HTMLElement {
public:
static Ref<HTMLAttachmentElement> create(const QualifiedName&, Document&);
- File* file() const;
+ WEBCORE_EXPORT File* file() const;
void setFile(File*);
- String attachmentTitle() const;
+ WEBCORE_EXPORT String attachmentTitle() const;
String attachmentType() const;
private:
Modified: trunk/Source/WebKit2/ChangeLog (197595 => 197596)
--- trunk/Source/WebKit2/ChangeLog 2016-03-04 23:33:22 UTC (rev 197595)
+++ trunk/Source/WebKit2/ChangeLog 2016-03-04 23:55:55 UTC (rev 197596)
@@ -1,3 +1,36 @@
+2016-03-03 Enrica Casucci <[email protected]>
+
+ Add a mechanism to customize the long press action.
+ https://bugs.webkit.org/show_bug.cgi?id=154995
+ rdar://problem/24823732
+
+ Reviewed by Tim Horton.
+
+ Adding a new private delegate method to allow clients to
+ replace the action sheet displayed for images and links.
+ The change also adds support for attachment elements.
+
+ * Shared/ios/InteractionInformationAtPosition.h:
+ * Shared/ios/InteractionInformationAtPosition.mm:
+ (WebKit::InteractionInformationAtPosition::encode):
+ (WebKit::InteractionInformationAtPosition::decode):
+ * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
+ * UIProcess/API/Cocoa/_WKActivatedElementInfo.h:
+ * UIProcess/ios/WKActionSheetAssistant.h:
+ * UIProcess/ios/WKActionSheetAssistant.mm:
+ (-[WKActionSheetAssistant showImageSheet]):
+ (-[WKActionSheetAssistant showLinkSheet]):
+ * UIProcess/ios/WKContentViewInteraction.mm:
+ (-[WKContentView _showImageSheet]):
+ (-[WKContentView _showAttachmentSheet]):
+ (-[WKContentView _showLinkSheet]):
+ (-[WKContentView _actionForLongPress]):
+ (-[WKContentView actionSheetAssistant:shouldIncludeAppLinkActionsForElement:]):
+ (-[WKContentView actionSheetAssistant:showCustomSheetForElement:]):
+ (-[WKContentView actionSheetAssistant:decideActionsForElement:defaultActions:]):
+ * WebProcess/WebPage/ios/WebPageIOS.mm:
+ (WebKit::WebPage::getPositionInformation):
+
2016-03-04 Brent Fulgham <[email protected]>
[WK2] Gather resource load statistics
Modified: trunk/Source/WebKit2/Shared/ios/InteractionInformationAtPosition.h (197595 => 197596)
--- trunk/Source/WebKit2/Shared/ios/InteractionInformationAtPosition.h 2016-03-04 23:33:22 UTC (rev 197595)
+++ trunk/Source/WebKit2/Shared/ios/InteractionInformationAtPosition.h 2016-03-04 23:55:55 UTC (rev 197596)
@@ -45,6 +45,7 @@
bool touchCalloutEnabled { true };
bool isLink { false };
bool isImage { false };
+ bool isAttachment { false };
bool isAnimatedImage { false };
bool isElement { false };
#if ENABLE(DATA_DETECTION)
Modified: trunk/Source/WebKit2/Shared/ios/InteractionInformationAtPosition.mm (197595 => 197596)
--- trunk/Source/WebKit2/Shared/ios/InteractionInformationAtPosition.mm 2016-03-04 23:33:22 UTC (rev 197595)
+++ trunk/Source/WebKit2/Shared/ios/InteractionInformationAtPosition.mm 2016-03-04 23:55:55 UTC (rev 197596)
@@ -48,6 +48,7 @@
encoder << touchCalloutEnabled;
encoder << isLink;
encoder << isImage;
+ encoder << isAttachment;
encoder << isAnimatedImage;
encoder << isElement;
encoder << url;
@@ -98,6 +99,9 @@
if (!decoder.decode(result.isImage))
return false;
+ if (!decoder.decode(result.isAttachment))
+ return false;
+
if (!decoder.decode(result.isAnimatedImage))
return false;
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUIDelegatePrivate.h (197595 => 197596)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUIDelegatePrivate.h 2016-03-04 23:33:22 UTC (rev 197595)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUIDelegatePrivate.h 2016-03-04 23:55:55 UTC (rev 197596)
@@ -71,6 +71,7 @@
- (void)_webView:(WKWebView *)webView commitPreviewedImageWithURL:(NSURL *)imageURL WK_AVAILABLE(NA, 9_0);
- (void)_webView:(WKWebView *)webView didDismissPreviewViewController:(UIViewController *)previewedViewController committing:(BOOL)committing WK_AVAILABLE(NA, 9_0);
- (void)_webView:(WKWebView *)webView didDismissPreviewViewController:(UIViewController *)previewedViewController WK_AVAILABLE(NA, 9_0);
+- (BOOL)_webView:(WKWebView *)webView showCustomSheetForElement:(_WKActivatedElementInfo *)element WK_AVAILABLE(NA, WK_IOS_TBA);
- (UIEdgeInsets)_webView:(WKWebView *)webView finalObscuredInsetsForScrollView:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset WK_AVAILABLE(NA, 9_0);
- (UIViewController *)_webView:(WKWebView *)webView previewViewControllerForURL:(NSURL *)url defaultActions:(WK_ARRAY(_WKElementAction *) *)actions elementInfo:(_WKActivatedElementInfo *)elementInfo WK_AVAILABLE(NA, 9_0);
- (UIViewController *)_webView:(WKWebView *)webView previewViewControllerForAnimatedImageAtURL:(NSURL *)url defaultActions:(WK_ARRAY(_WKElementAction *) *)actions elementInfo:(_WKActivatedElementInfo *)elementInfo imageSize:(CGSize)imageSize WK_AVAILABLE(NA, 9_0);
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKActivatedElementInfo.h (197595 => 197596)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKActivatedElementInfo.h 2016-03-04 23:33:22 UTC (rev 197595)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKActivatedElementInfo.h 2016-03-04 23:55:55 UTC (rev 197596)
@@ -36,6 +36,7 @@
typedef NS_ENUM(NSInteger, _WKActivatedElementType) {
_WKActivatedElementTypeLink,
_WKActivatedElementTypeImage,
+ _WKActivatedElementTypeAttachment WK_ENUM_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA),
} WK_ENUM_AVAILABLE(10_10, 8_0);
WK_CLASS_AVAILABLE(10_10, 8_0)
Modified: trunk/Source/WebKit2/UIProcess/ios/WKActionSheetAssistant.h (197595 => 197596)
--- trunk/Source/WebKit2/UIProcess/ios/WKActionSheetAssistant.h 2016-03-04 23:33:22 UTC (rev 197595)
+++ trunk/Source/WebKit2/UIProcess/ios/WKActionSheetAssistant.h 2016-03-04 23:55:55 UTC (rev 197596)
@@ -52,6 +52,7 @@
- (RetainPtr<NSArray>)actionSheetAssistant:(WKActionSheetAssistant *)assistant decideActionsForElement:(_WKActivatedElementInfo *)element defaultActions:(RetainPtr<NSArray>)defaultActions;
@optional
+- (BOOL)actionSheetAssistant:(WKActionSheetAssistant *)assistant showCustomSheetForElement:(_WKActivatedElementInfo *)element;
- (void)updatePositionInformationForActionSheetAssistant:(WKActionSheetAssistant *)assistant;
- (void)actionSheetAssistant:(WKActionSheetAssistant *)assistant willStartInteractionWithElement:(_WKActivatedElementInfo *)element;
- (void)actionSheetAssistantDidStopInteraction:(WKActionSheetAssistant *)assistant;
Modified: trunk/Source/WebKit2/UIProcess/ios/WKActionSheetAssistant.mm (197595 => 197596)
--- trunk/Source/WebKit2/UIProcess/ios/WKActionSheetAssistant.mm 2016-03-04 23:33:22 UTC (rev 197595)
+++ trunk/Source/WebKit2/UIProcess/ios/WKActionSheetAssistant.mm 2016-03-04 23:55:55 UTC (rev 197596)
@@ -281,6 +281,8 @@
NSURL *targetURL = [NSURL _web_URLWithWTFString:positionInformation.url];
auto elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithType:_WKActivatedElementTypeImage URL:targetURL location:positionInformation.point title:positionInformation.title rect:positionInformation.bounds image:positionInformation.image.get()]);
+ if ([delegate respondsToSelector:@selector(actionSheetAssistant:showCustomSheetForElement:)] && [delegate actionSheetAssistant:self showCustomSheetForElement:elementInfo.get()])
+ return;
auto defaultActions = [self defaultActionsForImageSheet:elementInfo.get()];
RetainPtr<NSArray> actions = [delegate actionSheetAssistant:self decideActionsForElement:elementInfo.get() defaultActions:WTFMove(defaultActions)];
@@ -395,6 +397,9 @@
return;
auto elementInfo = adoptNS([[_WKActivatedElementInfo alloc] _initWithType:_WKActivatedElementTypeLink URL:targetURL location:positionInformation.point title:positionInformation.title rect:positionInformation.bounds image:positionInformation.image.get()]);
+ if ([delegate respondsToSelector:@selector(actionSheetAssistant:showCustomSheetForElement:)] && [delegate actionSheetAssistant:self showCustomSheetForElement:elementInfo.get()])
+ return;
+
auto defaultActions = [self defaultActionsForLinkSheet:elementInfo.get()];
RetainPtr<NSArray> actions = [delegate actionSheetAssistant:self decideActionsForElement:elementInfo.get() defaultActions:WTFMove(defaultActions)];
Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm (197595 => 197596)
--- trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm 2016-03-04 23:33:22 UTC (rev 197595)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm 2016-03-04 23:55:55 UTC (rev 197596)
@@ -1083,6 +1083,14 @@
[_actionSheetAssistant showImageSheet];
}
+- (void)_showAttachmentSheet
+{
+ id <WKUIDelegatePrivate> uiDelegate = static_cast<id <WKUIDelegatePrivate>>([_webView UIDelegate]);
+
+ if ([uiDelegate respondsToSelector:@selector(_webView:showCustomSheetForElement:)])
+ [uiDelegate _webView:_webView showCustomSheetForElement:[[_WKActivatedElementInfo alloc] _initWithType:_WKActivatedElementTypeAttachment URL:[NSURL _web_URLWithWTFString:_positionInformation.url] location:_positionInformation.point title:_positionInformation.title rect:_positionInformation.bounds image:nil]];
+}
+
- (void)_showLinkSheet
{
[_actionSheetAssistant showLinkSheet];
@@ -1107,6 +1115,9 @@
return @selector(_showDataDetectorsSheet);
return @selector(_showLinkSheet);
}
+
+ if (_positionInformation.isAttachment)
+ return @selector(_showAttachmentSheet);
return nil;
}
@@ -3545,6 +3556,21 @@
}
#endif
+- (BOOL)actionSheetAssistant:(WKActionSheetAssistant *)assistant showCustomSheetForElement:(_WKActivatedElementInfo *)element
+{
+ id <WKUIDelegatePrivate> uiDelegate = static_cast<id <WKUIDelegatePrivate>>([_webView UIDelegate]);
+
+ if ([uiDelegate respondsToSelector:@selector(_webView:showCustomSheetForElement:)]) {
+ if ([uiDelegate _webView:_webView showCustomSheetForElement:element]) {
+ // Prevent tap-and-hold and drag.
+ [UIApp _cancelAllTouches];
+ return YES;
+ }
+ }
+
+ return NO;
+}
+
- (RetainPtr<NSArray>)actionSheetAssistant:(WKActionSheetAssistant *)assistant decideActionsForElement:(_WKActivatedElementInfo *)element defaultActions:(RetainPtr<NSArray>)defaultActions
{
return _page->uiClient().actionsForElement(element, WTFMove(defaultActions));
Modified: trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm (197595 => 197596)
--- trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm 2016-03-04 23:33:22 UTC (rev 197595)
+++ trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm 2016-03-04 23:55:55 UTC (rev 197596)
@@ -56,12 +56,14 @@
#import <WebCore/Element.h>
#import <WebCore/ElementAncestorIterator.h>
#import <WebCore/EventHandler.h>
+#import <WebCore/File.h>
#import <WebCore/FloatQuad.h>
#import <WebCore/FocusController.h>
#import <WebCore/Frame.h>
#import <WebCore/FrameLoaderClient.h>
#import <WebCore/FrameView.h>
#import <WebCore/GeometryUtilities.h>
+#import <WebCore/HTMLAttachmentElement.h>
#import <WebCore/HTMLElementTypeHelpers.h>
#import <WebCore/HTMLFormElement.h>
#import <WebCore/HTMLImageElement.h>
@@ -2243,8 +2245,16 @@
m_page->focusController().setFocusedFrame(result.innerNodeFrame());
info.bounds = renderer->absoluteBoundingBoxRect(true);
// We don't want to select blocks that are larger than 97% of the visible area of the document.
- const static CGFloat factor = 0.97;
- info.isSelectable = renderer->style().userSelect() != SELECT_NONE && info.bounds.height() < result.innerNodeFrame()->view()->unobscuredContentRect().height() * factor;
+ if (is<HTMLAttachmentElement>(*hitNode)) {
+ info.isAttachment = true;
+ const HTMLAttachmentElement& attachment = downcast<HTMLAttachmentElement>(*hitNode);
+ info.title = attachment.attachmentTitle();
+ if (attachment.file())
+ info.url = ""
+ } else {
+ const static CGFloat factor = 0.97;
+ info.isSelectable = renderer->style().userSelect() != SELECT_NONE && info.bounds.height() < result.innerNodeFrame()->view()->unobscuredContentRect().height() * factor;
+ }
}
}
}