|
| 1 | +"use strict"; |
| 2 | + |
| 3 | +const CI = Components.interfaces; |
| 4 | +const CC = Components.classes; |
| 5 | + |
| 6 | +function get_prefs(branch_name){ |
| 7 | + let o_prefs = CC["@mozilla.org/preferences-service;1"] |
| 8 | + .getService(CI.nsIPrefService); |
| 9 | + let o_branch = o_prefs.getBranch(branch_name); |
| 10 | + return o_branch; |
| 11 | +} |
| 12 | + |
| 13 | +function get_custom_rulesets_array(){ |
| 14 | + var loc = "ProfD"; // profile directory |
| 15 | + var dir = |
| 16 | + CC["@mozilla.org/file/directory_service;1"] |
| 17 | + .getService(CI.nsIProperties) |
| 18 | + .get(loc, CI.nsILocalFile) |
| 19 | + .clone(); |
| 20 | + dir.append("HTTPSEverywhereUserRules"); |
| 21 | + // Check for existence, if not, create. |
| 22 | + if (!dir.exists()) { |
| 23 | + return []; |
| 24 | + } |
| 25 | + |
| 26 | + var entries = dir.directoryEntries; |
| 27 | + var files = []; |
| 28 | + while(entries.hasMoreElements()) { |
| 29 | + var entry = entries.getNext(); |
| 30 | + entry.QueryInterface(CI.nsIFile); |
| 31 | + files.push(entry); |
| 32 | + } |
| 33 | + |
| 34 | + let file_data = [] |
| 35 | + for(let file of files){ |
| 36 | + var data = ""; |
| 37 | + var fstream = CC["@mozilla.org/network/file-input-stream;1"] |
| 38 | + .createInstance(CI.nsIFileInputStream); |
| 39 | + var sstream = CC["@mozilla.org/scriptableinputstream;1"] |
| 40 | + .createInstance(CI.nsIScriptableInputStream); |
| 41 | + fstream.init(file, -1, 0, 0); |
| 42 | + sstream.init(fstream); |
| 43 | + |
| 44 | + var str = sstream.read(4096); |
| 45 | + while (str.length > 0) { |
| 46 | + data += str; |
| 47 | + str = sstream.read(4096); |
| 48 | + } |
| 49 | + |
| 50 | + sstream.close(); |
| 51 | + fstream.close(); |
| 52 | + file_data.push(data); |
| 53 | + } |
| 54 | + |
| 55 | + return file_data; |
| 56 | +} |
| 57 | + |
| 58 | +function startup({webExtension}) { |
| 59 | + webExtension.startup().then(api => { |
| 60 | + const {browser} = api; |
| 61 | + browser.runtime.onMessage.addListener((msg, sender, sendReply) => { |
| 62 | + if (msg == "import-legacy-data") { |
| 63 | + let globals = get_prefs("extensions.https_everywhere."); |
| 64 | + if(!pref_retrieve_bool_with_default(globals, "webextension-migrated", false)){ |
| 65 | + let changed = false; |
| 66 | + |
| 67 | + let prefs = { |
| 68 | + http_nowhere_enabled: pref_retrieve_bool_with_default(globals, "http_nowhere.enabled", false), |
| 69 | + global_enabled: pref_retrieve_bool_with_default(globals, "globalEnabled", true), |
| 70 | + show_counter: pref_retrieve_bool_with_default(globals, "show_counter", true) |
| 71 | + }; |
| 72 | + |
| 73 | + if(prefs.http_nowhere_enabled == true || |
| 74 | + prefs.global_enabled == false || |
| 75 | + prefs.show_counter == true |
| 76 | + ){ |
| 77 | + changed = true; |
| 78 | + } |
| 79 | + |
| 80 | + let rule_toggle = {} |
| 81 | + let rules = get_prefs("extensions.https_everywhere.rule_toggle."); |
| 82 | + for(let rule_toggle_key of rules.getChildList("", {})){ |
| 83 | + rule_toggle[rule_toggle_key] = rules.getBoolPref(rule_toggle_key); |
| 84 | + changed = true; |
| 85 | + } |
| 86 | + |
| 87 | + let custom_rulesets = get_custom_rulesets_array(); |
| 88 | + if(custom_rulesets.length > 0){ |
| 89 | + changed = true; |
| 90 | + } |
| 91 | + |
| 92 | + sendReply({ |
| 93 | + prefs: prefs, |
| 94 | + rule_toggle: rule_toggle, |
| 95 | + custom_rulesets: custom_rulesets, |
| 96 | + changed: changed |
| 97 | + }); |
| 98 | + |
| 99 | + globals.setBoolPref("webextensions-migrated", true); |
| 100 | + } else { |
| 101 | + sendReply({changed: false}); |
| 102 | + } |
| 103 | + } |
| 104 | + }); |
| 105 | + }); |
| 106 | +} |
| 107 | + |
| 108 | +function pref_retrieve_bool_with_default(pref_branch, element, default_value){ |
| 109 | + const pref_array = pref_branch.getChildList("", {}); |
| 110 | + |
| 111 | + if(pref_array.indexOf(element) !== -1){ |
| 112 | + return pref_branch.getBoolPref(element); |
| 113 | + } |
| 114 | + return default_value; |
| 115 | +} |
| 116 | + |
| 117 | +function shutdown(data) { |
| 118 | +} |
0 commit comments