Title: [279060] trunk/Source
Revision
279060
Author
[email protected]
Date
2021-06-20 16:22:06 -0700 (Sun, 20 Jun 2021)

Log Message

[macOS] Rename WKVisualSearchPreviewController to WKQuickLookPreviewController
https://bugs.webkit.org/show_bug.cgi?id=227193

Reviewed by Sam Weinig.

Source/WebCore/PAL:

Fix up some compiler flags in this SPI header. Instead of using `HAVE(VK_IMAGE_ANALYSIS)` to guard SPI
declarations, use the new `HAVE(QUICKLOOK_PREVIEW_ITEM_DATA_PROVIDER)`, `HAVE(QUICKLOOK_ITEM_PREVIEW_OPTIONS)`
and `HAVE(QUICKLOOK_PREVIEW_ACTIVITY)` flags.

* pal/spi/mac/QuickLookMacSPI.h:

Source/WebKit:

Rename WKVisualSearchPreviewController to WKQuickLookPreviewController, with the intention of using this logic
to implement a new context menu action for opening images in a QuickLook preview panel. See below for more
details.

* SourcesCocoa.txt:
* UIProcess/Cocoa/WebPageProxyCocoa.mm:
(WebKit::WebPageProxy::handleContextMenuLookUpImage): Deleted.

Move this into WebPageProxyMac.mm, since this is (1) only relevant to macOS, and (2) this logic now requires
WKQuickLookPreviewController.h, which WebPageProxyMac.mm already imports.

* UIProcess/Cocoa/WebViewImpl.mm:
(WebKit::WebViewImpl::acceptsPreviewPanelControl):
* UIProcess/WebPageProxy.h:
* UIProcess/mac/WKQuickLookPreviewController.h: Renamed from Source/WebKit/UIProcess/mac/WKVisualSearchPreviewController.h.
* UIProcess/mac/WKQuickLookPreviewController.mm: Renamed from Source/WebKit/UIProcess/mac/WKVisualSearchPreviewController.mm.
(-[WKQuickLookPreviewController initWithPage:imageData:title:imageURL:activity:]):

Add QuickLookPreviewActivity, a flag to indicate whether or not WKQuickLookPreviewController should
start with QLPreviewActivityVisualSearch or QLPreviewActivityNone. For the time being, we only use this helper
object for visual search, so we only pass in QuickLookPreviewActivity::VisualSearch.

(-[WKQuickLookPreviewController beginControl:]):
(-[WKQuickLookPreviewController endControl:]):
(-[WKQuickLookPreviewController closePanelIfNecessary]):
(-[WKQuickLookPreviewController isControlling:]):
(-[WKQuickLookPreviewController provideDataForItem:]):
(-[WKQuickLookPreviewController numberOfPreviewItemsInPreviewPanel:]):
(-[WKQuickLookPreviewController previewPanel:previewItemAtIndex:]):
(-[WKQuickLookPreviewController previewPanel:initialActivityForItem:]):
* UIProcess/mac/WebPageProxyMac.mm:
(WebKit::WebPageProxy::beginPreviewPanelControl):
(WebKit::WebPageProxy::endPreviewPanelControl):
(WebKit::WebPageProxy::closeSharedPreviewPanelIfNecessary):
(WebKit::WebPageProxy::handleContextMenuLookUpImage):
(WebKit::WebPageProxy::showImageInQuickLookPreviewPanel):
(WebKit::WebPageProxy::showImageInVisualSearchPreviewPanel): Deleted.
* WebKit.xcodeproj/project.pbxproj:

Source/WTF:

Add some compile-time flags to guard QuickLook SPI declarations.

* wtf/PlatformHave.h:

Modified Paths

Added Paths

Removed Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (279059 => 279060)


--- trunk/Source/WTF/ChangeLog	2021-06-20 21:31:34 UTC (rev 279059)
+++ trunk/Source/WTF/ChangeLog	2021-06-20 23:22:06 UTC (rev 279060)
@@ -1,3 +1,14 @@
+2021-06-20  Wenson Hsieh  <[email protected]>
+
+        [macOS] Rename WKVisualSearchPreviewController to WKQuickLookPreviewController
+        https://bugs.webkit.org/show_bug.cgi?id=227193
+
+        Reviewed by Sam Weinig.
+
+        Add some compile-time flags to guard QuickLook SPI declarations.
+
+        * wtf/PlatformHave.h:
+
 2021-06-20  Sam Weinig  <[email protected]>
 
         Adopt Span in SHA1.h

Modified: trunk/Source/WTF/wtf/PlatformHave.h (279059 => 279060)


--- trunk/Source/WTF/wtf/PlatformHave.h	2021-06-20 21:31:34 UTC (rev 279059)
+++ trunk/Source/WTF/wtf/PlatformHave.h	2021-06-20 23:22:06 UTC (rev 279060)
@@ -1050,3 +1050,10 @@
 #if (PLATFORM(IOS_FAMILY) && !PLATFORM(IOS_FAMILY_SIMULATOR)) || PLATFORM(MACCATALYST) || (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 110000)
 #define HAVE_PAC_SHARED_REGION_ID 1
 #endif
