Changeset 281668 in webkit
- Timestamp:
- Aug 26, 2021, 4:02:17 PM (5 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 11 edited
-
ChangeLog (modified) (1 diff)
-
Shared/EditorState.cpp (modified) (2 diffs)
-
Shared/EditorState.h (modified) (2 diffs)
-
Shared/FocusedElementInformation.cpp (modified) (2 diffs)
-
Shared/FocusedElementInformation.h (modified) (3 diffs)
-
Shared/IdentifierTypes.h (modified) (2 diffs)
-
UIProcess/WebPageProxy.cpp (modified) (1 diff)
-
UIProcess/ios/WKContentViewInteraction.mm (modified) (1 diff)
-
WebProcess/WebPage/WebPage.cpp (modified) (2 diffs)
-
WebProcess/WebPage/WebPage.h (modified) (2 diffs)
-
WebProcess/WebPage/ios/WebPageIOS.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r281661 r281668 1 2021-08-26 Wenson Hsieh <wenson_hsieh@apple.com> 2 3 Add type-safe transaction identifiers for EditorState and FocusedElementInformation 4 https://bugs.webkit.org/show_bug.cgi?id=229571 5 6 Reviewed by Tim Horton. 7 8 Make `transactionID` a monotonic object identifier instead of a generic `TransactionID`, and replace 9 `FocusedElementIdentifier` (which is currently type-defined to `uint64_t`) with its own monotonic object 10 identifier type. 11 12 In a future patch, I plan to implement a mechanism to synchronize `EditorState` and `FocusedElementInformation` 13 updates, which would require one or both of these objects to hold both types of transactional identifiers; in 14 order to do this, we need to ensure that these two identifiers are distinct types, so that they can't be easily 15 mixed up. 16 17 * Shared/EditorState.cpp: 18 (WebKit::EditorState::encode const): 19 (WebKit::EditorState::decode): 20 * Shared/EditorState.h: 21 * Shared/FocusedElementInformation.cpp: 22 (WebKit::FocusedElementInformation::encode const): 23 (WebKit::FocusedElementInformation::decode): 24 * Shared/FocusedElementInformation.h: 25 * Shared/IdentifierTypes.h: 26 * UIProcess/WebPageProxy.cpp: 27 (WebKit::WebPageProxy::updateEditorState): 28 * UIProcess/ios/WKContentViewInteraction.mm: 29 (-[WKContentView updateCurrentFocusedElementInformation:]): 30 * WebProcess/WebPage/WebPage.cpp: 31 (WebKit::WebPage::editorState const): 32 (WebKit::WebPage::elementDidFocus): 33 * WebProcess/WebPage/WebPage.h: 34 35 Additionally rename `m_currentFocusedElementIdentifier` to `m_lastFocusedElementInformationIdentifier`, for 36 consistency with `m_lastEditorStateIdentifier`. 37 38 * WebProcess/WebPage/ios/WebPageIOS.mm: 39 (WebKit::WebPage::focusedElementInformation): 40 1 41 2021-08-26 Cameron McCormack <heycam@apple.com> 2 42 -
trunk/Source/WebKit/Shared/EditorState.cpp
r280019 r281668 35 35 void EditorState::encode(IPC::Encoder& encoder) const 36 36 { 37 encoder << transactionID;37 encoder << identifier; 38 38 encoder << originIdentifierForPasteboard; 39 39 encoder << shouldIgnoreSelectionChanges; … … 54 54 bool EditorState::decode(IPC::Decoder& decoder, EditorState& result) 55 55 { 56 if (!decoder.decode(result. transactionID))56 if (!decoder.decode(result.identifier)) 57 57 return false; 58 58 -
trunk/Source/WebKit/Shared/EditorState.h
r280019 r281668 27 27 28 28 #include "ArgumentCoders.h" 29 #include " TransactionID.h"29 #include "IdentifierTypes.h" 30 30 #include <WebCore/Color.h> 31 31 #include <WebCore/FontAttributes.h> … … 71 71 72 72 struct EditorState { 73 TransactionID transactionID;73 EditorStateIdentifier identifier; 74 74 String originIdentifierForPasteboard; 75 75 bool shouldIgnoreSelectionChanges { false }; -
trunk/Source/WebKit/Shared/FocusedElementInformation.cpp
r278253 r281668 99 99 encoder << label; 100 100 encoder << ariaLabel; 101 encoder << focusedElementIdentifier;101 encoder << identifier; 102 102 encoder << containerScrollingNodeID; 103 103 #if ENABLE(DATALIST_ELEMENT) … … 224 224 return false; 225 225 226 if (!decoder.decode(result. focusedElementIdentifier))226 if (!decoder.decode(result.identifier)) 227 227 return false; 228 228 -
trunk/Source/WebKit/Shared/FocusedElementInformation.h
r278253 r281668 27 27 28 28 #include "ArgumentCoders.h" 29 #include "IdentifierTypes.h" 29 30 #include <WebCore/AutocapitalizeTypes.h> 30 31 #include <WebCore/Autofill.h> … … 88 89 }; 89 90 90 using FocusedElementIdentifier = uint64_t;91 92 91 struct FocusedElementInformation { 93 92 WebCore::IntRect interactionRect; … … 141 140 bool isFocusingWithValidationMessage { false }; 142 141 143 FocusedElementI dentifier focusedElementIdentifier { 0 };142 FocusedElementInformationIdentifier identifier; 144 143 WebCore::ScrollingNodeID containerScrollingNodeID { 0 }; 145 144 -
trunk/Source/WebKit/Shared/IdentifierTypes.h
r281606 r281668 26 26 #pragma once 27 27 28 #include "MonotonicObjectIdentifier.h" 28 29 #include <wtf/ObjectIdentifier.h> 29 30 … … 42 43 using TextCheckerRequestID = ObjectIdentifier<TextCheckerRequestType>; 43 44 45 enum EditorStateIdentifierType { }; 46 using EditorStateIdentifier = MonotonicObjectIdentifier<EditorStateIdentifierType>; 47 48 enum FocusedElementInformationIdentifierType { }; 49 using FocusedElementInformationIdentifier = MonotonicObjectIdentifier<FocusedElementInformationIdentifierType>; 50 44 51 } // namespace WebKit -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r281606 r281668 7460 7460 bool WebPageProxy::updateEditorState(const EditorState& newEditorState) 7461 7461 { 7462 if (newEditorState. transactionID < m_editorState.transactionID)7462 if (newEditorState.identifier < m_editorState.identifier) 7463 7463 return false; 7464 7464 -
trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm
r281646 r281668 6685 6685 { 6686 6686 WeakObjCPtr<WKContentView> weakSelf { self }; 6687 auto identifierBeforeUpdate = _focusedElementInformation. focusedElementIdentifier;6687 auto identifierBeforeUpdate = _focusedElementInformation.identifier; 6688 6688 _page->requestFocusedElementInformation([callback = WTFMove(callback), identifierBeforeUpdate, weakSelf] (auto& info) { 6689 if (!weakSelf || !info || info-> focusedElementIdentifier != identifierBeforeUpdate) {6689 if (!weakSelf || !info || info->identifier != identifierBeforeUpdate) { 6690 6690 // If the focused element may have changed in the meantime, don't overwrite focused element information. 6691 6691 callback(false); -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r281606 r281668 1226 1226 auto& editor = frame->editor(); 1227 1227 1228 result. transactionID = m_lastEditorStateTransactionID.increment();1228 result.identifier = m_lastEditorStateIdentifier.increment(); 1229 1229 result.selectionIsNone = selection.isNone(); 1230 1230 result.selectionIsRange = selection.isRange(); … … 6032 6032 #endif 6033 6033 6034 ++m_currentFocusedElementIdentifier;6035 6034 auto information = focusedElementInformation(); 6036 6035 if (!information) -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.h
r281606 r281668 2244 2244 OptionSet<WebKit::WebEvent::Modifier> m_pendingSyntheticClickModifiers; 2245 2245 WebCore::PointerID m_pendingSyntheticClickPointerId { 0 }; 2246 FocusedElementI dentifier m_currentFocusedElementIdentifier { 0 };2246 FocusedElementInformationIdentifier m_lastFocusedElementInformationIdentifier; 2247 2247 std::optional<DynamicViewportSizeUpdateID> m_pendingDynamicViewportSizeUpdateID; 2248 2248 double m_lastTransactionPageScaleFactor { 0 }; … … 2283 2283 enum class EditorStateIsContentEditable { No, Yes, Unset }; 2284 2284 mutable EditorStateIsContentEditable m_lastEditorStateWasContentEditable { EditorStateIsContentEditable::Unset }; 2285 mutable TransactionID m_lastEditorStateTransactionID;2285 mutable EditorStateIdentifier m_lastEditorStateIdentifier; 2286 2286 2287 2287 #if PLATFORM(GTK) || PLATFORM(WPE) -
trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
r281450 r281668 3227 3227 information.hasPreviousNode = true; 3228 3228 } 3229 information. focusedElementIdentifier = m_currentFocusedElementIdentifier;3229 information.identifier = m_lastFocusedElementInformationIdentifier.increment(); 3230 3230 3231 3231 if (is<LabelableElement>(*focusedElement)) {
Note:
See TracChangeset
for help on using the changeset viewer.