[webkit-changes] [WebKit/WebKit] 537e0a: PDF plugin should not have to evaluate any JS
Abrar Rahman Protyasha
noreply at github.com
Fri Oct 11 14:05:51 PDT 2024
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 537e0aabd70fafae4154191a7ebca13012eedb99
https://github.com/WebKit/WebKit/commit/537e0aabd70fafae4154191a7ebca13012eedb99
Author: Abrar Rahman Protyasha <a_protyasha at 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 at 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
More information about the webkit-changes
mailing list