Bug 752982 - Part 2, provide xpcshell test cases for captive portal detection. r=thinker,dolske a=shira.

This commit is contained in:
Shih-Chiang Chien 2012-10-10 11:16:32 +08:00
parent 6d72ea7eb7
commit 4c067a8da0
16 changed files with 819 additions and 0 deletions

View File

@ -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]

View File

@ -20,4 +20,6 @@ EXTRA_COMPONENTS = \
captivedetect.js \
$(NULL)
TEST_DIRS += test
include $(topsrcdir)/config/rules.mk

View File

@ -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

View File

@ -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();

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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();
}

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]

View File

@ -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