+
+#if !defined(HAVE_QUICKLOOK_PREVIEW_ITEM_DATA_PROVIDER) \
+    && (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 120000)
+#define HAVE_QUICKLOOK_PREVIEW_ITEM_DATA_PROVIDER 1
+#define HAVE_QUICKLOOK_ITEM_PREVIEW_OPTIONS 1
+#define HAVE_QUICKLOOK_PREVIEW_ACTIVITY 1
+#endif

Modified: trunk/Source/WebCore/PAL/ChangeLog (279059 => 279060)


--- trunk/Source/WebCore/PAL/ChangeLog	2021-06-20 21:31:34 UTC (rev 279059)
+++ trunk/Source/WebCore/PAL/ChangeLog	2021-06-20 23:22:06 UTC (rev 279060)
@@ -1,3 +1,16 @@
+2021-06-20  Wenson Hsieh  <[email protected]>
+
+        [macOS] Rename WKVisualSearchPreviewController to WKQuickLookPreviewController
+        https://bugs.webkit.org/show_bug.cgi?id=227193
+
+        Reviewed by Sam Weinig.
+
+        Fix up some compiler flags in this SPI header. Instead of using `HAVE(VK_IMAGE_ANALYSIS)` to guard SPI
+        declarations, use the new `HAVE(QUICKLOOK_PREVIEW_ITEM_DATA_PROVIDER)`, `HAVE(QUICKLOOK_ITEM_PREVIEW_OPTIONS)`
+        and `HAVE(QUICKLOOK_PREVIEW_ACTIVITY)` flags.
+
+        * pal/spi/mac/QuickLookMacSPI.h:
+
 2021-06-17  Said Abou-Hallawa  <[email protected]>
 
         [Cocoa] Disable hardware decoding in the WebProcess

Modified: trunk/Source/WebCore/PAL/pal/spi/mac/QuickLookMacSPI.h (279059 => 279060)


--- trunk/Source/WebCore/PAL/pal/spi/mac/QuickLookMacSPI.h	2021-06-20 21:31:34 UTC (rev 279059)
+++ trunk/Source/WebCore/PAL/pal/spi/mac/QuickLookMacSPI.h	2021-06-20 23:22:06 UTC (rev 279060)
@@ -62,7 +62,7 @@
 @property (nonatomic, copy) NSDictionary* previewOptions;
 @end
 
-#if HAVE(VK_IMAGE_ANALYSIS)
+#if HAVE(QUICKLOOK_PREVIEW_ACTIVITY)
 
 typedef NS_ENUM(NSInteger, QLPreviewActivity) {
     QLPreviewActivityNone,
@@ -71,19 +71,19 @@
     QLPreviewActivityVisualSearch
 };
 
-#endif
+#endif // HAVE(QUICKLOOK_PREVIEW_ACTIVITY)
 
-#endif // USE(APPLE_INTERNAL_SDK)
+#if HAVE(QUICKLOOK_PREVIEW_ITEM_DATA_PROVIDER)
 
-#if HAVE(QUICKLOOK_PREVIEW_ITEM_DATA_PROVIDER) || HAVE(VK_IMAGE_ANALYSIS)
-
 @class UTType;
-@interface QLItem (Staging_74299451)
+@interface QLItem ()
 - (instancetype)initWithDataProvider:(id /* <QLPreviewItemDataProvider> */)data contentType:(UTType *)contentType previewTitle:(NSString *)previewTitle;
 @end
 
-#endif
+#endif // HAVE(QUICKLOOK_PREVIEW_ITEM_DATA_PROVIDER)
 
+#endif // USE(APPLE_INTERNAL_SDK)
+
 #if HAVE(QUICKLOOK_ITEM_PREVIEW_OPTIONS)
 
 @interface QLItem (Staging_77864637)
@@ -90,4 +90,4 @@
 @property (nonatomic, copy) NSDictionary *previewOptions;
 @end
 
-#endif
+#endif // HAVE(QUICKLOOK_ITEM_PREVIEW_OPTIONS)

Modified: trunk/Source/WebKit/ChangeLog (279059 => 279060)


--- trunk/Source/WebKit/ChangeLog	2021-06-20 21:31:34 UTC (rev 279059)
+++ trunk/Source/WebKit/ChangeLog	2021-06-20 23:22:06 UTC (rev 279060)
@@ -1,5 +1,51 @@
 2021-06-20  Wenson Hsieh  <[email protected]>
 
