<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="margin: 0px; font-size: 14px; line-height: normal;" class=""><b style="line-height: normal;" class="">-- Goals --</b></div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class="">Text selection change notifications allow assistive technology to inform a user about change contents and state. The notification sent by WebKit are insufficient because multiple actions result in the same notification, which makes it impossible in some cases to provide the user with appropriate feedback. For example, with the notifications it is impossible for VoiceOver to distinguish between a user typing text, and a user pasting text. Another example is&nbsp;javascript that has swapped one form value for another (for example, formatting a phone number).</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class=""><b class="">-- Implementation --</b></div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class="">Richer text change notifications are implemented by adding infrastructure to EditCommands and adding logic to Editor, FrameSelection and FocusController to thread a selection intent through to the logic that posts notifications.</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class=""><b class="">--- New Edit Commands ---</b></div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class="">Each of these EditCommands is a subclass of an existing subclass that is used in the appropriate logic for applying that command:</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class="">CutDeleteSelectionCommand</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class="">CutDeleteSelectionCommand</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class="">DictationInsertIntoTextNodeCommand</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class="">DictationInsertTextCommand</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class="">PasteInsertNodeBeforeCommand</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class="">PasteReplaceInsertIntoTextNodeCommand</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class="">ReplaceDeleteFromTextNodeCommand</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class="">ReplaceInsertIntoTextNodeCommand</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class="">TypingInsertIntoTextNodeCommand</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class="">TypingInsertNodeBeforeCommand</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class="">TypingInsertTextCommand</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class="">TypingReplaceInsertIntoTextNodeCommand</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class=""><b class="">--- Edit Types ---</b></div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class="">Value changes now include edit types. This is largely a subset of the existing EditAction enum, but needs to be it's own type since it's value are exposed via notifications and need to be stable. It also has a notion of generic Insert that EditAction doesn't which is used for cases where there isn't a strong need for context (currently).</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-kerning: none; color: #bb2ca2" class="">enum</span> AXTextEditType {</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextEditTypeUnknown,</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextEditTypeDelete, <span style="font-kerning: none; color: #008400" class="">// Generic text delete</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextEditTypeInsert, <span style="font-kerning: none; color: #008400" class="">// Generic text insert</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextEditTypeTyping, <span style="font-kerning: none; color: #008400" class="">// Insert via typing</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextEditTypeDictation, <span style="font-kerning: none; color: #008400" class="">// Insert via dictation</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextEditTypeCut, <span style="font-kerning: none; color: #008400" class="">// Delete via Cut</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextEditTypePaste <span style="font-kerning: none; color: #008400" class="">// Insert via Paste</span></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">};</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class="">Each EditCommand now exposes an edit type for when it is applied and when it is unapplied (undo), which is used when posting value change notifications.</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class=""><span style="font-kerning: none; color: #bb2ca2" class="">virtual</span> AXObjectCache::AXTextEditType WebCore::SimpleEditCommand::applyEditType();</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class=""><span style="font-kerning: none; color: #bb2ca2" class="">virtual</span> AXObjectCache::AXTextEditType WebCore::SimpleEditCommand::unapplyEditType();</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class=""><span style="font-kerning: none; color: #bb2ca2" class="">virtual</span> <span style="font-kerning: none; color: #bb2ca2" class="">void</span> WebCore::SimpleEditCommand::notifyAccessibilityForTextChange(Node*, AXObjectCache::AXTextEditType, <span style="font-kerning: none; color: #bb2ca2" class="">const</span> <span style="font-kerning: none; color: #703daa" class="">String</span>&amp;, <span style="font-kerning: none; color: #bb2ca2" class="">const</span> VisiblePosition&amp;);</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class=""><b class="">--- Intents ---</b></div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class="">Selection changes now include the values contained in a new struct AXTextStateChangeIntent. Intent allows a selection change to be annotated as the result of an edit event or the result of a selection change (in the form of navigation or a range selection). This follows closely with the existing selection model of Safari and like edit type is it's own type because it is exposed via notifications and needs to be stable and also adds some accessibility specific values. Intent includes a sync member to flag selection changes that are the result of an assistive app setting selection.</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-kerning: none; color: #bb2ca2" class="">enum</span> AXTextStateChangeType {</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextStateChangeTypeUnknown,</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextStateChangeTypeEdit,</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextStateChangeTypeSelectionMove,</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextStateChangeTypeSelectionExtend</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">};</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; min-height: 13px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-kerning: none; color: #bb2ca2" class="">enum</span> AXTextSelectionDirection {</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextSelectionDirectionUnknown,</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextSelectionDirectionBeginning,</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextSelectionDirectionEnd,</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextSelectionDirectionPrevious,</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextSelectionDirectionNext,</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextSelectionDirectionDiscontiguous</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">};</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; min-height: 13px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-kerning: none; color: #bb2ca2" class="">enum</span> AXTextSelectionGranularity {</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextSelectionGranularityUnknown,</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextSelectionGranularityCharacter,</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextSelectionGranularityWord,</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextSelectionGranularityLine,</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextSelectionGranularitySentence,</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextSelectionGranularityParagraph,</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextSelectionGranularityPage,</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; AXTextSelectionGranularityDocument,</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(0, 132, 0);" class="">&nbsp; &nbsp; AXTextSelectionGranularityAll // All granularity represents the action of selecting the whole document as a single action. Extending selection by some other granularity until it encompasses the whole document will not result in a all granularity notification.</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">};</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; min-height: 13px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-kerning: none; color: #bb2ca2" class="">struct</span> AXTextSelection {</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class="">&nbsp; &nbsp; AXTextSelectionDirection direction;</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class="">&nbsp; &nbsp; AXTextSelectionGranularity granularity;</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">};</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; min-height: 13px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-kerning: none; color: #bb2ca2" class="">struct</span> AXTextStateChangeIntent {</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class="">&nbsp; &nbsp; AXTextStateChangeType type;</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; <span style="font-kerning: none; color: #bb2ca2" class="">union</span> {</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; &nbsp; &nbsp; <span style="font-kerning: none; color: #4f8187" class="">AXTextSelection</span> selection;</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; &nbsp; &nbsp; <span style="font-kerning: none; color: #4f8187" class="">AXTextEditType</span> change;</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; };</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">&nbsp; &nbsp; <span style="font-kerning: none; color: #bb2ca2" class="">bool</span> sync;</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class="">};</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class="">EditCommand and EditCommandComposition now expose intents for selection changes as a result of applying editing and unapplying (undoing) editing. In the case of a composite command, intent is taken from the last applied command.</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class=""><span style="font-kerning: none; color: #bb2ca2" class="">virtual</span> AXObjectCache::AXTextStateChangeIntent WebCore::EditCommand::applyIntent();</div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class=""><span style="font-kerning: none; color: #bb2ca2" class="">virtual</span> AXObjectCache::AXTextStateChangeIntent WebCore::EditCommandComposition::unapplyIntent();</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class=""><b class="">--- Changes to Editor, FrameSelection, FocusController ---</b></div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class="">FrameSelection setSelection() now includes a new argument with a default value for intent. This allows cases that don't have an explicit intent to omit the argument so that unrelated code paths can remain unchanged.</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class=""><span style="font-kerning: none; color: #bb2ca2" class="">void</span> WebCore::FrameSelection::setSelection(<span style="font-kerning: none; color: #bb2ca2" class="">const</span> VisibleSelection&amp;, SetSelectionOptions = <span style="font-kerning: none; color: #31595d" class="">defaultSetSelectionOptions</span>(), AXObjectCache::AXTextStateChangeIntent = <span style="font-kerning: none; color: #31595d" class="">defaultSetSelectionIntent</span>(), CursorAlignOnScroll = <span style="font-kerning: none; color: #31595d" class="">AlignCursorOnScrollIfNeeded</span>, TextGranularity = <span style="font-kerning: none; color: #31595d" class="">CharacterGranularity</span>);</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class="">FrameSelection setSelectionByMouseIfDifferent() now calls set selection with a selection intent for Move if it's a caret or Extend if it's a range and direction of Discontiguous.</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class="">Editor uses the edit type and intent data added to edit commands when calling changeSelectionAfterCommand() which now accepts an optional argument for intent.</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-kerning: none; color: #bb2ca2" class="">void</span> <span style="font-kerning: none; color: #4f8187" class="">WebCore::Editor::</span>changeSelectionAfterCommand(<span style="font-kerning: none; color: #bb2ca2" class="">const</span> VisibleSelection&amp; newSelection, FrameSelection::SetSelectionOptions, AXObjectCache::AXTextStateChangeIntent = AXObjectCache::AXTextStateChangeIntent());</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class="">FocusController advanceFocusInDocumentOrder() (called when tabbing through a document) now calls selection with an selection intent for Move Discontiguous.</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class=""><b class="">--- Notifications ---</b></div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class="">Simple changes, like typing, pasting, deleting, etc, can now be posted with the type, the value of the change and the position of that change. The position can help inform if the change is within the currently focused element of an assistive app.</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class=""><span style="font-kerning: none; color: #bb2ca2" class="">void</span> WebCore::AXObjectCache::postTextStateChangeNotification(Node*, AXTextEditType, <span style="font-kerning: none; color: #bb2ca2" class="">const</span> <span style="font-kerning: none; color: #703daa" class="">String</span>&amp;, <span style="font-kerning: none; color: #bb2ca2" class="">const</span> VisiblePosition&amp;);</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class="">Compound changes, for example replacing the value for an input form field for formatting, can now be posted as a single atomic notification.</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-kerning: none; color: #bb2ca2" class="">void</span> <span style="font-kerning: none; color: #4f8187" class="">WebCore::AXObjectCache::</span>postTextReplacementNotification(<span style="font-kerning: none; color: #4f8187" class="">Node</span>*, <span style="font-kerning: none; color: #4f8187" class="">AXTextEditType</span> deletionType, <span style="font-kerning: none; color: #bb2ca2" class="">const</span> <span style="font-kerning: none; color: #703daa" class="">String</span>&amp; deletedText, <span style="font-kerning: none; color: #4f8187" class="">AXTextEditType</span> insertionType, <span style="font-kerning: none; color: #bb2ca2" class="">const</span> <span style="font-kerning: none; color: #703daa" class="">String</span>&amp; insertedText, <span style="font-kerning: none; color: #bb2ca2" class="">const</span> <span style="font-kerning: none; color: #4f8187" class="">VisiblePosition</span>&amp;);</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class="">Selection changes can now be posted with intent and the selection resulting from that intent.</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo; color: rgb(79, 129, 135);" class=""><span style="font-kerning: none; color: #bb2ca2" class="">void</span> WebCore::AXObjectCache::postTextStateChangeNotification(Node*, AXTextStateChangeIntent, <span style="font-kerning: none; color: #bb2ca2" class="">const</span> VisibleSelection&amp;);</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class=""><b class="">--- Security ---</b></div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class="">This change does not expose any additional user content than what was previously available to an assistive-technology user. This change only expands on informing the assistive-technology product about the user intent.&nbsp;</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class="">In password fields no assistive technology product can get to user-typed text. This change also include better obfuscation of typing cadence in password fields using the approach implemented in AppKit which was provided and approved by Product Security.</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class=""><b class="">--- Compatibility ---</b></div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class="">Because this work overlaps with the previous work done by GTK, the implementations of postTextChangeNotification use PLATFORM macros to translate new data types into the data types that GTK is expecting when not building for Cocoa.</div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal;" class=""><b class="">--- Links ---</b></div><div style="margin: 0px; line-height: normal; min-height: 14px;" class=""><br class=""></div><div style="margin: 0px; line-height: normal; color: rgb(71, 135, 255);" class=""><span style="text-decoration: underline ; font-kerning: none" class=""><a href="https://bugs.webkit.org/show_bug.cgi?id=142719" class="">https://bugs.webkit.org/show_bug.cgi?id=142719</a></span></div><div style="margin: 0px; line-height: normal; color: rgb(71, 135, 255);" class=""><span style="text-decoration: underline ; font-kerning: none" class=""><a href="https://bugs.webkit.org/show_bug.cgi?id=25898" class="">https://bugs.webkit.org/show_bug.cgi?id=25898</a></span></div><div class=""><br class=""></div></body></html>