Skip to content

Commit

Permalink
How Chrome Accessibility Works, Part 2
Browse files Browse the repository at this point in the history
Follow-up to: http://crrev.com/c/3094450

This section covers the multi-process browser details and introduces
many of the specific classes and data structures used for Chrome
accessibility.

Bug: None
Change-Id: I7d53929a87439d7c921f372e0aade4afd9791a7b
AX-Relnotes: N/A
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3108459
Commit-Queue: Dominic Mazzoni <dmazzoni@chromium.org>
Reviewed-by: David Tseng <dtseng@chromium.org>
Reviewed-by: Kevin Babbitt <kbabbitt@microsoft.com>
Cr-Commit-Position: refs/heads/main@{#914001}
  • Loading branch information
minorninth authored and Chromium LUCI CQ committed Aug 20, 2021
1 parent b03d457 commit 5ffcc86
Show file tree
Hide file tree
Showing 18 changed files with 834 additions and 1 deletion.
8 changes: 7 additions & 1 deletion docs/accessibility/figures/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,13 @@ all: \
cover_flow.png \
single_process.png \
single_process_css_system.png \
single_process_system.png
single_process_system.png \
multi_process_browser.png \
multi_process_multiple_tabs.png \
other_multi_process_browser.png \
proxy_approach.png \
caching_approach.png \
multi_process_ax.png

%.png: %.gv Makefile
dot -Tpng $< -o $@
51 changes: 51 additions & 0 deletions docs/accessibility/figures/caching_approach.gv
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
digraph graphname {
graph [fontname = "helvetica", fontsize=11];
node [shape="box", fontname = "helvetica", fontsize=11];
edge [fontname = "helvetica", fontsize=11];
rankdir="TB";

subgraph cluster_browser {
label = "Browser Process";

subgraph cluster_cache_tree {
label = "Cached accessibility tree";
rankdir="TB";

root_cache [label="Root node"];
root_cache -> { button_cache, other_cache } [dir=none];
button_cache [label="Button node"];
other_cache [label="..."];
}
}

subgraph cluster_render {
label = "Render Process";

subgraph cluster_ax_tree {
label = "Accessibility tree";
rankdir="TB";

root_node [label="Root"];
root_node -> { button_node, other_node } [dir=none];
button_node [label="Button"];
other_node [label="..."];
}

subgraph cluster_dom_tree {
label = "DOM tree";
rankdir="TB";

root_dom_node [label="<body>"];
root_dom_node -> { button_dom_node, other_dom_node } [dir=none];
root_dom_node -> other_dom_node;
button_dom_node [label="<button>"];
other_dom_node [label="..."];
}

}

os [label="Operating System"];
os -> root_cache [dir=both];
root_cache -> root_node [dir=back, label="Atomic updates"];
root_node -> root_dom_node [dir=both];
}
Binary file added docs/accessibility/figures/caching_approach.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 40 additions & 0 deletions docs/accessibility/figures/multi_process_ax.gv
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
digraph graphname {
graph [fontname = "helvetica", fontsize=11];
node [shape="box", fontname = "helvetica", fontsize=11];
edge [fontname = "helvetica", fontsize=11];
rankdir="RL";

subgraph cluster_browser {
label = "Browser Process";

subgraph cluster_browser_ax {
label = "BrowserAccessibilityManager";

ax_tree [label="AXTree"];
}
}

subgraph cluster_render {
label = "Render Process";

subgraph cluster_blink {
label = "Blink";

dom_node [label="Node"];
dom_node -> {layout_object, ax_object};
css [label="CSS"];
css -> layout_object;
layout_object [label="LayoutObject"];
layout_object -> ax_object;
ax_object [label="AXObject"];
}

render_ax [label="RenderAccessibilityImpl"];
ax_object -> render_ax;
}

render_ax -> ax_tree [label="AXTreeSerializer"];

ax_tree -> at [label="Platform\nAccessibility APIs"];
at [label="Assistive\nTechnology"];
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
23 changes: 23 additions & 0 deletions docs/accessibility/figures/multi_process_browser.gv
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
digraph graphname {
graph [fontname = "helvetica", fontsize=11];
node [shape="box", fontname = "helvetica", fontsize=11];
edge [fontname = "helvetica", fontsize=11];
rankdir="RL";

subgraph cluster_renderer {
label = "Sandboxed Render Process";
web_page [label="Web Page Renderer (HTML, CSS, JS)"];
}

subgraph cluster_browser {
label = "Browser Process";
browser_window [label="Browser Window"];
}

browser_window -> web_page [label="User input events"];
web_page -> browser_window [label="Pixels"];

os [label="Operating System"];
os -> browser_window;
browser_window -> os;
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
46 changes: 46 additions & 0 deletions docs/accessibility/figures/multi_process_multiple_tabs.gv
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
digraph graphname {
graph [fontname = "helvetica", fontsize=11, compound=true];
node [shape="box", fontname = "helvetica", fontsize=11];
edge [fontname = "helvetica", fontsize=11];
rankdir="LR";

subgraph cluster_renderer1 {
label = "Render Process 1";
web_page1 [label="Web Page Renderer 1"];
}

subgraph cluster_renderer2 {
label = "Render Process 2";
web_page2 [label="Web Page Renderer 2"];
web_page3 [label="Web Page Renderer 3"];
}

subgraph cluster_renderer3 {
label = "Render Process 3";
web_page4 [label="Web Page Renderer 4"];
}

subgraph cluster_browser {
label = "Browser Process";

subgraph cluster_window1 {
label = "Browser Window";
tab1 [label="Tab 1"];
tab2 [label="Tab 2"];
}

subgraph cluster_window2 {
label = "Browser Window";
tab3 [label="Tab 3"];
tab4 [label="Tab 4"];
}
}

tab1 -> web_page1 [dir=both];
tab2 -> web_page2 [dir=both];
tab3 -> web_page3 [dir=both];
tab4 -> web_page4 [dir=both];

os [label="Operating System"];
os -> tab1 [lhead=cluster_browser, dir=both];
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
30 changes: 30 additions & 0 deletions docs/accessibility/figures/other_multi_process_browser.gv
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
digraph graphname {
graph [fontname = "helvetica", fontsize=11, compound=true];
node [shape="box", fontname = "helvetica", fontsize=11];
edge [fontname = "helvetica", fontsize=11];
rankdir="LR";

subgraph cluster_browser {
label = "Browser Process";

window [label="Browser Window"];
}

subgraph cluster_tab1 {
label = "Tab Process 1";
tab1 [label="Tab 1"];
}

subgraph cluster_tab2 {
label = "Tab Process 2";
tab2 [label="Tab 2"];
}

window -> tab1 [dir=both];
window -> tab2 [dir=both];

os [label="Operating System"];
os -> window [lhead=cluster_browser, dir=both];
os -> tab1 [dir=both];
os -> tab2 [dir=both];
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
51 changes: 51 additions & 0 deletions docs/accessibility/figures/proxy_approach.gv
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
digraph graphname {
graph [fontname = "helvetica", fontsize=11];
node [shape="box", fontname = "helvetica", fontsize=11];
edge [fontname = "helvetica", fontsize=11];
rankdir="TB";

subgraph cluster_browser {
label = "Browser Process";

subgraph cluster_proxy_tree {
label = "Proxy accessibility tree";
rankdir="TB";

root_proxy [label="Root proxy"];
root_proxy -> { button_proxy, other_proxy } [dir=none];
button_proxy [label="Button proxy"];
other_proxy [label="..."];
}
}

subgraph cluster_render {
label = "Render Process";

subgraph cluster_ax_tree {
label = "Accessibility tree";
rankdir="TB";

root_node [label="Root"];
root_node -> { button_node, other_node } [dir=none];
button_node [label="Button"];
other_node [label="..."];
}

subgraph cluster_dom_tree {
label = "DOM tree";
rankdir="TB";

root_dom_node [label="<body>"];
root_dom_node -> { button_dom_node, other_dom_node } [dir=none];
root_dom_node -> other_dom_node;
button_dom_node [label="<button>"];
other_dom_node [label="..."];
}

}

os [label="Operating System"];
os -> root_proxy [dir=both];
root_proxy -> root_node [dir=both, label="Blocking IPC"];
root_node -> root_dom_node [dir=both];
}
Binary file added docs/accessibility/figures/proxy_approach.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions docs/accessibility/figures/single_process_css_system.gv
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ digraph graphname {
graph [fontname = "helvetica", fontsize=11];
node [shape="box", fontname = "helvetica", fontsize=11];
edge [fontname = "helvetica", fontsize=11];
rankdir="RL";

subgraph cluster_browser {
label = "Browser";
Expand Down
Binary file modified docs/accessibility/figures/single_process_css_system.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions docs/accessibility/figures/single_process_system.gv
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ digraph graphname {
graph [fontname = "helvetica", fontsize=11];
node [shape="box", fontname = "helvetica", fontsize=11];
edge [fontname = "helvetica", fontsize=11];
rankdir="RL";

subgraph cluster_browser {
label = "Browser";
Expand Down
Binary file modified docs/accessibility/figures/single_process_system.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 5ffcc86

Please sign in to comment.