+        [macOS] Rename WKVisualSearchPreviewController to WKQuickLookPreviewController
+        https://bugs.webkit.org/show_bug.cgi?id=227193
+
+        Reviewed by Sam Weinig.
+
+        Rename WKVisualSearchPreviewController to WKQuickLookPreviewController, with the intention of using this logic
+        to implement a new context menu action for opening images in a QuickLook preview panel. See below for more
+        details.
+
+        * SourcesCocoa.txt:
+        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
+        (WebKit::WebPageProxy::handleContextMenuLookUpImage): Deleted.
+
+        Move this into WebPageProxyMac.mm, since this is (1) only relevant to macOS, and (2) this logic now requires
+        WKQuickLookPreviewController.h, which WebPageProxyMac.mm already imports.
+
+        * UIProcess/Cocoa/WebViewImpl.mm:
+        (WebKit::WebViewImpl::acceptsPreviewPanelControl):
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/mac/WKQuickLookPreviewController.h: Renamed from Source/WebKit/UIProcess/mac/WKVisualSearchPreviewController.h.
+        * UIProcess/mac/WKQuickLookPreviewController.mm: Renamed from Source/WebKit/UIProcess/mac/WKVisualSearchPreviewController.mm.
+        (-[WKQuickLookPreviewController initWithPage:imageData:title:imageURL:activity:]):
+
+        Add QuickLookPreviewActivity, a flag to indicate whether or not WKQuickLookPreviewController should
+        start with QLPreviewActivityVisualSearch or QLPreviewActivityNone. For the time being, we only use this helper
+        object for visual search, so we only pass in QuickLookPreviewActivity::VisualSearch.
+
+        (-[WKQuickLookPreviewController beginControl:]):
+        (-[WKQuickLookPreviewController endControl:]):
+        (-[WKQuickLookPreviewController closePanelIfNecessary]):
+        (-[WKQuickLookPreviewController isControlling:]):
+        (-[WKQuickLookPreviewController provideDataForItem:]):
+        (-[WKQuickLookPreviewController numberOfPreviewItemsInPreviewPanel:]):
+        (-[WKQuickLookPreviewController previewPanel:previewItemAtIndex:]):
+        (-[WKQuickLookPreviewController previewPanel:initialActivityForItem:]):
+        * UIProcess/mac/WebPageProxyMac.mm:
+        (WebKit::WebPageProxy::beginPreviewPanelControl):
+        (WebKit::WebPageProxy::endPreviewPanelControl):
+        (WebKit::WebPageProxy::closeSharedPreviewPanelIfNecessary):
+        (WebKit::WebPageProxy::handleContextMenuLookUpImage):
+        (WebKit::WebPageProxy::showImageInQuickLookPreviewPanel):
+        (WebKit::WebPageProxy::showImageInVisualSearchPreviewPanel): Deleted.
+        * WebKit.xcodeproj/project.pbxproj:
+
+2021-06-20  Wenson Hsieh  <[email protected]>
+
         [Live Text] Mouse events should only trigger text recognition if the cursor is moving
         https://bugs.webkit.org/show_bug.cgi?id=227181
         rdar://79469827

Modified: trunk/Source/WebKit/SourcesCocoa.txt (279059 => 279060)


--- trunk/Source/WebKit/SourcesCocoa.txt	2021-06-20 21:31:34 UTC (rev 279059)
+++ trunk/Source/WebKit/SourcesCocoa.txt	2021-06-20 23:22:06 UTC (rev 279060)
@@ -523,12 +523,12 @@
 UIProcess/mac/WKFullScreenWindowController.mm
 UIProcess/mac/WKImmediateActionController.mm
 UIProcess/mac/WKPrintingView.mm
+UIProcess/mac/WKQuickLookPreviewController.mm
 UIProcess/mac/WKRevealItemPresenter.mm
 UIProcess/mac/WKSharingServicePickerDelegate.mm
 UIProcess/mac/WKTextFinderClient.mm
 UIProcess/mac/WKTextInputWindowController.mm
 UIProcess/mac/WKViewLayoutStrategy.mm
-UIProcess/mac/WKVisualSearchPreviewController.mm
 
 UIProcess/Media/cocoa/AudioSessionRoutingArbitratorProxyCocoa.mm
 UIProcess/Media/cocoa/MediaUsageManagerCocoa.mm

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm (279059 => 279060)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm	2021-06-20 21:31:34 UTC (rev 279059)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm	2021-06-20 23:22:06 UTC (rev 279060)
@@ -637,19 +637,6 @@
 }
 
 #if ENABLE(CONTEXT_MENUS)
-#if ENABLE(IMAGE_ANALYSIS)
-
-void WebPageProxy::handleContextMenuLookUpImage()
-{
-    auto& result = m_activeContextMenuContextData.webHitTestResultData();
-    if (!result.imageBitmap)
-        return;
-
-    showImageInVisualSearchPreviewPanel(*result.imageBitmap, result.toolTipText, URL { URL { }, result.absoluteImageURL });
-}
-
-#endif // ENABLE(IMAGE_ANALYSIS)
-
 #if HAVE(TRANSLATION_UI_SERVICES)
 
 bool WebPageProxy::canHandleContextMenuTranslation() const

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm (279059 => 279060)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm	2021-06-20 21:31:34 UTC (rev 279059)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm	2021-06-20 23:22:06 UTC (rev 279060)
@@ -65,12 +65,12 @@
 #import "WKNSURLExtras.h"
 #import "WKPDFHUDView.h"
 #import "WKPrintingView.h"
