With 901 commits at WebKit, and 1,298 at chromium’s, last week boosted up to a massive 2,199 changes to the repositories. Highlights include a that WTF no longer is part of JavaScriptCore, a new image-set() CSS function and SPDY/3 which can now be enabled through about:flags.
Following much discussion and preparation, including e-mail threads going back more than a year, Eric Seidel moved the WTF (Web Template Framework) code out of JavaScriptCore. It initially settled there in 2005 as the kxmlcore directory, after which it got renamed to WTF in 2006 as many more useful classes had been included there.
JavaScript files and stylesheets will now be editable by default in Web Inspector’s Resources Panel. Highlighting of SVG root elements with a custom viewbox has been fixed and Source Maps may now be defined inline.
An initial implementation of the image-set() CSS function landed in WebKit, as was proposed for the CSS Images Level 4 module last month. Mixed percentage and absolute combinations for calc() may now be used for masks, background positioning and image sizing, Hyatt isworking on the new Multiple Column implementation and fieldsets won’t stretch to minimum intrinsic width anymore if an explicit width has been specified. Besidesvariousother Flexible Box Layout changes, the flexing algorithm got updated.
The crossorigin attribute may now be specified on script elements, causing WebKit to apply the Cross-Origin Resource Sharing policy on script elements as well. Three DOM-mutating JavaScript errors have been updated to align with the DOM4 specification and WebSocket’s Sec-WebSocket-Accept may not occur multiple times anymore.
Other changes which occurred last week:
The default WebSocket version to use for WebKit ports has been changed to RFC 6455.
While still completely disabled by default, CSS Shaders can now be compiled for Chromium.
The style sharing optimization can now be applied to elements with style attributes as well.
Threaded animation for WebKit’s compositor has been enabled by default on Chromium.
SPDY/3 and the SPDY flow control can now be enabled on the about:flags page.
Finally, if you have interest in Adobe’s recent work on WebKit, they recently hosted a hackathon which yielded some interesting results. It’s a good read!
Exactly 1,234 patches landed in the Chromium repository last week, and 751 in WebKit’s, totaling up to 1,985 changes. Highlights include many form-related changes, the Battery Status API and performance improvements.
Besides support for Mozilla’s FullScreen API, WebKit now also supports the very similar W3C Fullscreen API. The primary differences lie in capital usage for the methods and behavior while exiting fullscreen.
Other changes which occurred last week:
Multi-threaded decoding of Theora video content has been enabled for Chromium.
1,728 changes found their way in the repositories last week, 1,013 for Chromium and 715 for WebKit. Highlights include improved support for -webkit-calc(), Number.isNan/isFinite support in v8 and progress on ES6’s modules.
Work is being started to implement one-click login to Chrome in the browser. In a nutshell, when Chrome isn’t connected to a Google Account and you log in to, for example, GMail, the browser will ask whether you want to synchronize your data to your profile. For now, it’s still disabled by default and is very likely to change. Also new in Chromium is work on a Managed Mode API, which will provide a way to pre-configure, lock and force a certain profile.
As for Web Inspector, not all percentage signs will attempt to be substituted anymore, the Network Panel will show application/json data again and inactive properties will be checked for vendor prefixes. The button allowing you to toggle the Timeline Panel’s overview mode has been moved and the Inspector has gotten more efficient at inspecting arrays containing large (~a million) elements.
WebKit’s implementation of the CSS calc() function is now able to mix absolute values and percentages for lengths. The Flexible Box Module’s flex-wrap property has been implemented, also for reversed wrapping, and margins won’t be double counted anymore when baseline alignment is used. Finally, multiple values are now accepted for the unicode-bidi CSS property, as an union with bidi-override and isolate is now valid.
Another 1,806 changes landed in both repositories last week, 755 for WebKit and 1,051 for Chromium. Highlights include new viewport-relative CSS units, work on a JavaScript Speech API and ..
Within Chromium, a new page on the New Tab Page has been added aiming to provide suggestions of pages to visit, which can be enabled through about:flags if you’d like to follow the progress. As for extensions, Settings will now be synchronized by default, the Font Settings API has received a setFontName method and a sample extension demonstrating the Download API’s download() method is now available.
WebKit now supports an intra-line character grid for Japanese text layouts. The initial value for the -webkit-flow-into CSS property has been changed to “none”, the display type for inline flexboxen is now supported and David Barton is continuing his work on improving MathML support, this time by fixing <msubsup> formatting. The :empty pseudo-selector won’t apply anymore when scripted additions occur, clipping behavior for a fieldset’s <legend> element has been fixed and the :scope pseudo-class is now supported as well.
The Shadow DOM’s ShadowRoot has been taught about the innerHTML property, and the <content> element will now behave like an unknown HTML element when it’s used outside of a Shadow DOM sub-tree. Microdata’s property collections gained the namedItem method and the NamedFlow object for the CSS Region implementation now has the getRegionsByContentNode method. SVG’s <use> element has been integrated with the Shadow Root implementation and work is being done to stop SVG from mutating CSS styles directly.
Last week, 912 commits landed in Chromium and 754 at WebKit, totaling up to 1,666 changes. Highlights include scoped stylesheets, parsing of properties for the Grid Layout and a new interpreter for Apple’s JavaScript engine.
Two new extension APIs have been added to Chromium, namely a fontSettings API which will (so far) allow you to retrieve the font family for a given script, and a Key Bindings API which allows you to register shortcuts triggering events in your extension. An API has been added allowing the Chrome Web Store to install multiple extensions at once, and extensions now also support icons sized either 256×256 or 512×512 pixels.
A command line flag and an about:flags entry have been added to Chromium allowing you to enable support for scoped stylesheets. CSS rules declared in <style scoped> elements will only apply to the subtree rooted at the style element’s parent element, which will prove to be really useful for components and better encapsulation of styles.
Apple’s JavaScriptCore is now a triple-tier virtual machine, adding a new low level interpreter which is 2 to 2.5 times as fast as the old one. While performance of the triple-tiering engine is neutral on performance tests, reducing the amount of JIT’ed code delivers strong performance improvements on actual websites.
Other changes which occurred last week:
Style and link elements will now emit events based on whether the stylesheet was successfully loaded.
Ian Vollick hasbeenbusy on implementing support for animations in Chromium’s compositor.
An empty skeleton of KURL based on WTFURL, a new URL parsing library, has been added.
Last week also happened to be Evan Martin’s last week as a member of the Google Chrome team. Besides having made more than 1,400 commits, Evan has had tremendous impact on the project ever since he started working on it. Thanks, and good luck on your next endeavours!
Another 1,642 changes landed in the repositories last week, 958 for Chromium and 684 for WebKit. Highlights include a color picker for Web Inspector and early functionality for the calc() function.
Brian Grinstead’s color picker is now enabled by default in WebKit nightlies, following some slightpolishing. To aid the undo and redo system, an event has been added to monitor CSS modifications, percentage calculation for empty heap snapshotshas been fixed and the first UI for managing IndexedDB databases is available. The free-flow DOM editing experiment has ended, concluding that it wasn’t an optimal solution for highly dynamic pages. Single-click CSS editing did however get enabled by default, and the Elements Panel will nowshow previews for images.
Per Mike’s commit, basic usage of CSS’ calc() function have started to work in WebKit. Two new CSS properties have been added, -webkit-line-grid to support the alignment of lines in the inline direction to the line grid and -webkit-overflow-scrolling, indicating that an element with overflow scrolling should follow the platform’s behavior. Nested horizontal flexboxes for the new implementation have been fixed, the nowrap value for the flex-wrap property has been renamed to “none” and the computed style for auto flex-item-align now resolves to its parent’s flex-align.
All HTML elements now support the translate attribute. Support for the DOM Level 3 FocusEvent class has been added and the “types” attribute for HTML5’s drag and drop Clipboard object now returns a DOMStringList. As for CSS Regions, it’s now possible to check whether a named flow overflows and update the regionOverflow property for all elements. Finally, a repaint issue and a text selection issue related to Regions have been fixed as well.
Other changes which occurred last week:
CSS Animations can now be driven through requestAnimationFrame, evading the 40Hz limit.
With 995 commits to Chromium’s repository and 754 to WebKit’s, last week brought in another 1,749 changes to the projects. Highlights include Mutation Observers being enabled for all WebKit ports and reversed CSS Animations.
Web Inspector’s Heap Profiler overview screen got some UI improvements and will now show percentages by default next to absolute usage numbers. Hovering over elements with :hover styles defined won’t lock up anymore, the debug side-bar in the Script Panel can now be hidden and DOM edits can now be undone. Brian Grinstead contributed a color picker, bridging the gap until actual <input type=color> gains support. Touch events are now supported by Web Inspector, and can be enabled through the Settings panel.
Mutation Observers have been enabled by default on all WebKit ports. The click() method is now implemented on HTMLElement, making it available for all elements in the DOM. URLs specified in <a ping> won’t be lowercased anymore, the state attribute has been added to the History’s DOM interface and the MediaStream API now supports the onstatechange event for PeerConnection. Finally, the Shadow DOM’s <shadow> element has been added.
Finally we’re able to provide an answer to the many rumors which have been going around in the past few months: Google Chrome is nowavailable for Android devices running Ice Cream Sandwich. On my Galaxy Nexus, the browser scores 343 points on html5test.com, runs the SunSpider test in 1880ms and scores 1308 points on the v8 test.
Support for the Web Platform
The first beta uses the same basis as Google Chrome 16, meaning it has most Chromium and WebKit changes up to mid October 2011. I’ve already iterated through many of the changes which were included in that release, most of which will apply for the Android version as well.
To name some highlights, Chrome for Android supports pretty much all of the Web Platform’s exciting features, including CSS 3D Transforms, GPU accelerated canvas, CSS Animations, SVG, WebSockets (including binary messages!) and Dedicated Workers. It supports IndexedDB, Application Cache and the File APIs, date and time pickers, parts of the Media Capture API and mobile oriented features such as Device Orientation and Geolocation. Fixed positioned elements are also working and even look smooth while scrolling!
What the Android-based Chrome does not support is Flash, following Adobe’s announcement in November. Other unsupported features in the beta release are Extensions/Apps, WebGL, Shared Web Workers and the Web Audio API.
An issue that often pops up for mobile browsers is that text on the website may be too small to read properly. Where the Android Browser employs a text reflow algorithm to clarify the situation, Chrome for Android features a technique which we’ve called Font Boosting. It uses an algorithm to increase font sizes when necessary, aiming to make the text readable regardless of the zoom level.
And for the Web Developers among you, it’s also possible to utilize Web Inspector’s Remote Debugging feature to inspect and modify pages while viewing it on the device itself.
Google Chrome 16 and mobile limitations
Of course, bringing a browser to a different -much more limited- platform goes further than simply re-using code. Mobile devices have a lot of limitations compared to desktop and laptop machines. Besides the lower amount of available memory and CPU power, other constraints lie in less memory bandwidth and VRAM on the device’s GPU. Google Chrome has a complicated architecture which imposed some interesting challenges here: separating the browser from the renderers through its multiple process architecture, to name an example. Decreased rendering and scrolling performance were also an issue, to which Chrome’s GPU team provided an excellent answer in the form of a threaded compositor.
Another characteristic of the Android platform is that the APIs for most significant features are exposed through the Android SDK, making them available to Java code. To this end, part of the browser layer has actually been implemented in Java, communicating with the rest of the Chromium and WebKit code through Java Native Bindings.
Becoming part of the Chromium project: upstreaming our code
Chrome for Android has been developed in a separate repository as a fork, which means that most of the code will have to be upstreamed. To date, about 150 commits have landed in Chromium making many preparations, including the build environment and bots for Chromium and WebKit, not to mention WebKit’s umbrella bug and the twoannouncements.
As having a fork is far from ideal, one of the current top priorities will be to upstream most new and modified code to Chromium and WebKit, while the build and testing infrastructure on Chromium’s waterfalls is expected to evolve significantly. A snapshot of the current source-code of Chrome for Android can be downloaded as a tarball.
Of course, keep in mind that today’s release is just a beta; much more work, features and stability will be needed to actually be able to release the first stable version. Personally, I’m very glad that the project has been announced, and definitely am looking forward to continuing development in the open!
1,368 changes found their way to the repositories last week, 802 for Chromium and 566 for WebKit. Highlights include Chromium 19, an Extension Activity Log page and no more high-latency audio code path.
The branch for Google Chrome 18 has been created, giving Anthony a cause to remind us about Potassium while kicking Chromium’s version 19. Approximately 6,500 Chromium, 4,400 WebKit commits and 300 v8 commits participated in this release, giving a combined total of over 11 thousand changes. Chrome 18 brings six new stable extension APIs, a CSS Selector Profiler, Mutation Observers and many, many more changes.
Work has been started on an Extension Activity Log page which will share information about API calls a certain extension makes, allowing you to keep an eye out on their behavior.
929 changes landed at Chromium’s repository last week, whereas WebKit’s received 626, totaling up to 1,555. Highlights include quite some progress on implementing the Shadow DOM and the Pointer Lock API.
Web Inspector’s Timeline Panel has been extended with three graphs, all hidden behind the Experimental Settings option, showing information about objects and events in the DOM. Hovering over a function in the Script Panel may now showan overlay with general information and it’s source-code and elements within iframes are selectable again.
In order to verify whether ES.next’s let keyword will be compatible with websites, Apple has reserved the word from normal usage in JavaScriptCore. Support for Uint8ClampedArray has landed for both V8 as JSC, values for the dropzone attribute will be normalized and various issues with radio-button groups have been fixed.