Skip to content

Commit 4e53347

Browse files
committed
Merge remote-tracking branch 'origin/master'.
2 parents b9b35d1 + 1d1712d commit 4e53347

File tree

106 files changed

+609
-0
lines changed

Some content is hidden

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

106 files changed

+609
-0
lines changed

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,13 @@ To build the Chrome version go to the git repository root and run:
3737

3838
After building the extension the xpi files (for Firefox) and crx files (for Chrome) get created in the pkg directory. You can open those files within your browser to install the browser extension.
3939

40+
Ruleset Tests
41+
-------------
42+
43+
You can run ruleset tests by opening `about:config` and changing `extensions.https_everywhere.show_ruleset_tests` to true. Now when you open the HTTPS Everywhere context menu there will be a "Run HTTPS Everywhere Ruleset Tests" menu item.
44+
45+
When you run the tests, be prepared to let your computer run them for a really long time.
46+
4047
Source Tree
4148
-----------
4249

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#ruleset-tests-status {
2+
padding: 20px;
3+
}
4+
#wrapper {
5+
text-align: center;
6+
}
7+
#progess-bar {
8+
width: 300px;
9+
height: 20px;
10+
}
11+
#log {
12+
width: 400px;
13+
height: 300px;
14+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
var HTTPSEverywhere = null;
2+
3+
function updateStatusBar(current_test, total_tests) {
4+
var labelText = "Test "+current_test+" of "+total_tests;
5+
document.getElementById("progress-bar-label").value = labelText;
6+
7+
var percent = current_test / total_tests;
8+
document.getElementById("progress-bar").value = percent;
9+
}
10+
11+
function updateLog(msg) {
12+
document.getElementById("log").value += msg+'\n';
13+
}
14+
15+
function cancel() {
16+
updateLog("Canceling early ...");
17+
HTTPSEverywhere.httpseRulesetTests.cancel = true;
18+
}
19+
20+
function start() {
21+
HTTPSEverywhere = Components.classes["@eff.org/https-everywhere;1"]
22+
.getService(Components.interfaces.nsISupports)
23+
.wrappedJSObject;
24+
25+
HTTPSEverywhere.httpseRulesetTests.updateStatusBar = updateStatusBar;
26+
HTTPSEverywhere.httpseRulesetTests.updateLog = updateLog;
27+
HTTPSEverywhere.httpseRulesetTests.cancel = false;
28+
29+
updateLog("Starting ruleset tests ...");
30+
HTTPSEverywhere.httpseRulesetTests.testRunner();
31+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
3+
<?xml-stylesheet href="ruleset-tests-status.css" type="text/css"?>
4+
<!DOCTYPE window SYSTEM "chrome://https-everywhere/locale/https-everywhere.dtd">
5+
<window id="ruleset-tests-status"
6+
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
7+
xmlns:html="http://www.w3.org/1999/xhtml"
8+
title="&https-everywhere.ruleset-tests.status_title;"
9+
>
10+
11+
<script type="application/x-javascript" src="ruleset-tests-status.js" />
12+
13+
<commandgroup>
14+
<command id="cancel" oncommand="cancel();" />
15+
<command id="start" oncommand="start();" />
16+
</commandgroup>
17+
18+
<html:div id="wrapper">
19+
<vbox flex="1" style="width:100%">
20+
<label id="progress-bar-label" value="Click Start to start the tests"></label>
21+
22+
<spacer flex="1"/>
23+
24+
<progressmeter id="progress-bar" mode="determined" value="0" />
25+
26+
<spacer flex="1"/>
27+
28+
<textbox id="log" multiline="true" readonly="true" value="" />
29+
30+
<spacer flex="1"/>
31+
32+
<button
33+
id="cancel-button"
34+
label="&https-everywhere.ruleset-tests.status_cancel_button;"
35+
command="cancel" />
36+
37+
<button
38+
id="start-button"
39+
label="&https-everywhere.ruleset-tests.status_start_button;"
40+
command="start" />
41+
</vbox>
42+
</html:div>
43+
</window>
44+
Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
// load the HTTPS Everywhere component
2+
var HTTPSEverywhere = null;
3+
try {
4+
HTTPSEverywhere = Components.classes["@eff.org/https-everywhere;1"]
5+
.getService(Components.interfaces.nsISupports)
6+
.wrappedJSObject;
7+
} catch(e) {
8+
// HTTPS Everywhere doesn't seem to be installed
9+
}
10+
11+
// attach testRunner to the HTTPS Everywhere component so that status.js can run it
12+
if(HTTPSEverywhere) {
13+
HTTPSEverywhere.httpseRulesetTests = {
14+
testRunner: testRunner
15+
};
16+
}
17+
18+
19+
function openStatus() {
20+
// make sure mixed content blocking preferences are correct
21+
Services.prefs.setBoolPref("security.mixed_content.block_display_content", false);
22+
Services.prefs.setBoolPref("security.mixed_content.block_active_content", true);
23+
24+
// open the status tab
25+
var statusTab = gBrowser.addTab('chrome://https-everywhere/content/ruleset-tests-status.xul');
26+
gBrowser.selectedTab = statusTab;
27+
}
28+
29+
function testRunner() {
30+
Components.utils.import("resource://gre/modules/PopupNotifications.jsm");
31+
32+
const numTabs = 6;
33+
var finished = false;
34+
var output = [];
35+
var urls = [];
36+
var num = 0;
37+
38+
for(var target in HTTPSEverywhere.https_rules.targets) {
39+
if(!target.contains("*")) {
40+
urls.push({
41+
url: 'https://'+target,
42+
target: target,
43+
ruleset_names: HTTPSEverywhere.https_rules.targets[target]
44+
});
45+
}
46+
}
47+
48+
function test() {
49+
var i;
50+
51+
HTTPSEverywhere.httpseRulesetTests.updateStatusBar(num, urls.length);
52+
53+
// start loading all the tabs
54+
window.focus
55+
for(i=0; i<numTabs; i++) {
56+
newTab(num);
57+
}
58+
}
59+
60+
function newTab(number) {
61+
num +=1;
62+
// start a test in this tab
63+
if(urls.length) {
64+
65+
// open a new tab
66+
var tab = gBrowser.addTab(urls[number].url);
67+
68+
// wait for the page to load
69+
var intervalId = window.setTimeout(function(){
70+
71+
// detect mixed content blocker
72+
if(PopupNotifications.getNotification("mixed-content-blocked", gBrowser.getBrowserForTab(tab))) {
73+
// build output to log
74+
ruleset_xmls = '';
75+
for(let i=0; i<urls[number].ruleset_names.length; i++) {
76+
ruleset_xmls += urls[number].ruleset_names[i].xmlName + ', ';
77+
}
78+
if(ruleset_xmls != '')
79+
ruleset_xmls = ruleset_xmls.substring(ruleset_xmls.length-2, 2);
80+
var output = 'MCB triggered: '+urls[number].url+' ('+ruleset_xmls+')';
81+
82+
HTTPSEverywhere.httpseRulesetTests.updateLog(output);
83+
}
84+
85+
// close this tab, and open another
86+
closeTab(tab);
87+
88+
}, 10000);
89+
90+
} else {
91+
92+
//to run if urls is empty
93+
if (!finished) {
94+
finished = true;
95+
window.setTimeout(function(){
96+
gBrowser.removeCurrentTab();
97+
}, 10000);
98+
}
99+
}
100+
}
101+
102+
//closes tab
103+
function closeTab(tab) {
104+
HTTPSEverywhere.httpseRulesetTests.updateStatusBar(num, urls.length);
105+
106+
gBrowser.selectedTab = tab;
107+
gBrowser.removeCurrentTab();
108+
109+
// open a new tab, if the tests haven't been canceled
110+
if(!HTTPSEverywhere.httpseRulesetTests.cancel) {
111+
newTab(num);
112+
}
113+
}
114+
115+
//manages write out of output mochilog.txt, which contains sites that trigger mcb
116+
function writeout(weburl) {
117+
118+
//initialize file
119+
var file = Components.classes["@mozilla.org/file/directory_service;1"].
120+
getService(Components.interfaces.nsIProperties).
121+
get("Home", Components.interfaces.nsIFile);
122+
writeoutfile = "mochilog.txt";
123+
file.append(writeoutfile);
124+
125+
//create file if it does not already exist
126+
if(!file.exists()) {
127+
file.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 420);
128+
}
129+
130+
//initialize output stream
131+
var stream = Components.classes["@mozilla.org/network/file-output-stream;1"]
132+
.createInstance(Components.interfaces.nsIFileOutputStream);
133+
134+
//permissions are set to append (will not delete existing contents)
135+
stream.init(file, 0x02 | 0x08 | 0x10, 0666, 0);
136+
137+
var content = weburl + "\n";
138+
139+
//Deal with ascii text and write out
140+
var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"].
141+
createInstance(Components.interfaces.nsIConverterOutputStream);
142+
converter.init(stream, "UTF-8", 0, 0);
143+
converter.writeString(content);
144+
converter.close();
145+
146+
//alternative write out if ascii is not a concern
147+
//stream.write(content,content.length);
148+
//stream.close();
149+
150+
}
151+
test();
152+
}
153+
154+
155+

