123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- /*** ghacks-user.js troubleshooter.js v1.5.2 ***/
- (function() {
- if("undefined" === typeof(Services)) {
- alert("about:config needs to be the active tab!");
- return;
- }
- function getMyList(arr) {
- let aRet = [];
- let dummy = 0;
- for (let i = 0, len = arr.length; i < len; i++) {
- if (Services.prefs.prefHasUserValue(arr[i])) {
- dummy = Services.prefs.getPrefType(arr[i]);
- switch (dummy) {
- case 32: // string (see https://dxr.mozilla.org/mozilla-central/source/modules/libpref/nsIPrefBranch.idl#31)
- dummy = Services.prefs.getCharPref(arr[i]);
- aRet.push({'name':arr[i],'value': dummy,'type':32});
- break;
- case 64: // int
- dummy = Services.prefs.getIntPref(arr[i]);
- aRet.push({'name':arr[i],'value': dummy,'type':64});
- break;
- case 128: // boolean
- dummy = Services.prefs.getBoolPref(arr[i]);
- aRet.push({'name':arr[i],'value': dummy,'type':128});
- break;
- default:
- console.log("error detecting pref-type for '"+arr[i]+"' !");
- }
- }
- }
- return aRet;
- }
- function reapply(arr) {
- for (let i = 0, len = arr.length; i < len; i++) {
- switch (arr[i].type) {
- case 32: // string
- Services.prefs.setCharPref(arr[i].name, arr[i].value);
- break;
- case 64: // int
- Services.prefs.setIntPref(arr[i].name, arr[i].value);
- break;
- case 128: // boolean
- Services.prefs.setBoolPref(arr[i].name, arr[i].value);
- break;
- default:
- console.log("error re-appyling value for '"+arr[i].name+"' !"); // should never happen
- }
- }
- }
- function myreset(arr) {
- for (let i = 0, len = arr.length; i < len; i++) {
- Services.prefs.clearUserPref(arr[i].name);
- }
- }
- let ops = [
- /* known culprits */
- 'network.cookie.cookieBehavior',
- 'network.http.referer.XOriginPolicy',
- 'privacy.firstparty.isolate',
- 'privacy.resistFingerprinting',
- 'security.mixed_content.block_display_content',
- 'svg.disabled',
- /* Storage + Cache */
- 'browser.cache.offline.enable',
- 'dom.indexedDB.enabled',
- 'dom.storage.enabled',
- 'browser.storageManager.enabled',
- 'dom.storageManager.enabled',
- /* Workers, Web + Push Notifications */
- 'dom.caches.enabled',
- 'dom.push.connection.enabled',
- 'dom.push.enabled',
- 'dom.push.serverURL',
- 'dom.serviceWorkers.enabled',
- 'dom.webnotifications.enabled',
- 'dom.webnotifications.serviceworker.enabled',
- /* Fonts */
- 'browser.display.use_document_fonts',
- 'font.blacklist.underline_offset',
- 'gfx.downloadable_fonts.woff2.enabled',
- 'gfx.font_rendering.graphite.enabled',
- 'gfx.font_rendering.opentype_svg.enabled',
- 'layout.css.font-loading-api.enabled',
- /* Misc */
- 'browser.link.open_newwindow.restriction',
- 'canvas.capturestream.enabled',
- 'dom.event.clipboardevents.enabled',
- 'dom.event.contextmenu.enabled',
- 'dom.IntersectionObserver.enabled',
- 'dom.popup_allowed_events',
- 'full-screen-api.enabled',
- 'geo.wifi.uri',
- 'intl.accept_languages',
- 'javascript.options.asmjs',
- 'javascript.options.wasm',
- 'permissions.default.shortcuts',
- 'security.csp.experimentalEnabled',
- /* Hardware */
- 'dom.vr.enabled',
- 'media.ondevicechange.enabled',
- /* Audio + Video */
- 'dom.webaudio.enabled',
- 'media.autoplay.enabled',
- 'media.autoplay.default', // FF63+
- /* Forms */
- 'browser.formfill.enable',
- 'signon.autofillForms',
- 'signon.formlessCapture.enabled',
- /* HTTPS */
- 'security.cert_pinning.enforcement_level',
- 'security.family_safety.mode',
- 'security.OCSP.require',
- 'security.pki.sha1_enforcement_level',
- 'security.ssl.require_safe_negotiation',
- 'security.ssl.treat_unsafe_negotiation_as_broken',
- 'security.ssl3.dhe_rsa_aes_128_sha',
- 'security.ssl3.dhe_rsa_aes_256_sha',
- 'security.ssl3.ecdhe_ecdsa_aes_128_sha',
- 'security.ssl3.ecdhe_rsa_aes_128_sha',
- 'security.ssl3.rsa_aes_128_sha',
- 'security.ssl3.rsa_aes_256_sha',
- 'security.ssl3.rsa_des_ede3_sha',
- 'security.tls.enable_0rtt_data',
- 'security.tls.version.max',
- 'security.tls.version.min',
- /* Plugins + Flash */
- 'plugin.default.state',
- 'plugin.defaultXpi.state',
- 'plugin.sessionPermissionNow.intervalInMinutes',
- 'plugin.state.flash',
- /* unlikely to cause problems */
- 'browser.tabs.remote.allowLinkedWebInFileUriProcess',
- 'dom.popup_maximum',
- 'layout.css.visited_links_enabled',
- 'mathml.disabled',
- 'network.auth.subresource-http-auth-allow',
- 'network.http.redirection-limit',
- 'network.protocol-handler.external.ms-windows-store',
- 'privacy.trackingprotection.enabled',
- 'security.data_uri.block_toplevel_data_uri_navigations',
- 'last.one.without.comma'
- ]
- // reset prefs that set the same value as FFs default value
- let aTEMP = getMyList(ops);
- myreset(aTEMP);
- reapply(aTEMP);
- const aBACKUP = getMyList(ops);
- //console.log(aBACKUP.length, "user-set prefs from our list detected and their values stored.");
- let myArr = aBACKUP;
- let found = false;
- let aDbg = [];
- focus();
- myreset(aBACKUP); // reset all detected prefs
- if (confirm("all detected prefs reset.\n\n!! KEEP THIS PROMPT OPEN AND TEST THE SITE IN ANOTHER TAB !!\n\nIF the problem still exists, this script can't help you - click cancel to re-apply your values and exit.\n\nClick OK if your problem is fixed.")) {
- aDbg = myArr;
- reapply(aBACKUP);
- myreset(myArr.slice(0, parseInt(myArr.length/2)));
- while (myArr.length >= 2) {
- alert("NOW TEST AGAIN !");
- if (confirm("if the problem still exists click OK, otherwise click cancel.")) {
- myArr = myArr.slice(parseInt(myArr.length/2));
- if (myArr.length == 1) {
- alert("The problem is caused by more than 1 pref !\n\nNarrowed it down to "+ aDbg.length.toString() +" prefs, check the console ...");
- break;
- }
- } else {
- myArr = myArr.slice(0, parseInt(myArr.length/2));
- aDbg = myArr;
- if (myArr.length == 1) { found = true; break; }
- }
- reapply(aBACKUP);
- myreset(myArr.slice(0, parseInt(myArr.length/2))); // reset half of the remaining prefs
- }
- reapply(aBACKUP);
- }
- else {
- reapply(aBACKUP);
- return;
- }
- if (found) {
- alert("narrowed it down to:\n\n"+myArr[0].name+"\n");
- myreset(myArr); // reset the culprit
- }
- else {
- console.log("the problem is caused by a combination of the following prefs:");
- for (let i = 0, len = aDbg.length; i < len; i++) {
- console.log(aDbg[i].name);
- }
- }
- })();
|