+#import "WKQuickLookPreviewController.h"
 #import "WKRevealItemPresenter.h"
 #import "WKSafeBrowsingWarning.h"
 #import <WebKit/WKShareSheet.h>
 #import "WKTextInputWindowController.h"
 #import "WKViewLayoutStrategy.h"
-#import "WKVisualSearchPreviewController.h"
 #import "WKWebViewInternal.h"
 #import <WebKit/WKWebViewPrivate.h>
 #import <WebKit/WebBackForwardList.h>
@@ -5786,7 +5786,7 @@
 bool WebViewImpl::acceptsPreviewPanelControl(QLPreviewPanel *)
 {
 #if ENABLE(IMAGE_ANALYSIS)
-    return !!m_page->visualSearchPreviewController();
+    return !!m_page->quickLookPreviewController();
 #else
     return false;
 #endif

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (279059 => 279060)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.h	2021-06-20 21:31:34 UTC (rev 279059)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h	2021-06-20 23:22:06 UTC (rev 279060)
@@ -228,7 +228,7 @@
 OBJC_CLASS QLPreviewPanel;
 OBJC_CLASS SYNotesActivationObserver;
 OBJC_CLASS WKQLThumbnailLoadOperation;
-OBJC_CLASS WKVisualSearchPreviewController;
+OBJC_CLASS WKQuickLookPreviewController;
 OBJC_CLASS WKWebView;
 OBJC_CLASS _WKRemoteObjectRegistry;
 #endif
@@ -405,6 +405,7 @@
 enum class TextRecognitionUpdateResult : uint8_t;
 enum class NegotiatedLegacyTLS : bool;
 enum class ProcessSwapRequestedByClient : bool;
+enum class QuickLookPreviewActivity : uint8_t;
 enum class UndoOrRedo : bool;
 enum class WebContentMode : uint8_t;
 
@@ -1937,7 +1938,7 @@
     bool isRunningModalJavaScriptDialog() const { return m_isRunningModalJavaScriptDialog; }
 
 #if ENABLE(IMAGE_ANALYSIS) && PLATFORM(MAC)
-    WKVisualSearchPreviewController *visualSearchPreviewController() const { return m_visualSearchPreviewController.get(); }
+    WKQuickLookPreviewController *quickLookPreviewController() const { return m_quickLookPreviewController.get(); }
 #endif
 
 private:
@@ -2489,7 +2490,7 @@
     void runModalJavaScriptDialog(RefPtr<WebFrameProxy>&&, FrameInfoData&&, const String& message, CompletionHandler<void(WebPageProxy&, WebFrameProxy*, FrameInfoData&&, const String&, CompletionHandler<void()>&&)>&&);
 
 #if ENABLE(IMAGE_ANALYSIS) && PLATFORM(MAC)
-    void showImageInVisualSearchPreviewPanel(ShareableBitmap& imageBitmap, const String& tooltip, const URL& imageURL);
+    void showImageInQuickLookPreviewPanel(ShareableBitmap& imageBitmap, const String& tooltip, const URL& imageURL, QuickLookPreviewActivity);
 #endif
         
 #if ENABLE(APP_HIGHLIGHTS)
@@ -3048,7 +3049,7 @@
 #endif
 
 #if ENABLE(IMAGE_ANALYSIS) && PLATFORM(MAC)
-    RetainPtr<WKVisualSearchPreviewController> m_visualSearchPreviewController;
+    RetainPtr<WKQuickLookPreviewController> m_quickLookPreviewController;
 #endif
 };
 

Copied: trunk/Source/WebKit/UIProcess/mac/WKQuickLookPreviewController.h (from rev 279059, trunk/Source/WebKit/UIProcess/mac/WKVisualSearchPreviewController.h) (0 => 279060)


--- trunk/Source/WebKit/UIProcess/mac/WKQuickLookPreviewController.h	                        (rev 0)
+++ trunk/Source/WebKit/UIProcess/mac/WKQuickLookPreviewController.h	2021-06-20 23:22:06 UTC (rev 279060)
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if HAVE(QUICKLOOK_PREVIEW_ITEM_DATA_PROVIDER)
+
+#import <Foundation/Foundation.h>
+
+namespace WebKit {
+class WebPageProxy;
+enum class QuickLookPreviewActivity : uint8_t { None, VisualSearch };
+}
+
+@class QLPreviewPanel;
+
+@interface WKQuickLookPreviewController : NSObject
+- (instancetype)initWithPage:(WebKit::WebPageProxy&)page imageData:(NSData *)data title:(NSString *)title imageURL:(NSURL *)imageURL activity:(WebKit::QuickLookPreviewActivity)activity;
+- (void)beginControl:(QLPreviewPanel *)panel;
+- (BOOL)isControlling:(QLPreviewPanel *)panel;
+- (void)endControl:(QLPreviewPanel *)panel;
+- (void)closePanelIfNecessary;
+@end
+
+#endif // HAVE(QUICKLOOK_PREVIEW_ITEM_DATA_PROVIDER)

