import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo

This commit is contained in:
Roy Tam 2018-01-19 03:59:58 +08:00
commit dcd9973243
150858 changed files with 23884658 additions and 0 deletions

View file

@ -0,0 +1,7 @@
"use strict";
module.exports = {
"extends": [
"../../../../../testing/xpcshell/xpcshell.eslintrc.js"
]
};

View file

@ -0,0 +1,49 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
var {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
Cu.import('resource://gre/modules/XPCOMUtils.jsm');
Cu.import('resource://gre/modules/Services.jsm');
Cu.import('resource://testing-common/httpd.js');
XPCOMUtils.defineLazyServiceGetter(this, 'gCaptivePortalDetector',
'@mozilla.org/toolkit/captive-detector;1',
'nsICaptivePortalDetector');
const kCanonicalSitePath = '/canonicalSite.html';
const kCanonicalSiteContent = 'true';
const kPrefsCanonicalURL = 'captivedetect.canonicalURL';
const kPrefsCanonicalContent = 'captivedetect.canonicalContent';
const kPrefsMaxWaitingTime = 'captivedetect.maxWaitingTime';
const kPrefsPollingTime = 'captivedetect.pollingTime';
var gServer;
var gServerURL;
function setupPrefs() {
let prefs = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefService)
.QueryInterface(Components.interfaces.nsIPrefBranch);
prefs.setCharPref(kPrefsCanonicalURL, gServerURL + kCanonicalSitePath);
prefs.setCharPref(kPrefsCanonicalContent, kCanonicalSiteContent);
prefs.setIntPref(kPrefsMaxWaitingTime, 0);
prefs.setIntPref(kPrefsPollingTime, 1);
}
function run_captivedetect_test(xhr_handler, fakeUIResponse, testfun)
{
gServer = new HttpServer();
gServer.registerPathHandler(kCanonicalSitePath, xhr_handler);
gServer.start(-1);
gServerURL = 'http://localhost:' + gServer.identity.primaryPort;
setupPrefs();
fakeUIResponse();
testfun();
}

View file

@ -0,0 +1,53 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
const kInterfaceName = 'wifi';
var server;
var step = 0;
var loginFinished = false;
function xhr_handler(metadata, response) {
response.setStatusLine(metadata.httpVersion, 200, 'OK');
response.setHeader('Cache-Control', 'no-cache', false);
response.setHeader('Content-Type', 'text/plain', false);
if (loginFinished) {
response.write('true');
} else {
response.write('false');
}
}
function fakeUIResponse() {
Services.obs.addObserver(function observe(subject, topic, data) {
if (topic === 'captive-portal-login') {
do_throw('should not receive captive-portal-login event');
}
}, 'captive-portal-login', false);
}
function test_abort() {
do_test_pending();
let callback = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsICaptivePortalCallback]),
prepare: function prepare() {
do_check_eq(++step, 1);
gCaptivePortalDetector.finishPreparation(kInterfaceName);
},
complete: function complete(success) {
do_throw('should not execute |complete| callback');
},
};
gCaptivePortalDetector.checkCaptivePortal(kInterfaceName, callback);
gCaptivePortalDetector.abort(kInterfaceName);
gServer.stop(do_test_finished);
}
function run_test() {
run_captivedetect_test(xhr_handler, fakeUIResponse, test_abort);
}

View file

