1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5var QueryString = function() {
6  // Allows access to query parameters on the URL; e.g., given a URL like:
7  //    http://<server>/my.html?test=123&bob=123
8  // Parameters can then be accessed via QueryString.test or QueryString.bob.
9  var params = {};
10  // RegEx to split out values by &.
11  var r = /([^&=]+)=?([^&]*)/g;
12  // Lambda function for decoding extracted match values. Replaces '+' with
13  // space so decodeURIComponent functions properly.
14  function d(s) { return decodeURIComponent(s.replace(/\+/g, ' ')); }
15  var match;
16  while (match = r.exec(window.location.search.substring(1)))
17    params[d(match[1])] = d(match[2]);
18  return params;
19}();
20
21function failTest(msg) {
22  var failMessage = msg;
23  if (msg instanceof Event)
24    failMessage = msg.target + '.' + msg.type;
25  console.log("FAILED TEST: " + msg);
26  setResultInTitle('FAILED');
27}
28
29var titleChanged = false;
30function setResultInTitle(title) {
31  // If document title is 'ENDED', then update it with new title to possibly
32  // mark a test as failure.  Otherwise, keep the first title change in place.
33  if (!titleChanged || document.title.toUpperCase() == 'ENDED')
34    document.title = title.toUpperCase();
35  console.log('Set document title to: ' + title + ', updated title: ' +
36              document.title);
37  titleChanged = true;
38}
39
40function installTitleEventHandler(element, event) {
41  element.addEventListener(event, function(e) {
42    setResultInTitle(event.toString());
43  }, false);
44}
45
46function convertToArray(input) {
47  if (Array.isArray(input))
48    return input;
49  return [input];
50}
51