Title: [176099] trunk/Source/WebKit/mac
- Revision
- 176099
- Author
- [email protected]
- Date
- 2014-11-13 15:30:45 -0800 (Thu, 13 Nov 2014)
Log Message
WK1: Support default actions for video
https://bugs.webkit.org/show_bug.cgi?id=138713
-and corresponding-
rdar://problem/18877520
Reviewed by Tim Horton.
Call setToNonShadowAncestor() for media HitTestResults.
* WebView/WebActionMenuController.mm:
(-[WebActionMenuController performHitTestAtPoint:]):
Default items and actions.
(-[WebActionMenuController _defaultMenuItemsForVideo:]):
(-[WebActionMenuController _copyVideoURL:]):
(-[WebActionMenuController _saveVideoToDownloads:]):
(-[WebActionMenuController _createActionMenuItemForTag:withHitTestResult:]):
(-[WebActionMenuController _defaultMenuItemsForHitTestResult:]):
* WebView/WebUIDelegatePrivate.h:
Modified Paths
Diff
Modified: trunk/Source/WebKit/mac/ChangeLog (176098 => 176099)
--- trunk/Source/WebKit/mac/ChangeLog 2014-11-13 23:30:03 UTC (rev 176098)
+++ trunk/Source/WebKit/mac/ChangeLog 2014-11-13 23:30:45 UTC (rev 176099)
@@ -1,3 +1,24 @@
+2014-11-13 Beth Dakin <[email protected]>
+
+ WK1: Support default actions for video
+ https://bugs.webkit.org/show_bug.cgi?id=138713
+ -and corresponding-
+ rdar://problem/18877520
+
+ Reviewed by Tim Horton.
+
+ Call setToNonShadowAncestor() for media HitTestResults.
+ * WebView/WebActionMenuController.mm:
+ (-[WebActionMenuController performHitTestAtPoint:]):
+
+ Default items and actions.
+ (-[WebActionMenuController _defaultMenuItemsForVideo:]):
+ (-[WebActionMenuController _copyVideoURL:]):
+ (-[WebActionMenuController _saveVideoToDownloads:]):
+ (-[WebActionMenuController _createActionMenuItemForTag:withHitTestResult:]):
+ (-[WebActionMenuController _defaultMenuItemsForHitTestResult:]):
+ * WebView/WebUIDelegatePrivate.h:
+
2014-11-13 Tim Horton <[email protected]>
WK1: Update icon for Add to Reading List
Modified: trunk/Source/WebKit/mac/WebView/WebActionMenuController.mm (176098 => 176099)
--- trunk/Source/WebKit/mac/WebView/WebActionMenuController.mm 2014-11-13 23:30:03 UTC (rev 176098)
+++ trunk/Source/WebKit/mac/WebView/WebActionMenuController.mm 2014-11-13 23:30:45 UTC (rev 176099)
@@ -110,6 +110,15 @@
HitTestRequest::HitTestRequestType hitType = HitTestRequest::ReadOnly | HitTestRequest::Active;
_hitTestResult = coreFrame->eventHandler().hitTestResultAtPoint(IntPoint(point), hitType);
+ // We hit test including shadow content to get the desired result for editable text regions.
+ // But for media, we want to re-set to the shadow root.
+ if (Node* node = _hitTestResult.innerNode()) {
+ if (Element* shadowHost = node->shadowHost()) {
+ if (shadowHost->isMediaElement())
+ _hitTestResult.setToNonShadowAncestor();
+ }
+ }
+
return [[[WebElementDictionary alloc] initWithHitTestResult:_hitTestResult] autorelease];
}
@@ -385,6 +394,44 @@
[_webView _downloadURL:_hitTestResult.absoluteImageURL()];
}
+#pragma mark Video actions
+
+- (NSArray*)_defaultMenuItemsForVideo:(WebElementDictionary *)hitTestResult
+{
+ RetainPtr<NSMenuItem> copyVideoURLItem = [self _createActionMenuItemForTag:WebActionMenuItemTagCopyVideoURL withHitTestResult:hitTestResult];
+
+ RetainPtr<NSMenuItem> saveToDownloadsItem = [self _createActionMenuItemForTag:WebActionMenuItemTagSaveVideoToDownloads withHitTestResult:hitTestResult];
+ if (!_hitTestResult.isDownloadableMedia() || !_webView.downloadDelegate)
+ [saveToDownloadsItem setEnabled:NO];
+
+ RetainPtr<NSMenuItem> shareItem = [self _createActionMenuItemForTag:WebActionMenuItemTagShareVideo withHitTestResult:hitTestResult];
+ NSString *urlToShare = _hitTestResult.absoluteMediaURL();
+ if (!_hitTestResult.isDownloadableMedia()) {
+ [saveToDownloadsItem setEnabled:NO];
+ urlToShare = [_webView mainFrameURL];
+ }
+ _sharingServicePicker = adoptNS([[NSSharingServicePicker alloc] initWithItems:@[ urlToShare ]]);
+ [_sharingServicePicker setDelegate:self];
+ [shareItem setSubmenu:[_sharingServicePicker menu]];
+
+ return @[ copyVideoURLItem.get(), [NSMenuItem separatorItem], saveToDownloadsItem.get(), shareItem.get() ];
+}
+
+- (void)_copyVideoURL:(id)sender
+{
+ NSString *urlToCopy = _hitTestResult.absoluteMediaURL();
+ if (!_hitTestResult.isDownloadableMedia())
+ urlToCopy = [_webView mainFrameURL];
+
+ [[NSPasteboard generalPasteboard] clearContents];
+ [[NSPasteboard generalPasteboard] writeObjects:@[ urlToCopy ]];
+}
+
+- (void)_saveVideoToDownloads:(id)sender
+{
+ [_webView _downloadURL:_hitTestResult.absoluteMediaURL()];
+}
+
#pragma mark Text actions
- (NSArray *)_defaultMenuItemsForText:(WebElementDictionary *)hitTestResult
@@ -664,6 +711,23 @@
image = [NSImage imageNamed:@"NSActionMenuShare"];
break;
+ case WebActionMenuItemTagCopyVideoURL:
+ selector = @selector(_copyVideoURL:);
+ title = WEB_UI_STRING_KEY("Copy", "Copy (video action menu item)", "video action menu item");
+ image = [NSImage imageNamed:@"NSActionMenuCopy"];
+ break;
+
+ case WebActionMenuItemTagSaveVideoToDownloads:
+ selector = @selector(_saveVideoToDownloads:);
+ title = WEB_UI_STRING_KEY("Save to Downloads", "Save to Downloads (video action menu item)", "video action menu item");
+ image = [NSImage imageNamed:@"NSActionMenuSaveToDownloads"];
+ break;
+
+ case WebActionMenuItemTagShareVideo:
+ title = WEB_UI_STRING_KEY("Share", "Share (video action menu item)", "video action menu item");
+ image = [NSImage imageNamed:@"NSActionMenuShare"];
+ break;
+
default:
ASSERT_NOT_REACHED();
return nil;
@@ -690,6 +754,11 @@
return [self _defaultMenuItemsForLink:hitTestResult];
}
+ if (!_hitTestResult.absoluteMediaURL().isEmpty()) {
+ _type = WebActionMenuVideo;
+ return [self _defaultMenuItemsForVideo:hitTestResult];
+ }
+
if (_hitTestResult.image() && !_hitTestResult.absoluteImageURL().isEmpty()) {
_type = WebActionMenuImage;
return [self _defaultMenuItemsForImage:hitTestResult];
Modified: trunk/Source/WebKit/mac/WebView/WebUIDelegatePrivate.h (176098 => 176099)
--- trunk/Source/WebKit/mac/WebView/WebUIDelegatePrivate.h 2014-11-13 23:30:03 UTC (rev 176098)
+++ trunk/Source/WebKit/mac/WebView/WebUIDelegatePrivate.h 2014-11-13 23:30:45 UTC (rev 176099)
@@ -124,7 +124,10 @@
WebActionMenuItemTagCopyImage,
WebActionMenuItemTagAddImageToPhotos,
WebActionMenuItemTagSaveImageToDownloads,
- WebActionMenuItemTagShareImage
+ WebActionMenuItemTagShareImage,
+ WebActionMenuItemTagCopyVideoURL,
+ WebActionMenuItemTagSaveVideoToDownloads,
+ WebActionMenuItemTagShareVideo
};
typedef enum {
@@ -134,7 +137,8 @@
WebActionMenuEditableText,
WebActionMenuWhitespaceInEditableArea,
WebActionMenuEditableTextWithSuggestions,
- WebActionMenuImage
+ WebActionMenuImage,
+ WebActionMenuVideo
} WebActionMenuType;
// Message Sources.
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes