Skip to content

Commit a3ae9f8

Browse files
toggle visibility of x-client-data option, modify how check is made when stripping headers
1 parent 9266243 commit a3ae9f8

File tree

3 files changed

+33
-6
lines changed

3 files changed

+33
-6
lines changed

src/js/background.js

+7
Original file line numberDiff line numberDiff line change
@@ -844,6 +844,7 @@ Badger.prototype = {
844844
learnLocally: false,
845845
migrationLevel: 0,
846846
preventWebRTCIPLeak: false,
847+
removeXClientDataHeaders: false,
847848
seenComic: false,
848849
sendDNTSignal: true,
849850
showCounter: true,
@@ -1125,6 +1126,12 @@ Badger.prototype = {
11251126
return this.getSettings().getItem("checkForDNTPolicy");
11261127
},
11271128

1129+
isRemoveXClientDataHeaderEnabled: function() {
1130+
if (!chrome.runtime.getBrowserInfo) {
1131+
return this.getSettings().getItem("removeXClientDataHeaders");
1132+
}
1133+
},
1134+
11281135
isFlocOverwriteEnabled: function() {
11291136
if (document.interestCohort) {
11301137
return this.getSettings().getItem("disableFloc");

src/js/options.js

+16
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,22 @@ function loadOptions() {
168168
});
169169
}
170170

171+
// only show the x-client-data header setting if in Chrome & Chromium browsers
172+
// TODO: more accurate way to determine this is a Chrome or Chromium browser
173+
if (!chrome.runtime.getBrowserInfo) {
174+
$("#remove-x-client-data-toggle").show();
175+
$("#toggle-x-client-data-header-mode")
176+
.prop("checked", OPTIONS_DATA.settings.removeXClientDataHeaders)
177+
.on("click", function () {
178+
const removeXClientDataHeaders = $("#toggle-x-client-data-header-mode").prop("checked");
179+
180+
chrome.runtime.sendMessage({
181+
type: "updateSettings",
182+
data: { removeXClientDataHeaders }
183+
});
184+
});
185+
}
186+
171187
if (OPTIONS_DATA.webRTCAvailable && OPTIONS_DATA.legacyWebRtcProtectionUser) {
172188
$("#webRTCToggle").show();
173189
$("#toggle_webrtc_mode")

src/js/webrequest.js

+10-6
Original file line numberDiff line numberDiff line change
@@ -203,14 +203,18 @@ function onBeforeSendHeaders(details) {
203203
type = details.type,
204204
url = details.url;
205205

206+
// option to remove x-client-data headers as well
207+
const removeXClientData = badger.isRemoveXClientDataHeaderEnabled();
208+
206209
if (_isTabChromeInternal(tab_id)) {
207210
// DNT policy requests: strip cookies
208211
if (type == "xmlhttprequest" && url.endsWith("/.well-known/dnt-policy.txt")) {
209-
// remove Cookie headers and X-Client-Data headers
212+
// remove Cookie headers
210213
let newHeaders = [];
214+
211215
for (let i = 0, count = details.requestHeaders.length; i < count; i++) {
212216
let header = details.requestHeaders[i];
213-
if (header.name.toLowerCase() != "cookie" && header.name.toLowerCase() != "x-client-data") {
217+
if (header.name.toLowerCase() != "cookie" || (removeXClientData && header.name.toLowerCase() != 'x-client-data')) {
214218
newHeaders.push(header);
215219
}
216220
}
@@ -256,10 +260,10 @@ function onBeforeSendHeaders(details) {
256260
if (action == constants.COOKIEBLOCK || action == constants.USER_COOKIEBLOCK) {
257261
let newHeaders;
258262

259-
// GET requests: remove cookie headers and X-client-data headers, reduce referrer header to origin
263+
// GET requests: remove cookie (and x-client-data if option is set) headers, reduce referrer header to origin
260264
if (details.method == "GET") {
261265
newHeaders = details.requestHeaders.filter(header => {
262-
return (header.name.toLowerCase() != "cookie" && header.name.toLowerCase() != "x-client-data");
266+
return (header.name.toLowerCase() != "cookie" || (removeXClientData && header.name.toLowerCase() != 'x-client-data'));
263267
}).map(header => {
264268
if (header.name.toLowerCase() == "referer") {
265269
header.value = header.value.slice(
@@ -270,10 +274,10 @@ function onBeforeSendHeaders(details) {
270274
return header;
271275
});
272276

273-
// remove cookie, referrer, and X-Client-Data headers otherwise
277+
// remove cookie, referrer (and x-client-data if option is set) otherwise
274278
} else {
275279
newHeaders = details.requestHeaders.filter(header => {
276-
return (header.name.toLowerCase() != "cookie" && header.name.toLowerCase() != "referer" && header.name.toLowerCase() != "x-client-data");
280+
return (header.name.toLowerCase() != "cookie" && header.name.toLowerCase() != "referer" && (removeXClientData && header.name.toLowerCase() != 'x-client-data'));
277281
});
278282
}
279283

0 commit comments

Comments
 (0)