[webkit-changes] [WebKit/WebKit] b6ac61: [UnifedPDF] Factor incremental PDF loading code in...

Simon Fraser noreply at github.com
Thu Jan 25 09:00:49 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: b6ac61e0064cad757dd1a2a81265150c436fe00c
      https://github.com/WebKit/WebKit/commit/b6ac61e0064cad757dd1a2a81265150c436fe00c
  Author: Simon Fraser <simon.fraser at apple.com>
  Date:   2024-01-25 (Thu, 25 Jan 2024)

  Changed paths:
    M Source/WebKit/Platform/spi/Cocoa/PDFKitSPI.h
    M Source/WebKit/SourcesCocoa.txt
    M Source/WebKit/WebKit.xcodeproj/project.pbxproj
    A Source/WebKit/WebProcess/Plugins/PDF/PDFIncrementalLoader.h
    A Source/WebKit/WebProcess/Plugins/PDF/PDFIncrementalLoader.mm
    M Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h
    M Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm
    M Source/WebKit/WebProcess/Plugins/PDF/PDFPluginAnnotation.h
    M Source/WebKit/WebProcess/Plugins/PDF/PDFPluginBase.h
    M Source/WebKit/WebProcess/Plugins/PDF/PDFPluginBase.mm
    M Source/WebKit/WebProcess/cocoa/VideoPresentationManager.mm

  Log Message:
  -----------
  [UnifedPDF] Factor incremental PDF loading code into its own class
https://bugs.webkit.org/show_bug.cgi?id=267979
rdar://121487714

Reviewed by Tim Horton.

Move the incremental PDF loading code out of PDFPlugin into its own class, PDFIncrementalLoader.
All the complexities of ByteRangeRequest and PDFPluginStreamLoaderClient are now internal to that class.
PDFPlugin makes an instance of this class when incremental loading is enabled.

In addition to moving the code, a lot of code cleanup was done:
* Use of thread-safe weak pointers
* More main thread assertions
* Type for ByteRangeRequest identifiers
* Encapsulate the CFDataRef inside PDFPluginBase
* Clearer distinction between data loaded via the main resource request, and byte-range requests

