Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / extensions / renderer / resources / greasemonkey_api.js
blobbc09911571a8128ae90da1a21eaf169342c7ef47
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.
5 // -----------------------------------------------------------------------------
6 // NOTE: If you change this file you need to touch renderer_resources.grd to
7 // have your change take effect.
8 // -----------------------------------------------------------------------------
10 // Partial implementation of the Greasemonkey API, see:
11 // http://wiki.greasespot.net/Greasemonkey_Manual:APIs
13 function 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);
25 function 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   }
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   }
50   xhr.open(details.method, details.url);
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);
63 function GM_openInTab(url) {
64   window.open(url, "");
67 function GM_log(message) {
68   window.console.log(message);
71 (function() {
72   function generateGreasemonkeyStub(name) {
73     return function() {
74       console.log("%s is not supported.", name);
75     };
76   }
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 })();