/* vim:set ts=2 sw=2 sts=2 et: */
/* ***** BEGIN LICENSE BLOCK *****
 * Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/
 *
 * Contributor(s):
 *  Mihai Șucan <mihai.sucan@gmail.com>
 *
 * ***** END LICENSE BLOCK ***** */

const TEST_URI = "http://example.com/browser/toolkit/components/console/hudservice/tests/browser/test-bug-603750-websocket.html";
const pref_ws = "network.websocket.enabled";
const pref_block = "network.websocket.override-security-block";

let errors = 0;
let lastWindowId = 0;
let oldPref_ws, oldPref_block;

let TestObserver = {
  QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver]),

  observe: function test_observe(aSubject)
  {
    if (!(aSubject instanceof Ci.nsIScriptError) ||
        !(aSubject instanceof Ci.nsIScriptError2)) {
      return;
    }

    is(aSubject.category, "Web Socket", "received a Web Socket error");
    isnot(aSubject.sourceName.indexOf("test-bug-603750-websocket.js"), -1,
          "sourceName is correct");

    if (++errors == 2) {
      is(lastWindowId, aSubject.outerWindowID,
         "same window ID (" + lastWindowId + ") for both errors");
      executeSoon(performTest);
    }
    else {
      lastWindowId = aSubject.outerWindowID;
    }
  }
};

function tabLoad(aEvent) {
  browser.removeEventListener(aEvent.type, arguments.callee, true);

  openConsole();

  let hudId = HUDService.getHudIdByWindow(content);
  hud = HUDService.hudReferences[hudId];

  Services.console.registerListener(TestObserver);

  content.location = TEST_URI;
}

function performTest() {
  let textContent = hud.outputNode.textContent;
  isnot(textContent.indexOf("ws://0.0.0.0:81"), -1,
        "first error message found");
  isnot(textContent.indexOf("ws://0.0.0.0:82"), -1,
        "second error message found");

  Services.console.unregisterListener(TestObserver);
  Services.prefs.setBoolPref(pref_ws, oldPref_ws);
  Services.prefs.setBoolPref(pref_block, oldPref_block);
  finishTest();
}

function test() {
  oldPref_ws = Services.prefs.getBoolPref(pref_ws);
  oldPref_block = Services.prefs.getBoolPref(pref_block);

  Services.prefs.setBoolPref(pref_ws, true);
  Services.prefs.setBoolPref(pref_block, true);

  addTab("data:text/html,Web Console test for bug 603750: Web Socket errors");
  browser.addEventListener("load", tabLoad, true);
}

