| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 | 
/*** ghacks-user.js troubleshooter.js v1.6.1 ***/(function() {  if ("undefined" === typeof(Services)) return alert('about:config needs to be the active tab!');  const aPREFS = [    /* 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'  ]  // any runtime-set pref that everyone will have and that can be safely reset  const oFILLER = { type: 64, name: 'app.update.lastUpdateTime.browser-cleanup-thumbnails', value: 1580000000 };  function getMyList(arr) {    const aRet = [];    for (const sPname of arr) {      if (Services.prefs.prefHasUserValue(sPname)) {        const ptype = Services.prefs.getPrefType(sPname);        switch (ptype) {          case 32: // string (see https://dxr.mozilla.org/mozilla-central/source/modules/libpref/nsIPrefBranch.idl#31)            aRet.push({'type':ptype,'name':sPname,'value':Services.prefs.getCharPref(sPname)});            break;          case 64: // int            aRet.push({'type':ptype,'name':sPname,'value':Services.prefs.getIntPref(sPname)});            break;          case 128: // boolean            aRet.push({'type':ptype,'name':sPname,'value':Services.prefs.getBoolPref(sPname)});            break;          default:            console.log("error detecting pref-type for '"+sPname+"' !");        }      }    }    return aRet;  }  function reapply(arr) {    for (const oPref of arr) {      switch (oPref.type) {        case 32: // string          Services.prefs.setCharPref(oPref.name, oPref.value);          break;        case 64: // int          Services.prefs.setIntPref(oPref.name, oPref.value);          break;        case 128: // boolean          Services.prefs.setBoolPref(oPref.name, oPref.value);          break;        default:          console.log("error re-appyling value for '"+oPref.name+"' !"); // should never happen      }    }  }  function myreset(arr) {    for (const oPref of arr) Services.prefs.clearUserPref(oPref.name);  }  function resetAllMatchingDefault(arr) {    const aTmp = getMyList(arr);    myreset(aTmp);    reapply(aTmp);  }  function _main(aALL) {    const _h = (arr) => Math.ceil(arr.length/2);    let aTmp = aALL, aDbg = aALL;    reapply(aALL);    myreset(aTmp.slice(0, _h(aTmp)));    while (aTmp.length) {      alert("NOW TEST AGAIN !");      if (confirm("if the problem still exists click OK, otherwise click cancel.")) {        aTmp = aTmp.slice(_h(aTmp));      } else {        aTmp = aTmp.slice(0, _h(aTmp));        aDbg = aTmp; // update narrowed down list        if (aDbg.length == 1) break;      }      reapply(aALL);      myreset(aTmp.slice(0, _h(aTmp))); // reset half of the remaining prefs    }    reapply(aALL);    if (aDbg.length == 1) return alert("narrowed it down to:\n\n"+aDbg[0].name+"\n");    if (aDbg.length == aALL.length) {      let msg = "Failed to narrow it down beyond the initial "+aALL.length+" prefs. The problem is most likely caused by at least 2 prefs!\n\n";      msg += "Either those prefs are too far apart in the list or there are exactly 2 culprits and they just happen to be at the wrong place.\n\n";      msg += "In case it's the latter, the script can add a dummy pref and you can try again - Try again?";      if (confirm(msg)) return _main([...aALL, oFILLER]);    } else if (aDbg.length > 10 && confirm("Narrowed it down to "+aDbg.length+" prefs. Try narrowing it down further?")) {      return _main(aDbg.reverse());    }    alert("Narrowed it down to "+ aDbg.length.toString() +" prefs, check the console ...");    console.log("The problem is caused by 2 or more of these prefs:");    for (const oPref of aDbg) console.log(oPref.name);  }  resetAllMatchingDefault(aPREFS); // reset user-set prefs matching FFs default value  const aBAK = getMyList(aPREFS);  //console.log(aBAK.length, "user-set prefs from our list detected and their values stored.");  focus();  myreset(aBAK);  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.")) {    reapply(aBAK);    return;  }  _main(aBAK);})();
 |