Skip to content

Use a separate animation ID from the session ID in all cases, including initial animation. #30009

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions Source/WebCore/page/ChromeClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -668,9 +668,13 @@ class ChromeClient {

virtual void proofreadingSessionUpdateStateForSuggestionWithID(const WritingTools::SessionID&, WritingTools::TextSuggestionState, const WritingTools::TextSuggestionID&) { }

virtual void removeTextAnimationForID(const WritingTools::SessionID&) { }
virtual void removeTextAnimationForAnimationID(const WTF::UUID&) { }

virtual void cleanUpTextAnimationsForSessionID(const WritingTools::SessionID&) { }
virtual void removeTransparentMarkersForSessionID(const WritingTools::SessionID&) { }

virtual void removeInitialTextAnimation(const WritingTools::SessionID&) { }

virtual void addInitialTextAnimation(const WritingTools::SessionID&) { }

virtual void addSourceTextAnimation(const WritingTools::SessionID&, const CharacterRange&) { }

Expand Down
13 changes: 8 additions & 5 deletions Source/WebCore/page/writing-tools/WritingToolsController.mm
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,10 @@
void WritingToolsController::didBeginWritingToolsSession(const WritingTools::Session& session, const Vector<WritingTools::Context>& contexts)
{
RELEASE_LOG(WritingTools, "WritingToolsController::didBeginWritingToolsSession (%s) [received contexts: %zu]", session.identifier.toString().utf8().data(), contexts.size());

// Don't animate smart replies, they are animated by UIKit/AppKit.
if (session.compositionType != WebCore::WritingTools::Session::CompositionType::SmartReply)
m_page->chrome().client().addInitialTextAnimation(session.identifier);
}

void WritingToolsController::proofreadingSessionDidReceiveSuggestions(const WritingTools::Session& session, const Vector<WritingTools::TextSuggestion>& suggestions, const WritingTools::Context& context, bool finished)
Expand All @@ -215,8 +219,7 @@
return;
}

// FIXME: Text indicator styles are not used within this method, so is this still needed?
m_page->chrome().client().removeTextAnimationForID(session.identifier);
m_page->chrome().client().removeInitialTextAnimation(session.identifier);

document->selection().clear();

Expand Down Expand Up @@ -362,7 +365,7 @@
return;
}

m_page->chrome().client().removeTextAnimationForID(session.identifier);
m_page->chrome().client().removeInitialTextAnimation(session.identifier);

document->selection().clear();

Expand Down Expand Up @@ -586,15 +589,15 @@
return;
}

m_page->chrome().client().removeTextAnimationForID(session.identifier);
m_page->chrome().client().removeInitialTextAnimation(session.identifier);

// At this point, the selection will be the replaced text, which is the desired behavior for
// Smart Reply sessions. However, for others, the entire session context range should be selected.

if (session.compositionType != WritingTools::Session::CompositionType::SmartReply)
document->selection().setSelection({ *sessionRange });

m_page->chrome().client().cleanUpTextAnimationsForSessionID(session.identifier);
m_page->chrome().client().removeTransparentMarkersForSessionID(session.identifier);

m_states.remove(session.identifier);
}
Expand Down
65 changes: 12 additions & 53 deletions Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
Original file line number Diff line number Diff line change
Expand Up @@ -1801,26 +1801,26 @@ static inline WKTextAnimationType toWKTextAnimationType(WebKit::TextAnimationTyp
}

