forked from mirrors/gecko-dev
		
	Differential Revision: https://phabricator.services.mozilla.com/D55857 --HG-- rename : toolkit/components/alerts/resources/content/alert.xul => toolkit/components/alerts/resources/content/alert.xhtml rename : toolkit/components/apppicker/content/appPicker.xul => toolkit/components/apppicker/content/appPicker.xhtml rename : toolkit/components/extensions/dummy.xul => toolkit/components/extensions/dummy.xhtml rename : toolkit/components/passwordmgr/content/passwordManager.xul => toolkit/components/passwordmgr/content/passwordManager.xhtml rename : toolkit/components/printing/content/printPageSetup.xul => toolkit/components/printing/content/printPageSetup.xhtml rename : toolkit/components/printing/content/printPreviewProgress.xul => toolkit/components/printing/content/printPreviewProgress.xhtml rename : toolkit/components/printing/content/printProgress.xul => toolkit/components/printing/content/printProgress.xhtml rename : toolkit/components/prompts/content/commonDialog.xul => toolkit/components/prompts/content/commonDialog.xhtml rename : toolkit/components/prompts/content/selectDialog.xul => toolkit/components/prompts/content/selectDialog.xhtml rename : toolkit/components/viewconfig/content/config.xul => toolkit/components/viewconfig/content/config.xhtml rename : toolkit/content/editMenuKeys.inc.xul => toolkit/content/editMenuKeys.inc.xhtml rename : toolkit/content/resetProfile.xul => toolkit/content/resetProfile.xhtml rename : toolkit/content/resetProfileProgress.xul => toolkit/content/resetProfileProgress.xhtml rename : toolkit/modules/win.xul => toolkit/modules/win.xhtml rename : toolkit/profile/content/createProfileWizard.xul => toolkit/profile/content/createProfileWizard.xhtml rename : toolkit/profile/content/profileDowngrade.xul => toolkit/profile/content/profileDowngrade.xhtml rename : toolkit/profile/content/profileSelection.xul => toolkit/profile/content/profileSelection.xhtml extra : moz-landing-system : lando
		
			
				
	
	
		
			117 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
/* eslint-disable mozilla/use-chromeutils-generateqi */
 | 
						|
 | 
						|
var gTestTab;
 | 
						|
var gContentAPI;
 | 
						|
var gContentWindow;
 | 
						|
var handleDialog;
 | 
						|
 | 
						|
// Modified from toolkit/components/passwordmgr/test/prompt_common.js
 | 
						|
var didDialog;
 | 
						|
 | 
						|
var timer; // keep in outer scope so it's not GC'd before firing
 | 
						|
function startCallbackTimer() {
 | 
						|
  didDialog = false;
 | 
						|
 | 
						|
  // Delay before the callback twiddles the prompt.
 | 
						|
  const dialogDelay = 10;
 | 
						|
 | 
						|
  // Use a timer to invoke a callback to twiddle the authentication dialog
 | 
						|
  timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
 | 
						|
  timer.init(observer, dialogDelay, Ci.nsITimer.TYPE_ONE_SHOT);
 | 
						|
}
 | 
						|
 | 
						|
var observer = SpecialPowers.wrapCallbackObject({
 | 
						|
  QueryInterface(iid) {
 | 
						|
    const interfaces = [
 | 
						|
      Ci.nsIObserver,
 | 
						|
      Ci.nsISupports,
 | 
						|
      Ci.nsISupportsWeakReference,
 | 
						|
    ];
 | 
						|
 | 
						|
    if (
 | 
						|
      !interfaces.some(function(v) {
 | 
						|
        return iid.equals(v);
 | 
						|
      })
 | 
						|
    ) {
 | 
						|
      throw SpecialPowers.Components.results.NS_ERROR_NO_INTERFACE;
 | 
						|
    }
 | 
						|
    return this;
 | 
						|
  },
 | 
						|
 | 
						|
  observe(subject, topic, data) {
 | 
						|
    var doc = getDialogDoc();
 | 
						|
    if (doc) {
 | 
						|
      handleDialog(doc);
 | 
						|
    } else {
 | 
						|
      startCallbackTimer();
 | 
						|
    } // try again in a bit
 | 
						|
  },
 | 
						|
});
 | 
						|
 | 
						|
function getDialogDoc() {
 | 
						|
  // Find the <browser> which contains notifyWindow, by looking
 | 
						|
  // through all the open windows and all the <browsers> in each.
 | 
						|
 | 
						|
  // var enumerator = wm.getEnumerator("navigator:browser");
 | 
						|
  for (let { docShell } of Services.wm.getEnumerator(null)) {
 | 
						|
    var containedDocShells = docShell.getAllDocShellsInSubtree(
 | 
						|
      docShell.typeChrome,
 | 
						|
      docShell.ENUMERATE_FORWARDS
 | 
						|
    );
 | 
						|
    for (let childDocShell of containedDocShells) {
 | 
						|
      // Get the corresponding document for this docshell
 | 
						|
      // We don't want it if it's not done loading.
 | 
						|
      if (childDocShell.busyFlags != Ci.nsIDocShell.BUSY_FLAGS_NONE) {
 | 
						|
        continue;
 | 
						|
      }
 | 
						|
      var childDoc = childDocShell.contentViewer.DOMDocument;
 | 
						|
 | 
						|
      // ok(true, "Got window: " + childDoc.location.href);
 | 
						|
      if (
 | 
						|
        childDoc.location.href == "chrome://global/content/commonDialog.xhtml"
 | 
						|
      ) {
 | 
						|
        return childDoc;
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  return null;
 | 
						|
}
 | 
						|
 | 
						|
function test() {
 | 
						|
  UITourTest();
 | 
						|
}
 | 
						|
 | 
						|
var tests = [
 | 
						|
  taskify(async function test_modal_dialog_while_opening_tooltip() {
 | 
						|
    let panelShown;
 | 
						|
    let popup;
 | 
						|
 | 
						|
    handleDialog = doc => {
 | 
						|
      popup = document.getElementById("UITourTooltip");
 | 
						|
      gContentAPI.showInfo("appMenu", "test title", "test text");
 | 
						|
      doc.defaultView.setTimeout(function() {
 | 
						|
        is(
 | 
						|
          popup.state,
 | 
						|
          "closed",
 | 
						|
          "Popup shouldn't be shown while dialog is up"
 | 
						|
        );
 | 
						|
        panelShown = promisePanelElementShown(window, popup);
 | 
						|
        let dialog = doc.getElementById("commonDialog");
 | 
						|
        dialog.acceptDialog();
 | 
						|
      }, 1000);
 | 
						|
    };
 | 
						|
    startCallbackTimer();
 | 
						|
    executeSoon(() => alert("test"));
 | 
						|
    await waitForConditionPromise(
 | 
						|
      () => panelShown,
 | 
						|
      "Timed out waiting for panel promise to be assigned",
 | 
						|
      100
 | 
						|
    );
 | 
						|
    await panelShown;
 | 
						|
 | 
						|
    await hideInfoPromise();
 | 
						|
  }),
 | 
						|
];
 |