Copied: trunk/Source/WebKit/UIProcess/mac/WKQuickLookPreviewController.mm (from rev 279059, trunk/Source/WebKit/UIProcess/mac/WKVisualSearchPreviewController.mm) (0 => 279060)


--- trunk/Source/WebKit/UIProcess/mac/WKQuickLookPreviewController.mm	                        (rev 0)
+++ trunk/Source/WebKit/UIProcess/mac/WKQuickLookPreviewController.mm	2021-06-20 23:22:06 UTC (rev 279060)
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "WKQuickLookPreviewController.h"
+
+#if HAVE(QUICKLOOK_PREVIEW_ITEM_DATA_PROVIDER)
+
+#import "WebPageProxy.h"
+#import <wtf/RetainPtr.h>
+#import <pal/mac/QuickLookUISoftLink.h>
+
+@interface WKQuickLookPreviewController () <QLPreviewPanelDelegate, QLPreviewPanelDataSource>
+@end
+
+@implementation WKQuickLookPreviewController {
+    RetainPtr<QLItem> _item;
+    RetainPtr<NSData> _imageData;
+    WebKit::QuickLookPreviewActivity _activity;
+}
+
+- (instancetype)initWithPage:(WebKit::WebPageProxy&)page imageData:(NSData *)imageData title:(NSString *)title imageURL:(NSURL *)imageURL activity:(WebKit::QuickLookPreviewActivity)activity
+{
+    if (!(self = [super init]))
+        return nil;
+
+    _activity = activity;
+    _imageData = imageData;
+    _item = adoptNS([PAL::allocQLItemInstance() initWithDataProvider:(id)self contentType:UTTypePNG previewTitle:title]);
+    if ([_item respondsToSelector:@selector(setPreviewOptions:)]) {
+        auto previewOptions = adoptNS([[NSMutableDictionary alloc] initWithCapacity:2]);
+        if (imageURL)
+            [previewOptions setObject:imageURL forKey:@"imageURL"];
+        if (NSURL *pageURL = URL { URL { }, page.currentURL() })
+            [previewOptions setObject:pageURL forKey:@"pageURL"];
+        [_item setPreviewOptions:previewOptions.get()];
+    }
+
+    return self;
+}
+
+- (void)beginControl:(QLPreviewPanel *)panel
+{
+    panel.dataSource = self;
+    panel.delegate = self;
+}
+
+- (void)endControl:(QLPreviewPanel *)panel
+{
+    if (panel.dataSource == self)
+        panel.dataSource = nil;
+
+    if (panel.delegate == self)
+        panel.delegate = nil;
+}
+
+- (void)closePanelIfNecessary
+{
+    if (!PAL::isQuickLookUIFrameworkAvailable() || ![PAL::getQLPreviewPanelClass() sharedPreviewPanelExists])
+        return;
+
+    if (auto panel = [PAL::getQLPreviewPanelClass() sharedPreviewPanel]; [self isControlling:panel])
+        [panel close];
+}
+
+- (BOOL)isControlling:(QLPreviewPanel *)panel
+{
+    return panel.dataSource == self && panel.delegate == self;
+}
+
+#pragma mark - QLPreviewItemDataProvider
+
+- (NSData *)provideDataForItem:(QLItem *)item
+{
+    ASSERT(item == _item);
+    return _imageData.get();
+}
+
+#pragma mark - QLPreviewPanelDataSource
+
+- (NSInteger)numberOfPreviewItemsInPreviewPanel:(QLPreviewPanel *)panel
+{
+    return 1;
+}
+
+- (id <QLPreviewItem>)previewPanel:(QLPreviewPanel *)panel previewItemAtIndex:(NSInteger)index
+{
+    ASSERT(!index);
+    return _item.get();
+}
+
+#pragma mark - QLPreviewPanelDelegate
+
+- (QLPreviewActivity)previewPanel:(QLPreviewPanel *)previewPanel initialActivityForItem:(id <QLPreviewItem>)item
+{
+    return _activity == WebKit::QuickLookPreviewActivity::VisualSearch ? QLPreviewActivityVisualSearch : QLPreviewActivityNone;
+}
+
+@end
+
+#endif // HAVE(QUICKLOOK_PREVIEW_ITEM_DATA_PROVIDER)

Deleted: trunk/Source/WebKit/UIProcess/mac/WKVisualSearchPreviewController.h (279059 => 279060)


--- trunk/Source/WebKit/UIProcess/mac/WKVisualSearchPreviewController.h	2021-06-20 21:31:34 UTC (rev 279059)
+++ trunk/Source/WebKit/UIProcess/mac/WKVisualSearchPreviewController.h	2021-06-20 23:22:06 UTC (rev 279060)
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2021 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#if PLATFORM(MAC) && ENABLE(IMAGE_ANALYSIS)
-
-#import <Foundation/Foundation.h>
-
-namespace WebKit {
-class WebPageProxy;
-}
-
-@class QLPreviewPanel;
-
-@interface WKVisualSearchPreviewController : NSObject
-- (instancetype)initWithPage:(WebKit::WebPageProxy&)page imageData:(NSData *)data title:(NSString *)title imageURL:(NSURL *)imageURL;
-- (void)beginControl:(QLPreviewPanel *)panel;
-- (BOOL)isControlling:(QLPreviewPanel *)panel;
-- (void)endControl:(QLPreviewPanel *)panel;
-- (void)closePanelIfNecessary;
-@end
-
-#endif // PLATFORM(MAC) && ENABLE(IMAGE_ANALYSIS)