@ -0,0 +1,66 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
const kInterfaceName = 'wifi';
var server;
var step = 0;
var loginFinished = false;
function xhr_handler(metadata, response) {
response.setStatusLine(metadata.httpVersion, 200, 'OK');
response.setHeader('Cache-Control', 'no-cache', false);
response.setHeader('Content-Type', 'text/plain', false);
if (loginFinished) {
response.write('true');
} else {
response.write('false');
}
}
function fakeUIResponse() {
let requestId;
Services.obs.addObserver(function observe(subject, topic, data) {
if (topic === 'captive-portal-login') {
let xhr = Cc['@mozilla.org/xmlextras/xmlhttprequest;1']
.createInstance(Ci.nsIXMLHttpRequest);
xhr.open('GET', gServerURL + kCanonicalSitePath, true);
xhr.send();
loginFinished = true;
do_check_eq(++step, 2);
requestId = JSON.parse(data).id;
gCaptivePortalDetector.abort(kInterfaceName);
}
}, 'captive-portal-login', false);
Services.obs.addObserver(function observe(subject, topic, data) {
if (topic === 'captive-portal-login-abort') {
do_check_eq(++step, 3);
do_check_eq(JSON.parse(data).id, requestId);
gServer.stop(do_test_finished);
}
}, 'captive-portal-login-abort', false);
}
function test_abort() {
do_test_pending();
let callback = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsICaptivePortalCallback]),
prepare: function prepare() {
do_check_eq(++step, 1);
gCaptivePortalDetector.finishPreparation(kInterfaceName);
},
complete: function complete(success) {
do_throw('should not execute |complete| callback');
},
};
gCaptivePortalDetector.checkCaptivePortal(kInterfaceName, callback);
}
function run_test() {
run_captivedetect_test(xhr_handler, fakeUIResponse, test_abort);
}

View file

@ -0,0 +1,72 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
const kInterfaceName = 'wifi';
const kOtherInterfaceName = 'ril';
var server;
var step = 0;
var loginFinished = false;
function xhr_handler(metadata, response) {
response.setStatusLine(metadata.httpVersion, 200, 'OK');
response.setHeader('Cache-Control', 'no-cache', false);
response.setHeader('Content-Type', 'text/plain', false);
if (loginFinished) {
response.write('true');
} else {
response.write('false');
}
}
function fakeUIResponse() {
Services.obs.addObserver(function observe(subject, topic, data) {
if (topic === 'captive-portal-login') {
let xhr = Cc['@mozilla.org/xmlextras/xmlhttprequest;1']
.createInstance(Ci.nsIXMLHttpRequest);
xhr.open('GET', gServerURL + kCanonicalSitePath, true);
xhr.send();
loginFinished = true;
do_check_eq(++step, 3);
}
}, 'captive-portal-login', false);
}
function test_multiple_requests_abort() {
do_test_pending();
let callback = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsICaptivePortalCallback]),
prepare: function prepare() {
do_check_eq(++step, 1);
gCaptivePortalDetector.finishPreparation(kInterfaceName);
},
complete: function complete(success) {
do_throw('should not execute |complete| callback for ' + kInterfaceName);
},
};
let otherCallback = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsICaptivePortalCallback]),
prepare: function prepare() {
do_check_eq(++step, 2);
gCaptivePortalDetector.finishPreparation(kOtherInterfaceName);
},
complete: function complete(success) {
do_check_eq(++step, 4);
do_check_true(success);
gServer.stop(do_test_finished);
}
};
gCaptivePortalDetector.checkCaptivePortal(kInterfaceName, callback);
gCaptivePortalDetector.checkCaptivePortal(kOtherInterfaceName, otherCallback);
gCaptivePortalDetector.abort(kInterfaceName);
}
function run_test() {
run_captivedetect_test(xhr_handler, fakeUIResponse, test_multiple_requests_abort);
}

View file

