aboutsummaryrefslogtreecommitdiff
path: root/ext/js/accessibility
diff options
context:
space:
mode:
Diffstat (limited to 'ext/js/accessibility')
-rw-r--r--ext/js/accessibility/google-docs.js32
1 files changed, 31 insertions, 1 deletions
diff --git a/ext/js/accessibility/google-docs.js b/ext/js/accessibility/google-docs.js
index f9ba0f7f..e45743ab 100644
--- a/ext/js/accessibility/google-docs.js
+++ b/ext/js/accessibility/google-docs.js
@@ -15,7 +15,36 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
-(() => {
+(async () => {
+ // Reentrant check
+ if (self.googleDocsAccessibilitySetup) { return; }
+ self.googleDocsAccessibilitySetup = true;
+
+ const invokeApi = (action, params) => {
+ return new Promise((resolve, reject) => {
+ chrome.runtime.sendMessage({action, params}, (response) => {
+ void chrome.runtime.lastError;
+ if (typeof response !== 'object' || response === null) {
+ reject(new Error('Unexpected response'));
+ } else if (typeof response.error !== 'undefined') {
+ reject(new Error('Invalid response'));
+ } else {
+ resolve(response.result);
+ }
+ });
+ });
+ };
+
+ const optionsContext = {depth: 0, url: location.href};
+ let options;
+ try {
+ options = await invokeApi('optionsGet', {optionsContext});
+ } catch (e) {
+ return;
+ }
+
+ if (!options.accessibility.forceGoogleDocsHtmlRendering) { return; }
+
let parent = document.head;
if (parent === null) {
parent = document.documentElement;
@@ -24,4 +53,5 @@
const script = document.createElement('script');
script.textContent = 'window._docs_force_html_by_ext = true;';
parent.appendChild(script);
+ parent.removeChild(script);
})();