• David Tseng's avatar
    Ensure that window titles are always up to date · 468098d5
    David Tseng authored
    A sample window tree might look like:
    node id=116 role=window state={} parentID=108 childIds=[] className=HomeScreenContainer
    node id=117 role=window state={"invisible":true} parentID=108 childIds=[] className=UnparentedControlContainer
    node id=118 role=window state={} parentID=108 childIds=[128] className=Desk_Container_A
      node id=128 role=window state={} parentID=118 childIds=[129,102] name=Chrome - New Tab className=BrowserFrame
        node id=129 role=window state={} parentID=128 childIds=[130] className=NativeViewHostAuraClip
          node id=130 role=window state={} parentID=129 childIds=[131] name=New Tab className=WebContentsViewAura
            node id=131 role=window state={} parentID=130 childIds=[] name=New Tab
        node id=102 role=window state={} parentID=128 childIds=[132] name=New Tab - Google Chrome (Guest) className=Widget
          node id=132 role=window state={} parentID=102 childIds=[133] name=New Tab - Google Chrome (Guest) className=BrowserRootView
            node id=133 role=client state={} parentID=132 childIds=[134,86] name=Google Chrome className=NonClientView
              node id=134 role=titleBar state={} parentID=133 childIds=[135] className=BrowserNonClientFrameViewAsh
                node id=135 role=unknown state={} parentID=134 childIds=[136,137,138] className=FrameCaptionButtonContainerView
                  node id=136 role=button state={"focusable":true} parentID=135 childIds=[] name=Minimize className=FrameCaptionButton
                  node id=137 role=button state={"focusable":true} parentID=135 childIds=[] name=Maximize className=FrameCaptionButton
                  node id=138 role=button state={"focusable":true} parentID=135 childIds=[] name=Close className=FrameCaptionButton
              node id=86 role=client state={} parentID=133 childIds=[88,89,139] className=BrowserView
                node id=88 role=unknown state={} parentID=86 childIds=[140,85,141] className=TopContainerView
                  node id=140 role=unknown state={} parentID=88 childIds=[142] className=TabStripRegionView
                    node id=142 role=tabList state={} parentID=140 childIds=[87,143] className=TabStrip
                      node id=87 role=tab state={"focusable":true,"multiselectable":true} parentID=142 childIds=[144,145] name=New Tab className=Tab
                        node id=144 role=staticText state={} parentID=87 childIds=[] name=New Tab className=Label
                        node id=145 role=button state={"focusable":true} parentID=87 childIds=[] name=Close className=TabCloseButton
                      node id=143 role=button state={"focusable":true} parentID=142 childIds=[146] name=New Tab className=NewTabButton
                        node id=146 role=unknown state={} parentID=143 childIds=[] className=View
                  node id=85 role=pane state={} parentID=88 childIds=[11,12,147,84,13,14] className=ToolbarView
                    node id=11 role=button state={} parentID=85 childIds=[90] name=Back className=ToolbarButton
                      node id=90 role=staticText state={} parentID=11 childIds=[] className=Label
                    node id=12 role=button state={} parentID=85 childIds=[91] name=Forward className=ToolbarButton
                      node id=91 role=staticText state={} parentID=12 childIds=[] className=Label
                    node id=147 role=button state={"focusable":true} parentID=85 childIds=[151] name=Reload className=ReloadButton
                      node id=151 role=staticText state={} parentID=147 childIds=[] className=Label
                    node id=84 role=group state={} parentID=85 childIds=[152,16,83,153] className=LocationBarView
                      node id=152 role=unknown state={} parentID=84 childIds=[] className=FocusRing
                      node id=16 role=image state={} parentID=84 childIds=[15] name=Search icon className=IconLabelBubbleView
                        node id=15 role=alert state={"offscreen":true} parentID=16 childIds=[] className=AXVirtualView
                      node id=83 role=textField state={"editable":true,"focusable":true,"focused":true} parentID=84 childIds=[] name=Address and search bar className=OmniboxViewViews
                      node id=153 role=unknown state={} parentID=84 childIds=[] className=PageActionIconContainerView
                    node id=13 role=button state={} parentID=85 childIds=[156] name=Guest className=AvatarToolbarButton
                      node id=156 role=staticText state={} parentID=13 childIds=[] name=Guest className=Label
                    node id=14 role=popUpButton state={"focusable":true} parentID=85 childIds=[158] name=Chrome className=BrowserAppMenuButton
                      node id=158 role=staticText state={} parentID=14 childIds=[] className=Label
                  node id=141 role=unknown state={} parentID=88 childIds=[] className=Separator
                node id=89 role=unknown state={} parentID=86 childIds=[159] className=View
                  node id=159 role=webView state={"focusable":true} parentID=89 childIds=[1] childTreeID=DCF0C2E5B3BC5F0DDDF52090169AEB49 className=WebView
    
    From the root downward, we have a tree of role=window nodes (most backed by aura::Window, and others backed by view::Widget, or views::RootView).
    
    The issue this change addresses is that the views/aura system makes no guarantees about which of these windows gets a WindowObserver::OnWindowTitleChanged call. Namely, we do not receive it on the window backed by views::Widget.
    As a result, in some instances, some of the windows (as seen in an accessibility extension) will have a stale title (see below bug).
    This change also ensures that we only fire events on actual window nodes.
    Bug: 1058613
    
    Change-Id: I46b2205f6ed7df08fb09399cbc2ffff433ce1801
    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2090023
    Commit-Queue: David Tseng <dtseng@chromium.org>
    Reviewed-by: default avatarAnastasia Helfinstein <anastasi@google.com>
    Cr-Commit-Position: refs/heads/master@{#748303}
    468098d5
ax_window_obj_wrapper.cc 6.95 KB