diff options
author | Raymond Hill <rhill@raymondhill.net> | 2014-11-24 14:49:11 -0200 |
---|---|---|
committer | Raymond Hill <rhill@raymondhill.net> | 2014-11-24 14:49:11 -0200 |
commit | a430e526b6b72182a07cca94822861da7fbdf77b (patch) | |
tree | f32f7dd8480a8c6ba49ba3b4a8c61ac84c13fdec /meta | |
parent | 266f62914fab3a9ae5d01fa808b9e7a68e948777 (diff) | |
download | uBlock-a430e526b6b72182a07cca94822861da7fbdf77b.zip uBlock-a430e526b6b72182a07cca94822861da7fbdf77b.tar.gz uBlock-a430e526b6b72182a07cca94822861da7fbdf77b.tar.bz2 |
use "platform" as suggested in #360
Diffstat (limited to 'meta')
-rw-r--r-- | meta/crx/manifest.json | 54 | ||||
-rw-r--r-- | meta/crx/vapi-background.js | 381 | ||||
-rw-r--r-- | meta/crx/vapi-client.js | 151 | ||||
-rw-r--r-- | meta/crx/vapi-common.js | 89 |
4 files changed, 0 insertions, 675 deletions
diff --git a/meta/crx/manifest.json b/meta/crx/manifest.json deleted file mode 100644 index 0d92222..0000000 --- a/meta/crx/manifest.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "manifest_version": 2, - - "name": "µBlock", - "version": "0.7.0.11", - - "default_locale": "en", - "description": "__MSG_extShortDesc__", - "icons": { - "16": "img/icon_16.png", - "128": "img/icon_128.png" - }, - - "browser_action": { - "default_icon": { - "19": "img/browsericons/icon19-off.png", - "38": "img/browsericons/icon38-off.png" - }, - "default_title": "µBlock", - "default_popup": "popup.html" - }, - - "author": "Raymond Hill", - "background": { - "page": "background.html" - }, - "content_scripts": [ - { - "matches": ["http://*/*", "https://*/*"], - "js": ["js/vapi-client.js", "js/contentscript-start.js"], - "run_at": "document_start", - "all_frames": true - }, - { - "matches": ["http://*/*", "https://*/*"], - "js": ["js/contentscript-end.js"], - "run_at": "document_end", - "all_frames": true - } - ], - "minimum_chrome_version": "22.0", - "options_page": "dashboard.html", - "permissions": [ - "contextMenus", - "storage", - "tabs", - "unlimitedStorage", - "webNavigation", - "webRequest", - "webRequestBlocking", - "http://*/*", - "https://*/*" - ] -}
\ No newline at end of file diff --git a/meta/crx/vapi-background.js b/meta/crx/vapi-background.js deleted file mode 100644 index ce88e49..0000000 --- a/meta/crx/vapi-background.js +++ /dev/null @@ -1,381 +0,0 @@ -/******************************************************************************* - - µBlock - a Chromium browser extension to block requests. - Copyright (C) 2014 The µBlock authors - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock -*/ - -/* global self */ - -// For background page - -/******************************************************************************/ - -(function() { - -'use strict'; - -/******************************************************************************/ - -self.vAPI = self.vAPI || {}; - -var vAPI = self.vAPI; -var chrome = self.chrome; - -vAPI.chrome = true; - -/******************************************************************************/ - -vAPI.storage = chrome.storage.local; - -/******************************************************************************/ - -vAPI.tabs = {}; - -/******************************************************************************/ - -vAPI.tabs.registerListeners = function() { - if ( typeof this.onNavigation === 'function' ) { - chrome.webNavigation.onCommitted.addListener(this.onNavigation); - } - - if ( typeof this.onUpdated === 'function' ) { - chrome.tabs.onUpdated.addListener(this.onUpdated); - } - - if ( typeof this.onClosed === 'function' ) { - chrome.tabs.onRemoved.addListener(this.onClosed); - } - - if ( typeof this.onPopup === 'function' ) { - chrome.webNavigation.onCreatedNavigationTarget.addListener(this.onPopup); - } -}; - -/******************************************************************************/ - -vAPI.tabs.get = function(tabId, callback) { - var onTabReady = function(tab) { - // https://code.google.com/p/chromium/issues/detail?id=410868#c8 - if ( chrome.runtime.lastError ) { - return; - } - callback(tab); - }; - if ( tabId !== null ) { - chrome.tabs.get(tabId, onTabReady); - return; - } - var onTabReceived = function(tabs) { - // https://code.google.com/p/chromium/issues/detail?id=410868#c8 - if ( chrome.runtime.lastError ) { - return; - } - callback(tabs[0]); - }; - chrome.tabs.query({ active: true, currentWindow: true }, onTabReceived); -}; - -/******************************************************************************/ - -// properties of the details object: -// url: 'URL', // the address that will be opened -// tabId: 1, // the tab is used if set, instead of creating a new one -// index: -1, // undefined: end of the list, -1: following tab, or after index -// active: false, // opens the tab in background - true and undefined: foreground -// select: true // if a tab is already opened with that url, then select it instead of opening a new one - -vAPI.tabs.open = function(details) { - var targetURL = details.url; - if ( typeof targetURL !== 'string' || targetURL === '' ) { - return null; - } - // extension pages - if ( /^[\w-]{2,}:/.test(targetURL) !== true ) { - targetURL = vAPI.getURL(targetURL); - } - - // dealing with Chrome's asynchronous API - var wrapper = function() { - if ( details.active === undefined ) { - details.active = true; - } - - var subWrapper = function() { - var _details = { - url: targetURL, - active: !!details.active - }; - - if ( details.tabId ) { - // update doesn't accept index, must use move - chrome.tabs.update(details.tabId, _details, function(tab) { - // if the tab doesn't exist - if ( vAPI.lastError() ) { - chrome.tabs.create(_details); - } else if ( details.index !== undefined ) { - chrome.tabs.move(tab.id, {index: details.index}); - } - }); - } else { - if ( details.index !== undefined ) { - _details.index = details.index; - } - - chrome.tabs.create(_details); - } - }; - - if ( details.index === -1 ) { - vAPI.tabs.get(null, function(tab) { - if ( tab ) { - details.index = tab.index + 1; - } else { - delete details.index; - } - - subWrapper(); - }); - } - else { - subWrapper(); - } - }; - - if ( details.select ) { - chrome.tabs.query({ currentWindow: true }, function(tabs) { - var rgxHash = /#.*/; - // this is questionable - var url = targetURL.replace(rgxHash, ''); - var selected = tabs.some(function(tab) { - if ( tab.url.replace(rgxHash, '') === url ) { - chrome.tabs.update(tab.id, { active: true }); - return true; - } - }); - - if ( !selected ) { - wrapper(); - } - }); - } - else { - wrapper(); - } -}; - -/******************************************************************************/ - -vAPI.tabs.remove = function(tabId) { - var onTabRemoved = function() { - if ( vAPI.lastError() ) { - } - }; - chrome.tabs.remove(tabId, onTabRemoved); -}; - -/******************************************************************************/ - -vAPI.tabs.injectScript = function(tabId, details, callback) { - var onScriptExecuted = function() { - // https://code.google.com/p/chromium/issues/detail?id=410868#c8 - if ( chrome.runtime.lastError ) { - } - if ( typeof callback === 'function' ) { - callback(); - } - }; - if ( tabId ) { - chrome.tabs.executeScript(tabId, details, onScriptExecuted); - } else { - chrome.tabs.executeScript(details, onScriptExecuted); - } -}; - -/******************************************************************************/ - -// Must read: https://code.google.com/p/chromium/issues/detail?id=410868#c8 - -// https://github.com/gorhill/uBlock/issues/19 -// https://github.com/gorhill/uBlock/issues/207 -// Since we may be called asynchronously, the tab id may not exist -// anymore, so this ensures it does still exist. - -vAPI.setIcon = function(tabId, img, badge) { - var onIconReady = function() { - if ( vAPI.lastError() ) { - return; - } - chrome.browserAction.setBadgeText({ tabId: tabId, text: badge }); - if ( badge !== '' ) { - chrome.browserAction.setBadgeBackgroundColor({ tabId: tabId, color: '#666' }); - } - }; - chrome.browserAction.setIcon({ tabId: tabId, path: img }, onIconReady); -}; - -/******************************************************************************/ - -vAPI.messaging = { - ports: {}, - listeners: {}, - defaultHandler: null, - NOOPFUNC: function(){}, - UNHANDLED: 'vAPI.messaging.notHandled' -}; - -/******************************************************************************/ - -vAPI.messaging.listen = function(listenerName, callback) { - this.listeners[listenerName] = callback; -}; - -/******************************************************************************/ - -vAPI.messaging.onPortMessage = function(request, port) { - var callback = vAPI.messaging.NOOPFUNC; - if ( request.requestId !== undefined ) { - callback = function(response) { - port.postMessage({ - requestId: request.requestId, - portName: request.portName, - msg: response !== undefined ? response : null - }); - }; - } - - // Specific handler - var r = vAPI.messaging.UNHANDLED; - var listener = vAPI.messaging.listeners[request.portName]; - if ( typeof listener === 'function' ) { - r = listener(request.msg, port.sender, callback); - } - if ( r !== vAPI.messaging.UNHANDLED ) { - return; - } - - // Default handler - r = vAPI.messaging.defaultHandler(request.msg, port.sender, callback); - if ( r !== vAPI.messaging.UNHANDLED ) { - return; - } - - console.error('µBlock> messaging > unknown request: %o', request); - - // Unhandled: - // Need to callback anyways in case caller expected an answer, or - // else there is a memory leak on caller's side - callback(); -}; - -/******************************************************************************/ - -vAPI.messaging.onPortDisconnect = function(port) { - port.onDisconnect.removeListener(vAPI.messaging.onPortDisconnect); - port.onMessage.removeListener(vAPI.messaging.onPortMessage); - delete vAPI.messaging.ports[port.name]; -}; - -/******************************************************************************/ - -vAPI.messaging.onPortConnect = function(port) { - port.onDisconnect.addListener(vAPI.messaging.onPortDisconnect); - port.onMessage.addListener(vAPI.messaging.onPortMessage); - vAPI.messaging.ports[port.name] = port; -}; - -/******************************************************************************/ - -vAPI.messaging.setup = function(defaultHandler) { - // Already setup? - if ( this.defaultHandler !== null ) { - return; - } - - if ( typeof defaultHandler !== 'function' ) { - defaultHandler = function(){ return vAPI.messaging.UNHANDLED; }; - } - this.defaultHandler = defaultHandler; - - chrome.runtime.onConnect.addListener(this.onPortConnect); -}; - -/******************************************************************************/ - -vAPI.messaging.broadcast = function(message) { - var messageWrapper = { - broadcast: true, - msg: message - }; - - for ( var portName in this.ports ) { - if ( this.ports.hasOwnProperty(portName) === false ) { - continue; - } - this.ports[portName].postMessage(messageWrapper); - } -}; - -/******************************************************************************/ - -vAPI.net = { - registerListeners: function() { - var listeners = [ - 'onBeforeRequest', - 'onBeforeSendHeaders', - 'onHeadersReceived' - ]; - - for (var i = 0; i < listeners.length; ++i) { - chrome.webRequest[listeners[i]].addListener( - this[listeners[i]].callback, - { - 'urls': this[listeners[i]].urls || ['<all_urls>'], - 'types': this[listeners[i]].types || [] - }, - this[listeners[i]].extra - ); - } - } -}; - -/******************************************************************************/ - -vAPI.contextMenu = { - create: function(details, callback) { - this.menuId = details.id; - this.callback = callback; - chrome.contextMenus.create(details); - chrome.contextMenus.onClicked.addListener(this.callback); - }, - remove: function() { - chrome.contextMenus.onClicked.removeListener(this.callback); - chrome.contextMenus.remove(this.menuId); - } -}; - -/******************************************************************************/ - -vAPI.lastError = function() { - return chrome.runtime.lastError; -}; - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff --git a/meta/crx/vapi-client.js b/meta/crx/vapi-client.js deleted file mode 100644 index 8fa7b07..0000000 --- a/meta/crx/vapi-client.js +++ /dev/null @@ -1,151 +0,0 @@ -/******************************************************************************* - - µBlock - a Chromium browser extension to block requests. - Copyright (C) 2014 The µBlock authors - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock -*/ - -// For non background pages - -/* global self, chrome, vAPI */ - -/******************************************************************************/ - -(function() { - -'use strict'; - -/******************************************************************************/ - -self.vAPI = self.vAPI || {}; -self.vAPI.chrome = true; - -/******************************************************************************/ - -var messagingConnector = function(response) { - if ( !response ) { - return; - } - - var channels = vAPI.messaging.channels; - var channel, listener; - - if ( response.broadcast === true ) { - for ( channel in channels ) { - if ( channels.hasOwnProperty(channel) === false ) { - continue; - } - listener = channels[channel].listener; - if ( typeof listener === 'function' ) { - listener(response.msg); - } - } - return; - } - - if ( response.requestId ) { - listener = vAPI.messaging.listeners[response.requestId]; - delete vAPI.messaging.listeners[response.requestId]; - delete response.requestId; - } - - if ( !listener ) { - channel = channels[response.portName]; - listener = channel && channel.listener; - } - - if ( typeof listener === 'function' ) { - listener(response.msg); - } -}; - -/******************************************************************************/ - -var uniqueId = function() { - return parseInt(Math.random() * 1e10, 10).toString(36); -}; - -/******************************************************************************/ - -self.vAPI.messaging = { - port: null, - channels: {}, - listeners: {}, - requestId: 1, - connectorId: uniqueId(), - - setup: function() { - this.port = chrome.runtime.connect({name: this.connectorId}); - this.port.onMessage.addListener(messagingConnector); - }, - - close: function() { - if ( this.port === null ) { - return; - } - this.port.disconnect(); - this.port.onMessage.removeListener(messagingConnector); - this.port = null; - this.channels = {}; - this.listeners = {}; - }, - - channel: function(channelName, callback) { - if ( !channelName ) { - return; - } - - this.channels[channelName] = { - portName: channelName, - listener: typeof callback === 'function' ? callback : null, - send: function(message, callback) { - if ( vAPI.messaging.port === null ) { - vAPI.messaging.setup(); - } - - message = { - portName: this.portName, - msg: message - }; - - if ( callback ) { - message.requestId = vAPI.messaging.requestId++; - vAPI.messaging.listeners[message.requestId] = callback; - } - - vAPI.messaging.port.postMessage(message); - }, - close: function() { - delete vAPI.messaging.channels[this.portName]; - } - }; - - return this.channels[channelName]; - } -}; - -/******************************************************************************/ - -self.vAPI.canExecuteContentScript = function() { - return true; -}; - -/******************************************************************************/ - -})(); - -/******************************************************************************/
\ No newline at end of file diff --git a/meta/crx/vapi-common.js b/meta/crx/vapi-common.js deleted file mode 100644 index cce22b2..0000000 --- a/meta/crx/vapi-common.js +++ /dev/null @@ -1,89 +0,0 @@ -/******************************************************************************* - - µBlock - a Chromium browser extension to block requests. - Copyright (C) 2014 The µBlock authors - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock -*/ - -// For background page or non-background pages - -/* global self, vAPI */ - -/******************************************************************************/ - -(function() { - -'use strict'; - -self.vAPI = self.vAPI || {}; - -/******************************************************************************/ - -// http://www.w3.org/International/questions/qa-scripts#directions - -var setScriptDirection = function(language) { - document.body.setAttribute( - 'dir', - ['ar', 'he', 'fa', 'ps', 'ur'].indexOf(language) !== -1 ? 'rtl' : 'ltr' - ); -}; - -/******************************************************************************/ - -vAPI.download = function(details) { - if ( !details.url ) { - return; - } - - var a = document.createElement('a'); - - if ( 'download' in a ) { - a.href = details.url; - a.setAttribute('download', details.filename || ''); - a.dispatchEvent(new MouseEvent('click')); - return; - } - var messager = vAPI.messaging.channel('_download'); - messager.send({ - what: 'gotoURL', - details: { - url: details.url, - index: -1 - } - }); - messager.close(); -}; - -/******************************************************************************/ - -var chrome = self.chrome; - -vAPI.getURL = function(path) { - return chrome.runtime.getURL(path); -}; - -vAPI.i18n = function(s) { - return chrome.i18n.getMessage(s); -}; - -setScriptDirection(vAPI.i18n('@@ui_locale')); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ |