Blame dom/base/test/test_bug338583.html

Packit f0b94e
Packit f0b94e
<html>
Packit f0b94e
Packit f0b94e
https://bugzilla.mozilla.org/show_bug.cgi?id=338583
Packit f0b94e
-->
Packit f0b94e
<head>
Packit f0b94e
  <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
Packit f0b94e
  <title>Test for Bug 338583</title>
Packit f0b94e
  <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
Packit f0b94e
  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
Packit f0b94e
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
Packit f0b94e
Packit f0b94e
</head>
Packit f0b94e
<body bgColor=white>
Packit f0b94e
Mozilla Bug 338583
Packit f0b94e

Packit f0b94e
Packit f0b94e
Packit f0b94e
Packit f0b94e
Packit f0b94e
<script class="testbody" type="text/javascript">
Packit f0b94e
/** Tests for Bug 338583 **/
Packit f0b94e
Packit f0b94e
// we test:
Packit f0b94e
//   1) the EventSource behaviour
Packit f0b94e
//   2) if the events are trusted
Packit f0b94e
//   3) possible invalid eventsources
Packit f0b94e
//   4) the close method when the object is just been used
Packit f0b94e
//   5) access-control
Packit f0b94e
//   6) the data parameter
Packit f0b94e
//   7) delayed server responses
Packit f0b94e
Packit f0b94e
// --
Packit f0b94e
Packit f0b94e
  var gTestsHaveFinished = [];
Packit f0b94e
Packit f0b94e
  function setTestHasFinished(test_id)
