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

Reply via email to