Title: [176107] trunk/Source/WebKit/mac
Revision
176107
Author
[email protected]
Date
2014-11-13 16:37:53 -0800 (Thu, 13 Nov 2014)

Log Message

WK1: Clean up WebActionMenuController to use the _hitTestResult ivar
https://bugs.webkit.org/show_bug.cgi?id=138716
-and corresponding-
rdar://problem/18977222

Reviewed by Tim Horton.

It’s not necessary to use the WebElementDictionary for so many things now that we 
are caching the HitTestResult. We should just use the HitTestResult.

* WebView/WebActionMenuController.mm:
(-[WebActionMenuController prepareForMenu:withEvent:]):
(-[WebActionMenuController _openURLFromActionMenu:]):
(-[WebActionMenuController _addToReadingListFromActionMenu:]):
(elementBoundingBoxFromNode):
(-[WebActionMenuController _quickLookURLFromActionMenu:]):
(-[WebActionMenuController _defaultMenuItemsForLink]):
(-[WebActionMenuController _defaultMenuItemsForImage]):
(-[WebActionMenuController _defaultMenuItemsForVideo]):
(-[WebActionMenuController _defaultMenuItemsForText]):
(-[WebActionMenuController _defaultMenuItemsForEditableText]):
(-[WebActionMenuController _defaultMenuItemsForEditableTextWithSuggestions]):
(-[WebActionMenuController _defaultMenuItemsForWhitespaceInEditableArea]):
(-[WebActionMenuController _createActionMenuItemForTag:]):
(-[WebActionMenuController _defaultMenuItems]):
(-[WebActionMenuController _elementBoundingBoxFromDOMElement:]): Deleted.
(-[WebActionMenuController _defaultMenuItemsForLink:]): Deleted.
(-[WebActionMenuController _defaultMenuItemsForImage:]): Deleted.
(-[WebActionMenuController _defaultMenuItemsForVideo:]): Deleted.
(-[WebActionMenuController _defaultMenuItemsForText:]): Deleted.
(-[WebActionMenuController _defaultMenuItemsForEditableText:]): Deleted.
(-[WebActionMenuController _defaultMenuItemsForEditableTextWithSuggestions:]): Deleted.
(-[WebActionMenuController _defaultMenuItemsForWhitespaceInEditableArea:]): Deleted.
(-[WebActionMenuController _createActionMenuItemForTag:withHitTestResult:]): Deleted.
(-[WebActionMenuController _defaultMenuItemsForHitTestResult:]): Deleted.

Modified Paths

Diff

Modified: trunk/Source/WebKit/mac/ChangeLog (176106 => 176107)


