<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Oxymoronical &#187; mozilla</title>
	<atom:link href="http://stage.oxymoronical.com/blog/category/technical/mozilla/feed" rel="self" type="application/rss+xml" />
	<link>http://stage.oxymoronical.com</link>
	<description>Spouting nonsense from the depths of my spare time</description>
	<lastBuildDate>Wed, 23 Nov 2011 20:15:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>How Crashplan breaks xpcshell tests on Windows</title>
		<link>http://stage.oxymoronical.com/blog/2011/11/How-Crashplan-breaks-xpcshell-tests-on-Windows</link>
		<comments>http://stage.oxymoronical.com/blog/2011/11/How-Crashplan-breaks-xpcshell-tests-on-Windows#comments</comments>
		<pubDate>Wed, 23 Nov 2011 20:15:52 +0000</pubDate>
		<dc:creator>Mossop</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.oxymoronical.com/?p=1173</guid>
		<description><![CDATA[I recently switched to a Windows laptop and have been going through the usual teething pains related. One thing that confused me though was that when I was running xpcshell tests on my new machine they would frequently fail with access denied errors. I&#8217;ve seen this sort of thing before so I know some service [...]]]></description>
			<content:encoded><![CDATA[<p>I recently switched to a Windows laptop and have been going through the usual teething pains related. One thing that confused me though was that when I was running xpcshell tests on my new machine they would frequently fail with access denied errors. I&#8217;ve seen this sort of thing before so I know some service was monitoring files and opening them after they had changed, when this happens they can&#8217;t be deleted or edited until the service closes them again and often tests open, close and delete files so fast that there isn&#8217;t time for that to happen.</p>
<p>It took me a little while to remember that I can just use <a href="http://technet.microsoft.com/en-us/sysinternals/bb896645">Process Monitor</a> to track down the offending service. Just fire it up, set a filter to only include results to a particular directory (the temp directory in this case) and go create a file there and see what shows up. I was quite surprised to see <a href="http://www.crashplan.com/">Crashplan</a>, the backup software I (and probably many people in Mozilla) use. Surprised because Crashplan isn&#8217;t set to backup my temp directory and really I shudder to think what the performance cost is of something continually accessing every file that changes in the temp directory.</p>
<p>Turns out you can turn it off though. Hidden in the depths of Crashplan&#8217;s advanced backup settings is an option to disable real-time filesystem watching. From what I can see online the downside to this is that files will only be backed up once a day, but that&#8217;s a pretty fine tradeoff to  having functioning xpcshell tests for me. There is also an option to put crashplan to sleep for an hour or so, that seems to work too but I don&#8217;t know exactly what that does.</p>
<p>It confuses me a little why Crashplan monitors files it never intends to backup (even when the backup server isn&#8217;t connected and backups aren&#8217;t in progress) and it is quite a lot of file accesses it does too. Seems likely to be a bug to me but at least I can workaround it for now.</p>
]]></content:encoded>
			<wfw:commentRss>http://stage.oxymoronical.com/blog/2011/11/How-Crashplan-breaks-xpcshell-tests-on-Windows/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Overlays without overlays in restartless add-ons</title>
		<link>http://stage.oxymoronical.com/blog/2011/10/Overlays-without-overlays-in-restartless-add-ons</link>
		<comments>http://stage.oxymoronical.com/blog/2011/10/Overlays-without-overlays-in-restartless-add-ons#comments</comments>
		<pubDate>Mon, 31 Oct 2011 01:43:46 +0000</pubDate>
		<dc:creator>Mossop</dc:creator>
				<category><![CDATA[mozilla]]></category>
		<category><![CDATA[addons]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[restartless]]></category>

		<guid isPermaLink="false">http://www.oxymoronical.com/?p=1163</guid>
		<description><![CDATA[Perhaps the most common way of making changes to Firefox with an extension has always been using the overlay. For a window&#8217;s UI you can make changes to the underlying XUL document, add script elements to be executed in the context of the normal window&#8217;s code and add new stylesheets to the window to change [...]]]></description>
			<content:encoded><![CDATA[<p>Perhaps the most common way of making changes to Firefox with an extension has always been using the overlay. For a window&#8217;s UI you can make changes to the underlying XUL document, add script elements to be executed in the context of the normal window&#8217;s code and add new stylesheets to the window to change how the UI looks.</p>
<p>Restartless add-ons change this around completely, the normal overlay and style-overlay mechanisms just aren&#8217;t available to restartless add-ons and this is likely to remain true for a while, these methods don&#8217;t clean up after themselves when the add-on is uninstalled.</p>
<p>This can make things hard, particularly for porting older add-ons to become restartless. I was in this situation earlier this weekend. I was working on porting <a href="http://blog.ascher.ca/">David Ascher</a>&#8216;s WebTabs for Thunderbird to be restartless. I could have just moved all the script code over to bootstrap.js but in many ways it is nice to keep the code that works on the main UI separate to the code that runs for the preferences UI etc. Plus I like to play around with new ways of doing things so I developed a JS module I&#8217;m calling the <code>OverlayManager</code>.</p>
<p>The <code>OverlayManager</code> watches for new windows being opened and for every new window it can run JS script and apply CSS stylesheets to the window in a way that is easy to undo if the add-on is disabled at runtime. Although it can&#8217;t do any XUL modifications right now (I didn&#8217;t need any for this particular extension) it would be pretty easy to extend this to support a minimum about of XUL overlays.</p>
<p>Stylesheets are loaded by adding a HTML style tag to the XUL document, so they can be removed easily when the add-on is disabled. Scripts are handled in a way that may even be better than normal overlays. In the old system extension scripts all run in the same context as the window they overlay giving rise to the possibility of conflicts. Restartless add-ons shouldn&#8217;t do this since it makes removing the script code again much more troublesome. The <code>OverlayManager</code> handles it by creating a sandbox to run the script in. The sandbox&#8217;s prototype is set to the window the script is being run for meaning the script sees all the functions and objects of the window directly in its own scope but as long as it doesn&#8217;t modify any of the objects in the main window&#8217;s code all we have to do is throw away the sandbox to get rid of its JS.</p>
<p>There are a few things different of course. The script shouldn&#8217;t use load and unload event handlers for the window as it may get loaded well after the window does or unloaded well before. Instead the <code>OverlayManager</code> looks for an <code>OverlayListener</code> object in the script and calls <code>load</code> and <code>unload</code> methods on it, these are called either with the window&#8217;s real <code>load</code> and <code>unload</code> events or while the window is open normally. You also can&#8217;t reference code in the script from JS string blocks, so if you set <code>onclick="myfunc()"</code> on a XUL element it wouldn&#8217;t work because that would run in the main window scope which can&#8217;t see the sandbox code at that point. This tends to be pretty simple to get around by using <code>addEventListener</code> for all your events though.</p>
<p>You can see the existing state of the code <a href="https://github.com/Mossop/WebAppTabs/blob/master/src/modules/OverlayManager.jsm">on github</a> and an example of the structure you&#8217;d pass to <code>OverlayManager.addOverlays</code> is in the <a href="https://github.com/Mossop/WebAppTabs/blob/master/src/bootstrap.js#L42">bootstrap script</a> for the same project. It is appropriately licensed so go nuts!</p>
<p><strong>Update:</strong> I changed the stylesheets to use XML processing instructions to be more like they work currently and just for fun I implemented the very basics of document overlaying, almost totally untested though so YMMV.</p>
]]></content:encoded>
			<wfw:commentRss>http://stage.oxymoronical.com/blog/2011/10/Overlays-without-overlays-in-restartless-add-ons/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Mossop Status Update: 2011-10-29</title>
		<link>http://stage.oxymoronical.com/blog/2011/10/Mossop-Status-Update-2011-10-29</link>
		<comments>http://stage.oxymoronical.com/blog/2011/10/Mossop-Status-Update-2011-10-29#comments</comments>
		<pubDate>Sat, 29 Oct 2011 09:50:23 +0000</pubDate>
		<dc:creator>Mossop</dc:creator>
				<category><![CDATA[mozilla]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[status]]></category>

		<guid isPermaLink="false">http://www.oxymoronical.com/?guid=e2f4f8c227014e46aac320cf1efb18cb</guid>
		<description><![CDATA[
      
          
            Done: 
Implemented a number of performance fixes for mobile (bug 696141 and dependents)
Reviewed more of the default to compatible work
Basic implementation for add-on hotfix (bug 694068)
Landed the final third-party add-...]]></description>
			<content:encoded><![CDATA[
      <div class="postdata">
          <div class="completed">
            <h4 class="posthead">Done:</h4> <ul>
<li>Implemented a number of performance fixes for mobile (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=696141">bug 696141</a> and dependents)</li>
<li>Reviewed more of the default to compatible work</li>
<li>Basic implementation for add-on hotfix (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=694068">bug 694068</a>)</li>
<li>Landed the final third-party add-on patches on aurora and beta</li>
<li>Product planning meeting for Firefoxes 8, 9 and 10</li>
</ul>
          </div>
          <div class="planned">
            <h4 class="posthead">Next:</h4> <ul>
<li>Finish the add-on hotfix work</li>
<li>Various HR stuff</li>
<li>Start planning Jetpack work week</li>
</ul>
          </div>
      </div>
    ]]></content:encoded>
			<wfw:commentRss>http://stage.oxymoronical.com/blog/2011/10/Mossop-Status-Update-2011-10-29/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mossop Status Update: 2011-10-14</title>
		<link>http://stage.oxymoronical.com/blog/2011/10/Mossop-Status-Update-2011-10-14</link>
		<comments>http://stage.oxymoronical.com/blog/2011/10/Mossop-Status-Update-2011-10-14#comments</comments>
		<pubDate>Fri, 14 Oct 2011 09:44:59 +0000</pubDate>
		<dc:creator>Mossop</dc:creator>
				<category><![CDATA[mozilla]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[status]]></category>

		<guid isPermaLink="false">http://www.oxymoronical.com/?guid=e5c76c4f0e881c2e081ce64dfa990152</guid>
		<description><![CDATA[
      
          
            Done: 
7.0.1 Post Mortem
Hotfix planning work
Understanding the new mobile architecture
Problems with third party add-ons in Firefox 8
Default to compatible planning
Final draft of Q4 goals

          
          
        ...]]></description>
			<content:encoded><![CDATA[
      <div class="postdata">
          <div class="completed">
            <h4 class="posthead">Done:</h4> <ul>
<li>7.0.1 Post Mortem</li>
<li>Hotfix planning work</li>
<li>Understanding the new mobile architecture</li>
<li>Problems with third party add-ons in Firefox 8</li>
<li>Default to compatible planning</li>
<li>Final draft of Q4 goals</li>
</ul>
          </div>
          <div class="planned">
            <h4 class="posthead">Next:</h4> <ul>
<li>Update module description for the Jetpack module</li>
<li>Fix third-party add-on detection problems</li>
</ul>
          </div>
      </div>
    ]]></content:encoded>
			<wfw:commentRss>http://stage.oxymoronical.com/blog/2011/10/Mossop-Status-Update-2011-10-14/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mossop Status Update: 2011-10-07</title>
		<link>http://stage.oxymoronical.com/blog/2011/10/Mossop-Status-Update-2011-10-07</link>
		<comments>http://stage.oxymoronical.com/blog/2011/10/Mossop-Status-Update-2011-10-07#comments</comments>
		<pubDate>Fri, 07 Oct 2011 12:10:56 +0000</pubDate>
		<dc:creator>Mossop</dc:creator>
				<category><![CDATA[mozilla]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[status]]></category>

		<guid isPermaLink="false">http://www.oxymoronical.com/?guid=b392ffcdb0ed0cd35bcf362b62a4a5d1</guid>
		<description><![CDATA[
      
          
            Done: 
Worked with the team to fix the version number problems with the last repacks
Security reviews for embedded add-on preferences and showing performance information to users
Working on Q4 goals for the team

        ...]]></description>
			<content:encoded><![CDATA[
      <div class="postdata">
          <div class="completed">
            <h4 class="posthead">Done:</h4> <ul>
<li>Worked with the team to fix the version number problems with the last repacks</li>
<li>Security reviews for embedded add-on preferences and showing performance information to users</li>
<li>Working on Q4 goals for the team</li>
</ul>
          </div>
          <div class="planned">
            <h4 class="posthead">Next:</h4> <ul>
<li>Finalize Q4 goals</li>
<li>Update module description for the Jetpack module</li>
</ul>
          </div>
      </div>
    ]]></content:encoded>
			<wfw:commentRss>http://stage.oxymoronical.com/blog/2011/10/Mossop-Status-Update-2011-10-07/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mossop Status Update: 2011-09-02</title>
		<link>http://stage.oxymoronical.com/blog/2011/09/Mossop-Status-Update-2011-09-02</link>
		<comments>http://stage.oxymoronical.com/blog/2011/09/Mossop-Status-Update-2011-09-02#comments</comments>
		<pubDate>Fri, 02 Sep 2011 09:02:42 +0000</pubDate>
		<dc:creator>Mossop</dc:creator>
				<category><![CDATA[mozilla]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[status]]></category>

		<guid isPermaLink="false">http://www.oxymoronical.com/?guid=616f35ee9e18e46c47f3750363c35ca0</guid>
		<description><![CDATA[
      
          
            Done: 
Worked with the Jetpack drivers to come up with a new way to prioritise bugs
Talked over issues with add-on compatibility and version upgrades
Helped prepare a test plan for SDK repacks
Killed most of my review que...]]></description>
			<content:encoded><![CDATA[
      <div class="postdata">
          <div class="completed">
            <h4 class="posthead">Done:</h4> <ul>
<li>Worked with the Jetpack drivers to come up with a new way to prioritise bugs</li>
<li>Talked over issues with add-on compatibility and version upgrades</li>
<li>Helped prepare a test plan for SDK repacks</li>
<li>Killed most of my review queue</li>
</ul>
          </div>
          <div class="planned">
            <h4 class="posthead">Next:</h4> <ul>
<li>Try to clear anything that is blocked on me before my vacation</li>
</ul>
          </div>
      </div>
    ]]></content:encoded>
			<wfw:commentRss>http://stage.oxymoronical.com/blog/2011/09/Mossop-Status-Update-2011-09-02/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mossop Status Update: 2011-08-26</title>
		<link>http://stage.oxymoronical.com/blog/2011/08/Mossop-Status-Update-2011-08-26</link>
		<comments>http://stage.oxymoronical.com/blog/2011/08/Mossop-Status-Update-2011-08-26#comments</comments>
		<pubDate>Fri, 26 Aug 2011 10:39:18 +0000</pubDate>
		<dc:creator>Mossop</dc:creator>
				<category><![CDATA[mozilla]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[status]]></category>

		<guid isPermaLink="false">http://www.oxymoronical.com/?guid=9b1b4a68552922c1b852c6ded537a25b</guid>
		<description><![CDATA[
      
          
            Done: 
Regular bug triage (epic bug triage deferred)
Tinkering with the Bugzilla APIs
Cleared out my inbox and review queues

          
          
            Next: 
Formalise priorities for the Jetpack team

Next week I...]]></description>
			<content:encoded><![CDATA[
      <div class="postdata">
          <div class="completed">
            <h4 class="posthead">Done:</h4> <ul>
<li>Regular bug triage (epic bug triage deferred)</li>
<li>Tinkering with the Bugzilla APIs</li>
<li>Cleared out my inbox and review queues</li>
</ul>
          </div>
          <div class="planned">
            <h4 class="posthead">Next:</h4> <ul>
<li>Formalise priorities for the Jetpack team</li>
</ul>
<p>Next week I&#039;ll probably be in and out randomly as relatives and friends are going to be in town</p>
          </div>
      </div>
    ]]></content:encoded>
			<wfw:commentRss>http://stage.oxymoronical.com/blog/2011/08/Mossop-Status-Update-2011-08-26/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mossop Status Update: 2011-08-15</title>
		<link>http://stage.oxymoronical.com/blog/2011/08/Mossop-Status-Update-2011-08-15</link>
		<comments>http://stage.oxymoronical.com/blog/2011/08/Mossop-Status-Update-2011-08-15#comments</comments>
		<pubDate>Mon, 15 Aug 2011 12:50:15 +0000</pubDate>
		<dc:creator>Mossop</dc:creator>
				<category><![CDATA[mozilla]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[status]]></category>

		<guid isPermaLink="false">http://www.oxymoronical.com/?guid=9225a7c2ea17e925ce35624193a88bd3</guid>
		<description><![CDATA[
      
          
            Done: 
Landed UI to allow users to check they have the add-ons they want on next upgrade (bug 596343)
Landed UI to allow users to confirm that they want third-party add-ons before they are enabled (bug 476430)
E10S planni...]]></description>
			<content:encoded><![CDATA[
      <div class="postdata">
          <div class="completed">
            <h4 class="posthead">Done:</h4> <ul>
<li>Landed UI to allow users to check they have the add-ons they want on next upgrade (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=596343">bug 596343</a>)</li>
<li>Landed UI to allow users to confirm that they want third-party add-ons before they are enabled (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=476430">bug 476430</a>)</li>
<li>E10S planning</li>
</ul>
          </div>
          <div class="planned">
            <h4 class="posthead">Next:</h4> <ul>
<li>Fix test failures on aurora</li>
<li>Mobile planning</li>
</ul>
          </div>
      </div>
    ]]></content:encoded>
			<wfw:commentRss>http://stage.oxymoronical.com/blog/2011/08/Mossop-Status-Update-2011-08-15/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding add-on preferences to the Add-ons Manager</title>
		<link>http://stage.oxymoronical.com/blog/2011/07/Adding-add-on-preferences-to-the-Add-ons-Manager</link>
		<comments>http://stage.oxymoronical.com/blog/2011/07/Adding-add-on-preferences-to-the-Add-ons-Manager#comments</comments>
		<pubDate>Thu, 07 Jul 2011 18:06:32 +0000</pubDate>
		<dc:creator>Mossop</dc:creator>
				<category><![CDATA[mozilla]]></category>
		<category><![CDATA[addons]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[extension manager]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[restartless]]></category>

		<guid isPermaLink="false">http://www.oxymoronical.com/?p=1089</guid>
		<description><![CDATA[For some time now Firefox for mobile has had this nice feature where add-ons could embed their preferences right into the list of add-ons, no need to open a whole a new window like add-ons for desktop have to. During the development of Firefox 4 we were a little jealous of what the mobile team [...]]]></description>
			<content:encoded><![CDATA[<p>For some time now Firefox for mobile has had this nice feature where add-ons could embed their preferences right into the list of add-ons, no need to open a whole a new window like add-ons for desktop have to. During the development of Firefox 4 we were a little jealous of what the mobile team had done and so we drew up some ideas for how the same functionality would look on desktop. We didn&#8217;t get time to implement them then but I&#8217;m excited that someone from the community stepped up and implemented it for us. Not just that but he made the code shared between mobile and desktop, added some new option types and made it work fine for restartless add-ons which are unable to register their own chrome.</p>
<p>The basic idea is simple. Create a XUL file containing a list of <code>&lt;setting&gt;</code> elements. Different types of settings are possible, checkboxes, input boxes, menulists, buttons, etc. Each one shows up as a row in the details view for an add-on in the add-ons manager. The XUL file can either be just added to your XPI (call it <code>options.xul</code>) or referenced by the <code>optionsURL</code> option in your <code>install.rdf</code>.</p>
<p>Get it right and you&#8217;ll see something like this:</p>
<p style="text-align: center;"><a href="http://www.oxymoronical.com/wp/wp-content/uploads/2011/07/Screen-shot-2011-07-07-at-10.57.04.png"><img class="aligncenter size-full wp-image-1090" title="Inline preferences in the Add-ons Manager" src="http://www.oxymoronical.com/wp/wp-content/uploads/2011/07/Screen-shot-2011-07-07-at-10.57.04.png" alt="" width="739" height="631" /></a></p>
<p style="text-align: left;">I want to thank <a href="http://www.darktrojan.net">Geoff Lankow (darktrojan on IRC)</a> for his awesome work getting this done. This feature is now in the <a href="http://www.mozilla.com/firefox/channel/">Aurora</a> builds and it&#8217;d be great to get add-on developers playing with it. Geoff even wrote up some <a href="https://developer.mozilla.org/en/Extensions/Inline_Options">detailed docs</a> to help you out.</p>
<p>As a bonus Geoff also implemented support for in-tab preferences. This makes Firefox load an add-ons options UI in a new tab instead of a new window. Setting the <code><a href="https://developer.mozilla.org/en/Install_Manifests#optionsType">optionsType</a></code> property to 3 enables this.</p>
]]></content:encoded>
			<wfw:commentRss>http://stage.oxymoronical.com/blog/2011/07/Adding-add-on-preferences-to-the-Add-ons-Manager/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Unloading JS modules</title>
		<link>http://stage.oxymoronical.com/blog/2011/07/Unloading-JS-modules</link>
		<comments>http://stage.oxymoronical.com/blog/2011/07/Unloading-JS-modules#comments</comments>
		<pubDate>Thu, 07 Jul 2011 17:26:44 +0000</pubDate>
		<dc:creator>Mossop</dc:creator>
				<category><![CDATA[mozilla]]></category>
		<category><![CDATA[addons]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[restartless]]></category>

		<guid isPermaLink="false">http://www.oxymoronical.com/?p=1079</guid>
		<description><![CDATA[One of the problems with writing a restartless add-on is that you have to be careful about undoing anything your add-on does when it is told to shutdown. This means that right now some features of the platform can&#8217;t be used as we have no way to undo them. Recently I made this list a [...]]]></description>
			<content:encoded><![CDATA[<p>One of the problems with writing a restartless add-on is that you have to be careful about undoing anything your add-on does when it is told to shutdown. This means that right now some features of the platform can&#8217;t be used as we have no way to undo them. Recently I made this list a little shorter by making it possible to unload JS modules loaded with <code>Components.utils.import()</code>.</p>
<p>Just call <code>Components.utils.unload(uri)</code> and the module loaded from that URI will be unloaded. Take care when you do this because something might still have references into it which will stop working. Firefox also caches the module&#8217;s code for fast loading the next time around. The add-ons manager clears this cache when your add-on is updated or uninstalled so you mostly don&#8217;t have to worry about it but if you do something strange like unload a module, manually alter the file and then import it again you won&#8217;t get the latest code.</p>
<p>This support is in the upcoming <a href="http://www.mozilla.com/firefox/channel/">Aurora</a> build.</p>
]]></content:encoded>
			<wfw:commentRss>http://stage.oxymoronical.com/blog/2011/07/Unloading-JS-modules/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

