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;