Deleted: trunk/Source/WebKit/UIProcess/mac/WKVisualSearchPreviewController.mm (279059 => 279060)


--- trunk/Source/WebKit/UIProcess/mac/WKVisualSearchPreviewController.mm	2021-06-20 21:31:34 UTC (rev 279059)
+++ trunk/Source/WebKit/UIProcess/mac/WKVisualSearchPreviewController.mm	2021-06-20 23:22:06 UTC (rev 279060)
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2021 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import "config.h"
-#import "WKVisualSearchPreviewController.h"
-
-#if ENABLE(IMAGE_ANALYSIS) && PLATFORM(MAC)
-
-#import "WebPageProxy.h"
-#import <wtf/RetainPtr.h>
-#import <pal/mac/QuickLookUISoftLink.h>
-
-@interface WKVisualSearchPreviewController () <QLPreviewPanelDelegate, QLPreviewPanelDataSource>
-@end
-
-@implementation WKVisualSearchPreviewController {
-    RetainPtr<QLItem> _item;
-    RetainPtr<NSData> _imageData;
-}
-
-- (instancetype)initWithPage:(WebKit::WebPageProxy&)page imageData:(NSData *)imageData title:(NSString *)title imageURL:(NSURL *)imageURL
-{
-    if (!(self = [super init]))
-        return nil;
-
-    _imageData = imageData;
-    _item = adoptNS([PAL::allocQLItemInstance() initWithDataProvider:(id)self contentType:UTTypePNG previewTitle:title]);
-    if ([_item respondsToSelector:@selector(setPreviewOptions:)]) {
-        auto previewOptions = adoptNS([[NSMutableDictionary alloc] initWithCapacity:2]);
-        if (imageURL)
-            [previewOptions setObject:imageURL forKey:@"imageURL"];
-        if (NSURL *pageURL = URL { URL { }, page.currentURL() })
-            [previewOptions setObject:pageURL forKey:@"pageURL"];
-        [_item setPreviewOptions:previewOptions.get()];
-    }
-
-    return self;
-}
-
-- (void)beginControl:(QLPreviewPanel *)panel
-{
-    panel.dataSource = self;
-    panel.delegate = self;
-}
-
-- (void)endControl:(QLPreviewPanel *)panel
-{
-    if (panel.dataSource == self)
-        panel.dataSource = nil;
-
-    if (panel.delegate == self)
-        panel.delegate = nil;
-}
-
-- (void)closePanelIfNecessary
-{
-    if (!PAL::isQuickLookUIFrameworkAvailable() || ![PAL::getQLPreviewPanelClass() sharedPreviewPanelExists])
-        return;
-
-    if (auto panel = [PAL::getQLPreviewPanelClass() sharedPreviewPanel]; [self isControlling:panel])
-        [panel close];
-}
-
-- (BOOL)isControlling:(QLPreviewPanel *)panel
-{
-    return panel.dataSource == self && panel.delegate == self;
-}
-
-#pragma mark - QLPreviewItemDataProvider
-
-- (NSData *)provideDataForItem:(QLItem *)item
-{
-    ASSERT(item == _item);
-    return _imageData.get();
-}
-
-#pragma mark - QLPreviewPanelDataSource
-
-- (NSInteger)numberOfPreviewItemsInPreviewPanel:(QLPreviewPanel *)panel
-{
-    return 1;
-}
-
-- (id <QLPreviewItem>)previewPanel:(QLPreviewPanel *)panel previewItemAtIndex:(NSInteger)index
-{
-    ASSERT(!index);
-    return _item.get();
-}
-
-#pragma mark - QLPreviewPanelDelegate
-
-- (QLPreviewActivity)previewPanel:(QLPreviewPanel *)previewPanel initialActivityForItem:(id <QLPreviewItem>)item
-{
-    return QLPreviewActivityVisualSearch;
-}
-
-@end
-
-#endif // ENABLE(IMAGE_ANALYSIS) && PLATFORM(MAC)

Modified: trunk/Source/WebKit/UIProcess/mac/WebPageProxyMac.mm (279059 => 279060)


--- trunk/Source/WebKit/UIProcess/mac/WebPageProxyMac.mm	2021-06-20 21:31:34 UTC (rev 279059)
+++ trunk/Source/WebKit/UIProcess/mac/WebPageProxyMac.mm	2021-06-20 23:22:06 UTC (rev 279060)
@@ -45,8 +45,8 @@
 #import "StringUtilities.h"
 #import "TextChecker.h"
 #import "WKBrowsingContextControllerInternal.h"
+#import "WKQuickLookPreviewController.h"
 #import "WKSharingServicePickerDelegate.h"