--- trunk/Source/WebKit/mac/ChangeLog	2014-11-14 00:36:33 UTC (rev 176106)
+++ trunk/Source/WebKit/mac/ChangeLog	2014-11-14 00:37:53 UTC (rev 176107)
@@ -1,3 +1,41 @@
+2014-11-13  Beth Dakin  <[email protected]>
+
+        WK1: Clean up WebActionMenuController to use the _hitTestResult ivar
+        https://bugs.webkit.org/show_bug.cgi?id=138716
+        -and corresponding-
+        rdar://problem/18977222
+
+        Reviewed by Tim Horton.
+
+        It’s not necessary to use the WebElementDictionary for so many things now that we 
+        are caching the HitTestResult. We should just use the HitTestResult.
+
+        * WebView/WebActionMenuController.mm:
+        (-[WebActionMenuController prepareForMenu:withEvent:]):
+        (-[WebActionMenuController _openURLFromActionMenu:]):
+        (-[WebActionMenuController _addToReadingListFromActionMenu:]):
+        (elementBoundingBoxFromNode):
+        (-[WebActionMenuController _quickLookURLFromActionMenu:]):
+        (-[WebActionMenuController _defaultMenuItemsForLink]):
+        (-[WebActionMenuController _defaultMenuItemsForImage]):
+        (-[WebActionMenuController _defaultMenuItemsForVideo]):
+        (-[WebActionMenuController _defaultMenuItemsForText]):
+        (-[WebActionMenuController _defaultMenuItemsForEditableText]):
+        (-[WebActionMenuController _defaultMenuItemsForEditableTextWithSuggestions]):
+        (-[WebActionMenuController _defaultMenuItemsForWhitespaceInEditableArea]):
+        (-[WebActionMenuController _createActionMenuItemForTag:]):
+        (-[WebActionMenuController _defaultMenuItems]):
+        (-[WebActionMenuController _elementBoundingBoxFromDOMElement:]): Deleted.
+        (-[WebActionMenuController _defaultMenuItemsForLink:]): Deleted.
+        (-[WebActionMenuController _defaultMenuItemsForImage:]): Deleted.
+        (-[WebActionMenuController _defaultMenuItemsForVideo:]): Deleted.
+        (-[WebActionMenuController _defaultMenuItemsForText:]): Deleted.
+        (-[WebActionMenuController _defaultMenuItemsForEditableText:]): Deleted.
+        (-[WebActionMenuController _defaultMenuItemsForEditableTextWithSuggestions:]): Deleted.
+        (-[WebActionMenuController _defaultMenuItemsForWhitespaceInEditableArea:]): Deleted.
+        (-[WebActionMenuController _createActionMenuItemForTag:withHitTestResult:]): Deleted.
+        (-[WebActionMenuController _defaultMenuItemsForHitTestResult:]): Deleted.
+
 2014-11-13  Daniel Bates  <[email protected]>
 
         [iOS] NSGeometry data types are not available in the public SDK

Modified: trunk/Source/WebKit/mac/WebView/WebActionMenuController.mm (176106 => 176107)


--- trunk/Source/WebKit/mac/WebView/WebActionMenuController.mm	2014-11-14 00:36:33 UTC (rev 176106)
+++ trunk/Source/WebKit/mac/WebView/WebActionMenuController.mm	2014-11-14 00:37:53 UTC (rev 176107)
@@ -134,7 +134,7 @@
     [actionMenu removeAllItems];
 
     WebElementDictionary *hitTestResult = [self performHitTestAtPoint:event.locationInWindow];
-    NSArray *menuItems = [self _defaultMenuItemsForHitTestResult:hitTestResult];
+    NSArray *menuItems = [self _defaultMenuItems];
 
     // Allow clients to customize the menu items.
     if ([[_webView UIDelegate] respondsToSelector:@selector(_webView:actionMenuItemsForHitTestResult:withType:defaultActionMenuItems:)])
@@ -181,13 +181,7 @@
     if (!_webView)
         return;
 
-    NSURL *url = "" representedObject];
-    if (!url)
-        return;
-
-    ASSERT([url isKindOfClass:[NSURL class]]);
-
-    [[NSWorkspace sharedWorkspace] openURL:url];
+    [[NSWorkspace sharedWorkspace] openURL:_hitTestResult.absoluteLinkURL()];
 }
 
 - (void)_addToReadingListFromActionMenu:(id)sender
@@ -195,29 +189,23 @@
     if (!_webView)
         return;
 
-    NSURL *url = "" representedObject];
-    if (!url)
-        return;
-
-    ASSERT([url isKindOfClass:[NSURL class]]);
-
+    NSURL *url = ""
     NSSharingService *service = [NSSharingService sharingServiceNamed:NSSharingServiceNameAddToSafariReadingList];
     [service performWithItems:@[ url ]];
 }
 
-- (NSRect)_elementBoundingBoxFromDOMElement:(DOMElement *)domElement
+static IntRect elementBoundingBoxFromNode(Node* node)
 {
-    if (!domElement)
-        return NSZeroRect;
+    if (!node)
+        return IntRect();
 
-    Node* node = core(domElement);
     Frame* frame = node->document().frame();
     if (!frame)
-        return NSZeroRect;
+        return IntRect();
 
     FrameView* view = frame->view();
     if (!view)
-        return NSZeroRect;
+        return IntRect();
 
     return view->contentsToWindow(node->pixelSnappedBoundingBox());
 }
