Skip to content

Commit e4e2bd4

Browse files
committed
Converting the XPCOM extension to an Embedded WebExtension for settings migration
1 parent 23fd46c commit e4e2bd4

46 files changed

Lines changed: 147 additions & 7466 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

chromium/background.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -676,6 +676,9 @@ chrome.runtime.onMessage.addListener(function(message, sender, sendResponse){
676676
}
677677
});
678678

679+
// Send a message to the embedded webextension bootstrap.js to get settings to import
680+
chrome.runtime.sendMessage("import-legacy-data", import_settings);
681+
679682
/**
680683
* Import extension settings (custom rulesets, ruleset toggles, globals) from an object
681684
* @param settings the settings object

makexpi.sh

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ die() {
8484
}
8585

8686
bash utils/validate.sh
87-
cp pkg/rulesets.json src/chrome/content/rulesets.json
8887

8988
# The name/version of the XPI we're building comes from src/install.rdf
9089
XPI_NAME="pkg/$APP_NAME-`grep em:version src/install.rdf | sed -e 's/[<>]/ /g' | cut -f3`"
@@ -101,7 +100,26 @@ fi
101100
# Prepare packages suitable for uploading to EFF and AMO, respectively.
102101
[ -d pkg ] || mkdir pkg
103102
rsync -aL --delete --delete-excluded --exclude /chrome/content/rules src/ pkg/xpi-eff
104-
cp -a translations/* pkg/xpi-eff/chrome/locale/
103+
104+
# START: The next lines are for embedded WebExtensions, and can be deleted after the full transition to WebExtensions
105+
[ -d pkg/xpi-eff/webextension ] || mkdir pkg/xpi-eff/webextension
106+
rsync -aL --delete chromium/ pkg/xpi-eff/webextension/
107+
108+
mkdir pkg/xpi-eff/webextension/_locales/
109+
python2.7 utils/chromium-translations.py translations/ pkg/xpi-eff/webextension/_locales/
110+
python2.7 utils/chromium-translations.py src/chrome/locale/ pkg/xpi-eff/webextension/_locales/
111+
112+
do_not_ship="*.py *.xml icon.jpg"
113+
rm -f pkg/xpi-eff/webextension/$do_not_ship
114+
rm -rf pkg/xpi-eff/chrome/content/rulesets.json
115+
rm -rf pkg/xpi-eff/chrome/locale
116+
117+
mkdir pkg/xpi-eff/webextension/rules/
118+
. ./utils/merge-rulesets.sh || exit 1
119+
120+
cp src/$RULESETS pkg/xpi-eff/webextension/rules/default.rulesets
121+
# END
122+
105123
rsync -a --delete pkg/xpi-eff/ pkg/xpi-amo
106124
# The AMO version of the package cannot contain the updateKey or updateURL tags.
107125
# Also, it has a different id than the eff-hosted version, because Firefox now

src/bootstrap.js

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
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+
}

src/chrome/content/about.js

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/chrome/content/about.xul

Lines changed: 0 additions & 70 deletions
This file was deleted.

0 commit comments

Comments
 (0)