Home page's search-box placeholder was hardcoded "Search the web (DuckDuckGo)", but the browser's default engine has been Startpage for a while and any user can switch to another in Settings. The "DuckDuckGo" claim then contradicted the actual engine that would run the query (main.js routes through settings.searchEngine). Fix: placeholder starts as plain "Search the web" and populates on load with "Search the web with <engine.name>" via a new window.home.getEngines() IPC (reuses the existing search-engines handler). Silently no-ops if the preload isn't bound. Also swapped the never-fires no-preload fallback URL from duckduckgo.com to startpage.com so it matches Theseus's own default.
30 lines
1.8 KiB
JavaScript
30 lines
1.8 KiB
JavaScript
// Preload for tab webContents that host the built-in home page. All non-
|
|
// settings tabs get this preload since we don't know in advance whether a
|
|
// tab will land on home.html; the corresponding IPC handlers in main.js
|
|
// validate the sender's URL is our own home.html file:// and reject any
|
|
// origin-mismatched call, so a third-party page can inspect the API's
|
|
// SHAPE but can't invoke it against local user data.
|
|
const { contextBridge, ipcRenderer } = require("electron");
|
|
contextBridge.exposeInMainWorld("home", {
|
|
getCards: () => ipcRenderer.invoke("home-cards-get"),
|
|
setCards: (cards) => ipcRenderer.invoke("home-cards-set", cards),
|
|
resetCards: () => ipcRenderer.invoke("home-cards-reset"),
|
|
navigate: (url) => ipcRenderer.invoke("navigate", url),
|
|
// Current default search engine — used to populate the search box
|
|
// placeholder with the actual engine name (e.g. "Search the web with
|
|
// Startpage") instead of hardcoding DuckDuckGo.
|
|
getEngines: () => ipcRenderer.invoke("search-engines"),
|
|
// Main pushes an updated list here after a successful remote refresh
|
|
// (only when the user has not customised locally). home.html re-renders.
|
|
onCards: (cb) => ipcRenderer.on("home-cards", (_e, list) => cb(list)),
|
|
});
|
|
// Same preload also serves the branded error page (error.html). Handlers in
|
|
// main.js sender-check for error.html so a random page seeing the API shape
|
|
// can't drive navigation.
|
|
contextBridge.exposeInMainWorld("errorpage", {
|
|
retry: (url) => ipcRenderer.invoke("error-retry", url),
|
|
goHome: () => ipcRenderer.invoke("error-home"),
|
|
searchFor: (text) => ipcRenderer.invoke("error-search", text),
|
|
registerOnSirius: (host) => ipcRenderer.invoke("error-register", host),
|
|
openExternal: (url) => ipcRenderer.invoke("error-open-external", url),
|
|
});
|