* Source/WebKit/Platform/spi/Cocoa/PDFKitSPI.h:
* Source/WebKit/SourcesCocoa.txt:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/Plugins/PDF/PDFIncrementalLoader.h: Added.
(WebKit::PDFIncrementalLoader::incrementThreadsWaitingOnCallback):
(WebKit::PDFIncrementalLoader::decrementThreadsWaitingOnCallback):
* Source/WebKit/WebProcess/Plugins/PDF/PDFIncrementalLoader.mm: Added.
(WebKit::ByteRangeRequest::ByteRangeRequest):
(WebKit::ByteRangeRequest::streamLoader):
(WebKit::ByteRangeRequest::setStreamLoader):
(WebKit::ByteRangeRequest::addData):
(WebKit::ByteRangeRequest::position const):
(WebKit::ByteRangeRequest::count const):
(WebKit::ByteRangeRequest::accumulatedData const):
(WebKit::ByteRangeRequest::clearStreamLoader):
(WebKit::ByteRangeRequest::completeWithBytes):
(WebKit::ByteRangeRequest::completeWithAccumulatedData):
(WebKit::ByteRangeRequest::completeIfPossible):
(WebKit::ByteRangeRequest::completeUnconditionally):
(WebKit::PDFPluginStreamLoaderClient::PDFPluginStreamLoaderClient):
(WebKit::PDFPluginStreamLoaderClient::willSendRequest):
(WebKit::PDFPluginStreamLoaderClient::didReceiveResponse):
(WebKit::PDFPluginStreamLoaderClient::didReceiveData):
(WebKit::PDFPluginStreamLoaderClient::didFail):
(WebKit::PDFPluginStreamLoaderClient::didFinishLoading):
(WebKit::PDFIncrementalLoader::create):
(WebKit::PDFIncrementalLoader::PDFIncrementalLoader):
(WebKit::PDFIncrementalLoader::clear):
(WebKit::PDFIncrementalLoader::receivedNonLinearizedPDFSentinel):
(WebKit::PDFIncrementalLoader::documentFinishedLoading const):
(WebKit::PDFIncrementalLoader::ensureDataBufferLength):
(WebKit::PDFIncrementalLoader::appendAccumulatedDataToDataBuffer):
(WebKit::PDFIncrementalLoader::availableDataSize const):
(WebKit::PDFIncrementalLoader::dataPtrForRange const):
(WebKit::PDFIncrementalLoader::incrementalPDFStreamDidFinishLoading):
(WebKit::PDFIncrementalLoader::incrementalPDFStreamDidReceiveData):
(WebKit::PDFIncrementalLoader::incrementalPDFStreamDidFail):
(WebKit::PDFIncrementalLoader::unconditionalCompleteOutstandingRangeRequests):
(WebKit::PDFIncrementalLoader::getResourceBytesAtPositionAfterLoadingComplete):
(WebKit::PDFIncrementalLoader::getResourceBytesAtPosition):
(WebKit::PDFIncrementalLoader::streamLoaderDidStart):
(WebKit::PDFIncrementalLoader::byteRangeRequestForStreamLoader):
(WebKit::PDFIncrementalLoader::forgetStreamLoader):
(WebKit::PDFIncrementalLoader::cancelAndForgetStreamLoader):
(WebKit::PDFIncrementalLoader::identifierForLoader):
(WebKit::PDFIncrementalLoader::removeOutstandingByteRangeRequest):
(WebKit::PDFIncrementalLoader::requestCompleteIfPossible):
(WebKit::PDFIncrementalLoader::requestDidCompleteWithBytes):
(WebKit::PDFIncrementalLoader::requestDidCompleteWithAccumulatedData):
(WebKit::dataProviderGetByteRangesCallback):
(WebKit::dataProviderGetBytesAtPositionCallback):
(WebKit::dataProviderReleaseInfoCallback):
(WebKit::PDFIncrementalLoader::dataProviderGetBytesAtPosition):
(WebKit::PDFIncrementalLoader::dataProviderGetByteRanges):
(WebKit::PDFIncrementalLoader::transitionToMainThreadDocument):
(WebKit::PDFIncrementalLoader::threadEntry):
(WebKit::PDFIncrementalLoader::pdfLog):
(WebKit::PDFIncrementalLoader::logStreamLoader):
(WebKit::PDFIncrementalLoader::logState):
* Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.h:
* Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:
(WebKit::PDFPlugin::PDFPlugin):
(WebKit::PDFPlugin::teardown):
(WebKit::PDFPlugin::pdfLog): Deleted.
(WebKit::PDFPlugin::logStreamLoader): Deleted.
(WebKit::PDFPlugin::verboseLog): Deleted.
(WebKit::PDFPlugin::receivedNonLinearizedPDFSentinel): Deleted.
(WebKit::dataProviderGetBytesAtPositionCallback): Deleted.
(WebKit::dataProviderGetByteRangesCallback): Deleted.
(WebKit::dataProviderReleaseInfoCallback): Deleted.
(WebKit::PDFPlugin::maybeClearHighLatencyDataProviderFlag): Deleted.
(WebKit::PDFPlugin::threadEntry): Deleted.
(WebKit::PDFPlugin::unconditionalCompleteOutstandingRangeRequests): Deleted.
(WebKit::PDFPlugin::getResourceBytesAtPositionMainThread): Deleted.
(WebKit::PDFPlugin::getResourceBytesAtPosition): Deleted.
(WebKit::PDFPlugin::adoptBackgroundThreadDocument): Deleted.
(WebKit::PDFPlugin::ByteRangeRequest::clearStreamLoader): Deleted.
(WebKit::PDFPlugin::ByteRangeRequest::completeWithBytes): Deleted.
(WebKit::PDFPlugin::ByteRangeRequest::completeWithAccumulatedData): Deleted.
(WebKit::PDFPlugin::ByteRangeRequest::maybeComplete): Deleted.
(WebKit::PDFPlugin::ByteRangeRequest::completeUnconditionally): Deleted.
(WebKit::PDFPlugin::PDFPluginStreamLoaderClient::willSendRequest): Deleted.
(WebKit::PDFPlugin::PDFPluginStreamLoaderClient::didReceiveResponse): Deleted.
(WebKit::PDFPlugin::PDFPluginStreamLoaderClient::didReceiveData): Deleted.
(WebKit::PDFPlugin::PDFPluginStreamLoaderClient::didFail): Deleted.
(WebKit::PDFPlugin::PDFPluginStreamLoaderClient::didFinishLoading): Deleted.
(WebKit::PDFPlugin::byteRangeRequestForLoader): Deleted.
(WebKit::PDFPlugin::forgetLoader): Deleted.
(WebKit::PDFPlugin::cancelAndForgetLoader): Deleted.
(WebKit::PDFPlugin::incrementalPDFStreamDidFinishLoading): Deleted.
(WebKit::PDFPlugin::incrementalPDFStreamDidReceiveData): Deleted.
(WebKit::PDFPlugin::incrementalPDFStreamDidFail): Deleted.
* Source/WebKit/WebProcess/Plugins/PDF/PDFPluginAnnotation.h:
* Source/WebKit/WebProcess/Plugins/PDF/PDFPluginBase.h:
(WebKit::PDFPluginBase::incrementalPDFLoadingEnabled const):
(WebKit::PDFPluginBase::documentFinishedLoading const):
(WebKit::PDFPluginBase::streamedBytes const):
(WebKit::PDFPluginBase::incrementalPDFStreamDidReceiveData): Deleted.
(WebKit::PDFPluginBase::incrementalPDFStreamDidFinishLoading): Deleted.
(WebKit::PDFPluginBase::incrementalPDFStreamDidFail): Deleted.
* Source/WebKit/WebProcess/Plugins/PDF/PDFPluginBase.mm:
(WebKit::PDFPluginBase::PDFPluginBase):
(WebKit::PDFPluginBase::teardown):
(WebKit::PDFPluginBase::haveStreamedDataForRange const):
(WebKit::PDFPluginBase::haveDataForRange const):
(WebKit::PDFPluginBase::copyDataAtPosition const):
(WebKit::PDFPluginBase::dataPtrForRange const):
(WebKit::PDFPluginBase::insertRangeRequestData):
(WebKit::PDFPluginBase::streamDidReceiveData):
(WebKit::PDFPluginBase::streamDidFinishLoading):
(WebKit::PDFPluginBase::streamDidFail):
(WebKit::PDFPluginBase::adoptBackgroundThreadDocument):
(WebKit::PDFPluginBase::maybeClearHighLatencyDataProviderFlag):
(WebKit::PDFPluginBase::startByteRangeRequest):
(WebKit::PDFPluginBase::receivedNonLinearizedPDFSentinel):
(WebKit::PDFPluginBase::pdfLog):
(WebKit::PDFPluginBase::verboseLog):
* Source/WebKit/WebProcess/cocoa/VideoPresentationManager.mm:

Canonical link: https://commits.webkit.org/273506@main




More information about the webkit-changes mailing list