mirror of
				https://github.com/arkenfox/user.js.git
				synced 2025-11-03 23:35:26 +01:00 
			
		
		
		
	* Use direct check for existence of file * Fix shellcheck warnings * Unify codestyle in scripts * Trim excess whitespace
		
			
				
	
	
		
			211 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			211 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*** arkenfox user.js troubleshooter.js v1.6.3 ***/
 | 
						|
 | 
						|
(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.storage.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.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',
 | 
						|
    'intl.accept_languages',
 | 
						|
    'javascript.options.asmjs',
 | 
						|
    'javascript.options.wasm',
 | 
						|
    'permissions.default.shortcuts',
 | 
						|
 | 
						|
    /* Hardware */
 | 
						|
    'dom.vr.enabled',
 | 
						|
    'media.ondevicechange.enabled',
 | 
						|
 | 
						|
    /* Audio + Video */
 | 
						|
    'dom.webaudio.enabled',
 | 
						|
    'media.autoplay.default', // FF63+
 | 
						|
    'media.autoplay.blocking_policy', // FF78+
 | 
						|
 | 
						|
    /* 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.state.flash',
 | 
						|
 | 
						|
    /* unlikely to cause problems */
 | 
						|
    'dom.popup_maximum',
 | 
						|
    'geo.provider.network.url',
 | 
						|
    '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',
 | 
						|
    'privacy.window.name.update.enabled', // FF82+
 | 
						|
 | 
						|
    '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) {
 | 
						|
      const 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" +
 | 
						|
            "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" +
 | 
						|
            "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.");
 | 
						|
 | 
						|
  const sMsg = "all detected prefs reset.\n\n" +
 | 
						|
        "!! KEEP THIS PROMPT OPEN AND TEST THE SITE IN ANOTHER TAB !!\n\n" +
 | 
						|
        "IF the problem still exists, this script can't help you - click Cancel to re-apply your values and exit.\n\n" +
 | 
						|
        "Click OK if your problem is fixed.";
 | 
						|
 | 
						|
  focus();
 | 
						|
  myreset(aBAK);
 | 
						|
  if (!confirm(sMsg)) {
 | 
						|
    reapply(aBAK);
 | 
						|
    return;
 | 
						|
  }
 | 
						|
  _main(aBAK);
 | 
						|
 | 
						|
})();
 |