#if ENABLE(WRITING_TOOLS_UI)
- (void)_addTextAnimationTypeForID:(NSUUID *)nsUUID withData:(const WebKit::TextAnimationData&)data
- (void)_addTextAnimationForAnimationID:(NSUUID *)nsUUID withData:(const WebKit::TextAnimationData&)data
{
#if PLATFORM(IOS_FAMILY)
[_contentView addTextAnimationTypeForID:nsUUID withStyleType:toWKTextAnimationType(data.style)];
[_contentView addTextAnimationForAnimationID:nsUUID withStyleType:toWKTextAnimationType(data.style)];
#elif PLATFORM(MAC)
auto uuid = WTF::UUID::fromNSUUID(nsUUID);
if (!uuid)
return;
_impl->addTextAnimationTypeForID(*uuid, data);
_impl->addTextAnimationForAnimationID(*uuid, data);
#endif
}
- (void)_removeTextAnimationForID:(NSUUID *)nsUUID
- (void)_removeTextAnimationForAnimationID:(NSUUID *)nsUUID
{
#if PLATFORM(IOS_FAMILY)
[_contentView removeTextAnimationForID:nsUUID];
[_contentView removeTextAnimationForAnimationID:nsUUID];
#elif PLATFORM(MAC)
auto uuid = WTF::UUID::fromNSUUID(nsUUID);
if (!uuid)
return;
_impl->removeTextAnimationForID(*uuid);
_impl->removeTextAnimationForAnimationID(*uuid);
#endif
}
#endif
Expand Down Expand Up @@ -2127,10 +2127,6 @@ - (void)didBeginWritingToolsSession:(WTSession *)session contexts:(NSArray<WTCon
contextData.append(*webContext);
}

// Don't animate smart replies, they are animated by UIKit/AppKit.
if (webSession->compositionType != WebCore::WritingTools::Session::CompositionType::SmartReply)
[self beginWritingToolsAnimationForSessionWithUUID:session.uuid];

_page->didBeginWritingToolsSession(*webSession, contextData);
}

Expand Down Expand Up @@ -2276,43 +2272,6 @@ - (void)_proofreadingSessionWithUUID:(NSUUID *)sessionUUID updateState:(WebCore:
[textViewDelegate proofreadingSessionWithUUID:session.uuid updateState:WebKit::convertToPlatformTextSuggestionState(state) forSuggestionWithUUID:replacementUUID];
}


#pragma mark - Writing Tools Animation

- (void)beginWritingToolsAnimationForSessionWithUUID:(NSUUID *)sessionUUID
{
#if ENABLE(WRITING_TOOLS_UI)
#if PLATFORM(MAC)
auto uuid = WTF::UUID::fromNSUUID(sessionUUID);
if (!uuid) {
ASSERT_NOT_REACHED();
return;
}

_impl->addTextAnimationTypeForID(*uuid, { WebKit::TextAnimationType::Initial, WTF::UUID(WTF::UUID::emptyValue) });
#else
[_contentView addTextAnimationTypeForID:sessionUUID withStyleType:WKTextAnimationTypeInitial];
#endif
#endif // ENABLE(WRITING_TOOLS_UI)
}

- (void)endWritingToolsAnimationForSessionWithUUID:(NSUUID *)sessionUUID
{
#if ENABLE(WRITING_TOOLS_UI)
#if PLATFORM(MAC)
auto uuid = WTF::UUID::fromNSUUID(sessionUUID);
if (!uuid) {
ASSERT_NOT_REACHED();
return;
}

_impl->removeTextAnimationForID(*uuid);
#else
[_contentView removeTextAnimationForID:sessionUUID];
#endif
#endif // ENABLE(WRITING_TOOLS_UI)
}

#endif

#if USE(APPLE_INTERNAL_SDK)
Expand Down Expand Up @@ -3096,9 +3055,9 @@ - (NSUUID *)_enableSourceTextAnimationAfterElementWithID:(NSString *)elementID
_page->enableSourceTextAnimationAfterElementWithID(elementID, *uuid);

#if PLATFORM(IOS_FAMILY)
[_contentView addTextAnimationTypeForID:nsUUID.get() withStyleType:WKTextAnimationTypeInitial];
[_contentView addTextAnimationForAnimationID:nsUUID.get() withStyleType:WKTextAnimationTypeInitial];
#elif PLATFORM(MAC)
_impl->addTextAnimationTypeForID(*uuid, { WebKit::TextAnimationType::Initial, WTF::UUID(WTF::UUID::emptyValue) });
_impl->addTextAnimationForAnimationID(*uuid, { WebKit::TextAnimationType::Initial, WTF::UUID(WTF::UUID::emptyValue) });
#endif
return nsUUID.get();
#else // ENABLE(WRITING_TOOLS_UI)
Expand All @@ -3118,9 +3077,9 @@ - (NSUUID *)_enableFinalTextAnimationForElementWithID:(NSString *)elementID
_page->enableTextAnimationTypeForElementWithID(elementID, *uuid);

