Enforce user gesture for getUserMedia in case a previous getUserMedia call was denied
[WebKit-https.git] / LayoutTests / resources / testharnessreport.js
1 /*
2  * This file is intended for vendors to implement
3  * code needed to integrate testharness.js tests with their own test systems.
4  *
5  * Typically such integration will attach callbacks when each test is
6  * has run, using add_result_callback(callback(test)), or when the whole test file has
7  * completed, using add_completion_callback(callback(tests, harness_status)).
8  *
9  * For more documentation about the callback functions and the
10  * parameters they are called with see testharness.js
11  */
12
13 // Setup for WebKit JavaScript tests
14 if (self.testRunner) {
15     testRunner.dumpAsText();
16     testRunner.waitUntilDone();
17     testRunner.setCanOpenWindows();
18     testRunner.grantWebNotificationPermission("http://localhost:8800");
19     // Let's restrict calling testharness timeout() to wptserve tests for the moment.
20     // That will limit the impact to a small number of tests.
21     // The risk is that testharness timeout() might be called to late on slow bots to finish properly.
22     if (testRunner.timeout && (location.port == 8800 || location.port == 9443))
23         setTimeout(timeout, testRunner.timeout * 0.9);
24
25     // Make WebAudio map to webkitWebAudio for WPT tests
26     if (location.port == 8800 || location.port == 9443) {
27         self.AudioContext = self.webkitAudioContext;
28         self.OfflineAudioContext = self.webkitOfflineAudioContext;
29     }
30
31     if (testRunner.setStatisticsShouldDowngradeReferrer) 
32        testRunner.setStatisticsShouldDowngradeReferrer(false, function() { });
33 }
34
35 if (self.internals && internals.setICECandidateFiltering)
36     internals.setICECandidateFiltering(false);
37
38 // Function used to convert the test status code into
39 // the corresponding string
40 function convertResult(resultStatus)
41 {
42     if(resultStatus == 0)
43         return("PASS");
44     else if(resultStatus == 1)
45         return("FAIL");
46     else if(resultStatus == 2)
47         return("TIMEOUT");
48     else
49         return("NOTRUN");
50 }
51
52 if (self.testRunner) {
53     /* Disable the default output of testharness.js.  The default output formats
54     *  test results into an HTML table.  When that table is dumped as text, no
55     *  spacing between cells is preserved, and it is therefore not readable. By
56     *  setting output to false, the HTML table will not be created
57     */
58     setup({"output": false, "explicit_timeout": true});
59
60     /*  Using a callback function, test results will be added to the page in a
61     *   manner that allows dumpAsText to produce readable test results
62     */
63     add_completion_callback(function (tests, harness_status) {
64         var resultStr = "\n";
65
66         // Sanitizes the given text for display in test results.
67         function sanitize(text) {
68             if (!text) {
69                 return "";
70             }
71             text = text.replace(/\0/g, "\\0");
72             return text.replace(/\r/g, "\\r");
73         }
74
75         if(harness_status.status != 0)
76             resultStr += "Harness Error (" + convertResult(harness_status.status) + "), message = " + harness_status.message + "\n\n";
77
78         for (var i = 0; i < tests.length; i++) {
79             var message = sanitize(tests[i].message);
80             if (tests[i].status == 1 && !tests[i].dumpStack) {
81                 // Remove stack for failed tests for proper string comparison without file paths.
82                 // For a test to dump the stack set its dumpStack attribute to true.
83                 var stackIndex = message.indexOf("(stack:");
84                 if (stackIndex > 0)
85                     message = message.substr(0, stackIndex);
86             }
87             resultStr += convertResult(tests[i].status) + " " + sanitize(tests[i].name) + " " + message + "\n";
88         }
89
90         var results = document.createElementNS("http://www.w3.org/1999/xhtml", "pre");
91         results.innerText = resultStr;
92
93         var log = document.getElementById("log");
94         if (log)
95             log.appendChild(results);
96         else if (document.body)
97             document.body.appendChild(results);
98         else {
99             var root = document.documentElement;
100             var is_html = root
101                     && root.namespaceURI == "http://www.w3.org/1999/xhtml"
102                     && root.localName == "html";
103             var is_svg = document.defaultView
104                     && "SVGSVGElement" in document.defaultView
105                     && root instanceof document.defaultView.SVGSVGElement;
106
107             if (is_svg) {
108                 var foreignObject = document.createElementNS("http://www.w3.org/2000/svg", "foreignObject");
109                 foreignObject.setAttribute("width", "100%");
110                 foreignObject.setAttribute("height", "100%");
111                 root.appendChild(foreignObject);
112                 foreignObject.appendChild(results);
113             } else if (is_html) {
114                 root.appendChild(document.createElementNS("http://www.w3.org/1999/xhtml", "body"))
115                     .appendChild(results);
116             } else {
117                 root.appendChild(results);
118             }
119         }
120
121         // Wait for any other completion callbacks, which may eliminate test elements
122         // from the page and therefore reduce the output.
123         setTimeout(function () {
124             testRunner.forceImmediateCompletion();
125         }, 0);
126     });
127 }