Skip to content

Commit

Permalink
[Unified Text Replacement] Refactor UnifiedTextReplacementController …
Browse files Browse the repository at this point in the history
…methods to pass in a session type instead of separate parameters

https://bugs.webkit.org/show_bug.cgi?id=274356
rdar://128333023

Reviewed by Wenson Hsieh.

Work towards using more strongly typed objects instead of passing around UUIDs everywhere by
creating a new `WebUnifiedTextReplacementSessionData` type and using that, similar to the existing
`WebUnifiedTextReplacementContextData` type. This also has the advantage of being more expressive
with regards to optional-ness.

* Source/WebKit/Scripts/webkit/messages.py:
(headers_for_type):
* Source/WebKit/Shared/UnifiedTextReplacement.serialization.in:
* Source/WebKit/Shared/WebUnifiedTextReplacementContextData.h:
* Source/WebKit/Shared/WebUnifiedTextReplacementSessionData.h: Copied from Source/WebKit/Shared/WebUnifiedTextReplacementContextData.h.
* Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm:
(WebKit::WebPageProxy::willBeginTextReplacementSession):
(WebKit::WebPageProxy::didBeginTextReplacementSession):
(WebKit::WebPageProxy::textReplacementSessionDidReceiveReplacements):
(WebKit::WebPageProxy::textReplacementSessionDidUpdateStateForReplacement):
(WebKit::WebPageProxy::didEndTextReplacementSession):
(WebKit::WebPageProxy::textReplacementSessionDidReceiveTextWithReplacementRange):
(WebKit::WebPageProxy::textReplacementSessionDidReceiveEditAction):
(WebKit::WebPageProxy::addTextIndicatorStyleForID):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/WebPage/Cocoa/UnifiedTextReplacementController.mm:
(WebKit::UnifiedTextReplacementController::willBeginTextReplacementSession):
(WebKit::UnifiedTextReplacementController::didBeginTextReplacementSession):
(WebKit::UnifiedTextReplacementController::textReplacementSessionDidReceiveReplacements):
(WebKit::UnifiedTextReplacementController::textReplacementSessionDidUpdateStateForReplacement):
(WebKit::UnifiedTextReplacementController::didEndTextReplacementSession<WebUnifiedTextReplacementSessionData::ReplacementType::PlainText>):
(WebKit::UnifiedTextReplacementController::didEndTextReplacementSession<WebUnifiedTextReplacementSessionData::ReplacementType::RichText>):
(WebKit::UnifiedTextReplacementController::didEndTextReplacementSession):
(WebKit::UnifiedTextReplacementController::textReplacementSessionDidReceiveTextWithReplacementRange):
(WebKit::UnifiedTextReplacementController::textReplacementSessionDidReceiveEditAction):
(WebKit::UnifiedTextReplacementController::textReplacementSessionPerformEditActionForPlainText):
(WebKit::UnifiedTextReplacementController::textReplacementSessionPerformEditActionForRichText):
(WebKit::UnifiedTextReplacementController::didEndTextReplacementSession<WebUnifiedTextReplacementType::PlainText>): Deleted.
(WebKit::UnifiedTextReplacementController::didEndTextReplacementSession<WebUnifiedTextReplacementType::RichText>): Deleted.
* Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
(WebKit::WebPage::updateTextIndicatorStyleVisibilityForID):
(WebKit::WebPage::willBeginTextReplacementSession):
(WebKit::WebPage::didBeginTextReplacementSession):
(WebKit::WebPage::textReplacementSessionDidReceiveReplacements):
(WebKit::WebPage::textReplacementSessionDidUpdateStateForReplacement):
(WebKit::WebPage::didEndTextReplacementSession):
(WebKit::WebPage::textReplacementSessionDidReceiveTextWithReplacementRange):
(WebKit::WebPage::textReplacementSessionDidReceiveEditAction):
* Source/WebKit/WebProcess/WebPage/UnifiedTextReplacementController.h:
* Source/WebKit/WebProcess/WebPage/WebPage.h:
* Source/WebKit/WebProcess/WebPage/WebPage.messages.in:

Canonical link: https://commits.webkit.org/278965@main
  • Loading branch information
