Skip to content

Commit 054e490

Browse files
committed
Add a referer header to external requests
This fixes YouTube embeds
1 parent e5267d8 commit 054e490

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

src-main/index.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,21 @@ app.on('session-created', (session) => {
8787
window.onBeforeRequest(details, callback);
8888
});
8989

90+
session.webRequest.onBeforeSendHeaders((details, callback) => {
91+
const url = details.url.toLowerCase();
92+
if (url.startsWith('devtools:')) {
93+
return callback({});
94+
}
95+
96+
const webContents = details.webContents;
97+
const window = AbstractWindow.getWindowByWebContents(webContents);
98+
if (!webContents || !window) {
99+
return callback({});
100+
}
101+
102+
window.onBeforeSendHeaders(details, callback);
103+
});
104+
90105
session.webRequest.onHeadersReceived((details, callback) => {
91106
const window = AbstractWindow.getWindowByWebContents(details.webContents);
92107
if (!window) {

src-main/windows/abstract.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,15 @@ class AbstractWindow {
346346
callback({});
347347
}
348348

349+
/**
350+
* @param {Electron.OnBeforeSendHeadersListenerDetails} details
351+
* @param {(response: Electron.BeforeSendResponse) => void} callback
352+
*/
353+
onBeforeSendHeaders (details, callback) {
354+
// to be overridden
355+
callback({});
356+
}
357+
349358
/**
350359
* @param {Electron.OnHeadersReceivedListenerDetails} details
351360
* @param {(response: Electron.HeadersReceivedResponse) => void} callback

src-main/windows/project-running-window.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,23 @@ class ProjectRunningWindow extends AbtractWindow {
131131
super.onBeforeRequest(details, callback);
132132
}
133133

134+
onBeforeSendHeaders (details, callback) {
135+
const parsed = new URL(details.url);
136+
137+
if (WEB_PROTOCOLS.includes(parsed.protocol)) {
138+
// Some third-party APIs (eg. YouTube embeds) require a non-empty referer header.
139+
// The website being contacted already receives "turbowarp-desktop/x.y.z" in the user-agent so this isn't
140+
// revealing any metadata that they couldn't already have access to.
141+
return callback({
142+
requestHeaders: {
143+
'referer': 'https://docs.turbowarp.org/desktop/referer'
144+
}
145+
});
146+
}
147+
148+
callback({});
149+
}
150+
134151
onHeadersReceived (details, callback) {
135152
if (
136153
settings.bypassCORS &&

0 commit comments

Comments
 (0)