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 */,