accessible/tests/mochitest/treeupdate/test_contextmenu.xul

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 <?xml version="1.0"?>
     2 <?xml-stylesheet href="chrome://global/skin" type="text/css"?>
     3 <?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
     4                  type="text/css"?>
     6 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
     7         title="menu tree and events">
     9   <script type="application/javascript"
    10           src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
    11   <script type="application/javascript"
    12           src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/>
    14   <script type="application/javascript"
    15           src="../common.js" />
    16   <script type="application/javascript"
    17           src="../events.js" />
    18   <script type="application/javascript"
    19           src="../role.js" />
    21   <script type="application/javascript">
    22   <![CDATA[
    24     function openMenu(aID, aTree)
    25     {
    26       this.eventSeq = [
    27         new invokerChecker(EVENT_MENUPOPUP_START, getNode(aID))
    28       ];
    30       this.invoke = function openMenu_invoke()
    31       {
    32         var button = getNode("button");
    33         getNode(aID).openPopup(button, "after_start", 0, 0, true, false);
    34       }
    36       this.finalCheck = function openMenu_finalCheck(aEvent)
    37       {
    38         testAccessibleTree(aID, aTree);
    39       }
    41       this.getID = function openMenu_getID()
    42       {
    43         return "open menu " + prettyName(aID);
    44       }
    45     }
    47     function selectNextMenuItem(aID)
    48     {
    49       this.eventSeq = [
    50         new invokerChecker(EVENT_FOCUS, getNode(aID))
    51       ];
    53       this.invoke = function selectMenuItem_invoke()
    54       {
    55         synthesizeKey("VK_DOWN", { });
    56       }
    58       this.getID = function selectMenuItem_getID()
    59       {
    60         return "select menuitem " + prettyName(aID);
    61       }
    62     }
    64     function openSubMenu(aSubMenuID, aItemID, aMenuID, aTree)
    65     {
    66       this.eventSeq = [
    67         new invokerChecker(EVENT_FOCUS, getNode(aItemID)),
    68       ];
    70       this.invoke = function openSubMenu_invoke()
    71       {
    72         synthesizeKey("VK_RETURN", { });
    73       }
    75       this.finalCheck = function openSubMenu_finalCheck(aEvent)
    76       {
    77         testAccessibleTree(aMenuID, aTree);
    78       }
    80       this.getID = function openSubMenu_getID()
    81       {
    82         return "open submenu " + prettyName(aSubMenuID) + " focusing item " + prettyName(aItemID);
    83       }
    84     }
    86     function closeSubMenu(aSubMenuID, aItemID)
    87     {
    88       this.eventSeq = [
    89         new invokerChecker(EVENT_FOCUS, getNode(aItemID)),
    90       ];
    92       this.invoke = function closeSubMenu_invoke()
    93       {
    94         synthesizeKey("VK_ESCAPE", { });
    95       }
    97       this.getID = function closeSubMenu_getID()
    98       {
    99         return "close submenu " + prettyName(aSubMenuID) + " focusing item " + prettyName(aItemID);
   100       }
   101     }
   103     function closeMenu(aID)
   104     {
   105       this.eventSeq = [
   106         new invokerChecker(EVENT_MENUPOPUP_END, getNode(aID))
   107       ];
   109       this.invoke = function closeMenu_invoke()
   110       {
   111         synthesizeKey("VK_ESCAPE", { });
   112       }
   114       this.getID = function closeMenu_getID()
   115       {
   116         return "close menu " + prettyName(aID);
   117       }
   118     }
   120     //gA11yEventDumpID = "eventdump";
   121     //gA11yEventDumpToConsole = true;
   123     var gQueue = null;
   124     var gContextTree = {};
   126     // Linux and Windows menu trees discrepancy: bug 527646.
   128     /**
   129      * Return the context menu tree before submenus were open.
   130      */
   131     function getMenuTree1()
   132     {
   133       if (LINUX || SOLARIS) {
   134         var tree = {
   135           role: ROLE_MENUPOPUP,
   136           children: [
   137             {
   138               name: "item0",
   139               role: ROLE_MENUITEM,
   140               children: []
   141             },
   142             {
   143               name: "item1",
   144               role: ROLE_MENUITEM,
   145               children: []
   146             },
   147             {
   148               name: "item2",
   149               role: ROLE_PARENT_MENUITEM,
   150               children: [ ]
   151             }
   152           ]
   153         };
   154         return tree;
   155       }
   157       // Windows
   158       var tree = {
   159         role: ROLE_MENUPOPUP,
   160         children: [
   161           {
   162             name: "item0",
   163             role: ROLE_MENUITEM,
   164             children: []
   165           },
   166           {
   167             name: "item1",
   168             role: ROLE_MENUITEM,
   169             children: []
   170           },
   171           {
   172             name: "item2",
   173             role: ROLE_PARENT_MENUITEM,
   174             children: [
   175               {
   176                 name: "item2",
   177                 role: ROLE_MENUPOPUP,
   178                 children: [ ]
   179               }
   180             ]
   181           }
   182         ]
   183       };
   184       return tree;
   185     }
   187     /**
   188      * Return context menu tree when submenu was open.
   189      */
   190     function getMenuTree2()
   191     {
   192       var tree = getMenuTree1();
   193       if (LINUX || SOLARIS) {
   194         var submenuTree =
   195         {
   196           name: "item2.0",
   197           role: ROLE_PARENT_MENUITEM,
   198           children: [ ]
   199         };
   200         tree.children[2].children.push(submenuTree);
   201         return tree;
   202       }
   204       // Windows
   205       var submenuTree =
   206       {
   207         name: "item2.0",
   208         role: ROLE_PARENT_MENUITEM,
   209         children: [
   210           {
   211             name: "item2.0",
   212             role: ROLE_MENUPOPUP,
   213             children: [ ]
   214           }
   215         ]
   216       };
   218       tree.children[2].children[0].children.push(submenuTree);
   219       return tree;
   220     }
   222     /**
   223      * Return context menu tree when subsub menu was open.
   224      */
   225     function getMenuTree3()
   226     {
   227       var tree = getMenuTree2();
   228       var subsubmenuTree =
   229       {
   230         name: "item2.0.0",
   231         role: ROLE_MENUITEM,
   232         children: []
   233       };
   235       if (LINUX || SOLARIS)
   236         tree.children[2].children[0].children.push(subsubmenuTree);
   237       else
   238         tree.children[2].children[0].children[0].children[0].children.push(subsubmenuTree);
   240       return tree;
   241     }
   244     function doTests()
   245     {
   246       gQueue = new eventQueue();
   248       // Check initial empty tree
   249       testAccessibleTree("context", { MENUPOPUP: [] });
   251       // Open context menu and check that menu item accesibles are created.
   252       gQueue.push(new openMenu("context", getMenuTree1()));
   254       // Select items and check focus event on them.
   255       gQueue.push(new selectNextMenuItem("item0"));
   256       gQueue.push(new selectNextMenuItem("item1"));
   257       gQueue.push(new selectNextMenuItem("item2"));
   259       // Open sub menu and check menu accessible tree and focus event.
   260       gQueue.push(new openSubMenu("submenu2", "item2.0",
   261                                   "context", getMenuTree2()));
   262       gQueue.push(new openSubMenu("submenu2.0", "item2.0.0",
   263                                   "context", getMenuTree3()));
   265       // Close submenus and check that focus goes to parent.
   266       gQueue.push(new closeSubMenu("submenu2.0", "item2.0"));
   267       gQueue.push(new closeSubMenu("submenu2", "item2"));
   269       gQueue.push(new closeMenu("context"));
   271       gQueue.invoke(); // Will call SimpleTest.finish();
   272     }
   274     SimpleTest.waitForExplicitFinish();
   275     addA11yLoadEvent(doTests);
   276   ]]>
   277   </script>
   279   <hbox flex="1" style="overflow: auto;">
   280   <body xmlns="http://www.w3.org/1999/xhtml">
   281     <a target="_blank"
   282        href="https://bugzilla.mozilla.org/show_bug.cgi?id=630194"
   283        title="Update accessible tree when opening the menu popup">
   284       Mozilla Bug 630194
   285     </a>
   286     <a target="_blank"
   287        href="https://bugzilla.mozilla.org/show_bug.cgi?id=630486"
   288        title="Don't force accessible creation for popup children.">
   289       Mozilla Bug 630486
   290     </a>
   291   <p id="display"></p>
   292     <div id="content" style="display: none">
   293     </div>
   294     <pre id="test">
   295     </pre>
   296   </body>
   298     <vbox flex="1">
   300       <menupopup id="context">
   301         <menuitem id="item0" label="item0"/>
   302         <menuitem id="item1" label="item1"/>
   303         <menu id="item2" label="item2">
   304           <menupopup id="submenu2">
   305             <menu id="item2.0" label="item2.0">
   306               <menupopup id="submenu2.0">
   307                 <menuitem id="item2.0.0" label="item2.0.0"/>
   308               </menupopup>
   309             </menu>
   310           </menupopup>
   311         </menu>
   312       </menupopup>
   314       <button context="context" id="button">btn</button>
   316       <vbox id="eventdump" role="log"/>
   317     </vbox>
   318   </hbox>
   319 </window>

mercurial