1// Copyright 2014 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
5// -----------------------------------------------------------------------------
6// NOTE: If you change this file you need to touch renderer_resources.grd to
7// have your change take effect.
8// -----------------------------------------------------------------------------
9
10// Partial implementation of the Greasemonkey API, see:
11// http://wiki.greasespot.net/Greasemonkey_Manual:APIs
12
13function GM_addStyle(css) {
14  var parent = document.getElementsByTagName("head")[0];
15  if (!parent) {
16    parent = document.documentElement;
17  }
18  var style = document.createElement("style");
19  style.type = "text/css";
20  var textNode = document.createTextNode(css);
21  style.appendChild(textNode);
22  parent.appendChild(style);
23}
24
25function GM_xmlhttpRequest(details) {
26  function setupEvent(xhr, url, eventName, callback) {
27    xhr[eventName] = function () {
28      var isComplete = xhr.readyState == 4;
29      var responseState = {
30        responseText: xhr.responseText,
31        readyState: xhr.readyState,
32        responseHeaders: isComplete ? xhr.getAllResponseHeaders() : "",
33        status: isComplete ? xhr.status : 0,
34        statusText: isComplete ? xhr.statusText : "",
35        finalUrl: isComplete ? url : ""
36      };
37      callback(responseState);
38    };
39  }
40
41  var xhr = new XMLHttpRequest();
42  var eventNames = ["onload", "onerror", "onreadystatechange"];
43  for (var i = 0; i < eventNames.length; i++ ) {
44    var eventName = eventNames[i];
45    if (eventName in details) {
46      setupEvent(xhr, details.url, eventName, details[eventName]);
47    }
48  }
49
50  xhr.open(details.method, details.url);
51
52  if (details.overrideMimeType) {
53    xhr.overrideMimeType(details.overrideMimeType);
54  }
55  if (details.headers) {
56    for (var header in details.headers) {
57      xhr.setRequestHeader(header, details.headers[header]);
58    }
59  }
60  xhr.send(details.data ? details.data : null);
61}
62
63function GM_openInTab(url) {
64  window.open(url, "");
65}
66
67function GM_log(message) {
68  window.console.log(message);
69}
70
71(function() {
72  function generateGreasemonkeyStub(name) {
73    return function() {
74      console.log("%s is not supported.", name);
75    };
76  }
77
78  var apis = ["GM_getValue", "GM_setValue", "GM_registerMenuCommand"];
79  for (var i = 0, api; api = apis[i]; i++) {
80    window[api] = generateGreasemonkeyStub(api);
81  }
82})();
83