Merge pull request #127 from th-ch/fix-plugins-context-isolation

Fix plugins with context isolation
This commit is contained in:
th-ch
2021-01-13 21:44:37 +01:00
committed by GitHub
5 changed files with 30 additions and 19 deletions

View File

@ -86,7 +86,9 @@ function createMainWindow() {
backgroundColor: "#000", backgroundColor: "#000",
show: false, show: false,
webPreferences: { webPreferences: {
contextIsolation: true, // TODO: re-enable contextIsolation once it can work with ffmepg.wasm
// Possible bundling? https://github.com/ffmpegwasm/ffmpeg.wasm/issues/126
contextIsolation: false,
preload: path.join(__dirname, "preload.js"), preload: path.join(__dirname, "preload.js"),
nodeIntegrationInSubFrames: true, nodeIntegrationInSubFrames: true,
nativeWindowOpen: true, // window.open return Window object(like in regular browsers), not BrowserWindowProxy nativeWindowOpen: true, // window.open return Window object(like in regular browsers), not BrowserWindowProxy

View File

@ -1,3 +1,5 @@
const { contextBridge } = require("electron");
const { ElementFromFile, templatePath, triggerAction } = require("../utils"); const { ElementFromFile, templatePath, triggerAction } = require("../utils");
const { ACTIONS, CHANNEL } = require("./actions.js"); const { ACTIONS, CHANNEL } = require("./actions.js");
const { downloadVideoToMP3 } = require("./youtube-dl"); const { downloadVideoToMP3 } = require("./youtube-dl");
@ -28,6 +30,9 @@ const reinit = () => {
} }
}; };
// TODO: re-enable once contextIsolation is set to true
// contextBridge.exposeInMainWorld("downloader", {
// download: () => {
global.download = () => { global.download = () => {
const videoUrl = window.location.href; const videoUrl = window.location.href;
@ -48,6 +53,7 @@ global.download = () => {
pluginOptions pluginOptions
); );
}; };
// });
function observeMenu(options) { function observeMenu(options) {
pluginOptions = { ...pluginOptions, ...options }; pluginOptions = { ...pluginOptions, ...options };

View File

@ -1,24 +1,24 @@
const { triggerAction } = require('../utils'); const { triggerAction } = require("../utils");
const CHANNEL = "navigation"; const CHANNEL = "navigation";
const ACTIONS = { const ACTIONS = {
NEXT: "next", NEXT: "next",
BACK: 'back', BACK: "back",
} };
function goToNextPage() { function goToNextPage() {
triggerAction(CHANNEL, ACTIONS.NEXT); triggerAction(CHANNEL, ACTIONS.NEXT);
} }
function goToPreviousPage() { function goToPreviousPage() {
triggerAction(CHANNEL, ACTIONS.BACK); triggerAction(CHANNEL, ACTIONS.BACK);
} }
module.exports = { module.exports = {
CHANNEL: CHANNEL, CHANNEL: CHANNEL,
ACTIONS: ACTIONS, ACTIONS: ACTIONS,
global: { actions: {
goToNextPage: goToNextPage, goToNextPage: goToNextPage,
goToPreviousPage: goToPreviousPage, goToPreviousPage: goToPreviousPage,
} },
}; };

View File

@ -1,23 +1,23 @@
const path = require("path"); const path = require("path");
const { injectCSS, listenAction } = require("../utils"); const { injectCSS, listenAction } = require("../utils");
const { ACTIONS, CHANNEL } = require("./actions.js"); const { ACTIONS, CHANNEL } = require("./actions.js");
function handle(win) { function handle(win) {
injectCSS(win.webContents, path.join(__dirname, "style.css")); injectCSS(win.webContents, path.join(__dirname, "style.css"));
listenAction(CHANNEL, (event, action) => { listenAction(CHANNEL, (event, action) => {
switch (action) { switch (action) {
case ACTIONS.NEXT: case ACTIONS.NEXT:
if (win.webContents.canGoForward()) { if (win.webContents.canGoForward()) {
win.webContents.goForward(); win.webContents.goForward();
} }
break; break;
case ACTIONS.BACK: case ACTIONS.BACK:
if (win.webContents.canGoBack()) { if (win.webContents.canGoBack()) {
win.webContents.goBack(); win.webContents.goBack();
} }
break; break;
default: default:
console.log("Unknown action: " + action); console.log("Unknown action: " + action);
} }
}); });

View File

@ -1,6 +1,6 @@
const path = require("path"); const path = require("path");
const { remote } = require("electron"); const { contextBridge, remote } = require("electron");
const config = require("./config"); const config = require("./config");
const { fileExists } = require("./plugins/utils"); const { fileExists } = require("./plugins/utils");
@ -10,7 +10,10 @@ const plugins = config.plugins.getEnabled();
plugins.forEach(([plugin, options]) => { plugins.forEach(([plugin, options]) => {
const pluginPath = path.join(__dirname, "plugins", plugin, "actions.js"); const pluginPath = path.join(__dirname, "plugins", plugin, "actions.js");
fileExists(pluginPath, () => { fileExists(pluginPath, () => {
const actions = require(pluginPath).global || {}; const actions = require(pluginPath).actions || {};
// TODO: re-enable once contextIsolation is set to true
// contextBridge.exposeInMainWorld(plugin + "Actions", actions);
Object.keys(actions).forEach((actionName) => { Object.keys(actions).forEach((actionName) => {
global[actionName] = actions[actionName]; global[actionName] = actions[actionName];
}); });