@@ -227,21 +215,15 @@
     if (!_webView)
         return;
 
-    NSDictionary *hitTestResult = [sender representedObject];
-    if (!hitTestResult)
-        return;
-
-    ASSERT([hitTestResult isKindOfClass:[NSDictionary class]]);
-
-    NSURL *url = "" objectForKey:WebElementLinkURLKey];
+    NSURL *url = ""
     if (!url)
         return;
 
-    DOMElement *domElement = [hitTestResult objectForKey:WebElementDOMNodeKey];
-    if (!domElement)
+    Node* node = _hitTestResult.innerNode();
+    if (!node)
         return;
 
-    NSRect itemFrame = [_webView convertRect:[self _elementBoundingBoxFromDOMElement:domElement] toView:nil];
+    NSRect itemFrame = [_webView convertRect:elementBoundingBoxFromNode(node) toView:nil];
     NSSize maximumPreviewSize = NSMakeSize(_webView.bounds.size.width * 0.75, _webView.bounds.size.height * 0.75);
 
     RetainPtr<QLPreviewBubble> bubble = adoptNS([[getQLPreviewBubbleClass() alloc] init]);
@@ -257,40 +239,39 @@
     [bubble showPreviewItem:url itemFrame:itemFrame];
 }
 
-- (NSArray *)_defaultMenuItemsForLink:(WebElementDictionary *)hitTestResult
+- (NSArray *)_defaultMenuItemsForLink
 {
-    NSURL *url = "" objectForKey:WebElementLinkURLKey];
+    NSURL *url = ""
     if (!url)
         return @[ ];
 
     if (!WebCore::protocolIsInHTTPFamily([url absoluteString]))
         return @[ ];
 
-    RetainPtr<NSMenuItem> openLinkItem = [self _createActionMenuItemForTag:WebActionMenuItemTagOpenLinkInDefaultBrowser withHitTestResult:hitTestResult];
-    RetainPtr<NSMenuItem> previewLinkItem = [self _createActionMenuItemForTag:WebActionMenuItemTagPreviewLink withHitTestResult:hitTestResult];
-    RetainPtr<NSMenuItem> readingListItem = [self _createActionMenuItemForTag:WebActionMenuItemTagAddLinkToSafariReadingList withHitTestResult:hitTestResult];
+    RetainPtr<NSMenuItem> openLinkItem = [self _createActionMenuItemForTag:WebActionMenuItemTagOpenLinkInDefaultBrowser];
+    RetainPtr<NSMenuItem> previewLinkItem = [self _createActionMenuItemForTag:WebActionMenuItemTagPreviewLink];
+    RetainPtr<NSMenuItem> readingListItem = [self _createActionMenuItemForTag:WebActionMenuItemTagAddLinkToSafariReadingList];
 
     return @[ openLinkItem.get(), previewLinkItem.get(), [NSMenuItem separatorItem], readingListItem.get() ];
 }
 
 #pragma mark Image actions
 
