haikuwebkit/Source/WebCore/contentextensions/SerializedNFA.cpp

142 lines
5.1 KiB
C++
Raw Permalink Normal View History

Serialize NFA to disk before converting it to a DFA when compiling a WKContentRuleList https://bugs.webkit.org/show_bug.cgi?id=219452 Patch by Alex Christensen <achristensen@webkit.org> on 2020-12-03 Reviewed by Geoffrey Garen. Source/WebCore: This decreases maximum memory use by about 50% because the NFA and DFA never need to be in memory at the same time. I'll have to do some tuning and on-device measurement, but this may allow us to increase maxRuleCount. * Headers.cmake: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * contentextensions/CombinedURLFilters.cpp: (WebCore::ContentExtensions::CombinedURLFilters::processNFAs): * contentextensions/CombinedURLFilters.h: * contentextensions/ContentExtensionCompiler.cpp: (WebCore::ContentExtensions::compileToBytecode): (WebCore::ContentExtensions::compileRuleList): * contentextensions/ContentExtensionError.cpp: (WebCore::ContentExtensions::contentExtensionErrorCategory): * contentextensions/ContentExtensionError.h: * contentextensions/ContentExtensionsDebugging.h: * contentextensions/DFA.cpp: (WebCore::ContentExtensions::DFA::shrinkToFit): Deleted. * contentextensions/DFA.h: * contentextensions/ImmutableNFA.h: (WebCore::ContentExtensions::ImmutableNFA::clear): (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator* const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator-> const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator== const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator!= const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator++): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstTargets::begin const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstTargets::end const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator== const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator!= const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator++): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::first const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::last const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::data const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::range const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::begin const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::end const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::debugPrint const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::transitionsForNode const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::root const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::finalize): Deleted. * contentextensions/ImmutableNFANodeBuilder.h: * contentextensions/NFAToDFA.cpp: (WebCore::ContentExtensions::epsilonClosureExcludingSelf): (WebCore::ContentExtensions::resolveEpsilonClosures): (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetSource::NodeIdSetToUniqueNodeIdSetSource): (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetTranslator::translate): (WebCore::ContentExtensions::createCombinedTransition): (WebCore::ContentExtensions::getOrCreateDFANode): (WebCore::ContentExtensions::NFAToDFA::convert): * contentextensions/NFAToDFA.h: * contentextensions/SerializedNFA.cpp: Added. (WebCore::ContentExtensions::writeAllToFile): (WebCore::ContentExtensions::SerializedNFA::serialize): (WebCore::ContentExtensions::SerializedNFA::SerializedNFA): (WebCore::ContentExtensions::SerializedNFA::pointerAtOffsetInFile const): (WebCore::ContentExtensions::SerializedNFA::nodes const const): (WebCore::ContentExtensions::SerializedNFA::transitions const const): (WebCore::ContentExtensions::SerializedNFA::targets const const): (WebCore::ContentExtensions::SerializedNFA::epsilonTransitionsTargets const const): (WebCore::ContentExtensions::SerializedNFA::actions const const): * contentextensions/SerializedNFA.h: Copied from Source/WebCore/contentextensions/ImmutableNFA.h. (WebCore::ContentExtensions::SerializedNFA::Range::Range): (WebCore::ContentExtensions::SerializedNFA::Range::begin const): (WebCore::ContentExtensions::SerializedNFA::Range::end const): (WebCore::ContentExtensions::SerializedNFA::Range::size const): (WebCore::ContentExtensions::SerializedNFA::Range::operator[] const): (WebCore::ContentExtensions::SerializedNFA::root const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator* const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator-> const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator== const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator!= const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator++): (WebCore::ContentExtensions::SerializedNFA::IterableConstTargets::begin const): (WebCore::ContentExtensions::SerializedNFA::IterableConstTargets::end const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator== const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator!= const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator++): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::first const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::last const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::data const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::range const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::begin const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::end const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::debugPrint const): (WebCore::ContentExtensions::SerializedNFA::transitionsForNode const): Source/WebKit: * UIProcess/API/Cocoa/WKContentRuleListStore.mm: (-[WKContentRuleListStore _compileContentRuleListForIdentifier:encodedContentRuleList:completionHandler:]): * UIProcess/API/Cocoa/WKContentRuleListStorePrivate.h: Remove NS_RELEASES_ARGUMENT because it was incorrect and unnecessary because the WTF::String is copied to a background thread. Tools: Update syntax of existing tests, which cover behavior quite well. * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp: (TestWebKitAPI::createNFAs): (TestWebKitAPI::TEST_F): * TestWebKitAPI/Tests/WebCore/DFAHelpers.h: (TestWebKitAPI::createNFAs): (TestWebKitAPI::buildDFAFromPatterns): Canonical link: https://commits.webkit.org/232097@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@270414 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-12-04 00:01:23 +00:00
/*
* Copyright (C) 2020 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
#include "SerializedNFA.h"
#include "NFA.h"
Serialize NFA to disk before converting it to a DFA when compiling a WKContentRuleList https://bugs.webkit.org/show_bug.cgi?id=219452 Patch by Alex Christensen <achristensen@webkit.org> on 2020-12-03 Reviewed by Geoffrey Garen. Source/WebCore: This decreases maximum memory use by about 50% because the NFA and DFA never need to be in memory at the same time. I'll have to do some tuning and on-device measurement, but this may allow us to increase maxRuleCount. * Headers.cmake: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * contentextensions/CombinedURLFilters.cpp: (WebCore::ContentExtensions::CombinedURLFilters::processNFAs): * contentextensions/CombinedURLFilters.h: * contentextensions/ContentExtensionCompiler.cpp: (WebCore::ContentExtensions::compileToBytecode): (WebCore::ContentExtensions::compileRuleList): * contentextensions/ContentExtensionError.cpp: (WebCore::ContentExtensions::contentExtensionErrorCategory): * contentextensions/ContentExtensionError.h: * contentextensions/ContentExtensionsDebugging.h: * contentextensions/DFA.cpp: (WebCore::ContentExtensions::DFA::shrinkToFit): Deleted. * contentextensions/DFA.h: * contentextensions/ImmutableNFA.h: (WebCore::ContentExtensions::ImmutableNFA::clear): (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator* const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator-> const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator== const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator!= const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator++): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstTargets::begin const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstTargets::end const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator== const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator!= const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator++): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::first const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::last const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::data const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::range const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::begin const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::end const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::debugPrint const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::transitionsForNode const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::root const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::finalize): Deleted. * contentextensions/ImmutableNFANodeBuilder.h: * contentextensions/NFAToDFA.cpp: (WebCore::ContentExtensions::epsilonClosureExcludingSelf): (WebCore::ContentExtensions::resolveEpsilonClosures): (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetSource::NodeIdSetToUniqueNodeIdSetSource): (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetTranslator::translate): (WebCore::ContentExtensions::createCombinedTransition): (WebCore::ContentExtensions::getOrCreateDFANode): (WebCore::ContentExtensions::NFAToDFA::convert): * contentextensions/NFAToDFA.h: * contentextensions/SerializedNFA.cpp: Added. (WebCore::ContentExtensions::writeAllToFile): (WebCore::ContentExtensions::SerializedNFA::serialize): (WebCore::ContentExtensions::SerializedNFA::SerializedNFA): (WebCore::ContentExtensions::SerializedNFA::pointerAtOffsetInFile const): (WebCore::ContentExtensions::SerializedNFA::nodes const const): (WebCore::ContentExtensions::SerializedNFA::transitions const const): (WebCore::ContentExtensions::SerializedNFA::targets const const): (WebCore::ContentExtensions::SerializedNFA::epsilonTransitionsTargets const const): (WebCore::ContentExtensions::SerializedNFA::actions const const): * contentextensions/SerializedNFA.h: Copied from Source/WebCore/contentextensions/ImmutableNFA.h. (WebCore::ContentExtensions::SerializedNFA::Range::Range): (WebCore::ContentExtensions::SerializedNFA::Range::begin const): (WebCore::ContentExtensions::SerializedNFA::Range::end const): (WebCore::ContentExtensions::SerializedNFA::Range::size const): (WebCore::ContentExtensions::SerializedNFA::Range::operator[] const): (WebCore::ContentExtensions::SerializedNFA::root const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator* const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator-> const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator== const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator!= const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator++): (WebCore::ContentExtensions::SerializedNFA::IterableConstTargets::begin const): (WebCore::ContentExtensions::SerializedNFA::IterableConstTargets::end const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator== const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator!= const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator++): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::first const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::last const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::data const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::range const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::begin const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::end const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::debugPrint const): (WebCore::ContentExtensions::SerializedNFA::transitionsForNode const): Source/WebKit: * UIProcess/API/Cocoa/WKContentRuleListStore.mm: (-[WKContentRuleListStore _compileContentRuleListForIdentifier:encodedContentRuleList:completionHandler:]): * UIProcess/API/Cocoa/WKContentRuleListStorePrivate.h: Remove NS_RELEASES_ARGUMENT because it was incorrect and unnecessary because the WTF::String is copied to a background thread. Tools: Update syntax of existing tests, which cover behavior quite well. * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp: (TestWebKitAPI::createNFAs): (TestWebKitAPI::TEST_F): * TestWebKitAPI/Tests/WebCore/DFAHelpers.h: (TestWebKitAPI::createNFAs): (TestWebKitAPI::buildDFAFromPatterns): Canonical link: https://commits.webkit.org/232097@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@270414 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-12-04 00:01:23 +00:00
#if ENABLE(CONTENT_EXTENSIONS)
namespace WebCore {
namespace ContentExtensions {
template<typename T>
bool writeAllToFile(FileSystem::PlatformFileHandle file, const T& container)
{
Use `const uint8_t*` type more consistently to store bytes in WebKit https://bugs.webkit.org/show_bug.cgi?id=226688 Reviewed by Darin Adler. Source/WebCore: * Modules/cache/DOMCache.cpp: (WebCore::DOMCache::addAll): (WebCore::DOMCache::put): * Modules/fetch/FetchBodyConsumer.cpp: (WebCore::FetchBodyConsumer::resolve): (WebCore::FetchBodyConsumer::append): * Modules/fetch/FetchBodyConsumer.h: * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp: (WebCore::LibWebRTCDataChannelHandler::OnMessage): * Modules/websockets/WebSocketChannel.cpp: (WebCore::WebSocketChannel::send): (WebCore::WebSocketChannel::didReceiveSocketStreamData): (WebCore::WebSocketChannel::appendToBuffer): (WebCore::WebSocketChannel::startClosingHandshake): (WebCore::WebSocketChannel::processFrame): (WebCore::WebSocketChannel::enqueueRawFrame): (WebCore::WebSocketChannel::processOutgoingFrameQueue): (WebCore::WebSocketChannel::sendFrame): * Modules/websockets/WebSocketChannel.h: * Modules/websockets/WebSocketDeflater.cpp: (WebCore::setStreamParameter): (WebCore::WebSocketDeflater::addBytes): (WebCore::WebSocketInflater::addBytes): (WebCore::WebSocketInflater::finish): * Modules/websockets/WebSocketDeflater.h: (WebCore::WebSocketDeflater::data): (WebCore::WebSocketInflater::data): * Modules/websockets/WebSocketFrame.cpp: (WebCore::WebSocketFrame::parseFrame): (WebCore::appendFramePayload): (WebCore::WebSocketFrame::makeFrameData): (WebCore::WebSocketFrame::WebSocketFrame): * Modules/websockets/WebSocketFrame.h: * Modules/websockets/WebSocketHandshake.cpp: (WebCore::trimInputSample): (WebCore::WebSocketHandshake::readServerHandshake): (WebCore::WebSocketHandshake::readStatusLine): (WebCore::WebSocketHandshake::readHTTPHeaders): * Modules/websockets/WebSocketHandshake.h: * Modules/websockets/WorkerThreadableWebSocketChannel.cpp: (WebCore::WorkerThreadableWebSocketChannel::Bridge::send): * contentextensions/SerializedNFA.cpp: (WebCore::ContentExtensions::writeAllToFile): * crypto/SubtleCrypto.cpp: (WebCore::SubtleCrypto::unwrapKey): * crypto/mac/SerializedCryptoKeyWrapMac.mm: (WebCore::findMasterKey): * dom/DecodedDataDocumentParser.cpp: (WebCore::DecodedDataDocumentParser::appendBytes): * dom/DecodedDataDocumentParser.h: * dom/DocumentParser.h: * dom/RawDataDocumentParser.h: * html/ImageDocument.cpp: (WebCore::ImageDocumentParser::appendBytes): * html/MediaDocument.cpp: (WebCore::MediaDocumentParser::appendBytes): * html/PluginDocument.cpp: (WebCore::PluginDocumentParser::appendBytes): * html/track/InbandTextTrack.h: * html/track/InbandWebVTTTextTrack.cpp: (WebCore::InbandWebVTTTextTrack::parseWebVTTCueData): * html/track/InbandWebVTTTextTrack.h: * html/track/WebVTTParser.cpp: (WebCore::WebVTTParser::parseBytes): (WebCore::WebVTTParser::fileFinished): * html/track/WebVTTParser.h: * loader/DocumentWriter.cpp: (WebCore::DocumentWriter::addData): * loader/DocumentWriter.h: * loader/SinkDocument.cpp: * loader/TextTrackLoader.cpp: (WebCore::TextTrackLoader::processNewCueData): * platform/graphics/InbandTextTrackPrivateClient.h: * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp: (WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfSample): * platform/network/HTTPParsers.cpp: (WebCore::trimInputSample): (WebCore::isValidHeaderNameCharacter): (WebCore::parseHTTPHeader): (WebCore::parseHTTPRequestBody): * platform/network/HTTPParsers.h: * platform/network/SocketStreamHandle.cpp: (WebCore::SocketStreamHandle::sendData): * platform/network/SocketStreamHandle.h: * platform/network/SocketStreamHandleClient.h: * platform/network/cf/SocketStreamHandleImplCFNet.cpp: (WebCore::SocketStreamHandleImpl::readStreamCallback): * svg/graphics/SVGImage.cpp: (WebCore::SVGImage::dataChanged): Source/WebKit: * GPUProcess/media/RemoteTextTrackProxy.cpp: (WebKit::RemoteTextTrackProxy::parseWebVTTCueData): * GPUProcess/media/RemoteTextTrackProxy.h: * WebProcess/GPU/media/TextTrackPrivateRemote.cpp: (WebKit::TextTrackPrivateRemote::parseWebVTTCueData): Canonical link: https://commits.webkit.org/238530@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@278532 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-06-06 05:25:41 +00:00
auto bytes = reinterpret_cast<const uint8_t*>(container.data());
Serialize NFA to disk before converting it to a DFA when compiling a WKContentRuleList https://bugs.webkit.org/show_bug.cgi?id=219452 Patch by Alex Christensen <achristensen@webkit.org> on 2020-12-03 Reviewed by Geoffrey Garen. Source/WebCore: This decreases maximum memory use by about 50% because the NFA and DFA never need to be in memory at the same time. I'll have to do some tuning and on-device measurement, but this may allow us to increase maxRuleCount. * Headers.cmake: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * contentextensions/CombinedURLFilters.cpp: (WebCore::ContentExtensions::CombinedURLFilters::processNFAs): * contentextensions/CombinedURLFilters.h: * contentextensions/ContentExtensionCompiler.cpp: (WebCore::ContentExtensions::compileToBytecode): (WebCore::ContentExtensions::compileRuleList): * contentextensions/ContentExtensionError.cpp: (WebCore::ContentExtensions::contentExtensionErrorCategory): * contentextensions/ContentExtensionError.h: * contentextensions/ContentExtensionsDebugging.h: * contentextensions/DFA.cpp: (WebCore::ContentExtensions::DFA::shrinkToFit): Deleted. * contentextensions/DFA.h: * contentextensions/ImmutableNFA.h: (WebCore::ContentExtensions::ImmutableNFA::clear): (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator* const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator-> const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator== const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator!= const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator++): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstTargets::begin const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstTargets::end const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator== const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator!= const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator++): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::first const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::last const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::data const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::range const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::begin const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::end const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::debugPrint const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::transitionsForNode const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::root const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::finalize): Deleted. * contentextensions/ImmutableNFANodeBuilder.h: * contentextensions/NFAToDFA.cpp: (WebCore::ContentExtensions::epsilonClosureExcludingSelf): (WebCore::ContentExtensions::resolveEpsilonClosures): (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetSource::NodeIdSetToUniqueNodeIdSetSource): (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetTranslator::translate): (WebCore::ContentExtensions::createCombinedTransition): (WebCore::ContentExtensions::getOrCreateDFANode): (WebCore::ContentExtensions::NFAToDFA::convert): * contentextensions/NFAToDFA.h: * contentextensions/SerializedNFA.cpp: Added. (WebCore::ContentExtensions::writeAllToFile): (WebCore::ContentExtensions::SerializedNFA::serialize): (WebCore::ContentExtensions::SerializedNFA::SerializedNFA): (WebCore::ContentExtensions::SerializedNFA::pointerAtOffsetInFile const): (WebCore::ContentExtensions::SerializedNFA::nodes const const): (WebCore::ContentExtensions::SerializedNFA::transitions const const): (WebCore::ContentExtensions::SerializedNFA::targets const const): (WebCore::ContentExtensions::SerializedNFA::epsilonTransitionsTargets const const): (WebCore::ContentExtensions::SerializedNFA::actions const const): * contentextensions/SerializedNFA.h: Copied from Source/WebCore/contentextensions/ImmutableNFA.h. (WebCore::ContentExtensions::SerializedNFA::Range::Range): (WebCore::ContentExtensions::SerializedNFA::Range::begin const): (WebCore::ContentExtensions::SerializedNFA::Range::end const): (WebCore::ContentExtensions::SerializedNFA::Range::size const): (WebCore::ContentExtensions::SerializedNFA::Range::operator[] const): (WebCore::ContentExtensions::SerializedNFA::root const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator* const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator-> const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator== const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator!= const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator++): (WebCore::ContentExtensions::SerializedNFA::IterableConstTargets::begin const): (WebCore::ContentExtensions::SerializedNFA::IterableConstTargets::end const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator== const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator!= const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator++): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::first const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::last const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::data const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::range const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::begin const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::end const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::debugPrint const): (WebCore::ContentExtensions::SerializedNFA::transitionsForNode const): Source/WebKit: * UIProcess/API/Cocoa/WKContentRuleListStore.mm: (-[WKContentRuleListStore _compileContentRuleListForIdentifier:encodedContentRuleList:completionHandler:]): * UIProcess/API/Cocoa/WKContentRuleListStorePrivate.h: Remove NS_RELEASES_ARGUMENT because it was incorrect and unnecessary because the WTF::String is copied to a background thread. Tools: Update syntax of existing tests, which cover behavior quite well. * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp: (TestWebKitAPI::createNFAs): (TestWebKitAPI::TEST_F): * TestWebKitAPI/Tests/WebCore/DFAHelpers.h: (TestWebKitAPI::createNFAs): (TestWebKitAPI::buildDFAFromPatterns): Canonical link: https://commits.webkit.org/232097@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@270414 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-12-04 00:01:23 +00:00
size_t bytesLength = container.size() * sizeof(container[0]);
Use `const uint8_t*` type more consistently to store bytes in WebKit https://bugs.webkit.org/show_bug.cgi?id=226688 Reviewed by Darin Adler. Source/WebCore: * Modules/cache/DOMCache.cpp: (WebCore::DOMCache::addAll): (WebCore::DOMCache::put): * Modules/fetch/FetchBodyConsumer.cpp: (WebCore::FetchBodyConsumer::resolve): (WebCore::FetchBodyConsumer::append): * Modules/fetch/FetchBodyConsumer.h: * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp: (WebCore::LibWebRTCDataChannelHandler::OnMessage): * Modules/websockets/WebSocketChannel.cpp: (WebCore::WebSocketChannel::send): (WebCore::WebSocketChannel::didReceiveSocketStreamData): (WebCore::WebSocketChannel::appendToBuffer): (WebCore::WebSocketChannel::startClosingHandshake): (WebCore::WebSocketChannel::processFrame): (WebCore::WebSocketChannel::enqueueRawFrame): (WebCore::WebSocketChannel::processOutgoingFrameQueue): (WebCore::WebSocketChannel::sendFrame): * Modules/websockets/WebSocketChannel.h: * Modules/websockets/WebSocketDeflater.cpp: (WebCore::setStreamParameter): (WebCore::WebSocketDeflater::addBytes): (WebCore::WebSocketInflater::addBytes): (WebCore::WebSocketInflater::finish): * Modules/websockets/WebSocketDeflater.h: (WebCore::WebSocketDeflater::data): (WebCore::WebSocketInflater::data): * Modules/websockets/WebSocketFrame.cpp: (WebCore::WebSocketFrame::parseFrame): (WebCore::appendFramePayload): (WebCore::WebSocketFrame::makeFrameData): (WebCore::WebSocketFrame::WebSocketFrame): * Modules/websockets/WebSocketFrame.h: * Modules/websockets/WebSocketHandshake.cpp: (WebCore::trimInputSample): (WebCore::WebSocketHandshake::readServerHandshake): (WebCore::WebSocketHandshake::readStatusLine): (WebCore::WebSocketHandshake::readHTTPHeaders): * Modules/websockets/WebSocketHandshake.h: * Modules/websockets/WorkerThreadableWebSocketChannel.cpp: (WebCore::WorkerThreadableWebSocketChannel::Bridge::send): * contentextensions/SerializedNFA.cpp: (WebCore::ContentExtensions::writeAllToFile): * crypto/SubtleCrypto.cpp: (WebCore::SubtleCrypto::unwrapKey): * crypto/mac/SerializedCryptoKeyWrapMac.mm: (WebCore::findMasterKey): * dom/DecodedDataDocumentParser.cpp: (WebCore::DecodedDataDocumentParser::appendBytes): * dom/DecodedDataDocumentParser.h: * dom/DocumentParser.h: * dom/RawDataDocumentParser.h: * html/ImageDocument.cpp: (WebCore::ImageDocumentParser::appendBytes): * html/MediaDocument.cpp: (WebCore::MediaDocumentParser::appendBytes): * html/PluginDocument.cpp: (WebCore::PluginDocumentParser::appendBytes): * html/track/InbandTextTrack.h: * html/track/InbandWebVTTTextTrack.cpp: (WebCore::InbandWebVTTTextTrack::parseWebVTTCueData): * html/track/InbandWebVTTTextTrack.h: * html/track/WebVTTParser.cpp: (WebCore::WebVTTParser::parseBytes): (WebCore::WebVTTParser::fileFinished): * html/track/WebVTTParser.h: * loader/DocumentWriter.cpp: (WebCore::DocumentWriter::addData): * loader/DocumentWriter.h: * loader/SinkDocument.cpp: * loader/TextTrackLoader.cpp: (WebCore::TextTrackLoader::processNewCueData): * platform/graphics/InbandTextTrackPrivateClient.h: * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp: (WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfSample): * platform/network/HTTPParsers.cpp: (WebCore::trimInputSample): (WebCore::isValidHeaderNameCharacter): (WebCore::parseHTTPHeader): (WebCore::parseHTTPRequestBody): * platform/network/HTTPParsers.h: * platform/network/SocketStreamHandle.cpp: (WebCore::SocketStreamHandle::sendData): * platform/network/SocketStreamHandle.h: * platform/network/SocketStreamHandleClient.h: * platform/network/cf/SocketStreamHandleImplCFNet.cpp: (WebCore::SocketStreamHandleImpl::readStreamCallback): * svg/graphics/SVGImage.cpp: (WebCore::SVGImage::dataChanged): Source/WebKit: * GPUProcess/media/RemoteTextTrackProxy.cpp: (WebKit::RemoteTextTrackProxy::parseWebVTTCueData): * GPUProcess/media/RemoteTextTrackProxy.h: * WebProcess/GPU/media/TextTrackPrivateRemote.cpp: (WebKit::TextTrackPrivateRemote::parseWebVTTCueData): Canonical link: https://commits.webkit.org/238530@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@278532 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-06-06 05:25:41 +00:00
auto end = bytes + bytesLength;
Serialize NFA to disk before converting it to a DFA when compiling a WKContentRuleList https://bugs.webkit.org/show_bug.cgi?id=219452 Patch by Alex Christensen <achristensen@webkit.org> on 2020-12-03 Reviewed by Geoffrey Garen. Source/WebCore: This decreases maximum memory use by about 50% because the NFA and DFA never need to be in memory at the same time. I'll have to do some tuning and on-device measurement, but this may allow us to increase maxRuleCount. * Headers.cmake: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * contentextensions/CombinedURLFilters.cpp: (WebCore::ContentExtensions::CombinedURLFilters::processNFAs): * contentextensions/CombinedURLFilters.h: * contentextensions/ContentExtensionCompiler.cpp: (WebCore::ContentExtensions::compileToBytecode): (WebCore::ContentExtensions::compileRuleList): * contentextensions/ContentExtensionError.cpp: (WebCore::ContentExtensions::contentExtensionErrorCategory): * contentextensions/ContentExtensionError.h: * contentextensions/ContentExtensionsDebugging.h: * contentextensions/DFA.cpp: (WebCore::ContentExtensions::DFA::shrinkToFit): Deleted. * contentextensions/DFA.h: * contentextensions/ImmutableNFA.h: (WebCore::ContentExtensions::ImmutableNFA::clear): (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator* const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator-> const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator== const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator!= const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator++): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstTargets::begin const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstTargets::end const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator== const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator!= const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator++): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::first const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::last const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::data const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::range const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::begin const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::end const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::debugPrint const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::transitionsForNode const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::root const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::finalize): Deleted. * contentextensions/ImmutableNFANodeBuilder.h: * contentextensions/NFAToDFA.cpp: (WebCore::ContentExtensions::epsilonClosureExcludingSelf): (WebCore::ContentExtensions::resolveEpsilonClosures): (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetSource::NodeIdSetToUniqueNodeIdSetSource): (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetTranslator::translate): (WebCore::ContentExtensions::createCombinedTransition): (WebCore::ContentExtensions::getOrCreateDFANode): (WebCore::ContentExtensions::NFAToDFA::convert): * contentextensions/NFAToDFA.h: * contentextensions/SerializedNFA.cpp: Added. (WebCore::ContentExtensions::writeAllToFile): (WebCore::ContentExtensions::SerializedNFA::serialize): (WebCore::ContentExtensions::SerializedNFA::SerializedNFA): (WebCore::ContentExtensions::SerializedNFA::pointerAtOffsetInFile const): (WebCore::ContentExtensions::SerializedNFA::nodes const const): (WebCore::ContentExtensions::SerializedNFA::transitions const const): (WebCore::ContentExtensions::SerializedNFA::targets const const): (WebCore::ContentExtensions::SerializedNFA::epsilonTransitionsTargets const const): (WebCore::ContentExtensions::SerializedNFA::actions const const): * contentextensions/SerializedNFA.h: Copied from Source/WebCore/contentextensions/ImmutableNFA.h. (WebCore::ContentExtensions::SerializedNFA::Range::Range): (WebCore::ContentExtensions::SerializedNFA::Range::begin const): (WebCore::ContentExtensions::SerializedNFA::Range::end const): (WebCore::ContentExtensions::SerializedNFA::Range::size const): (WebCore::ContentExtensions::SerializedNFA::Range::operator[] const): (WebCore::ContentExtensions::SerializedNFA::root const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator* const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator-> const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator== const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator!= const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator++): (WebCore::ContentExtensions::SerializedNFA::IterableConstTargets::begin const): (WebCore::ContentExtensions::SerializedNFA::IterableConstTargets::end const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator== const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator!= const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator++): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::first const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::last const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::data const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::range const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::begin const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::end const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::debugPrint const): (WebCore::ContentExtensions::SerializedNFA::transitionsForNode const): Source/WebKit: * UIProcess/API/Cocoa/WKContentRuleListStore.mm: (-[WKContentRuleListStore _compileContentRuleListForIdentifier:encodedContentRuleList:completionHandler:]): * UIProcess/API/Cocoa/WKContentRuleListStorePrivate.h: Remove NS_RELEASES_ARGUMENT because it was incorrect and unnecessary because the WTF::String is copied to a background thread. Tools: Update syntax of existing tests, which cover behavior quite well. * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp: (TestWebKitAPI::createNFAs): (TestWebKitAPI::TEST_F): * TestWebKitAPI/Tests/WebCore/DFAHelpers.h: (TestWebKitAPI::createNFAs): (TestWebKitAPI::buildDFAFromPatterns): Canonical link: https://commits.webkit.org/232097@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@270414 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-12-04 00:01:23 +00:00
while (bytes < end) {
auto written = FileSystem::writeToFile(file, bytes, bytesLength);
if (written == -1)
return false;
bytes += written;
bytesLength -= written;
}
return true;
}
Remove WTF::Optional synonym for std::optional, using that class template directly instead https://bugs.webkit.org/show_bug.cgi?id=226433 Reviewed by Chris Dumez. Source/JavaScriptCore: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. * inspector/scripts/codegen/generate_objc_protocol_types_implementation.py: (ObjCProtocolTypesImplementationGenerator._generate_init_method_for_payload): Use auto instead of Optional<>. Also use * instead of value() and nest the definition of the local inside an if statement in the case where it's an optional. * inspector/scripts/tests/expected/*: Regenerated these results. Source/WebCore: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. Source/WebCore/PAL: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. Source/WebDriver: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. Source/WebKit: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. * Scripts/webkit/tests: Regenerated expected results, by running the command "python Scripts/webkit/messages_unittest.py -r". (How am I supposed to know to do that?) Source/WebKitLegacy/ios: * WebCoreSupport/WebChromeClientIOS.h: Let the do-webcore-rename script rename Optional<> to std::optional<>. Source/WebKitLegacy/mac: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. Source/WebKitLegacy/win: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. Source/WTF: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. * wtf/Optional.h: Remove WTF::Optional. Tools: * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>. Canonical link: https://commits.webkit.org/238290@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@278253 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-05-30 16:11:40 +00:00
std::optional<SerializedNFA> SerializedNFA::serialize(NFA&& nfa)
Serialize NFA to disk before converting it to a DFA when compiling a WKContentRuleList https://bugs.webkit.org/show_bug.cgi?id=219452 Patch by Alex Christensen <achristensen@webkit.org> on 2020-12-03 Reviewed by Geoffrey Garen. Source/WebCore: This decreases maximum memory use by about 50% because the NFA and DFA never need to be in memory at the same time. I'll have to do some tuning and on-device measurement, but this may allow us to increase maxRuleCount. * Headers.cmake: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * contentextensions/CombinedURLFilters.cpp: (WebCore::ContentExtensions::CombinedURLFilters::processNFAs): * contentextensions/CombinedURLFilters.h: * contentextensions/ContentExtensionCompiler.cpp: (WebCore::ContentExtensions::compileToBytecode): (WebCore::ContentExtensions::compileRuleList): * contentextensions/ContentExtensionError.cpp: (WebCore::ContentExtensions::contentExtensionErrorCategory): * contentextensions/ContentExtensionError.h: * contentextensions/ContentExtensionsDebugging.h: * contentextensions/DFA.cpp: (WebCore::ContentExtensions::DFA::shrinkToFit): Deleted. * contentextensions/DFA.h: * contentextensions/ImmutableNFA.h: (WebCore::ContentExtensions::ImmutableNFA::clear): (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator* const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator-> const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator== const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator!= const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator++): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstTargets::begin const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstTargets::end const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator== const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator!= const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator++): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::first const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::last const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::data const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::range const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::begin const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::end const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::debugPrint const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::transitionsForNode const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::root const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::finalize): Deleted. * contentextensions/ImmutableNFANodeBuilder.h: * contentextensions/NFAToDFA.cpp: (WebCore::ContentExtensions::epsilonClosureExcludingSelf): (WebCore::ContentExtensions::resolveEpsilonClosures): (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetSource::NodeIdSetToUniqueNodeIdSetSource): (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetTranslator::translate): (WebCore::ContentExtensions::createCombinedTransition): (WebCore::ContentExtensions::getOrCreateDFANode): (WebCore::ContentExtensions::NFAToDFA::convert): * contentextensions/NFAToDFA.h: * contentextensions/SerializedNFA.cpp: Added. (WebCore::ContentExtensions::writeAllToFile): (WebCore::ContentExtensions::SerializedNFA::serialize): (WebCore::ContentExtensions::SerializedNFA::SerializedNFA): (WebCore::ContentExtensions::SerializedNFA::pointerAtOffsetInFile const): (WebCore::ContentExtensions::SerializedNFA::nodes const const): (WebCore::ContentExtensions::SerializedNFA::transitions const const): (WebCore::ContentExtensions::SerializedNFA::targets const const): (WebCore::ContentExtensions::SerializedNFA::epsilonTransitionsTargets const const): (WebCore::ContentExtensions::SerializedNFA::actions const const): * contentextensions/SerializedNFA.h: Copied from Source/WebCore/contentextensions/ImmutableNFA.h. (WebCore::ContentExtensions::SerializedNFA::Range::Range): (WebCore::ContentExtensions::SerializedNFA::Range::begin const): (WebCore::ContentExtensions::SerializedNFA::Range::end const): (WebCore::ContentExtensions::SerializedNFA::Range::size const): (WebCore::ContentExtensions::SerializedNFA::Range::operator[] const): (WebCore::ContentExtensions::SerializedNFA::root const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator* const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator-> const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator== const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator!= const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator++): (WebCore::ContentExtensions::SerializedNFA::IterableConstTargets::begin const): (WebCore::ContentExtensions::SerializedNFA::IterableConstTargets::end const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator== const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator!= const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator++): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::first const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::last const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::data const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::range const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::begin const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::end const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::debugPrint const): (WebCore::ContentExtensions::SerializedNFA::transitionsForNode const): Source/WebKit: * UIProcess/API/Cocoa/WKContentRuleListStore.mm: (-[WKContentRuleListStore _compileContentRuleListForIdentifier:encodedContentRuleList:completionHandler:]): * UIProcess/API/Cocoa/WKContentRuleListStorePrivate.h: Remove NS_RELEASES_ARGUMENT because it was incorrect and unnecessary because the WTF::String is copied to a background thread. Tools: Update syntax of existing tests, which cover behavior quite well. * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp: (TestWebKitAPI::createNFAs): (TestWebKitAPI::TEST_F): * TestWebKitAPI/Tests/WebCore/DFAHelpers.h: (TestWebKitAPI::createNFAs): (TestWebKitAPI::buildDFAFromPatterns): Canonical link: https://commits.webkit.org/232097@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@270414 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-12-04 00:01:23 +00:00
{
auto file = FileSystem::invalidPlatformFileHandle;
auto filename = FileSystem::openTemporaryFile("SerializedNFA", file);
if (!FileSystem::isHandleValid(file))
Next step toward using std::optional directly instead of through WTF::Optional typedef https://bugs.webkit.org/show_bug.cgi?id=226280 Reviewed by Chris Dumez. Source/JavaScriptCore: * <many files>: Accept the renaming done by do-webcore-rename. * yarr/YarrSyntaxChecker.cpp: Since the style checker complained about this file, tweaked style to make it happy after the renaming done by do-webcore-rename, and also hand-updated Optional to std::optional as long as we were touching it. Source/WebCore: * <many files>: Accept the renaming done by do-webcore-rename. * Modules/webauthn/fido/DeviceRequestConverter.h: Since style checker complained about the names of some arguments, fixed them, and also hand-updated Optional to std::optional as long as we were touching it. * loader/EmptyClients.cpp: Since style checker complained about the mix of WEBCORE_EXPORT and inlined functions, moved them out of line, and also hand-updated Optional to std::optional as long as we were touching it. Also removed is<EmptyFrameLoaderClient>(). * loader/EmptyFrameLoaderClient.h: Ditto. Source/WebCore/PAL: * <many files>: Accept the renaming done by do-webcore-rename. Source/WebDriver: * <many files>: Accept the renaming done by do-webcore-rename. Source/WebKit: * <many files>: Accept the renaming done by do-webcore-rename. Source/WebKitLegacy: * Storage/StorageTracker.cpp: (WebKit::StorageTracker::diskUsageForOrigin): Accept the renaming done by do-webcore-rename. Source/WebKitLegacy/mac: * <many files>: Accept the renaming done by do-webcore-rename. Source/WebKitLegacy/win: * <many files>: Accept the renaming done by do-webcore-rename. Source/WTF: * <many files>: Accept the renaming done by do-webcore-rename. * wtf/Optional.h: Remove WTF::nullopt_t and WTF::makeOptional. * wtf/URLHelpers.cpp: (WTF::URLHelpers::mapHostName): Convert from nullopt to std::nullopt. Tools: * Scripts/do-webcore-rename: Use script to rename valueOr, WTF::nullopt, WTF::nullopt_t, WTF::Optional, WTF::makeOptional, and makeOptional. Other renamings can't necessarily be done by the script and so will be done in later passes. * <many files>: Accept the renaming done by do-webcore-rename. Canonical link: https://commits.webkit.org/238228@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@278185 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-05-28 01:26:23 +00:00
return std::nullopt;
Serialize NFA to disk before converting it to a DFA when compiling a WKContentRuleList https://bugs.webkit.org/show_bug.cgi?id=219452 Patch by Alex Christensen <achristensen@webkit.org> on 2020-12-03 Reviewed by Geoffrey Garen. Source/WebCore: This decreases maximum memory use by about 50% because the NFA and DFA never need to be in memory at the same time. I'll have to do some tuning and on-device measurement, but this may allow us to increase maxRuleCount. * Headers.cmake: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * contentextensions/CombinedURLFilters.cpp: (WebCore::ContentExtensions::CombinedURLFilters::processNFAs): * contentextensions/CombinedURLFilters.h: * contentextensions/ContentExtensionCompiler.cpp: (WebCore::ContentExtensions::compileToBytecode): (WebCore::ContentExtensions::compileRuleList): * contentextensions/ContentExtensionError.cpp: (WebCore::ContentExtensions::contentExtensionErrorCategory): * contentextensions/ContentExtensionError.h: * contentextensions/ContentExtensionsDebugging.h: * contentextensions/DFA.cpp: (WebCore::ContentExtensions::DFA::shrinkToFit): Deleted. * contentextensions/DFA.h: * contentextensions/ImmutableNFA.h: (WebCore::ContentExtensions::ImmutableNFA::clear): (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator* const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator-> const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator== const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator!= const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator++): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstTargets::begin const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstTargets::end const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator== const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator!= const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator++): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::first const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::last const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::data const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::range const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::begin const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::end const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::debugPrint const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::transitionsForNode const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::root const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::finalize): Deleted. * contentextensions/ImmutableNFANodeBuilder.h: * contentextensions/NFAToDFA.cpp: (WebCore::ContentExtensions::epsilonClosureExcludingSelf): (WebCore::ContentExtensions::resolveEpsilonClosures): (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetSource::NodeIdSetToUniqueNodeIdSetSource): (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetTranslator::translate): (WebCore::ContentExtensions::createCombinedTransition): (WebCore::ContentExtensions::getOrCreateDFANode): (WebCore::ContentExtensions::NFAToDFA::convert): * contentextensions/NFAToDFA.h: * contentextensions/SerializedNFA.cpp: Added. (WebCore::ContentExtensions::writeAllToFile): (WebCore::ContentExtensions::SerializedNFA::serialize): (WebCore::ContentExtensions::SerializedNFA::SerializedNFA): (WebCore::ContentExtensions::SerializedNFA::pointerAtOffsetInFile const): (WebCore::ContentExtensions::SerializedNFA::nodes const const): (WebCore::ContentExtensions::SerializedNFA::transitions const const): (WebCore::ContentExtensions::SerializedNFA::targets const const): (WebCore::ContentExtensions::SerializedNFA::epsilonTransitionsTargets const const): (WebCore::ContentExtensions::SerializedNFA::actions const const): * contentextensions/SerializedNFA.h: Copied from Source/WebCore/contentextensions/ImmutableNFA.h. (WebCore::ContentExtensions::SerializedNFA::Range::Range): (WebCore::ContentExtensions::SerializedNFA::Range::begin const): (WebCore::ContentExtensions::SerializedNFA::Range::end const): (WebCore::ContentExtensions::SerializedNFA::Range::size const): (WebCore::ContentExtensions::SerializedNFA::Range::operator[] const): (WebCore::ContentExtensions::SerializedNFA::root const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator* const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator-> const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator== const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator!= const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator++): (WebCore::ContentExtensions::SerializedNFA::IterableConstTargets::begin const): (WebCore::ContentExtensions::SerializedNFA::IterableConstTargets::end const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator== const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator!= const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator++): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::first const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::last const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::data const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::range const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::begin const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::end const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::debugPrint const): (WebCore::ContentExtensions::SerializedNFA::transitionsForNode const): Source/WebKit: * UIProcess/API/Cocoa/WKContentRuleListStore.mm: (-[WKContentRuleListStore _compileContentRuleListForIdentifier:encodedContentRuleList:completionHandler:]): * UIProcess/API/Cocoa/WKContentRuleListStorePrivate.h: Remove NS_RELEASES_ARGUMENT because it was incorrect and unnecessary because the WTF::String is copied to a background thread. Tools: Update syntax of existing tests, which cover behavior quite well. * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp: (TestWebKitAPI::createNFAs): (TestWebKitAPI::TEST_F): * TestWebKitAPI/Tests/WebCore/DFAHelpers.h: (TestWebKitAPI::createNFAs): (TestWebKitAPI::buildDFAFromPatterns): Canonical link: https://commits.webkit.org/232097@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@270414 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-12-04 00:01:23 +00:00
bool wroteSuccessfully = writeAllToFile(file, nfa.nodes)
&& writeAllToFile(file, nfa.transitions)
&& writeAllToFile(file, nfa.targets)
&& writeAllToFile(file, nfa.epsilonTransitionsTargets)
&& writeAllToFile(file, nfa.actions);
if (!wroteSuccessfully) {
FileSystem::closeFile(file);
FileSystem::deleteFile(filename);
Next step toward using std::optional directly instead of through WTF::Optional typedef https://bugs.webkit.org/show_bug.cgi?id=226280 Reviewed by Chris Dumez. Source/JavaScriptCore: * <many files>: Accept the renaming done by do-webcore-rename. * yarr/YarrSyntaxChecker.cpp: Since the style checker complained about this file, tweaked style to make it happy after the renaming done by do-webcore-rename, and also hand-updated Optional to std::optional as long as we were touching it. Source/WebCore: * <many files>: Accept the renaming done by do-webcore-rename. * Modules/webauthn/fido/DeviceRequestConverter.h: Since style checker complained about the names of some arguments, fixed them, and also hand-updated Optional to std::optional as long as we were touching it. * loader/EmptyClients.cpp: Since style checker complained about the mix of WEBCORE_EXPORT and inlined functions, moved them out of line, and also hand-updated Optional to std::optional as long as we were touching it. Also removed is<EmptyFrameLoaderClient>(). * loader/EmptyFrameLoaderClient.h: Ditto. Source/WebCore/PAL: * <many files>: Accept the renaming done by do-webcore-rename. Source/WebDriver: * <many files>: Accept the renaming done by do-webcore-rename. Source/WebKit: * <many files>: Accept the renaming done by do-webcore-rename. Source/WebKitLegacy: * Storage/StorageTracker.cpp: (WebKit::StorageTracker::diskUsageForOrigin): Accept the renaming done by do-webcore-rename. Source/WebKitLegacy/mac: * <many files>: Accept the renaming done by do-webcore-rename. Source/WebKitLegacy/win: * <many files>: Accept the renaming done by do-webcore-rename. Source/WTF: * <many files>: Accept the renaming done by do-webcore-rename. * wtf/Optional.h: Remove WTF::nullopt_t and WTF::makeOptional. * wtf/URLHelpers.cpp: (WTF::URLHelpers::mapHostName): Convert from nullopt to std::nullopt. Tools: * Scripts/do-webcore-rename: Use script to rename valueOr, WTF::nullopt, WTF::nullopt_t, WTF::Optional, WTF::makeOptional, and makeOptional. Other renamings can't necessarily be done by the script and so will be done in later passes. * <many files>: Accept the renaming done by do-webcore-rename. Canonical link: https://commits.webkit.org/238228@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@278185 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-05-28 01:26:23 +00:00
return std::nullopt;
Serialize NFA to disk before converting it to a DFA when compiling a WKContentRuleList https://bugs.webkit.org/show_bug.cgi?id=219452 Patch by Alex Christensen <achristensen@webkit.org> on 2020-12-03 Reviewed by Geoffrey Garen. Source/WebCore: This decreases maximum memory use by about 50% because the NFA and DFA never need to be in memory at the same time. I'll have to do some tuning and on-device measurement, but this may allow us to increase maxRuleCount. * Headers.cmake: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * contentextensions/CombinedURLFilters.cpp: (WebCore::ContentExtensions::CombinedURLFilters::processNFAs): * contentextensions/CombinedURLFilters.h: * contentextensions/ContentExtensionCompiler.cpp: (WebCore::ContentExtensions::compileToBytecode): (WebCore::ContentExtensions::compileRuleList): * contentextensions/ContentExtensionError.cpp: (WebCore::ContentExtensions::contentExtensionErrorCategory): * contentextensions/ContentExtensionError.h: * contentextensions/ContentExtensionsDebugging.h: * contentextensions/DFA.cpp: (WebCore::ContentExtensions::DFA::shrinkToFit): Deleted. * contentextensions/DFA.h: * contentextensions/ImmutableNFA.h: (WebCore::ContentExtensions::ImmutableNFA::clear): (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator* const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator-> const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator== const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator!= const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator++): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstTargets::begin const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstTargets::end const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator== const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator!= const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator++): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::first const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::last const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::data const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::range const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::begin const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::end const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::debugPrint const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::transitionsForNode const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::root const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::finalize): Deleted. * contentextensions/ImmutableNFANodeBuilder.h: * contentextensions/NFAToDFA.cpp: (WebCore::ContentExtensions::epsilonClosureExcludingSelf): (WebCore::ContentExtensions::resolveEpsilonClosures): (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetSource::NodeIdSetToUniqueNodeIdSetSource): (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetTranslator::translate): (WebCore::ContentExtensions::createCombinedTransition): (WebCore::ContentExtensions::getOrCreateDFANode): (WebCore::ContentExtensions::NFAToDFA::convert): * contentextensions/NFAToDFA.h: * contentextensions/SerializedNFA.cpp: Added. (WebCore::ContentExtensions::writeAllToFile): (WebCore::ContentExtensions::SerializedNFA::serialize): (WebCore::ContentExtensions::SerializedNFA::SerializedNFA): (WebCore::ContentExtensions::SerializedNFA::pointerAtOffsetInFile const): (WebCore::ContentExtensions::SerializedNFA::nodes const const): (WebCore::ContentExtensions::SerializedNFA::transitions const const): (WebCore::ContentExtensions::SerializedNFA::targets const const): (WebCore::ContentExtensions::SerializedNFA::epsilonTransitionsTargets const const): (WebCore::ContentExtensions::SerializedNFA::actions const const): * contentextensions/SerializedNFA.h: Copied from Source/WebCore/contentextensions/ImmutableNFA.h. (WebCore::ContentExtensions::SerializedNFA::Range::Range): (WebCore::ContentExtensions::SerializedNFA::Range::begin const): (WebCore::ContentExtensions::SerializedNFA::Range::end const): (WebCore::ContentExtensions::SerializedNFA::Range::size const): (WebCore::ContentExtensions::SerializedNFA::Range::operator[] const): (WebCore::ContentExtensions::SerializedNFA::root const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator* const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator-> const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator== const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator!= const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator++): (WebCore::ContentExtensions::SerializedNFA::IterableConstTargets::begin const): (WebCore::ContentExtensions::SerializedNFA::IterableConstTargets::end const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator== const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator!= const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator++): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::first const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::last const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::data const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::range const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::begin const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::end const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::debugPrint const): (WebCore::ContentExtensions::SerializedNFA::transitionsForNode const): Source/WebKit: * UIProcess/API/Cocoa/WKContentRuleListStore.mm: (-[WKContentRuleListStore _compileContentRuleListForIdentifier:encodedContentRuleList:completionHandler:]): * UIProcess/API/Cocoa/WKContentRuleListStorePrivate.h: Remove NS_RELEASES_ARGUMENT because it was incorrect and unnecessary because the WTF::String is copied to a background thread. Tools: Update syntax of existing tests, which cover behavior quite well. * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp: (TestWebKitAPI::createNFAs): (TestWebKitAPI::TEST_F): * TestWebKitAPI/Tests/WebCore/DFAHelpers.h: (TestWebKitAPI::createNFAs): (TestWebKitAPI::buildDFAFromPatterns): Canonical link: https://commits.webkit.org/232097@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@270414 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-12-04 00:01:23 +00:00
}
bool mappedSuccessfully = false;
FileSystem::MappedFileData mappedFile(file, FileSystem::MappedFileMode::Private, mappedSuccessfully);
FileSystem::closeFile(file);
FileSystem::deleteFile(filename);
if (!mappedSuccessfully)
Next step toward using std::optional directly instead of through WTF::Optional typedef https://bugs.webkit.org/show_bug.cgi?id=226280 Reviewed by Chris Dumez. Source/JavaScriptCore: * <many files>: Accept the renaming done by do-webcore-rename. * yarr/YarrSyntaxChecker.cpp: Since the style checker complained about this file, tweaked style to make it happy after the renaming done by do-webcore-rename, and also hand-updated Optional to std::optional as long as we were touching it. Source/WebCore: * <many files>: Accept the renaming done by do-webcore-rename. * Modules/webauthn/fido/DeviceRequestConverter.h: Since style checker complained about the names of some arguments, fixed them, and also hand-updated Optional to std::optional as long as we were touching it. * loader/EmptyClients.cpp: Since style checker complained about the mix of WEBCORE_EXPORT and inlined functions, moved them out of line, and also hand-updated Optional to std::optional as long as we were touching it. Also removed is<EmptyFrameLoaderClient>(). * loader/EmptyFrameLoaderClient.h: Ditto. Source/WebCore/PAL: * <many files>: Accept the renaming done by do-webcore-rename. Source/WebDriver: * <many files>: Accept the renaming done by do-webcore-rename. Source/WebKit: * <many files>: Accept the renaming done by do-webcore-rename. Source/WebKitLegacy: * Storage/StorageTracker.cpp: (WebKit::StorageTracker::diskUsageForOrigin): Accept the renaming done by do-webcore-rename. Source/WebKitLegacy/mac: * <many files>: Accept the renaming done by do-webcore-rename. Source/WebKitLegacy/win: * <many files>: Accept the renaming done by do-webcore-rename. Source/WTF: * <many files>: Accept the renaming done by do-webcore-rename. * wtf/Optional.h: Remove WTF::nullopt_t and WTF::makeOptional. * wtf/URLHelpers.cpp: (WTF::URLHelpers::mapHostName): Convert from nullopt to std::nullopt. Tools: * Scripts/do-webcore-rename: Use script to rename valueOr, WTF::nullopt, WTF::nullopt_t, WTF::Optional, WTF::makeOptional, and makeOptional. Other renamings can't necessarily be done by the script and so will be done in later passes. * <many files>: Accept the renaming done by do-webcore-rename. Canonical link: https://commits.webkit.org/238228@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@278185 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-05-28 01:26:23 +00:00
return std::nullopt;
Serialize NFA to disk before converting it to a DFA when compiling a WKContentRuleList https://bugs.webkit.org/show_bug.cgi?id=219452 Patch by Alex Christensen <achristensen@webkit.org> on 2020-12-03 Reviewed by Geoffrey Garen. Source/WebCore: This decreases maximum memory use by about 50% because the NFA and DFA never need to be in memory at the same time. I'll have to do some tuning and on-device measurement, but this may allow us to increase maxRuleCount. * Headers.cmake: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * contentextensions/CombinedURLFilters.cpp: (WebCore::ContentExtensions::CombinedURLFilters::processNFAs): * contentextensions/CombinedURLFilters.h: * contentextensions/ContentExtensionCompiler.cpp: (WebCore::ContentExtensions::compileToBytecode): (WebCore::ContentExtensions::compileRuleList): * contentextensions/ContentExtensionError.cpp: (WebCore::ContentExtensions::contentExtensionErrorCategory): * contentextensions/ContentExtensionError.h: * contentextensions/ContentExtensionsDebugging.h: * contentextensions/DFA.cpp: (WebCore::ContentExtensions::DFA::shrinkToFit): Deleted. * contentextensions/DFA.h: * contentextensions/ImmutableNFA.h: (WebCore::ContentExtensions::ImmutableNFA::clear): (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator* const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator-> const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator== const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator!= const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator++): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstTargets::begin const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstTargets::end const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator== const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator!= const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator++): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::first const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::last const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::data const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::range const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::begin const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::end const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::debugPrint const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::transitionsForNode const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::root const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::finalize): Deleted. * contentextensions/ImmutableNFANodeBuilder.h: * contentextensions/NFAToDFA.cpp: (WebCore::ContentExtensions::epsilonClosureExcludingSelf): (WebCore::ContentExtensions::resolveEpsilonClosures): (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetSource::NodeIdSetToUniqueNodeIdSetSource): (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetTranslator::translate): (WebCore::ContentExtensions::createCombinedTransition): (WebCore::ContentExtensions::getOrCreateDFANode): (WebCore::ContentExtensions::NFAToDFA::convert): * contentextensions/NFAToDFA.h: * contentextensions/SerializedNFA.cpp: Added. (WebCore::ContentExtensions::writeAllToFile): (WebCore::ContentExtensions::SerializedNFA::serialize): (WebCore::ContentExtensions::SerializedNFA::SerializedNFA): (WebCore::ContentExtensions::SerializedNFA::pointerAtOffsetInFile const): (WebCore::ContentExtensions::SerializedNFA::nodes const const): (WebCore::ContentExtensions::SerializedNFA::transitions const const): (WebCore::ContentExtensions::SerializedNFA::targets const const): (WebCore::ContentExtensions::SerializedNFA::epsilonTransitionsTargets const const): (WebCore::ContentExtensions::SerializedNFA::actions const const): * contentextensions/SerializedNFA.h: Copied from Source/WebCore/contentextensions/ImmutableNFA.h. (WebCore::ContentExtensions::SerializedNFA::Range::Range): (WebCore::ContentExtensions::SerializedNFA::Range::begin const): (WebCore::ContentExtensions::SerializedNFA::Range::end const): (WebCore::ContentExtensions::SerializedNFA::Range::size const): (WebCore::ContentExtensions::SerializedNFA::Range::operator[] const): (WebCore::ContentExtensions::SerializedNFA::root const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator* const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator-> const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator== const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator!= const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator++): (WebCore::ContentExtensions::SerializedNFA::IterableConstTargets::begin const): (WebCore::ContentExtensions::SerializedNFA::IterableConstTargets::end const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator== const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator!= const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator++): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::first const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::last const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::data const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::range const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::begin const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::end const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::debugPrint const): (WebCore::ContentExtensions::SerializedNFA::transitionsForNode const): Source/WebKit: * UIProcess/API/Cocoa/WKContentRuleListStore.mm: (-[WKContentRuleListStore _compileContentRuleListForIdentifier:encodedContentRuleList:completionHandler:]): * UIProcess/API/Cocoa/WKContentRuleListStorePrivate.h: Remove NS_RELEASES_ARGUMENT because it was incorrect and unnecessary because the WTF::String is copied to a background thread. Tools: Update syntax of existing tests, which cover behavior quite well. * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp: (TestWebKitAPI::createNFAs): (TestWebKitAPI::TEST_F): * TestWebKitAPI/Tests/WebCore/DFAHelpers.h: (TestWebKitAPI::createNFAs): (TestWebKitAPI::buildDFAFromPatterns): Canonical link: https://commits.webkit.org/232097@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@270414 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-12-04 00:01:23 +00:00
Metadata metadata {
nfa.nodes.size(),
nfa.transitions.size(),
nfa.targets.size(),
nfa.epsilonTransitionsTargets.size(),
nfa.actions.size(),
0,
nfa.nodes.size() * sizeof(nfa.nodes[0]),
nfa.nodes.size() * sizeof(nfa.nodes[0])
+ nfa.transitions.size() * sizeof(nfa.transitions[0]),
nfa.nodes.size() * sizeof(nfa.nodes[0])
+ nfa.transitions.size() * sizeof(nfa.transitions[0])
+ nfa.targets.size() * sizeof(nfa.targets[0]),
nfa.nodes.size() * sizeof(nfa.nodes[0])
+ nfa.transitions.size() * sizeof(nfa.transitions[0])
+ nfa.targets.size() * sizeof(nfa.targets[0])
+ nfa.epsilonTransitionsTargets.size() * sizeof(nfa.epsilonTransitionsTargets[0])
};
nfa.clear();
return {{ WTFMove(mappedFile), WTFMove(metadata) }};
}
SerializedNFA::SerializedNFA(FileSystem::MappedFileData&& file, Metadata&& metadata)
: m_file(WTFMove(file))
, m_metadata(WTFMove(metadata))
{
}
template<typename T>
const T* SerializedNFA::pointerAtOffsetInFile(size_t offset) const
{
Reduce use of reinterpret_cast<> in the codebase https://bugs.webkit.org/show_bug.cgi?id=226743 Reviewed by Darin Adler. Source/WebCore: * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp: (WebCore::CDMSessionClearKey::generateKeyRequest): * Modules/fetch/FetchBody.cpp: (WebCore::FetchBody::take): * Modules/fetch/FetchBodyConsumer.cpp: (WebCore::FetchBodyConsumer::resolve): (WebCore::FetchBodyConsumer::takeAsBlob): (WebCore::FetchBodyConsumer::takeAsText): * Modules/mediastream/RTCDataChannelRemoteHandler.cpp: (WebCore::RTCDataChannelRemoteHandler::readyToSend): (WebCore::RTCDataChannelRemoteHandler::sendStringData): (WebCore::RTCDataChannelRemoteHandler::sendRawData): * Modules/webaudio/MediaStreamAudioSourceGStreamer.cpp: (WebCore::copyBusData): * Modules/webauthn/AuthenticatorResponseData.h: (WebCore::encodeArrayBuffer): (WebCore::decodeArrayBuffer): * Modules/websockets/WebSocketChannel.cpp: (WebCore::WebSocketChannel::startClosingHandshake): (WebCore::WebSocketChannel::processOutgoingFrameQueue): * Modules/websockets/WebSocketHandshake.cpp: (WebCore::WebSocketHandshake::getExpectedWebSocketAccept): (WebCore::headerHasValidHTTPVersion): * bindings/js/ScriptBufferSourceProvider.h: * bindings/js/SerializedScriptValue.cpp: (WebCore::CloneDeserializer::readString): * contentextensions/SerializedNFA.cpp: (WebCore::ContentExtensions::SerializedNFA::pointerAtOffsetInFile const): * dom/Node.cpp: (WebCore::hashPointer): * dom/TextEncoder.cpp: (WebCore::TextEncoder::encode const): * dom/TextEncoderStreamEncoder.cpp: (WebCore::TextEncoderStreamEncoder::flush): * editing/cocoa/WebContentReaderCocoa.mm: (WebCore::sanitizeMarkupWithArchive): * html/canvas/WebGLRenderingContextBase.cpp: (WebCore::WebGLRenderingContextBase::texImageArrayBufferViewHelper): * inspector/DOMPatchSupport.cpp: (WebCore::addStringToSHA1): * loader/TextResourceDecoder.cpp: (WebCore::TextResourceDecoder::textFromUTF8): * loader/cache/CachedScript.cpp: (WebCore::CachedScript::script): * page/cocoa/ResourceUsageOverlayCocoa.mm: (WebCore::showText): * platform/SharedBufferChunkReader.cpp: (WebCore::SharedBufferChunkReader::nextChunk): * platform/cf/SharedBufferCF.cpp: (WebCore::SharedBuffer::createCFData const): * platform/generic/KeyedEncoderGeneric.cpp: (WebCore::KeyedEncoderGeneric::encodeString): * platform/graphics/GraphicsContextGL.cpp: (WebCore::GraphicsContextGL::packImageData): * platform/graphics/ImageBufferBackend.cpp: (WebCore::ImageBufferBackend::getPixelBuffer const): (WebCore::ImageBufferBackend::putPixelBuffer): * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp: (WebCore::InbandTextTrackPrivateAVF::processNativeSamples): * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.cpp: (WebCore::CDMSessionAVFoundationCF::generateKeyRequest): (WebCore::CDMSessionAVFoundationCF::update): * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.cpp: (WebCore::InbandTextTrackPrivateAVCF::readNativeSampleBuffer): * platform/graphics/displaylists/DisplayListItemBuffer.cpp: (WebCore::DisplayList::ItemBuffer::createItemBuffer): * platform/graphics/displaylists/DisplayListIterator.cpp: (WebCore::DisplayList::DisplayList::Iterator::updateCurrentItem): * platform/image-decoders/gif/GIFImageReader.h: (GIFImageReader::data const): * platform/mac/SSLKeyGeneratorMac.mm: (WebCore::signedPublicKeyAndChallengeString): * platform/mediastream/RealtimeMediaSourceCenter.cpp: (WebCore::addStringToSHA1): * platform/network/FormDataBuilder.cpp: (WebCore::FormDataBuilder::encodeStringAsFormData): * platform/network/SocketStreamHandle.cpp: (WebCore::SocketStreamHandle::sendHandshake): * platform/network/cf/ResourceRequestCFNet.cpp: (WebCore::ResourceRequest::doUpdatePlatformRequest): * platform/network/cf/ResourceRequestCFNet.h: (WebCore::httpHeaderValueUsingSuitableEncoding): * platform/network/cf/SocketStreamHandleImplCFNet.cpp: (WebCore::SocketStreamHandleImpl::platformSendInternal): * platform/network/curl/CurlCacheEntry.cpp: (WebCore::CurlCacheEntry::generateBaseFilename): * platform/sql/SQLiteStatement.cpp: (WebCore::SQLiteStatement::columnBlobView): * testing/MockCDMFactory.cpp: (WebCore::MockCDM::sanitizeResponse const): Source/WebDriver: * socket/HTTPParser.cpp: (WebDriver::HTTPParser::readLine): * socket/SessionHostSocket.cpp: (WebDriver::SessionHost::sendWebInspectorEvent): Source/WebKit: * GPUProcess/media/RemoteMediaPlayerProxy.cpp: (WebKit::RemoteMediaPlayerProxy::mediaPlayerInitializationDataEncountered): * GPUProcess/media/RemoteTextTrackProxy.cpp: (WebKit::RemoteTextTrackProxy::addDataCue): * GPUProcess/webrtc/RemoteMediaRecorder.cpp: (WebKit::RemoteMediaRecorder::fetchData): * NetworkProcess/cache/NetworkCacheDataCurl.cpp: (WebKit::NetworkCache::Data::apply const): * NetworkProcess/cache/NetworkCacheKey.cpp: (WebKit::NetworkCache::hashString): * NetworkProcess/soup/WebKitDirectoryInputStream.cpp: (webkitDirectoryInputStreamRead): * Platform/IPC/ArgumentCoders.cpp: (IPC::ArgumentCoder<CString>::encode): (IPC::ArgumentCoder<String>::encode): * Shared/API/c/cf/WKStringCF.mm: (WKStringCopyCFString): * Shared/API/c/cf/WKURLCF.mm: (WKURLCopyCFURL): * Shared/ShareableResource.cpp: (WebKit::ShareableResource::wrapInSharedBuffer): * Shared/SharedDisplayListHandle.h: (WebKit::SharedDisplayListHandle::data const): * Shared/WebCompiledContentRuleList.cpp: (WebKit::WebCompiledContentRuleList::conditionsApplyOnlyToDomain const): * UIProcess/API/APIWebAuthenticationAssertionResponse.cpp: (API::WebAuthenticationAssertionResponse::userHandle const): * UIProcess/API/C/WKPage.cpp: (dataFrom): * UIProcess/Cocoa/SOAuthorization/RedirectSOAuthorizationSession.mm: (WebKit::RedirectSOAuthorizationSession::completeInternal): * UIProcess/Inspector/socket/RemoteInspectorClient.cpp: (WebKit::RemoteInspectorClient::sendWebInspectorEvent): * WebProcess/Network/WebSocketChannel.cpp: (WebKit::WebSocketChannel::createMessageQueue): (WebKit::WebSocketChannel::didReceiveText): * WebProcess/Network/webrtc/RTCDataChannelRemoteManager.cpp: (WebKit::RTCDataChannelRemoteManager::sendData): (WebKit::RTCDataChannelRemoteManager::RemoteSourceConnection::didReceiveStringData): * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp: (WebKit::NetscapePluginStream::sendJavaScriptStream): Source/WTF: * wtf/CryptographicallyRandomNumber.cpp: * wtf/FastMalloc.h: (WTF::FastAllocator::allocate): * wtf/SHA1.h: (WTF::SHA1::addBytes): * wtf/StackCheck.h: (WTF::StackCheck::Scope::Scope): (WTF::StackCheck::StackCheck): * wtf/URLHelpers.cpp: (WTF::URLHelpers::userVisibleURL): * wtf/URLParser.cpp: (WTF::URLParser::formURLDecode): * wtf/cf/URLCF.cpp: (WTF::URL::createCFURL const): * wtf/cocoa/URLCocoa.mm: (WTF::URL::createCFURL const): * wtf/persistence/PersistentCoders.cpp: (WTF::Persistence::Coder<CString>::encode): (WTF::Persistence::Coder<String>::encode): * wtf/text/CString.h: * wtf/text/WTFString.cpp: (WTF::String::latin1 const): * wtf/text/cf/StringImplCF.cpp: (WTF::StringImpl::createCFString): Canonical link: https://commits.webkit.org/238604@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@278619 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-06-08 17:35:15 +00:00
return reinterpret_cast<const T*>(static_cast<const uint8_t*>(m_file.data()) + offset);
Serialize NFA to disk before converting it to a DFA when compiling a WKContentRuleList https://bugs.webkit.org/show_bug.cgi?id=219452 Patch by Alex Christensen <achristensen@webkit.org> on 2020-12-03 Reviewed by Geoffrey Garen. Source/WebCore: This decreases maximum memory use by about 50% because the NFA and DFA never need to be in memory at the same time. I'll have to do some tuning and on-device measurement, but this may allow us to increase maxRuleCount. * Headers.cmake: * Sources.txt: * WebCore.xcodeproj/project.pbxproj: * contentextensions/CombinedURLFilters.cpp: (WebCore::ContentExtensions::CombinedURLFilters::processNFAs): * contentextensions/CombinedURLFilters.h: * contentextensions/ContentExtensionCompiler.cpp: (WebCore::ContentExtensions::compileToBytecode): (WebCore::ContentExtensions::compileRuleList): * contentextensions/ContentExtensionError.cpp: (WebCore::ContentExtensions::contentExtensionErrorCategory): * contentextensions/ContentExtensionError.h: * contentextensions/ContentExtensionsDebugging.h: * contentextensions/DFA.cpp: (WebCore::ContentExtensions::DFA::shrinkToFit): Deleted. * contentextensions/DFA.h: * contentextensions/ImmutableNFA.h: (WebCore::ContentExtensions::ImmutableNFA::clear): (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator* const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator-> const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator== const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator!= const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator++): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstTargets::begin const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstTargets::end const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator== const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator!= const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator++): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::first const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::last const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::data const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::range const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::begin const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::end const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::debugPrint const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::transitionsForNode const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::root const): Deleted. (WebCore::ContentExtensions::ImmutableNFA::finalize): Deleted. * contentextensions/ImmutableNFANodeBuilder.h: * contentextensions/NFAToDFA.cpp: (WebCore::ContentExtensions::epsilonClosureExcludingSelf): (WebCore::ContentExtensions::resolveEpsilonClosures): (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetSource::NodeIdSetToUniqueNodeIdSetSource): (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetTranslator::translate): (WebCore::ContentExtensions::createCombinedTransition): (WebCore::ContentExtensions::getOrCreateDFANode): (WebCore::ContentExtensions::NFAToDFA::convert): * contentextensions/NFAToDFA.h: * contentextensions/SerializedNFA.cpp: Added. (WebCore::ContentExtensions::writeAllToFile): (WebCore::ContentExtensions::SerializedNFA::serialize): (WebCore::ContentExtensions::SerializedNFA::SerializedNFA): (WebCore::ContentExtensions::SerializedNFA::pointerAtOffsetInFile const): (WebCore::ContentExtensions::SerializedNFA::nodes const const): (WebCore::ContentExtensions::SerializedNFA::transitions const const): (WebCore::ContentExtensions::SerializedNFA::targets const const): (WebCore::ContentExtensions::SerializedNFA::epsilonTransitionsTargets const const): (WebCore::ContentExtensions::SerializedNFA::actions const const): * contentextensions/SerializedNFA.h: Copied from Source/WebCore/contentextensions/ImmutableNFA.h. (WebCore::ContentExtensions::SerializedNFA::Range::Range): (WebCore::ContentExtensions::SerializedNFA::Range::begin const): (WebCore::ContentExtensions::SerializedNFA::Range::end const): (WebCore::ContentExtensions::SerializedNFA::Range::size const): (WebCore::ContentExtensions::SerializedNFA::Range::operator[] const): (WebCore::ContentExtensions::SerializedNFA::root const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator* const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator-> const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator== const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator!= const): (WebCore::ContentExtensions::SerializedNFA::ConstTargetIterator::operator++): (WebCore::ContentExtensions::SerializedNFA::IterableConstTargets::begin const): (WebCore::ContentExtensions::SerializedNFA::IterableConstTargets::end const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator== const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator!= const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::operator++): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::first const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::last const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::data const): (WebCore::ContentExtensions::SerializedNFA::ConstRangeIterator::range const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::begin const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::end const): (WebCore::ContentExtensions::SerializedNFA::IterableConstRange::debugPrint const): (WebCore::ContentExtensions::SerializedNFA::transitionsForNode const): Source/WebKit: * UIProcess/API/Cocoa/WKContentRuleListStore.mm: (-[WKContentRuleListStore _compileContentRuleListForIdentifier:encodedContentRuleList:completionHandler:]): * UIProcess/API/Cocoa/WKContentRuleListStorePrivate.h: Remove NS_RELEASES_ARGUMENT because it was incorrect and unnecessary because the WTF::String is copied to a background thread. Tools: Update syntax of existing tests, which cover behavior quite well. * TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp: (TestWebKitAPI::createNFAs): (TestWebKitAPI::TEST_F): * TestWebKitAPI/Tests/WebCore/DFAHelpers.h: (TestWebKitAPI::createNFAs): (TestWebKitAPI::buildDFAFromPatterns): Canonical link: https://commits.webkit.org/232097@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@270414 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-12-04 00:01:23 +00:00
}
auto SerializedNFA::nodes() const -> const Range<ImmutableNFANode>
{
return { pointerAtOffsetInFile<ImmutableNFANode>(m_metadata.nodesOffset), m_metadata.nodesSize };
}
auto SerializedNFA::transitions() const -> const Range<ImmutableRange<char>>
{
return { pointerAtOffsetInFile<ImmutableRange<char>>(m_metadata.transitionsOffset), m_metadata.transitionsSize };
}
auto SerializedNFA::targets() const -> const Range<uint32_t>
{
return { pointerAtOffsetInFile<uint32_t>(m_metadata.targetsOffset), m_metadata.targetsSize };
}
auto SerializedNFA::epsilonTransitionsTargets() const -> const Range<uint32_t>
{
return { pointerAtOffsetInFile<uint32_t>(m_metadata.epsilonTransitionsTargetsOffset), m_metadata.epsilonTransitionsTargetsSize };
}
auto SerializedNFA::actions() const -> const Range<uint64_t>
{
return { pointerAtOffsetInFile<uint64_t>(m_metadata.actionsOffset), m_metadata.actionsSize };
}
} // namespace ContentExtensions
} // namespace WebCore
#endif // ENABLE(CONTENT_EXTENSIONS)