[Pkg-mozext-commits] [adblock-plus] 344/464: Automatically reload Chrome development environment when it updates (manifest and strings don't get reloaded)

David Prévot taffit at moszumanska.debian.org
Tue Jul 22 20:44:32 UTC 2014


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

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

commit 7d2ac09ca95307b8368d0958fd818c2c41c8ddc0
Author: Wladimir Palant <trev at adblockplus.org>
Date:   Thu Dec 20 15:32:32 2012 +0100

    Automatically reload Chrome development environment when it updates (manifest and strings don't get reloaded)
---
 chromeDevenvPoller__.js.tmpl | 27 +++++++++++++++++++++++++++
 packagerChrome.py            | 35 +++++++++++++++++++++++++++++++++++
 2 files changed, 62 insertions(+)

diff --git a/chromeDevenvPoller__.js.tmpl b/chromeDevenvPoller__.js.tmpl
new file mode 100644
index 0000000..2712ae9
--- /dev/null
+++ b/chromeDevenvPoller__.js.tmpl
@@ -0,0 +1,27 @@
+(function()
+{
+  var basename = {{metadata.get("general", "basename")|json}};
+
+  function doPoll()
+  {
+    var request = new XMLHttpRequest();
+    request.open("GET", "http://localhost:43816/");
+    request.addEventListener("load", function()
+    {
+      if (request.responseText != basename)
+        return;
+
+      var views = chrome.extension.getViews();
+      for (var i = 0; i < views.length; i++)
+        if (views[i] != window)
+          views[i].close();
+      window.location.reload();
+    }, false);
+    request.send(null);
+
+    window.setTimeout(doPoll, 5000);
+  }
+
+  // Delay first poll to prevent reloading again immediately after a reload
+  window.setTimeout(doPoll, 10000);
+})();
diff --git a/packagerChrome.py b/packagerChrome.py
index 3a3f03d..16d2495 100644
--- a/packagerChrome.py
+++ b/packagerChrome.py
@@ -92,6 +92,8 @@ def createManifest(params):
 
   if metadata.has_option('general', 'backgroundScripts'):
     templateData['backgroundScripts'] = re.split(r'\s+', metadata.get('general', 'backgroundScripts'))
+    if params['devenv']:
+      templateData['backgroundScripts'].append('devenvPoller__.js')
 
   if metadata.has_option('general', 'webAccessible'):
     templateData['webAccessible'] = re.split(r'\s+', metadata.get('general', 'webAccessible'))
@@ -118,6 +120,12 @@ def createManifest(params):
 
   return manifest.encode('utf-8')
 
+def createPoller(params):
+  env = jinja2.Environment(loader=jinja2.FileSystemLoader(buildtools.__path__[0]))
+  env.filters.update({'json': json.dumps})
+  template = env.get_template('chromeDevenvPoller__.js.tmpl')
+  return template.render(params).encode('utf-8');
+
 def readFile(params, files, path):
   ignoredFiles = getIgnoredFiles(params)
   if os.path.isdir(path):
@@ -231,6 +239,9 @@ def createBuild(baseDir, outFile=None, buildNum=None, releaseBuild=False, keyFil
   if metadata.has_section('convert_js') and os.path.isdir(os.path.join(baseDir, 'jshydra')):
     convertJS(params, files)
 
+  if devenv:
+    files['devenvPoller__.js'] = createPoller(params)
+
   zipdata = packFiles(files)
   signature = None
   pubkey = None
@@ -245,3 +256,27 @@ def createDevEnv(baseDir):
   zip = ZipFile(StringIO(fileBuffer.getvalue()), 'r')
   zip.extractall(os.path.join(baseDir, 'devenv'))
   zip.close()
+
+  print 'Development environment created, waiting for connections from active extensions...'
+  metadata = readMetadata(baseDir)
+  connections = [0]
+
+  import SocketServer, time, thread
+
+  class ConnectionHandler(SocketServer.BaseRequestHandler):
+    def handle(self):
+      connections[0] += 1
+      self.request.sendall('HTTP/1.0 OK\nConnection: close\n\n%s' % metadata.get('general', 'basename'))
+
+  server = SocketServer.TCPServer(('localhost', 43816), ConnectionHandler)
+
+  def shutdown_server(server):
+    time.sleep(10)
+    server.shutdown()
+  thread.start_new_thread(shutdown_server, (server,))
+  server.serve_forever()
+
+  if connections[0] == 0:
+    print 'Warning: No incoming connections, extension probably not active in the browser yet'
+  else:
+    print 'Handled %i connection(s)' % connections[0]

-- 
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