Changeset 279164 in webkit
- Timestamp:
- Jun 22, 2021, 6:32:54 PM (5 years ago)
- Location:
- trunk/Source
- Files:
-
- 28 edited
- 1 copied
-
WTF/ChangeLog (modified) (1 diff)
-
WTF/Scripts/Preferences/WebPreferencesInternal.yaml (modified) (1 diff)
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/en.lproj/Localizable.strings (modified) (3 diffs)
-
WebCore/page/ContextMenuController.cpp (modified) (6 diffs)
-
WebCore/page/EventHandler.cpp (modified) (1 diff)
-
WebCore/platform/ContextMenuItem.cpp (modified) (1 diff)
-
WebCore/platform/ContextMenuItem.h (modified) (1 diff)
-
WebCore/platform/LocalizedStrings.h (modified) (1 diff)
-
WebCore/platform/cocoa/LocalizedStringsCocoa.mm (modified) (1 diff)
-
WebKit/ChangeLog (modified) (1 diff)
-
WebKit/Shared/API/c/WKSharedAPICast.h (modified) (2 diffs)
-
WebKit/UIProcess/Cocoa/QuickLookPreviewActivity.h (copied) (copied from trunk/Source/WebKit/UIProcess/mac/WKQuickLookPreviewController.h ) (1 diff)
-
WebKit/UIProcess/Cocoa/WebViewImpl.h (modified) (2 diffs)
-
WebKit/UIProcess/Cocoa/WebViewImpl.mm (modified) (2 diffs)
-
WebKit/UIProcess/PageClient.h (modified) (2 diffs)
-
WebKit/UIProcess/WebContextMenuProxy.h (modified) (2 diffs)
-
WebKit/UIProcess/WebPageProxy.cpp (modified) (5 diffs)
-
WebKit/UIProcess/WebPageProxy.h (modified) (3 diffs)
-
WebKit/UIProcess/mac/PageClientImplMac.h (modified) (1 diff)
-
WebKit/UIProcess/mac/PageClientImplMac.mm (modified) (1 diff)
-
WebKit/UIProcess/mac/WKQuickLookPreviewController.h (modified) (1 diff)
-
WebKit/UIProcess/mac/WKQuickLookPreviewController.mm (modified) (1 diff)
-
WebKit/UIProcess/mac/WebContextMenuProxyMac.h (modified) (2 diffs)
-
WebKit/UIProcess/mac/WebContextMenuProxyMac.mm (modified) (6 diffs)
-
WebKit/UIProcess/mac/WebPageProxyMac.mm (modified) (2 diffs)
-
WebKit/WebKit.xcodeproj/project.pbxproj (modified) (2 diffs)
-
WebKitLegacy/mac/ChangeLog (modified) (1 diff)
-
WebKitLegacy/mac/WebView/WebHTMLView.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WTF/ChangeLog
r279137 r279164 1 2021-06-22 Wenson Hsieh <wenson_hsieh@apple.com> 2 3 [Live Text] [macOS] Add an internal option to disable inline text selection in images 4 https://bugs.webkit.org/show_bug.cgi?id=227265 5 rdar://79460142 6 7 Reviewed by Tim Horton. 8 9 Add a new internal feature flag. See WebKit ChangeLog for more details. 10 11 * Scripts/Preferences/WebPreferencesInternal.yaml: 12 1 13 2021-06-22 Fujii Hironori <Hironori.Fujii@sony.com> 2 14 -
trunk/Source/WTF/Scripts/Preferences/WebPreferencesInternal.yaml
r277564 r279164 585 585 default: false 586 586 587 PreferInlineTextSelectionInImages: 588 type: bool 589 humanReadableName: "Inline Text Selection in Images" 590 humanReadableDescription: "Prefer inline text selection in images over using the context menu" 591 condition: ENABLE(IMAGE_ANALYSIS) 592 defaultValue: 593 WebCore: 594 default: true 595 WebKitLegacy: 596 default: true 597 WebKit: 598 default: true 599 587 600 PreferPageRenderingUpdatesNear60FPSEnabled: 588 601 type: bool -
trunk/Source/WebCore/ChangeLog
r279148 r279164 1 2021-06-22 Wenson Hsieh <wenson_hsieh@apple.com> 2 3 [Live Text] [macOS] Add an internal option to disable inline text selection in images 4 https://bugs.webkit.org/show_bug.cgi?id=227265 5 rdar://79460142 6 7 Reviewed by Tim Horton. 8 9 Add support for the new feature flag. See WebKit/ChangeLog for more details. 10 11 * en.lproj/Localizable.strings: 12 13 Add additional localizable strings to represent each of the possible titles for the "Quick Look"/"Look Up" 14 context menu item. When inline text selection is enabled, the item shows up as "Look Up", and is only added if 15 we actually discover visual search results. 16 17 However, when inline text selection is disabled, this item will always be added to the context menu under the 18 title "Quick Look", and will be retitled to either "Look Up in Quick Look" or "Select Text in Quick Look" once 19 either visual search results or text is recognized, respectively. 20 21 * page/ContextMenuController.cpp: 22 (WebCore::ContextMenuController::contextMenuItemSelected): 23 (WebCore::ContextMenuController::populate): 24 25 In the case where inline text selection is disabled, add the Quick Look item to the end of the context menu, 26 after a separator. Note that in the case where inline text selection is enabled, it doesn't actually matter 27 where we add this item, since it is automatically removed and only reinserted if we find visual search results 28 for the image. 29 30 (WebCore::ContextMenuController::checkOrEnableIfNeeded const): 31 32 Rename the existing ContextMenuItemTagLookUpImage to ContextMenuItemTagQuickLookImage, since it is no longer 33 limited to the visual look up feature. 34 35 * page/EventHandler.cpp: 36 (WebCore::EventHandler::updateMouseEventTargetNode): 37 38 Consult the feature flag and avoid kicking off the text recognition timer if inline text selection is disabled. 39 40 * platform/ContextMenuItem.cpp: 41 (WebCore::isValidContextMenuAction): 42 * platform/ContextMenuItem.h: 43 * platform/LocalizedStrings.h: 44 * platform/cocoa/LocalizedStringsCocoa.mm: 45 (WebCore::contextMenuItemTagQuickLookImage): 46 (WebCore::contextMenuItemTagQuickLookImageForTextSelection): 47 (WebCore::contextMenuItemTagQuickLookImageForVisualSearch): 48 1 49 2021-06-22 Devin Rousso <drousso@apple.com> 2 50 -
trunk/Source/WebCore/en.lproj/Localizable.strings
r278767 r279164 578 578 "Look Up in Dictionary" = "Look Up in Dictionary"; 579 579 580 /* Title for Quick Look action button for images with visual search results */ 581 "Look Up in Quick Look" = "Look Up in Quick Look"; 582 580 583 /* Look Up context menu item with selected word */ 581 584 "Look Up “%@”" = "Look Up “%@”"; … … 752 755 "PostScript" = "PostScript"; 753 756 757 /* Title for Quick Look action button */ 758 "Quick Look" = "Quick Look"; 759 754 760 /* Undo action name */ 755 761 "Raise Baseline (Undo action name)" = "Raise Baseline"; … … 794 800 "Search with %@" = "Search with %@"; 795 801 802 /* Title for Quick Look action button for images with text */ 803 "Select Text in Quick Look" = "Select Text in Quick Look"; 804 796 805 /* Validation message for required file inputs that have no value */ 797 806 "Select a file" = "Select a file"; -
trunk/Source/WebCore/page/ContextMenuController.cpp
r279098 r279164 516 516 frame->editor().applyDictationAlternative(title); 517 517 break; 518 case ContextMenuItemTag LookUpImage:518 case ContextMenuItemTagQuickLookImage: 519 519 // This should be handled at the client layer. 520 520 ASSERT_NOT_REACHED(); … … 825 825 ContextMenuItem InsertEmojiItem(ActionType, ContextMenuItemTagInsertEmoji, contextMenuItemTagInsertEmoji()); 826 826 #endif 827 #if ENABLE(IMAGE_ANALYSIS)828 ContextMenuItem LookUpImageItem(ActionType, ContextMenuItemTagLookUpImage, contextMenuItemTagLookUpImage());829 #endif830 827 831 828 #if PLATFORM(GTK) || PLATFORM(WIN) … … 850 847 if (m_context.controlledImage()) 851 848 return; 849 #endif 850 851 #if ENABLE(IMAGE_ANALYSIS) 852 bool shouldAppendQuickLookImageItem = false; 853 auto quickLookItemTitle = frame->settings().preferInlineTextSelectionInImages() ? contextMenuItemTagLookUpImage() : contextMenuItemTagQuickLookImage(); 854 ContextMenuItem QuickLookImageItem { ActionType, ContextMenuItemTagQuickLookImage, quickLookItemTitle }; 852 855 #endif 853 856 … … 901 904 #if ENABLE(IMAGE_ANALYSIS) 902 905 if (m_client.supportsLookUpInImages() && image && !image->isAnimated()) 903 appendItem(LookUpImageItem, m_contextMenu.get());906 shouldAppendQuickLookImageItem = true; 904 907 #endif 905 908 } … … 1165 1168 } 1166 1169 } 1170 1171 #if ENABLE(IMAGE_ANALYSIS) 1172 if (shouldAppendQuickLookImageItem) { 1173 if (!frame->settings().preferInlineTextSelectionInImages()) { 1174 // In the case where inline text selection is enabled, the Look Up item is only added if 1175 // we discover visual look up results after image analysis. In that scenario, a separator 1176 // is only added before the Look Up item once we're certain that we want to show it. 1177 appendItem(*separatorItem(), m_contextMenu.get()); 1178 } 1179 appendItem(QuickLookImageItem, m_contextMenu.get()); 1180 } 1181 #endif // ENABLE(IMAGE_ANALYSIS) 1167 1182 } 1168 1183 … … 1490 1505 shouldCheck = shouldEnable && m_context.hitTestResult().mediaMuted(); 1491 1506 break; 1492 case ContextMenuItemTag LookUpImage:1507 case ContextMenuItemTagQuickLookImage: 1493 1508 case ContextMenuItemTagTranslate: 1494 1509 break; -
trunk/Source/WebCore/page/EventHandler.cpp
r279066 r279164 2538 2538 2539 2539 #if ENABLE(IMAGE_ANALYSIS) 2540 if (!m_elementUnderMouse || !is<RenderImage>(m_elementUnderMouse->renderer())) 2541 m_textRecognitionHoverTimer.stop(); 2542 else if (!platformMouseEvent.movementDelta().isZero()) 2543 m_textRecognitionHoverTimer.restart(); 2540 if (m_frame.settings().preferInlineTextSelectionInImages()) { 2541 if (!m_elementUnderMouse || !is<RenderImage>(m_elementUnderMouse->renderer())) 2542 m_textRecognitionHoverTimer.stop(); 2543 else if (!platformMouseEvent.movementDelta().isZero()) 2544 m_textRecognitionHoverTimer.restart(); 2545 } 2544 2546 #endif // ENABLE(IMAGE_ANALYSIS) 2545 2547 -
trunk/Source/WebCore/platform/ContextMenuItem.cpp
r278767 r279164 259 259 case ContextMenuAction::ContextMenuItemTagShareMenu: 260 260 case ContextMenuAction::ContextMenuItemTagToggleVideoEnhancedFullscreen: 261 case ContextMenuAction::ContextMenuItemTag LookUpImage:261 case ContextMenuAction::ContextMenuItemTagQuickLookImage: 262 262 case ContextMenuAction::ContextMenuItemTagTranslate: 263 263 case ContextMenuAction::ContextMenuItemBaseCustomTag: -
trunk/Source/WebCore/platform/ContextMenuItem.h
r278767 r279164 148 148 ContextMenuItemTagAddHighlightToCurrentQuickNote, 149 149 ContextMenuItemTagAddHighlightToNewQuickNote, 150 ContextMenuItemTag LookUpImage,150 ContextMenuItemTagQuickLookImage, 151 151 ContextMenuItemTagTranslate, 152 152 ContextMenuItemBaseCustomTag = 5000, -
trunk/Source/WebCore/platform/LocalizedStrings.h
r278767 r279164 369 369 #if ENABLE(IMAGE_ANALYSIS) 370 370 WEBCORE_EXPORT String contextMenuItemTagLookUpImage(); 371 #endif 371 WEBCORE_EXPORT String contextMenuItemTagQuickLookImage(); 372 WEBCORE_EXPORT String contextMenuItemTagQuickLookImageForTextSelection(); 373 WEBCORE_EXPORT String contextMenuItemTagQuickLookImageForVisualSearch(); 374 #endif // ENABLE(IMAGE_ANALYSIS) 372 375 373 376 #if HAVE(TRANSLATION_UI_SERVICES) -
trunk/Source/WebCore/platform/cocoa/LocalizedStringsCocoa.mm
r278767 r279164 320 320 } 321 321 322 #endif 322 String contextMenuItemTagQuickLookImage() 323 { 324 return WEB_UI_STRING("Quick Look", "Title for Quick Look action button"); 325 } 326 327 String contextMenuItemTagQuickLookImageForTextSelection() 328 { 329 return WEB_UI_STRING("Select Text in Quick Look", "Title for Quick Look action button for images with text"); 330 } 331 332 String contextMenuItemTagQuickLookImageForVisualSearch() 333 { 334 return WEB_UI_STRING("Look Up in Quick Look", "Title for Quick Look action button for images with visual search results"); 335 } 336 337 #endif // ENABLE(IMAGE_ANALYSIS) 323 338 324 339 } // namespace WebCore -
trunk/Source/WebKit/ChangeLog
r279155 r279164 1 2021-06-22 Wenson Hsieh <wenson_hsieh@apple.com> 2 3 [Live Text] [macOS] Add an internal option to disable inline text selection in images 4 https://bugs.webkit.org/show_bug.cgi?id=227265 5 rdar://79460142 6 7 Reviewed by Tim Horton. 8 9 Refactor Live Text and Visual Look Up logic, such that the ability to select text inside of images is behind an 10 internal feature flag that can be toggled at runtime. When Live Text is disabled, we'll unconditionally show the 11 "Look Up" context menu action using the more generic title "Quick Look". This "Quick Look" action is then 12 retitled to either "Look Up in Quick Look" or "Select Text in Quick Look" once image analysis completes. 13 14 * Shared/API/c/WKSharedAPICast.h: 15 (WebKit::toAPI): 16 (WebKit::toImpl): 17 18 Rename ContextMenuItemTagLookUpImage to ContextMenuItemTagQuickLookImage. 19 20 * UIProcess/Cocoa/QuickLookPreviewActivity.h: Copied from Source/WebKit/UIProcess/mac/WKQuickLookPreviewController.h. 21 22 Move this enum out of WKQuickLookPreviewController.h, such that we can use and import it in non-Cocoa headers 23 and implementation files. 24 25 * UIProcess/Cocoa/WebViewImpl.h: 26 * UIProcess/Cocoa/WebViewImpl.mm: 27 (WebKit::WebViewImpl::computeHasImageAnalysisResults): 28 29 Rename `computeHasVisualSearchResults` to `computeHasImageAnalysisResults`, and allow it to take a flag to 30 indicate whether or not it should request text recognition results or visual search results. We use this for the 31 "Quick Look" context menu action when inline text selection is disabled, in order to retitle the item to "Select 32 Text in Quick Look". 33 34 (WebKit::WebViewImpl::computeHasVisualSearchResults): Deleted. 35 * UIProcess/PageClient.h: 36 (WebKit::PageClient::computeHasImageAnalysisResults): 37 (WebKit::PageClient::computeHasVisualSearchResults): Deleted. 38 * UIProcess/WebContextMenuProxy.h: 39 (WebKit::WebContextMenuProxy::quickLookPreviewActivity const): 40 41 Add a flag to WebContextMenuProxy to determine what initial activity to use when presenting the QuickLook 42 preview panel after selecting the ContextMenuItemTagQuickLookImage item. 43 44 * UIProcess/WebPageProxy.cpp: 45 (WebKit::WebPageProxy::contextMenuItemSelected): 46 (WebKit::WebPageProxy::computeHasImageAnalysisResults): 47 (WebKit::WebPageProxy::computeHasVisualSearchResults): Deleted. 48 * UIProcess/WebPageProxy.h: 49 * UIProcess/mac/PageClientImplMac.h: 50 * UIProcess/mac/PageClientImplMac.mm: 51 (WebKit::PageClientImpl::computeHasImageAnalysisResults): 52 (WebKit::PageClientImpl::computeHasVisualSearchResults): Deleted. 53 * UIProcess/mac/WKQuickLookPreviewController.h: 54 * UIProcess/mac/WKQuickLookPreviewController.mm: 55 * UIProcess/mac/WebContextMenuProxyMac.h: 56 * UIProcess/mac/WebContextMenuProxyMac.mm: 57 (WebKit::menuItemIdentifier): 58 (WebKit::WebContextMenuProxyMac::getContextMenuFromItems): 59 60 Add logic to either remove and reinsert the "Look Up" context menu action (if inline text selection in images is 61 enabled), or to promote the "Quick Look" context menu action to either "Select Text in Quick Look" or "Look Up 62 in Quick Look" in the case where inline text selection in images is disabled. 63 64 Note that when inline text selection in images is disabled, we'll first check for visual search results before 65 checking for text. This is because visual search results will take precedence over text selection (i.e., we'll 66 show "Look Up in Quick Look" even if both visual search results and text is present), so we can avoid performing 67 text analysis in the case where we already found visual search results. 68 69 (WebKit::WebContextMenuProxyMac::insertOrUpdateQuickLookImageItem): 70 (WebKit::WebContextMenuProxyMac::updateQuickLookContextMenuItemTitle): 71 72 Add a helper method to find and update the title of the NSMenuItem corresponding to 73 ContextMenuItemTagQuickLookImage. See `getContextMenuFromItems` above for more details. 74 75 * UIProcess/mac/WebPageProxyMac.mm: 76 (WebKit::WebPageProxy::handleContextMenuQuickLookImage): 77 (WebKit::WebPageProxy::handleContextMenuLookUpImage): Deleted. 78 79 Rename this to `handleContextMenuQuickLookImage`, and have it take an argument to indicate whether the QuickLook 80 panel should start out in Visual Look Up mode. 81 82 * WebKit.xcodeproj/project.pbxproj: 83 1 84 2021-06-22 Chris Dumez <cdumez@apple.com> 2 85 -
trunk/Source/WebKit/Shared/API/c/WKSharedAPICast.h
r278767 r279164 544 544 case WebCore::ContextMenuItemTagShareMenu: 545 545 return kWKContextMenuItemTagShareMenu; 546 case WebCore::ContextMenuItemTag LookUpImage:546 case WebCore::ContextMenuItemTagQuickLookImage: 547 547 return kWKContextMenuItemTagRevealImage; 548 548 case WebCore::ContextMenuItemTagTranslate: … … 747 747 #endif 748 748 case kWKContextMenuItemTagRevealImage: 749 return WebCore::ContextMenuItemTag LookUpImage;749 return WebCore::ContextMenuItemTagQuickLookImage; 750 750 case kWKContextMenuItemTagTranslate: 751 751 return WebCore::ContextMenuItemTagTranslate; -
trunk/Source/WebKit/UIProcess/Cocoa/QuickLookPreviewActivity.h
r279158 r279164 26 26 #pragma once 27 27 28 #if HAVE(QUICKLOOK_PREVIEW_ITEM_DATA_PROVIDER) 29 30 #import <Foundation/Foundation.h> 28 #if PLATFORM(COCOA) 31 29 32 30 namespace WebKit { 33 class WebPageProxy;34 enum class QuickLookPreviewActivity : uint8_t { None, VisualSearch };35 }36 31 37 @class QLPreviewPanel; 32 enum class QuickLookPreviewActivity : uint8_t { 33 None, 34 VisualSearch, 35 }; 38 36 39 @interface WKQuickLookPreviewController : NSObject 40 - (instancetype)initWithPage:(WebKit::WebPageProxy&)page imageData:(NSData *)data title:(NSString *)title imageURL:(NSURL *)imageURL activity:(WebKit::QuickLookPreviewActivity)activity; 41 - (void)beginControl:(QLPreviewPanel *)panel; 42 - (BOOL)isControlling:(QLPreviewPanel *)panel; 43 - (void)endControl:(QLPreviewPanel *)panel; 44 - (void)closePanelIfNecessary; 45 @end 37 } // namespace WebKit 46 38 47 #endif // HAVE(QUICKLOOK_PREVIEW_ITEM_DATA_PROVIDER)39 #endif // PLATFORM(COCOA) -
trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.h
r278575 r279164 169 169 170 170 enum class ContinueUnsafeLoad : bool; 171 enum class ImageAnalysisType : uint8_t; 171 172 enum class UndoOrRedo : bool; 172 173 … … 599 600 #if ENABLE(IMAGE_ANALYSIS) 600 601 void requestTextRecognition(const URL& imageURL, const ShareableBitmap::Handle& imageData, CompletionHandler<void(WebCore::TextRecognitionResult&&)>&&); 601 void computeHas VisualSearchResults(const URL& imageURL, ShareableBitmap& imageBitmap, CompletionHandler<void(bool)>&&);602 void computeHasImageAnalysisResults(const URL& imageURL, ShareableBitmap& imageBitmap, ImageAnalysisType, CompletionHandler<void(bool)>&&); 602 603 #endif 603 604 -
trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm
r279060 r279164 231 231 } 232 232 233 void WebViewImpl::computeHas VisualSearchResults(const URL& imageURL, ShareableBitmap& imageBitmap, CompletionHandler<void(bool)>&& completion)233 void WebViewImpl::computeHasImageAnalysisResults(const URL& imageURL, ShareableBitmap& imageBitmap, ImageAnalysisType type, CompletionHandler<void(bool)>&& completion) 234 234 { 235 235 if (!isLiveTextAvailableAndEnabled()) { … … 239 239 240 240 auto cgImage = imageBitmap.makeCGImage(); 241 auto request = createImageAnalysisRequest(cgImage.get(), imageURL, [NSURL _web_URLWithWTFString:m_page->currentURL()], VKAnalysisTypeVisualSearch); 241 auto analysisType = type == ImageAnalysisType::VisualSearch ? VKAnalysisTypeVisualSearch : VKAnalysisTypeText; 242 auto request = createImageAnalysisRequest(cgImage.get(), imageURL, [NSURL _web_URLWithWTFString:m_page->currentURL()], analysisType); 242 243 auto startTime = MonotonicTime::now(); 243 [ensureImageAnalyzer() processRequest:request.get() progressHandler:nil completionHandler:makeBlockPtr([completion = WTFMove(completion), startTime ] (VKImageAnalysis *analysis, NSError *) mutable {244 BOOL result = [analysis hasResultsForAnalysisTypes: VKAnalysisTypeVisualSearch];245 CFRunLoopPerformBlock(CFRunLoopGetMain(), (__bridge CFStringRef)NSEventTrackingRunLoopMode, makeBlockPtr([completion = WTFMove(completion), result, startTime] () mutable {246 RELEASE_LOG(Images, "Image analysis completed in %.0f ms (found visual search results? %d)", (MonotonicTime::now() - startTime).milliseconds(), result);244 [ensureImageAnalyzer() processRequest:request.get() progressHandler:nil completionHandler:makeBlockPtr([completion = WTFMove(completion), startTime, analysisType] (VKImageAnalysis *analysis, NSError *) mutable { 245 BOOL result = [analysis hasResultsForAnalysisTypes:analysisType]; 246 CFRunLoopPerformBlock(CFRunLoopGetMain(), (__bridge CFStringRef)NSEventTrackingRunLoopMode, makeBlockPtr([completion = WTFMove(completion), result, analysisType, startTime] () mutable { 247 RELEASE_LOG(Images, "Image analysis completed in %.0f ms (found %s? %d)", (MonotonicTime::now() - startTime).milliseconds(), analysisType == VKAnalysisTypeVisualSearch ? "visual search results" : "text", result); 247 248 completion(result); 248 249 }).get()); -
trunk/Source/WebKit/UIProcess/PageClient.h
r278575 r279164 161 161 enum class ContinueUnsafeLoad : bool { No, Yes }; 162 162 163 #if ENABLE(IMAGE_ANALYSIS) 164 enum class ImageAnalysisType : uint8_t { Text, VisualSearch }; 165 #endif 166 163 167 struct FocusedElementInformation; 164 168 struct FrameInfoData; … … 541 545 #if ENABLE(IMAGE_ANALYSIS) 542 546 virtual void requestTextRecognition(const URL& imageURL, const ShareableBitmap::Handle& imageData, CompletionHandler<void(WebCore::TextRecognitionResult&&)>&& completion) { completion({ }); } 543 virtual void computeHas VisualSearchResults(const URL&, ShareableBitmap&, CompletionHandler<void(bool)>&& completion) { completion(false); }547 virtual void computeHasImageAnalysisResults(const URL&, ShareableBitmap&, ImageAnalysisType, CompletionHandler<void(bool)>&& completion) { completion(false); } 544 548 #endif 545 549 -
trunk/Source/WebKit/UIProcess/WebContextMenuProxy.h
r274521 r279164 34 34 #include <wtf/WeakPtr.h> 35 35 36 #if PLATFORM(COCOA) 37 #include "QuickLookPreviewActivity.h" 38 #endif 39 36 40 OBJC_CLASS NSMenu; 37 41 … … 52 56 virtual NSMenu *platformMenu() const = 0; 53 57 virtual NSArray *platformData() const = 0; 58 virtual QuickLookPreviewActivity quickLookPreviewActivity() const { return QuickLookPreviewActivity::None; }; 54 59 #endif // PLATFORM(COCOA) 55 60 -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r279151 r279164 213 213 #if PLATFORM(COCOA) 214 214 #include "InsertTextOptions.h" 215 #include "QuickLookPreviewActivity.h" 215 216 #include "RemoteLayerTreeDrawingAreaProxy.h" 216 217 #include "RemoteLayerTreeScrollingPerformanceData.h" … … 6906 6907 break; 6907 6908 6908 case ContextMenuItemTag LookUpImage:6909 case ContextMenuItemTagQuickLookImage: 6909 6910 #if ENABLE(IMAGE_ANALYSIS) 6910 handleContextMenuLookUpImage(); 6911 if (m_activeContextMenu) 6912 handleContextMenuQuickLookImage(m_activeContextMenu->quickLookPreviewActivity()); 6911 6913 #endif 6912 6914 return; … … 8500 8502 8501 8503 #if ENABLE(IMAGE_ANALYSIS) 8504 8502 8505 void WebPageProxy::requestTextRecognition(const URL& imageURL, const ShareableBitmap::Handle& imageData, CompletionHandler<void(WebCore::TextRecognitionResult&&)>&& completionHandler) 8503 8506 { … … 8505 8508 } 8506 8509 8507 void WebPageProxy::computeHas VisualSearchResults(const URL& imageURL, ShareableBitmap& imageBitmap, CompletionHandler<void(bool)>&& completion)8508 { 8509 pageClient().computeHas VisualSearchResults(imageURL, imageBitmap, WTFMove(completion));8510 void WebPageProxy::computeHasImageAnalysisResults(const URL& imageURL, ShareableBitmap& imageBitmap, ImageAnalysisType type, CompletionHandler<void(bool)>&& completion) 8511 { 8512 pageClient().computeHasImageAnalysisResults(imageURL, imageBitmap, type, WTFMove(completion)); 8510 8513 } 8511 8514 … … 8519 8522 sendWithAsyncReply(Messages::WebPage::UpdateWithTextRecognitionResult(WTFMove(results), context, location), WTFMove(completionHandler)); 8520 8523 } 8521 #endif 8524 8525 #endif // ENABLE(IMAGE_ANALYSIS) 8522 8526 8523 8527 #if ENABLE(ENCRYPTED_MEDIA) -
trunk/Source/WebKit/UIProcess/WebPageProxy.h
r279060 r279164 403 403 struct WebSpeechSynthesisVoice; 404 404 405 enum class ImageAnalysisType : uint8_t; 405 406 enum class TextRecognitionUpdateResult : uint8_t; 406 407 enum class NegotiatedLegacyTLS : bool; … … 1660 1661 void requestTextRecognition(const URL& imageURL, const ShareableBitmap::Handle& imageData, CompletionHandler<void(WebCore::TextRecognitionResult&&)>&&); 1661 1662 void updateWithTextRecognitionResult(WebCore::TextRecognitionResult&&, const WebCore::ElementContext&, const WebCore::FloatPoint& location, CompletionHandler<void(TextRecognitionUpdateResult)>&&); 1662 void computeHas VisualSearchResults(const URL& imageURL, ShareableBitmap& imageBitmap, CompletionHandler<void(bool)>&&);1663 void computeHasImageAnalysisResults(const URL& imageURL, ShareableBitmap& imageBitmap, ImageAnalysisType, CompletionHandler<void(bool)>&&); 1663 1664 #endif 1664 1665 … … 1907 1908 #if ENABLE(IMAGE_ANALYSIS) && ENABLE(CONTEXT_MENUS) 1908 1909 void handleContextMenuLookUpImage(); 1910 void handleContextMenuQuickLookImage(QuickLookPreviewActivity); 1909 1911 #endif 1910 1912 -
trunk/Source/WebKit/UIProcess/mac/PageClientImplMac.h
r278575 r279164 133 133 #if ENABLE(IMAGE_ANALYSIS) 134 134 void requestTextRecognition(const URL& imageURL, const ShareableBitmap::Handle& imageData, CompletionHandler<void(WebCore::TextRecognitionResult&&)>&&) override; 135 void computeHas VisualSearchResults(const URL&, ShareableBitmap&, CompletionHandler<void(bool)>&&) override;135 void computeHasImageAnalysisResults(const URL&, ShareableBitmap&, ImageAnalysisType, CompletionHandler<void(bool)>&&) override; 136 136 #endif 137 137 -
trunk/Source/WebKit/UIProcess/mac/PageClientImplMac.mm
r278575 r279164 486 486 } 487 487 488 void PageClientImpl::computeHas VisualSearchResults(const URL& imageURL, ShareableBitmap& imageBitmap, CompletionHandler<void(bool)>&& completion)489 { 490 m_impl->computeHas VisualSearchResults(imageURL, imageBitmap, WTFMove(completion));491 } 492 493 #endif 488 void PageClientImpl::computeHasImageAnalysisResults(const URL& imageURL, ShareableBitmap& imageBitmap, ImageAnalysisType type, CompletionHandler<void(bool)>&& completion) 489 { 490 m_impl->computeHasImageAnalysisResults(imageURL, imageBitmap, type, WTFMove(completion)); 491 } 492 493 #endif // ENABLE(IMAGE_ANALYSIS) 494 494 495 495 RefPtr<WebPopupMenuProxy> PageClientImpl::createPopupMenuProxy(WebPageProxy& page) -
trunk/Source/WebKit/UIProcess/mac/WKQuickLookPreviewController.h
r279060 r279164 32 32 namespace WebKit { 33 33 class WebPageProxy; 34 enum class QuickLookPreviewActivity : uint8_t { None, VisualSearch };34 enum class QuickLookPreviewActivity : uint8_t; 35 35 } 36 36 -
trunk/Source/WebKit/UIProcess/mac/WKQuickLookPreviewController.mm
r279060 r279164 29 29 #if HAVE(QUICKLOOK_PREVIEW_ITEM_DATA_PROVIDER) 30 30 31 #import "QuickLookPreviewActivity.h" 31 32 #import "WebPageProxy.h" 32 33 #import <wtf/RetainPtr.h> -
trunk/Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.h
r274521 r279164 61 61 WebContextMenuProxyMac(NSView *, WebPageProxy&, ContextMenuContextData&&, const UserData&); 62 62 63 QuickLookPreviewActivity quickLookPreviewActivity() const final { return m_quickLookPreviewActivity; } 64 65 #if ENABLE(IMAGE_ANALYSIS) 66 void insertOrUpdateQuickLookImageItem(const URL& imageURL, Ref<ShareableBitmap>&& imageBitmap, std::optional<WebContextMenuItemData>&&, bool); 67 void updateQuickLookContextMenuItemTitle(const String&); 68 #endif 69 63 70 void show() override; 64 71 void showContextMenuWithItems(Vector<Ref<WebContextMenuItem>>&&) override; … … 80 87 RetainPtr<WKMenuDelegate> m_menuDelegate; 81 88 WeakObjCPtr<NSView> m_webView; 89 QuickLookPreviewActivity m_quickLookPreviewActivity { QuickLookPreviewActivity::None }; 82 90 }; 83 91 -
trunk/Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm
r278767 r279164 39 39 #import "WebContextMenuItemData.h" 40 40 #import "WebPageProxy.h" 41 #import "WebPreferences.h" 41 42 #import <WebCore/GraphicsContext.h> 42 43 #import <WebCore/IntRect.h> … … 437 438 return _WKMenuItemIdentifierReload; 438 439 439 case ContextMenuItemTag LookUpImage:440 case ContextMenuItemTagQuickLookImage: 440 441 return _WKMenuItemIdentifierRevealImage; 441 442 … … 508 509 } 509 510 510 std::optional<WebContextMenuItemData> lookUpImageItem; 511 bool shouldUpdateQuickLookItemTitle = false; 512 std::optional<WebContextMenuItemData> quickLookItemToInsertIfNeeded; 511 513 512 514 #if ENABLE(IMAGE_ANALYSIS) 513 filteredItems.removeFirstMatching([&] (auto& item) { 514 if (item.action() != WebCore::ContextMenuItemTagLookUpImage) 515 return false; 516 517 lookUpImageItem = { item }; 518 return true; 515 auto indexOfQuickLookItem = filteredItems.findMatching([&] (auto& item) { 516 return item.action() == WebCore::ContextMenuItemTagQuickLookImage; 519 517 }); 520 #endif 518 519 if (indexOfQuickLookItem != notFound) { 520 if (auto page = this->page(); page && page->preferences().preferInlineTextSelectionInImages()) { 521 quickLookItemToInsertIfNeeded = filteredItems[indexOfQuickLookItem]; 522 filteredItems.remove(indexOfQuickLookItem); 523 } else 524 shouldUpdateQuickLookItemTitle = true; 525 } 526 #endif // ENABLE(IMAGE_ANALYSIS) 521 527 522 528 #if HAVE(TRANSLATION_UI_SERVICES) … … 532 538 533 539 auto sparseMenuItems = retainPtr([NSPointerArray strongObjectsPointerArray]); 534 auto insertMenuItem = makeBlockPtr([protectedThis = makeRef(*this), weakPage = makeWeakPtr(page()), imageURL = WTFMove(imageURL), imageBitmap = WTFMove(imageBitmap), lookUpImageItem = WTFMove(lookUpImageItem), completionHandler = WTFMove(completionHandler), itemsRemaining = filteredItems.size(), menu = WTFMove(menu), sparseMenuItems](NSMenuItem *item, NSUInteger index) mutable {540 auto insertMenuItem = makeBlockPtr([protectedThis = makeRef(*this), weakPage = makeWeakPtr(page()), imageURL = WTFMove(imageURL), imageBitmap = WTFMove(imageBitmap), shouldUpdateQuickLookItemTitle, quickLookItemToInsertIfNeeded = WTFMove(quickLookItemToInsertIfNeeded), completionHandler = WTFMove(completionHandler), itemsRemaining = filteredItems.size(), menu = WTFMove(menu), sparseMenuItems](NSMenuItem *item, NSUInteger index) mutable { 535 541 ASSERT(index < [sparseMenuItems count]); 536 542 ASSERT(![sparseMenuItems pointerAtIndex:index]); … … 542 548 543 549 auto page = makeRefPtr(weakPage.get()); 544 if ( lookUpImageItem &&page && imageBitmap) {550 if (page && imageBitmap) { 545 551 #if ENABLE(IMAGE_ANALYSIS) 546 page->computeHasVisualSearchResults(imageURL, *imageBitmap, [protectedThis = WTFMove(protectedThis), lookUpImageItem = WTFMove(*lookUpImageItem)] (bool hasVisualSearchResults) mutable { 547 if (hasVisualSearchResults) 548 [protectedThis->m_menu addItem:createMenuActionItem(lookUpImageItem).get()]; 549 }); 552 protectedThis->insertOrUpdateQuickLookImageItem(imageURL, imageBitmap.releaseNonNull(), WTFMove(quickLookItemToInsertIfNeeded), shouldUpdateQuickLookItemTitle); 550 553 #else 554 UNUSED_PARAM(quickLookItemToInsertIfNeeded); 555 UNUSED_PARAM(shouldUpdateQuickLookItemTitle); 551 556 UNUSED_PARAM(imageURL); 552 557 #endif … … 563 568 } 564 569 } 570 571 #if ENABLE(IMAGE_ANALYSIS) 572 573 void WebContextMenuProxyMac::insertOrUpdateQuickLookImageItem(const URL& imageURL, Ref<ShareableBitmap>&& imageBitmap, std::optional<WebContextMenuItemData>&& quickLookItemToInsertIfNeeded, bool shouldUpdateQuickLookItemTitle) 574 { 575 auto page = makeRef(*this->page()); 576 if (quickLookItemToInsertIfNeeded) { 577 page->computeHasImageAnalysisResults(imageURL, imageBitmap.get(), ImageAnalysisType::VisualSearch, [weakThis = makeWeakPtr(*this), quickLookItemToInsertIfNeeded = WTFMove(*quickLookItemToInsertIfNeeded)] (bool hasVisualSearchResults) mutable { 578 if (auto protectedThis = makeRefPtr(weakThis.get()); protectedThis && hasVisualSearchResults) { 579 protectedThis->m_quickLookPreviewActivity = QuickLookPreviewActivity::VisualSearch; 580 [protectedThis->m_menu addItem:NSMenuItem.separatorItem]; 581 [protectedThis->m_menu addItem:createMenuActionItem(quickLookItemToInsertIfNeeded).get()]; 582 } 583 }); 584 return; 585 } 586 587 if (shouldUpdateQuickLookItemTitle) { 588 page->computeHasImageAnalysisResults(imageURL, imageBitmap.get(), ImageAnalysisType::VisualSearch, [weakThis = makeWeakPtr(*this), weakPage = makeWeakPtr(page.get()), imageURL, imageBitmap = WTFMove(imageBitmap)] (bool hasVisualSearchResults) mutable { 589 auto protectedThis = makeRefPtr(weakThis.get()); 590 if (!protectedThis) 591 return; 592 593 auto page = makeRefPtr(weakPage.get()); 594 if (!page) 595 return; 596 597 if (hasVisualSearchResults) { 598 protectedThis->m_quickLookPreviewActivity = QuickLookPreviewActivity::VisualSearch; 599 protectedThis->updateQuickLookContextMenuItemTitle(contextMenuItemTagQuickLookImageForVisualSearch()); 600 return; 601 } 602 603 page->computeHasImageAnalysisResults(imageURL, imageBitmap.get(), ImageAnalysisType::Text, [weakThis = WTFMove(weakThis), weakPage] (bool hasText) mutable { 604 auto protectedThis = makeRefPtr(weakThis.get()); 605 if (!protectedThis) 606 return; 607 608 if (auto page = makeRefPtr(weakPage.get()); page && hasText) 609 protectedThis->updateQuickLookContextMenuItemTitle(contextMenuItemTagQuickLookImageForTextSelection()); 610 }); 611 }); 612 } 613 } 614 615 void WebContextMenuProxyMac::updateQuickLookContextMenuItemTitle(const String& newTitle) 616 { 617 for (NSInteger itemIndex = 0; itemIndex < [m_menu numberOfItems]; ++itemIndex) { 618 auto item = [m_menu itemAtIndex:itemIndex]; 619 if (static_cast<ContextMenuAction>(item.tag) == ContextMenuItemTagQuickLookImage) { 620 item.title = newTitle; 621 break; 622 } 623 } 624 } 625 626 #endif // ENABLE(IMAGE_ANALYSIS) 565 627 566 628 void WebContextMenuProxyMac::getContextMenuItem(const WebContextMenuItemData& item, CompletionHandler<void(NSMenuItem *)>&& completionHandler) -
trunk/Source/WebKit/UIProcess/mac/WebPageProxyMac.mm
r279060 r279164 747 747 #if ENABLE(IMAGE_ANALYSIS) 748 748 749 void WebPageProxy::handleContextMenu LookUpImage()749 void WebPageProxy::handleContextMenuQuickLookImage(QuickLookPreviewActivity activity) 750 750 { 751 751 auto& result = m_activeContextMenuContextData.webHitTestResultData(); … … 753 753 return; 754 754 755 showImageInQuickLookPreviewPanel(*result.imageBitmap, result.toolTipText, URL { URL { }, result.absoluteImageURL }, QuickLookPreviewActivity::VisualSearch);755 showImageInQuickLookPreviewPanel(*result.imageBitmap, result.toolTipText, URL { URL { }, result.absoluteImageURL }, activity); 756 756 } 757 757 -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r279133 r279164 5996 5996 F44DFEB11E9E752F0038D196 /* WebIconUtilities.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = WebIconUtilities.mm; path = ios/WebIconUtilities.mm; sourceTree = "<group>"; }; 5997 5997 F4660BC125DEF08100E86598 /* PasteboardAccessIntent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PasteboardAccessIntent.h; sourceTree = "<group>"; }; 5998 F47A051626827A09007E5CF2 /* QuickLookPreviewActivity.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QuickLookPreviewActivity.h; sourceTree = "<group>"; }; 5998 5999 F48570A22644BEC400C05F71 /* Timeout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Timeout.h; sourceTree = "<group>"; }; 5999 6000 F48D2A8421583A0200C6752B /* AppKitSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppKitSPI.h; sourceTree = "<group>"; }; … … 7058 7059 C145CC0E23DCA427003A5EEB /* PreferenceObserver.h */, 7059 7060 C15CBB3323F34C3800300CC7 /* PreferenceObserver.mm */, 7061 F47A051626827A09007E5CF2 /* QuickLookPreviewActivity.h */, 7060 7062 5CB7AFDD23C5273D00E49CF3 /* ResourceLoadDelegate.h */, 7061 7063 5CB7AFDE23C5273D00E49CF3 /* ResourceLoadDelegate.mm */, -
trunk/Source/WebKitLegacy/mac/ChangeLog
r279098 r279164 1 2021-06-22 Wenson Hsieh <wenson_hsieh@apple.com> 2 3 [Live Text] [macOS] Add an internal option to disable inline text selection in images 4 https://bugs.webkit.org/show_bug.cgi?id=227265 5 rdar://79460142 6 7 Reviewed by Tim Horton. 8 9 Rename ContextMenuItemTagLookUpImage to ContextMenuItemTagQuickLookImage. 10 11 * WebView/WebHTMLView.mm: 12 (toTag): 13 1 14 2021-06-21 Wenson Hsieh <wenson_hsieh@apple.com> 2 15 -
trunk/Source/WebKitLegacy/mac/WebView/WebHTMLView.mm
r278993 r279164 616 616 case ContextMenuItemTagTranslate: 617 617 return WebMenuItemTagTranslate; 618 case ContextMenuItemTag LookUpImage:618 case ContextMenuItemTagQuickLookImage: 619 619 return std::nullopt; 620 620
Note:
See TracChangeset
for help on using the changeset viewer.