Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 537e0aabd70fafae4154191a7ebca13012eedb99 https://github.com/WebKit/WebKit/commit/537e0aabd70fafae4154191a7ebca13012eedb99 Author: Abrar Rahman Protyasha <a_protya...@apple.com> Date: 2024-10-11 (Fri, 11 Oct 2024)
Changed paths: M Source/WebKit/SaferCPPExpectations/UncountedCallArgsCheckerExpectations M Source/WebKit/SaferCPPExpectations/UncountedLocalVarsCheckerExpectations 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/PDFScriptEvaluation.h A Source/WebKit/WebProcess/Plugins/PDF/PDFScriptEvaluation.mm R Source/WebKit/WebProcess/Plugins/PDF/PDFScriptEvaluator.h R Source/WebKit/WebProcess/Plugins/PDF/PDFScriptEvaluator.mm M Tools/TestWebKitAPI/Tests/WebKitCocoa/WKPrinting.mm Log Message: ----------- PDF plugin should not have to evaluate any JS rdar://129710502 Reviewed by Wenson Hsieh, Megan Gardner and Tim Horton. The JS evaluation context for PDF plugins is very simple -- we expose a single method: print(). As such, it is a significant risk potential to be evaluating scripts embedded in PDF documents for not much robustness. This patch moves us away from spinning up a JS VM to evaluate these scripts, and instead adopting a "grep for print() calls" approach. Then, we just make the plugin do the required communication to initiate a print. * 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::tryRunScriptsInPDFDocument): Instead of making the plugin a PDFScriptEvaluatorClient, we follow an approach where we ask some function to check if it's appropriate to run the (print) script in some CGPDFDocumentRef instance, and if so, to do the work we specify (in a callback). This work happens to be the necessary communication the plugin needs to do to initiate a print. * Source/WebKit/WebProcess/Plugins/PDF/PDFScriptEvaluation.h: Added. * Source/WebKit/WebProcess/Plugins/PDF/PDFScriptEvaluation.mm: Renamed from Source/WebKit/WebProcess/Plugins/PDF/PDFScriptEvaluator.mm. (WebKit::PDFScriptEvaluation::isPrintScript): (WebKit::PDFScriptEvaluation::appendValuesInPDFNameSubtreeToVector): (WebKit::PDFScriptEvaluation::pdfDocumentContainsPrintScript): (WebKit::PDFScriptEvaluation::print): (WebKit::PDFScriptEvaluation::runScripts): * Source/WebKit/WebProcess/Plugins/PDF/PDFScriptEvaluator.h: Removed. Get rid of the PDFScriptEvaluator struct, instead exposing a single free function in the WebKit::PDFScriptEvaluation namespace. * Tools/TestWebKitAPI/Tests/WebKitCocoa/WKPrinting.mm: (-[TestPDFPrintDelegate _webView:printFrame:pdfFirstPageSize:completionHandler:]): (-[TestPDFPrintDelegate waitForPrintFrameCall]): (PrintWithJSExecutionOptionTests::allowsContentJavascript const): (PrintWithJSExecutionOptionTests::pdfRequest): (TEST_P): (INSTANTIATE_TEST_SUITE_P): Originally-landed-as: 280938.9@safari-7619-branch (44ed785edd0c). rdar://136111780 * 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::tryRunScriptsInPDFDocument): * Source/WebKit/WebProcess/Plugins/PDF/PDFScriptEvaluation.h: Added. * Source/WebKit/WebProcess/Plugins/PDF/PDFScriptEvaluation.mm: Renamed from Source/WebKit/WebProcess/Plugins/PDF/PDFScriptEvaluator.mm. (WebKit::PDFScriptEvaluation::isPrintScript): (WebKit::PDFScriptEvaluation::appendValuesInPDFNameSubtreeToVector): (WebKit::PDFScriptEvaluation::pdfDocumentContainsPrintScript): (WebKit::PDFScriptEvaluation::runScripts): * Source/WebKit/WebProcess/Plugins/PDF/PDFScriptEvaluator.h: Removed. * Tools/TestWebKitAPI/Tests/WebKitCocoa/WKPrinting.mm: (-[TestPDFPrintDelegate _webView:printFrame:pdfFirstPageSize:completionHandler:]): (-[TestPDFPrintDelegate waitForPrintFrameCall]): (PrintWithJSExecutionOptionTests::allowsContentJavascript const): (PrintWithJSExecutionOptionTests::pdfRequest): (TEST_P): (INSTANTIATE_TEST_SUITE_P): Canonical link: https://commits.webkit.org/285037@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