diff --git a/src/_locales/en_US/messages.json b/src/_locales/en_US/messages.json index 4007f748b3..2bd67e7f75 100644 --- a/src/_locales/en_US/messages.json +++ b/src/_locales/en_US/messages.json @@ -23,6 +23,10 @@ "message": "Currently Privacy Badger only checks if third parties are using cookies, HTML5 local storage, or canvas fingerprinting to track your browsing. Some of these domains may be using tracking methods that Privacy Badger can't detect.", "description": "" }, + "options_enable_dnt_checkbox": { + "message": "Enable sending DNT header", + "description": "" + }, "options_dnt_policy_setting": { "message": "Check if sites comply with EFF's Do Not Track policy", "description": "Checkbox label on the general settings page" @@ -439,4 +443,4 @@ "message": "Oops. Something went wrong.", "description": "" } -} \ No newline at end of file +} diff --git a/src/js/background.js b/src/js/background.js index a40be92736..25a4a20b57 100644 --- a/src/js/background.js +++ b/src/js/background.js @@ -459,6 +459,7 @@ Badger.prototype = { showCounter: true, showTrackingDomains: false, socialWidgetReplacementEnabled: true, + DNTEnabled: true }, /** @@ -612,6 +613,13 @@ Badger.prototype = { return this.getSettings().getItem("socialWidgetReplacementEnabled"); }, + /** + * Check if social widget replacement functionality is enabled + */ + isDNTEnabled: function() { + return this.getSettings().getItem("DNTEnabled"); + }, + isCheckingDNTPolicyEnabled: function() { return this.getSettings().getItem("checkForDNTPolicy"); }, diff --git a/src/js/options.js b/src/js/options.js index 37463469d6..aab449d669 100644 --- a/src/js/options.js +++ b/src/js/options.js @@ -114,6 +114,8 @@ function loadOptions() { $("#show_counter_checkbox").prop("checked", badger.showCounter()); $("#replace_social_widgets_checkbox").on("click", updateSocialWidgetReplacement); $("#replace_social_widgets_checkbox").prop("checked", badger.isSocialWidgetReplacementEnabled()); + $("#enable_dnt_checkbox").on("click", updateDNTCheckboxClicked); + $("#enable_dnt_checkbox").prop("checked", badger.isDNTEnabled()); $("#check_dnt_policy_checkbox").on("click", updateCheckingDNTPolicy); $("#check_dnt_policy_checkbox").prop("checked", badger.isCheckingDNTPolicyEnabled()); @@ -316,6 +318,23 @@ function updateSocialWidgetReplacement() { }); } +/** + * Update DNT checkbox clicked + */ +function updateDNTCheckboxClicked() { + const enabled = $("#enable_dnt_checkbox").prop("checked"); + + chrome.runtime.sendMessage({ + type: "updateSettings", + data: { + DNTEnabled: enabled + } + }); + + $("#check_dnt_policy_checkbox").prop("checked", enabled).prop("disabled", enabled); + updateCheckingDNTPolicy(); +} + function updateCheckingDNTPolicy() { const enabled = $("#check_dnt_policy_checkbox").prop("checked"); diff --git a/src/js/webrequest.js b/src/js/webrequest.js index ba01e759cb..5604f5e3f3 100644 --- a/src/js/webrequest.js +++ b/src/js/webrequest.js @@ -172,7 +172,9 @@ function onBeforeSendHeaders(details) { if (!isThirdPartyDomain(requestDomain, tabDomain)) { if (badger.isPrivacyBadgerEnabled(tabDomain)) { // Still sending Do Not Track even if HTTP and cookie blocking are disabled - details.requestHeaders.push({name: "DNT", value: "1"}); + if (badger.isDNTEnabled()) { + details.requestHeaders.push({name: "DNT", value: "1"}); + } return {requestHeaders: details.requestHeaders}; } else { return {}; @@ -233,13 +235,17 @@ function onBeforeSendHeaders(details) { let newHeaders = details.requestHeaders.filter(function (header) { return (header.name.toLowerCase() != "cookie" && header.name.toLowerCase() != "referer"); }); - newHeaders.push({name: "DNT", value: "1"}); + if (badger.isDNTEnabled()) { + newHeaders.push({name: "DNT", value: "1"}); + } return {requestHeaders: newHeaders}; } // if we are here, we're looking at a third party // that's not yet blocked or cookieblocked - details.requestHeaders.push({name: "DNT", value: "1"}); + if (badger.isDNTEnabled()) { + details.requestHeaders.push({name: "DNT", value: "1"}); + } return {requestHeaders: details.requestHeaders}; } diff --git a/src/skin/options.html b/src/skin/options.html index 5a88fc6303..e008964e49 100644 --- a/src/skin/options.html +++ b/src/skin/options.html @@ -150,6 +150,12 @@

+
+ +