From e61514b9b112db75d0f6df68fb627c2014609f6f Mon Sep 17 00:00:00 2001 From: Deathamns Date: Thu, 18 Dec 2014 14:43:34 +0100 Subject: [PATCH] Firefox,Safari: fill vAPI.app in a different way Pass the extension data (name and version) as the fragment of the URL for the background script, so vAPI.app can be filled without using XHR to read the manifest files. --- platform/firefox/bootstrap.js | 47 +++++++++++++---------------- platform/firefox/vapi-background.js | 5 +-- platform/safari/Info.plist | 2 +- platform/safari/vapi-background.js | 12 ++------ tools/make-safari-meta.py | 9 ++++++ 5 files changed, 37 insertions(+), 38 deletions(-) diff --git a/platform/firefox/bootstrap.js b/platform/firefox/bootstrap.js index c601c7381..330ed8419 100644 --- a/platform/firefox/bootstrap.js +++ b/platform/firefox/bootstrap.js @@ -19,43 +19,37 @@ Home: https://github.com/gorhill/uBlock */ -/* global Services, APP_STARTUP, APP_SHUTDOWN */ +/* global APP_SHUTDOWN */ /* exported startup, shutdown, install, uninstall */ 'use strict'; /******************************************************************************/ -var bgProcess; - -Components.utils['import']('resource://gre/modules/Services.jsm'); +let bgProcess; /******************************************************************************/ -function startup(data, reason) { - bgProcess = function(ev) { - if (ev) { - this.removeEventListener(ev.type, bgProcess); - } +function startup(data) { + let {AddonManager} = Components.utils['import']( + 'resource://gre/modules/AddonManager.jsm', + null + ); - bgProcess = Services.appShell.hiddenDOMWindow.document; - bgProcess = bgProcess.documentElement.appendChild( - bgProcess.createElementNS('http://www.w3.org/1999/xhtml', 'iframe') + AddonManager.getAddonByID(data.id, addon => { + let hDoc = Components.classes['@mozilla.org/appshell/appShellService;1'] + .getService(Components.interfaces.nsIAppShellService) + .hiddenDOMWindow.document; + + bgProcess = hDoc.documentElement.appendChild( + hDoc.createElementNS('http://www.w3.org/1999/xhtml', 'iframe') ); - bgProcess.setAttribute('src', 'chrome://ublock/content/background.html'); - }; - if (reason === APP_STARTUP) { - Services.ww.registerNotification({ - observe: function(win) { - Services.ww.unregisterNotification(this); - win.addEventListener('DOMContentLoaded', bgProcess); - } - }); - } - else { - bgProcess(); - } + let bgURI = 'chrome://ublock/content/background.html'; + + // send addon data synchronously to the background script + bgProcess.src = bgURI + '#' + [addon.name, addon.version]; + }); } /******************************************************************************/ @@ -70,7 +64,8 @@ function shutdown(data, reason) { function install() { // https://bugzil.la/719376 - Services.strings.flushBundles(); + Components.classes['@mozilla.org/intl/stringbundle;1'] + .getService(Components.interfaces.nsIStringBundleService).flushBundles(); } /******************************************************************************/ diff --git a/platform/firefox/vapi-background.js b/platform/firefox/vapi-background.js index 5481723b3..4afb30eb1 100644 --- a/platform/firefox/vapi-background.js +++ b/platform/firefox/vapi-background.js @@ -43,9 +43,10 @@ vAPI.firefox = true; /******************************************************************************/ +vAPI.app = location.hash.slice(1).split(','); vAPI.app = { - name: 'µBlock', - version: '0.8.2.0' + name: vAPI.app[0], + version: vAPI.app[1] }; /******************************************************************************/ diff --git a/platform/safari/Info.plist b/platform/safari/Info.plist index 7c1da4c86..0e05e50b5 100644 --- a/platform/safari/Info.plist +++ b/platform/safari/Info.plist @@ -21,7 +21,7 @@ Database Quota 52428800 Global Page - background.html + background.html#{appInfo} Popovers diff --git a/platform/safari/vapi-background.js b/platform/safari/vapi-background.js index 50cfea73b..8de551385 100644 --- a/platform/safari/vapi-background.js +++ b/platform/safari/vapi-background.js @@ -32,20 +32,14 @@ /******************************************************************************/ self.vAPI = self.vAPI || {}; - vAPI.safari = true; /******************************************************************************/ -var xhr = new XMLHttpRequest; -xhr.overrideMimeType('application/x-javascript;charset=utf-8'); -xhr.open('GET', 'Info.plist', false); -xhr.send(); -xhr = xhr.responseText; - +vAPI.app = location.hash.slice(1).split(','); vAPI.app = { - name: xhr.match(/DisplayName<\S+[^>]+>([^<]+)/)[1], - version: xhr.match(/ShortVersionString<\S+[^>]+>([^<]+)/)[1] + name: decodeURIComponent(vAPI.app[0]), + version: vAPI.app[1] }; /******************************************************************************/ diff --git a/tools/make-safari-meta.py b/tools/make-safari-meta.py index 1581faaf0..5c57cb2ba 100755 --- a/tools/make-safari-meta.py +++ b/tools/make-safari-meta.py @@ -5,6 +5,7 @@ import json import sys import codecs from time import time +from urllib import parse from shutil import rmtree from collections import OrderedDict @@ -58,6 +59,14 @@ with codecs.open(chromium_manifest, encoding='utf8') as m: manifest['buildNumber'] = int(time()) manifest['description'] = description +# pass "#name,version" as the fragment in the URL of the background script +manifest['appInfo'] = ','.join([ + parse.quote(manifest['name']), + manifest['version'] +]) + +info_plist = pj(build_dir, 'Info.plist') + with codecs.open(pj(build_dir, 'Info.plist'), 'r+', encoding='utf8') as f: info_plist = f.read() f.seek(0)