Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove Facebook tracking from copied links #1169

Merged
merged 6 commits into from Nov 12, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
34 changes: 19 additions & 15 deletions source/index.ts
Expand Up @@ -25,7 +25,7 @@ import doNotDisturb = require('@sindresorhus/do-not-disturb');
import updateAppMenu from './menu';
import config from './config';
import tray from './tray';
import {sendAction, sendBackgroundAction} from './util';
import {sendAction, sendBackgroundAction, messengerDomain, stripTrackingFromUrl} from './util';
import {process as processEmojiUrl} from './emoji';
import ensureOnline from './ensure-online';
import './touch-bar'; // eslint-disable-line import/no-unassigned-import
Expand All @@ -40,9 +40,19 @@ electronDebug({
});

electronDl();
electronContextMenu();
electronContextMenu({
prepend: defaultActions => {
/*
TODO: Use menu option or use replacement of options (https://github.com/sindresorhus/electron-context-menu/issues/70)
See explanation for this hacky solution here: https://github.com/sindresorhus/caprine/pull/1169
*/
defaultActions.copyLink({
transform: stripTrackingFromUrl
});

const domain = config.get('useWorkChat') ? 'facebook.com' : 'messenger.com';
return [];
}
});

app.setAppUserModelId('com.sindresorhus.caprine');

Expand Down Expand Up @@ -176,7 +186,7 @@ function enableHiresResources(): void {
return;
}

const filter = {urls: [`*://*.${domain}/`]};
const filter = {urls: [`*://*.${messengerDomain}/`]};

session.defaultSession.webRequest.onBeforeSendHeaders(
filter,
Expand Down Expand Up @@ -204,10 +214,10 @@ function enableHiresResources(): void {
function initRequestsFiltering(): void {
const filter = {
urls: [
`*://*.${domain}/*typ.php*`, // Type indicator blocker
`*://*.${domain}/*change_read_status.php*`, // Seen indicator blocker
`*://*.${domain}/*delivery_receipts*`, // Delivery receipts indicator blocker
`*://*.${domain}/*unread_threads*`, // Delivery receipts indicator blocker
`*://*.${messengerDomain}/*typ.php*`, // Type indicator blocker
`*://*.${messengerDomain}/*change_read_status.php*`, // Seen indicator blocker
`*://*.${messengerDomain}/*delivery_receipts*`, // Delivery receipts indicator blocker
`*://*.${messengerDomain}/*unread_threads*`, // Delivery receipts indicator blocker
'*://*.fbcdn.net/images/emoji.php/v9/*', // Emoji
'*://*.facebook.com/images/emoji.php/v9/*' // Emoji
]
Expand Down Expand Up @@ -339,9 +349,6 @@ function createMainWindow(): BrowserWindow {

(async () => {
await Promise.all([ensureOnline(), app.whenReady()]);

const trackingUrlPrefix = `https://l.${domain}/l.php`;

await updateAppMenu();
mainWindow = createMainWindow();

Expand Down Expand Up @@ -468,10 +475,7 @@ function createMainWindow(): BrowserWindow {
(event as any).newGuest = new BrowserWindow(options);
}
} else {
if (url.startsWith(trackingUrlPrefix)) {
url = new URL(url).searchParams.get('u')!;
}

url = stripTrackingFromUrl(url);
await shell.openExternal(url);
}
});
Expand Down
12 changes: 12 additions & 0 deletions source/util.ts
@@ -1,5 +1,6 @@
import {app, BrowserWindow, dialog} from 'electron';
import {is} from 'electron-util';
import config from './config';

export function getWindow(): BrowserWindow {
const [win] = BrowserWindow.getAllWindows();
Expand Down Expand Up @@ -37,3 +38,14 @@ export function showRestartDialog(message: string): void {
app.quit();
}
}

export const messengerDomain = config.get('useWorkChat') ? 'facebook.com' : 'messenger.com';

export function stripTrackingFromUrl(url: string): string {
const trackingUrlPrefix = `https://l.${messengerDomain}/l.php`;
if (url.startsWith(trackingUrlPrefix)) {
url = new URL(url).searchParams.get('u')!;
}

return url;
}