Christian Biesinger <>, Mozilla Developer.


Release table

For my reference, here's a table of Gecko releases, their branch dates, and corresponding releases of other products:

Gecko release Release date Branch date Other products
Mozilla "0.6" 2000-12-06  ? Netscape 6.0
Mozilla 0.9.2 2001-06-29 2001-06-22 Netscape 6.1
Mozilla 0.9.4 2001-09-14 2001-09-04 Netscape 6.2
Mozilla 1.0 2002-05-29 2002-04-09 Netscape 7.0
Mozilla 1.1 2002-08-27 2002-08-05
Mozilla 1.2 2002-11-26 2002-11-05
Mozilla 1.3 2003-03-12 2003-02-21
Mozilla 1.4 2003-07-01 2003-05-23 Netscape 7.1
Mozilla 1.5 2003-10-07 2003-09-10
Mozilla 1.6 2004-01-15 2003-12-18
Mozilla 1.7 2004-06-17 2004-04-12 Camino 0.8.x; Netscape 7.2; Firefox 1.0 (off the aviary branch)
Mozilla 1.8 n/a 2005-08-12 Camino 1.0 (?); SeaMonkey 1.0; Firefox 1.5

Devmo articles to write

I want to write articles about these topics. (Need to verify that no articles on those topics exist already...)

Using nsIContentSniffer

  • Helper app dialogs in embedding apps
  • Handling binary data in JavaScript
  • Using nsIChannel
  • Overriding Gecko components (e.g. the bad cert listener)
  • Using the directory service

What's new in Gecko 1.9

This is my perspective of the developer-related news in gecko 1.9. Planned as a list of the changes I do, although I might add changes made by others to this list if I consider them important.

The stuff in the 1.8.1 section is also part of 1.9.

(This is kind of outdated by now, and probably incomplete. sorry. --biesi 17:42, 10 June 2006 (PDT))

  • <object> loading rewritten
    • The source of an object can be dynamically changed (object.setAttribute("data", "foo.swf") or equivalent; same for <embed> and <applet>) (qawanted on this part)
    • Fallback to alternate content for objects happens per the HTML4 specification
    • Server-sent type overrides the type attribute (not for embed/applet)
    • bug 1156
  • (largely bz's work, some parts by me) Pseudo-classes for broken and blocked plugins
    •  :-moz-broken, :-moz-user-disabled, :-moz-suppressed
    •  :-moz-loading
    • Not really meant for web developers; mostly an implementation detail (and for embeddors); maybe useful for userContent.css
    • Note that this work also added :-moz-empty-except-children-with-localname(tagname) which might be useful for some cases (namespace of tagname must be same as the one of the parent element. this selector mishandles dynamic changes)
    • bug 11011, bug 1156, others
  • Attempts to access local files using XMLHttpRequest will always try to parse them as XML, irrespective of what their extension is and of what the OS believes their type to be
    • bug 305243
  • allowing to use nsIEventQueue from javascript
    • bug 315442. nsIEventQueue is killed, nsIThread much changed. Long live nsIThreadManager.

Planned, not yet implemented:

  • Selectors :-moz-type-unsupported, :-moz-has-handlerref
    • bug 309521
  • text-shadow support
    • might be without blurring
    • bug 10713

Gecko 1.8.1

  • http-on-examine-response observers can modify/remove the cookie header
    • bug 313414


  • allowing extensions to intercept all redirects, giving them the old and new channels
    • DO NOT DO THIS BY IMPLEMENTING ";1" -- that would almost certainly create security bugs
    • bug 315598
  • Content sniffing
    • bug 324985

New in 1.8 already

Merged into Firefox 1.5 for Developers#XUL and Extension Developers, except for the bug numbers

  • Certificate prompts can now be overridden on a per-channel basis. This works by setting an interface requestor as an nsIChannel's notificationCallbacks and giving out an interface for nsIBadCertListener.
  • nsIWebBrowserPersist's listeners can now implement nsIInterfaceRequestor::GetInterface and will get an opportunity to provide all interfaces that channels might ask for, including nsIProgressEventSink (not too useful, redundant with nsIWebProgressListener). Useful interfaces here include nsIChannelEventSink and nsIBadCertListener.
    • bug 312370, bug 304286 (for nsIBadCertListener), bug 312367
  • Extensions or other necko consumers, including XMLHttpRequest, can set a Cookie header explicitly, and necko will not replace it. Stored cookies will be merged with the explicitly set header, in a way that the explicit header will override the stored cookies
    • bug 250375


Someone should write wiki pages about these. For now:

How to get all child frames of a window (from chrome JS, or C++, etc)

const nsIInterfaceRequestor = Components.interfaces.nsIInterfaceRequestor;
const nsIWebNavigation = Components.interfaces.nsIWebNavigation;
const nsIDocShellTreeNode = Components.interfaces.nsIDocShellTreeNode;

// win is a content window.
// if you just want the currently loaded page, use getBrowser().webNavigation instead to
// get the web navigation.
var webNav = win.QueryInterface(nsIInterfaceRequestor)
var node = webNav.QueryInterface(nsIDocShellTreeNode);

Then use the functions from that interface to get child nodes. Use nsIInterfaceRequestor::GetInterface(nsIDOMWindow) to get back to a DOM Window.

How to tell whether a frame finished loading (chrome JS, C++, etc)

const nsILoadGroup = Components.interfaces.nsILoadGroup;
var loadGroup = webNav.QueryInterface(nsIInterfaceRequestor)
var pending = loadGroup.isPending()

(webNav as above)