Firefox 5 for developers
Firefox 5, based on Gecko 5.0, was released on June 21, 2011. This article provides links to information about the changes that affect developers in this release.
Changes for web developers
- All HTML elements now have the
accessKeyattribute, as well as the
focus()methods. These are specified in the
- In order to comply with the HTML5 specification, support for the UTF-7 and UTF-32 character sets has been removed.
- When in quirks mode, empty
<map>s are no longer skipped over in favor of non-empty ones when matching. See the Gecko notes on the
<map>element for details.
- Firefox mobile on Android now supports WOFF fonts for
- WebGL no longer loads textures from domains other than the originating domain, as a security measure. HTTP access control support should be coming sometime in the future to make this possible more securely.
<canvas>2D drawing context now supports specifying an
ImageDataobject as the input to the
createImageData()method; this creates a new
ImageDataobject initialized with the same dimensions as the specified object, but still with all pixels preset to transparent black. This was documented as implemented already but was not.
- Specifying non-finite values when adding color stops through a call to the
addColorStop()now correctly throws
toDataURL()now correctly lower-cases the specified MIME type before matching.
getImageData()now correctly accepts rectangles that extend beyond the bounds of the canvas; pixels outside the canvas are returned as transparent black.
createImageData()now handle negative arguments in accordance with the specification, by flipping the rectangle around the appropriate axis. We need an article about CSS sizing and how this works.
- Specifying non-finite values when calling
createImageData()now properly throws a
getImageData()now correctly return at least one pixel's worth of image data if a rectangle smaller than one pixel is specified.
- Specifying a negative radius when calling
createRadialGradient()now correctly throws
- Specifying a
undefinedimage when calling
drawImage()now correctly throws a
- Specifying invalid values for
globalAlphano longer throws a
SYNTAX_ERRexception; these are now correctly silently ignored.
- Specifying invalid values when calling
arc()no longer throws an exception; these calls are now correctly silently ignored.
- Setting the value of
shadowBlurto an invalid value is now silently ignored.
- Setting the value of
scaleto an invalid value is now silently ignored.
- CSS animations
Support for CSS animations has been added, using the
-moz-prefix for now.
modify()method has been changed so that the "word" selection granularity no longer includes trailing spaces; this makes it more consistent across platforms and matches the behavior of WebKit's implementation.
setTimeout()method now clamps to send no more than one timeout per second in inactive tabs. In addition, it now clamps nested timeouts to the smallest value allowed by the HTML5 specification: 4 ms (instead of the 10 ms it used to clamp to).
- Similarly, the
setInterval()method now clamps to no more than one interval per second in inactive tabs.
XMLHttpRequestnow supports the
loadendevent for progress listeners. This is sent after any transfer is finished (that is, after the
loadevent). You can use this to handle any tasks that need to be performed regardless of success or failure of a transfer.
Bloband, by extension, the
slice()method has been removed and replaced with a new, proposed syntax that makes it more consistent with
- The value of
window.navigator.languageis now determined by looking at the value of the
Element.prefixproperty is now read only, as required by the DOM specification.
HTMLVideoElementnow supports experimental properties to get information about video paint statistics like frame rates.
- Regular expressions are no longer callable as if they were functions; this change has been made in concert with the WebKit team to ensure compatibility (see Webkit bug 28285. This feature had existed for a long time but was never documented (at least, not here on MDC).
Function.prototype.isGenerator()method is now supported; this lets you determine if a function is a generator.
- The following reserved words were previously only treated as reserved when in strict mode; now they're always treated as reserved:
- DOM documents created in chrome code may no longer be exposed to sandboxed scripts.
- The JSON parser has been re-written for improved speed and compliance. This includes a fix for Firefox bug 572279.
classSVG attribute can now be animated.
- The following SVG-related DOM interfaces representing lists of objects are now indexable and can be accessed like arrays; in addition, they have a
lengthproperty indicating the number of items in the lists:
- Firefox no longer sends the
Keep-AliveHTTP header; we weren't formatting it correctly, and it was redundant since we were also sending the
Proxy-Connectionheader with the value "keep-alive" anyway.
- The HTTP transaction model has been updated to be more intelligent about reusing connections in the persistent connection pool; instead of treating the pool as a FIFO queue, Necko now attempts to sort the pool with connections with the largest congestion window (CWND) first. This can reduce the round-trip time (RTT) of HTTP transactions by avoiding the need to grow connections' windows in many cases.
- Firefox now handles the
Content-DispositionHTTP response header more effectively if both the
filename*parameters are provided; it looks through all provided names, using the
filename*parameter if one is available, even if a
filenameparameter is included first. Previously, the first matching parameter would be used, thereby preventing a more appropriate name from being used. See Firefox bug 588781.
- Support for embellished operators
- The Web Console's
Consoleobject now has a
debug()method, which is an alias for its
log()method; this improves compatibility with certain existing sites.
Changes for Mozilla and add-on developers
For a guide to updating your add-on for Firefox 5, please see Updating add-ons for Firefox 5.
Note: Firefox 5 requires that binary components be recompiled, as do all major releases of Firefox. See Binary Interfaces for details.
Dict.jsmcode module was added; it provides an API for dictionaries of key/value pairs.
asyncFetch()method now supports specifying the input source as an
nsIHttpChannelInternalinterface has new attributes providing access to information about the channels' endpoints' addresses and ports. This information is provided primarily for debugging purposes.
heightattributes are now reflected in IDL as unsigned integers instead of signed (see
nsIAppStartup_MOZILLA_2_0interfaces have been merged into the
nsIDocShell_MOZILLA_2_0_BRANCHinterface has been merged into the
nsIFocusManager_MOZILLA_2_0_BRANCHinterface has been merged into the
nsIHTMLEditor_MOZILLA_2_0_BRANCHinterface has been merged into the
The following interfaces were implementation details that are no longer needed:
nsICiter(see Firefox bug 633066)
nsIDOM3Document(see Firefox bug 639849)
nsISelectElement(see Firefox bug 619996)
- The new
DebugOnly<T>helper makes it possible to declare variables only for
JS_DoubleToUint32()have been added, for converting
jsdoublevalues into C integers and unsigned integers.
Build system changes
- You can now build Firefox without a
--enable-applicationsetting now defaults to "browser". After pulling or downloading the code, you can
configure && make(or
make -f client.mk) to build Firefox.