-#import "WKVisualSearchPreviewController.h"
 #import "WebContextMenuProxyMac.h"
 #import "WebPageMessages.h"
 #import "WebPreferencesKeys.h"
@@ -725,7 +725,7 @@
 void WebPageProxy::beginPreviewPanelControl(QLPreviewPanel *panel)
 {
 #if ENABLE(IMAGE_ANALYSIS)
-    [m_visualSearchPreviewController beginControl:panel];
+    [m_quickLookPreviewController beginControl:panel];
 #endif
 }
 
@@ -732,7 +732,7 @@
 void WebPageProxy::endPreviewPanelControl(QLPreviewPanel *panel)
 {
 #if ENABLE(IMAGE_ANALYSIS)
-    if (auto controller = std::exchange(m_visualSearchPreviewController, nil))
+    if (auto controller = std::exchange(m_quickLookPreviewController, nil))
         [controller endControl:panel];
 #endif
 }
@@ -740,14 +740,23 @@
 void WebPageProxy::closeSharedPreviewPanelIfNecessary()
 {
 #if ENABLE(IMAGE_ANALYSIS)
-    [m_visualSearchPreviewController closePanelIfNecessary];
+    [m_quickLookPreviewController closePanelIfNecessary];
 #endif
 }
 
 #if ENABLE(IMAGE_ANALYSIS)
 
-void WebPageProxy::showImageInVisualSearchPreviewPanel(ShareableBitmap& imageBitmap, const String& tooltip, const URL& imageURL)
+void WebPageProxy::handleContextMenuLookUpImage()
 {
+    auto& result = m_activeContextMenuContextData.webHitTestResultData();
+    if (!result.imageBitmap)
+        return;
+
+    showImageInQuickLookPreviewPanel(*result.imageBitmap, result.toolTipText, URL { URL { }, result.absoluteImageURL }, QuickLookPreviewActivity::VisualSearch);
+}
+
+void WebPageProxy::showImageInQuickLookPreviewPanel(ShareableBitmap& imageBitmap, const String& tooltip, const URL& imageURL, QuickLookPreviewActivity activity)
+{
     if (!PAL::isQuickLookUIFrameworkAvailable() || !PAL::getQLPreviewPanelClass() || ![PAL::getQLItemClass() instancesRespondToSelector:@selector(initWithDataProvider:contentType:previewTitle:)])
         return;
 
@@ -764,7 +773,7 @@
     if (!CGImageDestinationFinalize(destination.get()))
         return;
 
-    m_visualSearchPreviewController = adoptNS([[WKVisualSearchPreviewController alloc] initWithPage:*this imageData:(__bridge NSData *)imageData.get() title:tooltip imageURL:imageURL]);
+    m_quickLookPreviewController = adoptNS([[WKQuickLookPreviewController alloc] initWithPage:*this imageData:(__bridge NSData *)imageData.get() title:tooltip imageURL:imageURL activity:activity]);
 
     // When presenting the shared QLPreviewPanel, QuickLook will search the responder chain for a suitable panel controller.
     // Make sure that we (by default) start the search at the web view, which knows how to vend the Visual Search preview
@@ -774,11 +783,11 @@
     auto previewPanel = [PAL::getQLPreviewPanelClass() sharedPreviewPanel];
     [previewPanel makeKeyAndOrderFront:nil];
 
-    if (![m_visualSearchPreviewController isControlling:previewPanel]) {
+    if (![m_quickLookPreviewController isControlling:previewPanel]) {
         // The WebKit client may have overridden QLPreviewPanelController methods on the view without calling into the superclass.
         // In this case, hand over control to the client and clear out our state eagerly, since we don't expect any further delegate
         // calls once the preview panel is dismissed.
-        m_visualSearchPreviewController.clear();
+        m_quickLookPreviewController.clear();
     }
 }
 

Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (279059 => 279060)


--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2021-06-20 21:31:34 UTC (rev 279059)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2021-06-20 23:22:06 UTC (rev 279060)
@@ -2031,7 +2031,7 @@
 		F48D2A8521583A7E00C6752B /* AppKitSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = F48D2A8421583A0200C6752B /* AppKitSPI.h */; };
 		F496A4311F58A272004C1757 /* DragDropInteractionState.h in Headers */ = {isa = PBXBuildFile; fileRef = F496A42F1F58A272004C1757 /* DragDropInteractionState.h */; };
 		F4974E76265ECBBC00B49B8C /* WKRevealItemPresenter.h in Headers */ = {isa = PBXBuildFile; fileRef = F446EDEF265EB2B00031DA8F /* WKRevealItemPresenter.h */; };
-		F4975CF22624B80A003C626E /* WKVisualSearchPreviewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F4975CF12624B80A003C626E /* WKVisualSearchPreviewController.h */; };
+		F4975CF22624B80A003C626E /* WKQuickLookPreviewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F4975CF12624B80A003C626E /* WKQuickLookPreviewController.h */; };
 		F4A6D6BC254CA3E900B65FAA /* SharedDisplayListHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = F4A6D6BB254CA3E900B65FAA /* SharedDisplayListHandle.h */; };
 		F4BA33F225757E89000A3CE8 /* WKImageAnalysisGestureRecognizer.h in Headers */ = {isa = PBXBuildFile; fileRef = F4BA33F025757E89000A3CE8 /* WKImageAnalysisGestureRecognizer.h */; };
 		F4CB09E5225D5A0900891487 /* WebsiteMediaSourcePolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = F4CB09E4225D5A0300891487 /* WebsiteMediaSourcePolicy.h */; };
