Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 033834d048e6106893948325ef4c12aac6b177c1
https://github.com/WebKit/WebKit/commit/033834d048e6106893948325ef4c12aac6b177c1
Author: Alex Christensen <[email protected]>
Date: 2025-11-01 (Sat, 01 Nov 2025)
Changed paths:
M Source/WebCore/CMakeLists.txt
M Source/WebCore/DerivedSources-input.xcfilelist
M Source/WebCore/DerivedSources-output.xcfilelist
M Source/WebCore/DerivedSources.make
M Source/WebCore/Headers.cmake
M Source/WebCore/Sources.txt
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
M Source/WebCore/loader/EmptyClients.cpp
M Source/WebCore/page/LocalDOMWindow.cpp
M Source/WebCore/page/UserContentController.h
M Source/WebCore/page/UserContentProvider.h
A Source/WebCore/page/WebKitBuffer.cpp
A Source/WebCore/page/WebKitBuffer.h
A Source/WebCore/page/WebKitBuffer.idl
A Source/WebCore/page/WebKitBufferNamespace.cpp
A Source/WebCore/page/WebKitBufferNamespace.h
A Source/WebCore/page/WebKitBufferNamespace.idl
M Source/WebCore/page/WebKitNamespace.cpp
M Source/WebCore/page/WebKitNamespace.h
M Source/WebCore/page/WebKitNamespace.idl
R Source/WebCore/page/WebKitStringMatcher.cpp
R Source/WebCore/page/WebKitStringMatcher.h
R Source/WebCore/page/WebKitStringMatcher.idl
R Source/WebCore/page/WebKitStringMatcherOptions.h
R Source/WebCore/page/WebKitStringMatcherOptions.idl
R Source/WebCore/page/WebKitStringMatchersNamespace.cpp
R Source/WebCore/page/WebKitStringMatchersNamespace.h
R Source/WebCore/page/WebKitStringMatchersNamespace.idl
M Source/WebKit/Modules/OSX_Private.modulemap
M Source/WebKit/Modules/iOS_Private.modulemap
M Source/WebKit/Scripts/webkit/messages.py
M Source/WebKit/Shared/API/APIObject.h
M Source/WebKit/Shared/Cocoa/APIObject.mm
M Source/WebKit/Shared/UserContentControllerParameters.h
M Source/WebKit/Shared/UserContentControllerParameters.serialization.in
M Source/WebKit/Shared/WebUserContentControllerDataTypes.cpp
M Source/WebKit/Shared/WebUserContentControllerDataTypes.h
M Source/WebKit/Shared/WebUserContentControllerDataTypes.serialization.in
M Source/WebKit/Sources.txt
M Source/WebKit/SourcesCocoa.txt
A Source/WebKit/UIProcess/API/APIJSBuffer.cpp
A Source/WebKit/UIProcess/API/APIJSBuffer.h
R Source/WebKit/UIProcess/API/APIStringMatcher.cpp
R Source/WebKit/UIProcess/API/APIStringMatcher.h
M Source/WebKit/UIProcess/API/Cocoa/WKUserContentController.mm
M Source/WebKit/UIProcess/API/Cocoa/WKUserContentControllerPrivate.h
A Source/WebKit/UIProcess/API/Cocoa/_WKJSBuffer.h
A Source/WebKit/UIProcess/API/Cocoa/_WKJSBuffer.mm
A Source/WebKit/UIProcess/API/Cocoa/_WKJSBufferInternal.h
R Source/WebKit/UIProcess/API/Cocoa/_WKStringMatcher.h
R Source/WebKit/UIProcess/API/Cocoa/_WKStringMatcher.mm
R Source/WebKit/UIProcess/API/Cocoa/_WKStringMatcherInternal.h
M Source/WebKit/UIProcess/UserContent/WebUserContentControllerProxy.cpp
M Source/WebKit/UIProcess/UserContent/WebUserContentControllerProxy.h
M Source/WebKit/WebKit.xcodeproj/project.pbxproj
A Source/WebKit/WebProcess/UserContent/SharedMemoryJSBuffer.cpp
A Source/WebKit/WebProcess/UserContent/SharedMemoryJSBuffer.h
R Source/WebKit/WebProcess/UserContent/SharedMemoryStringMatcher.cpp
R Source/WebKit/WebProcess/UserContent/SharedMemoryStringMatcher.h
M Source/WebKit/WebProcess/UserContent/WebUserContentController.cpp
M Source/WebKit/WebProcess/UserContent/WebUserContentController.h
M Source/WebKit/WebProcess/UserContent/WebUserContentController.messages.in
M Tools/TestWebKitAPI/SourcesCocoa.txt
M Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
A Tools/TestWebKitAPI/Tests/WebKitCocoa/JSBuffer.mm
R Tools/TestWebKitAPI/Tests/WebKitCocoa/StringMatcher.mm
Log Message:
-----------
Replace _WKStringMatcher with _WKJSBuffer
https://bugs.webkit.org/show_bug.cgi?id=301765
rdar://163806657
Reviewed by Sam Weinig and Ryosuke Niwa.
_WKStringMatcher was an interesting little experiment. It could meet the needs
of Safari,
but it had a few design issues. First, it required a versioned file format
that strangely
used uint16_t's as its building block. Second, it used an algorithm that isn't
generally
ideal, but was best for the exact data set Safari needs to use it with. Third,
it was
initially implemented with a synchronous disk read upon instantiation.
At the WebKit contributors' meeting, Sam suggested that what we needed wasn't
necessarily
this exact algorithm implemented in C++, but we need a primitive for accessing
large
buffers of read-only shared memory, then we can implement our own algorithms in
JS.
It turns out, he was right. This implements such a primitive, which doesn't
have any
of the issues of _WKStringMatcher, but allows efficient implementation of a
string matcher
or anything else that reads data from memory. It turns out, a lot of
algorithms read
data from memory and do things with the data.
I initially expose the data to JS as a string in one of two possible forms: a
Latin-1 string
interpreting each byte as a code unit, or a UTF-16 string interpreting every
two bytes as
a code unit. Future read-only accessors could be added once JavaScriptCore
implements either
copy-on-write typed arrays or read-only array buffers, like what is being
proposed in
https://github.com/tc39/proposal-immutable-arraybuffer
Tests: Tools/TestWebKitAPI/SourcesCocoa.txt
Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
Tools/TestWebKitAPI/Tests/WebKitCocoa/JSBuffer.mm
* Source/WebCore/CMakeLists.txt:
* Source/WebCore/DerivedSources-input.xcfilelist:
* Source/WebCore/DerivedSources-output.xcfilelist:
* Source/WebCore/DerivedSources.make:
* Source/WebCore/Headers.cmake:
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/loader/EmptyClients.cpp:
* Source/WebCore/page/LocalDOMWindow.cpp:
(WebCore::LocalDOMWindow::shouldHaveWebKitNamespaceForWorld):
* Source/WebCore/page/UserContentController.h:
* Source/WebCore/page/UserContentProvider.h:
* Source/WebCore/page/WebKitBuffer.cpp: Copied from
Source/WebCore/page/WebKitStringMatcherOptions.h.
* Source/WebCore/page/WebKitBuffer.h: Copied from
Source/WebCore/page/WebKitStringMatcherOptions.h.
* Source/WebCore/page/WebKitBuffer.idl: Renamed from
Source/WebCore/page/WebKitStringMatcher.idl.
* Source/WebCore/page/WebKitBufferNamespace.cpp: Renamed from
Source/WebCore/page/WebKitStringMatchersNamespace.cpp.
(WebCore::WebKitBufferNamespace::WebKitBufferNamespace):
(WebCore::WebKitBufferNamespace::namedItem):
(WebCore::WebKitBufferNamespace::supportedPropertyNames const):
(WebCore::WebKitBufferNamespace::isSupportedPropertyName):
* Source/WebCore/page/WebKitBufferNamespace.h: Renamed from
Source/WebCore/page/WebKitStringMatchersNamespace.h.
(WebCore::WebKitBufferNamespace::create):
* Source/WebCore/page/WebKitBufferNamespace.idl: Renamed from
Source/WebCore/page/WebKitStringMatchersNamespace.idl.
* Source/WebCore/page/WebKitNamespace.cpp:
(WebCore::WebKitNamespace::WebKitNamespace):
(WebCore::WebKitNamespace::buffers):
(WebCore::WebKitNamespace::stringMatchers): Deleted.
* Source/WebCore/page/WebKitNamespace.h:
* Source/WebCore/page/WebKitNamespace.idl:
* Source/WebCore/page/WebKitStringMatcher.cpp: Removed.
* Source/WebCore/page/WebKitStringMatcher.h: Removed.
* Source/WebKit/Modules/OSX_Private.modulemap:
* Source/WebKit/Modules/iOS_Private.modulemap:
* Source/WebKit/Scripts/webkit/messages.py:
(headers_for_type):
* Source/WebKit/Shared/API/APIObject.h:
* Source/WebKit/Shared/Cocoa/APIObject.mm:
(API::Object::newObject):
* Source/WebKit/Shared/UserContentControllerParameters.h:
* Source/WebKit/Shared/UserContentControllerParameters.serialization.in:
* Source/WebKit/Shared/WebUserContentControllerDataTypes.cpp:
(WebKit::WebJSBufferData::WebJSBufferData):
(WebKit::WebJSBufferData::sharedMemoryHandle const):
(WebKit::WebStringMatcherData::WebStringMatcherData): Deleted.
(WebKit::WebStringMatcherData::sharedMemoryHandle const): Deleted.
* Source/WebKit/Shared/WebUserContentControllerDataTypes.h:
* Source/WebKit/Shared/WebUserContentControllerDataTypes.serialization.in:
* Source/WebKit/Sources.txt:
* Source/WebKit/SourcesCocoa.txt:
* Source/WebKit/UIProcess/API/APIJSBuffer.cpp: Renamed from
Source/WebCore/page/WebKitStringMatcherOptions.idl.
(API::JSBuffer::JSBuffer):
(API::JSBuffer::sharedMemory):
* Source/WebKit/UIProcess/API/APIJSBuffer.h: Renamed from
Source/WebCore/page/WebKitStringMatcherOptions.h.
* Source/WebKit/UIProcess/API/APIStringMatcher.cpp: Removed.
* Source/WebKit/UIProcess/API/APIStringMatcher.h: Removed.
* Source/WebKit/UIProcess/API/Cocoa/WKUserContentController.mm:
(-[WKUserContentController _addBuffer:contentWorld:name:]):
(-[WKUserContentController _removeBufferWithName:contentWorld:]):
(-[WKUserContentController _addStringMatcher:contentWorld:name:]): Deleted.
(-[WKUserContentController _removeStringMatcherWithName:contentWorld:]):
Deleted.
* Source/WebKit/UIProcess/API/Cocoa/WKUserContentControllerPrivate.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKJSBuffer.h: Renamed from
Source/WebKit/UIProcess/API/Cocoa/_WKStringMatcher.h.
* Source/WebKit/UIProcess/API/Cocoa/_WKJSBuffer.mm: Added.
(-[_WKJSBuffer initWithData:]):
(-[_WKJSBuffer initWithDataInFile:]):
(-[_WKJSBuffer dealloc]):
(-[_WKJSBuffer _apiObject]):
* Source/WebKit/UIProcess/API/Cocoa/_WKJSBufferInternal.h: Renamed from
Source/WebKit/UIProcess/API/Cocoa/_WKStringMatcherInternal.h.
* Source/WebKit/UIProcess/API/Cocoa/_WKStringMatcher.mm: Removed.
* Source/WebKit/UIProcess/UserContent/WebUserContentControllerProxy.cpp:
(WebKit::WebUserContentControllerProxy::parametersForProcess const):
(WebKit::WebUserContentControllerProxy::addJSBuffer):
(WebKit::WebUserContentControllerProxy::removeJSBuffer):
(WebKit::WebUserContentControllerProxy::addStringMatcher): Deleted.
(WebKit::WebUserContentControllerProxy::removeStringMatcher): Deleted.
* Source/WebKit/UIProcess/UserContent/WebUserContentControllerProxy.h:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/UserContent/SharedMemoryJSBuffer.cpp: Copied from
Source/WebKit/WebProcess/UserContent/SharedMemoryStringMatcher.h.
(WebKit::SharedMemoryJSBuffer::create):
(WebKit::SharedMemoryJSBuffer::SharedMemoryJSBuffer):
(WebKit::SharedMemoryJSBuffer::asUTF16String const):
(WebKit::SharedMemoryJSBuffer::asLatin1String const):
* Source/WebKit/WebProcess/UserContent/SharedMemoryJSBuffer.h: Renamed from
Source/WebKit/WebProcess/UserContent/SharedMemoryStringMatcher.h.
* Source/WebKit/WebProcess/UserContent/SharedMemoryStringMatcher.cpp: Removed.
* Source/WebKit/WebProcess/UserContent/WebUserContentController.cpp:
(WebKit::WebUserContentController::getOrCreate):
(WebKit::WebUserContentController::removeContentWorld):
(WebKit::WebUserContentController::addJSBuffer):
(WebKit::WebUserContentController::removeJSBuffer):
(WebKit::WebUserContentController::hasBuffersForWorld const):
(WebKit::WebUserContentController::buffer const):
(WebKit::WebUserContentController::addStringMatcher): Deleted.
(WebKit::WebUserContentController::removeStringMatcher): Deleted.
(WebKit::WebUserContentController::hasStringMatchersForWorld const): Deleted.
(WebKit::WebUserContentController::stringMatcher const): Deleted.
* Source/WebKit/WebProcess/UserContent/WebUserContentController.h:
* Source/WebKit/WebProcess/UserContent/WebUserContentController.messages.in:
* Tools/TestWebKitAPI/SourcesCocoa.txt:
* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/JSBuffer.mm: Added.
(TEST(JSBuffer, Data)):
(TEST(JSBuffer, IDLExposed)):
* Tools/TestWebKitAPI/Tests/WebKitCocoa/StringMatcher.mm: Removed.
Canonical link: https://commits.webkit.org/302442@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications