browser/components/sessionstore/test/content-forms.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 "use strict";
     7 /**
     8  * This frame script is only loaded for sessionstore mochitests. It contains
     9  * a bunch of utility functions used to test form data collection and
    10  * restoration in remote browsers.
    11  */
    13 function queryElement(data) {
    14   let frame = content;
    15   if (data.hasOwnProperty("frame")) {
    16     frame = content.frames[data.frame];
    17   }
    19   let doc = frame.document;
    21   if (data.hasOwnProperty("id")) {
    22     return doc.getElementById(data.id);
    23   }
    25   if (data.hasOwnProperty("selector")) {
    26     return doc.querySelector(data.selector);
    27   }
    29   if (data.hasOwnProperty("xpath")) {
    30     let xptype = Ci.nsIDOMXPathResult.FIRST_ORDERED_NODE_TYPE;
    31     return doc.evaluate(data.xpath, doc, null, xptype, null).singleNodeValue;
    32   }
    34   throw new Error("couldn't query element");
    35 }
    37 function dispatchUIEvent(input, type) {
    38   let event = input.ownerDocument.createEvent("UIEvents");
    39   event.initUIEvent(type, true, true, input.ownerDocument.defaultView, 0);
    40   input.dispatchEvent(event);
    41 }
    43 function defineListener(type, cb) {
    44   addMessageListener("ss-test:" + type, function ({data}) {
    45     sendAsyncMessage("ss-test:" + type, cb(data));
    46   });
    47 }
    49 defineListener("sendKeyEvent", function (data) {
    50   let frame = content;
    51   if (data.hasOwnProperty("frame")) {
    52     frame = content.frames[data.frame];
    53   }
    55   let ifreq = frame.QueryInterface(Ci.nsIInterfaceRequestor);
    56   let utils = ifreq.getInterface(Ci.nsIDOMWindowUtils);
    58   let keyCode = data.key.charCodeAt(0);
    59   let charCode = Ci.nsIDOMKeyEvent.DOM_VK_A + keyCode - "a".charCodeAt(0);
    61   utils.sendKeyEvent("keydown", keyCode, charCode, null);
    62   utils.sendKeyEvent("keypress", keyCode, charCode, null);
    63   utils.sendKeyEvent("keyup", keyCode, charCode, null);
    64 });
    66 defineListener("getInnerHTML", function (data) {
    67   return queryElement(data).innerHTML;
    68 });
    70 defineListener("getTextContent", function (data) {
    71   return queryElement(data).textContent;
    72 });
    74 defineListener("getInputValue", function (data) {
    75   return queryElement(data).value;
    76 });
    78 defineListener("setInputValue", function (data) {
    79   let input = queryElement(data);
    80   input.value = data.value;
    81   dispatchUIEvent(input, "input");
    82 });
    84 defineListener("getInputChecked", function (data) {
    85   return queryElement(data).checked;
    86 });
    88 defineListener("setInputChecked", function (data) {
    89   let input = queryElement(data);
    90   input.checked = data.checked;
    91   dispatchUIEvent(input, "change");
    92 });
    94 defineListener("getSelectedIndex", function (data) {
    95   return queryElement(data).selectedIndex;
    96 });
    98 defineListener("setSelectedIndex", function (data) {
    99   let input = queryElement(data);
   100   input.selectedIndex = data.index;
   101   dispatchUIEvent(input, "change");
   102 });
   104 defineListener("getMultipleSelected", function (data) {
   105   let input = queryElement(data);
   106   return Array.map(input.options, (opt, idx) => idx)
   107               .filter(idx => input.options[idx].selected);
   108 });
   110 defineListener("setMultipleSelected", function (data) {
   111   let input = queryElement(data);
   112   Array.forEach(input.options, (opt, idx) => opt.selected = data.indices.indexOf(idx) > -1);
   113   dispatchUIEvent(input, "change");
   114 });
   116 defineListener("getFileNameArray", function (data) {
   117   return queryElement(data).mozGetFileNameArray();
   118 });
   120 defineListener("setFileNameArray", function (data) {
   121   let input = queryElement(data);
   122   input.mozSetFileNameArray(data.names, data.names.length);
   123   dispatchUIEvent(input, "input");
   124 });
   126 defineListener("setFormElementValues", function (data) {
   127   for (let elem of content.document.forms[0].elements) {
   128     elem.value = data.value;
   129     dispatchUIEvent(elem, "input");
   130   }
   131 });

mercurial