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

Reply via email to