@@ -5988,8 +5988,8 @@
 		F48D2A8421583A0200C6752B /* AppKitSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppKitSPI.h; sourceTree = "<group>"; };
 		F496A42F1F58A272004C1757 /* DragDropInteractionState.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = DragDropInteractionState.h; path = ios/DragDropInteractionState.h; sourceTree = "<group>"; };
 		F496A4301F58A272004C1757 /* DragDropInteractionState.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = DragDropInteractionState.mm; path = ios/DragDropInteractionState.mm; sourceTree = "<group>"; };
-		F4975CF12624B80A003C626E /* WKVisualSearchPreviewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WKVisualSearchPreviewController.h; sourceTree = "<group>"; };
-		F4975CF32624B918003C626E /* WKVisualSearchPreviewController.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = WKVisualSearchPreviewController.mm; sourceTree = "<group>"; };
+		F4975CF12624B80A003C626E /* WKQuickLookPreviewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WKQuickLookPreviewController.h; sourceTree = "<group>"; };
+		F4975CF32624B918003C626E /* WKQuickLookPreviewController.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = WKQuickLookPreviewController.mm; sourceTree = "<group>"; };
 		F4A6D6BB254CA3E900B65FAA /* SharedDisplayListHandle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SharedDisplayListHandle.h; sourceTree = "<group>"; };
 		F4A7CE842667EB4E00228685 /* TextRecognitionUpdateResult.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextRecognitionUpdateResult.h; sourceTree = "<group>"; };
 		F4AC655E22A3140E00A05607 /* WebPreferencesDefaultValuesIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = WebPreferencesDefaultValuesIOS.mm; path = ios/WebPreferencesDefaultValuesIOS.mm; sourceTree = "<group>"; };
@@ -10861,6 +10861,8 @@
 				9321D5871A38EE74008052BE /* WKImmediateActionController.mm */,
 				0FCB4E5C18BBE3D9000FCFC9 /* WKPrintingView.h */,
 				0FCB4E5D18BBE3D9000FCFC9 /* WKPrintingView.mm */,
+				F4975CF12624B80A003C626E /* WKQuickLookPreviewController.h */,
+				F4975CF32624B918003C626E /* WKQuickLookPreviewController.mm */,
 				F446EDEF265EB2B00031DA8F /* WKRevealItemPresenter.h */,
 				F446EDF1265EB3B60031DA8F /* WKRevealItemPresenter.mm */,
 				513E462B1AD837560016234A /* WKSharingServicePickerDelegate.h */,
@@ -10871,8 +10873,6 @@
 				0FCB4E5F18BBE3D9000FCFC9 /* WKTextInputWindowController.mm */,
 				2D28A4951AF965A100F190C9 /* WKViewLayoutStrategy.h */,
 				2D28A4961AF965A100F190C9 /* WKViewLayoutStrategy.mm */,
-				F4975CF12624B80A003C626E /* WKVisualSearchPreviewController.h */,
-				F4975CF32624B918003C626E /* WKVisualSearchPreviewController.mm */,
 			);
 			path = mac;
 			sourceTree = "<group>";
@@ -12911,6 +12911,7 @@
 				5272D4C91E735F0900EB4290 /* WKProtectionSpaceNS.h in Headers */,
 				518ACAEA12AEE6BB00B04B83 /* WKProtectionSpaceTypes.h in Headers */,
 				F4D5F51F206087A10038BBA8 /* WKQuickboardViewControllerDelegate.h in Headers */,
+				F4975CF22624B80A003C626E /* WKQuickLookPreviewController.h in Headers */,
 				1AD01BCD1905D54900C9C45F /* WKReloadFrameErrorRecoveryAttempter.h in Headers */,
 				1A9E329B1822E1CC00F5D04C /* WKRemoteObject.h in Headers */,
 				1A9E329F1822FEDD00F5D04C /* WKRemoteObjectCoder.h in Headers */,
@@ -12985,7 +12986,6 @@
 				BC8699B7116AADAA002A925B /* WKViewInternal.h in Headers */,
 				2D28A4971AF965A100F190C9 /* WKViewLayoutStrategy.h in Headers */,
 				BFA6179F12F0B99D0033E0CA /* WKViewPrivate.h in Headers */,
-				F4975CF22624B80A003C626E /* WKVisualSearchPreviewController.h in Headers */,
 				5136E516236A62110074FD5D /* WKWebArchive.h in Headers */,
 				5136E514236A60DC0074FD5D /* WKWebArchiveRef.h in Headers */,
 				C5E1AFEB16B20B7E006CC1F2 /* WKWebArchiveResource.h in Headers */,
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to