Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 37723d9e6498a980cb60caec159f92c546f4726b https://github.com/WebKit/WebKit/commit/37723d9e6498a980cb60caec159f92c546f4726b Author: Abrar Rahman Protyasha <a_protya...@apple.com> Date: 2024-03-14 (Thu, 14 Mar 2024)
Changed paths: M Source/WTF/wtf/PlatformEnableCocoa.h M Source/WebCore/PAL/pal/cocoa/DataDetectorsCoreSoftLink.h M Source/WebCore/PAL/pal/cocoa/DataDetectorsCoreSoftLink.mm M Source/WebCore/PAL/pal/spi/cocoa/DataDetectorsCoreSPI.h M Source/WebCore/WebCore.xcodeproj/project.pbxproj M Source/WebCore/platform/mac/DataDetectorHighlight.h M Source/WebCore/platform/mac/DataDetectorHighlight.mm M Source/WebKit/Platform/spi/Cocoa/PDFKitSPI.h M Source/WebKit/Shared/Cocoa/PDFKitSoftLink.h M Source/WebKit/Shared/Cocoa/PDFKitSoftLink.mm M Source/WebKit/SourcesCocoa.txt M Source/WebKit/WebKit.xcodeproj/project.pbxproj M Source/WebKit/WebProcess/Plugins/PDF/PDFPluginBase.h M Source/WebKit/WebProcess/Plugins/PDF/PDFPluginBase.mm A Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/PDFDataDetectorItem.h A Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/PDFDataDetectorItem.mm A Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/PDFDataDetectorOverlayController.h A Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/PDFDataDetectorOverlayController.mm M Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/UnifiedPDFPlugin.h M Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/UnifiedPDFPlugin.mm Log Message: ----------- [UnifiedPDF] Data detection overlays should show on PDFs https://bugs.webkit.org/show_bug.cgi?id=270998 rdar://123761050 Reviewed by Simon Fraser. Currently, we do not surface any data detection results on UnifiedPDFPlugin. This patch introduces the plumbing required to fetch data detection results from PDFKit, the infrastructure to display data detector overlays, and the requisite event handling/state management to only display (or act on) a data detection result when the mouse hovers/clicks over it. To facilitate this end: - Introduce two classes WebKit::PDFDataDetectorItem and WebKit::PDFDataDetectorOverlayController. The former encapsulates all the data we need to represent a data detection scanning result obtained from PDFKit, while the latter manages all the state for us to be able to indicate data detector results as page overlays. - Introduce new public helpers on UnifiedPDFPlugin that PDFDataDetectorOverlayController can use to delegate work. Notably, this is required for us to implement the updated DataDetectorHighlightClient interface from 276060@main. - Modify WebCore::DataDetectorHighlight to understand a new type of highlight corresponding to PDF selections. * Source/WTF/wtf/PlatformEnableCocoa.h: Add a new PlatformEnable flag so we don't have to litter the codebase with #if ENABLE(UNIFIED_PDF) && ENABLE(DATA_DETECTION) && PLATFORM(MAC) * Source/WebCore/PAL/pal/cocoa/DataDetectorsCoreSoftLink.h: * Source/WebCore/PAL/pal/cocoa/DataDetectorsCoreSoftLink.mm: DDResultIsPastDate is available (and used) on non-IOS_FAMILY platforms, so let's move its declaration out from the platform-specific section. * Source/WebCore/WebCore.xcodeproj/project.pbxproj: * Source/WebCore/platform/mac/DataDetectorHighlight.h: * Source/WebCore/platform/mac/DataDetectorHighlight.mm: (WebCore::DataDetectorHighlight::createForPDFSelection): (WebCore::DataDetectorHighlight::isRangeSupportingType const): * Source/WebKit/Platform/spi/Cocoa/PDFKitSPI.h: * Source/WebKit/Shared/Cocoa/PDFKitSoftLink.h: * Source/WebKit/Shared/Cocoa/PDFKitSoftLink.mm: * Source/WebKit/SourcesCocoa.txt: * Source/WebKit/WebKit.xcodeproj/project.pbxproj: * Source/WebKit/WebProcess/Plugins/PDF/PDFPluginBase.h: * Source/WebKit/WebProcess/Plugins/PDF/PDFPluginBase.mm: (WebKit::PDFPluginBase::lastKnownMousePositionInView const): (WebKit::PDFPluginBase::mousePositionInView const): * Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/PDFDataDetectorItem.h: Added. * Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/PDFDataDetectorItem.mm: Added. (WebKit::hasActionsForResult): (WebKit::resultIsPastDate): (WebKit::PDFDataDetectorItem::create): (WebKit::PDFDataDetectorItem::PDFDataDetectorItem): (WebKit::PDFDataDetectorItem::scannerResult const): (WebKit::PDFDataDetectorItem::hasActions const): (WebKit::PDFDataDetectorItem::isPastDate const): (WebKit::PDFDataDetectorItem::selection const): (WebKit::PDFDataDetectorItem::pageBounds const): * Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/PDFDataDetectorOverlayController.h: Added. * Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/PDFDataDetectorOverlayController.mm: Added. (WebKit::PDFDataDetectorOverlayController::PDFDataDetectorOverlayController): (WebKit::PDFDataDetectorOverlayController::protectedPlugin const): (WebKit::PDFDataDetectorOverlayController::installOverlayIfNeeded): (WebKit::PDFDataDetectorOverlayController::uninstallOverlay): (WebKit::PDFDataDetectorOverlayController::teardown): (WebKit::createPlatformDataDetectorHighlight): (WebKit::PDFDataDetectorOverlayController::createPlatformDataDetectorHighlight const): (WebKit::PDFDataDetectorOverlayController::handleMouseEvent): (WebKit::PDFDataDetectorOverlayController::handleDataDetectorAction): (WebKit::PDFDataDetectorOverlayController::updateDataDetectorHighlightsIfNeeded): (WebKit::PDFDataDetectorOverlayController::updatePlatformHighlightData): (WebKit::PDFDataDetectorOverlayController::didInvalidateHighlightOverlayRects): (WebKit::PDFDataDetectorOverlayController::willMoveToPage): (WebKit::PDFDataDetectorOverlayController::scheduleRenderingUpdate): (WebKit::PDFDataDetectorOverlayController::deviceScaleFactor const): (WebKit::PDFDataDetectorOverlayController::createGraphicsLayer): * Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/UnifiedPDFPlugin.h: * Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/UnifiedPDFPlugin.mm: (WebKit::UnifiedPDFPlugin::UnifiedPDFPlugin): (WebKit::UnifiedPDFPlugin::teardown): (WebKit::UnifiedPDFPlugin::installPDFDocument): (WebKit::UnifiedPDFPlugin::enableDataDetection): (WebKit::UnifiedPDFPlugin::handleClickForDataDetectionResult): (WebKit::UnifiedPDFPlugin::createGraphicsLayer): Refactor createGraphicsLayer into three overloads so it isn't inconvenient to use internally or from the overlay controller. (WebKit::UnifiedPDFPlugin::scheduleRenderingUpdate): (WebKit::UnifiedPDFPlugin::pageAtIndex const): Expose this helper to avoid having to pass the entire PDFDocumentLayout object to the overlay controller. (WebKit::UnifiedPDFPlugin::didChangeScrollOffset): Repaint the data detector overlays to our hearts content on a scroll. To be optimized! (WebKit::UnifiedPDFPlugin::handleMouseEvent): (WebKit::UnifiedPDFPlugin::rectForSelectionInPluginSpace const): (WebKit::UnifiedPDFPlugin::installDataDetectorOverlay): (WebKit::UnifiedPDFPlugin::uninstallDataDetectorOverlay): Canonical link: https://commits.webkit.org/276131@main To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes