[Pkg-mozext-commits] [adblock-plus] 22/87: Issue 2850 - Get rid of synchronous XMLHttpRequest on startup, embed JSON files directly instead

David Prévot taffit at moszumanska.debian.org
Sat Apr 30 17:59:04 UTC 2016


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository adblock-plus.

commit c20bb8cba65dfbc91969ce74fb9f05be19613baf
Author: Wladimir Palant <trev at adblockplus.org>
Date:   Mon Mar 7 13:26:05 2016 +0100

    Issue 2850 - Get rid of synchronous XMLHttpRequest on startup, embed JSON files directly instead
---
 bootstrap.js.tmpl |  5 ++++-
 lib/prefs.js      | 10 +++-------
 packagerGecko.py  | 20 ++++++++++++++------
 3 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/bootstrap.js.tmpl b/bootstrap.js.tmpl
index 065a06b..165b831 100644
--- a/bootstrap.js.tmpl
+++ b/bootstrap.js.tmpl
@@ -83,7 +83,7 @@ function install(params, reason) {}
 
 function uninstall(params, reason)
 {
-  {%- if hasVersionPref %}
+  {%- if 'currentVersion' in jsonRequires.get('prefs.json', {}).get('defaults', {}) %}
   const ADDON_UNINSTALL = 6;  // https://developer.mozilla.org/en/Extensions/Bootstrapped_extensions#Reason_constants
   if (reason == ADDON_UNINSTALL)
   {
@@ -173,6 +173,9 @@ function require(module)
   return scopes[module].exports;
 }
 require.scopes = Object.create(null);
+{%- for name, data in jsonRequires.iteritems() %}
+require.scopes[{{name|json}}] = {exports: {{data|json}}};
+{%- endfor %}
 
 {%- if hasChromeRequires %}
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
diff --git a/lib/prefs.js b/lib/prefs.js
index eb670a7..d1ebb95 100644
--- a/lib/prefs.js
+++ b/lib/prefs.js
@@ -17,13 +17,9 @@ function init()
   // Load default preferences and set up properties for them
   let defaultBranch = Services.prefs.getDefaultBranch(branchName);
 
-  let request = new XMLHttpRequest();
-  request.open("GET", addonRoot + "defaults/prefs.json", false);
-  request.responseType = "json";
-  request.send();
-
-  let defaults = request.response.defaults;
-  let preconfigurable = new Set(request.response.preconfigurable);
+  let prefsData = require("prefs.json");
+  let defaults = prefsData.defaults;
+  let preconfigurable = new Set(prefsData.preconfigurable);
   for (let pref in defaults)
   {
     let value = defaults[pref];
diff --git a/packagerGecko.py b/packagerGecko.py
index 39d2cb8..c9a156e 100644
--- a/packagerGecko.py
+++ b/packagerGecko.py
@@ -53,7 +53,7 @@ def getChromeSubdirs(baseDir, locales):
   return result
 
 def getPackageFiles(params):
-  result = set(('chrome', 'components', 'modules', 'lib', 'resources', 'defaults', 'chrome.manifest', 'icon.png', 'icon64.png',))
+  result = set(('chrome', 'components', 'modules', 'lib', 'resources', 'chrome.manifest', 'icon.png', 'icon64.png',))
 
   baseDir = params['baseDir']
   for file in os.listdir(baseDir):
@@ -209,15 +209,23 @@ def fixupLocales(params, files):
       else:
         files[path] = reference[file]['_origData'].encode('utf-8')
 
+def processJSONFiles(params, files):
+  prefix = 'lib/'
+  for name, content in files.iteritems():
+    if name.startswith(prefix) and name.endswith('.json'):
+      params['jsonRequires'][name[len(prefix):]] = json.loads(content)
+  for name in params['jsonRequires'].iterkeys():
+    del files[prefix + name]
+
 def addMissingFiles(params, files):
   templateData = {
     'hasChrome': False,
     'hasChromeRequires': False,
     'hasShutdownHandlers': False,
     'hasXMLHttpRequest': False,
-    'hasVersionPref': False,
     'chromeWindows': [],
-    'requires': {},
+    'requires': set(),
+    'jsonRequires': params['jsonRequires'],
     'metadata': params['metadata'],
     'multicompartment': params['multicompartment'],
     'applications': dict((v, k) for k, v in KNOWN_APPS.iteritems()),
@@ -226,7 +234,7 @@ def addMissingFiles(params, files):
   def checkScript(name):
     content = files[name]
     for match in re.finditer(r'(?:^|\s)require\(\s*"([\w\-]+)"\s*\)', content):
-      templateData['requires'][match.group(1)] = True
+      templateData['requires'].add(match.group(1))
       if name.startswith('chrome/content/'):
         templateData['hasChromeRequires'] = True
     if name.startswith('lib/') and re.search(r'\bXMLHttpRequest\b', content):
@@ -238,8 +246,6 @@ def addMissingFiles(params, files):
   for name, content in files.iteritems():
     if name == 'chrome.manifest':
       templateData['hasChrome'] = True
-    elif name == 'defaults/prefs.json':
-      templateData['hasVersionPref'] = 'currentVersion' in json.loads(content).get('defaults', {})
     elif name.endswith('.js'):
       checkScript(name)
     elif name.endswith('.xul'):
@@ -336,6 +342,7 @@ def createBuild(baseDir, type="gecko", outFile=None, locales=None, buildNum=None
     'metadata': metadata,
     'contributors': contributors,
     'multicompartment': multicompartment,
+    'jsonRequires': {},
   }
 
   mapped = metadata.items('mapping') if metadata.has_section('mapping') else []
@@ -350,6 +357,7 @@ def createBuild(baseDir, type="gecko", outFile=None, locales=None, buildNum=None
       files.read(path, 'chrome/%s' % name, skip=skip)
   importLocales(params, files)
   fixupLocales(params, files)
+  processJSONFiles(params, files)
   if not 'bootstrap.js' in files:
     addMissingFiles(params, files)
   if metadata.has_section('preprocess'):

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/adblock-plus.git



More information about the Pkg-mozext-commits mailing list