Changeset 261981 in webkit
- Timestamp:
- May 20, 2020 6:59:23 PM (4 years ago)
- Location:
- trunk/Source
- Files:
-
- 38 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r261980 r261981 1 2020-05-20 Darin Adler <darin@apple.com> 2 3 Dictation context should be an object identifier, not a type-punned pointer 4 https://bugs.webkit.org/show_bug.cgi?id=212174 5 6 Reviewed by Anders Carlsson. 7 8 * Headers.cmake: Added DictationContext.h. 9 * Sources.txt: Removed DictationAlternative.cpp. 10 * WebCore.xcodeproj/project.pbxproj: Added DictationContext.h, removed DictationAlternative.cpp. 11 12 * dom/DocumentMarker.h: Use DictationContext instead of uint64_t. 13 * editing/AlternativeTextController.cpp: 14 (WebCore::AlternativeTextController::timerFired): Ditto. 15 * editing/AlternativeTextController.h: Ditto. 16 17 * editing/DictationAlternative.h: Use DictationContext instead of uint64_t, but also 18 use CharacterRange rather than two "unsigned" values. Also convert into a simple 19 struct without constructors; don't really need those. 20 21 * editing/DictationAlternative.cpp: Removed. 22 23 * editing/DictationCommand.cpp: 24 (WebCore::DictationCommand::collectDictationAlternativesInRange): Updated for 25 changes to DictationAlternative. 26 27 * editing/DictationContext.h: Added. 28 29 * editing/Editor.h: Forward declare DictationAlternative rather than including 30 its header. 31 32 * editing/cocoa/AlternativeTextContextController.h: Use a pair of maps to bind NSTextAlternatives 33 objects to object identifiers. Remove unnecessary explicit constructor and destructor. Also removed 34 unnecessary use of WTF_MAKE_FAST_ALLOCATED, since this is only used as a data member of another 35 class. Removed unused invalidContext constant. 36 * editing/cocoa/AlternativeTextContextController.mm: Removed the unneeded includes. 37 This file treats NSTextAlternatives as an opaque Objective-C type and so doesn't need 38 any details of that class. 39 (WebCore::AlternativeTextContextController::addAlternatives): Changed to return a 40 DictationContext and use two maps, using HashMap::ensure to avoid double hashing. 41 (WebCore::AlternativeTextContextController::alternativesForContext): Added a null check. 42 (WebCore::AlternativeTextContextController::removeAlternativesForContext): Ditto. Also 43 updated to remove from both maps. 44 (WebCore::AlternativeTextContextController::clear): Clear both maps. 45 46 * editing/cocoa/AlternativeTextUIController.h: Since this header is used only from Objective-C, 47 removed use of OBJC_CLASS. Put showAlternatives inside a macOS-specific block. Use DictationContext 48 instead of uint64_t. 49 * editing/cocoa/AlternativeTextUIController.mm: 50 (WebCore::AlternativeTextUIController::addAlternatives): Use DictationContext instead of uint64_t. 51 (WebCore::AlternativeTextUIController::alternativesForContext): Ditto. 52 (WebCore::AlternativeTextUIController::showAlternatives): Ditto. 53 (WebCore::AlternativeTextUIController::handleAcceptedAlternative): Ditto. 54 (WebCore::AlternativeTextUIController::removeAlternatives): Ditto. 55 56 * page/AlternativeTextClient.h: Use DictationContext instead of uint64_t. 57 1 58 2020-05-20 Zalan Bujtas <zalan@apple.com> 2 59 -
trunk/Source/WebCore/Headers.cmake
r261791 r261981 496 496 editing/CompositionUnderline.h 497 497 editing/DictationAlternative.h 498 editing/DictationContext.h 498 499 editing/DictionaryPopupInfo.h 499 500 editing/EditAction.h -
trunk/Source/WebCore/Sources.txt
r261793 r261981 1041 1041 editing/DeleteFromTextNodeCommand.cpp 1042 1042 editing/DeleteSelectionCommand.cpp 1043 editing/DictationAlternative.cpp1044 1043 editing/DictationCommand.cpp 1045 1044 editing/EditAction.cpp -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r261883 r261981 2684 2684 9382AAB40D8C386100F357A6 /* NodeWithIndex.h in Headers */ = {isa = PBXBuildFile; fileRef = 9382AAB10D8C386100F357A6 /* NodeWithIndex.h */; }; 2685 2685 9382DF5810A8D5C900925652 /* ColorSpace.h in Headers */ = {isa = PBXBuildFile; fileRef = 9382DF5710A8D5C900925652 /* ColorSpace.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2686 938430B42475DE40003F9617 /* DictationContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 938430B22475DE3F003F9617 /* DictationContext.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2686 2687 938E65F109F09840008A48EC /* JSHTMLElementWrapperFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 938E65F009F09840008A48EC /* JSHTMLElementWrapperFactory.h */; }; 2687 2688 938E666209F09B87008A48EC /* JSHTMLCanvasElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 938E666109F09B87008A48EC /* JSHTMLCanvasElement.h */; }; … … 10894 10895 9382AAB10D8C386100F357A6 /* NodeWithIndex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NodeWithIndex.h; sourceTree = "<group>"; }; 10895 10896 9382DF5710A8D5C900925652 /* ColorSpace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColorSpace.h; sourceTree = "<group>"; }; 10897 938430B22475DE3F003F9617 /* DictationContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DictationContext.h; sourceTree = "<group>"; }; 10896 10898 938E65F009F09840008A48EC /* JSHTMLElementWrapperFactory.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JSHTMLElementWrapperFactory.h; path = DerivedSources/WebCore/JSHTMLElementWrapperFactory.h; sourceTree = BUILT_PRODUCTS_DIR; }; 10897 10899 938E65F609F0985D008A48EC /* JSHTMLElementWrapperFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JSHTMLElementWrapperFactory.cpp; path = DerivedSources/WebCore/JSHTMLElementWrapperFactory.cpp; sourceTree = BUILT_PRODUCTS_DIR; }; … … 14328 14330 CEBB8C3120786DCB00039547 /* FetchIdioms.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FetchIdioms.h; sourceTree = "<group>"; }; 14329 14331 CEBB8C3220786DCB00039547 /* FetchIdioms.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FetchIdioms.cpp; sourceTree = "<group>"; }; 14330 CECADFC2153778FF00E37068 /* DictationAlternative.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DictationAlternative.cpp; sourceTree = "<group>"; };14331 14332 CECADFC3153778FF00E37068 /* DictationAlternative.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DictationAlternative.h; sourceTree = "<group>"; }; 14332 14333 CECADFC4153778FF00E37068 /* DictationCommand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DictationCommand.cpp; sourceTree = "<group>"; }; … … 21958 21959 93309D91099E64910056E581 /* DeleteSelectionCommand.cpp */, 21959 21960 93309D92099E64910056E581 /* DeleteSelectionCommand.h */, 21960 CECADFC2153778FF00E37068 /* DictationAlternative.cpp */,21961 21961 CECADFC3153778FF00E37068 /* DictationAlternative.h */, 21962 21962 CECADFC4153778FF00E37068 /* DictationCommand.cpp */, 21963 21963 CECADFC5153778FF00E37068 /* DictationCommand.h */, 21964 938430B22475DE3F003F9617 /* DictationContext.h */, 21964 21965 2D5646AF1B8F8493003C4994 /* DictionaryPopupInfo.h */, 21965 21966 F49E98E421DEE6C1009AE55E /* EditAction.cpp */, … … 30253 30254 CECADFC9153778FF00E37068 /* DictationCommand.h in Headers */, 30254 30255 D0BD4F5D1408850F006839B6 /* DictationCommandIOS.h in Headers */, 30256 938430B42475DE40003F9617 /* DictationContext.h in Headers */, 30255 30257 937FF3D51A1012D6008EBA31 /* DictionaryLookup.h in Headers */, 30256 30258 2D5646B01B8F8493003C4994 /* DictionaryPopupInfo.h in Headers */, -
trunk/Source/WebCore/dom/DocumentMarker.h
r259575 r261981 21 21 #pragma once 22 22 23 #include "DictationContext.h" 23 24 #include "SimpleRange.h" 24 25 #include <wtf/Forward.h> … … 86 87 87 88 struct DictationData { 88 uint64_t context;89 DictationContext context; 89 90 String originalText; 90 91 }; -
trunk/Source/WebCore/editing/AlternativeTextController.cpp
r261018 r261981 287 287 if (!m_rangeWithAlternative) 288 288 return; 289 uint64_t dictationContext = WTF::get<AlternativeDictationContext>(m_details);289 auto dictationContext = WTF::get<DictationContext>(m_details); 290 290 if (!dictationContext) 291 291 return; … … 293 293 m_isActive = true; 294 294 if (!boundingBox.isEmpty()) { 295 if ( AlternativeTextClient*client = alternativeTextClient())295 if (auto client = alternativeTextClient()) 296 296 client->showDictationAlternativeUI(boundingBox, dictationContext); 297 297 } -
trunk/Source/WebCore/editing/AlternativeTextController.h
r260831 r261981 106 106 #if USE(AUTOCORRECTION_PANEL) 107 107 using AutocorrectionReplacement = String; 108 using AlternativeDictationContext = uint64_t;109 108 110 109 struct AlternativeTextInfo { … … 113 112 AlternativeTextType type; 114 113 String originalText; 115 Variant<AutocorrectionReplacement, AlternativeDictationContext> details;114 Variant<AutocorrectionReplacement, DictationContext> details; 116 115 }; 117 116 … … 135 134 AlternativeTextType m_type; 136 135 String m_originalText; 137 Variant<AutocorrectionReplacement, AlternativeDictationContext> m_details;136 Variant<AutocorrectionReplacement, DictationContext> m_details; 138 137 139 138 String m_originalStringForLastDeletedAutocorrection; -
trunk/Source/WebCore/editing/DictationAlternative.h
r208646 r261981 26 26 #pragma once 27 27 28 #include <stdint.h> 28 #include "CharacterRange.h" 29 #include "DictationContext.h" 29 30 30 31 namespace WebCore { 32 31 33 struct DictationAlternative { 32 WEBCORE_EXPORT DictationAlternative(unsigned start, unsigned length, uint64_t context); 33 WEBCORE_EXPORT DictationAlternative(); 34 unsigned rangeStart; 35 unsigned rangeLength; 36 37 // This need to be 64 bit becauese it actually holds a pointer in WebKit. 38 uint64_t dictationContext; 34 CharacterRange range; 35 DictationContext context; 39 36 }; 40 37 -
trunk/Source/WebCore/editing/DictationCommand.cpp
r259575 r261981 66 66 auto& markerController = textNode.document().markers(); 67 67 for (auto& alternative : m_alternatives) { 68 DocumentMarker::DictationData data { alternative. dictationContext, textToBeInserted.substring(alternative.rangeStart, alternative.rangeLength) };69 markerController.addMarker(textNode, alternative.range Start + offsetOfInsertion, alternative.rangeLength, DocumentMarker::DictationAlternatives, WTFMove(data));70 markerController.addMarker(textNode, alternative.range Start + offsetOfInsertion, alternative.rangeLength, DocumentMarker::SpellCheckingExemption);68 DocumentMarker::DictationData data { alternative.context, textToBeInserted.substring(alternative.range.location, alternative.range.length) }; 69 markerController.addMarker(textNode, alternative.range.location + offsetOfInsertion, alternative.range.length, DocumentMarker::DictationAlternatives, WTFMove(data)); 70 markerController.addMarker(textNode, alternative.range.location + offsetOfInsertion, alternative.range.length, DocumentMarker::SpellCheckingExemption); 71 71 } 72 72 } … … 133 133 { 134 134 for (auto& alternative : m_alternatives) { 135 if (alternative.range Start >= rangeStart && (alternative.rangeStart + alternative.rangeLength) <= rangeStart + rangeLength)136 alternatives.append( DictationAlternative(alternative.rangeStart - rangeStart, alternative.rangeLength, alternative.dictationContext));135 if (alternative.range.location >= rangeStart && (alternative.range.location + alternative.range.length) <= rangeStart + rangeLength) 136 alternatives.append({ { alternative.range.location - rangeStart, alternative.range.length }, alternative.context }); 137 137 } 138 138 -
trunk/Source/WebCore/editing/DictationContext.h
r261980 r261981 1 1 /* 2 * Copyright (C) 20 12Apple Inc. All rights reserved.2 * Copyright (C) 2020 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 24 24 */ 25 25 26 #include "config.h" 27 #include "DictationAlternative.h" 26 #pragma once 27 28 #include <wtf/ObjectIdentifier.h> 28 29 29 30 namespace WebCore { 30 31 31 DictationAlternative::DictationAlternative(unsigned start, unsigned length, uint64_t context) 32 : rangeStart(start) 33 , rangeLength(length) 34 , dictationContext(context) 35 { 36 } 37 38 DictationAlternative::DictationAlternative() 39 : rangeStart(0) 40 , rangeLength(0) 41 , dictationContext(0) 42 { 43 } 32 enum class DictationContextType { }; 33 using DictationContext = ObjectIdentifier<DictationContextType>; 44 34 45 } 35 } // namespace WebCore -
trunk/Source/WebCore/editing/Editor.h
r261897 r261981 27 27 28 28 #include "CompositionUnderline.h" 29 #include "DictationAlternative.h"30 29 #include "DocumentMarker.h" 31 30 #include "EditAction.h" … … 87 86 88 87 struct CompositionHighlight; 88 struct DictationAlternative; 89 89 struct FontAttributes; 90 90 struct PasteboardPlainText; -
trunk/Source/WebCore/editing/cocoa/AlternativeTextContextController.h
r261232 r261981 24 24 */ 25 25 26 #import <wtf/Forward.h>26 #import "DictationContext.h" 27 27 #import <wtf/HashMap.h> 28 #import <wtf/RetainPtr.h> 28 29 29 30 @class NSTextAlternatives; … … 32 33 33 34 class AlternativeTextContextController { 34 WTF_MAKE_FAST_ALLOCATED;35 35 public: 36 WEBCORE_EXPORT AlternativeTextContextController(); 37 WEBCORE_EXPORT ~AlternativeTextContextController(); 38 39 uint64_t addAlternatives(NSTextAlternatives *); 40 36 DictationContext addAlternatives(NSTextAlternatives *); 37 void removeAlternativesForContext(DictationContext); 41 38 void clear(); 42 39 43 NSTextAlternatives *alternativesForContext(uint64_t context); 44 45 void removeAlternativesForContext(uint64_t context); 46 47 static constexpr uint64_t invalidContext = 0; 40 NSTextAlternatives *alternativesForContext(DictationContext) const; 48 41 49 42 private: 50 HashMap<uint64_t, RetainPtr<NSTextAlternatives>> m_alternativesObjectMap; 43 HashMap<DictationContext, RetainPtr<NSTextAlternatives>> m_alternatives; 44 HashMap<RetainPtr<NSTextAlternatives>, DictationContext> m_contexts; 51 45 }; 52 46 -
trunk/Source/WebCore/editing/cocoa/AlternativeTextContextController.mm
r261232 r261981 27 27 #import "AlternativeTextContextController.h" 28 28 29 #import <wtf/RetainPtr.h>30 31 #if USE(APPKit)32 #import <AppKit/NSTextAlternatives.h>33 #elif PLATFORM(IOS_FAMILY)34 #import <pal/spi/ios/UIKitSPI.h>35 #endif36 37 29 namespace WebCore { 38 30 39 AlternativeTextContextController::AlternativeTextContextController() = default; 40 41 AlternativeTextContextController::~AlternativeTextContextController() = default; 42 43 uint64_t AlternativeTextContextController::addAlternatives(NSTextAlternatives *alternatives) 31 DictationContext AlternativeTextContextController::addAlternatives(NSTextAlternatives *alternatives) 44 32 { 45 // FIXME: Turning a pointer into an integer is a flawed algorithm to generate a unique ID. Can lead to aliasing to a new object that happens to occupy the same memory as an old one.46 uint64_t context = reinterpret_cast<uint64_t>(alternatives);47 if (!context)48 return invalidContext;49 if (alternativesForContext(context))33 if (!alternatives) 34 return { }; 35 return m_contexts.ensure(alternatives, [&] { 36 auto context = DictationContext::generate(); 37 m_alternatives.add(context, alternatives); 50 38 return context; 51 auto result = m_alternativesObjectMap.add(context, alternatives); 52 return result.isNewEntry ? context : invalidContext; 39 }).iterator->value; 53 40 } 54 41 55 NSTextAlternatives *AlternativeTextContextController::alternativesForContext( uint64_t context)42 NSTextAlternatives *AlternativeTextContextController::alternativesForContext(DictationContext context) const 56 43 { 57 return m_alternativesObjectMap.get(context).get(); 44 if (!context) 45 return nil; 46 return m_alternatives.get(context).get(); 58 47 } 59 48 60 void AlternativeTextContextController::removeAlternativesForContext( uint64_t context)49 void AlternativeTextContextController::removeAlternativesForContext(DictationContext context) 61 50 { 62 m_alternativesObjectMap.remove(context); 51 if (!context) 52 return; 53 if (auto alternatives = m_alternatives.take(context)) 54 m_contexts.remove(alternatives); 63 55 } 64 56 65 57 void AlternativeTextContextController::clear() 66 58 { 67 m_alternativesObjectMap.clear(); 59 m_alternatives.clear(); 60 m_contexts.clear(); 68 61 } 69 62 -
trunk/Source/WebCore/editing/cocoa/AlternativeTextUIController.h
r261232 r261981 25 25 26 26 #import "AlternativeTextContextController.h" 27 #import <wtf/RetainPtr.h>28 27 29 OBJC_CLASS NSTextAlternatives; 30 OBJC_CLASS NSView; 28 @class NSView; 31 29 32 30 namespace WebCore { … … 37 35 WTF_MAKE_FAST_ALLOCATED; 38 36 public: 39 AlternativeTextUIController() = default; 40 41 WEBCORE_EXPORT uint64_t addAlternatives(NSTextAlternatives *); // Returns a context ID. 42 37 WEBCORE_EXPORT DictationContext addAlternatives(NSTextAlternatives *); 38 WEBCORE_EXPORT void removeAlternatives(DictationContext); 43 39 WEBCORE_EXPORT void clear(); 44 40 41 WEBCORE_EXPORT Vector<String> alternativesForContext(DictationContext); 42 43 #if USE(APPKIT) 45 44 using AcceptanceHandler = void (^)(NSString *); 46 WEBCORE_EXPORT void showAlternatives(NSView *, const FloatRect& boundingBoxOfPrimaryString, uint64_t context, AcceptanceHandler); 47 48 void WEBCORE_EXPORT removeAlternatives(uint64_t context); 49 50 WEBCORE_EXPORT Vector<String> alternativesForContext(uint64_t context); 45 WEBCORE_EXPORT void showAlternatives(NSView *, const FloatRect& boundingBoxOfPrimaryString, DictationContext, AcceptanceHandler); 46 #endif 51 47 52 48 private: 53 49 #if USE(APPKIT) 54 void handleAcceptedAlternative(NSString *, uint64_t context, NSTextAlternatives *);50 void handleAcceptedAlternative(NSString *, DictationContext, NSTextAlternatives *); 55 51 void dismissAlternatives(); 52 #endif 56 53 54 AlternativeTextContextController m_contextController; 55 #if USE(APPKIT) 57 56 RetainPtr<NSView> m_view; 58 57 #endif 59 AlternativeTextContextController m_contextController;60 58 }; 61 59 -
trunk/Source/WebCore/editing/cocoa/AlternativeTextUIController.mm
r261232 r261981 42 42 namespace WebCore { 43 43 44 uint64_t AlternativeTextUIController::addAlternatives(NSTextAlternatives *alternatives)44 DictationContext AlternativeTextUIController::addAlternatives(NSTextAlternatives *alternatives) 45 45 { 46 46 return m_contextController.addAlternatives(alternatives); 47 47 } 48 48 49 Vector<String> AlternativeTextUIController::alternativesForContext( uint64_t context)49 Vector<String> AlternativeTextUIController::alternativesForContext(DictationContext context) 50 50 { 51 51 return makeVector<String>(m_contextController.alternativesForContext(context).alternativeStrings); … … 57 57 } 58 58 59 void AlternativeTextUIController::showAlternatives(NSView *view, const FloatRect& boundingBoxOfPrimaryString, uint64_t context, AcceptanceHandler acceptanceHandler) 59 #if USE(APPKIT) 60 61 void AlternativeTextUIController::showAlternatives(NSView *view, const FloatRect& boundingBoxOfPrimaryString, DictationContext context, AcceptanceHandler acceptanceHandler) 60 62 { 61 #if USE(APPKIT)62 63 dismissAlternatives(); 63 64 if (!view) … … 76 77 } 77 78 }]; 78 #else79 UNUSED_PARAM(view);80 UNUSED_PARAM(boundingBoxOfPrimaryString);81 UNUSED_PARAM(context);82 UNUSED_PARAM(acceptanceHandler);83 #endif84 79 } 85 80 86 #if USE(APPKIT) 87 88 void AlternativeTextUIController::handleAcceptedAlternative(NSString *acceptedAlternative, uint64_t context, NSTextAlternatives *alternatives) 81 void AlternativeTextUIController::handleAcceptedAlternative(NSString *acceptedAlternative, DictationContext context, NSTextAlternatives *alternatives) 89 82 { 90 83 [alternatives noteSelectedAlternativeString:acceptedAlternative]; … … 101 94 #endif 102 95 103 void AlternativeTextUIController::removeAlternatives( uint64_t context)96 void AlternativeTextUIController::removeAlternatives(DictationContext context) 104 97 { 105 98 m_contextController.removeAlternativesForContext(context); -
trunk/Source/WebCore/page/AlternativeTextClient.h
r253048 r261981 26 26 #pragma once 27 27 28 #include "DictationContext.h" 28 29 #include "FloatRect.h" 29 30 #include <wtf/Vector.h> … … 61 62 #endif 62 63 #if USE(DICTATION_ALTERNATIVES) 63 virtual void showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, uint64_t dictationContext) = 0;64 virtual void removeDictationAlternatives( uint64_t dictationContext) = 0;65 virtual Vector<String> dictationAlternatives( uint64_t dictationContext) = 0;64 virtual void showDictationAlternativeUI(const FloatRect& boundingBoxOfDictatedText, DictationContext) = 0; 65 virtual void removeDictationAlternatives(DictationContext) = 0; 66 virtual Vector<String> dictationAlternatives(DictationContext) = 0; 66 67 #endif 67 68 }; -
trunk/Source/WebKit/ChangeLog
r261978 r261981 1 2020-05-20 Darin Adler <darin@apple.com> 2 3 Dictation context should be an object identifier, not a type-punned pointer 4 https://bugs.webkit.org/show_bug.cgi?id=212174 5 6 Reviewed by Anders Carlsson. 7 8 * Scripts/webkit/messages.py: Added DictationContext to the list of types that are 9 not C++ classes. 10 11 * Shared/WebCoreArgumentCoders.cpp: 12 (IPC::ArgumentCoder<DictationAlternative>::encode): Updated for change to 13 DictationAlternative structure. 14 (IPC::ArgumentCoder<DictationAlternative>::decode): Ditto. 15 16 * UIProcess/Cocoa/PageClientImplCocoa.h: Use DictationContext instead of uint64_t. 17 * UIProcess/Cocoa/PageClientImplCocoa.mm: 18 (WebKit::PageClientImplCocoa::addDictationAlternatives): Ditto. 19 (WebKit::PageClientImplCocoa::removeDictationAlternatives): Ditto. 20 (WebKit::PageClientImplCocoa::dictationAlternatives): Ditto. 21 * UIProcess/Cocoa/WebPageProxyCocoa.mm: 22 (WebKit::WebPageProxy::insertDictatedTextAsync): Ditto. 23 * UIProcess/PageClient.h: Ditto. 24 * UIProcess/WebPageProxy.cpp: 25 (WebKit::WebPageProxy::showDictationAlternativeUI): Ditto. 26 (WebKit::WebPageProxy::removeDictationAlternatives): Ditto. 27 (WebKit::WebPageProxy::dictationAlternatives): Ditto. 28 * UIProcess/WebPageProxy.h: Ditto. 29 * UIProcess/WebPageProxy.messages.in: Ditto. 30 * UIProcess/ios/PageClientImplIOS.h: Ditto. 31 * UIProcess/ios/PageClientImplIOS.mm: 32 (WebKit::PageClientImpl::showDictationAlternativeUI): Ditto. 33 * UIProcess/mac/PageClientImplMac.h: Ditto. 34 * UIProcess/mac/PageClientImplMac.mm: 35 (WebKit::PageClientImpl::showDictationAlternativeUI): Ditto. 36 37 * UIProcess/mac/WebPageProxyMac.mm: Removed unneeded include of 38 DictationAlternative.h. 39 40 * WebProcess/WebCoreSupport/WebAlternativeTextClient.h: Use DictationContext 41 instead of uint64_t. Also marked class final and made everything private. 42 * WebProcess/WebCoreSupport/mac/WebAlternativeTextClient.cpp: 43 (WebKit::WebAlternativeTextClient::removeDictationAlternatives): Ditto. 44 (WebKit::WebAlternativeTextClient::showDictationAlternativeUI): Ditto. 45 (WebKit::WebAlternativeTextClient::dictationAlternatives): Ditto. 46 1 47 2020-05-20 Tim Horton <timothy_horton@apple.com> 2 48 -
trunk/Source/WebKit/Scripts/webkit/messages.py
r261900 r261981 207 207 'String', 208 208 'WebCore::ColorSpace', 209 'WebCore::DictationContext', 209 210 'WebCore::DocumentIdentifier', 210 211 'WebCore::DocumentOrWorkerIdentifier', -
trunk/Source/WebKit/Shared/WebCoreArgumentCoders.cpp
r261848 r261981 1963 1963 #endif // USE(LIBWPE) 1964 1964 1965 void ArgumentCoder<DictationAlternative>::encode(Encoder& encoder, const DictationAlternative& dictationAlternative) 1966 { 1967 encoder << dictationAlternative.rangeStart; 1968 encoder << dictationAlternative.rangeLength; 1969 encoder << dictationAlternative.dictationContext; 1965 void ArgumentCoder<DictationAlternative>::encode(Encoder& encoder, const DictationAlternative& alternative) 1966 { 1967 encoder << alternative.range << alternative.context; 1970 1968 } 1971 1969 1972 1970 Optional<DictationAlternative> ArgumentCoder<DictationAlternative>::decode(Decoder& decoder) 1973 1971 { 1974 Optional<unsigned> rangeStart; 1975 decoder >> rangeStart; 1976 if (!rangeStart) 1977 return WTF::nullopt; 1978 1979 Optional<unsigned> rangeLength; 1980 decoder >> rangeLength; 1981 if (!rangeLength) 1982 return WTF::nullopt; 1983 1984 Optional<uint64_t> dictationContext; 1985 decoder >> dictationContext; 1986 if (!dictationContext) 1987 return WTF::nullopt; 1988 1989 return {{ WTFMove(*rangeStart), WTFMove(*rangeLength), WTFMove(*dictationContext) }}; 1972 Optional<CharacterRange> range; 1973 decoder >> range; 1974 if (!range) 1975 return WTF::nullopt; 1976 1977 Optional<DictationContext> context; 1978 decoder >> context; 1979 if (!context) 1980 return WTF::nullopt; 1981 1982 return {{ *range, *context }}; 1990 1983 } 1991 1984 -
trunk/Source/WebKit/UIProcess/Cocoa/PageClientImplCocoa.h
r261232 r261981 63 63 #endif 64 64 65 uint64_t addDictationAlternatives(NSTextAlternatives *) final;66 void removeDictationAlternatives( uint64_t dictationContext) final;67 Vector<String> dictationAlternatives( uint64_t dictationContext) final;65 WebCore::DictationContext addDictationAlternatives(NSTextAlternatives *) final; 66 void removeDictationAlternatives(WebCore::DictationContext) final; 67 Vector<String> dictationAlternatives(WebCore::DictationContext) final; 68 68 69 69 protected: -
trunk/Source/WebKit/UIProcess/Cocoa/PageClientImplCocoa.mm
r261833 r261981 97 97 } 98 98 99 uint64_t PageClientImplCocoa::addDictationAlternatives(NSTextAlternatives *alternatives)99 WebCore::DictationContext PageClientImplCocoa::addDictationAlternatives(NSTextAlternatives *alternatives) 100 100 { 101 101 return m_alternativeTextUIController->addAlternatives(alternatives); 102 102 } 103 103 104 void PageClientImplCocoa::removeDictationAlternatives( uint64_t dictationContext)104 void PageClientImplCocoa::removeDictationAlternatives(WebCore::DictationContext dictationContext) 105 105 { 106 106 m_alternativeTextUIController->removeAlternatives(dictationContext); 107 107 } 108 108 109 Vector<String> PageClientImplCocoa::dictationAlternatives( uint64_t dictationContext)109 Vector<String> PageClientImplCocoa::dictationAlternatives(WebCore::DictationContext dictationContext) 110 110 { 111 111 return m_alternativeTextUIController->alternativesForContext(dictationContext); -
trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm
r261617 r261981 250 250 Vector<DictationAlternative> dictationAlternatives; 251 251 for (const auto& alternativeWithRange : dictationAlternativesWithRange) { 252 uint64_t dictationContext = pageClient().addDictationAlternatives(alternativeWithRange.alternatives.get()); 253 if (dictationContext) 254 dictationAlternatives.append(DictationAlternative(alternativeWithRange.range.location, alternativeWithRange.range.length, dictationContext)); 252 if (auto context = pageClient().addDictationAlternatives(alternativeWithRange.alternatives.get())) 253 dictationAlternatives.append({ alternativeWithRange.range, context }); 255 254 } 256 255 -
trunk/Source/WebKit/UIProcess/PageClient.h
r261802 r261981 362 362 363 363 #if USE(DICTATION_ALTERNATIVES) 364 virtual uint64_t addDictationAlternatives(NSTextAlternatives *) = 0;365 virtual void removeDictationAlternatives( uint64_t dictationContext) = 0;366 virtual void showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, uint64_t dictationContext) = 0;367 virtual Vector<String> dictationAlternatives( uint64_t dictationContext) = 0;364 virtual WebCore::DictationContext addDictationAlternatives(NSTextAlternatives *) = 0; 365 virtual void removeDictationAlternatives(WebCore::DictationContext) = 0; 366 virtual void showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, WebCore::DictationContext) = 0; 367 virtual Vector<String> dictationAlternatives(WebCore::DictationContext) = 0; 368 368 #endif 369 369 -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r261948 r261981 8535 8535 #if USE(DICTATION_ALTERNATIVES) 8536 8536 8537 void WebPageProxy::showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, uint64_t dictationContext)8537 void WebPageProxy::showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, WebCore::DictationContext dictationContext) 8538 8538 { 8539 8539 pageClient().showDictationAlternativeUI(boundingBoxOfDictatedText, dictationContext); 8540 8540 } 8541 8541 8542 void WebPageProxy::removeDictationAlternatives( uint64_t dictationContext)8542 void WebPageProxy::removeDictationAlternatives(WebCore::DictationContext dictationContext) 8543 8543 { 8544 8544 pageClient().removeDictationAlternatives(dictationContext); 8545 8545 } 8546 8546 8547 void WebPageProxy::dictationAlternatives( uint64_t dictationContext, CompletionHandler<void(Vector<String>&&)>&& completionHandler)8547 void WebPageProxy::dictationAlternatives(WebCore::DictationContext dictationContext, CompletionHandler<void(Vector<String>&&)>&& completionHandler) 8548 8548 { 8549 8549 completionHandler(pageClient().dictationAlternatives(dictationContext)); -
trunk/Source/WebKit/UIProcess/WebPageProxy.h
r261966 r261981 76 76 #include <WebCore/Color.h> 77 77 #include <WebCore/DiagnosticLoggingClient.h> 78 #include <WebCore/DictationContext.h> 78 79 #include <WebCore/DragActions.h> 79 80 #include <WebCore/EventTrackingRegions.h> … … 2129 2130 2130 2131 #if USE(DICTATION_ALTERNATIVES) 2131 void showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, uint64_t dictationContext);2132 void removeDictationAlternatives( uint64_t dictationContext);2133 void dictationAlternatives( uint64_t dictationContext, CompletionHandler<void(Vector<String>&&)>&&);2132 void showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, WebCore::DictationContext); 2133 void removeDictationAlternatives(WebCore::DictationContext); 2134 void dictationAlternatives(WebCore::DictationContext, CompletionHandler<void(Vector<String>&&)>&&); 2134 2135 #endif 2135 2136 -
trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in
r261829 r261981 388 388 389 389 #if USE(DICTATION_ALTERNATIVES) 390 ShowDictationAlternativeUI(WebCore::FloatRect boundingBoxOfDictatedText, uint64_t dictationContext)391 RemoveDictationAlternatives( uint64_t dictationContext)392 DictationAlternatives( uint64_t dictationContext) -> (Vector<String> alternatives) Synchronous390 ShowDictationAlternativeUI(WebCore::FloatRect boundingBoxOfDictatedText, WebCore::DictationContext dictationContext) 391 RemoveDictationAlternatives(WebCore::DictationContext dictationContext) 392 DictationAlternatives(WebCore::DictationContext dictationContext) -> (Vector<String> alternatives) Synchronous 393 393 #endif 394 394 -
trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.h
r261640 r261981 46 46 enum class UndoOrRedo : bool; 47 47 48 class PageClientImpl : public PageClientImplCocoa48 class PageClientImpl final : public PageClientImplCocoa 49 49 #if ENABLE(FULLSCREEN_API) 50 50 , public WebFullScreenManagerProxyClient … … 268 268 WTF::Optional<unsigned> activeTouchIdentifierForGestureRecognizer(UIGestureRecognizer*) override; 269 269 270 void showDictationAlternativeUI(const WebCore::FloatRect&, uint64_t dictationContext) override;270 void showDictationAlternativeUI(const WebCore::FloatRect&, WebCore::DictationContext) final; 271 271 272 272 WeakObjCPtr<WKContentView> m_contentView; -
trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm
r261665 r261981 943 943 } 944 944 945 void PageClientImpl::showDictationAlternativeUI(const WebCore::FloatRect&, uint64_t)945 void PageClientImpl::showDictationAlternativeUI(const WebCore::FloatRect&, WebCore::DictationContext) 946 946 { 947 947 notImplemented(); -
trunk/Source/WebKit/UIProcess/mac/PageClientImplMac.h
r261320 r261981 181 181 void intrinsicContentSizeDidChange(const WebCore::IntSize& intrinsicContentSize) override; 182 182 183 void showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, uint64_t dictationContext) override;183 void showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, WebCore::DictationContext) final; 184 184 185 185 void setEditableElementIsFocused(bool) override; -
trunk/Source/WebKit/UIProcess/mac/PageClientImplMac.mm
r261320 r261981 681 681 } 682 682 683 void PageClientImpl::showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, uint64_t dictationContext)683 void PageClientImpl::showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, WebCore::DictationContext dictationContext) 684 684 { 685 685 if (!isViewVisible() || !isViewInWindow()) -
trunk/Source/WebKit/UIProcess/mac/WebPageProxyMac.mm
r261299 r261981 51 51 #import "WebProcessProxy.h" 52 52 #import <WebCore/AttributedString.h> 53 #import <WebCore/DictationAlternative.h>54 53 #import <WebCore/DictionaryLookup.h> 55 54 #import <WebCore/DragItem.h> -
trunk/Source/WebKit/WebProcess/WebCoreSupport/WebAlternativeTextClient.h
r253048 r261981 32 32 class WebPage; 33 33 34 class WebAlternativeTextClient : public WebCore::AlternativeTextClient {34 class WebAlternativeTextClient final : public WebCore::AlternativeTextClient { 35 35 WTF_MAKE_FAST_ALLOCATED; 36 36 public: 37 37 explicit WebAlternativeTextClient(WebPage*); 38 38 virtual ~WebAlternativeTextClient(); 39 40 private: 39 41 #if USE(AUTOCORRECTION_PANEL) 40 42 void showCorrectionAlternative(WebCore::AlternativeTextType, const WebCore::FloatRect& boundingBoxOfReplacedString, const String& replacedString, const String& replacementString, const Vector<String>& alternativeReplacementStrings) override; … … 43 45 void recordAutocorrectionResponse(WebCore::AutocorrectionResponse, const String& replacedString, const String& replacementString) override; 44 46 #endif 47 45 48 #if USE(DICTATION_ALTERNATIVES) 46 void showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, uint64_t dictationContext) override;47 void removeDictationAlternatives( uint64_t dictationContext) override;48 Vector<String> dictationAlternatives( uint64_t dictationContext) override;49 void showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, WebCore::DictationContext) final; 50 void removeDictationAlternatives(WebCore::DictationContext) final; 51 Vector<String> dictationAlternatives(WebCore::DictationContext) final; 49 52 #endif 50 53 51 private:52 54 #if !(USE(AUTOCORRECTION_PANEL) || USE(DICTATION_ALTERNATIVES)) 53 55 IGNORE_CLANG_WARNINGS_BEGIN("unused-private-field") -
trunk/Source/WebKit/WebProcess/WebCoreSupport/mac/WebAlternativeTextClient.cpp
r261232 r261981 70 70 #endif 71 71 72 void WebAlternativeTextClient::removeDictationAlternatives( uint64_t dictationContext)72 void WebAlternativeTextClient::removeDictationAlternatives(WebCore::DictationContext dictationContext) 73 73 { 74 74 m_page->send(Messages::WebPageProxy::RemoveDictationAlternatives(dictationContext)); 75 75 } 76 76 77 void WebAlternativeTextClient::showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, uint64_t dictationContext)77 void WebAlternativeTextClient::showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, WebCore::DictationContext dictationContext) 78 78 { 79 79 m_page->send(Messages::WebPageProxy::ShowDictationAlternativeUI(boundingBoxOfDictatedText, dictationContext)); 80 80 } 81 81 82 Vector<String> WebAlternativeTextClient::dictationAlternatives( uint64_t dictationContext)82 Vector<String> WebAlternativeTextClient::dictationAlternatives(WebCore::DictationContext dictationContext) 83 83 { 84 84 Vector<String> result; -
trunk/Source/WebKitLegacy/mac/ChangeLog
r261968 r261981 1 2020-05-20 Darin Adler <darin@apple.com> 2 3 Dictation context should be an object identifier, not a type-punned pointer 4 https://bugs.webkit.org/show_bug.cgi?id=212174 5 6 Reviewed by Anders Carlsson. 7 8 * WebCoreSupport/WebAlternativeTextClient.h: Use DictationContext instead of uint64_t. 9 * WebCoreSupport/WebAlternativeTextClient.mm: 10 (WebAlternativeTextClient::removeDictationAlternatives): Ditto. 11 (WebAlternativeTextClient::showDictationAlternativeUI): Ditto. 12 (WebAlternativeTextClient::dictationAlternatives): Ditto. 13 14 * WebView/WebHTMLView.mm: Added include of DictationAlternative.h, now needed because 15 it's forward declared in Editor.h. 16 * WebView/WebView.mm: Ditto. 17 (-[WebView _getWebCoreDictationAlternatives:fromTextAlternatives:]): Updated for change 18 to DictationAlternative. 19 (-[WebView _showDictationAlternativeUI:forDictationContext:]): Use DictationContext 20 instead of uint64_t. 21 (-[WebView _removeDictationAlternatives:]): Ditto. 22 (-[WebView _dictationAlternatives:]): Ditto. 23 * WebView/WebViewInternal.h: Updated for the above. 24 1 25 2020-05-20 Alex Christensen <achristensen@webkit.org> 2 26 -
trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebAlternativeTextClient.h
r261232 r261981 40 40 void recordAutocorrectionResponse(WebCore::AutocorrectionResponse, const String& replacedString, const String& replacementString) override; 41 41 #endif 42 void showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, uint64_t dictationContext) override;43 void removeDictationAlternatives( uint64_t dictationContext) override;44 Vector<String> dictationAlternatives( uint64_t dictationContext) override;42 void showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, WebCore::DictationContext) override; 43 void removeDictationAlternatives(WebCore::DictationContext) override; 44 Vector<String> dictationAlternatives(WebCore::DictationContext) override; 45 45 46 46 private: -
trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebAlternativeTextClient.mm
r261232 r261981 79 79 #endif 80 80 81 void WebAlternativeTextClient::removeDictationAlternatives( uint64_t dictationContext)81 void WebAlternativeTextClient::removeDictationAlternatives(DictationContext dictationContext) 82 82 { 83 83 [m_webView _removeDictationAlternatives:dictationContext]; 84 84 } 85 85 86 void WebAlternativeTextClient::showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, uint64_t dictationContext)86 void WebAlternativeTextClient::showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, DictationContext dictationContext) 87 87 { 88 88 [m_webView _showDictationAlternativeUI:boundingBoxOfDictatedText forDictationContext:dictationContext]; 89 89 } 90 90 91 Vector<String> WebAlternativeTextClient::dictationAlternatives( uint64_t dictationContext)91 Vector<String> WebAlternativeTextClient::dictationAlternatives(DictationContext dictationContext) 92 92 { 93 93 return [m_webView _dictationAlternatives:dictationContext]; -
trunk/Source/WebKitLegacy/mac/WebView/WebHTMLView.mm
r261848 r261981 84 84 #import <WebCore/ContextMenu.h> 85 85 #import <WebCore/ContextMenuController.h> 86 #import <WebCore/DictationAlternative.h> 86 87 #import <WebCore/DictionaryLookup.h> 87 88 #import <WebCore/Document.h> -
trunk/Source/WebKitLegacy/mac/WebView/WebView.mm
r261966 r261981 141 141 #import <WebCore/DatabaseManager.h> 142 142 #import <WebCore/DeprecatedGlobalSettings.h> 143 #import <WebCore/DictationAlternative.h> 143 144 #import <WebCore/DictionaryLookup.h> 144 145 #import <WebCore/Document.h> … … 9423 9424 for (auto& alternativeWithRange : alternativesWithRange) { 9424 9425 if (auto dictationContext = _private->m_alternativeTextUIController->addAlternatives(alternativeWithRange.alternatives.get())) 9425 alternatives.append( WebCore::DictationAlternative(alternativeWithRange.range.location, alternativeWithRange.range.length, dictationContext));9426 } 9427 } 9428 9429 - (void)_showDictationAlternativeUI:(const WebCore::FloatRect&)boundingBoxOfDictatedText forDictationContext:( uint64_t)dictationContext9426 alternatives.append({ alternativeWithRange.range, dictationContext }); 9427 } 9428 } 9429 9430 - (void)_showDictationAlternativeUI:(const WebCore::FloatRect&)boundingBoxOfDictatedText forDictationContext:(WebCore::DictationContext)dictationContext 9430 9431 { 9431 9432 #if USE(AUTOCORRECTION_PANEL) … … 9436 9437 } 9437 9438 9438 - (void)_removeDictationAlternatives:( uint64_t)dictationContext9439 - (void)_removeDictationAlternatives:(WebCore::DictationContext)dictationContext 9439 9440 { 9440 9441 _private->m_alternativeTextUIController->removeAlternatives(dictationContext); 9441 9442 } 9442 9443 9443 - (Vector<String>)_dictationAlternatives:( uint64_t)dictationContext9444 - (Vector<String>)_dictationAlternatives:(WebCore::DictationContext)dictationContext 9444 9445 { 9445 9446 return _private->m_alternativeTextUIController->alternativesForContext(dictationContext); -
trunk/Source/WebKitLegacy/mac/WebView/WebViewInternal.h
r261232 r261981 135 135 136 136 - (void)_getWebCoreDictationAlternatives:(Vector<WebCore::DictationAlternative>&)alternatives fromTextAlternatives:(const Vector<WebCore::TextAlternativeWithRange>&)alternativesWithRange; 137 - (void)_showDictationAlternativeUI:(const WebCore::FloatRect&)boundingBoxOfDictatedText forDictationContext:( uint64_t)dictationContext;138 - (void)_removeDictationAlternatives:( uint64_t)dictationContext;139 - (Vector<String>)_dictationAlternatives:( uint64_t)dictationContext;137 - (void)_showDictationAlternativeUI:(const WebCore::FloatRect&)boundingBoxOfDictatedText forDictationContext:(WebCore::DictationContext)dictationContext; 138 - (void)_removeDictationAlternatives:(WebCore::DictationContext)dictationContext; 139 - (Vector<String>)_dictationAlternatives:(WebCore::DictationContext)dictationContext; 140 140 141 141 #if ENABLE(SERVICE_CONTROLS)
Note: See TracChangeset
for help on using the changeset viewer.