I made a really basic chrome extension and set up a simple node.js server to test the auto-update. The server hosts the .crx file so I can install the extension without any trouble simply by visiting localhost:3000/clients/chrome/extension.crx
. But when I go to tools->extensions
and click on Update extensions now
, the server doesn't receive a request. I would have expected chrome to GET localhost:3000/clients/chrome/updates.xml
but this is not happening. What am I doing wrong here?
CODE
Let me just walk you through the code to make this reproductible:
$ tree
.
|-- clients
| `-- chrome
| |-- extension
| | `-- manifest.json
| |-- extension.crx
| |-- extension.pem
| `-- updates.xml
`-- web.js
The extension is really just a manifest file.
manifest.json
{
"name": "testing auto-updates",
"version": "1.0",
"update_url": "localhost:3000/clients/chrome/updates.xml",
"description": "Version 1.0"
}
As you can see, I'm referring to an update_url to make auto-updating possible.
updates.xml
<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='fkphbmkcjefhhnnlhhjlnkellidponel'>
<updatecheck codebase='localhost:3000/clients/chrome/extension.crx' version='1.0' />
</app>
</gupdate>
Packaging the extension creates extension.crx and extension.pem.
I also made a simple node.js server to serve the files:
web.js
var express = require('express');
var app = express.createServer(express.logger());
/* ROUTES */
app.get('/clients/chrome/extension.crx', function(request, response)
{
response.contentType('application/x-chrome-extension');
response.sendfile('clients/chrome/extension.crx');
});
app.get('/clients/chrome/updates.xml', function(request, response)
{
response.sendfile('clients/chrome/updates.xml');
});
/* ROUTES END */
var port = process.env.PORT || 3000;
app.listen(port, function() {
console.log("Listening on " + port);
});
Ok, let's test this. First, start the server: $ node web.js
Listening on 3000
Install the extension by visiting localhost:3000/clients/chrome/extension.crx. This part works fine on the second try. The server logs both tries:
127.0.0.1 - - [Thu, 26 Apr 2012 22:22:50 GMT] "GET /clients/chrome/extension.crx HTTP/1.1" 200 596 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.19 (KHTML, like Gecko) Ubuntu/11.10 Chromium/18.0.1025.151 Chrome/18.0.1025.151 Safari/535.19"
127.0.0.1 - - [Thu, 26 Apr 2012 22:25:47 GMT] "GET /clients/chrome/extension.crx HTTP/1.1" 304 - "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.19 (KHTML, like Gecko) Ubuntu/11.10 Chromium/18.0.1025.151 Chrome/18.0.1025.151 Safari/535.19"
Next, I go to tools->extensions and click on Update extensions now
. I'm expecting chrome to get the updates.xml file to see if anything has changed, but the server doesn't log any requests.