Skip to content

Commit

Permalink
Update google docs injection
Browse files Browse the repository at this point in the history
  • Loading branch information
toasted-nutbread committed Dec 28, 2023
1 parent b31cdd1 commit 0486977
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 65 deletions.
26 changes: 18 additions & 8 deletions ext/js/accessibility/accessibility-controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -86,14 +86,24 @@ export class AccessibilityController {
try {
if (forceGoogleDocsHtmlRenderingAny) {
if (await isContentScriptRegistered(id)) { return; }
/** @type {import('script-manager').RegistrationDetails} */
const details = {
allFrames: true,
matches: ['*://docs.google.com/*'],
runAt: 'document_start',
js: ['js/accessibility/google-docs.js']
};
await registerContentScript(id, details);
try {
await registerContentScript(id, {
allFrames: true,
matches: ['*://docs.google.com/*'],
runAt: 'document_start',
js: ['js/accessibility/google-docs.js'],
world: 'MAIN'
});
} catch (e) {
// Firefox doesn't support `world` field and will throw an error.
// In this case, use the xray vision version.
await registerContentScript(id, {
allFrames: true,
matches: ['*://docs.google.com/*'],
runAt: 'document_start',
js: ['js/accessibility/google-docs-xray.js']
});
}
} else {
await unregisterContentScript(id);
}
Expand Down
30 changes: 30 additions & 0 deletions ext/js/accessibility/google-docs-xray.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* Copyright (C) 2023 Yomitan Authors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

/** Entry point. */
function main() {
/** @type {Window} */
// @ts-expect-error - Firefox Xray vision
const window2 = window.wrappedJSObject;
if (!(typeof window2 === 'object' && window2 !== null)) { return; }
// The extension ID below is on an allow-list that is used on the Google Docs webpage.
// @ts-expect-error - Adding a property to the global object
// eslint-disable-next-line no-underscore-dangle
window2._docs_annotate_canvas_by_ext = 'ogmnaimimemjmbakcfefmnahgdfhfami';
}

main();
61 changes: 4 additions & 57 deletions ext/js/accessibility/google-docs.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2023 Yomitan Authors
* Copyright (C) 2021-2022 Yomichan Authors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Expand All @@ -16,59 +15,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

(async () => {
// Reentrant check
// @ts-expect-error - Checking a property to the global object
if (self.googleDocsAccessibilitySetup) { return; }
// @ts-expect-error - Adding a property to the global object
self.googleDocsAccessibilitySetup = true;

/**
* @template {import('api').ApiNames} TAction
* @template {import('api').ApiParams<TAction>} TParams
* @param {TAction} action
* @param {TParams} params
* @returns {Promise<import('api').ApiReturn<TAction>>}
*/
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};
/** @type {import('api').ApiReturn<'optionsGet'>} */
let options;
try {
options = await invokeApi('optionsGet', {optionsContext});
} catch (e) {
return;
}

if (!options.accessibility.forceGoogleDocsHtmlRendering) { return; }

// The extension ID below is on an allow-list that is used on the Google Docs webpage.
/* eslint-disable */
// @ts-expect-error : Adding a property to the global object
const inject = () => { window._docs_annotate_canvas_by_ext = 'ogmnaimimemjmbakcfefmnahgdfhfami'; };
/* eslint-enable */

let parent = document.head;
if (parent === null) {
parent = document.documentElement;
if (parent === null) { return; }
}
const script = document.createElement('script');
script.textContent = `(${inject.toString()})();`;
parent.appendChild(script);
parent.removeChild(script);
})();
// The extension ID below is on an allow-list that is used on the Google Docs webpage.
// @ts-expect-error - Adding a property to the global object
// eslint-disable-next-line no-underscore-dangle
window._docs_annotate_canvas_by_ext = 'ogmnaimimemjmbakcfefmnahgdfhfami';

0 comments on commit 0486977

Please sign in to comment.