Packit f0b94e
  {
Packit f0b94e
    if (gTestsHaveFinished[test_id]) {
Packit f0b94e
      return;
Packit f0b94e
    }
Packit f0b94e
Packit f0b94e
    gTestsHaveFinished[test_id] = true;
Packit f0b94e
    for (var i=0; i < gTestsHaveFinished.length; ++i) {
Packit f0b94e
      if (!gTestsHaveFinished[i]) {
Packit f0b94e
        return;
Packit f0b94e
      }
Packit f0b94e
    }
Packit f0b94e
Packit f0b94e
    SimpleTest.finish();
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function runAllTests() {
Packit f0b94e
    // these tests run asynchronously, and they will take 8000 ms
Packit f0b94e
    var all_tests = [
Packit f0b94e
      doTest1, doTest1_e, doTest1_f, doTest2, doTest3, doTest3_b, doTest3_c, doTest3_d,
Packit f0b94e
      doTest3_e, doTest3_f, doTest3_g, doTest3_h, doTest4, doTest4_b,
Packit f0b94e
      doTest5, doTest5_b, doTest5_c, doTest5_e, doTest6, doTest7
Packit f0b94e
    ];
Packit f0b94e
Packit f0b94e
    for (var test_id=0; test_id < all_tests.length; ++test_id) {
Packit f0b94e
      gTestsHaveFinished[test_id] = false;
Packit f0b94e
      var fn = all_tests[test_id];
Packit f0b94e
      fn(test_id);
Packit f0b94e
    }
Packit f0b94e
Packit f0b94e
    setTimeout(function() {
Packit f0b94e
      for (var test_id=0; test_id < all_tests.length; ++test_id) {
Packit f0b94e
        if (!gTestsHaveFinished[test_id]) {
Packit f0b94e
          ok(false, "Test " + test_id + " took too long");
Packit f0b94e
          setTestHasFinished(test_id);
Packit f0b94e
        }
Packit f0b94e
      }
Packit f0b94e
    }, 60000 * stress_factor); // all tests together are supposed to take less than 1 minute
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function fn_onmessage(e) {
Packit f0b94e
    if (e.currentTarget == e.target && e.target.hits != null)
Packit f0b94e
      e.target.hits['fn_onmessage']++;
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function fn_event_listener_message(e) {
Packit f0b94e
    if (e.currentTarget == e.target && e.target.hits != null)
Packit f0b94e
      e.target.hits['fn_event_listener_message']++;
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function fn_other_event_name(e) {
Packit f0b94e
    if (e.currentTarget == e.target && e.target.hits != null)
Packit f0b94e
      e.target.hits['fn_other_event_name']++;
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  var gEventSourceObj1 = null, gEventSourceObj1_e, gEventSourceObj1_f;
Packit f0b94e
  var gEventSourceObj2 = null;
Packit f0b94e
  var gEventSourceObj3_a = null, gEventSourceObj3_b = null,
Packit f0b94e
      gEventSourceObj3_c = null, gEventSourceObj3_d = null,
Packit f0b94e
      gEventSourceObj3_e = null, gEventSourceObj3_f = null,
Packit f0b94e
      gEventSourceObj3_g = null, gEventSourceObj3_h = null;
Packit f0b94e
  var gEventSourceObj4_a = null, gEventSourceObj4_b = null;
Packit f0b94e
  var gEventSourceObj5_a = null, gEventSourceObj5_b = null,
Packit f0b94e
      gEventSourceObj5_c = null, gEventSourceObj5_d = null,
Packit f0b94e
      gEventSourceObj5_e = null, gEventSourceObj5_f = null;
Packit f0b94e
  var gEventSourceObj6 = null;
Packit f0b94e
  var gEventSourceObj7 = null;
Packit f0b94e
  var stress_factor;  // used in the setTimeouts in order to help
Packit f0b94e
                      // the test when running in slow machines
Packit f0b94e
Packit f0b94e
  function hasBeenHitFor1And2(obj, min) {
Packit f0b94e
    if (obj.hits['fn_onmessage'] < min ||
Packit f0b94e
        obj.hits['fn_event_listener_message'] < min ||
Packit f0b94e
        obj.hits['fn_other_event_name'] < min)
Packit f0b94e
      return false;
Packit f0b94e
    return true;
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
// in order to test (1):
Packit f0b94e
//   a) if the EventSource constructor parameter is equal to its url attribute
Packit f0b94e
//   b) let its fn_onmessage, fn_event_listener_message, and fn_other_event_name functions listeners be hit four times each
Packit f0b94e
//   c) the close method (we expect readyState == CLOSED)
Packit f0b94e
//   d) the close method (we expect no message events anymore)
Packit f0b94e
//   e) use the default for withCredentials when passing dictionary arguments that don't explicitly set it
Packit f0b94e
//   f) if a 204 HTTP response closes (interrupts) connections. See bug 869432.
Packit f0b94e
Packit f0b94e
  function doTest1(test_id) {
Packit f0b94e
    gEventSourceObj1 = new EventSource("eventsource.resource");
Packit f0b94e
    ok(gEventSourceObj1.url == "http://mochi.test:8888/tests/dom/base/test/eventsource.resource", "Test 1.a failed.");
Packit f0b94e
    ok(gEventSourceObj1.readyState == 0 || gEventSourceObj1.readyState == 1, "Test 1.a failed.");
Packit f0b94e
Packit f0b94e
    doTest1_b(test_id);
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest1_b(test_id) {
Packit f0b94e
    gEventSourceObj1.hits = [];
Packit f0b94e
    gEventSourceObj1.hits['fn_onmessage'] = 0;
Packit f0b94e
    gEventSourceObj1.onmessage = fn_onmessage;
Packit f0b94e
    gEventSourceObj1.hits['fn_event_listener_message'] = 0;
Packit f0b94e
    gEventSourceObj1.addEventListener('message', fn_event_listener_message, true);
Packit f0b94e
    gEventSourceObj1.hits['fn_other_event_name'] = 0;
Packit f0b94e
    gEventSourceObj1.addEventListener('other_event_name', fn_other_event_name, true);
Packit f0b94e
Packit f0b94e
    // the eventsources.res always use a retry of 0.5 second, so for four hits a timeout of 6 seconds is enough
Packit f0b94e
    setTimeout(function(){
Packit f0b94e
      bhits = hasBeenHitFor1And2(gEventSourceObj1, 4);
Packit f0b94e
      ok(bhits, "Test 1.b failed.");
Packit f0b94e
Packit f0b94e
      doTest1_c(test_id);
Packit f0b94e
    }, parseInt(6000*stress_factor));
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest1_c(test_id) {
Packit f0b94e
    gEventSourceObj1.close();
Packit f0b94e
    ok(gEventSourceObj1.readyState == 2, "Test 1.c failed.");
Packit f0b94e
Packit f0b94e
    doTest1_d(test_id);
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest1_d(test_id) {
Packit f0b94e
    gEventSourceObj1.hits['fn_onmessage'] = 0;
Packit f0b94e
    gEventSourceObj1.hits['fn_event_listener_message'] = 0;
Packit f0b94e
    gEventSourceObj1.hits['fn_other_event_name'] = 0;
Packit f0b94e
Packit f0b94e
    setTimeout(function(){
Packit f0b94e
      bhits = hasBeenHitFor1And2(gEventSourceObj1, 1);
Packit f0b94e
      ok(!bhits, "Test 1.d failed.");
Packit f0b94e
      gEventSourceObj1.close();
Packit f0b94e
      setTestHasFinished(test_id);
Packit f0b94e
    }, parseInt(2000*stress_factor));
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest1_e(test_id) {
Packit f0b94e
    try {
Packit f0b94e
      for (var options of [null, undefined, {}]) {
Packit f0b94e
        gEventSourceObj1_e = new EventSource("eventsource.resource", options);
Packit f0b94e
        is(gEventSourceObj1_e.withCredentials, false, "withCredentials should default to false");
Packit f0b94e
        gEventSourceObj1_e.close();
Packit f0b94e
      }
Packit f0b94e
    } catch (e) {
Packit f0b94e
      ok(false, "Test 1.e failed");
Packit f0b94e
    }
Packit f0b94e
    setTestHasFinished(test_id);
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest1_f(test_id) {
Packit f0b94e
    var called_on_error = false;
Packit f0b94e
  
Packit f0b94e
    gEventSourceObj1_f = new EventSource("file_bug869432.eventsource");
Packit f0b94e
    gEventSourceObj1_f.onopen = function(e) {
Packit f0b94e
      ok(false, "Test 1.f failed: onopen was called");
Packit f0b94e
    };
Packit f0b94e
    gEventSourceObj1_f.onmessage = function(e) {
Packit f0b94e
      ok(false, "Test 1.f failed: onmessage was called");
Packit f0b94e
    };
Packit f0b94e
    gEventSourceObj1_f.onerror = function(e) {
Packit f0b94e
      if (called_on_error) {
Packit f0b94e
        ok(false, "Test 1.f failed: onerror was called twice");
Packit f0b94e
      }
Packit f0b94e
      called_on_error = true;
Packit f0b94e
      ok(gEventSourceObj1_f.readyState == 2, "Test 1.f failed: onerror was called with readyState = " + gEventSourceObj1_f.readyState);
Packit f0b94e
    };
Packit f0b94e
Packit f0b94e
    setTimeout(function() {  // just to clean...
Packit f0b94e
      ok(called_on_error, "Test 1.f failed: onerror was not called");
Packit f0b94e
      setTestHasFinished(test_id);
Packit f0b94e
    }, parseInt(5000*stress_factor));
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
// in order to test (2)
Packit f0b94e
//   a) set a eventsource that give the dom events messages
Packit f0b94e
//   b) expect trusted events
Packit f0b94e
Packit f0b94e
  function doTest2(test_id) {
Packit f0b94e
    var func = function(e) {
Packit f0b94e
      ok(e.isTrusted, "Test 2 failed");
Packit f0b94e
      gEventSourceObj2.close();
Packit f0b94e
    };
Packit f0b94e
Packit f0b94e
    gEventSourceObj2 = new EventSource("eventsource.resource");
Packit f0b94e
    gEventSourceObj2.onmessage = func;
Packit f0b94e
Packit f0b94e
    setTimeout(function() {  // just to clean...
Packit f0b94e
      gEventSourceObj2.close();
Packit f0b94e
      setTestHasFinished(test_id);
Packit f0b94e
    }, parseInt(5000*stress_factor));
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
// in order to test (3)
Packit f0b94e
//   a) XSite domain error test
Packit f0b94e
//   b) protocol file:// test
Packit f0b94e
//   c) protocol javascript: test
Packit f0b94e
//   d) wrong Content-Type test
Packit f0b94e
//   e) bad http response code test
Packit f0b94e
//   f) message eventsource without a data test
Packit f0b94e
//   g) DNS error
Packit f0b94e
//   h) EventSource which last message doesn't end with an empty line. See bug 710546
Packit f0b94e
Packit f0b94e
  function doTest3(test_id) {
Packit f0b94e
    gEventSourceObj3_a = new EventSource("http://example.org/tests/dom/base/test/eventsource.resource");
Packit f0b94e
Packit f0b94e
    gEventSourceObj3_a.onmessage = fn_onmessage;
Packit f0b94e
    gEventSourceObj3_a.hits = [];
Packit f0b94e
    gEventSourceObj3_a.hits['fn_onmessage'] = 0;
Packit f0b94e
Packit f0b94e
    setTimeout(function() {
Packit f0b94e
      ok(gEventSourceObj3_a.hits['fn_onmessage'] == 0, "Test 3.a failed");
Packit f0b94e
      gEventSourceObj3_a.close();
Packit f0b94e
      setTestHasFinished(test_id);
Packit f0b94e
    }, parseInt(1500*stress_factor));
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest3_b(test_id) {
Packit f0b94e
    // currently no support yet for local files for b2g/Android mochitest, see bug 838726
Packit f0b94e
    if (navigator.appVersion.includes("Android") || SpecialPowers.Services.appinfo.name == "B2G") {
Packit f0b94e
      setTestHasFinished(test_id);
Packit f0b94e
      return;
Packit f0b94e
    }
Packit f0b94e
Packit f0b94e
    var xhr = new XMLHttpRequest;
Packit f0b94e
    xhr.open("GET", "/dynamic/getMyDirectory.sjs", false);
Packit f0b94e
    xhr.send();
Packit f0b94e
    var basePath = xhr.responseText;
Packit f0b94e
Packit f0b94e
    gEventSourceObj3_b = new EventSource("file://" + basePath + "eventsource.resource");
Packit f0b94e
Packit f0b94e
    gEventSourceObj3_b.onmessage = fn_onmessage;
Packit f0b94e
    gEventSourceObj3_b.hits = [];
Packit f0b94e
    gEventSourceObj3_b.hits['fn_onmessage'] = 0;
Packit f0b94e
Packit f0b94e
    setTimeout(function() {
Packit f0b94e
      ok(gEventSourceObj3_b.hits['fn_onmessage'] == 0, "Test 3.b failed");
Packit f0b94e
      gEventSourceObj3_b.close();
Packit f0b94e
      setTestHasFinished(test_id);
Packit f0b94e
    }, parseInt(1500*stress_factor));
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function jsEvtSource()
Packit f0b94e
  {
Packit f0b94e
    return "event: message\n" +
Packit f0b94e
           "data: 1\n\n";
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest3_c(test_id) {
Packit f0b94e
    gEventSourceObj3_c = new EventSource("javascript: return jsEvtSource()");
Packit f0b94e
Packit f0b94e
    gEventSourceObj3_c.onmessage = fn_onmessage;
Packit f0b94e
    gEventSourceObj3_c.hits = [];
Packit f0b94e
    gEventSourceObj3_c.hits['fn_onmessage'] = 0;
Packit f0b94e
Packit f0b94e
    setTimeout(function() {
Packit f0b94e
      ok(gEventSourceObj3_c.hits['fn_onmessage'] == 0, "Test 3.c failed");
Packit f0b94e
      gEventSourceObj3_c.close();
Packit f0b94e
      setTestHasFinished(test_id);
Packit f0b94e
    }, parseInt(1500*stress_factor));
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest3_d(test_id) {
Packit f0b94e
    gEventSourceObj3_d = new EventSource("badContentType.eventsource");
Packit f0b94e
Packit f0b94e
    gEventSourceObj3_d.onmessage = fn_onmessage;
Packit f0b94e
    gEventSourceObj3_d.hits = [];
Packit f0b94e
    gEventSourceObj3_d.hits['fn_onmessage'] = 0;
Packit f0b94e
Packit f0b94e
    setTimeout(function() {
Packit f0b94e
      ok(gEventSourceObj3_d.hits['fn_onmessage'] == 0, "Test 3.d failed");
Packit f0b94e
      gEventSourceObj3_d.close();
Packit f0b94e
      setTestHasFinished(test_id);
Packit f0b94e
    }, parseInt(1500*stress_factor));
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest3_e(test_id) {
Packit f0b94e
    gEventSourceObj3_e = new EventSource("badHTTPResponseCode.eventsource");
Packit f0b94e
Packit f0b94e
    gEventSourceObj3_e.onmessage = fn_onmessage;
Packit f0b94e
    gEventSourceObj3_e.hits = [];
Packit f0b94e
    gEventSourceObj3_e.hits['fn_onmessage'] = 0;
Packit f0b94e
Packit f0b94e
    setTimeout(function() {
Packit f0b94e
      ok(gEventSourceObj3_e.hits['fn_onmessage'] == 0, "Test 3.e failed");
Packit f0b94e
      gEventSourceObj3_e.close();
Packit f0b94e
      setTestHasFinished(test_id);
Packit f0b94e
    }, parseInt(1500*stress_factor));
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest3_f(test_id) {
Packit f0b94e
    gEventSourceObj3_f = new EventSource("badMessageEvent.eventsource");
Packit f0b94e
Packit f0b94e
    gEventSourceObj3_f.onmessage = fn_onmessage;
Packit f0b94e
    gEventSourceObj3_f.hits = [];
Packit f0b94e
    gEventSourceObj3_f.hits['fn_onmessage'] = 0;
Packit f0b94e
Packit f0b94e
    setTimeout(function() {
Packit f0b94e
      ok(gEventSourceObj3_f.hits['fn_onmessage'] == 0, "Test 3.f failed");
Packit f0b94e
      gEventSourceObj3_f.close();
Packit f0b94e
      setTestHasFinished(test_id);
Packit f0b94e
    }, parseInt(1500*stress_factor));
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function fnInvalidNCName() {
Packit f0b94e
    fnInvalidNCName.hits++;
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest3_g(test_id) {
Packit f0b94e
    gEventSourceObj3_g = new EventSource("http://hdfskjghsbg.jtiyoejowe.dafsgbhjab.com");
Packit f0b94e
Packit f0b94e
    gEventSourceObj3_g.onmessage = fn_onmessage;
Packit f0b94e
    gEventSourceObj3_g.hits = [];
Packit f0b94e
    gEventSourceObj3_g.hits['fn_onmessage'] = 0;
Packit f0b94e
Packit f0b94e
    setTimeout(function() {
Packit f0b94e
      ok(gEventSourceObj3_g.hits['fn_onmessage'] == 0, "Test 3.g failed");
Packit f0b94e
      gEventSourceObj3_g.close();
Packit f0b94e
      setTestHasFinished(test_id);
Packit f0b94e
    }, parseInt(1500*stress_factor));
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function fnMessageListenerTest3h(e) {
Packit f0b94e
    fnMessageListenerTest3h.msg_ok = (fnMessageListenerTest3h.msg_ok && e.data == "ok");
Packit f0b94e
    fnMessageListenerTest3h.id_ok = (fnMessageListenerTest3h.id_ok && e.lastEventId == "");
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest3_h(test_id) {
Packit f0b94e
    gEventSourceObj3_h = new EventSource("badMessageEvent2.eventsource");
Packit f0b94e
Packit f0b94e
    gEventSourceObj3_h.addEventListener('message', fnMessageListenerTest3h, true);
Packit f0b94e
    fnMessageListenerTest3h.msg_ok = true;
Packit f0b94e
    fnMessageListenerTest3h.id_ok = true;
Packit f0b94e
Packit f0b94e
    gEventSourceObj3_h.onmessage = fn_onmessage;
Packit f0b94e
    gEventSourceObj3_h.hits = [];
Packit f0b94e
    gEventSourceObj3_h.hits['fn_onmessage'] = 0;
Packit f0b94e
Packit f0b94e
    setTimeout(function() {
Packit f0b94e
      ok(gEventSourceObj3_h.hits['fn_onmessage'] > 1, "Test 3.h.1 failed");
Packit f0b94e
      if (gEventSourceObj3_h.hits['fn_onmessage'] > 1) {
Packit f0b94e
        ok(fnMessageListenerTest3h.msg_ok, "Test 3.h.2 failed");
Packit f0b94e
        ok(fnMessageListenerTest3h.id_ok, "Test 3.h.3 failed");
Packit f0b94e
      }
Packit f0b94e
      gEventSourceObj3_h.close();
Packit f0b94e
      setTestHasFinished(test_id);
Packit f0b94e
    }, parseInt(6000*stress_factor));
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
// in order to test (4)
Packit f0b94e
//   a) close the object when it is in use, which is being processed and that is expected
Packit f0b94e
//      to dispatch more eventlisteners
Packit f0b94e
//   b) remove an eventlistener in use
Packit f0b94e
Packit f0b94e
  function fn_onmessage4_a(e)
Packit f0b94e
  {
Packit f0b94e
    if (e.data > gEventSourceObj4_a.lastData)
Packit f0b94e
      gEventSourceObj4_a.lastData = e.data;
Packit f0b94e
    if (e.data == 2)
Packit f0b94e
      gEventSourceObj4_a.close();
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function fn_onmessage4_b(e)
Packit f0b94e
  {
Packit f0b94e
    if (e.data > gEventSourceObj4_b.lastData)
Packit f0b94e
      gEventSourceObj4_b.lastData = e.data;
Packit f0b94e
    if (e.data == 2)
Packit f0b94e
      gEventSourceObj4_b.removeEventListener('message', fn_onmessage4_b, true);
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest4(test_id) {
Packit f0b94e
    gEventSourceObj4_a = new EventSource("forRemoval.resource");
Packit f0b94e
    gEventSourceObj4_a.lastData = 0;
Packit f0b94e
    gEventSourceObj4_a.onmessage = fn_onmessage4_a;
Packit f0b94e
Packit f0b94e
    setTimeout(function() {
Packit f0b94e
      ok(gEventSourceObj4_a.lastData == 2, "Test 4.a failed");
Packit f0b94e
      gEventSourceObj4_a.close();
Packit f0b94e
      setTestHasFinished(test_id);
Packit f0b94e
    }, parseInt(3000*stress_factor));
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest4_b(test_id)
Packit f0b94e
  {
Packit f0b94e
    gEventSourceObj4_b = new EventSource("forRemoval.resource");
Packit f0b94e
    gEventSourceObj4_b.lastData = 0;
Packit f0b94e
    gEventSourceObj4_b.addEventListener('message', fn_onmessage4_b, true);
Packit f0b94e
Packit f0b94e
    setTimeout(function() {
Packit f0b94e
      ok(gEventSourceObj4_b.lastData == 2, "Test 4.b failed");
Packit f0b94e
      gEventSourceObj4_b.close();
Packit f0b94e
      setTestHasFinished(test_id);
Packit f0b94e
    }, parseInt(3000*stress_factor));
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
// in order to test (5)
Packit f0b94e
//   a) valid access-control xsite request
Packit f0b94e
//   b) invalid access-control xsite request
Packit f0b94e
//   c) valid access-control xsite request on a restricted page with credentials
Packit f0b94e
//   d) valid access-control xsite request on a restricted page without credentials
Packit f0b94e
//   e) valid access-control xsite request on a restricted page when the parameter withCredentials is a getter 
Packit f0b94e
//   f) valid access-control xsite request on a restricted page when the parameter withCredentials is missing 
Packit f0b94e
Packit f0b94e
  function doTest5(test_id)
Packit f0b94e
  {
Packit f0b94e
    gEventSourceObj5_a = new EventSource("http://example.org/tests/dom/base/test/accesscontrol.resource");
Packit f0b94e
Packit f0b94e
    gEventSourceObj5_a.onmessage = fn_onmessage;
Packit f0b94e
    gEventSourceObj5_a.hits = [];
Packit f0b94e
    gEventSourceObj5_a.hits['fn_onmessage'] = 0;
Packit f0b94e
Packit f0b94e
    setTimeout(function() {
Packit f0b94e
      ok(gEventSourceObj5_a.hits['fn_onmessage'] != 0, "Test 5.a failed");
Packit f0b94e
      gEventSourceObj5_a.close();
Packit f0b94e
      setTestHasFinished(test_id);
Packit f0b94e
    }, parseInt(3000*stress_factor));
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest5_b(test_id)
Packit f0b94e
  {
Packit f0b94e
    gEventSourceObj5_b = new EventSource("http://example.org/tests/dom/base/test/invalid_accesscontrol.resource");
Packit f0b94e
Packit f0b94e
    gEventSourceObj5_b.onmessage = fn_onmessage;
Packit f0b94e
    gEventSourceObj5_b.hits = [];
Packit f0b94e
    gEventSourceObj5_b.hits['fn_onmessage'] = 0;
Packit f0b94e
Packit f0b94e
    setTimeout(function() {
Packit f0b94e
      ok(gEventSourceObj5_b.hits['fn_onmessage'] == 0, "Test 5.b failed");
Packit f0b94e
      gEventSourceObj5_b.close();
Packit f0b94e
      setTestHasFinished(test_id);
Packit f0b94e
    }, parseInt(3000*stress_factor));
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest5_c(test_id)
Packit f0b94e
  {
Packit f0b94e
    // credentials using the auth cache
Packit f0b94e
    var xhr = new XMLHttpRequest({mozAnon: true, mozSystem: true});
Packit f0b94e
    // also, test mixed mode UI
Packit f0b94e
    xhr.open("GET", "https://example.com/tests/dom/base/test/file_restrictedEventSource.sjs?test=user1_xhr", true, "user 1", "password 1");
Packit f0b94e
    xhr.send();
Packit f0b94e
    xhr.onloadend = function() {
Packit f0b94e
      ok(xhr.status == 200, "Failed to set credentials in test 5.c");
Packit f0b94e
Packit f0b94e
      gEventSourceObj5_c = new EventSource("https://example.com/tests/dom/base/test/file_restrictedEventSource.sjs?test=user1_evtsrc",
Packit f0b94e
                                           { withCredentials: true } );
Packit f0b94e
      ok(gEventSourceObj5_c.withCredentials, "Wrong withCredentials in test 5.c");
Packit f0b94e
Packit f0b94e
      gEventSourceObj5_c.onmessage = function(e) {
Packit f0b94e
        ok(e.origin == "https://example.com", "Wrong Origin in test 5.c");
Packit f0b94e
        fn_onmessage(e);
Packit f0b94e
      };
Packit f0b94e
      gEventSourceObj5_c.hits = [];
Packit f0b94e
      gEventSourceObj5_c.hits['fn_onmessage'] = 0;
Packit f0b94e
Packit f0b94e
      setTimeout(function() {
Packit f0b94e
        ok(gEventSourceObj5_c.hits['fn_onmessage'] > 0, "Test 5.c failed");
Packit f0b94e
        gEventSourceObj5_c.close();
Packit f0b94e
        doTest5_d(test_id);
Packit f0b94e
      }, parseInt(3000*stress_factor));
Packit f0b94e
    };
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest5_d(test_id)
Packit f0b94e
  {
Packit f0b94e
    var xhr = new XMLHttpRequest({mozAnon: true, mozSystem: true});
Packit f0b94e
    xhr.open("GET", "https://example.com/tests/dom/base/test/file_restrictedEventSource.sjs?test=user2_xhr", true, "user 2", "password 2");
Packit f0b94e
    xhr.send();
Packit f0b94e
    xhr.onloadend = function() {
Packit f0b94e
      ok(xhr.status == 200, "Failed to set credentials in test 5.d");
Packit f0b94e
  
Packit f0b94e
      gEventSourceObj5_d = new EventSource("https://example.com/tests/dom/base/test/file_restrictedEventSource.sjs?test=user2_evtsrc");
Packit f0b94e
      ok(!gEventSourceObj5_d.withCredentials, "Wrong withCredentials in test 5.d");
Packit f0b94e
  
Packit f0b94e
      gEventSourceObj5_d.onmessage = function(e) {
Packit f0b94e
        ok(e.origin == "https://example.com", "Wrong Origin in test 5.d");
Packit f0b94e
        fn_onmessage(e);
Packit f0b94e
      };
Packit f0b94e
      gEventSourceObj5_d.hits = [];
Packit f0b94e
      gEventSourceObj5_d.hits['fn_onmessage'] = 0;
Packit f0b94e
  
Packit f0b94e
      setTimeout(function() {
Packit f0b94e
        ok(gEventSourceObj5_d.hits['fn_onmessage'] == 0, "Test 5.d failed");
Packit f0b94e
        gEventSourceObj5_d.close();
Packit f0b94e
        setTestHasFinished(test_id);
Packit f0b94e
      }, parseInt(3000*stress_factor));
Packit f0b94e
    };
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest5_e(test_id)
Packit f0b94e
  {
Packit f0b94e
    // credentials using the auth cache
Packit f0b94e
    var xhr = new XMLHttpRequest({mozAnon: true, mozSystem: true});
Packit f0b94e
    xhr.open("GET", "http://example.org/tests/dom/base/test/file_restrictedEventSource.sjs?test=user1_xhr", true, "user 1", "password 1");
Packit f0b94e
    xhr.send();
Packit f0b94e
    xhr.onloadend = function() {
Packit f0b94e
      ok(xhr.status == 200, "Failed to set credentials in test 5.e");
Packit f0b94e
Packit f0b94e
      gEventSourceObj5_e = new EventSource("http://example.org/tests/dom/base/test/file_restrictedEventSource.sjs?test=user1_evtsrc",
Packit f0b94e
                                           { get withCredentials() { return true; } } );
Packit f0b94e
      ok(gEventSourceObj5_e.withCredentials, "Wrong withCredentials in test 5.e");
Packit f0b94e
Packit f0b94e
      gEventSourceObj5_e.onmessage = function(e) {
Packit f0b94e
        ok(e.origin == "http://example.org", "Wrong Origin in test 5.e");
Packit f0b94e
        fn_onmessage(e);
Packit f0b94e
      };
Packit f0b94e
      gEventSourceObj5_e.hits = [];
Packit f0b94e
      gEventSourceObj5_e.hits['fn_onmessage'] = 0;
Packit f0b94e
Packit f0b94e
      setTimeout(function() {
Packit f0b94e
        ok(gEventSourceObj5_e.hits['fn_onmessage'] > 0, "Test 5.e failed");
Packit f0b94e
        gEventSourceObj5_e.close();
Packit f0b94e
        doTest5_f(test_id);
Packit f0b94e
      }, parseInt(5000*stress_factor));
Packit f0b94e
    };
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest5_f(test_id)
Packit f0b94e
  {
Packit f0b94e
    var xhr = new XMLHttpRequest({mozAnon: true, mozSystem: true});
Packit f0b94e
    xhr.open("GET", "http://example.org/tests/dom/base/test/file_restrictedEventSource.sjs?test=user2_xhr", true, "user 2", "password 2");
Packit f0b94e
    xhr.send();
Packit f0b94e
    xhr.onloadend = function() {
Packit f0b94e
      ok(xhr.status == 200, "Failed to set credentials in test 5.f");
Packit f0b94e
Packit f0b94e
      gEventSourceObj5_f = new EventSource("http://example.org/tests/dom/base/test/file_restrictedEventSource.sjs?test=user2_evtsrc",
Packit f0b94e
                                           { });
Packit f0b94e
      ok(!gEventSourceObj5_f.withCredentials, "Wrong withCredentials in test 5.f");
Packit f0b94e
Packit f0b94e
      gEventSourceObj5_f.onmessage = function(e) {
Packit f0b94e
        ok(e.origin == "http://example.org", "Wrong Origin in test 5.f");
Packit f0b94e
        fn_onmessage(e);
Packit f0b94e
      };
Packit f0b94e
      gEventSourceObj5_f.hits = [];
Packit f0b94e
      gEventSourceObj5_f.hits['fn_onmessage'] = 0;
Packit f0b94e
Packit f0b94e
      setTimeout(function() {
Packit f0b94e
        ok(gEventSourceObj5_f.hits['fn_onmessage'] == 0, "Test 5.f failed");
Packit f0b94e
        gEventSourceObj5_f.close();
Packit f0b94e
        setTestHasFinished(test_id);
Packit f0b94e
      }, parseInt(3000*stress_factor));
Packit f0b94e
    };
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest6(test_id)
Packit f0b94e
  {
Packit f0b94e
    gEventSourceObj6 = new EventSource("somedatas.resource");
Packit f0b94e
    var fn_somedata = function(e) {
Packit f0b94e
      if (fn_somedata.expected == 0) {
Packit f0b94e
        ok(e.data == "123456789\n123456789123456789\n123456789123456789123456789123456789\n 123456789123456789123456789123456789123456789123456789123456789123456789\nçãá\"\'@`~Ý Ḿyyyy",
Packit f0b94e
          "Test 6.a failed");
Packit f0b94e
      } else if (fn_somedata.expected == 1) {
Packit f0b94e
        ok(e.data == " :xxabcdefghij\nçãá\"\'@`~Ý Ḿyyyy : zz",
Packit f0b94e
          "Test 6.b failed");
Packit f0b94e
        gEventSourceObj6.close();
Packit f0b94e
      } else {
Packit f0b94e
        ok(false, "Test 6 failed (unexpected message event)");
Packit f0b94e
      }
Packit f0b94e
      fn_somedata.expected++;
Packit f0b94e
    }
Packit f0b94e
    fn_somedata.expected = 0;
Packit f0b94e
    gEventSourceObj6.onmessage = fn_somedata;
Packit f0b94e
Packit f0b94e
    setTimeout(function() {
Packit f0b94e
      gEventSourceObj6.close();
Packit f0b94e
      setTestHasFinished(test_id);
Packit f0b94e
    }, parseInt(2500*stress_factor));
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest7(test_id)
Packit f0b94e
  {
Packit f0b94e
    gEventSourceObj7 = new EventSource("delayedServerEvents.sjs");
Packit f0b94e
    gEventSourceObj7.msg_received = [];
Packit f0b94e
    gEventSourceObj7.onmessage = function(e)
Packit f0b94e
    {
Packit f0b94e
      e.target.msg_received.push(e.data);
Packit f0b94e
    }
Packit f0b94e
    
Packit f0b94e
    setTimeout(function() {
Packit f0b94e
      gEventSourceObj7.close();
Packit f0b94e
      
Packit f0b94e
      ok(gEventSourceObj7.msg_received[0] == "" &&
Packit f0b94e
         gEventSourceObj7.msg_received[1] == "delayed1" &&
Packit f0b94e
         gEventSourceObj7.msg_received[2] == "delayed2", "Test 7 failed");
Packit f0b94e
Packit f0b94e
      document.getElementById('waitSpan').innerHTML = '';
Packit f0b94e
      setTestHasFinished(test_id);
Packit f0b94e
    }, parseInt(8000*stress_factor));
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTest()
Packit f0b94e
  {
Packit f0b94e
    // Allow all cookies, then run the actual test
Packit f0b94e
    SpecialPowers.pushPrefEnv({"set": [["network.cookie.cookieBehavior", 0]]},
Packit f0b94e
    function() {
Packit f0b94e
      SpecialPowers.pushPermissions([{'type': 'systemXHR', 'allow': true, 'context': document}],
Packit f0b94e
        doTestCallback);
Packit f0b94e
    });
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function doTestCallback()
Packit f0b94e
  {
Packit f0b94e
Packit f0b94e
    // we get a good stress_factor by testing 10 setTimeouts and some float
Packit f0b94e
    // arithmetic taking my machine as stress_factor==1 (time=589)
Packit f0b94e
Packit f0b94e
    var begin_time = (new Date()).getTime();
Packit f0b94e
Packit f0b94e
    var f = function() {
Packit f0b94e
      for (var j=0; j
Packit f0b94e
        eval("Math.log(Math.atan(Math.sqrt(Math.pow(3.1415, 13.1415))/0.0007))");
Packit f0b94e
      if (f.i < 10) {
Packit f0b94e
        f.i++;
Packit f0b94e
        setTimeout(f, 10 + 10*f.i);
Packit f0b94e
      } else {
Packit f0b94e
        stress_factor = ((new Date()).getTime()-begin_time)*1/589;
Packit f0b94e
        stress_factor *= 1.50; // also, a margin of 50%
Packit f0b94e
Packit f0b94e
        runAllTests();
Packit f0b94e
      }
Packit f0b94e
    }
Packit f0b94e
    f.i = 0;
Packit f0b94e
Packit f0b94e
    setTimeout(f, 10);
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  SimpleTest.waitForExplicitFinish();
Packit f0b94e
  SimpleTest.requestFlakyTimeout("untriaged");
Packit f0b94e
  addLoadEvent(doTest);
Packit f0b94e
Packit f0b94e
</script>
Packit f0b94e
Packit f0b94e
  Wait please...
Packit f0b94e
</body>
Packit f0b94e
</html>
Packit f0b94e