[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