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