view js/modules/xhr.js @ 100:c486d35fad27

added more mocks; black-box now talks to a really simple fake bugzilla 'server'.
author Atul Varma <avarma@mozilla.com>
date Tue, 27 Apr 2010 23:06:29 -0700
parents 0eab9a3ff12f
children
line wrap: on
line source

Require.modules["xhr/queue"] = function(exports, require) {
  function XMLHttpRequestQueue() {
    const EVENTS = ["abort", "error", "load"];

    var active = null;
    var queue = [];

    function activateNextInQueue() {
      if (queue.length) {
        var cb = queue.splice(0, 1)[0];
        var xhr = cb();
        if (!xhr)
          throw new Error("enqueued callback did not return xhr");
        EVENTS.forEach(function(name) {
          xhr.addEventListener(name, onDone, false);
        });
        active = xhr;
      }
    }

    function onDone(event) {
      var xhr = event.target;
      EVENTS.forEach(function(name) {
        xhr.removeEventListener(name, onDone, false);
      });
      if (xhr == active) {
        active = null;
        activateNextInQueue();
      }
    };

    this.enqueue = function enqueue(cb) {
      queue.push(cb);
      if (!active)
        activateNextInQueue();
    };

    this.clear = function clear() {
      queue.splice(0);
      if (active) {
        active.abort();
        active = null;
      }
    };
  }

  exports.create = function create() {
    return new XMLHttpRequestQueue();
  };
};