зеркало из https://github.com/mozilla/gecko-dev.git
Bug 752982 - Part 2, provide xpcshell test cases for captive portal detection. r=thinker,dolske a=shira.
This commit is contained in:
Родитель
011a0868cd
Коммит
b10f43f0d7
|
@ -145,3 +145,5 @@ skip-if = os == "android"
|
|||
[include:b2g/components/test/unit/xpcshell.ini]
|
||||
|
||||
[include:tools/profiler/tests/xpcshell.ini]
|
||||
|
||||
[include:toolkit/components/captivedetect/test/unit/xpcshell.ini]
|
||||
|
|
|
@ -20,4 +20,6 @@ EXTRA_COMPONENTS = \
|
|||
captivedetect.js \
|
||||
$(NULL)
|
||||
|
||||
TEST_DIRS += test
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
# 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/.
|
||||
|
||||
DEPTH = @DEPTH@
|
||||
topsrcdir = @top_srcdir@
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
relativesrcdir = @relativesrcdir@
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
|
||||
MODULE = test_captivedetect
|
||||
|
||||
XPCSHELL_TESTS = unit
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
|
@ -0,0 +1,25 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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 kServerURL = 'http://localhost:4444';
|
||||
const kCanonicalSitePath = '/canonicalSite.html';
|
||||
const kCanonicalSiteContent = 'true';
|
||||
const kPrefsCanonicalURL = 'captivedetect.canonicalURL';
|
||||
const kPrefsCanonicalContent = 'captivedetect.canonicalContent';
|
||||
const kPrefsMaxWaitingTime = 'captivedetect.maxWaitingTime';
|
||||
const kPrefsPollingTime = 'captivedetect.pollingTime';
|
||||
|
||||
function setupPrefs() {
|
||||
let prefs = Components.classes["@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefService)
|
||||
.QueryInterface(Components.interfaces.nsIPrefBranch);
|
||||
prefs.setCharPref(kPrefsCanonicalURL, kServerURL + kCanonicalSitePath);
|
||||
prefs.setCharPref(kPrefsCanonicalContent, kCanonicalSiteContent);
|
||||
prefs.setIntPref(kPrefsMaxWaitingTime, 0);
|
||||
prefs.setIntPref(kPrefsPollingTime, 1);
|
||||
}
|
||||
|
||||
setupPrefs();
|
|
@ -0,0 +1,68 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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 {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');
|
||||
|
||||
const kInterfaceName = 'wifi';
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(this, 'gCaptivePortalDetector',
|
||||
'@mozilla.org/toolkit/captive-detector;1',
|
||||
'nsICaptivePortalDetector');
|
||||
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);
|
||||
server.stop(do_test_finished);
|
||||
}
|
||||
|
||||
function run_test() {
|
||||
server = new HttpServer();
|
||||
server.registerPathHandler(kCanonicalSitePath, xhr_handler);
|
||||
server.start(4444);
|
||||
|
||||
fakeUIResponse();
|
||||
|
||||
test_abort();
|
||||
}
|
|
@ -0,0 +1,81 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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 {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');
|
||||
|
||||
const kInterfaceName = 'wifi';
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(this, 'gCaptivePortalDetector',
|
||||
'@mozilla.org/toolkit/captive-detector;1',
|
||||
'nsICaptivePortalDetector');
|
||||
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', kServerURL + 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);
|
||||
server.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() {
|
||||
server = new HttpServer();
|
||||
server.registerPathHandler(kCanonicalSitePath, xhr_handler);
|
||||
server.start(4444);
|
||||
|
||||
fakeUIResponse();
|
||||
|
||||
test_abort();
|
||||
}
|
|
@ -0,0 +1,87 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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 {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');
|
||||
|
||||
const kInterfaceName = 'wifi';
|
||||
const kOtherInterfaceName = 'ril';
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(this, 'gCaptivePortalDetector',
|
||||
'@mozilla.org/toolkit/captive-detector;1',
|
||||
'nsICaptivePortalDetector');
|
||||
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', kServerURL + 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);
|
||||
server.stop(do_test_finished);
|
||||
}
|
||||
};
|
||||
|
||||
gCaptivePortalDetector.checkCaptivePortal(kInterfaceName, callback);
|
||||
gCaptivePortalDetector.checkCaptivePortal(kOtherInterfaceName, otherCallback);
|
||||
gCaptivePortalDetector.abort(kInterfaceName);
|
||||
}
|
||||
|
||||
function run_test() {
|
||||
server = new HttpServer();
|
||||
server.registerPathHandler(kCanonicalSitePath, xhr_handler);
|
||||
server.start(4444);
|
||||
|
||||
fakeUIResponse();
|
||||
|
||||
test_multiple_requests_abort();
|
||||
}
|
|
@ -0,0 +1,86 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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 {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');
|
||||
|
||||
const kInterfaceName = 'wifi';
|
||||
const kOtherInterfaceName = 'ril';
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(this, 'gCaptivePortalDetector',
|
||||
'@mozilla.org/toolkit/captive-detector;1',
|
||||
'nsICaptivePortalDetector');
|
||||
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', kServerURL + 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);
|
||||
server.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() {
|
||||
server = new HttpServer();
|
||||
server.registerPathHandler(kCanonicalSitePath, xhr_handler);
|
||||
server.start(4444);
|
||||
|
||||
fakeUIResponse();
|
||||
|
||||
test_abort();
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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 {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');
|
||||
|
||||
const kInterfaceName = 'wifi';
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(this, 'gCaptivePortalDetector',
|
||||
'@mozilla.org/toolkit/captive-detector;1',
|
||||
'nsICaptivePortalDetector');
|
||||
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', kServerURL + kCanonicalSitePath, true);
|
||||
xhr.send();
|
||||
loginFinished = true;
|
||||
do_check_eq(++step, 2);
|
||||
}
|
||||
}, 'captive-portal-login', 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);
|
||||
server.stop(do_test_finished);
|
||||
},
|
||||
};
|
||||
|
||||
gCaptivePortalDetector.checkCaptivePortal(kInterfaceName, callback);
|
||||
}
|
||||
|
||||
function run_test() {
|
||||
server = new HttpServer();
|
||||
server.registerPathHandler(kCanonicalSitePath, xhr_handler);
|
||||
server.start(4444);
|
||||
|
||||
fakeUIResponse();
|
||||
|
||||
test_portal_found();
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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 {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');
|
||||
|
||||
const kInterfaceName = 'wifi';
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(this, 'gCaptivePortalDetector',
|
||||
'@mozilla.org/toolkit/captive-detector;1',
|
||||
'nsICaptivePortalDetector');
|
||||
var server;
|
||||
var step = 0;
|
||||
var loginFinished = false;
|
||||
|
||||
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", "http://example.org/", 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', kServerURL + kCanonicalSitePath, true);
|
||||
xhr.send();
|
||||
loginFinished = true;
|
||||
do_check_eq(++step, 2);
|
||||
}
|
||||
}, 'captive-portal-login', 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);
|
||||
server.stop(do_test_finished);
|
||||
},
|
||||
};
|
||||
|
||||
gCaptivePortalDetector.checkCaptivePortal(kInterfaceName, callback);
|
||||
}
|
||||
|
||||
function run_test() {
|
||||
server = new HttpServer();
|
||||
server.registerPathHandler(kCanonicalSitePath, xhr_handler);
|
||||
server.start(4444);
|
||||
|
||||
fakeUIResponse();
|
||||
|
||||
test_portal_found();
|
||||
}
|
|
@ -0,0 +1,67 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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 {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');
|
||||
|
||||
const kInterfaceName = 'wifi';
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(this, 'gCaptivePortalDetector',
|
||||
'@mozilla.org/toolkit/captive-detector;1',
|
||||
'nsICaptivePortalDetector');
|
||||
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);
|
||||
server.stop(function(){dump('server stop\n'); do_test_finished(); });
|
||||
}
|
||||
};
|
||||
|
||||
gCaptivePortalDetector.checkCaptivePortal(kInterfaceName, callback);
|
||||
}
|
||||
|
||||
function run_test() {
|
||||
server = new HttpServer();
|
||||
server.registerPathHandler(kCanonicalSitePath, xhr_handler);
|
||||
server.start(4444);
|
||||
|
||||
fakeUIResponse();
|
||||
|
||||
test_portal_not_found();
|
||||
}
|
|
@ -0,0 +1,64 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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 {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');
|
||||
|
||||
const kInterfaceName = 'wifi';
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(this, 'gCaptivePortalDetector',
|
||||
'@mozilla.org/toolkit/captive-detector;1',
|
||||
'nsICaptivePortalDetector');
|
||||
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_true(success);
|
||||
do_check_eq(attempt, 6);
|
||||
server.stop(do_test_finished);
|
||||
},
|
||||
};
|
||||
|
||||
gCaptivePortalDetector.checkCaptivePortal(kInterfaceName, callback);
|
||||
}
|
||||
|
||||
function run_test() {
|
||||
server = new HttpServer();
|
||||
server.registerPathHandler(kCanonicalSitePath, xhr_handler);
|
||||
server.start(4444);
|
||||
|
||||
fakeUIResponse();
|
||||
|
||||
test_portal_not_found();
|
||||
}
|
|
@ -0,0 +1,87 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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 {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');
|
||||
|
||||
const kInterfaceName = 'wifi';
|
||||
const kOtherInterfaceName = 'ril';
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(this, 'gCaptivePortalDetector',
|
||||
'@mozilla.org/toolkit/captive-detector;1',
|
||||
'nsICaptivePortalDetector');
|
||||
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', kServerURL + kCanonicalSitePath, true);
|
||||
xhr.send();
|
||||
loginFinished = true;
|
||||
do_check_eq(++step, 2);
|
||||
}
|
||||
}, 'captive-portal-login', 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, 4);
|
||||
gCaptivePortalDetector.finishPreparation(kOtherInterfaceName);
|
||||
},
|
||||
complete: function complete(success) {
|
||||
do_check_eq(++step, 5);
|
||||
do_check_true(success);
|
||||
server.stop(do_test_finished);
|
||||
}
|
||||
};
|
||||
|
||||
gCaptivePortalDetector.checkCaptivePortal(kInterfaceName, callback);
|
||||
gCaptivePortalDetector.checkCaptivePortal(kOtherInterfaceName, otherCallback);
|
||||
}
|
||||
|
||||
function run_test() {
|
||||
server = new HttpServer();
|
||||
server.registerPathHandler(kCanonicalSitePath, xhr_handler);
|
||||
server.start(4444);
|
||||
|
||||
fakeUIResponse();
|
||||
|
||||
test_multiple_requests();
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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 {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');
|
||||
|
||||
const kInterfaceName = 'wifi';
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(this, 'gCaptivePortalDetector',
|
||||
'@mozilla.org/toolkit/captive-detector;1',
|
||||
'nsICaptivePortalDetector');
|
||||
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', kServerURL + 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);
|
||||
server.stop(do_test_finished);
|
||||
},
|
||||
};
|
||||
|
||||
gCaptivePortalDetector.checkCaptivePortal(kInterfaceName, callback);
|
||||
}
|
||||
|
||||
function run_test() {
|
||||
server = new HttpServer();
|
||||
server.registerPathHandler(kCanonicalSitePath, xhr_handler);
|
||||
server.start(4444);
|
||||
|
||||
fakeUIResponse();
|
||||
|
||||
test_cancel();
|
||||
}
|
|
@ -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]
|
||||
|
|
@ -926,6 +926,7 @@ if [ "$ENABLE_TESTS" ]; then
|
|||
testing/xpcshell/example/Makefile
|
||||
toolkit/components/aboutmemory/tests/Makefile
|
||||
toolkit/components/alerts/test/Makefile
|
||||
toolkit/components/captivedetect/test/Makefile
|
||||
toolkit/components/commandlines/test/Makefile
|
||||
toolkit/components/contentprefs/tests/Makefile
|
||||
toolkit/components/downloads/test/Makefile
|
||||
|
|
Загрузка…
Ссылка в новой задаче