[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