There have been some interesting movements in the browser landscape lately: Opera moving away from Presto, Chromium for Android and Firefox Mobile making astronger stand on mobile platforms. Web Platform has less fragmentation right now than it ever had before. Today, the Chromium project introduced Blink: a new open source rendering engine based on WebKit.
I’ve been a contributor to the WebKit project for a few years now, written hundreds of updates about the project and even published dozens of those on the official weblog, Surfin’ Safari. It’s a great community, one that I’m very proud to be a member of. Working on WebKit introduced me to a great amount of people and taught me an incredible amount of things.
To improve the open web through technical innovation and good citizenship.
A few weeks ago, Max Heinritz introduced the new Chromium Feature Dashboard, listing not just the implementation status, but also the maturity, interoperability and testability of Web Platform features in Chromium. With Blink, Chrome is taking this one step further and are introducing strict guidelines new features have to adhere to.
To fulfill our good citizenship mission, we need to be careful to add new features to the web platform in a transparent, responsible, and compatible manner. We measure success as moving the open web platform forward as a whole, not just as moving one implementation forward.
I’m both positively surprised by and very confident in the way that Google’s Web superstars (Alex, Dimitri, Paul, Eric and many others) are making this happen. Google projects, including Dart, NaCL and others, are subject to the same guidelines in introducing their changes to the Web Platform as any other participant, including our very strong preference for standardization and compatibility with other browser vendors.
Compatibility risk will be one of the most important decision criteria for enabling new web platform features for the new engine. A launch process has been introduced for new features which touch the Web Platform, which includes several public announcements and reviewing steps. This is not just limited to Googlers: whilst getting commit rights for Blink is similar to the Chromium project, there is a fast track available for WebKit contributors. I’m also very hopeful that we’ll soon be welcoming the first non-Google OWNER to the project as well.
I’m a Web Developer. Thank you for making my life even more complicated!
Paul Irish asked a question about a month ago: what is WebKit? WebKit implementations are not homogenous: they differ in anything from the code used for downloading resources to the mechanism used to display pages, as well as in supported set of features. Chromium, Safari and other implementations of WebKit should already have been considered as separate testing targets.
All browsers’ latest versions are absolutely excellent from a technical perspective. With Ian Hickson’s HTML parsing algorithm and all the rendering engines coming increasingly close to passing the entire CSS 2.1 test-suite, we’re almost at a point where the true foundations of layout on the Web are both standardized and interoperable between implementations. The Chromium project now intends to take this further by working with the W3C to make sure both conformance tests and the testing infrastructure can be shared between different browsers.
Another area which I’m very excited about is that Blink will be following Mozilla’s ideas in regards to vendor prefixes. While support for legacy WebKit vendor prefixes will be maintained in the short term, Blink will strive to avoid shipping vendor prefixed features to the Stable channel altogether.
The end of the Last Week in WebKit articles? I’ve published 114 articles describing changes in the WebKit and Chromium repositories that occurred in the week before. I do still intend to continue doing so, however, they will address Blink changes instead of WebKit’s. I won’t be posting updates to the Surfin’ Safari anymore, although I am definitely grateful I had the chance of doing so for a number of months.
Personally, I’m really excited about this change. The scale of the Web Platform asks for an ecosystem which doesn’t just welcome participation and collaboration, but also has a fair and healthy amount of competition. Jake made a great analogy about Blink’s potential in the near future: Blink can do for layout and rendering what V8 did for JavaScript, although the improvements will be more gradual.
I’m confident that Chromium can use Blink to increase diversity, while driving innovation, as it has shown to be capable of in the past. For more background on the why, I encourage you to read Alex Russell’s great post on the announcement of Blink. Justin also sheds some light on the security implications of this change, and Paul Lewis also shared some nice insights.
1,226 Chromium changes and 717 WebKit changes add up to a total of 1,943 changes last week.
Work hasstartedenabling Web Inspector to report various CSS parsing errors, such as mismatched braces and missing semicolons. A menu has been added allowing you to customize the panels displayed in the toolbar, capitalization of menu items has been made consistent and IndexedDB data may now be cleared.
WebKit’s Content Security Implementation willnow fire a “securitypolicyviolation” event whenever violations occur, and will include the effective-directive key in violation reports as well.
Intrinsic sizing (i.e. min-content) now work on flexible box elements, and parsing for the -webkit-each-line value for CSS 3’s text-indent property got implemented as well. The Grid Layout implementation now supports default grid item sizing, and can parse the grid-auto-{column, row} CSS properties.
Apple’s JavaScript engine ninja Filip Pizlo filed a series of bugs covering some future plans and experiments in regards to JavaScriptCore. Ideas including changing it to a quadruple-tier virtual machine, allowing it to do more optimizations for longer running scripts, running the optimizer on awesomenew threads and experimenting with LLVM as a backend.
Other changes which occurred last week:
Skia is now able to use an accelerated hardware path for feConvolveMatrix filters.
The new calendar picker now has support for touch input.
Quite some updates were done in light of Web Components: touch events are now supported in shadow trees and work is underway to allow any HTML element to be a superclass of a custom element. The Web Audio API now exposes the maximum number of available channels, the WEBGL_compressed_texture_atc extension is now available and the default background of dragged images is now being properly set.
A total of 1,783 changes were committed last week, 1,065 for Chromium and 718 for WebKit.
Web Inspector will now show raster tasks on the Timeline Panel. Furthermore, the various profiling tools, such as the JavaScript CPU Profiler, canvas profiler and the memory snapshots, have been moved in separate panels.
When enabling the CSP 1.1 implementation, the new directives will now work on the unprefixed header as well. The meta referrer directive will now be honored for window.open() calls,the X-Frame-Options header accepts the “ALLOWALL” value and no callback is required anymore for requesting a notification permission. Rules for up and down-mixing channels in the Web Audio API have been implemented, and collapsing rules for empty buttons have been corrected.
One feature that is nearing completion is the threaded HTML tokenizer. Now that moretestshave been fixed and some optimizations have been done, it’s been enabled for Chromium’s DumpRenderTree. Shortly thereafter Adam enabled the threaded parser by default for all of Chromium.
Other changes which occurred last week:
The amount of files to compile when changing WebKit’s network or clipboard code has been decreased.
WebKit will now share the user agent string when opening a new Web Socket connection.
Last week saw 745 WebKit commits and 935 Chromium commits, totaling up to 1,680 changes.
Chrome OS has increased the priority of tabs which are playing audio, making it less likely that they will be discarded in low memory situations. More exciting, tabs which are playing audio will now have a visual indicator displaying the volume, making it a lot easier to determine where these random sounds are coming from.
An implementation of Web Components’ document.register() function landed, making it possible for JavaScript to register custom HTML elements with WebKit. Date and time input fields now accept “24” as a valid hour as well and the “reflected-xss” directive has been implemented as part of the experimental CSP 1.1 implementation.
Iframes now recognize the “allowfullscreen” attribute, whereas they already accepted the prefixed version. Furthermore, Mutation Observers have been unprefixed as well!
Dave continuedhisworkonthenew Region-based multiple column implementation, also taking the first steps towards specification-compliant painting of columns. Meanwhile, Julien continuedhiswork on the implementation of the CSS Grid Layout Module, finishing the auto placement algorithm implementation.
Other changes which occurred last week:
JavaScriptCore’s script source cache has been shrunk, yielding significant memory usage improvements.
Today’s update discusses the 725 WebKit and 990 Chromium commits that landed last week, totaling up to 1715 changesets.
Chromium’s version number is now equal to the number of species Captain Jean-Luc Picard made contact with in Star Trek’s The Next Generation series: 27.
Support for the “ch” CSS unit has been added to WebKit, which matches the width and spacing of the “0”-glyph in the current font. The @supports at-rule now has improved error recovery, the “src” property in @filter at-rules can now be parsed correctly and the correct behavior of the -webkit-margin-collapse property has been implemented.
Support for the ::distributed() pseudo-element, part of the Shadow DOM specification, has been implemented. Pablo also landed support for the CSS.supports() method, which is the DOM API specified in the CSS Conditional Rules module.
The threaded HTML parser has beenupdated to pass all layout tests, and the preload scanner has been enabled as part of the background parsing thread after parts of it have beenupdated to be therad safe.
Other changes which occurred last week:
WebKit’s Web Intents implementation has been removed from the repository.
A wild Last Week in Chromium and WebKit appears! This update describes the 1,654 commits which were made last week, 958 for Chromium and 696 for WebKit.
In case you didn’t hear this elsewhere yet: Opera has announced that it will start using the Chromium port of WebKit as the rendering engine in their browsers. This is very exciting news, even though I’m sad to see an excellent engine like Presto part with the rendering engine playing field. Meanwhile, Apple more broadlystarted with upstreaming the iOS port to WebKit!
In a seriesof justover a dozen commits, Gregg imported a slightly modified Khronos WebGL conformance test suite into WebKit. Sharing test suites is great, and I hope we can see more of this!
This update discusses the 1,522 WebKit and 2,131 Chromium changes that landed in the past two weeks, totaling up to 3,653 changes.
Chromium updated the libvpx library to include support for an early version of the VP9 decoder, the successor of the VP8 codec that’s currently used by WebM. Furthermore, though still behind a flag (also available in about:flags), WebM files containing audio streams using the Opus codec are now supported as well.
Support has been added for the “widows”, “orphans” CSS properties, as well as for the “ruby-position” property. The text-orientation property now supports the “sideways-right” value and text decorations will now work correctly when text-combine is being used as well. Furthermore, out-of-range values will now be clamped to values the supported range. Applying SVG filters to elements through the url() syntax will now work even when the filter isn’t available yet, and CSS Exclusions’ shape-inside is now supported for multiple-segment polygons.
Elliot moved generated content in :before and :after CSS pseudo-elements to the DOM, which also means that supporting animations and transitions on them is close. The Shadow DOM’s ShadowRoot constructor is gone, XMLHttpRequests for blob data will now set their Content-Type header accordingly and status events will now be fired for <link rel=prerender> elements. The Web Audio API now supports an offline audio context and the ::cue pseudo-element for video elements now is supported as well.
Support for in-band text tracks is now available on the Mac port, and plumbing has been added to allow deferring displaying of text tracks to the embedder.
This update talks about the 690 WebKit commits and 1039 Chromium commits which landed last week.
A canvas’ 2D context’s globalCompositeOperation property now also accepts the various blending modes. The unpause() method on a MediaController object is now supported. Removing non-existent cues from a text track will raise an exception, and a media element’s textTracks property will now reflect the associated <track> element.
The :read-only CSS pseudo-class has been updated to work with date and time input types as well. The -webkit-mask-attachment property has been removed and the masking size has been added to the -webkit-mask shorthand. WebKit’s Multiple Column implementation now accepts “none” as the value for column-span rather than just one, and tables have started respecting the max-height property.
As for experimental features, Julien is continuing his work to implement the CSS Grid Layout Module in WebKit, and landedseveralmore patches. Dave also landed another patch for the new Multiple Column implementation, and CSS Shaders’ input colors will now be clamped before being blended. More tests have been added for the CSS Device Adaptation implementation, and values provided through the meta tag won’t be clamped anymore.
Other changes that occurred last week:
An OpenCL-based implementation of several filter effects has been added.
A basic implementation of the Web Audio API’s MediaStreamAudioDestinationNode landed.
Printing in a custom font on a <canvas> object can now also fall-back to other fonts if it’s unavailable.
Web Inspector has enabled JSON previews for text/html XMLHttpRequests. Line numbers in the timeline panel are now searchable and pressing the Ctrl+End shortcut in the code editor will bring you to the last character again.
The feature flag for the DAP Proximity Events feature landed. A few other potentially upcoming features were discussed on the WebKit mailing lists last week as well, namely using OpenCL for filters, Pointer Events, the Screen Orientation API and adding the <main> element.
Other changes that occurred last week:
Some minor progress was made in hooking up the Fullscreen API for Android.
James started working on Resource Timing tests, in W3C style so they can be submitted.
The EFL port added support for using the ATK library for Accessibility support.
Chromium for Mac switched to WebKit’s TCMalloc, improving DOM modification performance by up to 15%.
Chromium enabled support for the datalist UI for datetime and datetime-local input fields.