mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1177085 - Add a preferences panel for changing the pre-loaded TP blocklist. r=jaws,francois
This commit is contained in:
parent
2762396baa
commit
f17cc3c0e1
189
browser/components/preferences/blocklists.js
Normal file
189
browser/components/preferences/blocklists.js
Normal file
@ -0,0 +1,189 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
Components.utils.import("resource://gre/modules/Services.jsm");
|
||||
const TEST_LIST = "test-track-simple";
|
||||
const TRACK_SUFFIX = "-track-digest256";
|
||||
const NAME_SUFFIX = ".name";
|
||||
const TRACKING_TABLE_PREF = "urlclassifier.trackingTable";
|
||||
|
||||
let gBlocklistManager = {
|
||||
_type: "",
|
||||
_blockLists: [],
|
||||
_brandShortName : null,
|
||||
_bundle: null,
|
||||
_tree: null,
|
||||
|
||||
_view: {
|
||||
_rowCount: 0,
|
||||
get rowCount() {
|
||||
return this._rowCount;
|
||||
},
|
||||
getCellText: function (row, column) {
|
||||
if (column.id == "listCol") {
|
||||
return gBlocklistManager._blockLists[row].name;
|
||||
}
|
||||
return "";
|
||||
},
|
||||
|
||||
isSeparator: function(index) { return false; },
|
||||
isSorted: function() { return false; },
|
||||
isContainer: function(index) { return false; },
|
||||
setTree: function(tree) {},
|
||||
getImageSrc: function(row, column) {},
|
||||
getProgressMode: function(row, column) {},
|
||||
getCellValue: function(row, column) {
|
||||
if (column.id == "selectionCol")
|
||||
return gBlocklistManager._blockLists[row].selected;
|
||||
return undefined;
|
||||
},
|
||||
cycleHeader: function(column) {},
|
||||
getRowProperties: function(row) { return ""; },
|
||||
getColumnProperties: function(column) { return ""; },
|
||||
getCellProperties: function(row, column) {
|
||||
if (column.id == "selectionCol") {
|
||||
return "checkmark";
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
},
|
||||
|
||||
onWindowKeyPress: function (event) {
|
||||
if (event.keyCode == KeyEvent.DOM_VK_ESCAPE) {
|
||||
window.close();
|
||||
} else if (event.keyCode == KeyEvent.DOM_VK_RETURN) {
|
||||
gBlocklistManager.onApplyChanges();
|
||||
}
|
||||
},
|
||||
|
||||
onLoad: function () {
|
||||
this._bundle = document.getElementById("bundlePreferences");
|
||||
let params = window.arguments[0];
|
||||
this.init(params);
|
||||
},
|
||||
|
||||
init: function (params) {
|
||||
if (this._type) {
|
||||
// reusing an open dialog, clear the old observer
|
||||
this.uninit();
|
||||
}
|
||||
|
||||
this._type = "tracking";
|
||||
this._brandShortName = params.brandShortName;
|
||||
|
||||
let blocklistsText = document.getElementById("blocklistsText");
|
||||
while (blocklistsText.hasChildNodes()) {
|
||||
blocklistsText.removeChild(blocklistsText.firstChild);
|
||||
}
|
||||
blocklistsText.appendChild(document.createTextNode(params.introText));
|
||||
|
||||
document.title = params.windowTitle;
|
||||
|
||||
let treecols = document.getElementsByTagName("treecols")[0];
|
||||
treecols.addEventListener("click", event => {
|
||||
if (event.target.nodeName != "treecol" || event.button != 0) {
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
this._loadBlockLists();
|
||||
},
|
||||
|
||||
uninit: function () {},
|
||||
|
||||
onListSelected: function () {
|
||||
for (let list of this._blockLists) {
|
||||
list.selected = false;
|
||||
}
|
||||
this._blockLists[this._tree.currentIndex].selected = true;
|
||||
|
||||
this._updateTree();
|
||||
},
|
||||
|
||||
onApplyChanges: function () {
|
||||
let activeList = this._getActiveList();
|
||||
let selected = null;
|
||||
for (let list of this._blockLists) {
|
||||
if (list.selected) {
|
||||
selected = list;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (activeList !== selected.id) {
|
||||
const Cc = Components.classes, Ci = Components.interfaces;
|
||||
let msg = this._bundle.getFormattedString("blocklistChangeRequiresRestart",
|
||||
[this._brandShortName]);
|
||||
let title = this._bundle.getFormattedString("shouldRestartTitle",
|
||||
[this._brandShortName]);
|
||||
let shouldProceed = Services.prompt.confirm(window, title, msg);
|
||||
if (shouldProceed) {
|
||||
let cancelQuit = Cc["@mozilla.org/supports-PRBool;1"]
|
||||
.createInstance(Ci.nsISupportsPRBool);
|
||||
Services.obs.notifyObservers(cancelQuit, "quit-application-requested",
|
||||
"restart");
|
||||
shouldProceed = !cancelQuit.data;
|
||||
|
||||
if (shouldProceed) {
|
||||
let trackingTable = TEST_LIST + "," + selected.id + TRACK_SUFFIX;
|
||||
Services.prefs.setCharPref(TRACKING_TABLE_PREF, trackingTable);
|
||||
|
||||
Services.startup.quit(Ci.nsIAppStartup.eAttemptQuit |
|
||||
Ci.nsIAppStartup.eRestart);
|
||||
}
|
||||
}
|
||||
|
||||
// Don't close the dialog in case we didn't quit.
|
||||
return;
|
||||
}
|
||||
window.close();
|
||||
},
|
||||
|
||||
_loadBlockLists: function () {
|
||||
this._blockLists = [];
|
||||
|
||||
// Get the active block list.
|
||||
let activeList = this._getActiveList();
|
||||
|
||||
// Load blocklists into a table.
|
||||
let branch = Services.prefs.getBranch("browser.safebrowsing.provider.mozilla.lists.");
|
||||
let itemArray = branch.getChildList("");
|
||||
for (let itemName of itemArray) {
|
||||
if (!itemName.endsWith(NAME_SUFFIX)) {
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
let nameKey = branch.getCharPref(itemName);
|
||||
let name = this._bundle.getString(nameKey);
|
||||
let id = itemName.replace(NAME_SUFFIX, "");
|
||||
let selected = activeList === id;
|
||||
this._blockLists.push({ name, id, selected });
|
||||
} catch (e) {
|
||||
// Ignore bogus or missing list name.
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
this._updateTree();
|
||||
},
|
||||
|
||||
_updateTree: function () {
|
||||
this._tree = document.getElementById("blocklistsTree");
|
||||
this._view._rowCount = this._blockLists.length;
|
||||
this._tree.view = this._view;
|
||||
},
|
||||
|
||||
_getActiveList: function () {
|
||||
let activeList = Services.prefs.getCharPref(TRACKING_TABLE_PREF);
|
||||
activeList = activeList.replace(TEST_LIST, "");
|
||||
activeList = activeList.replace(",", "");
|
||||
activeList = activeList.replace(TRACK_SUFFIX, "");
|
||||
return activeList.trim();
|
||||
}
|
||||
};
|
||||
|
||||
function initWithParams(params) {
|
||||
gBlocklistManager.init(params);
|
||||
}
|
56
browser/components/preferences/blocklists.xul
Normal file
56
browser/components/preferences/blocklists.xul
Normal file
@ -0,0 +1,56 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css" type="text/css"?>
|
||||
|
||||
<!DOCTYPE dialog SYSTEM "chrome://browser/locale/preferences/blocklists.dtd" >
|
||||
|
||||
<window id="BlocklistsDialog" class="windowDialog"
|
||||
windowtype="Browser:Blocklists"
|
||||
title="&window.title;"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
style="width: &window.width;;"
|
||||
onload="gBlocklistManager.onLoad();"
|
||||
onunload="gBlocklistManager.uninit();"
|
||||
persist="screenX screenY width height"
|
||||
onkeypress="gBlocklistManager.onWindowKeyPress(event);">
|
||||
|
||||
<script src="chrome://global/content/treeUtils.js"/>
|
||||
<script src="chrome://browser/content/preferences/blocklists.js"/>
|
||||
|
||||
<stringbundle id="bundlePreferences"
|
||||
src="chrome://browser/locale/preferences/preferences.properties"/>
|
||||
|
||||
<keyset>
|
||||
<key key="&windowClose.key;" modifiers="accel" oncommand="window.close();"/>
|
||||
</keyset>
|
||||
|
||||
<vbox class="contentPane largeDialogContainer" flex="1">
|
||||
<description id="blocklistsText" control="url"/>
|
||||
<separator class="thin"/>
|
||||
<tree id="blocklistsTree" flex="1" style="height: 18em;"
|
||||
hidecolumnpicker="true"
|
||||
onselect="gBlocklistManager.onListSelected();">
|
||||
<treecols>
|
||||
<treecol id="selectionCol" label="" flex="1" sortable="false"
|
||||
type="checkbox"/>
|
||||
<treecol id="listCol" label="&treehead.list.label;" flex="80"
|
||||
sortable="false"/>
|
||||
</treecols>
|
||||
<treechildren/>
|
||||
</tree>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<spacer flex="1"/>
|
||||
<hbox class="actionButtons" align="right" flex="1">
|
||||
<button oncommand="close();" icon="close"
|
||||
label="&button.cancel.label;" accesskey="&button.cancel.accesskey;" />
|
||||
<button id="btnApplyChanges" oncommand="gBlocklistManager.onApplyChanges();" icon="save"
|
||||
label="&button.ok.label;" accesskey="&button.ok.accesskey;"/>
|
||||
</hbox>
|
||||
</vbox>
|
||||
</window>
|
@ -116,6 +116,8 @@ var gPrivacyPane = {
|
||||
gPrivacyPane.showCookies);
|
||||
setEventListener("clearDataSettings", "command",
|
||||
gPrivacyPane.showClearPrivateDataSettings);
|
||||
setEventListener("changeBlockList", "command",
|
||||
gPrivacyPane.showBlockLists);
|
||||
},
|
||||
|
||||
// HISTORY MODE
|
||||
@ -365,6 +367,21 @@ var gPrivacyPane = {
|
||||
this._shouldPromptForRestart = true;
|
||||
},
|
||||
|
||||
/**
|
||||
* Displays the available block lists for tracking protection.
|
||||
*/
|
||||
showBlockLists: function ()
|
||||
{
|
||||
var bundlePreferences = document.getElementById("bundlePreferences");
|
||||
let brandName = document.getElementById("bundleBrand")
|
||||
.getString("brandShortName");
|
||||
var params = { brandShortName: brandName,
|
||||
windowTitle: bundlePreferences.getString("blockliststitle"),
|
||||
introText: bundlePreferences.getString("blockliststext") };
|
||||
gSubDialog.open("chrome://browser/content/preferences/blocklists.xul",
|
||||
null, params);
|
||||
},
|
||||
|
||||
// HISTORY
|
||||
|
||||
/*
|
||||
|
@ -27,6 +27,9 @@
|
||||
<preference id="pref.privacy.disable_button.view_cookies"
|
||||
name="pref.privacy.disable_button.view_cookies"
|
||||
type="bool"/>
|
||||
<preference id="pref.privacy.disable_button.change_blocklist"
|
||||
name="pref.privacy.disable_button.change_blocklist"
|
||||
type="bool"/>
|
||||
|
||||
<!-- Location Bar -->
|
||||
<preference id="browser.urlbar.autocomplete.enabled"
|
||||
@ -81,7 +84,7 @@
|
||||
</hbox>
|
||||
|
||||
<!-- Tracking -->
|
||||
<groupbox id="trackingGroup" data-category="panePrivacy" hidden="true" align="start">
|
||||
<groupbox id="trackingGroup" data-category="panePrivacy" hidden="true">
|
||||
<caption><label>&tracking.label;</label></caption>
|
||||
<vbox>
|
||||
<hbox align="center">
|
||||
@ -116,6 +119,10 @@
|
||||
<label id="trackingProtectionPBMLearnMore"
|
||||
class="text-link"
|
||||
value="&trackingProtectionPBMLearnMore.label;"/>
|
||||
<spacer flex="1" />
|
||||
<button id="changeBlockList"
|
||||
label="&changeBlockList.label;" accesskey="&changeBlockList.accesskey;"
|
||||
preference="pref.privacy.disable_button.change_blocklist"/>
|
||||
</hbox>
|
||||
</vbox>
|
||||
</groupbox>
|
||||
|
@ -9,6 +9,8 @@ browser.jar:
|
||||
content/browser/preferences/aboutPermissions.xml
|
||||
content/browser/preferences/applicationManager.xul
|
||||
* content/browser/preferences/applicationManager.js
|
||||
content/browser/preferences/blocklists.xul
|
||||
content/browser/preferences/blocklists.js
|
||||
* content/browser/preferences/colors.xul
|
||||
* content/browser/preferences/cookies.xul
|
||||
* content/browser/preferences/cookies.js
|
||||
|
@ -0,0 +1,14 @@
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<!ENTITY window.title "Block Lists">
|
||||
<!ENTITY window.width "50em">
|
||||
|
||||
<!ENTITY treehead.list.label "List">
|
||||
<!ENTITY windowClose.key "w">
|
||||
|
||||
<!ENTITY button.cancel.label "Cancel">
|
||||
<!ENTITY button.cancel.accesskey "C">
|
||||
<!ENTITY button.ok.label "Save Changes">
|
||||
<!ENTITY button.ok.accesskey "S">
|
@ -28,6 +28,18 @@ popuppermissionstitle=Allowed Sites - Pop-ups
|
||||
invalidURI=Please enter a valid hostname
|
||||
invalidURITitle=Invalid Hostname Entered
|
||||
|
||||
#### Block List Manager
|
||||
|
||||
blockliststext=You can choose which list Firefox will use to block Web elements that may track your browsing activity.
|
||||
blockliststitle=Block Lists
|
||||
# LOCALIZATION NOTE (mozstdName, etc.): These labels appear in the tracking
|
||||
# protection block lists dialog. They are the names of the block lists.
|
||||
mozstdName=Disconnect.me basic protection (Recommended). Allows some trackers so websites function properly.
|
||||
mozfullName=Disconnect.me strict protection. Blocks known trackers. Some sites may not function properly.
|
||||
# LOCALIZATION NOTE (blocklistChangeRequiresRestart, restartTitle): %S = brandShortName
|
||||
blocklistChangeRequiresRestart=%S must restart to change block lists.
|
||||
shouldRestartTitle=Restart %S
|
||||
|
||||
#### Master Password
|
||||
|
||||
pw_change2empty_in_fips_mode=You are currently in FIPS mode. FIPS requires a non-empty Master Password.
|
||||
|
@ -13,6 +13,8 @@
|
||||
<!ENTITY trackingProtectionPBM5.label "Use Tracking Protection in Private Windows">
|
||||
<!ENTITY trackingProtectionPBM5.accesskey "v">
|
||||
<!ENTITY trackingProtectionPBMLearnMore.label "Learn more">
|
||||
<!ENTITY changeBlockList.label "Change Block List">
|
||||
<!ENTITY changeBlockList.accesskey "C">
|
||||
|
||||
<!ENTITY history.label "History">
|
||||
|
||||
|
@ -122,6 +122,7 @@
|
||||
locale/browser/preferences/advanced.dtd (%chrome/browser/preferences/advanced.dtd)
|
||||
locale/browser/preferences/applicationManager.dtd (%chrome/browser/preferences/applicationManager.dtd)
|
||||
locale/browser/preferences/applicationManager.properties (%chrome/browser/preferences/applicationManager.properties)
|
||||
locale/browser/preferences/blocklists.dtd (%chrome/browser/preferences/blocklists.dtd)
|
||||
locale/browser/preferences/colors.dtd (%chrome/browser/preferences/colors.dtd)
|
||||
locale/browser/preferences/cookies.dtd (%chrome/browser/preferences/cookies.dtd)
|
||||
locale/browser/preferences/content.dtd (%chrome/browser/preferences/content.dtd)
|
||||
|
@ -22,6 +22,27 @@ treecol {
|
||||
-moz-user-select: none;
|
||||
}
|
||||
|
||||
#engineList treechildren::-moz-tree-image(engineShown, checked),
|
||||
#blocklistsTree treechildren::-moz-tree-image(selectionCol, checked) {
|
||||
list-style-image: url("chrome://global/skin/in-content/check.svg#check");
|
||||
width: 21px;
|
||||
height: 21px;
|
||||
}
|
||||
|
||||
#engineList treechildren::-moz-tree-image(engineShown, checked, selected),
|
||||
#blocklistsTree treechildren::-moz-tree-image(selectionCol, checked, selected) {
|
||||
list-style-image: url("chrome://global/skin/in-content/check.svg#check-inverted");
|
||||
}
|
||||
|
||||
#engineList treechildren::-moz-tree-row,
|
||||
#blocklistsTree treechildren::-moz-tree-row {
|
||||
min-height: 36px;
|
||||
}
|
||||
|
||||
#selectionCol {
|
||||
min-width: 26px;
|
||||
}
|
||||
|
||||
/* Category List */
|
||||
|
||||
#categories {
|
||||
|
@ -19,16 +19,6 @@
|
||||
margin: .5em 0;
|
||||
}
|
||||
|
||||
#engineList treechildren::-moz-tree-image(engineShown, checked) {
|
||||
list-style-image: url("chrome://global/skin/in-content/check.svg#check");
|
||||
width: 21px;
|
||||
height: 21px;
|
||||
}
|
||||
|
||||
#engineList treechildren::-moz-tree-image(engineShown, checked, selected) {
|
||||
list-style-image: url("chrome://global/skin/in-content/check.svg#check-inverted");
|
||||
}
|
||||
|
||||
#engineList treechildren::-moz-tree-image(engineName) {
|
||||
-moz-margin-end: 10px;
|
||||
-moz-margin-start: 1px;
|
||||
@ -36,10 +26,6 @@
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
#engineList treechildren::-moz-tree-row {
|
||||
min-height: 36px;
|
||||
}
|
||||
|
||||
#engineList treechildren::-moz-tree-drop-feedback {
|
||||
background-color: Highlight;
|
||||
width: 10000px; /* 100% doesn't work; 10k is hopefully larger than any window
|
||||
|
@ -4767,7 +4767,7 @@ pref("urlclassifier.malwareTable", "goog-malware-shavar,goog-unwanted-shavar,tes
|
||||
pref("urlclassifier.phishTable", "goog-phish-shavar,test-phish-simple");
|
||||
pref("urlclassifier.downloadBlockTable", "");
|
||||
pref("urlclassifier.downloadAllowTable", "");
|
||||
pref("urlclassifier.disallow_completions", "test-malware-simple,test-phish-simple,test-unwanted-simple,test-track-simple,test-trackwhite-simple,goog-downloadwhite-digest256,mozstd-track-digest256,mozstd-trackwhite-digest256");
|
||||
pref("urlclassifier.disallow_completions", "test-malware-simple,test-phish-simple,test-unwanted-simple,test-track-simple,test-trackwhite-simple,goog-downloadwhite-digest256,mozstd-track-digest256,mozstd-trackwhite-digest256,mozfull-track-digest256");
|
||||
|
||||
// The table and update/gethash URLs for Safebrowsing phishing and malware
|
||||
// checks.
|
||||
@ -4777,6 +4777,10 @@ pref("urlclassifier.trackingWhitelistTable", "test-trackwhite-simple,mozstd-trac
|
||||
pref("browser.safebrowsing.provider.mozilla.lists", "mozstd-track-digest256,mozstd-trackwhite-digest256");
|
||||
pref("browser.safebrowsing.provider.mozilla.updateURL", "https://shavar.services.mozilla.com/downloads?client=SAFEBROWSING_ID&appver=%VERSION%&pver=2.2");
|
||||
pref("browser.safebrowsing.provider.mozilla.gethashURL", "https://shavar.services.mozilla.com/gethash?client=SAFEBROWSING_ID&appver=%VERSION%&pver=2.2");
|
||||
// Block lists for tracking protection. The name values will be used as the keys
|
||||
// to lookup the localized name in preferences.properties.
|
||||
pref("browser.safebrowsing.provider.mozilla.lists.mozstd.name", "mozstdName");
|
||||
pref("browser.safebrowsing.provider.mozilla.lists.mozfull.name", "mozfullName");
|
||||
|
||||
// Turn off Spatial navigation by default.
|
||||
pref("snav.enabled", false);
|
||||
|
Loading…
Reference in New Issue
Block a user