rr-codes committed May 18, 2024
1 parent 5ccae9e commit 670f9c7
Show file tree
Hide file tree
Showing 12 changed files with 222 additions and 167 deletions.
2 changes: 1 addition & 1 deletion Source/WebKit/Scripts/webkit/messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -1086,7 +1086,7 @@ def headers_for_type(type):
'WebKit::WebExtensionTabImageFormat': ['"WebExtensionTab.h"'],
'WebKit::WebExtensionWindowTypeFilter': ['"WebExtensionWindow.h"'],
'WebKit::WebTextReplacementDataState': ['"WebTextReplacementData.h"'],
'WebKit::WebUnifiedTextReplacementType': ['"WebUnifiedTextReplacementContextData.h"'],
'WebKit::WebUnifiedTextReplacementSessionDataReplacementType': ['"WebUnifiedTextReplacementSessionData.h"'],
'WebKit::WebGPU::BindGroupDescriptor': ['"WebGPUBindGroupDescriptor.h"'],
'WebKit::WebGPU::BindGroupEntry': ['"WebGPUBindGroupEntry.h"'],
'WebKit::WebGPU::BindGroupLayoutDescriptor': ['"WebGPUBindGroupLayoutDescriptor.h"'],
Expand Down
10 changes: 8 additions & 2 deletions Source/WebKit/Shared/UnifiedTextReplacement.serialization.in
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ header: "WebTextReplacementData.h"
WebKit::WebTextReplacementDataState state;
};

