"use strict";

var {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
const CONTROL_CENTER_PANEL = gIdentityHandler._identityPopup;
const CONTROL_CENTER_MENU_NAME = "controlCenter";

var gTestTab;
var gContentAPI;
var gContentWindow;

add_task(setup_UITourTest);

add_UITour_task(async function test_showMenu_controlCenter() {
  is_element_hidden(CONTROL_CENTER_PANEL, "Panel should initially be hidden");
  await showMenuPromise(CONTROL_CENTER_MENU_NAME);
  is_element_visible(CONTROL_CENTER_PANEL, "Panel should be visible after showMenu");

  await gURLBar.focus();
  is_element_visible(CONTROL_CENTER_PANEL, "Panel should remain visible after focus outside");

  await showMenuPromise(CONTROL_CENTER_MENU_NAME);
  is_element_visible(CONTROL_CENTER_PANEL,
                     "Panel should remain visible and callback called after a 2nd showMenu");

  await BrowserTestUtils.withNewTab({
    gBrowser,
    url: "about:blank"
  }, function() {
    ok(true, "Tab opened");
  });

  is_element_hidden(CONTROL_CENTER_PANEL, "Panel should hide upon tab switch");
});

add_UITour_task(async function test_hideMenu_controlCenter() {
  is_element_hidden(CONTROL_CENTER_PANEL, "Panel should initially be hidden");
  await showMenuPromise(CONTROL_CENTER_MENU_NAME);
  is_element_visible(CONTROL_CENTER_PANEL, "Panel should be visible after showMenu");
  let hidePromise = promisePanelElementHidden(window, CONTROL_CENTER_PANEL);
  await gContentAPI.hideMenu(CONTROL_CENTER_MENU_NAME);
  await hidePromise;

  is_element_hidden(CONTROL_CENTER_PANEL, "Panel should hide after hideMenu");
});

add_UITour_task(async function test_showMenu_hideMenu_urlbarPopup() {
  let shownPromise = promisePanelElementShown(window, gURLBar.popup);
  await showMenuPromise("urlbar");
  await shownPromise;
  is(gURLBar.popup.state, "open", "The urlbar popup should open after showMenu");
  is(gURLBar.controller.searchString, "Firefox", "Search string is Firefox");
  let hidePromise = promisePanelElementHidden(window, gURLBar.popup);
  await gContentAPI.hideMenu("urlbar");
  await hidePromise;
  is(gURLBar.popup.state, "closed", "The urlbar popup should close after hideMenu");
});

add_UITour_task(async function test_showMenu_hideMenu_pageActionPanel() {
  let pageActionPanel = BrowserPageActions.panelNode;
  let shownPromise = promisePanelElementShown(window, pageActionPanel);
  await showMenuPromise("pageActionPanel");
  await shownPromise;
  is(pageActionPanel.state, "open", "The page action panel should open after showMenu");
  let hidePromise = promisePanelElementHidden(window, pageActionPanel);
  await gContentAPI.hideMenu("pageActionPanel");
  await hidePromise;
  is(pageActionPanel.state, "closed", "The page action panel should close after hideMenu");
});
