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

Reply via email to