/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

const URI_BLOCKLIST_DIALOG = "chrome://mozapps/content/extensions/blocklist.xul";

// This tests that the blocklist dialog still affects soft-blocked add-ons
// if the user clicks the "Restart Later" button. It also ensures that the
// "Cancel" button is correctly renamed (to "Restart Later").
let args = {
  restart: false,
  list: [{
    name: "Bug 523784 softblocked addon",
    version: "1",
    icon: "chrome://mozapps/skin/plugins/pluginGeneric.png",
    disable: false,
    blocked: false,
    url: 'http://example.com/bug523784_1',
  }],
};

function test() {
  waitForExplicitFinish();

  let windowObserver = function(aSubject, aTopic, aData) {
    if (aTopic != "domwindowopened")
      return;

    Services.ww.unregisterNotification(windowObserver);

    let win = aSubject.QueryInterface(Ci.nsIDOMWindow);
    win.addEventListener("load", function() {
      win.removeEventListener("load", arguments.callee, false);

      executeSoon(function() bug523784_test1(win));
    }, false);
  };
  Services.ww.registerNotification(windowObserver);

  args.wrappedJSObject = args;
  Services.ww.openWindow(null, URI_BLOCKLIST_DIALOG, "",
                         "chrome,centerscreen,dialog,titlebar", args);
}

function bug523784_test1(win) {
  let bundle = Services.strings.
              createBundle("chrome://mozapps/locale/update/updates.properties");
  let cancelButton = win.document.documentElement.getButton("cancel");
  let moreInfoLink = win.document.getElementById("moreInfo");

  is(cancelButton.getAttribute("label"),
     bundle.GetStringFromName("restartLaterButton"),
     "Text should be changed on Cancel button");
  is(cancelButton.getAttribute("accesskey"),
     bundle.GetStringFromName("restartLaterButton.accesskey"),
     "Accesskey should also be changed on Cancel button");
  is(moreInfoLink.getAttribute("href"),
     'http://example.com/bug523784_1',
     "More Info link should link to a detailed blocklist page.");
  let windowObserver = function(aSubject, aTopic, aData) {
    if (aTopic != "domwindowclosed")
      return;

    Services.ww.unregisterNotification(windowObserver);

    ok(args.list[0].disable, "Should be blocking add-on");
    ok(!args.restart, "Should not restart browser immediately");

    executeSoon(bug523784_test2);
  };
  Services.ww.registerNotification(windowObserver);

  cancelButton.doCommand();
}

function bug523784_test2(win) {
  let windowObserver = function(aSubject, aTopic, aData) {
    if (aTopic != "domwindowopened")
      return;

    Services.ww.unregisterNotification(windowObserver);
    let win = aSubject.QueryInterface(Ci.nsIDOMWindow);
    win.addEventListener("load", function() {
      win.removeEventListener("load", arguments.callee, false);

    executeSoon(function(){
      let moreInfoLink = win.document.getElementById("moreInfo");
      let cancelButton = win.document.documentElement.getButton("cancel");
      is(moreInfoLink.getAttribute("href"),
         Services.urlFormatter.formatURLPref("extensions.blocklist.detailsURL"),
         "More Info link should link to the general blocklist page.");
      cancelButton.doCommand();
      executeSoon(finish);
    })
    }, false);
  };
  Services.ww.registerNotification(windowObserver);

  // Add 2 more addons to the blocked list to check that the more info link
  // points to the general blocked list page.
  args.list.push({
    name: "Bug 523784 softblocked addon 2",
    version: "2",
    icon: "chrome://mozapps/skin/plugins/pluginGeneric.png",
    disable: false,
    blocked: false,
    url: 'http://example.com/bug523784_2'
  });
  args.list.push({
    name: "Bug 523784 softblocked addon 3",
    version: "4",
    icon: "chrome://mozapps/skin/plugins/pluginGeneric.png",
    disable: false,
    blocked: false,
    url: 'http://example.com/bug523784_3'
  });

  args.wrappedJSObject = args;
  Services.ww.openWindow(null, URI_BLOCKLIST_DIALOG, "",
                         "chrome,centerscreen,dialog,titlebar", args);
}
