<html>
    <head>
      <base href="https://bugs.webkit.org/" />
    </head>
    <body>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - AX: richer text change notifications"
   href="https://bugs.webkit.org/show_bug.cgi?id=142719#c42">Comment # 42</a>
              on <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - AX: richer text change notifications"
   href="https://bugs.webkit.org/show_bug.cgi?id=142719">bug 142719</a>
              from <span class="vcard"><a class="email" href="mailto:cfleizach&#64;apple.com" title="chris fleizach &lt;cfleizach&#64;apple.com&gt;"> <span class="fn">chris fleizach</span></a>
</span></b>
        <pre>Comment on <span class=""><a href="attachment.cgi?id=250290&amp;action=diff" name="attach_250290" title="value change notifications">attachment 250290</a> <a href="attachment.cgi?id=250290&amp;action=edit" title="value change notifications">[details]</a></span>
value change notifications

View in context: <a href="https://bugs.webkit.org/attachment.cgi?id=250290&amp;action=review">https://bugs.webkit.org/attachment.cgi?id=250290&amp;action=review</a>

<span class="quote">&gt; Source/WebCore/ChangeLog:5
&gt; +        Richer accessibility value change notifications. Introduce AXTextEditType, postTextStateChangeNotification and postTextReplacementNotification to give assistive tech apps more reliable context for responding to changes in web content. Also implement a mechanism to post value changes in password form fields in coalesced ticks to thwart analyzing the cadence of changes.</span >

description should go after the Reviewed by line

<span class="quote">&gt; Source/WebCore/accessibility/AXObjectCache.cpp:757
&gt; +        // Delegate to the right platform</span >

comment is unnecessary. we only need comments generally to explain why something is happening. what is happening should be self evident from the code

<span class="quote">&gt; Source/WebCore/accessibility/AXObjectCache.cpp:874
&gt; +        text = obj.passwordFieldOrContainingPasswordField()-&gt;passwordFieldValue().substring(position.deepEquivalent().deprecatedEditingOffset(), text.length());</span >

how is this sanitizing the value? is there not a method on HTMLInputType to give you the sanitized version already?

<span class="quote">&gt; Source/WebCore/accessibility/AXObjectCache.cpp:893
&gt; +        if (sanitizePasswordText(*obj, sanitizedText, position)) {</span >

why do we have this special code for password fields?

<span class="quote">&gt; Source/WebCore/accessibility/AXObjectCache.cpp:906
&gt; +    AccessibilityObject* obj = getOrCreate(node);</span >

this line is common to both platforms and can be moved above

<span class="quote">&gt; Source/WebCore/accessibility/AXObjectCache.cpp:924
&gt; +    if (obj) {</span >

if there's no obj can we do an early return?

<span class="quote">&gt; Source/WebCore/accessibility/AXObjectCache.cpp:938
&gt;      AccessibilityObject* obj = getOrCreate(node);</span >

ditto about AXObject

<span class="quote">&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1168
&gt; +    if (AccessibilityObject *rootObject = this-&gt;rootObject()) {</span >

is the root object always a ScrollView? I think it probably is. in that case we can cast to scroll view and call the webArea() method directly instead of relying on that it will be the first object

<span class="quote">&gt; Source/WebCore/accessibility/AXObjectCache.h:192
&gt; +    enum AXTextStateChangeType {</span >

what other change types can you envision?

<span class="quote">&gt; Source/WebCore/accessibility/AXObjectCache.h:201
&gt; +        AXTextEditTypeTyping, // Insert via typing</span >

how is insert/delete different from typing? why would you use typing instead of insert

<span class="quote">&gt; Source/WebCore/accessibility/AXObjectCache.h:210
&gt; +    void postTextReplacementNotification(Node*, AXTextEditType, const String&amp;, AXTextEditType, const String&amp;, const VisiblePosition&amp;);</span >

why are there two AXTextEditTypes?
because there are two we should name them here in the header

<span class="quote">&gt; Source/WebCore/accessibility/AXObjectCache.h:240
&gt; +        AXTextDeleted,</span >

can you also have a text moved type? (i.e. you can drag blocks of text on OS X)

<span class="quote">&gt; Source/WebCore/accessibility/AXObjectCache.h:290
&gt; +    Timer m_passwordNotificationPostTimer;</span >

still curious why we need special timers for passwords

<span class="quote">&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:568
&gt; +            if (AXObjectCache *cache = axObjectCache())</span >

* on wrong side

<span class="quote">&gt; Source/WebCore/accessibility/AccessibilityNodeObject.h:91
&gt; +    virtual bool isContainedByPasswordField() const override;</span >

i think we can move this implementation in AccessibilityObject and then we can remove the virtual

<span class="quote">&gt; Source/WebCore/accessibility/mac/AXObjectCacheMac.mm:195
&gt; +static NSDictionary* textReplacementChangeDictionary(AccessibilityObject* obj, AXObjectCache::AXTextEditType type, const String&amp; string, const VisiblePosition&amp; position)</span >

ObjcC stars should be on the other side

<span class="quote">&gt; Source/WebCore/accessibility/mac/AXObjectCacheMac.mm:197
&gt; +    NSString* text = (NSString *)string;</span >

ditto about this star.

<span class="quote">&gt; Source/WebCore/accessibility/mac/AXObjectCacheMac.mm:246
&gt; +    if (!obj)</span >

is it possible to combine the implementation of this method with the more detailed one (or rather vice versa in this case)

<span class="quote">&gt; Source/WebCore/editing/CutDeleteFromTextNodeCommand.h:44
&gt; +    virtual AXObjectCache::AXTextEditType applyEditType() override;</span >

should this be final override

<span class="quote">&gt; Source/WebCore/editing/ReplaceInsertIntoTextNodeCommand.cpp:53
&gt; +    case AXObjectCache::AXTextEditTypePaste:</span >

can you just make the default: case be ASSERT_NOT_REACHED</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>