Blame dom/base/test/test_bug715041_removal.xul

Packit f0b94e
Packit f0b94e
Packit f0b94e
Packit f0b94e
Packit f0b94e
https://bugzilla.mozilla.org/show_bug.cgi?id=715041
Packit f0b94e
-->
Packit f0b94e
    
Packit f0b94e
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
Packit f0b94e
    <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
Packit f0b94e
Packit f0b94e
    
Packit f0b94e
    <body xmlns="http://www.w3.org/1999/xhtml">
Packit f0b94e
    
Packit f0b94e
target="_blank">Mozilla Bug 715041
Packit f0b94e
    </body>
Packit f0b94e
Packit f0b94e
    
Packit f0b94e
    <script type="application/javascript">
Packit f0b94e
    
Packit f0b94e
Packit f0b94e
  /** Mock Idle Service Test for Bug 715041 **/
Packit f0b94e
  try {
Packit f0b94e
    var idleServiceCID = Components.ID("6f95d965-4322-4829-8a3c-5dc8a4587f4d");
Packit f0b94e
    var idleServiceContractID = "@mozilla.org/widget/idleservice;1";
Packit f0b94e
    var oldIdleService = Cc[idleServiceContractID].getService(Ci.nsIIdleService);
Packit f0b94e
  }
Packit f0b94e
  catch (ex) {
Packit f0b94e
    dump("test_bug715041_removal.xul: failed to get old idle service 1.");
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  //class mock javascript idle service
Packit f0b94e
  var idleServiceObj = {
Packit f0b94e
    observers: [],
Packit f0b94e
    windowObservers: [],
Packit f0b94e
    idleTimeInMS: 5000,   //in milli seconds
Packit f0b94e
Packit f0b94e
    // takes note of the idle observers added as the minimum idle observer
Packit f0b94e
    //with the idle service
Packit f0b94e
    timesAdded: [],
Packit f0b94e
Packit f0b94e
    QueryInterface: function(iid) {
Packit f0b94e
      if (iid.equals(Ci.nsISupports) ||
Packit f0b94e
          iid.equals(Ci.nsIFactory) ||
Packit f0b94e
          iid.equals(Ci.nsIIdleService)) {
Packit f0b94e
        return this;
Packit f0b94e
      }
Packit f0b94e
      throw Cr.NS_ERROR_NO_INTERFACE;
Packit f0b94e
    },
Packit f0b94e
Packit f0b94e
    createInstance: function(outer, iid) {
Packit f0b94e
      return this.QueryInterface(iid);
Packit f0b94e
    },
Packit f0b94e
Packit f0b94e
    get idleTime() {
Packit f0b94e
      return this.idleTimeInMS; //in milli seconds
Packit f0b94e
    },
Packit f0b94e
Packit f0b94e
    set idleTime(timeInMS) {
Packit f0b94e
      this.idleTimeInMS = timeInMS;
Packit f0b94e
    },
Packit f0b94e
Packit f0b94e
    getWindowFromObserver: function(observer) {
Packit f0b94e
      try {
Packit f0b94e
        var interfaceRequestor = observer.QueryInterface(Ci.nsIInterfaceRequestor);
Packit f0b94e
        var window = interfaceRequestor.getInterface(Ci.nsIDOMWindow);
Packit f0b94e
        return window;
Packit f0b94e
      }
Packit f0b94e
      catch (e) {}
Packit f0b94e
Packit f0b94e
      return null;
Packit f0b94e
    },
Packit f0b94e
Packit f0b94e
    testIdleBackService: function(observer, topic) {
Packit f0b94e
      dump("\nJS FAKE IDLE SERVICE\n");
Packit f0b94e
      dump("JS NUM OBSERVERS: " + this.observers.length + "\n");
Packit f0b94e
Packit f0b94e
      if (this.observers.length > 1) {
Packit f0b94e
        this.observers[1].observer.observe(observer, topic, '\0');
Packit f0b94e
        dump("JS CALLED OBSERVE FUNCTION!!!\n\n");
Packit f0b94e
      }
Packit f0b94e
    },
Packit f0b94e
Packit f0b94e
    addIdleObserver: function(observer, time) {
Packit f0b94e
      dump("\nJS FAKE IDLE SERVICE add idle observer before\n");
Packit f0b94e
      dump("JS NUM OBSERVERS: " + this.observers.length + "\n");
Packit f0b94e
      var window = this.getWindowFromObserver(observer);
Packit f0b94e
Packit f0b94e
      if (window) {
Packit f0b94e
        this.observers.push({ observer: observer, time: time, });
Packit f0b94e
        addedIdleObserver = true;
Packit f0b94e
        numIdleObserversAdded++;
Packit f0b94e
        this.timesAdded.push(time);
Packit f0b94e
        dump ("\nMOCK IDLE SERVICE ADDING idle observer with time: " + time + "\n");
Packit f0b94e
        dump("MOCK IDLE SERVICE: num idle observers added: " + numIdleObserversAdded + "\n\n");
Packit f0b94e
      }
Packit f0b94e
      else {
Packit f0b94e
        dump("SHOULD NEVER GET HERE!");
Packit f0b94e
        oldIdleService.addIdleObserver(observer, time);
Packit f0b94e
        addedIdleObserver = false;
Packit f0b94e
      }
Packit f0b94e
Packit f0b94e
      dump("\nJS FAKE IDLE SERVICE end of add idle observer\n");
Packit f0b94e
      dump("JS NUM OBSERVERS: " + this.observers.length + "\n");
Packit f0b94e
    },
Packit f0b94e
Packit f0b94e
    removeIdleObserver: function(observer, time) {
Packit f0b94e
      dump("\nJS REMOVE IDLE OBSERVER () time to be removed: " + time + "\n");
Packit f0b94e
      var window = this.getWindowFromObserver(observer);
Packit f0b94e
      if (!window) {
Packit f0b94e
        oldIdleService.removeIdleObserver(observer, time);
Packit f0b94e
      }
Packit f0b94e
      else {
Packit f0b94e
        var observerIndex = -1;
Packit f0b94e
        for (var i=0; i
Packit f0b94e
          dump("JS removeIdleObserver() observer time: " + this.observers[i].time + "\n");
Packit f0b94e
          if (this.observers[i].time === time) {
Packit f0b94e
              observerIndex = i;
Packit f0b94e
              break;
Packit f0b94e
          }
Packit f0b94e
         }
Packit f0b94e
Packit f0b94e
        if (observerIndex != -1 && this.observers.length > 0) {
Packit f0b94e
          numIdleObserversRemoved++;
Packit f0b94e
          this.observers.splice(observerIndex, 1);
Packit f0b94e
          removedIdleObserver = true;
Packit f0b94e
          dump("MOCK IDLE SERVICE REMOVING idle observer with time " + time + "\n");
Packit f0b94e
          dump("MOCK IDLE SERVICE numIdleObserversRemoved: " + numIdleObserversRemoved + " numIdleObserversAdded: " + numIdleObserversAdded + "\n\n");
Packit f0b94e
        }
Packit f0b94e
        else {
Packit f0b94e
          removedIdleObserver = false;
Packit f0b94e
        }
Packit f0b94e
      }
Packit f0b94e
      dump("\nJS FAKE IDLE SERVICE end of remove idle observer\n");
Packit f0b94e
      dump("JS NUM OBSERVERS: " + this.observers.length + "\n");
Packit f0b94e
    },
Packit f0b94e
  };
Packit f0b94e
Packit f0b94e
  /** Test for Bug 715041 **/
Packit f0b94e
  dump("\n\n\nJS STARTING TESTING FOR BUG 715041 REMOVAL\n");
Packit f0b94e
Packit f0b94e
  //bool variables
Packit f0b94e
  var addedIdleObserver = removedIdleObserver = passed = cleanUp = false;
Packit f0b94e
Packit f0b94e
  //msgXCount
Packit f0b94e
  var msg0Count = msg1Count = msg2Count = msg3Count = msg4Count = msg5Count =
Packit f0b94e
      msg6Count = tcZero = currTestCaseNum = prevMsgNum = 0;
Packit f0b94e
Packit f0b94e
  //test case number
Packit f0b94e
  var tcRemoveHeadIdleObserverWhileActive = 0;
Packit f0b94e
  var tcRemoveLocalIdleObserverWhileIdle = 1;
Packit f0b94e
  var tcRemoveHeadIdleObserver = 2;
Packit f0b94e
  var tcRemoveLocalIdleTimerWhileIdle = 3;
Packit f0b94e
  var tcRemoveLocalIdleTimerLastElement = 4;
Packit f0b94e
  var tcRemoveHeadAfterLastLocalFired = 5;
Packit f0b94e
  var tcRemoveHeadIdleObserverWhileIdleCase1 = 6;
Packit f0b94e
  var tcRemoveLastAddLast = 7;
Packit f0b94e
Packit f0b94e
  function ResetMsgCounts() {
Packit f0b94e
    msg0Count = msg1Count = msg2Count = msg3Count = msg4Count = msg5Count =
Packit f0b94e
    msg6Count = prevMsgNum = 0;
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function ResetVars() {
Packit f0b94e
    msg0Count = msg1Count = msg2Count = msg3Count = msg4Count = msg5Count =
Packit f0b94e
    msg6Count = prevMsgNum = 0;
Packit f0b94e
Packit f0b94e
    numIdleObserversAdded = numIdleObserversRemoved = 0;
Packit f0b94e
    currTestCaseNum = -1;
Packit f0b94e
    addedIdleObserver = removedIdleObserver = passed = cleanUp = false;
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function printVariableValues()
Packit f0b94e
  {
Packit f0b94e
    dump("\nfunction printVariableValues()\ncurrTestCaseNum: " + currTestCaseNum +
Packit f0b94e
          "\ncleanUp: " + cleanUp +
Packit f0b94e
          "\npassed: " + passed +
Packit f0b94e
          "\nnumIdleObserversRemoved: " + numIdleObserversRemoved +
Packit f0b94e
          "\nnumIdleObservesAdded: " + numIdleObserversAdded +
Packit f0b94e
          "\nmsg1Count " + msg1Count +
Packit f0b94e
          "\nmsg2Count " + msg2Count +
Packit f0b94e
          "\nmsg3Count " + msg3Count +
Packit f0b94e
          "\nmsg4Count " + msg4Count +
Packit f0b94e
          "\nmsg5Count " + msg5Count +
Packit f0b94e
          "\n");
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  //Place Holder.
Packit f0b94e
  var idleHandler0 = function() { dump("msg 0, should never be used!\n"); };
Packit f0b94e
Packit f0b94e
  //idleHandler1
Packit f0b94e
  function idleHandler1() {
Packit f0b94e
    msg1Count++;
Packit f0b94e
    dump("msg 1 Count: " + msg1Count + "\n");
Packit f0b94e
Packit f0b94e
    switch (currTestCaseNum) {
Packit f0b94e
    case tcRemoveHeadIdleObserver:
Packit f0b94e
      if (msg1Count === 1 && !msg2Count && !msg3Count && !msg4Count && !msg5Count) {
Packit f0b94e
        window.navigator.removeIdleObserver(idleObserversArray[1]);
Packit f0b94e
      }
Packit f0b94e
      break;
Packit f0b94e
    case tcRemoveLocalIdleObserverWhileIdle:
Packit f0b94e
      if (msg1Count === 1 && !msg2Count && !msg3Count && !msg4Count) {
Packit f0b94e
        window.navigator.removeIdleObserver(idleObserversArray[2]);
Packit f0b94e
      }
Packit f0b94e
      break;
Packit f0b94e
    case tcRemoveLocalIdleTimerWhileIdle:
Packit f0b94e
      if (msg1Count === 1 && !msg2Count && !msg3Count && !msg4Count) {
Packit f0b94e
        idleServiceObj.idleTime = 2000;
Packit f0b94e
        window.navigator.removeIdleObserver(idleObserversArray[3]);
Packit f0b94e
      }
Packit f0b94e
      break;
Packit f0b94e
    case tcRemoveHeadIdleObserverWhileIdleCase1:
Packit f0b94e
      if (msg1Count === 1 && !msg2Count && !msg3Count && !msg4Count) {
Packit f0b94e
        for (var i=1; i<4; i++) {
Packit f0b94e
          window.navigator.addIdleObserver(idleObserversArray[i]);
Packit f0b94e
        }
Packit f0b94e
        window.navigator.addIdleObserver(idleObserversArray[2]);
Packit f0b94e
        window.navigator.addIdleObserver(idleObserversArray[3]);
Packit f0b94e
Packit f0b94e
        idleServiceObj.idleTime = 1200;
Packit f0b94e
        window.navigator.removeIdleObserver(idleObserversArray[1]);
Packit f0b94e
      }
Packit f0b94e
      break;
Packit f0b94e
    case tcRemoveLocalIdleTimerLastElement:
Packit f0b94e
      if (msg1Count === 1 && !msg2Count && !msg3Count && !msg4Count && !msg5Count) {
Packit f0b94e
        idleServiceObj.idleTime = 1500;
Packit f0b94e
        window.navigator.removeIdleObserver(idleObserversArray[1]);
Packit f0b94e
        idleServiceObj.idleTime = 1700;
Packit f0b94e
        window.navigator.addIdleObserver(idleObserversArray[2]);
Packit f0b94e
        idleServiceObj.idleTime = 2000;
Packit f0b94e
        idleServiceObj.testIdleBackService(idleObserversArray[2], "idle");
Packit f0b94e
      }
Packit f0b94e
      break;
Packit f0b94e
    case tcRemoveHeadAfterLastLocalFired:
Packit f0b94e
      if (msg1Count === 1 && !msg2Count && !msg3Count && !msg4Count && !msg5Count) {
Packit f0b94e
        dump("idle handler 1:     case tcRemoveHeadAfterLastLocalFired:\n");
Packit f0b94e
        window.navigator.addIdleObserver(idleObserversArray[2]);
Packit f0b94e
        window.navigator.addIdleObserver(idleObserversArray[3]);
Packit f0b94e
        window.navigator.addIdleObserver(idleObserversArray[4]);
Packit f0b94e
      }
Packit f0b94e
      break;
Packit f0b94e
    case tcRemoveLastAddLast:
Packit f0b94e
      window.navigator.addIdleObserver(idleObserversArray[2]);
Packit f0b94e
      window.navigator.addIdleObserver(idleObserversArray[3]);
Packit f0b94e
      break;
Packit f0b94e
    default:
Packit f0b94e
      break;
Packit f0b94e
    }
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  //idleHandler2
Packit f0b94e
  function idleHandler2() {
Packit f0b94e
    msg2Count++;
Packit f0b94e
    dump("msg 2 Count: " + msg2Count + "\n");
Packit f0b94e
Packit f0b94e
    switch (currTestCaseNum) {
Packit f0b94e
    case tcRemoveLocalIdleTimerLastElement:
Packit f0b94e
      if (msg1Count === 1 && msg2Count === 1 && !msg3Count && !msg4Count) {
Packit f0b94e
        window.navigator.addIdleObserver(idleObserversArray[3]);
Packit f0b94e
        window.navigator.addIdleObserver(idleObserversArray[4]);
Packit f0b94e
        window.navigator.removeIdleObserver(idleObserversArray[3]);
Packit f0b94e
      }
Packit f0b94e
      break;
Packit f0b94e
    default:
Packit f0b94e
      //do nothing.
Packit f0b94e
      break;
Packit f0b94e
    }
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  //idleHandler3
Packit f0b94e
  function idleHandler3() {
Packit f0b94e
    msg3Count++;
Packit f0b94e
    dump("msg 3 Count: " + msg3Count + "\n");
Packit f0b94e
    passed = false;
Packit f0b94e
    switch (currTestCaseNum) {
Packit f0b94e
    case tcRemoveHeadIdleObserverWhileActive:
Packit f0b94e
      if (!msg1Count && msg2Count === 1 && msg3Count === 1) {
Packit f0b94e
        passed = true;
Packit f0b94e
      }
Packit f0b94e
      dump("idleHandler3: passed: " + passed + "\n");
Packit f0b94e
      RemoveHeadIdleObserverWhileActiveCleanUp();
Packit f0b94e
      break;
Packit f0b94e
    case tcRemoveHeadIdleObserverWhileIdleCase1:
Packit f0b94e
      if (msg3Count != 2 && msg3Count != 4) {
Packit f0b94e
        return;
Packit f0b94e
      }
Packit f0b94e
Packit f0b94e
      if (msg1Count === 2 && msg2Count === 2 && msg3Count === 2 && !msg4Count) {
Packit f0b94e
        passed = true;
Packit f0b94e
        ok(passed, "Failed test case remove head idle observer while idle case 1, part 1.\n");
Packit f0b94e
        idleServiceObj.testIdleBackService(idleObserversArray[1], "active");
Packit f0b94e
        return;
Packit f0b94e
      }
Packit f0b94e
Packit f0b94e
      if (msg1Count === 3 && msg2Count === 4 && msg3Count === 4 &&
Packit f0b94e
        !msg4Count && !msg5Count) {
Packit f0b94e
        passed = true;
Packit f0b94e
      }
Packit f0b94e
      RemoveHeadIdleObserverWhileIdleCase1CleanUp();
Packit f0b94e
      break;
Packit f0b94e
    case tcRemoveLastAddLast:
Packit f0b94e
      if (msg1Count === 1 && msg2Count === 1 && msg3Count === 1
Packit f0b94e
          && !msg4Count && !msg5Count) {
Packit f0b94e
        idleServiceObj.idleTime = 3200;
Packit f0b94e
        window.navigator.removeIdleObserver(idleObserversArray[3]);
Packit f0b94e
        idleServiceObj.idleTime = 3500;
Packit f0b94e
        window.navigator.addIdleObserver(idleObserversArray[4]);
Packit f0b94e
        return;
Packit f0b94e
      }
Packit f0b94e
      break;
Packit f0b94e
    case tcRemoveHeadAfterLastLocalFired:
Packit f0b94e
      if (msg3Count === 1) {
Packit f0b94e
        return;
Packit f0b94e
      }
Packit f0b94e
Packit f0b94e
      if (msg1Count === 2 && msg2Count === 2 && msg3Count === 2 && msg4Count === 1) {
Packit f0b94e
        passed = true;
Packit f0b94e
      }
Packit f0b94e
      RemoveHeadAfterLastLocalFiredCleanUp();
Packit f0b94e
      break;
Packit f0b94e
    default:
Packit f0b94e
      break;
Packit f0b94e
    }
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  //idleHandler4
Packit f0b94e
  function idleHandler4() {
Packit f0b94e
    msg4Count++;
Packit f0b94e
    dump("msg 4 Count: " + msg4Count + "\n");
Packit f0b94e
Packit f0b94e
    switch (currTestCaseNum) {
Packit f0b94e
    case tcRemoveLocalIdleObserverWhileIdle:
Packit f0b94e
      if (msg1Count === 1 && !msg2Count && msg3Count === 1 && msg4Count === 1) {
Packit f0b94e
        passed = true;
Packit f0b94e
        RemoveLocalIdleObserverWhileIdleCleanUp();
Packit f0b94e
      }
Packit f0b94e
      break;
Packit f0b94e
    case tcRemoveHeadIdleObserver:
Packit f0b94e
      printVariableValues();
Packit f0b94e
      if (msg1Count === 1 && msg2Count === 1 && msg3Count === 1 && msg4Count === 1) {
Packit f0b94e
        passed = true;
Packit f0b94e
        RemoveHeadIdleObserverCleanUp();
Packit f0b94e
      }
Packit f0b94e
      break;
Packit f0b94e
    case tcRemoveLocalIdleTimerWhileIdle:
Packit f0b94e
      if (msg1Count === 1 && !msg2Count && !msg3Count && msg4Count === 1) {
Packit f0b94e
        passed = true;
Packit f0b94e
        RemoveLocalIdleTimerWhileIdleCleanUp();
Packit f0b94e
      }
Packit f0b94e
      break
Packit f0b94e
    case tcRemoveLocalIdleTimerLastElement:
Packit f0b94e
      if (msg1Count === 1 && msg2Count === 1 && !msg3Count && msg4Count === 1) {
Packit f0b94e
        passed = true;
Packit f0b94e
        ok(passed, "Failed test case remove local idle timer last element.\n");
Packit f0b94e
        RemoveLocalIdleTimerLastElementCleanUp();
Packit f0b94e
      }
Packit f0b94e
    break;
Packit f0b94e
    case tcRemoveHeadAfterLastLocalFired:
Packit f0b94e
      if (msg1Count === 1 && msg2Count === 1 && msg3Count === 1 && msg4Count === 1) {
Packit f0b94e
        window.navigator.removeIdleObserver(idleObserversArray[4]);
Packit f0b94e
        passed = true;
Packit f0b94e
        ok(passed, "Failed remove head after last local fired.\n");
Packit f0b94e
        idleServiceObj.testIdleBackService(idleObserversArray[1], "active");
Packit f0b94e
      }
Packit f0b94e
      break;
Packit f0b94e
    case tcRemoveLastAddLast:
Packit f0b94e
      if (msg1Count === 1 && msg2Count === 1 && msg3Count === 1 && msg4Count == 1) {
Packit f0b94e
        idleServiceObj.idleTime = 4100;
Packit f0b94e
        passed = true;
Packit f0b94e
        RemoveLastAddLastCleanUp();
Packit f0b94e
      }
Packit f0b94e
      break;
Packit f0b94e
    default:
Packit f0b94e
      //do nothing.
Packit f0b94e
      break;
Packit f0b94e
    }
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  //idleHandler5
Packit f0b94e
  function idleHandler5() {
Packit f0b94e
    msg5Count++;
Packit f0b94e
    dump("msg 5 Count: " + msg5Count + "\n");
Packit f0b94e
Packit f0b94e
    switch (currTestCaseNum) {
Packit f0b94e
Packit f0b94e
    default:
Packit f0b94e
      //do nothing.
Packit f0b94e
      break;
Packit f0b94e
    }
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  //idleHandler6
Packit f0b94e
  function idleHandler6() {
Packit f0b94e
    dump("msg 6 Count: " + msg6Count + "\n");
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  var  idleObserversArray = [];
Packit f0b94e
  idleObserversArray[0] = {time: 0, onidle: idleHandler0, onactive: idleHandler0};
Packit f0b94e
  idleObserversArray[1] = {time: 1, onidle: idleHandler1, onactive: idleHandler1};
Packit f0b94e
  idleObserversArray[2] = {time: 2, onidle: idleHandler2, onactive: idleHandler2};
Packit f0b94e
  idleObserversArray[3] = {time: 3, onidle: idleHandler3, onactive: idleHandler3};
Packit f0b94e
  idleObserversArray[4] = {time: 4, onidle: idleHandler4, onactive: idleHandler4};
Packit f0b94e
  idleObserversArray[5] = {time: 5, onidle: idleHandler5, onactive: idleHandler5};
Packit f0b94e
  idleObserversArray[6] = {time: 0, onidle: idleHandler6, onactive: idleHandler6};
Packit f0b94e
Packit f0b94e
  //observers array space holder at index zero
Packit f0b94e
  idleServiceObj.observers.push( {observer: idleObserversArray[0], time: 0, } );
Packit f0b94e
Packit f0b94e
    /*
Packit f0b94e
  * - function RemoveHeadIdleObserverWhileActive1()
Packit f0b94e
  * - Remove head idle observer before the head idle notification is fired by the
Packit f0b94e
  *   idle service. I.e. remove the head idle observer while the user is active.
Packit f0b94e
  * - RESULT: prints 2 in 2ms, 3
Packit f0b94e
  */
Packit f0b94e
  function RemoveHeadIdleObserverWhileActive() {
Packit f0b94e
    dump("\n\nTESTING CASE RemoveHeadIdleObserverWhileActive\n");
Packit f0b94e
    dump("=================================\n");
Packit f0b94e
Packit f0b94e
    ResetVars();
Packit f0b94e
    currTestCaseNum = tcRemoveHeadIdleObserverWhileActive;
Packit f0b94e
    idleServiceObj.idleTime = 500;
Packit f0b94e
Packit f0b94e
    window.navigator.addIdleObserver(idleObserversArray[1]);
Packit f0b94e
    dump("test_bug715041_removal.xul: RemoveHeadIdleObserverWhileActive() idle time " + idleServiceObj.idleTime + "\n");
Packit f0b94e
    window.navigator.addIdleObserver(idleObserversArray[2]);
Packit f0b94e
    window.navigator.addIdleObserver(idleObserversArray[3]);
Packit f0b94e
Packit f0b94e
    idleServiceObj.idleTime = 800;
Packit f0b94e
    window.navigator.removeIdleObserver(idleObserversArray[1]);
Packit f0b94e
Packit f0b94e
    idleServiceObj.idleTime = 1000;
Packit f0b94e
    idleServiceObj.testIdleBackService(idleObserversArray[2], "idle");
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function RemoveHeadIdleObserverWhileActiveCleanUp() {
Packit f0b94e
    dump("\nRemoveHeadIdleObserverWhileActiveCleanUp()\n");
Packit f0b94e
    dump("=====================================\n");
Packit f0b94e
Packit f0b94e
    dump("Passed: " + passed + "\n");
Packit f0b94e
    ok(passed, "Failed test case: RemoveHeadIdleObserverWhileActive");
Packit f0b94e
Packit f0b94e
    ResetVars();
Packit f0b94e
    currTestCaseNum = tcRemoveHeadIdleObserverWhileActive;
Packit f0b94e
    idleServiceObj.idleTime = 3500;
Packit f0b94e
Packit f0b94e
    for (var i=2; i<4; i++) {
Packit f0b94e
      window.navigator.removeIdleObserver(idleObserversArray[i]);
Packit f0b94e
    }
Packit f0b94e
Packit f0b94e
    dump("JS RemoveHeadIdleObserverWhileActiveCleanUp() DONE\n");
Packit f0b94e
    if (RemoveLocalIdleObserverWhileIdleEnabled) {
Packit f0b94e
        RemoveLocalIdleObserverWhileIdle();
Packit f0b94e
    }
Packit f0b94e
    else {
Packit f0b94e
      dump("Finishing testing idle API.\n");
Packit f0b94e
      SimpleTest.finish();
Packit f0b94e
    }
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  /*
Packit f0b94e
  * function RemoveLocalIdleObserverWhileIdle()
Packit f0b94e
  * Remove local observer before the local oberver at index 1 is triggered while
Packit f0b94e
  * the user is idle.
Packit f0b94e
  * RESULT: should print 1, 3, 4
Packit f0b94e
  */
Packit f0b94e
  function RemoveLocalIdleObserverWhileIdle() {
Packit f0b94e
    dump("\n\nTESTING CASE RemoveLocalIdleObserverWhileIdle\n");
Packit f0b94e
    dump("=================================\n");
Packit f0b94e
Packit f0b94e
    ResetVars();
Packit f0b94e
    currTestCaseNum = tcRemoveLocalIdleObserverWhileIdle;
Packit f0b94e
    idleServiceObj.idleTime = 500;
Packit f0b94e
Packit f0b94e
    window.navigator.addIdleObserver(idleObserversArray[1]);
Packit f0b94e
    window.navigator.addIdleObserver(idleObserversArray[2]);
Packit f0b94e
    window.navigator.addIdleObserver(idleObserversArray[3]);
Packit f0b94e
    window.navigator.addIdleObserver(idleObserversArray[4]);
Packit f0b94e
Packit f0b94e
    idleServiceObj.idleTime = 1000;
Packit f0b94e
    idleServiceObj.testIdleBackService(idleObserversArray[1], "idle");
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function RemoveLocalIdleObserverWhileIdleCleanUp()  {
Packit f0b94e
    dump("\nRemoveLocalIdleObserverWhileIdleCleanUp()\n");
Packit f0b94e
    dump("=====================================\n");
Packit f0b94e
Packit f0b94e
    ok(passed, "Failed test case: RemoveLocalIdleObserverWhileIdleCleanUp()");
Packit f0b94e
Packit f0b94e
    ResetVars();
Packit f0b94e
    currTestCaseNum = tcRemoveHeadIdleObserverWhileActive;
Packit f0b94e
    idleServiceObj.idleTime = 3500;
Packit f0b94e
Packit f0b94e
    window.navigator.removeIdleObserver(idleObserversArray[1]);
Packit f0b94e
    window.navigator.removeIdleObserver(idleObserversArray[3]);
Packit f0b94e
    window.navigator.removeIdleObserver(idleObserversArray[4]);
Packit f0b94e
Packit f0b94e
    dump("JS RemoveLocalIdleObserverWhileIdleCleanUp() DONE\n");
Packit f0b94e
    if (RemoveHeadIdleObserverEnabled) {
Packit f0b94e
      RemoveHeadIdleObserver();
Packit f0b94e
    }
Packit f0b94e
    else {
Packit f0b94e
      dump("Finishing testing idle API.\n");
Packit f0b94e
      SimpleTest.finish();
Packit f0b94e
    }
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
Packit f0b94e
  /*
Packit f0b94e
   * function RemoveHeadIdleObserver()
Packit f0b94e
   * Remove head idle observer while the user has been idle for 2400 ms.
Packit f0b94e
   * - RESULT: prints 1, 2, remove 2, 3, 4
Packit f0b94e
   */
Packit f0b94e
  function RemoveHeadIdleObserver() {
Packit f0b94e
    dump("\n\nTESTING CASE RemoveHeadIdleObserver\n");
Packit f0b94e
    dump("=================================\n");
Packit f0b94e
Packit f0b94e
    ResetVars();
Packit f0b94e
    currTestCaseNum = tcRemoveHeadIdleObserver;
Packit f0b94e
    idleServiceObj.idleTime = 500;
Packit f0b94e
Packit f0b94e
    window.navigator.addIdleObserver(idleObserversArray[1]);
Packit f0b94e
    window.navigator.addIdleObserver(idleObserversArray[2]);
Packit f0b94e
    window.navigator.addIdleObserver(idleObserversArray[3]);
Packit f0b94e
    window.navigator.addIdleObserver(idleObserversArray[4]);
Packit f0b94e
Packit f0b94e
    idleServiceObj.idleTime = 1000;
Packit f0b94e
    idleServiceObj.testIdleBackService(idleObserversArray[1], "idle");
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function RemoveHeadIdleObserverCleanUp()  {
Packit f0b94e
    dump("\nRemoveHeadIdleObserverCleanUp()\n");
Packit f0b94e
    dump("=====================================\n");
Packit f0b94e
Packit f0b94e
    ok(passed, "Failed test case: RemoveHeadIdleObserverCleanUp()");
Packit f0b94e
Packit f0b94e
    ResetVars();
Packit f0b94e
    currTestCaseNum = tcRemoveHeadIdleObserver;
Packit f0b94e
    idleServiceObj.idleTime = 3500;
Packit f0b94e
Packit f0b94e
    for (var i=2; i<5; i++) {
Packit f0b94e
      window.navigator.removeIdleObserver(idleObserversArray[i]);
Packit f0b94e
    }
Packit f0b94e
Packit f0b94e
    dump("JS RemoveHeadIdleObserverCleanUp() DONE\n");
Packit f0b94e
    if (RemoveLocalIdleTimerWhileIdleEnabled) {
Packit f0b94e
      RemoveLocalIdleTimerWhileIdle();
Packit f0b94e
    }
Packit f0b94e
    else {
Packit f0b94e
      dump("Finishing testing idle API.\n");
Packit f0b94e
      SimpleTest.finish();
Packit f0b94e
    }
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  /*
Packit f0b94e
   * RemoveLocalIdleTimerWhileIdle()
Packit f0b94e
   * - Removes the idle observer that is also set as the current local idle timer callback
Packit f0b94e
   *   local idle observer being removed is NOT at index 1!
Packit f0b94e
   * - RESULT: should trigger 1 in 1ms and 4 in 4ms
Packit f0b94e
   */
Packit f0b94e
  function RemoveLocalIdleTimerWhileIdle()
Packit f0b94e
  {
Packit f0b94e
    dump("\n\nTESTING CASE RemoveLocalIdleTimerWhileIdle\n");
Packit f0b94e
    dump("=================================\n");
Packit f0b94e
Packit f0b94e
    ResetVars();
Packit f0b94e
    currTestCaseNum = tcRemoveLocalIdleTimerWhileIdle;
Packit f0b94e
    idleServiceObj.idleTime = 500;
Packit f0b94e
Packit f0b94e
    window.navigator.addIdleObserver(idleObserversArray[1]);
Packit f0b94e
    window.navigator.addIdleObserver(idleObserversArray[3]);
Packit f0b94e
    window.navigator.addIdleObserver(idleObserversArray[4]);
Packit f0b94e
Packit f0b94e
    idleServiceObj.idleTime = 1000;
Packit f0b94e
    idleServiceObj.testIdleBackService(idleObserversArray[1], "idle");
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function RemoveLocalIdleTimerWhileIdleCleanUp()
Packit f0b94e
  {
Packit f0b94e
    dump("\nRemoveLocalIdleTimerWhileIdleCleanUp()\n");
Packit f0b94e
    dump("=====================================\n");
Packit f0b94e
Packit f0b94e
    ok(passed, "Failed test case: RemoveLocalIdleTimerWhileIdleCleanUp()");
Packit f0b94e
Packit f0b94e
    ResetVars();
Packit f0b94e
    currTestCaseNum = tcRemoveLocalIdleTimerWhileIdle;
Packit f0b94e
Packit f0b94e
    window.navigator.removeIdleObserver(idleObserversArray[1]);
Packit f0b94e
    window.navigator.removeIdleObserver(idleObserversArray[4]);
Packit f0b94e
Packit f0b94e
    dump("JS RemoveLocalIdleTimerWhileIdleCleanUp() DONE\n");
Packit f0b94e
    if (RemoveLocalIdleTimerLastElementEnabled) {
Packit f0b94e
        RemoveLocalIdleTimerLastElement();
Packit f0b94e
    }
Packit f0b94e
    else {
Packit f0b94e
      dump("Finishing testing idle API.\n");
Packit f0b94e
      SimpleTest.finish();
Packit f0b94e
    }
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  /*
Packit f0b94e
   * function RemoveLocalIdleTimerLastElement()
Packit f0b94e
   */
Packit f0b94e
  function RemoveLocalIdleTimerLastElement()
Packit f0b94e
  {
Packit f0b94e
    dump("\n\nTESTING CASE RemoveLocalIdleTimerLastElement\n");
Packit f0b94e
    dump("=================================\n");
Packit f0b94e
Packit f0b94e
    ResetVars();
Packit f0b94e
    currTestCaseNum = tcRemoveLocalIdleTimerLastElement;
Packit f0b94e
    idleServiceObj.idleTime = 1200;
Packit f0b94e
Packit f0b94e
    window.navigator.addIdleObserver(idleObserversArray[1]);
Packit f0b94e
    idleServiceObj.testIdleBackService(idleObserversArray[1], "idle");
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function RemoveLocalIdleTimerLastElementCleanUp() {
Packit f0b94e
    dump("\nRemoveLocalIdleTimerLastElementCleanUp()\n");
Packit f0b94e
    dump("=====================================\n");
Packit f0b94e
Packit f0b94e
    ok(passed, "Failed test case: RemoveLocalIdleTimerLastElementCleanUp()");
Packit f0b94e
Packit f0b94e
    ResetVars();
Packit f0b94e
    currTestCaseNum = tcRemoveLocalIdleTimerLastElement;
Packit f0b94e
    window.navigator.removeIdleObserver(idleObserversArray[2]);
Packit f0b94e
    window.navigator.removeIdleObserver(idleObserversArray[4]);
Packit f0b94e
Packit f0b94e
    dump("JS RemoveLocalIdleTimerLastElementCleanUp() DONE\n");
Packit f0b94e
    if (RemoveHeadAfterLastLocalFiredEnabled) {
Packit f0b94e
      RemoveHeadAfterLastLocalFired();
Packit f0b94e
    }
Packit f0b94e
    else {
Packit f0b94e
      dump("Finishing testing idle API.\n");
Packit f0b94e
      SimpleTest.finish();
Packit f0b94e
    }
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  /*
Packit f0b94e
   - Remove the head after the last local idle timer has been fired
Packit f0b94e
   - add 1 2 3 4
Packit f0b94e
   - after 4 has been notified, removed idle observer with time 4
Packit f0b94e
   - send a back topic
Packit f0b94e
   - message notification should be 1, 2, 3.
Packit f0b94e
  */
Packit f0b94e
  function RemoveHeadAfterLastLocalFired()
Packit f0b94e
  {
Packit f0b94e
    dump("\n\nTESTING CASE RemoveHeadAfterLastLocalFired\n");
Packit f0b94e
    dump("=================================\n");
Packit f0b94e
Packit f0b94e
    ResetVars();
Packit f0b94e
    currTestCaseNum = tcRemoveHeadAfterLastLocalFired;
Packit f0b94e
    idleServiceObj.idleTime = 1200;
Packit f0b94e
Packit f0b94e
    window.navigator.addIdleObserver(idleObserversArray[1]);
Packit f0b94e
    idleServiceObj.testIdleBackService(idleObserversArray[1], "idle");
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function RemoveHeadAfterLastLocalFiredCleanUp() {
Packit f0b94e
    dump("\RemoveHeadAfterLastLocalFiredCleanUp()\n");
Packit f0b94e
    dump("=====================================\n");
Packit f0b94e
Packit f0b94e
    ok(passed, "Failed test case: RemoveHeadAfterLastLocalFiredCleanUp()");
Packit f0b94e
Packit f0b94e
    ResetVars();
Packit f0b94e
    currTestCaseNum = tcRemoveHeadAfterLastLocalFired;
Packit f0b94e
Packit f0b94e
    window.navigator.removeIdleObserver(idleObserversArray[1]);
Packit f0b94e
    window.navigator.removeIdleObserver(idleObserversArray[2]);
Packit f0b94e
    window.navigator.removeIdleObserver(idleObserversArray[3]);
Packit f0b94e
Packit f0b94e
    dump("JS RemoveHeadAfterLastLocalFiredCleanUp() DONE\n");
Packit f0b94e
    if (RemoveHeadIdleObserverWhileIdleCase1Enabled) {
Packit f0b94e
      RemoveHeadIdleObserverWhileIdleCase1();
Packit f0b94e
    }
Packit f0b94e
    else {
Packit f0b94e
      dump("Finishing testing idle API.\n");
Packit f0b94e
      SimpleTest.finish();
Packit f0b94e
    }
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function RemoveHeadIdleObserverWhileIdleCase1() {
Packit f0b94e
    dump("\n\nTESTING CASE RemoveHeadIdleObserverWhileIdleCase1\n");
Packit f0b94e
    dump("=================================\n");
Packit f0b94e
Packit f0b94e
    ResetVars();
Packit f0b94e
    currTestCaseNum = tcRemoveHeadIdleObserverWhileIdleCase1;
Packit f0b94e
    idleServiceObj.idleTime = 1000;
Packit f0b94e
    window.navigator.addIdleObserver(idleObserversArray[1]);
Packit f0b94e
    idleServiceObj.testIdleBackService(idleObserversArray[1], "idle");
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function RemoveHeadIdleObserverWhileIdleCase1CleanUp() {
Packit f0b94e
    dump("\nRemoveHeadIdleObserverWhileIdleCase1CleanUp()\n");
Packit f0b94e
    dump("=====================================\n");
Packit f0b94e
Packit f0b94e
    ok(passed, "Failed test case: RemoveHeadIdleObserverWhileIdleCase1CleanUp()");
Packit f0b94e
Packit f0b94e
    ResetVars();
Packit f0b94e
    currTestCaseNum = tcRemoveHeadIdleObserverWhileIdleCase1;
Packit f0b94e
Packit f0b94e
    for (var i=1; i<4; i++) {
Packit f0b94e
      window.navigator.removeIdleObserver(idleObserversArray[i]);
Packit f0b94e
    }
Packit f0b94e
Packit f0b94e
    window.navigator.removeIdleObserver(idleObserversArray[2]);
Packit f0b94e
    window.navigator.removeIdleObserver(idleObserversArray[3]);
Packit f0b94e
Packit f0b94e
    dump("JS RemoveHeadIdleObserverWhileIdleCase1CleanUp() DONE\n");
Packit f0b94e
    if (RemoveLastAddLastEnabled) {
Packit f0b94e
      RemoveLastAddLast();
Packit f0b94e
    }
Packit f0b94e
    else {
Packit f0b94e
      dump("Finishing testing idle API.\n");
Packit f0b94e
      SimpleTest.finish();
Packit f0b94e
    }
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  /*
Packit f0b94e
   * - RemoveLastAddLast()
Packit f0b94e
   *
Packit f0b94e
   * - User is currently idle.
Packit f0b94e
   * - Add callback 1, 2, 3,
Packit f0b94e
   * - Remove callback 3 after 3200 MS. I.e. after callback 3 has been notified.
Packit f0b94e
   * - Add callback 4 after 3500 MS
Packit f0b94e
   * - Output: 1, 2, 3, 4
Packit f0b94e
   */
Packit f0b94e
  function RemoveLastAddLast()
Packit f0b94e
  {
Packit f0b94e
    dump("\n\nTESTING CASE RemoveLastAddLast()\n");
Packit f0b94e
    dump("=================================\n");
Packit f0b94e
Packit f0b94e
    ResetVars();
Packit f0b94e
    currTestCaseNum = tcRemoveLastAddLast;
Packit f0b94e
    idleServiceObj.idleTime = 1000;
Packit f0b94e
    window.navigator.addIdleObserver(idleObserversArray[1]);
Packit f0b94e
    idleServiceObj.testIdleBackService(idleObserversArray[1], "idle");
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  function RemoveLastAddLastCleanUp()
Packit f0b94e
  {
Packit f0b94e
    dump("\RemoveLastAddLastCleanUp()\n");
Packit f0b94e
    dump("=====================================\n");
Packit f0b94e
Packit f0b94e
    ok(passed, "Failed test case: RemoveLastAddLastCleanUp()");
Packit f0b94e
Packit f0b94e
    ResetVars();
Packit f0b94e
    currTestCaseNum = tcRemoveLastAddLast;
Packit f0b94e
Packit f0b94e
    window.navigator.removeIdleObserver(idleObserversArray[1]);
Packit f0b94e
    window.navigator.removeIdleObserver(idleObserversArray[2]);
Packit f0b94e
    window.navigator.removeIdleObserver(idleObserversArray[4]);
Packit f0b94e
Packit f0b94e
    if (numIdleObserversRemoved === 1 && !numIdleObserversAdded) {
Packit f0b94e
      ok(true, "Failed test case: RemoveLastAddLastCleanUp()");
Packit f0b94e
    }
Packit f0b94e
    else {
Packit f0b94e
      ok(false, "Failed test case: RemoveLastAddLastCleanUp()");
Packit f0b94e
    }
Packit f0b94e
Packit f0b94e
Packit f0b94e
    try {
Packit f0b94e
      componentMgr.unregisterFactory(idleServiceCID, idleServiceObj);
Packit f0b94e
    }
Packit f0b94e
    catch(err) {
Packit f0b94e
      dump("test_bug715041_removal.xul: RemoveLastAddLastCleanUp() Failed to unregister factory, mock idle service!\n");
Packit f0b94e
    }
Packit f0b94e
Packit f0b94e
    try {
Packit f0b94e
      componentMgr.registerFactory(oldIdleServiceCID, "Re registering old idle service", idleServiceContractID, oldIdleServiceFactoryObj);
Packit f0b94e
    }
Packit f0b94e
    catch(err) {
Packit f0b94e
      dump("test_bug715041_removal.xul: RemoveLastAddLastCleanUp() Failed to register factory, original idle service!\n");
Packit f0b94e
    }
Packit f0b94e
Packit f0b94e
    dump("JS RemoveLastAddLastCleanUp() DONE\n");
Packit f0b94e
    dump("Finishing testing idle API.\n");
Packit f0b94e
    SimpleTest.finish();
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
Packit f0b94e
  // Registering new moch JS idle service
Packit f0b94e
  SimpleTest.waitForExplicitFinish();
Packit f0b94e
  SimpleTest.requestLongerTimeout(10);
Packit f0b94e
Packit f0b94e
  try {
Packit f0b94e
    var idleServiceCID = Components.ID("0fdc1bbf-3868-4660-9855-0c2e376922bc");
Packit f0b94e
    var idleServiceContractID = "@mozilla.org/widget/idleservice;1";
Packit f0b94e
    var oldIdleService = Cc[idleServiceContractID].getService(Ci.nsIIdleService);
Packit f0b94e
  }
Packit f0b94e
  catch(ex) {
Packit f0b94e
    dump("test_bug715041_removal.xul: 1) Failed to get old idle service.\n");
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  try {
Packit f0b94e
    // Registering new moch JS idle service
Packit f0b94e
    var componentMgr = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
Packit f0b94e
  }
Packit f0b94e
  catch(err) {
Packit f0b94e
    dump("test_bug715041_removal.xul: Failed to query component registrar interface.\n");
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  try {
Packit f0b94e
    var oldIdleServiceFactoryObj = componentMgr.getClassObjectByContractID(idleServiceContractID, Ci.nsIFactory);
Packit f0b94e
  }
Packit f0b94e
  catch(err) {
Packit f0b94e
    dump("test_bug715041_removal.xul: Failed to get old idle service.\n");
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  try {
Packit f0b94e
    var oldIdleServiceCID = componentMgr.contractIDToCID(idleServiceContractID);
Packit f0b94e
  }
Packit f0b94e
  catch(err) {
Packit f0b94e
    dump("test_bug715041._removalxul: Failed to convert ID to CID for old idle service.\n");
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  try {
Packit f0b94e
    componentMgr.unregisterFactory(oldIdleServiceCID, oldIdleServiceFactoryObj);
Packit f0b94e
  }
Packit f0b94e
  catch(err) {
Packit f0b94e
    dump("test_bug715041_removal.xul: Failed to unregister old idle service factory object!\n");
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  try {
Packit f0b94e
    componentMgr.registerFactory(idleServiceCID, "Test Simple Idle/Back Notifications", idleServiceContractID, idleServiceObj);
Packit f0b94e
  }
Packit f0b94e
  catch(err) {
Packit f0b94e
    dump("test_bug715041_removal.xul: Failed to register mock idle service.\n");
Packit f0b94e
  }
Packit f0b94e
Packit f0b94e
  //test case enabled
Packit f0b94e
  var RemoveLocalIdleObserverWhileIdleEnabled = true;
Packit f0b94e
  var RemoveHeadIdleObserverEnabled = true;
Packit f0b94e
  var RemoveLocalIdleTimerWhileIdleEnabled = true;
Packit f0b94e
  var RemoveLocalIdleTimerLastElementEnabled = true;
Packit f0b94e
  var RemoveHeadAfterLastLocalFiredEnabled = true;
Packit f0b94e
  var RemoveHeadIdleObserverWhileIdleCase1Enabled = true;
Packit f0b94e
  var RemoveLastAddLastEnabled = true;
Packit f0b94e
  SpecialPowers.pushPrefEnv({"set":[['dom.idle-observers-api.fuzz_time.disabled', true]]}, RemoveHeadIdleObserverWhileActive);
Packit f0b94e
]]>
Packit f0b94e
    </script>
Packit f0b94e
    </window>
Packit f0b94e