EdgeTextInfo.getTextWithFields: chop redundant fields and text off the end that are incorrectly placed there by Edge (E.g. expanding to line before a list, table etc includes the list or table).
Edge now correctly sets focus on its root container and or document, thus we no longer need to blindly allow all UIA focus events on the root container.
Edge: Remove any whitespace directly after the end of an element as it is not needed and stops us from correctly chopping the extra elements accideintally included by Edge at the end of lines.
Edge: _getTextWithFields_balanced and _getTextWithFields_unbalanced don't need to collect information about their root element at all. In deed, _getTextWithFields_unbalanced shuold *not* recurse after its root element. Stops an infinit loop when dealing with aria-hidden text.
Edge: _getTextWithFields_balanced: specifically handle detection of an embedded child (checkbox etc) at the beginning. This stops skipping out of the document when a control is inside a label, and standardizes this check with similar checks in other parts of the code.
Edge: integrate the main code from _getTextWithFields_balanced in to _getTextWithFields_unbalanced which allows for a substantial removal of duplicate code.
speech.getFormatFieldSpeech: If the user has chosen to report headings, and the unit is either line or paragraph or the reason is focus, always announce headings in intial formatting even if the heading level has not changed.
Edge: work around MS Edge bug where expanding to character on an a control such as as a checkbox does not include the control in its children or enclosing element. Also ensure these controls are focused with using quicknav / arrowing.
Edge: expose overridden content always via value, with a single space text field as content. Change braille to handle value if always ReportValue exists in the controlField. Ensures that routing works with content overridden via aria-label etc.
EdgeTextInfo.expand: don't try fixing up expanding of line and paragraph. Just causes issues. EdgeTextInfo._normalizeUIARange: ensure not to jump over embedded controls.
Abstract more Edge code into the base UIA support, including a base UIA browseMode implementation, making it easier to offer Browse Mode for Win 10 Mail etc in future.
EdgeTextInfo.expand: only do special expanding for embedded children if the unit is word or character. Otherwise expanding to line from an embedded control won't cover the entire line.
Remove the need for overriding focusableNVDAObjectAtStart on the EdgeHTMLTreeInterceptorTextInfo, and therefore the need for EdgeHTMLTreeIntercepterTextInfo, by allowing UIA BrowseMode's iterNodesByType and UIATextInfo's NVDAObjectAtStart to share logic that finds the deepest UIAElement at the start of a text range.
Edge: Where content is replaced via aria-label etc, ensure that content only takes up one character stop. Also ensure that braille shows the entire line for certain complex textWithFields runs.
EdgeTextInfo.expand: remove code that tries to exclude content from the next line when expanding to line/paragraph. Other code already handled 90% of usecases. This code fixed one and introduced one. For now minimal is better.
UIATextInfo._getTextWithFieldsForUIARange: handle where IUIAutomationTextRange::getEnclosingElement is not implemented (File Explorer search, Win 7 start menu search)