-- (NSArray *)_defaultMenuItemsForImage:(WebElementDictionary *)hitTestResult
+- (NSArray *)_defaultMenuItemsForImage
 {
-    RetainPtr<NSMenuItem> copyImageItem = [self _createActionMenuItemForTag:WebActionMenuItemTagCopyImage withHitTestResult:hitTestResult];
+    RetainPtr<NSMenuItem> copyImageItem = [self _createActionMenuItemForTag:WebActionMenuItemTagCopyImage];
 
     RetainPtr<NSMenuItem> addToPhotosItem;
     if ([self _canAddMediaToPhotos])
-        addToPhotosItem = [self _createActionMenuItemForTag:WebActionMenuItemTagAddImageToPhotos withHitTestResult:hitTestResult];
+        addToPhotosItem = [self _createActionMenuItemForTag:WebActionMenuItemTagAddImageToPhotos];
     else
         addToPhotosItem = [NSMenuItem separatorItem];
 
-    RetainPtr<NSMenuItem> saveToDownloadsItem = [self _createActionMenuItemForTag:WebActionMenuItemTagSaveImageToDownloads withHitTestResult:hitTestResult];
+    RetainPtr<NSMenuItem> saveToDownloadsItem = [self _createActionMenuItemForTag:WebActionMenuItemTagSaveImageToDownloads];
     if (!_webView.downloadDelegate)
         [saveToDownloadsItem setEnabled:NO];
 
-
-    RetainPtr<NSMenuItem> shareItem = [self _createActionMenuItemForTag:WebActionMenuItemTagShareImage withHitTestResult:hitTestResult];
+    RetainPtr<NSMenuItem> shareItem = [self _createActionMenuItemForTag:WebActionMenuItemTagShareImage];
     if (Image* image = _hitTestResult.image()) {
         RetainPtr<CGImageRef> cgImage = image->getCGImageRef();
         RetainPtr<NSImage> nsImage = adoptNS([[NSImage alloc] initWithCGImage:cgImage.get() size:NSZeroSize]);
@@ -396,15 +377,15 @@
 
 #pragma mark Video actions
 
-- (NSArray*)_defaultMenuItemsForVideo:(WebElementDictionary *)hitTestResult
+- (NSArray*)_defaultMenuItemsForVideo
 {
-    RetainPtr<NSMenuItem> copyVideoURLItem = [self _createActionMenuItemForTag:WebActionMenuItemTagCopyVideoURL withHitTestResult:hitTestResult];
+    RetainPtr<NSMenuItem> copyVideoURLItem = [self _createActionMenuItemForTag:WebActionMenuItemTagCopyVideoURL];
 
-    RetainPtr<NSMenuItem> saveToDownloadsItem = [self _createActionMenuItemForTag:WebActionMenuItemTagSaveVideoToDownloads withHitTestResult:hitTestResult];
+    RetainPtr<NSMenuItem> saveToDownloadsItem = [self _createActionMenuItemForTag:WebActionMenuItemTagSaveVideoToDownloads];
     if (!_hitTestResult.isDownloadableMedia() || !_webView.downloadDelegate)
         [saveToDownloadsItem setEnabled:NO];
 
-    RetainPtr<NSMenuItem> shareItem = [self _createActionMenuItemForTag:WebActionMenuItemTagShareVideo withHitTestResult:hitTestResult];
+    RetainPtr<NSMenuItem> shareItem = [self _createActionMenuItemForTag:WebActionMenuItemTagShareVideo];
     NSString *urlToShare = _hitTestResult.absoluteMediaURL();
     if (!_hitTestResult.isDownloadableMedia()) {
         [saveToDownloadsItem setEnabled:NO];
@@ -434,24 +415,24 @@
 
 #pragma mark Text actions
 
-- (NSArray *)_defaultMenuItemsForText:(WebElementDictionary *)hitTestResult
+- (NSArray *)_defaultMenuItemsForText
 {
-    RetainPtr<NSMenuItem> copyTextItem = [self _createActionMenuItemForTag:WebActionMenuItemTagCopyText withHitTestResult:hitTestResult];
-    RetainPtr<NSMenuItem> lookupTextItem = [self _createActionMenuItemForTag:WebActionMenuItemTagLookupText withHitTestResult:hitTestResult];
+    RetainPtr<NSMenuItem> copyTextItem = [self _createActionMenuItemForTag:WebActionMenuItemTagCopyText];
+    RetainPtr<NSMenuItem> lookupTextItem = [self _createActionMenuItemForTag:WebActionMenuItemTagLookupText];
 
     return @[ copyTextItem.get(), lookupTextItem.get() ];
 }
 
-- (NSArray *)_defaultMenuItemsForEditableText:(WebElementDictionary *)hitTestResult
+- (NSArray *)_defaultMenuItemsForEditableText
 {
-    RetainPtr<NSMenuItem> copyTextItem = [self _createActionMenuItemForTag:WebActionMenuItemTagCopyText withHitTestResult:hitTestResult];
-    RetainPtr<NSMenuItem> lookupTextItem = [self _createActionMenuItemForTag:WebActionMenuItemTagLookupText withHitTestResult:hitTestResult];
-    RetainPtr<NSMenuItem> pasteItem = [self _createActionMenuItemForTag:WebActionMenuItemTagPaste withHitTestResult:hitTestResult];
+    RetainPtr<NSMenuItem> copyTextItem = [self _createActionMenuItemForTag:WebActionMenuItemTagCopyText];
+    RetainPtr<NSMenuItem> lookupTextItem = [self _createActionMenuItemForTag:WebActionMenuItemTagLookupText];
+    RetainPtr<NSMenuItem> pasteItem = [self _createActionMenuItemForTag:WebActionMenuItemTagPaste];
 
     return @[ copyTextItem.get(), lookupTextItem.get(), pasteItem.get() ];
 }
 
-- (NSArray *)_defaultMenuItemsForEditableTextWithSuggestions:(WebElementDictionary *)hitTestResult
+- (NSArray *)_defaultMenuItemsForEditableTextWithSuggestions
 {
     Frame* frame = core([_webView _selectedOrMainFrame]);
     if (!frame)
@@ -484,10 +465,10 @@
         [spellingSubMenu addItem:item.get()];
     }
 
-    RetainPtr<NSMenuItem> copyTextItem = [self _createActionMenuItemForTag:WebActionMenuItemTagCopyText withHitTestResult:hitTestResult];
-    RetainPtr<NSMenuItem> lookupTextItem = [self _createActionMenuItemForTag:WebActionMenuItemTagLookupText withHitTestResult:hitTestResult];
-    RetainPtr<NSMenuItem> pasteItem = [self _createActionMenuItemForTag:WebActionMenuItemTagPaste withHitTestResult:hitTestResult];
-    RetainPtr<NSMenuItem> textSuggestionsItem = [self _createActionMenuItemForTag:WebActionMenuItemTagTextSuggestions withHitTestResult:hitTestResult];
+    RetainPtr<NSMenuItem> copyTextItem = [self _createActionMenuItemForTag:WebActionMenuItemTagCopyText];
+    RetainPtr<NSMenuItem> lookupTextItem = [self _createActionMenuItemForTag:WebActionMenuItemTagLookupText];
+    RetainPtr<NSMenuItem> pasteItem = [self _createActionMenuItemForTag:WebActionMenuItemTagPaste];
+    RetainPtr<NSMenuItem> textSuggestionsItem = [self _createActionMenuItemForTag:WebActionMenuItemTagTextSuggestions];
 
     [textSuggestionsItem setSubmenu:spellingSubMenu.get()];
 
@@ -600,9 +581,9 @@
 
 #pragma mark Whitespace actions
 
-- (NSArray *)_defaultMenuItemsForWhitespaceInEditableArea:(WebElementDictionary *)hitTestResult
+- (NSArray *)_defaultMenuItemsForWhitespaceInEditableArea
 {
-    RetainPtr<NSMenuItem> pasteItem = [self _createActionMenuItemForTag:WebActionMenuItemTagPaste withHitTestResult:hitTestResult];
+    RetainPtr<NSMenuItem> pasteItem = [self _createActionMenuItemForTag:WebActionMenuItemTagPaste];
 
     return @[ [NSMenuItem separatorItem], [NSMenuItem separatorItem], pasteItem.get() ];
 }
@@ -636,33 +617,29 @@
 
 #pragma mark Menu Items
 
-- (RetainPtr<NSMenuItem>)_createActionMenuItemForTag:(uint32_t)tag withHitTestResult:(WebElementDictionary *)hitTestResult
+- (RetainPtr<NSMenuItem>)_createActionMenuItemForTag:(uint32_t)tag
 {
     SEL selector = nullptr;
     NSString *title = nil;
     NSImage *image = nil;
-    id representedObject = nil;
 
     switch (tag) {
     case WebActionMenuItemTagOpenLinkInDefaultBrowser:
         selector = @selector(_openURLFromActionMenu:);
         title = WEB_UI_STRING_KEY("Open", "Open (action menu item)", "action menu item");
         image = webKitBundleImageNamed(@"OpenInNewWindowTemplate");
-        representedObject = [hitTestResult objectForKey:WebElementLinkURLKey];
         break;
 
     case WebActionMenuItemTagPreviewLink:
         selector = @selector(_quickLookURLFromActionMenu:);
         title = WEB_UI_STRING_KEY("Preview", "Preview (action menu item)", "action menu item");
         image = [NSImage imageNamed:@"NSActionMenuQuickLook"];
-        representedObject = hitTestResult;
         break;
 
     case WebActionMenuItemTagAddLinkToSafariReadingList:
         selector = @selector(_addToReadingListFromActionMenu:);
         title = WEB_UI_STRING_KEY("Add to Reading List", "Add to Reading List (action menu item)", "action menu item");
         image = [NSImage imageNamed:@"NSActionMenuAddToReadingList"];
-        representedObject = [hitTestResult objectForKey:WebElementLinkURLKey];
         break;
 
     case WebActionMenuItemTagCopyText:
@@ -737,7 +714,6 @@
     [item setImage:image];
     [item setTarget:self];
     [item setTag:tag];
-    [item setRepresentedObject:representedObject];
     return item;
 }
 
@@ -746,44 +722,44 @@
     return [[NSBundle bundleForClass:NSClassFromString(@"WKView")] imageForResource:name];
 }
 
-- (NSArray *)_defaultMenuItemsForHitTestResult:(WebElementDictionary *)hitTestResult
+- (NSArray *)_defaultMenuItems
 {
-    NSURL *url = "" objectForKey:WebElementLinkURLKey];
+    NSURL *url = ""
     if (url) {
         _type = WebActionMenuLink;
-        return [self _defaultMenuItemsForLink:hitTestResult];
+        return [self _defaultMenuItemsForLink];
     }
 
     if (!_hitTestResult.absoluteMediaURL().isEmpty()) {
         _type = WebActionMenuVideo;
-        return [self _defaultMenuItemsForVideo:hitTestResult];
+        return [self _defaultMenuItemsForVideo];
     }
 
     if (_hitTestResult.image() && !_hitTestResult.absoluteImageURL().isEmpty()) {
         _type = WebActionMenuImage;
-        return [self _defaultMenuItemsForImage:hitTestResult];
+        return [self _defaultMenuItemsForImage];
     }
 
     Node* node = _hitTestResult.innerNode();
     if (node && node->isTextNode()) {
         if (_hitTestResult.isContentEditable()) {
-            NSArray *editableTextWithSuggestions = [self _defaultMenuItemsForEditableTextWithSuggestions:hitTestResult];
+            NSArray *editableTextWithSuggestions = [self _defaultMenuItemsForEditableTextWithSuggestions];
             if (editableTextWithSuggestions.count) {
                 _type = WebActionMenuEditableTextWithSuggestions;
                 return editableTextWithSuggestions;
             }
 
             _type = WebActionMenuEditableText;
-            return [self _defaultMenuItemsForEditableText:hitTestResult];
+            return [self _defaultMenuItemsForEditableText];
         }
 
         _type = WebActionMenuReadOnlyText;
-        return [self _defaultMenuItemsForText:hitTestResult];
+        return [self _defaultMenuItemsForText];
     }
 
     if (_hitTestResult.isContentEditable()) {
         _type = WebActionMenuWhitespaceInEditableArea;
-        return [self _defaultMenuItemsForWhitespaceInEditableArea:hitTestResult];
+        return [self _defaultMenuItemsForWhitespaceInEditableArea];
     }
 
     _type = WebActionMenuNone;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to