header: "WebUnifiedTextReplacementContextData.h"
[CustomHeader] enum class WebKit::WebUnifiedTextReplacementType : uint8_t {
header: "WebUnifiedTextReplacementSessionData.h"
[CustomHeader] enum class WebKit::WebUnifiedTextReplacementSessionDataReplacementType : uint8_t {
PlainText,
RichText,
}
Expand All @@ -57,6 +57,12 @@ struct WebKit::WebUnifiedTextReplacementContextData {
WebCore::CharacterRange range;
};

header: "WebUnifiedTextReplacementSessionData.h"
[CustomHeader] struct WebKit::WebUnifiedTextReplacementSessionData {
WTF::UUID uuid;
WebKit::WebUnifiedTextReplacementSessionDataReplacementType replacementType;
};

header: "TextIndicatorStyle.h"
[CustomHeader] enum class WebKit::TextIndicatorStyle : uint8_t {
Initial,
Expand Down
5 changes: 0 additions & 5 deletions Source/WebKit/Shared/WebUnifiedTextReplacementContextData.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,6 @@

namespace WebKit {

enum class WebUnifiedTextReplacementType : uint8_t {
PlainText,
RichText,
};

struct WebUnifiedTextReplacementContextData {
WTF::UUID uuid;
WebCore::AttributedString attributedText;
Expand Down
48 changes: 48 additions & 0 deletions Source/WebKit/Shared/WebUnifiedTextReplacementSessionData.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*
* Copyright (C) 2024 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.
*/

#pragma once

#if ENABLE(UNIFIED_TEXT_REPLACEMENT)

#import <wtf/UUID.h>

namespace WebKit {

enum class WebUnifiedTextReplacementSessionDataReplacementType : uint8_t {
PlainText,
RichText,
};

struct WebUnifiedTextReplacementSessionData {
using ReplacementType = WebUnifiedTextReplacementSessionDataReplacementType;

WTF::UUID uuid;
ReplacementType replacementType { ReplacementType::RichText };
};

}

#endif
32 changes: 16 additions & 16 deletions Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm
Original file line number Diff line number Diff line change
Expand Up @@ -1161,39 +1161,39 @@ static bool exceedsRenderTreeSizeSizeThreshold(uint64_t thresholdSize, uint64_t
protectedPageClient()->unifiedTextReplacementActiveDidChange();
}

void WebPageProxy::willBeginTextReplacementSession(const WTF::UUID& uuid, WebUnifiedTextReplacementType type, CompletionHandler<void(const Vector<WebUnifiedTextReplacementContextData>&)>&& completionHandler)
void WebPageProxy::willBeginTextReplacementSession(const std::optional<WebUnifiedTextReplacementSessionData>& session, CompletionHandler<void(const Vector<WebUnifiedTextReplacementContextData>&)>&& completionHandler)
{
sendWithAsyncReply(Messages::WebPage::WillBeginTextReplacementSession(uuid, type), WTFMove(completionHandler));
sendWithAsyncReply(Messages::WebPage::WillBeginTextReplacementSession(session), WTFMove(completionHandler));
}

void WebPageProxy::didBeginTextReplacementSession(const WTF::UUID& uuid, const Vector<WebKit::WebUnifiedTextReplacementContextData>& contexts)
void WebPageProxy::didBeginTextReplacementSession(const WebUnifiedTextReplacementSessionData& session, const Vector<WebKit::WebUnifiedTextReplacementContextData>& contexts)
{
send(Messages::WebPage::DidBeginTextReplacementSession(uuid, contexts));
send(Messages::WebPage::DidBeginTextReplacementSession(session, contexts));
}

void WebPageProxy::textReplacementSessionDidReceiveReplacements(const WTF::UUID& uuid, const Vector<WebTextReplacementData>& replacements, const WebUnifiedTextReplacementContextData& context, bool finished)
void WebPageProxy::textReplacementSessionDidReceiveReplacements(const WebUnifiedTextReplacementSessionData& session, const Vector<WebTextReplacementData>& replacements, const WebUnifiedTextReplacementContextData& context, bool finished)
{
send(Messages::WebPage::TextReplacementSessionDidReceiveReplacements(uuid, replacements, context, finished));
send(Messages::WebPage::TextReplacementSessionDidReceiveReplacements(session, replacements, context, finished));
}

void WebPageProxy::textReplacementSessionDidUpdateStateForReplacement(const WTF::UUID& uuid, WebTextReplacementData::State state, const WebTextReplacementData& replacement, const WebUnifiedTextReplacementContextData& context)
void WebPageProxy::textReplacementSessionDidUpdateStateForReplacement(const WebUnifiedTextReplacementSessionData& session, WebTextReplacementData::State state, const WebTextReplacementData& replacement, const WebUnifiedTextReplacementContextData& context)
{
send(Messages::WebPage::TextReplacementSessionDidUpdateStateForReplacement(uuid, state, replacement, context));
send(Messages::WebPage::TextReplacementSessionDidUpdateStateForReplacement(session, state, replacement, context));
}

void WebPageProxy::didEndTextReplacementSession(const WTF::UUID& uuid, bool accepted)
void WebPageProxy::didEndTextReplacementSession(const WebUnifiedTextReplacementSessionData& session, bool accepted)
{
send(Messages::WebPage::DidEndTextReplacementSession(uuid, accepted));
send(Messages::WebPage::DidEndTextReplacementSession(session, accepted));
}

void WebPageProxy::textReplacementSessionDidReceiveTextWithReplacementRange(const WTF::UUID& uuid, const WebCore::AttributedString& attributedText, const WebCore::CharacterRange& range, const WebUnifiedTextReplacementContextData& context, bool finished)
void WebPageProxy::textReplacementSessionDidReceiveTextWithReplacementRange(const WebUnifiedTextReplacementSessionData& session, const WebCore::AttributedString& attributedText, const WebCore::CharacterRange& range, const WebUnifiedTextReplacementContextData& context, bool finished)
{
send(Messages::WebPage::TextReplacementSessionDidReceiveTextWithReplacementRange(uuid, attributedText, range, context, finished));
send(Messages::WebPage::TextReplacementSessionDidReceiveTextWithReplacementRange(session, attributedText, range, context, finished));
}

void WebPageProxy::textReplacementSessionDidReceiveEditAction(const WTF::UUID& uuid, WebTextReplacementData::EditAction action)
void WebPageProxy::textReplacementSessionDidReceiveEditAction(const WebUnifiedTextReplacementSessionData& session, WebTextReplacementData::EditAction action)
{
send(Messages::WebPage::TextReplacementSessionDidReceiveEditAction(uuid, action));
send(Messages::WebPage::TextReplacementSessionDidReceiveEditAction(session, action));
}

void WebPageProxy::enableTextIndicatorStyleAfterElementWithID(const String& elementID, const WTF::UUID& uuid)
Expand All @@ -1212,8 +1212,8 @@ static bool exceedsRenderTreeSizeSizeThreshold(uint64_t thresholdSize, uint64_t
send(Messages::WebPage::EnableTextIndicatorStyleForElementWithID(elementID, uuid));
}

void WebPageProxy::addTextIndicatorStyleForID(const WTF::UUID& uuid, const WebKit::TextIndicatorStyle styleType, const WebCore::TextIndicatorData& data)
{
void WebPageProxy::addTextIndicatorStyleForID(const WTF::UUID& uuid, const TextIndicatorStyle styleType, const WebCore::TextIndicatorData& data)
{
MESSAGE_CHECK(uuid.isValid());

internals().textIndicatorDataForChunk.add(uuid, data);
Expand Down
17 changes: 9 additions & 8 deletions Source/WebKit/UIProcess/WebPageProxy.h
Original file line number Diff line number Diff line change
Expand Up @@ -499,6 +499,7 @@ struct WebSpeechSynthesisVoice;
#if ENABLE(UNIFIED_TEXT_REPLACEMENT)
struct WebTextReplacementData;
struct WebUnifiedTextReplacementContextData;
struct WebUnifiedTextReplacementSessionData;
#endif
struct WebsitePoliciesData;
#if PLATFORM(WPE) && USE(GBM)
Expand Down Expand Up @@ -536,7 +537,7 @@ enum class WebEventModifier : uint8_t;
enum class WebEventType : uint8_t;
enum class WebTextReplacementDataEditAction : uint8_t;
enum class WebTextReplacementDataState : uint8_t;
enum class WebUnifiedTextReplacementType : uint8_t;
enum class WebUnifiedTextReplacementSessionDataReplacementType : uint8_t;
enum class WindowKind : uint8_t;

template<typename> class MonotonicObjectIdentifier;
Expand Down Expand Up @@ -2400,19 +2401,19 @@ class WebPageProxy final : public API::ObjectImpl<API::Object::Type::Page>, publ
#if ENABLE(UNIFIED_TEXT_REPLACEMENT)
void setUnifiedTextReplacementActive(bool);

void willBeginTextReplacementSession(const WTF::UUID&, WebUnifiedTextReplacementType, CompletionHandler<void(const Vector<WebUnifiedTextReplacementContextData>&)>&&);
void willBeginTextReplacementSession(const std::optional<WebUnifiedTextReplacementSessionData>&, CompletionHandler<void(const Vector<WebUnifiedTextReplacementContextData>&)>&&);

void didBeginTextReplacementSession(const WTF::UUID&, const Vector<WebKit::WebUnifiedTextReplacementContextData>&);
void didBeginTextReplacementSession(const WebUnifiedTextReplacementSessionData&, const Vector<WebKit::WebUnifiedTextReplacementContextData>&);

void textReplacementSessionDidReceiveReplacements(const WTF::UUID&, const Vector<WebKit::WebTextReplacementData>&, const WebKit::WebUnifiedTextReplacementContextData&, bool finished);
void textReplacementSessionDidReceiveReplacements(const WebUnifiedTextReplacementSessionData&, const Vector<WebKit::WebTextReplacementData>&, const WebKit::WebUnifiedTextReplacementContextData&, bool finished);

void textReplacementSessionDidUpdateStateForReplacement(const WTF::UUID&, WebKit::WebTextReplacementDataState, const WebKit::WebTextReplacementData&, const WebKit::WebUnifiedTextReplacementContextData&);
void textReplacementSessionDidUpdateStateForReplacement(const WebUnifiedTextReplacementSessionData&, WebKit::WebTextReplacementDataState, const WebKit::WebTextReplacementData&, const WebKit::WebUnifiedTextReplacementContextData&);

void didEndTextReplacementSession(const WTF::UUID&, bool accepted);
void didEndTextReplacementSession(const WebUnifiedTextReplacementSessionData&, bool accepted);

void textReplacementSessionDidReceiveTextWithReplacementRange(const WTF::UUID&, const WebCore::AttributedString&, const WebCore::CharacterRange&, const WebKit::WebUnifiedTextReplacementContextData&, bool finished);
void textReplacementSessionDidReceiveTextWithReplacementRange(const WebUnifiedTextReplacementSessionData&, const WebCore::AttributedString&, const WebCore::CharacterRange&, const WebKit::WebUnifiedTextReplacementContextData&, bool finished);

void textReplacementSessionDidReceiveEditAction(const WTF::UUID&, WebKit::WebTextReplacementDataEditAction);
void textReplacementSessionDidReceiveEditAction(const WebUnifiedTextReplacementSessionData&, WebKit::WebTextReplacementDataEditAction);

bool isUnifiedTextReplacementActive() const { return m_isUnifiedTextReplacementActive; }

Expand Down
4 changes: 4 additions & 0 deletions Source/WebKit/WebKit.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@
00B9661A18E25AE100CE1F88 /* FindClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 00B9661818E25AE100CE1F88 /* FindClient.h */; };
0250C2512B5DCB2000D05C0B /* FindStringCallbackAggregator.h in Headers */ = {isa = PBXBuildFile; fileRef = 0250C24F2B5DCB0100D05C0B /* FindStringCallbackAggregator.h */; };
0701789E23BE9CFC005F0FAA /* RemoteMediaPlayerMIMETypeCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0701789B23BAE261005F0FAA /* RemoteMediaPlayerMIMETypeCache.cpp */; };
0711EDD82BF8998900B0E592 /* WebUnifiedTextReplacementSessionData.h in Headers */ = {isa = PBXBuildFile; fileRef = 0711EDD72BF8997400B0E592 /* WebUnifiedTextReplacementSessionData.h */; };
0712654928EE06F800AE69D7 /* WebChromeClientCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0712654728EE06F800AE69D7 /* WebChromeClientCocoa.mm */; };
071BC58F23CE1EAA00680D7C /* RemoteMediaPlayerProxyMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 071BC58C23CE1EA900680D7C /* RemoteMediaPlayerProxyMessageReceiver.cpp */; };
071BC59023CE1EAA00680D7C /* RemoteMediaPlayerProxyMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 071BC58D23CE1EAA00680D7C /* RemoteMediaPlayerProxyMessages.h */; };
Expand Down Expand Up @@ -3154,6 +3155,7 @@
0701789B23BAE261005F0FAA /* RemoteMediaPlayerMIMETypeCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteMediaPlayerMIMETypeCache.cpp; sourceTree = "<group>"; };
0701789C23BAE262005F0FAA /* RemoteMediaPlayerMIMETypeCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteMediaPlayerMIMETypeCache.h; sourceTree = "<group>"; };
070259BE2522841C00153405 /* UserMediaPermissionRequestManagerProxy.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = UserMediaPermissionRequestManagerProxy.mm; sourceTree = "<group>"; };
0711EDD72BF8997400B0E592 /* WebUnifiedTextReplacementSessionData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebUnifiedTextReplacementSessionData.h; sourceTree = "<group>"; };
0712654728EE06F800AE69D7 /* WebChromeClientCocoa.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = WebChromeClientCocoa.mm; sourceTree = "<group>"; };
071BC57723C93BB700680D7C /* AudioTrackPrivateRemote.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AudioTrackPrivateRemote.h; sourceTree = "<group>"; };
071BC57923C93BB900680D7C /* AudioTrackPrivateRemote.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AudioTrackPrivateRemote.cpp; sourceTree = "<group>"; };
Expand Down Expand Up @@ -9309,6 +9311,7 @@
C0337DD7127A51B6008FF4F4 /* WebTouchEvent.cpp */,
0F4001002527D73C00E91DA7 /* WebTouchEvent.h */,
07E5652F2B68320F00035A5F /* WebUnifiedTextReplacementContextData.h */,
0711EDD72BF8997400B0E592 /* WebUnifiedTextReplacementSessionData.h */,
5CD748B523C8EB190092A999 /* WebURLSchemeHandlerIdentifier.h */,
7C065F2A1C8CD95F00C2D950 /* WebUserContentControllerDataTypes.h */,
527D1AEC2AD0A5BB00D145E5 /* WebUserContentControllerDataTypes.serialization.in */,
Expand Down Expand Up @@ -17098,6 +17101,7 @@
6D9A666E2A27FAE300BD68A0 /* WebTouchEvent.h in Headers */,
BCA0EF7F12331E78007D3CFB /* WebUndoStep.h in Headers */,
07E565302B68321100035A5F /* WebUnifiedTextReplacementContextData.h in Headers */,
0711EDD82BF8998900B0E592 /* WebUnifiedTextReplacementSessionData.h in Headers */,
1AAF08AE1926936700B6390C /* WebUserContentController.h in Headers */,
7C065F2C1C8CD95F00C2D950 /* WebUserContentControllerDataTypes.h in Headers */,
1AAF08B819269E6D00B6390C /* WebUserContentControllerMessages.h in Headers */,
Expand Down
Loading

0 comments on commit 670f9c7

Please sign in to comment.