#if PLATFORM(IOS_FAMILY)
[_contentView addTextAnimationTypeForID:nsUUID.get() withStyleType:WKTextAnimationTypeFinal];
[_contentView addTextAnimationForAnimationID:nsUUID.get() withStyleType:WKTextAnimationTypeFinal];
#elif PLATFORM(MAC)
_impl->addTextAnimationTypeForID(*uuid, { WebKit::TextAnimationType::Final, WTF::UUID(WTF::UUID::emptyValue) });
_impl->addTextAnimationForAnimationID(*uuid, { WebKit::TextAnimationType::Final, WTF::UUID(WTF::UUID::emptyValue) });
#endif
return nsUUID.get();
#else // ENABLE(WRITING_TOOLS_UI)
Expand All @@ -3132,12 +3091,12 @@ - (void)_disableTextAnimationWithUUID:(NSUUID *)nsUUID
{
#if ENABLE(WRITING_TOOLS_UI)
#if PLATFORM(IOS_FAMILY)
[_contentView removeTextAnimationForID:nsUUID];
[_contentView removeTextAnimationForAnimationID:nsUUID];
#elif PLATFORM(MAC)
auto uuid = WTF::UUID::fromNSUUID(nsUUID);
if (!uuid)
return;
_impl->removeTextAnimationForID(*uuid);
_impl->removeTextAnimationForAnimationID(*uuid);
#endif
#endif // ENABLE(WRITING_TOOLS_UI)
}
Expand Down
4 changes: 2 additions & 2 deletions Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h
Original file line number Diff line number Diff line change
Expand Up @@ -415,8 +415,8 @@ struct PerWebProcessState {
#endif // ENABLE(WRITING_TOOLS)

#if ENABLE(WRITING_TOOLS_UI)
- (void)_addTextAnimationTypeForID:(NSUUID *)uuid withData:(const WebKit::TextAnimationData&)styleData;
- (void)_removeTextAnimationForID:(NSUUID *)uuid;
- (void)_addTextAnimationForAnimationID:(NSUUID *)uuid withData:(const WebKit::TextAnimationData&)styleData;
- (void)_removeTextAnimationForAnimationID:(NSUUID *)uuid;
#endif

- (void)_internalDoAfterNextPresentationUpdate:(void (^)(void))updateBlock withoutWaitingForPainting:(BOOL)withoutWaitingForPainting withoutWaitingForAnimatedResize:(BOOL)withoutWaitingForAnimatedResize;
Expand Down
4 changes: 2 additions & 2 deletions Source/WebKit/UIProcess/Cocoa/PageClientImplCocoa.h
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,8 @@ class PageClientImplCocoa : public PageClient {
#endif

#if ENABLE(WRITING_TOOLS_UI)
void addTextAnimationTypeForID(const WTF::UUID&, const WebKit::TextAnimationData&) final;
void removeTextAnimationForID(const WTF::UUID&) final;
void addTextAnimationForAnimationID(const WTF::UUID&, const WebKit::TextAnimationData&) final;
void removeTextAnimationForAnimationID(const WTF::UUID&) final;
#endif

void microphoneCaptureWillChange() final;
Expand Down
8 changes: 4 additions & 4 deletions Source/WebKit/UIProcess/Cocoa/PageClientImplCocoa.mm
Original file line number Diff line number Diff line change
Expand Up @@ -157,14 +157,14 @@
#endif // ENABLE(APP_HIGHLIGHTS)

#if ENABLE(WRITING_TOOLS_UI)
void PageClientImplCocoa::addTextAnimationTypeForID(const WTF::UUID& uuid, const WebKit::TextAnimationData& data)
void PageClientImplCocoa::addTextAnimationForAnimationID(const WTF::UUID& uuid, const WebKit::TextAnimationData& data)
{
[m_webView _addTextAnimationTypeForID:uuid withData:data];
[m_webView _addTextAnimationForAnimationID:uuid withData:data];
}

void PageClientImplCocoa::removeTextAnimationForID(const WTF::UUID& uuid)
void PageClientImplCocoa::removeTextAnimationForAnimationID(const WTF::UUID& uuid)
{
[m_webView _removeTextAnimationForID:uuid];
[m_webView _removeTextAnimationForAnimationID:uuid];
}
#endif

Expand Down
8 changes: 4 additions & 4 deletions Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm
Original file line number Diff line number Diff line change
Expand Up @@ -1215,13 +1215,13 @@ static bool exceedsRenderTreeSizeSizeThreshold(uint64_t thresholdSize, uint64_t
legacyMainFrameProcess().send(Messages::WebPage::EnableTextAnimationTypeForElementWithID(elementID, uuid), webPageIDInMainFrameProcess());
}

void WebPageProxy::addTextAnimationTypeForID(IPC::Connection& connection, const WTF::UUID& uuid, const TextAnimationData& styleData, const WebCore::TextIndicatorData& indicatorData)
void WebPageProxy::addTextAnimationForAnimationID(IPC::Connection& connection, const WTF::UUID& uuid, const TextAnimationData& styleData, const WebCore::TextIndicatorData& indicatorData)
{
MESSAGE_CHECK(uuid.isValid());

internals().textIndicatorDataForChunk.add(uuid, indicatorData);

protectedPageClient()->addTextAnimationTypeForID(uuid, styleData);
protectedPageClient()->addTextAnimationForAnimationID(uuid, styleData);
}

void WebPageProxy::getTextIndicatorForID(const WTF::UUID& uuid, CompletionHandler<void(std::optional<WebCore::TextIndicatorData>&&)>&& completionHandler)
Expand Down Expand Up @@ -1251,11 +1251,11 @@ static bool exceedsRenderTreeSizeSizeThreshold(uint64_t thresholdSize, uint64_t
legacyMainFrameProcess().sendWithAsyncReply(Messages::WebPage::updateUnderlyingTextVisibilityForTextAnimationID(uuid, visible), WTFMove(completionHandler), webPageIDInMainFrameProcess());
}

void WebPageProxy::removeTextAnimationForID(IPC::Connection& connection, const WTF::UUID& uuid)
void WebPageProxy::removeTextAnimationForAnimationID(IPC::Connection& connection, const WTF::UUID& uuid)
{
MESSAGE_CHECK(uuid.isValid());

protectedPageClient()->removeTextAnimationForID(uuid);
protectedPageClient()->removeTextAnimationForAnimationID(uuid);
}

#endif // ENABLE(WRITING_TOOLS_UI)
Expand Down
4 changes: 2 additions & 2 deletions Source/WebKit/UIProcess/PageClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -716,8 +716,8 @@ class PageClient : public CanMakeWeakPtr<PageClient> {
virtual void storeAppHighlight(const WebCore::AppHighlight&) = 0;
#endif
#if ENABLE(WRITING_TOOLS_UI)
virtual void addTextAnimationTypeForID(const WTF::UUID&, const WebKit::TextAnimationData&) = 0;
virtual void removeTextAnimationForID(const WTF::UUID&) = 0;
virtual void addTextAnimationForAnimationID(const WTF::UUID&, const WebKit::TextAnimationData&) = 0;
virtual void removeTextAnimationForAnimationID(const WTF::UUID&) = 0;
#endif
virtual void requestScrollToRect(const WebCore::FloatRect& targetRect, const WebCore::FloatPoint& origin) { }

Expand Down
4 changes: 2 additions & 2 deletions Source/WebKit/UIProcess/WKSTextAnimationManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@
@interface WKSTextAnimationManager : NSObject

- (instancetype)initWithDelegate:(id <WKSTextAnimationSourceDelegate>)delegate NS_DESIGNATED_INITIALIZER;
- (void)addTextAnimationTypeForID:(NSUUID *)uuid withStyleType:(WKTextAnimationType)styleType;
- (void)removeTextAnimationForID:(NSUUID *)uuid;
- (void)addTextAnimationForAnimationID:(NSUUID *)uuid withStyleType:(WKTextAnimationType)styleType;
- (void)removeTextAnimationForAnimationID:(NSUUID *)uuid;
@end

#endif // ENABLE(WRITING_TOOLS)
4 changes: 2 additions & 2 deletions Source/WebKit/UIProcess/WebPageProxy.h
Original file line number Diff line number Diff line change
Expand Up @@ -2438,8 +2438,8 @@ class WebPageProxy final : public API::ObjectImpl<API::Object::Type::Page>, publ
#endif // ENABLE(WRITING_TOOLS)

#if ENABLE(WRITING_TOOLS_UI)
void addTextAnimationTypeForID(IPC::Connection&, const WTF::UUID&, const WebKit::TextAnimationData&, const WebCore::TextIndicatorData&);
void removeTextAnimationForID(IPC::Connection&, const WTF::UUID&);
void addTextAnimationForAnimationID(IPC::Connection&, const WTF::UUID&, const WebKit::TextAnimationData&, const WebCore::TextIndicatorData&);
void removeTextAnimationForAnimationID(IPC::Connection&, const WTF::UUID&);
void enableSourceTextAnimationAfterElementWithID(const String& elementID, const WTF::UUID&);
void enableTextAnimationTypeForElementWithID(const String& elementID, const WTF::UUID&);

Expand Down
4 changes: 2 additions & 2 deletions Source/WebKit/UIProcess/WebPageProxy.messages.in
Original file line number Diff line number Diff line change
Expand Up @@ -520,8 +520,8 @@ messages -> WebPageProxy {
#endif

#if ENABLE(WRITING_TOOLS_UI)
AddTextAnimationTypeForID(WTF::UUID uuid, struct WebKit::TextAnimationData styleData, struct WebCore::TextIndicatorData indicatorData)
removeTextAnimationForID(WTF::UUID uuid)
AddTextAnimationForAnimationID(WTF::UUID uuid, struct WebKit::TextAnimationData styleData, struct WebCore::TextIndicatorData indicatorData)
RemoveTextAnimationForAnimationID(WTF::UUID uuid)
#endif

CreateAppHighlightInSelectedRange)
Expand Down
4 changes: 2 additions & 2 deletions Source/WebKit/UIProcess/ios/WKContentViewInteraction.h
Original file line number Diff line number Diff line change
Expand Up @@ -846,8 +846,8 @@ FOR_EACH_PRIVATE_WKCONTENTVIEW_ACTION(DECLARE_WKCONTENTVIEW_ACTION_FOR_WEB_VIEW)
- (void)clearTextIndicator:(WebCore::TextIndicatorDismissalAnimation)animation;

#if ENABLE(WRITING_TOOLS_UI)
- (void)addTextAnimationTypeForID:(NSUUID *)uuid withStyleType:(WKTextAnimationType)styleType;
- (void)removeTextAnimationForID:(NSUUID *)uuid;
- (void)addTextAnimationForAnimationID:(NSUUID *)uuid withStyleType:(WKTextAnimationType)styleType;
- (void)removeTextAnimationForAnimationID:(NSUUID *)uuid;
#endif

@property (nonatomic, readonly) BOOL _shouldUseContextMenus;
Expand Down
8 changes: 4 additions & 4 deletions Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm
Original file line number Diff line number Diff line change
Expand Up @@ -11754,26 +11754,26 @@ - (void)startFadeOut

#if ENABLE(WRITING_TOOLS_UI)

- (void)addTextAnimationTypeForID:(NSUUID *)uuid withStyleType:(WKTextAnimationType)styleType
- (void)addTextAnimationForAnimationID:(NSUUID *)uuid withStyleType:(WKTextAnimationType)styleType
{
if (!_page->preferences().textAnimationsEnabled())
return;

if (!_textAnimationManager)
_textAnimationManager = adoptNS([WebKit::allocWKSTextAnimationManagerInstance() initWithDelegate:self]);

[_textAnimationManager addTextAnimationTypeForID:uuid withStyleType:styleType];
[_textAnimationManager addTextAnimationForAnimationID:uuid withStyleType:styleType];
}

- (void)removeTextAnimationForID:(NSUUID *)uuid
- (void)removeTextAnimationForAnimationID:(NSUUID *)uuid
{
if (!_page->preferences().textAnimationsEnabled())
return;

if (!_textAnimationManager)
return;

[_textAnimationManager removeTextAnimationForID:uuid];
[_textAnimationManager removeTextAnimationForAnimationID:uuid];
}

#endif
Expand Down
4 changes: 2 additions & 2 deletions Source/WebKit/UIProcess/mac/WKTextAnimationManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ class WebViewImpl;
@interface WKTextAnimationManager : NSObject

- (instancetype)initWithWebViewImpl:(WebKit::WebViewImpl&)view;
- (void)addTextAnimationTypeForID:(NSUUID *)uuid withData:(const WebKit::TextAnimationData&)data;
- (void)removeTextAnimationForID:(NSUUID *)uuid;
- (void)addTextAnimationForAnimationID:(NSUUID *)uuid withData:(const WebKit::TextAnimationData&)data;
- (void)removeTextAnimationForAnimationID:(NSUUID *)uuid;

- (BOOL)hasActiveTextAnimationType;

Expand Down
6 changes: 3 additions & 3 deletions Source/WebKit/UIProcess/mac/WKTextAnimationManager.mm
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ - (instancetype)initWithWebViewImpl:(WebKit::WebViewImpl&)webView
return self;
}

- (void)addTextAnimationTypeForID:(NSUUID *)uuid withData:(const WebKit::TextAnimationData&)data
- (void)addTextAnimationForAnimationID:(NSUUID *)uuid withData:(const WebKit::TextAnimationData&)data
{
RetainPtr<id<_WTTextEffect>> effect;
RetainPtr chunk = adoptNS([PAL::alloc_WTTextChunkInstance() initChunkWithIdentifier:uuid.UUIDString]);
Expand Down Expand Up @@ -118,7 +118,7 @@ - (void)addTextAnimationTypeForID:(NSUUID *)uuid withData:(const WebKit::TextAni
[_chunkToEffect setObject:effectData.get() forKey:uuid];
}

- (void)removeTextAnimationForID:(NSUUID *)uuid
- (void)removeTextAnimationForAnimationID:(NSUUID *)uuid
{
RetainPtr effectData = [_chunkToEffect objectForKey:uuid];
if (effectData) {
Expand Down Expand Up @@ -148,7 +148,7 @@ - (void)restoreTextAnimationType
for (NSUUID *chunkID in [_chunkToEffect allKeys]) {
RetainPtr effectData = [_chunkToEffect objectForKey:chunkID];
if ([effectData type] == WebKit::TextAnimationType::Initial)
[self addTextAnimationTypeForID:chunkID withData: { WebKit::TextAnimationType::Initial, WTF::UUID(WTF::UUID::emptyValue) }];
[self addTextAnimationForAnimationID:chunkID withData: { WebKit::TextAnimationType::Initial, WTF::UUID(WTF::UUID::emptyValue) }];
}
}

Expand Down
4 changes: 2 additions & 2 deletions Source/WebKit/UIProcess/mac/WebViewImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -747,8 +747,8 @@ class WebViewImpl final : public CanMakeWeakPtr<WebViewImpl>, public CanMakeChec
#endif

#if ENABLE(WRITING_TOOLS_UI)
void addTextAnimationTypeForID(WTF::UUID, const WebKit::TextAnimationData&);
void removeTextAnimationForID(WTF::UUID);
void addTextAnimationForAnimationID(WTF::UUID, const WebKit::TextAnimationData&);
void removeTextAnimationForAnimationID(WTF::UUID);
#endif

#if HAVE(INLINE_PREDICTIONS)
Expand Down
Loading