<!DOCTYPE html>
<head>
<script src="../resources/js-test.js"></script>
<script src="resources/netinfo_common.js"></script>
</head>
<body>
<script>

description("Tests that it's okay to unregister the event listener while handling the event.");

shouldBe('typeof internals.observeGC', '"function"',
'this test requires window.internals');

var otherHandler = function(e) {
    shouldBe('connection.type', 'initialType');
    shouldBe('connection.downlinkMax', 'initialDownlinkMax');
    shouldBe('connection.effectiveType', 'initialEffectiveType');
    shouldBe('connection.rtt', 'initialRtt', false, initialRttMaxNoise);
    shouldBe('connection.downlink', 'initialDownlink', false, initialDownlinkMaxNoise);

    finishJSTest();
};

var handler = function(e) {
    shouldBe('connection.type', 'newConnectionType');
    shouldBe('connection.downlinkMax', 'newDownlinkMax');
    shouldBe('connection.effectiveType', 'initialEffectiveType');
    shouldBe('connection.rtt', 'initialRtt', false, initialRttMaxNoise);
    shouldBe('connection.downlink', 'initialDownlink', false, initialDownlinkMaxNoise);
    connection.removeEventListener('change', handler);
    connection.addEventListener('change', otherHandler);
    internals.setNetworkConnectionInfoOverride(isTypeOnline(initialType), initialType, initialEffectiveType, initialRtt, initialDownlinkMax);
};

connection.addEventListener('change', handler);
internals.setNetworkConnectionInfoOverride(isTypeOnline(newConnectionType), newConnectionType, initialEffectiveType, initialRtt, newDownlinkMax);

</script>
</body>
</html>