@ -0,0 +1,71 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
const kInterfaceName = 'wifi';
const kOtherInterfaceName = 'ril';
var server;
var step = 0;
var loginFinished = false;
function xhr_handler(metadata, response) {
response.setStatusLine(metadata.httpVersion, 200, 'OK');
response.setHeader('Cache-Control', 'no-cache', false);
response.setHeader('Content-Type', 'text/plain', false);
if (loginFinished) {
response.write('true');
} else {
response.write('false');
}
}
function fakeUIResponse() {
Services.obs.addObserver(function observe(subject, topic, data) {
if (topic === 'captive-portal-login') {
let xhr = Cc['@mozilla.org/xmlextras/xmlhttprequest;1']
.createInstance(Ci.nsIXMLHttpRequest);
xhr.open('GET', gServerURL + kCanonicalSitePath, true);
xhr.send();
loginFinished = true;
do_check_eq(++step, 2);
}
}, 'captive-portal-login', false);
}
function test_abort() {
do_test_pending();
let callback = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsICaptivePortalCallback]),
prepare: function prepare() {
do_check_eq(++step, 1);
gCaptivePortalDetector.finishPreparation(kInterfaceName);
},
complete: function complete(success) {
do_check_eq(++step, 3);
do_check_true(success);
gServer.stop(do_test_finished);
},
};
let otherCallback = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsICaptivePortalCallback]),
prepare: function prepare() {
do_throw('should not execute |prepare| callback for ' + kOtherInterfaceName);
},
complete: function complete(success) {
do_throw('should not execute |complete| callback for ' + kInterfaceName);
}
};
gCaptivePortalDetector.checkCaptivePortal(kInterfaceName, callback);
gCaptivePortalDetector.checkCaptivePortal(kOtherInterfaceName, otherCallback);
gCaptivePortalDetector.abort(kOtherInterfaceName);
}
function run_test() {
run_captivedetect_test(xhr_handler, fakeUIResponse, test_abort);
}

View file

@ -0,0 +1,67 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
const kInterfaceName = 'wifi';
var server;
var step = 0;
var loginFinished = false;
function xhr_handler(metadata, response) {
response.setStatusLine(metadata.httpVersion, 200, 'OK');
response.setHeader('Cache-Control', 'no-cache', false);
response.setHeader('Content-Type', 'text/plain', false);
if (loginFinished) {
response.write('true');
} else {
response.write('false');
}
}
function fakeUIResponse() {
Services.obs.addObserver(function observe(subject, topic, data) {
if (topic === 'captive-portal-login') {
let xhr = Cc['@mozilla.org/xmlextras/xmlhttprequest;1']
.createInstance(Ci.nsIXMLHttpRequest);
xhr.open('GET', gServerURL + kCanonicalSitePath, true);
xhr.send();
loginFinished = true;
do_check_eq(++step, 2);
}
}, 'captive-portal-login', false);
Services.obs.addObserver(function observe(subject, topic, data) {
if (topic === 'captive-portal-login-success') {
do_check_eq(++step, 4);
gServer.stop(do_test_finished);
}
}, 'captive-portal-login-success', false);
}
function test_portal_found() {
do_test_pending();
let callback = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsICaptivePortalCallback]),
prepare: function prepare() {
do_check_eq(++step, 1);
gCaptivePortalDetector.finishPreparation(kInterfaceName);
},
complete: function complete(success) {
// Since this is a synchronous callback, it must happen before
// 'captive-portal-login-success' is received.
// (Check captivedetect.js::executeCallback
do_check_eq(++step, 3);
do_check_true(success);
},
};
gCaptivePortalDetector.checkCaptivePortal(kInterfaceName, callback);
}
function run_test() {
run_captivedetect_test(xhr_handler, fakeUIResponse, test_portal_found);
}

View file

