1
votes

I am following the tutorial at http://www.borngeek.com/firefox/automatic-firefox-extension-updates/ to make my FF extension can be updated automatically to users, but I stuck at the last part "Hosting an Update Manifest" as I am using Tomcat serve and I have no ideas how to set up the .htaccess (Is the .htaccess file similar with WEB-INF directory in terms of configure server?)

What I have done so far,

Create a key pair: Public-Key and Private-Key

Calculate sha256: b3290c69a1...

Create update.rdf

<?xml version="1.0"?>
<r:RDF xmlns:r="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
        xmlns="http://www.mozilla.org/2004/em-rdf#">

<r:Description about="urn:mozilla:extension:[email protected]">
    <updates>
    <r:Seq>
    <r:li>
    <r:Description>
        <version>1.0.1</version>
        <targetApplication>
            <r:Description>
            <id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</id>
            <minVersion>3.5</minVersion>
            <maxVersion>5.0.*</maxVersion>
            <updateLink>http://localhost:8080/myextension/pluginupdate/myextension.xpi</updateLink>
            <updateHash>
                sha256:b3290c69a1...
            </updateHash>
            </r:Description>
        </targetApplication>
    </r:Description>
    </r:li>
    </r:Seq>
    </updates>
</r:Description>

</r:RDF>

Sign update.rdf using Key

Place singed update.rdf and myextension.xpi under pluginupdate directory, where pluginupdate is on the same level with WEB-INF.

My install.rdf

<?xml version="1.0"?>

<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 

     xmlns:em="http://www.mozilla.org/2004/em-rdf#">


  <Description about="urn:mozilla:install-manifest">


    <em:id>[email protected]</em:id>

    <em:name>My Test extension</em:name>

    <em:version>1.0</em:version>

    <em:description>Test Mozilla Extension.</em:description>

    <em:creator>TEST Group</em:creator>

    <!-- optional items -->

    <em:contributor>Me</em:contributor>

    <em:homepageURL>http://?????????/</em:homepageURL>

    <em:updateKey>

    MIGfMA0G.....

    </em:updateKey>

    <em:updateURL>http://localhost:8080/myextension/pluginupdate/update.rdf</em:updateURL>



    <!-- Firefox -->

    <em:targetApplication>

      <Description>

        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>

        <em:minVersion>3.5</em:minVersion>

        <em:maxVersion>5.0.*</em:maxVersion>

      </Description>

    </em:targetApplication>


  </Description>


</RDF>

When i restart FF Browser, nothing happens. When I start FF Browser using command line with option -console

*** LOG addons.xpi: startup
*** LOG addons.xpi: checkForChanges
*** LOG addons.xpi: No changes found
*** LOG addons.xpi: Opening database

So, how can I host and configure Tomcat to host the update manifest? Thanks

Update

Hi Wladimir,

After define in the MIME type in the web.xml, there are some more information given with the -console option.

I removed the extension and re-installed it, the logs are

*** LOG addons.xpi: startup
*** LOG addons.xpi: checkForChanges
*** LOG addons.xpi: No changes found
*** LOG addons.xpi: Opening database
*** LOG addons.repository: Requesting https://services.addons.mozilla.org/en-GB/firefox/api/1.5/search/guid:myextension%40mozilla.myextension.org?src=firefox&appOS=Linux&appVersion=5.0&tMain=23&tFirstPaint=1641&tSessionRestored=1042
*** LOG addons.xpi: Starting install of file:///home/me/browserplugindev/firefox/test/myextension.xpi
*** LOG addons.xpi: Addon [email protected] will be installed as a packed xpi
*** LOG addons.xpi: Install of file:///home/me/browserplugindev/firefox/test/myextension.xpi completed.
NOTE: child process received `Goodbye', closing down
*** LOG addons.xpi: shutdown
*** LOG addons.xpi: startup
*** LOG addons.xpi: checkForChanges
*** LOG addons.xpi: Found updated manifest for [email protected] in app-profile
*** LOG addons.xpi: Processing install of [email protected] in app-profile
*** LOG addons.xpi: Opening database
*** LOG addons.xpi: New add-on [email protected] installed in app-profile
*** LOG addons.xpi: Updating database with changes to installed add-ons
*** LOG addons.xpi: Updating add-on states
*** LOG addons.xpi: Writing add-ons list

Frome line

LOG addons.repository: Requesting https://services.addons.mozilla.org/en-GB/firefox/api/1.5/search/guid:myextension%40mozilla.myextension.org?src=firefox&appOS=Linux&appVersion=5.0&tMain=23&tFirstPaint=1641&tSessionRestored=1042

we can see that Update Manager (?) is making request to repository at https://services.addons.mozilla.org/en-GB/firefox/api/1.5/search/guid:myextension%40mozilla.myextension.org?src=firefox&appOS=Linux&appVersion=5.0&tMain=23&tFirstPaint=1641&tSessionRestored=1042

Also, after the startup

*** LOG addons.xpi: Found updated manifest for [email protected] in app-profile
*** LOG addons.xpi: Processing install of [email protected] in app-profile

So does it mean that the update is found. But I did not see the notification on the Browser that tell me something like "there is a new version of myextension, update?".

Did i miss anything?

1
Note that signing updates is unnecessary if you serve them over HTTPS - which might be simpler.Wladimir Palant
Hi, I just noticed that my "extensions.update.url" is set to something like versioncheck.addons.mozilla.org/update/…, Is this the problem?user200340
No, that's the default update address - if the extension specifies an update address it takes priority over the default.Wladimir Palant
ok, I just googled it and found out it. It seems that i am facing a difficult problem as i have stuck here for hours.user200340
@user200340: Please don't edit a question to turn it into a different question. If you have a new question - create a new question and credit the people who answered you. By editing a question you invalidate all the answers. See stackoverflow.com/faq#howtoaskWladimir Palant

1 Answers

3
votes

The point of the .htaccess file is simply ensuring that the server knows the MIME types. It seems that you can do that for Tomcat by changing conf/web.xml file:

<mime-mapping>
  <extension>xpi</extension>
  <mime-type>application/x-xpinstall</mime-type>
</mime-mapping>
<mime-mapping>
  <extension>rdf</extension>
  <mime-type>application/rdf+xml</mime-type>
</mime-mapping>

I looked through your update.rdf and install.rdf files and I don't see any obvious issues - it should work. You might want to go to about:config and switch on extensions.logging.enabled preference however, this will make sure that additional information is sent to the Error Console (press Ctrl-Shift-J to open or use -jsconsole on the command line).