src/chrome/content/toolbar_button.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,8 @@ function stitch_context_menu2() {
199199
}
200200
}
201201

202+
var rulesetTestsMenuItem = null;
203+
202204
function show_applicable_list(menupopup) {
203205
var domWin = content.document.defaultView.top;
204206
if (!(domWin instanceof CI.nsIDOMWindow)) {
@@ -217,6 +219,23 @@ function show_applicable_list(menupopup) {
217219
weird = true;
218220
}
219221
alist.populate_menu(document, menupopup, weird);
222+
223+
// should we also show the ruleset tests menu item?
224+
if(HTTPSEverywhere.prefs.getBoolPref("show_ruleset_tests")) {
225+
226+
if(!rulesetTestsMenuItem) {
227+
let strings = document.getElementById('HttpsEverywhereStrings');
228+
let label = strings.getString('https-everywhere.menu.ruleset-tests');
229+
230+
rulesetTestsMenuItem = this.document.createElement('menuitem');
231+
rulesetTestsMenuItem.setAttribute('command', 'https-everywhere-menuitem-ruleset-tests');
232+
rulesetTestsMenuItem.setAttribute('label', label);
233+
}
234+
235+
if(!menupopup.contains(rulesetTestsMenuItem))
236+
menupopup.appendChild(rulesetTestsMenuItem);
237+
}
238+
220239
}
221240

222241
function toggle_rule(rule_id) {

src/chrome/content/toolbar_button.xul

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
<overlay id="https-everywhere-button-overlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
1010
<script type="application/x-javascript" src="chrome://https-everywhere/content/toolbar_button.js"/>
11+
<script type="application/x-javascript" src="chrome://https-everywhere/content/ruleset-tests.js"/>
1112

1213
<stringbundleset id="stringbundleset">
1314
<stringbundle id="HttpsEverywhereStrings"
@@ -60,6 +61,8 @@
6061
oncommand="open_in_tab('https://www.eff.org/donate');" />
6162
<command id="https-everywhere-menuitem-donate-tor"
6263
oncommand="open_in_tab('https://www.torproject.org/donate');" />
64+
<command id="https-everywhere-menuitem-ruleset-tests"
65+
oncommand="openStatus();" />
6366
</commandset>
6467
</overlay>
6568

src/chrome/locale/ar/https-everywhere.dtd

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,8 @@
4040
<!ENTITY https-everywhere.popup.paragraph3 "كنا نحب لو واصلت استخدام الاصدار التجريبي من HTTPS Everywhere لان ذلك يساعدنا علي جعل البرنامج أفضل! قد تجد في الاصدار التجريبي بعض الأخطاء التي يمكنك ان تبلغ عنها بمراسلة https-everywhere@eff.org. نآسف على الإزعاج و شكراً لأستخدامك HTTPS Everywhere.">
4141
<!ENTITY https-everywhere.popup.keep "ابقني علي الاصدار التجريبي">
4242
<!ENTITY https-everywhere.popup.revert "حمل الاصدار المستقر الاخير">
43+
44+
<!ENTITY https-everywhere.ruleset-tests.status_title "HTTPS Everywhere Ruleset Tests">
45+
<!ENTITY https-everywhere.ruleset-tests.status_cancel_button "Cancel">
46+
<!ENTITY https-everywhere.ruleset-tests.status_start_button "Start">
47+

src/chrome/locale/ar/https-everywhere.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ https-everywhere.menu.noRules = (هذه الصفحة لا تحتوي على قو
55
https-everywhere.menu.unknownRules = (قواين هذه الصفحة غير معروفة)
66
https-everywhere.toolbar.hint = HTTPS Everywhere مفعل الان. يمكنك تفعيله او تعطيله علي حسب الموقع الذي تزور عن طريق الضغط علي الرمز في شريطة العناوين.
77
https-everywhere.migration.notification0 = من أجل أن تنفيذ اصلاح مهم، هذا التحديث يعيد قوانين HTTPS Everywhere إلى حالتها الإفتراضية.
8+
https-everywhere.menu.ruleset-tests = Run HTTPS Everywhere Ruleset Tests

src/chrome/locale/ar/ssl-observatory.dtd

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,8 @@ Mouseover the options for further details:">-->
9090
"اعرض و تحقق من الشهادات الموقعة ذاتياً">
9191
<!ENTITY ssl-observatory.prefs.self_signed_tooltip
9292
"هذا مفضل ; فمشاكل التشفير شائعة بشكل خاص في الأجهزة المدمجة الموقعة ذاتياً">
93+
94+
<!ENTITY https-everywhere.ruleset-tests.status_title "HTTPS Everywhere Ruleset Tests">
95+
<!ENTITY https-everywhere.ruleset-tests.status_cancel_button "Cancel">
96+
<!ENTITY https-everywhere.ruleset-tests.status_start_button "Start">
97+

0 commit comments

Comments
 (0)