@ -0,0 +1,74 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
const kInterfaceName = 'wifi';
var step = 0;
var loginFinished = false;
var gRedirectServer;
var gRedirectServerURL;
function xhr_handler(metadata, response) {
if (loginFinished) {
response.setStatusLine(metadata.httpVersion, 200, 'OK');
response.setHeader('Cache-Control', 'no-cache', false);
response.setHeader('Content-Type', 'text/plain', false);
response.write('true');
} else {
response.setStatusLine(metadata.httpVersion, 303, "See Other");
response.setHeader("Location", gRedirectServerURL, false);
response.setHeader("Content-Type", "text/html", false);
}
}
function fakeUIResponse() {
Services.obs.addObserver(function observe(subject, topic, data) {
if (topic === 'captive-portal-login') {
let xhr = Cc['@mozilla.org/xmlextras/xmlhttprequest;1']
.createInstance(Ci.nsIXMLHttpRequest);
xhr.open('GET', gServerURL + kCanonicalSitePath, true);
xhr.send();
loginFinished = true;
do_check_eq(++step, 2);
}
}, 'captive-portal-login', false);
Services.obs.addObserver(function observe(subject, topic, data) {
if (topic === 'captive-portal-login-success') {
do_check_eq(++step, 4);
gServer.stop(function () {
gRedirectServer.stop(do_test_finished);
});
}
}, 'captive-portal-login-success', false);
}
function test_portal_found() {
do_test_pending();
let callback = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsICaptivePortalCallback]),
prepare: function prepare() {
do_check_eq(++step, 1);
gCaptivePortalDetector.finishPreparation(kInterfaceName);
},
complete: function complete(success) {
do_check_eq(++step, 3);
do_check_true(success);
},
};
gCaptivePortalDetector.checkCaptivePortal(kInterfaceName, callback);
}
function run_test() {
gRedirectServer = new HttpServer();
gRedirectServer.start(-1);
gRedirectServerURL = 'http://localhost:' + gRedirectServer.identity.primaryPort;
run_captivedetect_test(xhr_handler, fakeUIResponse, test_portal_found);
}

View file

@ -0,0 +1,52 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
const kInterfaceName = 'wifi';
var server;
var step = 0;
var attempt = 0;
function xhr_handler(metadata, response) {
dump('HTTP activity\n');
response.setStatusLine(metadata.httpVersion, 200, 'OK');
response.setHeader('Cache-Control', 'no-cache', false);
response.setHeader('Content-Type', 'text/plain', false);
response.write('true');
attempt++;
}
function fakeUIResponse() {
Services.obs.addObserver(function observe(subject, topic, data) {
if (topic == 'captive-portal-login') {
do_throw('should not receive captive-portal-login event');
}
}, 'captive-portal-login', false);
}
function test_portal_not_found() {
do_test_pending();
let callback = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsICaptivePortalCallback]),
prepare: function prepare() {
do_check_eq(++step, 1);
gCaptivePortalDetector.finishPreparation(kInterfaceName);
},
complete: function complete(success) {
do_check_eq(++step, 2);
do_check_true(success);
do_check_eq(attempt, 1);
gServer.stop(function() { dump('server stop\n'); do_test_finished(); });
}
};
gCaptivePortalDetector.checkCaptivePortal(kInterfaceName, callback);
}
function run_test() {
run_captivedetect_test(xhr_handler, fakeUIResponse, test_portal_not_found);
}

View file

@ -0,0 +1,49 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
const kInterfaceName = 'wifi';
var server;
var step = 0;
var loginFinished = false;
var attempt = 0;
function xhr_handler(metadata, response) {
response.setStatusLine(metadata.httpVersion, 404, "Page not Found");
attempt++;
}
function fakeUIResponse() {
Services.obs.addObserver(function observe(subject, topic, data) {
if (topic === 'captive-portal-login') {
do_throw('should not receive captive-portal-login event');
}
}, 'captive-portal-login', false);
}
function test_portal_not_found() {
do_test_pending();
let callback = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsICaptivePortalCallback]),
prepare: function prepare() {
do_check_eq(++step, 1);
gCaptivePortalDetector.finishPreparation(kInterfaceName);
},
complete: function complete(success) {
do_check_eq(++step, 2);
do_check_false(success);
do_check_eq(attempt, 6);
gServer.stop(do_test_finished);
},
};
gCaptivePortalDetector.checkCaptivePortal(kInterfaceName, callback);
}
function run_test() {
run_captivedetect_test(xhr_handler, fakeUIResponse, test_portal_not_found);
}

View file

