- Revision
- 275913
- Author
- [email protected]
- Date
- 2021-04-13 14:44:32 -0700 (Tue, 13 Apr 2021)
Log Message
[macOS] Refactor logic for presenting the shared QLPreviewPanel when revealing an image
https://bugs.webkit.org/show_bug.cgi?id=224445
<rdar://problem/76552762>
Reviewed by Andy Estes and Devin Rousso.
`QLPreviewPanel.h` states that `QLPreviewPanel`'s state should never be modified by something that is not
currently controlling it (where "control" is determined through the `QLPreviewPanelController` category
methods declared in the same header file). Currently, WebKit code for revealing an image using the shared
QuickLook panel does not respect this requirement, and instead attempts to set the `dataSource` and `delegate`
properties of `QLPreviewPanel` out of band.
While this is not an issue if nothing in the responder chain accepts preview panel control (i.e. implements the
method `-acceptsPreviewPanelControl:` and returns `YES`), it leads to compatibility issues in apps like Mail
that override these methods and replace the `dataSource` and `delegate` properties on `QLPreviewPanel`. The end
result is that `WebPageProxy` ends up in an unexpected state where `WKImageExtractionPreviewController` has been
created, but will never be destroyed (until the web view itself is destroyed) because we're no longer the
delegate for the shared `QLPreviewPanel`, and therefore won't receive the teardown message when the preview
window is dismissed.
To address this, we refactor this logic so that `WKWebView` (or `WKView`, if applicable) is capable of accepting
preview panel control. See below for more details.
* SourcesCocoa.txt:
* UIProcess/API/mac/WKView.mm:
(-[WKView acceptsPreviewPanelControl:]):
(-[WKView beginPreviewPanelControl:]):
(-[WKView endPreviewPanelControl:]):
Implement `QLPreviewPanelController` hooks on `WKView`, and plumb directly into `WebViewImpl`.
* UIProcess/API/mac/WKWebViewMac.mm:
(-[WKWebView acceptsPreviewPanelControl:]):
(-[WKWebView beginPreviewPanelControl:]):
(-[WKWebView endPreviewPanelControl:]):
Implement `QLPreviewPanelController` hooks on `WKWebView`, and plumb directly into `WebViewImpl`.
* UIProcess/Cocoa/WebViewImpl.h:
* UIProcess/Cocoa/WebViewImpl.mm:
(WebKit::WebViewImpl::acceptsPreviewPanelControl):
Only accept control of the preview panel if we have an active image extraction preview controller.
(WebKit::WebViewImpl::beginPreviewPanelControl):
(WebKit::WebViewImpl::endPreviewPanelControl):
When beginning to take control (and relinquishing control) of the preview panel, respectively set and unset the
`dataSource` and `delegate` properties to the active image extraction preview controller.
* UIProcess/mac/WKImageExtractionPreviewController.h: Added.
* UIProcess/mac/WKImageExtractionPreviewController.mm: Added.
(-[WKImageExtractionPreviewItem initWithURL:title:]):
(-[WKImageExtractionPreviewItem dealloc]):
(-[WKImageExtractionPreviewItem previewItemURL]):
(-[WKImageExtractionPreviewItem previewItemTitle]):
(-[WKImageExtractionPreviewController initWithPage:url:title:]):
(-[WKImageExtractionPreviewController numberOfPreviewItemsInPreviewPanel:]):
(-[WKImageExtractionPreviewController previewPanel:previewItemAtIndex:]):
Partially upstream `_WKImageExtractionPreviewController` to OpenSource, as `WKImageExtractionPreviewController`
(the underscore is unnecessary because this object is not SPI- or API-exposed). Additionally, move it out into
its own header and source, so that it can be imported elsewhere.
* WebKit.xcodeproj/project.pbxproj:
Modified Paths
Added Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (275912 => 275913)
--- trunk/Source/WebKit/ChangeLog 2021-04-13 21:20:56 UTC (rev 275912)
+++ trunk/Source/WebKit/ChangeLog 2021-04-13 21:44:32 UTC (rev 275913)
@@ -1,3 +1,71 @@
+2021-04-13 Wenson Hsieh <[email protected]>
+
+ [macOS] Refactor logic for presenting the shared QLPreviewPanel when revealing an image
+ https://bugs.webkit.org/show_bug.cgi?id=224445
+ <rdar://problem/76552762>
+
+ Reviewed by Andy Estes and Devin Rousso.
+
+ `QLPreviewPanel.h` states that `QLPreviewPanel`'s state should never be modified by something that is not
+ currently controlling it (where "control" is determined through the `QLPreviewPanelController` category
+ methods declared in the same header file). Currently, WebKit code for revealing an image using the shared
+ QuickLook panel does not respect this requirement, and instead attempts to set the `dataSource` and `delegate`
+ properties of `QLPreviewPanel` out of band.
+
+ While this is not an issue if nothing in the responder chain accepts preview panel control (i.e. implements the
+ method `-acceptsPreviewPanelControl:` and returns `YES`), it leads to compatibility issues in apps like Mail
+ that override these methods and replace the `dataSource` and `delegate` properties on `QLPreviewPanel`. The end
+ result is that `WebPageProxy` ends up in an unexpected state where `WKImageExtractionPreviewController` has been
+ created, but will never be destroyed (until the web view itself is destroyed) because we're no longer the
+ delegate for the shared `QLPreviewPanel`, and therefore won't receive the teardown message when the preview
+ window is dismissed.
+
+ To address this, we refactor this logic so that `WKWebView` (or `WKView`, if applicable) is capable of accepting
+ preview panel control. See below for more details.
+
+ * SourcesCocoa.txt:
+ * UIProcess/API/mac/WKView.mm:
+ (-[WKView acceptsPreviewPanelControl:]):
+ (-[WKView beginPreviewPanelControl:]):
+ (-[WKView endPreviewPanelControl:]):
+
+ Implement `QLPreviewPanelController` hooks on `WKView`, and plumb directly into `WebViewImpl`.
+
+ * UIProcess/API/mac/WKWebViewMac.mm:
+ (-[WKWebView acceptsPreviewPanelControl:]):
+ (-[WKWebView beginPreviewPanelControl:]):
+ (-[WKWebView endPreviewPanelControl:]):
+
+ Implement `QLPreviewPanelController` hooks on `WKWebView`, and plumb directly into `WebViewImpl`.
+
+ * UIProcess/Cocoa/WebViewImpl.h:
+ * UIProcess/Cocoa/WebViewImpl.mm:
+ (WebKit::WebViewImpl::acceptsPreviewPanelControl):
+
+ Only accept control of the preview panel if we have an active image extraction preview controller.
+
+ (WebKit::WebViewImpl::beginPreviewPanelControl):
+ (WebKit::WebViewImpl::endPreviewPanelControl):
+
+ When beginning to take control (and relinquishing control) of the preview panel, respectively set and unset the
+ `dataSource` and `delegate` properties to the active image extraction preview controller.
+
+ * UIProcess/mac/WKImageExtractionPreviewController.h: Added.
+ * UIProcess/mac/WKImageExtractionPreviewController.mm: Added.
+ (-[WKImageExtractionPreviewItem initWithURL:title:]):
+ (-[WKImageExtractionPreviewItem dealloc]):
+ (-[WKImageExtractionPreviewItem previewItemURL]):
+ (-[WKImageExtractionPreviewItem previewItemTitle]):
+ (-[WKImageExtractionPreviewController initWithPage:url:title:]):
+ (-[WKImageExtractionPreviewController numberOfPreviewItemsInPreviewPanel:]):
+ (-[WKImageExtractionPreviewController previewPanel:previewItemAtIndex:]):
+
+ Partially upstream `_WKImageExtractionPreviewController` to OpenSource, as `WKImageExtractionPreviewController`
+ (the underscore is unnecessary because this object is not SPI- or API-exposed). Additionally, move it out into
+ its own header and source, so that it can be imported elsewhere.
+
+ * WebKit.xcodeproj/project.pbxproj:
+
2021-04-13 Alex Christensen <[email protected]>
Remove support for NPAPI plugins in WKWebView
Modified: trunk/Source/WebKit/SourcesCocoa.txt (275912 => 275913)
--- trunk/Source/WebKit/SourcesCocoa.txt 2021-04-13 21:20:56 UTC (rev 275912)
+++ trunk/Source/WebKit/SourcesCocoa.txt 2021-04-13 21:44:32 UTC (rev 275913)
@@ -522,6 +522,7 @@
UIProcess/mac/WebProcessProxyMac.mm
UIProcess/mac/WindowServerConnection.mm
UIProcess/mac/WKFullScreenWindowController.mm
+UIProcess/mac/WKImageExtractionPreviewController.mm
UIProcess/mac/WKImmediateActionController.mm
UIProcess/mac/WKPrintingView.mm
UIProcess/mac/WKSharingServicePickerDelegate.mm
Modified: trunk/Source/WebKit/UIProcess/API/mac/WKView.mm (275912 => 275913)
--- trunk/Source/WebKit/UIProcess/API/mac/WKView.mm 2021-04-13 21:20:56 UTC (rev 275912)
+++ trunk/Source/WebKit/UIProcess/API/mac/WKView.mm 2021-04-13 21:44:32 UTC (rev 275913)
@@ -1694,6 +1694,21 @@
return _data->_impl->useSystemAppearance();
}
+- (BOOL)acceptsPreviewPanelControl:(QLPreviewPanel *)panel
+{
+ return _data->_impl->acceptsPreviewPanelControl(panel);
+}
+
+- (void)beginPreviewPanelControl:(QLPreviewPanel *)panel
+{
+ _data->_impl->beginPreviewPanelControl(panel);
+}
+
+- (void)endPreviewPanelControl:(QLPreviewPanel *)panel
+{
+ _data->_impl->endPreviewPanelControl(panel);
+}
+
@end
ALLOW_DEPRECATED_DECLARATIONS_END
Modified: trunk/Source/WebKit/UIProcess/API/mac/WKWebViewMac.mm (275912 => 275913)
--- trunk/Source/WebKit/UIProcess/API/mac/WKWebViewMac.mm 2021-04-13 21:20:56 UTC (rev 275912)
+++ trunk/Source/WebKit/UIProcess/API/mac/WKWebViewMac.mm 2021-04-13 21:44:32 UTC (rev 275913)
@@ -1223,6 +1223,23 @@
// Only called with UI-side compositing.
}
+#pragma mark - QLPreviewPanelController
+
+- (BOOL)acceptsPreviewPanelControl:(QLPreviewPanel *)panel
+{
+ return _impl->acceptsPreviewPanelControl(panel);
+}
+
+- (void)beginPreviewPanelControl:(QLPreviewPanel *)panel
+{
+ _impl->beginPreviewPanelControl(panel);
+}
+
+- (void)endPreviewPanelControl:(QLPreviewPanel *)panel
+{
+ _impl->endPreviewPanelControl(panel);
+}
+
#pragma mark -
- (void)_setupScrollAndContentViews
Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.h (275912 => 275913)
--- trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.h 2021-04-13 21:20:56 UTC (rev 275912)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.h 2021-04-13 21:44:32 UTC (rev 275913)
@@ -54,6 +54,7 @@
OBJC_CLASS NSMenu;
OBJC_CLASS NSTextInputContext;
OBJC_CLASS NSView;
+OBJC_CLASS QLPreviewPanel;
OBJC_CLASS WKAccessibilitySettingsObserver;
OBJC_CLASS WKBrowsingContextController;
OBJC_CLASS WKDOMPasteMenuDelegate;
@@ -590,6 +591,10 @@
void computeCanRevealImage(const URL& imageURL, ShareableBitmap& imageBitmap, CompletionHandler<void(bool)>&&);
#endif
+ bool acceptsPreviewPanelControl(QLPreviewPanel *);
+ void beginPreviewPanelControl(QLPreviewPanel *);
+ void endPreviewPanelControl(QLPreviewPanel *);
+
bool windowIsFrontWindowUnderMouse(NSEvent *);
void setRequiresUserActionForEditingControlsManager(bool requiresUserActionForEditingControlsManager) { m_requiresUserActionForEditingControlsManager = requiresUserActionForEditingControlsManager; }
Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm (275912 => 275913)
--- trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm 2021-04-13 21:20:56 UTC (rev 275912)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm 2021-04-13 21:44:32 UTC (rev 275913)
@@ -61,6 +61,7 @@
#import "WKEditCommand.h"
#import "WKErrorInternal.h"
#import "WKFullScreenWindowController.h"
+#import "WKImageExtractionPreviewController.h"
#import "WKImmediateActionController.h"
#import "WKNSURLExtras.h"
#import "WKPDFHUDView.h"
@@ -94,6 +95,7 @@
#import <WebCore/Editor.h>
#import <WebCore/FontAttributeChanges.h>
#import <WebCore/FontAttributes.h>
+#import <WebCore/ImageExtractionResult.h>
#import <WebCore/KeypressCommand.h>
#import <WebCore/LegacyNSPasteboardTypes.h>
#import <WebCore/LoaderNSURLExtras.h>
@@ -135,10 +137,6 @@
#import <wtf/cocoa/VectorCocoa.h>
#import <wtf/text/StringConcatenate.h>
-#if ENABLE(IMAGE_EXTRACTION)
-#import <WebCore/ImageExtractionResult.h>
-#endif
-
#if ENABLE(MEDIA_SESSION_COORDINATOR)
#include <WebKit/MediaSessionCoordinatorProxyPrivate.h>
#endif
@@ -5634,6 +5632,48 @@
#endif // HAVE(TRANSLATION_UI_SERVICES) && ENABLE(CONTEXT_MENUS)
+bool WebViewImpl::acceptsPreviewPanelControl(QLPreviewPanel *)
+{
+#if ENABLE(IMAGE_EXTRACTION)
+ return !!m_page->imageExtractionPreviewController();
+#else
+ return false;
+#endif
+}
+
+void WebViewImpl::beginPreviewPanelControl(QLPreviewPanel *panel)
+{
+#if ENABLE(IMAGE_EXTRACTION)
+ auto controller = m_page->imageExtractionPreviewController();
+ if (!controller)
+ return;
+
+ panel.dataSource = controller;
+ panel.delegate = controller;
+#else
+ UNUSED_PARAM(panel);
+#endif
+}
+
+void WebViewImpl::endPreviewPanelControl(QLPreviewPanel *panel)
+{
+#if ENABLE(IMAGE_EXTRACTION)
+ auto controller = m_page->imageExtractionPreviewController();
+ if (!controller)
+ return;
+
+ if (panel.dataSource == controller)
+ panel.dataSource = nil;
+
+ if (panel.delegate == controller)
+ panel.delegate = nil;
+
+ m_page->resetImageExtractionPreview();
+#else
+ UNUSED_PARAM(panel);
+#endif
+}
+
} // namespace WebKit
#endif // PLATFORM(MAC)
Added: trunk/Source/WebKit/UIProcess/mac/WKImageExtractionPreviewController.h (0 => 275913)
--- trunk/Source/WebKit/UIProcess/mac/WKImageExtractionPreviewController.h (rev 0)
+++ trunk/Source/WebKit/UIProcess/mac/WKImageExtractionPreviewController.h 2021-04-13 21:44:32 UTC (rev 275913)
@@ -0,0 +1,44 @@
+/*
+ * 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_EXTRACTION)
+
+#import <pal/spi/mac/QuickLookMacSPI.h>
+
+namespace WebKit {
+class WebPageProxy;
+}
+
+@interface WKImageExtractionPreviewItem : NSObject <QLPreviewItem>
+- (instancetype)initWithURL:(NSURL *)url title:(NSString *)title;
+@end
+
+@interface WKImageExtractionPreviewController : NSObject <QLPreviewPanelDelegate, QLPreviewPanelDataSource>
+- (instancetype)initWithPage:(WebKit::WebPageProxy&)page url:(NSURL *)url title:(NSString *)title;
+@end
+
+#endif // PLATFORM(MAC) && ENABLE(IMAGE_EXTRACTION)
Added: trunk/Source/WebKit/UIProcess/mac/WKImageExtractionPreviewController.mm (0 => 275913)
--- trunk/Source/WebKit/UIProcess/mac/WKImageExtractionPreviewController.mm (rev 0)
+++ trunk/Source/WebKit/UIProcess/mac/WKImageExtractionPreviewController.mm 2021-04-13 21:44:32 UTC (rev 275913)
@@ -0,0 +1,108 @@
+/*
+ * 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 "WKImageExtractionPreviewController.h"
+
+#if ENABLE(IMAGE_EXTRACTION) && PLATFORM(MAC)
+
+#import "WebPageProxy.h"
+#import <wtf/FileSystem.h>
+#import <wtf/RetainPtr.h>
+#import <wtf/WeakPtr.h>
+
+@implementation WKImageExtractionPreviewItem {
+ RetainPtr<NSURL> _url;
+ RetainPtr<NSString> _title;
+}
+
+- (instancetype)initWithURL:(NSURL *)url title:(NSString *)title
+{
+ if (!(self = [super init]))
+ return nil;
+
+ _url = url;
+ _title = adoptNS([title copy]);
+
+ return self;
+}
+
+- (void)dealloc
+{
+ FileSystem::deleteFile([_url path]);
+
+ [super dealloc];
+}
+
+#pragma mark - QLPreviewItem
+
+- (NSURL *)previewItemURL
+{
+ return _url.get();
+}
+
+- (NSString *)previewItemTitle
+{
+ return _title.get();
+}
+
+@end
+
+@implementation WKImageExtractionPreviewController {
+ WeakPtr<WebKit::WebPageProxy> _page;
+ RetainPtr<WKImageExtractionPreviewItem> _previewItem;
+}
+
+- (instancetype)initWithPage:(WebKit::WebPageProxy&)page url:(NSURL *)url title:(NSString *)title
+{
+ if (!(self = [super init]))
+ return nil;
+
+ _page = makeWeakPtr(page);
+ _previewItem = adoptNS([[WKImageExtractionPreviewItem alloc] initWithURL:url title:title]);
+
+ return self;
+}
+
+#pragma mark - QLPreviewPanelDataSource
+
+- (NSInteger)numberOfPreviewItemsInPreviewPanel:(QLPreviewPanel *)panel
+{
+ return 1;
+}
+
+- (id <QLPreviewItem>)previewPanel:(QLPreviewPanel *)panel previewItemAtIndex:(NSInteger)index
+{
+ ASSERT(!index);
+ return _previewItem.get();
+}
+
+#if USE(APPLE_INTERNAL_SDK)
+#import <WebKitAdditions/WKImageExtractionPreviewControllerAdditions.mm>
+#endif
+
+@end
+
+#endif // ENABLE(IMAGE_EXTRACTION) && PLATFORM(MAC)
Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (275912 => 275913)
--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2021-04-13 21:20:56 UTC (rev 275912)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2021-04-13 21:44:32 UTC (rev 275913)
@@ -2018,6 +2018,7 @@
F4660BC225DEF08100E86598 /* PasteboardAccessIntent.h in Headers */ = {isa = PBXBuildFile; fileRef = F4660BC125DEF08100E86598 /* PasteboardAccessIntent.h */; };
F48D2A8521583A7E00C6752B /* AppKitSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = F48D2A8421583A0200C6752B /* AppKitSPI.h */; };
F496A4311F58A272004C1757 /* DragDropInteractionState.h in Headers */ = {isa = PBXBuildFile; fileRef = F496A42F1F58A272004C1757 /* DragDropInteractionState.h */; };
+ F4975CF22624B80A003C626E /* WKImageExtractionPreviewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F4975CF12624B80A003C626E /* WKImageExtractionPreviewController.h */; };
F4A6D6BC254CA3E900B65FAA /* SharedDisplayListHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = F4A6D6BB254CA3E900B65FAA /* SharedDisplayListHandle.h */; };
F4BA33F225757E89000A3CE8 /* WKImageExtractionGestureRecognizer.h in Headers */ = {isa = PBXBuildFile; fileRef = F4BA33F025757E89000A3CE8 /* WKImageExtractionGestureRecognizer.h */; };
F4CB09E5225D5A0900891487 /* WebsiteMediaSourcePolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = F4CB09E4225D5A0300891487 /* WebsiteMediaSourcePolicy.h */; };
@@ -5953,6 +5954,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 /* WKImageExtractionPreviewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WKImageExtractionPreviewController.h; sourceTree = "<group>"; };
+ F4975CF32624B918003C626E /* WKImageExtractionPreviewController.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = WKImageExtractionPreviewController.mm; sourceTree = "<group>"; };
F4A6D6BB254CA3E900B65FAA /* SharedDisplayListHandle.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SharedDisplayListHandle.h; sourceTree = "<group>"; };
F4AC655E22A3140E00A05607 /* WebPreferencesDefaultValuesIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = WebPreferencesDefaultValuesIOS.mm; path = ios/WebPreferencesDefaultValuesIOS.mm; sourceTree = "<group>"; };
F4B378D021DDBBAB0095A378 /* WebUndoStepID.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebUndoStepID.h; sourceTree = "<group>"; };
@@ -10806,6 +10809,8 @@
868160CF187645370021E79D /* WindowServerConnection.mm */,
CDCA85C7132ABA4E00E961DF /* WKFullScreenWindowController.h */,
CDCA85C6132ABA4E00E961DF /* WKFullScreenWindowController.mm */,
+ F4975CF12624B80A003C626E /* WKImageExtractionPreviewController.h */,
+ F4975CF32624B918003C626E /* WKImageExtractionPreviewController.mm */,
9321D5851A38EE3C008052BE /* WKImmediateActionController.h */,
9321D5871A38EE74008052BE /* WKImmediateActionController.mm */,
0FCB4E5C18BBE3D9000FCFC9 /* WKPrintingView.h */,
@@ -12741,6 +12746,7 @@
BCCF6AC312C91F34008F9C35 /* WKImage.h in Headers */,
BCCF6ACA12C91F59008F9C35 /* WKImageCG.h in Headers */,
F4BA33F225757E89000A3CE8 /* WKImageExtractionGestureRecognizer.h in Headers */,
+ F4975CF22624B80A003C626E /* WKImageExtractionPreviewController.h in Headers */,
933DF82E1B3BC09000AEA9E3 /* WKImagePreviewViewController.h in Headers */,
9321D5861A38EE3C008052BE /* WKImmediateActionController.h in Headers */,
9321D58A1A38F196008052BE /* WKImmediateActionTypes.h in Headers */,