Chromium Code Reviews| Index: content/browser/resources/accessibility/accessibility.js |
| diff --git a/content/browser/resources/accessibility/accessibility.js b/content/browser/resources/accessibility/accessibility.js |
| index a4ce49800e0b466a39572d23c206b555afdf140e..02c658da19d000bd892f6b21bffb87f99a5666fd 100644 |
| --- a/content/browser/resources/accessibility/accessibility.js |
| +++ b/content/browser/resources/accessibility/accessibility.js |
| @@ -5,6 +5,14 @@ |
| cr.define('accessibility', function() { |
| 'use strict'; |
| + // Note: keep these values in sync with the values in |
|
dmazzoni
2017/02/13 19:53:42
Things that need to be kept in sync are always a m
dougt
2017/02/14 15:21:52
Yes, this makes sense. I would like to do this wo
|
| + // content/common/accessibility_mode_enums.h |
| + const MODE_FLAG_NATIVE_APIS = 1 << 0; |
| + const MODE_FLAG_WEB_CONTENTS = 1 << 1; |
| + const MODE_FLAG_INLINE_TEXT_BOXES = 1 << 2; |
| + const MODE_FLAG_SCREEN_READER = 1 << 3; |
| + const MODE_FLAG_HTML = 1 << 4; |
| + |
| function requestData() { |
| var xhr = new XMLHttpRequest(); |
| xhr.open('GET', 'targets-data.json', false); |
| @@ -16,23 +24,10 @@ cr.define('accessibility', function() { |
| return []; |
| } |
| - // TODO(aboxhall): add a mechanism to request individual and global a11y |
| - // mode, xhr them on toggle... or just re-requestData and be smarter about |
| - // ID-ing rows? |
| - |
| - function toggleAccessibility(data, element) { |
| + function toggleAccessibility(data, element, mode) { |
| chrome.send('toggleAccessibility', |
| - [String(data.processId), String(data.routeId)]); |
| - var a11y_was_on = (element.textContent.match(/on/) != null); |
| - element.textContent = ' accessibility ' + (a11y_was_on ? ' off' : ' on'); |
| - var row = element.parentElement; |
| - if (a11y_was_on) { |
| - while (row.lastChild != element) |
| - row.removeChild(row.lastChild); |
| - } else { |
| - row.appendChild(document.createTextNode(' | ')); |
| - row.appendChild(createShowAccessibilityTreeElement(data, row, false)); |
| - } |
| + [String(data.processId), String(data.routeId), mode]); |
| + document.location.reload(); |
| } |
| function requestAccessibilityTree(data, element) { |
| @@ -68,7 +63,7 @@ cr.define('accessibility', function() { |
| } |
| $(name).addEventListener('change', function() { |
| chrome.send('setGlobalFlag', [name, $(name).checked]); |
| - document.location.reload(); // FIXME see TODO above |
| + document.location.reload(); |
| }); |
| } |
| @@ -94,24 +89,30 @@ cr.define('accessibility', function() { |
| return; |
| } |
| } |
| + |
| + var siteInfo = document.createElement('div'); |
| var properties = ['favicon_url', 'name', 'url']; |
| for (var j = 0; j < properties.length; j++) |
| - row.appendChild(formatValue(data, properties[j])); |
| - |
| - row.appendChild(createToggleAccessibilityElement(data)); |
| - if (data['a11y_mode']) { |
| - row.appendChild(document.createTextNode(' | ')); |
| - if ('tree' in data) { |
| - row.appendChild(createShowAccessibilityTreeElement(data, row, true)); |
| - row.appendChild(document.createTextNode(' | ')); |
| - row.appendChild(createHideAccessibilityTreeElement(row.id)); |
| - row.appendChild(createAccessibilityTreeElement(data)); |
| - } |
| - else { |
| - row.appendChild(createShowAccessibilityTreeElement(data, row, false)); |
| - if ('error' in data) |
| - row.appendChild(createErrorMessageElement(data, row)); |
| - } |
| + siteInfo.appendChild(formatValue(data, properties[j])); |
| + row.appendChild(siteInfo); |
| + |
| + row.appendChild(createModeElement(MODE_FLAG_NATIVE_APIS, data)) |
| + row.appendChild(createModeElement(MODE_FLAG_WEB_CONTENTS, data)) |
| + row.appendChild(createModeElement(MODE_FLAG_INLINE_TEXT_BOXES, data)) |
| + row.appendChild(createModeElement(MODE_FLAG_SCREEN_READER, data)) |
| + row.appendChild(createModeElement(MODE_FLAG_HTML, data)) |
| + |
| + row.appendChild(document.createTextNode(' | ')); |
| + |
| + if ('tree' in data) { |
| + row.appendChild(createShowAccessibilityTreeElement(data, row, true)); |
| + row.appendChild(createHideAccessibilityTreeElement(row.id)); |
| + row.appendChild(createAccessibilityTreeElement(data)); |
| + } |
| + else { |
| + row.appendChild(createShowAccessibilityTreeElement(data, row, false)); |
| + if ('error' in data) |
| + row.appendChild(createErrorMessageElement(data, row)); |
| } |
| } |
| @@ -136,14 +137,32 @@ cr.define('accessibility', function() { |
| return span; |
| } |
| - function createToggleAccessibilityElement(data) { |
| + function getNameForAccessibilityMode(mode) { |
| + switch (mode) { |
| + case MODE_FLAG_NATIVE_APIS: |
| + return "native" |
| + case MODE_FLAG_WEB_CONTENTS: |
| + return "web" |
| + case MODE_FLAG_INLINE_TEXT_BOXES: |
| + return "inline text" |
| + case MODE_FLAG_SCREEN_READER: |
| + return "screen reader" |
| + case MODE_FLAG_HTML: |
| + return "html" |
| + } |
| + return "unknown" |
| + } |
| + |
| + function createModeElement(mode, data) { |
| + var currentMode = data['a11y_mode']; |
| var link = document.createElement('a', 'action-link'); |
| link.setAttribute('role', 'button'); |
| - var full_a11y_on = data['a11y_mode']; |
| - link.textContent = 'accessibility ' + (full_a11y_on ? 'on' : 'off'); |
| - link.setAttribute('aria-pressed', (full_a11y_on ? 'true' : 'false')); |
| + |
| + var stateText = ((currentMode & mode) != 0) ? 'true' : 'false'; |
| + link.textContent = getNameForAccessibilityMode(mode) + ": " + stateText; |
| + link.setAttribute('aria-pressed', stateText); |
| link.addEventListener('click', |
| - toggleAccessibility.bind(this, data, link)); |
| + toggleAccessibility.bind(this, data, link, mode)); |
| return link; |
| } |