@ -0,0 +1,83 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
const kInterfaceName = 'wifi';
const kOtherInterfaceName = 'ril';
var server;
var step = 0;
var loginFinished = false;
var loginSuccessCount = 0;
function xhr_handler(metadata, response) {
response.setStatusLine(metadata.httpVersion, 200, 'OK');
response.setHeader('Cache-Control', 'no-cache', false);
response.setHeader('Content-Type', 'text/plain', false);
if (loginFinished) {
response.write('true');
} else {
response.write('false');
}
}
function fakeUIResponse() {
Services.obs.addObserver(function observe(subject, topic, data) {
if (topic === 'captive-portal-login') {
let xhr = Cc['@mozilla.org/xmlextras/xmlhttprequest;1']
.createInstance(Ci.nsIXMLHttpRequest);
xhr.open('GET', gServerURL + kCanonicalSitePath, true);
xhr.send();
loginFinished = true;
do_check_eq(++step, 2);
}
}, 'captive-portal-login', false);
Services.obs.addObserver(function observe(subject, topic, data) {
if (topic === 'captive-portal-login-success') {
loginSuccessCount++;
if (loginSuccessCount > 1) {
throw "We should only receive 'captive-portal-login-success' once";
}
do_check_eq(++step, 4);
}
}, 'captive-portal-login-success', false);
}
function test_multiple_requests() {
do_test_pending();
let callback = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsICaptivePortalCallback]),
prepare: function prepare() {
do_check_eq(++step, 1);
gCaptivePortalDetector.finishPreparation(kInterfaceName);
},
complete: function complete(success) {
do_check_eq(++step, 3);
do_check_true(success);
},
};
let otherCallback = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsICaptivePortalCallback]),
prepare: function prepare() {
do_check_eq(++step, 5);
gCaptivePortalDetector.finishPreparation(kOtherInterfaceName);
},
complete: function complete(success) {
do_check_eq(++step, 6);
do_check_true(success);
gServer.stop(do_test_finished);
}
};
gCaptivePortalDetector.checkCaptivePortal(kInterfaceName, callback);
gCaptivePortalDetector.checkCaptivePortal(kOtherInterfaceName, otherCallback);
}
function run_test() {
run_captivedetect_test(xhr_handler, fakeUIResponse, test_multiple_requests);
}

View file

@ -0,0 +1,54 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
const kInterfaceName = 'wifi';
var server;
var step = 0;
function xhr_handler(metadata, response) {
response.setStatusLine(metadata.httpVersion, 200, 'OK');
response.setHeader('Cache-Control', 'no-cache', false);
response.setHeader('Content-Type', 'text/plain', false);
response.write('false');
}
function fakeUIResponse() {
Services.obs.addObserver(function observe(subject, topic, data) {
if (topic === 'captive-portal-login') {
let xhr = Cc['@mozilla.org/xmlextras/xmlhttprequest;1']
.createInstance(Ci.nsIXMLHttpRequest);
xhr.open('GET', gServerURL + kCanonicalSitePath, true);
xhr.send();
do_check_eq(++step, 2);
let details = JSON.parse(data);
gCaptivePortalDetector.cancelLogin(details.id);
}
}, 'captive-portal-login', false);
}
function test_cancel() {
do_test_pending();
let callback = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsICaptivePortalCallback]),
prepare: function prepare() {
do_check_eq(++step, 1);
gCaptivePortalDetector.finishPreparation(kInterfaceName);
},
complete: function complete(success) {
do_check_eq(++step, 3);
do_check_false(success);
gServer.stop(do_test_finished);
},
};
gCaptivePortalDetector.checkCaptivePortal(kInterfaceName, callback);
}
function run_test() {
run_captivedetect_test(xhr_handler, fakeUIResponse, test_cancel);
}

View file

@ -0,0 +1,15 @@
[DEFAULT]
head = head_setprefs.js
tail =
[test_captive_portal_not_found.js]
[test_captive_portal_not_found_404.js]
[test_captive_portal_found.js]
[test_captive_portal_found_303.js]
[test_abort.js]
[test_abort_during_user_login.js]
[test_user_cancel.js]
[test_multiple_requests.js]
[test_abort_ongoing_request.js]
[test_abort_pending_request.js]