troubleshooter.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. /*** ghacks-user.js troubleshooter.js v1.2 ***/
  2. (function() {
  3. if("undefined" === typeof(Services)) {
  4. alert("about:config needs to be the active tab!");
  5. return;
  6. }
  7. function getMyList(arr) {
  8. let aRet = [];
  9. let dummy = 0;
  10. for (let i = 0, len = arr.length; i < len; i++) {
  11. if (Services.prefs.prefHasUserValue(arr[i])) {
  12. dummy = Services.prefs.getPrefType(arr[i]);
  13. switch (dummy) {
  14. case 32: // string (see https://dxr.mozilla.org/mozilla-central/source/modules/libpref/nsIPrefBranch.idl#31)
  15. dummy = Services.prefs.getCharPref(arr[i]);
  16. aRet.push({'name':arr[i],'value': dummy,'type':32});
  17. break;
  18. case 64: // int
  19. dummy = Services.prefs.getIntPref(arr[i]);
  20. aRet.push({'name':arr[i],'value': dummy,'type':64});
  21. break;
  22. case 128: // boolean
  23. dummy = Services.prefs.getBoolPref(arr[i]);
  24. aRet.push({'name':arr[i],'value': dummy,'type':128});
  25. break;
  26. default:
  27. console.log("error detecting pref-type for '"+arr[i]+"' !");
  28. }
  29. }
  30. }
  31. return aRet;
  32. }
  33. function reapply(arr) {
  34. for (let i = 0, len = arr.length; i < len; i++) {
  35. switch (arr[i].type) {
  36. case 32: // string
  37. Services.prefs.setCharPref(arr[i].name, arr[i].value);
  38. break;
  39. case 64: // int
  40. Services.prefs.setIntPref(arr[i].name, arr[i].value);
  41. break;
  42. case 128: // boolean
  43. Services.prefs.setBoolPref(arr[i].name, arr[i].value);
  44. break;
  45. default:
  46. console.log("error re-appyling value for '"+arr[i].name+"' !"); // should never happen
  47. }
  48. }
  49. }
  50. function myreset(arr) {
  51. for (let i = 0, len = arr.length; i < len; i++) {
  52. Services.prefs.clearUserPref(arr[i].name);
  53. }
  54. }
  55. let ops = [
  56. 'accessibility.force_disabled',
  57. 'browser.cache.offline.enable',
  58. 'browser.display.use_document_fonts',
  59. 'browser.formfill.enable',
  60. 'browser.link.open_newwindow.restriction',
  61. 'browser.search.suggest.enabled',
  62. 'browser.storageManager.enabled',
  63. 'browser.tabs.remote.allowLinkedWebInFileUriProcess',
  64. 'browser.urlbar.autoFill',
  65. 'browser.urlbar.autoFill.typed',
  66. 'browser.urlbar.oneOffSearches',
  67. 'browser.urlbar.suggest.searches',
  68. 'camera.control.face_detection.enabled',
  69. 'canvas.capturestream.enabled',
  70. 'dom.caches.enabled',
  71. 'dom.event.clipboardevents.enabled',
  72. 'dom.event.contextmenu.enabled',
  73. 'dom.idle-observers-api.enabled',
  74. 'dom.IntersectionObserver.enabled',
  75. 'dom.popup_allowed_events',
  76. 'dom.popup_maximum',
  77. 'dom.push.connection.enabled',
  78. 'dom.push.enabled',
  79. 'dom.push.serverURL',
  80. 'dom.serviceWorkers.enabled',
  81. 'dom.storage.enabled',
  82. 'dom.storageManager.enabled',
  83. 'dom.vr.enabled',
  84. 'dom.webaudio.enabled',
  85. 'dom.webnotifications.enabled',
  86. 'dom.webnotifications.serviceworker.enabled',
  87. 'font.blacklist.underline_offset',
  88. 'full-screen-api.enabled',
  89. 'geo.wifi.uri',
  90. 'gfx.downloadable_fonts.woff2.enabled',
  91. 'gfx.font_rendering.graphite.enabled',
  92. 'gfx.font_rendering.opentype_svg.enabled',
  93. 'intl.accept_languages',
  94. 'javascript.options.asmjs',
  95. 'javascript.options.wasm',
  96. 'keyword.enabled',
  97. 'layout.css.font-loading-api.enabled',
  98. 'layout.css.visited_links_enabled',
  99. 'mathml.disabled',
  100. 'media.autoplay.enabled',
  101. 'media.flac.enabled',
  102. 'media.mp4.enabled',
  103. 'media.ogg.enabled',
  104. 'media.ondevicechange.enabled',
  105. 'media.opus.enabled',
  106. 'media.raw.enabled',
  107. 'media.wave.enabled',
  108. 'media.webm.enabled',
  109. 'media.wmf.enabled',
  110. 'network.auth.subresource-img-cross-origin-http-auth-allow',
  111. 'network.cookie.thirdparty.sessionOnly',
  112. 'network.http.redirection-limit',
  113. 'network.http.referer.XOriginPolicy',
  114. 'network.protocol-handler.external.ms-windows-store',
  115. 'plugin.default.state',
  116. 'plugin.defaultXpi.state',
  117. 'plugin.sessionPermissionNow.intervalInMinutes',
  118. 'plugin.state.flash',
  119. 'privacy.trackingprotection.enabled',
  120. 'security.cert_pinning.enforcement_level',
  121. 'security.csp.experimentalEnabled',
  122. 'security.data_uri.block_toplevel_data_uri_navigations',
  123. 'security.family_safety.mode',
  124. 'security.mixed_content.use_hsts',
  125. 'security.OCSP.require',
  126. 'security.pki.sha1_enforcement_level',
  127. 'security.ssl.require_safe_negotiation',
  128. 'security.ssl.treat_unsafe_negotiation_as_broken',
  129. 'security.ssl3.dhe_rsa_aes_128_sha',
  130. 'security.ssl3.dhe_rsa_aes_256_sha',
  131. 'security.ssl3.ecdhe_ecdsa_aes_128_sha',
  132. 'security.ssl3.ecdhe_rsa_aes_128_sha',
  133. 'security.ssl3.rsa_aes_128_sha',
  134. 'security.ssl3.rsa_aes_256_sha',
  135. 'security.ssl3.rsa_des_ede3_sha',
  136. 'security.tls.enable_0rtt_data',
  137. 'security.tls.version.max',
  138. 'security.tls.version.min',
  139. 'security.xpconnect.plugin.unrestricted',
  140. 'signon.autofillForms',
  141. 'signon.formlessCapture.enabled',
  142. /* known culprits */
  143. 'dom.indexedDB.enabled',
  144. 'dom.workers.enabled',
  145. 'network.cookie.cookieBehavior',
  146. 'privacy.firstparty.isolate',
  147. 'privacy.resistFingerprinting',
  148. 'security.mixed_content.block_display_content',
  149. 'svg.disabled',
  150. 'last.one.without.comma'
  151. ]
  152. // reset prefs that set the same value as FFs default value
  153. let aTEMP = getMyList(ops);
  154. myreset(aTEMP);
  155. reapply(aTEMP);
  156. const aBACKUP = getMyList(ops);
  157. //console.log(aBACKUP.length, "user-set prefs from our list detected and their values stored.");
  158. myreset(aBACKUP); // resetting all detected prefs
  159. let myArr = aBACKUP;
  160. focus();
  161. 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.")) {
  162. reapply(aBACKUP);
  163. myreset(myArr.slice(0, parseInt(myArr.length/2)));
  164. while (myArr.length >= 2) {
  165. alert("NOW TEST AGAIN !");
  166. if (confirm("if the problem still exists click OK, otherwise click cancel.")) {
  167. myArr = myArr.slice(parseInt(myArr.length/2));
  168. } else {
  169. myArr = myArr.slice(0, parseInt(myArr.length/2));
  170. }
  171. reapply(aBACKUP);
  172. myreset(myArr.slice(0, parseInt(myArr.length/2))); // reset half of the remaining prefs
  173. }
  174. reapply(aBACKUP);
  175. } else {
  176. reapply(aBACKUP);
  177. return;
  178. }
  179. if (myArr.length == 1) {
  180. alert("narrowed it down to:\n\n"+myArr[0].name+"\n");
  181. myreset(myArr); // reset the culprit
  182. }
  183. })();