146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ----------------------------------------------------------------------------- 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NOTE: If you change this file you need to touch renderer_resources.grd to 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// have your change take effect. 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ----------------------------------------------------------------------------- 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Partial implementation of the Greasemonkey API, see: 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://wiki.greasespot.net/Greasemonkey_Manual:APIs 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function GM_addStyle(css) { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var parent = document.getElementsByTagName("head")[0]; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!parent) { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parent = document.documentElement; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var style = document.createElement("style"); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) style.type = "text/css"; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var textNode = document.createTextNode(css); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) style.appendChild(textNode); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parent.appendChild(style); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function GM_xmlhttpRequest(details) { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function setupEvent(xhr, url, eventName, callback) { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xhr[eventName] = function () { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var isComplete = xhr.readyState == 4; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var responseState = { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) responseText: xhr.responseText, 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) readyState: xhr.readyState, 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) responseHeaders: isComplete ? xhr.getAllResponseHeaders() : "", 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status: isComplete ? xhr.status : 0, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) statusText: isComplete ? xhr.statusText : "", 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) finalUrl: isComplete ? url : "" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback(responseState); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var xhr = new XMLHttpRequest(); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var eventNames = ["onload", "onerror", "onreadystatechange"]; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < eventNames.length; i++ ) { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var eventName = eventNames[i]; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (eventName in details) { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setupEvent(xhr, details.url, eventName, details[eventName]); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xhr.open(details.method, details.url); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (details.overrideMimeType) { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xhr.overrideMimeType(details.overrideMimeType); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (details.headers) { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var header in details.headers) { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xhr.setRequestHeader(header, details.headers[header]); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xhr.send(details.data ? details.data : null); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function GM_openInTab(url) { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window.open(url, ""); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function GM_log(message) { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window.console.log(message); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)(function() { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function generateGreasemonkeyStub(name) { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return function() { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) console.log("%s is not supported.", name); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var apis = ["GM_getValue", "GM_setValue", "GM_registerMenuCommand"]; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0, api; api = apis[i]; i++) { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window[api] = generateGreasemonkeyStub(api); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})(); 83