Archive for the ‘Rendering Engines’ category (1 post)

Threaded HTML parser, background blending and welcoming Opera

Published on in Google Chrome, Last Week, tech, WebKit. Version: Chrome 26

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 broadly started with upstreaming the iOS port to WebKit!

It’s now possible to change the dock side of Web Inspector by dragging its toolbar. There’s now an option to show composited layer borders and the JavaScript tokenizer can now detect round braces. Also recently introduced is the Continuous Painting Mode and the possible upcoming addition of a console.table() function.

Adam, Eric and Tony have been working on changing WebKit’s HTML parser to handle tokenization and parts of parsing on a background thread. On resource constrained systems, such as the Nexus 7 tablet, this yields improvements of at least 10%, with the maximum stop time going down by roughly 50%. Some of last week’s fixes focused on the preload scanner, timing of the load event and the XSS auditor.

WebKit’s Media Stream implementation has been enhanced with support for DTMF. Mike will be working on support for X-Content-Type-Options:nosniff and edit actions have been added for Bold and Italic commands. document.activeElement won’t return non-focusable elements anymore, the formenctype attribute now defaults to an empty string and FocusEvent got a constructor.

Rik started working on implementing support for the background-blend-mode CSS property to WebKit, which determines the blending mode of the background image. The vmax unit has been implemented, completing the vh, vw, vmin and vmax group, and language selection for the ::cue pseudo-element is now available. Grids now recompute their logical height after row or column changes, and WebKit can now parse grid-auto-flow.

In a series of just over 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!

Other changes that occurred last week:

  • The TestWebKitAPI test suite now works for iOS,
  • The TestRunner library has been turned into a component for the Chromium build.
  • An experimental gyp-based build has landed for the Gtk port, with build system talks being on again.
  • Jer aligned WebKit’s Encrypted Media implementation with the latest specification updates.
  • Google’s Chief Apple Polisher, Nico Weber, became a WebKit Reviewer. Congratulations!
  • A flag has been added to Chromium for toggling composition of fixed positioned elements.
  • Some plumbing by John on the Fullscreen API for Android.

No promises, but hopefully another article next week :).

Read more (1 comment) »

VP9 and Opus, Background Position Offset and Ruby Positioning

Published on in Google Chrome, Last Week, tech, WebKit. Version: Chrome 25

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.

The Toolbar Icons in Web Inspector won’t be shown by default anymore. The gear icon immediately goes to the Settings dialog again. Newly added items to the Network Panel will now be applied to filtering and cookies can be sorted by their size again. The viewport-related warning messages have been cleaned up, a new warning has been added for scripts blocked by @sandbox and messages created by console.time and timeEnd() can now be filtered out.

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.

Following the final pieces of it’s implementation, Alexis enabled support for the new background-position offset syntax on several platforms before enabling it by default, and removing the feature flag altogether. Meanwhile Tab started on aligning WebKit’s gradient implementation with the specification, towards unprefixing.

As for more experimental features, work on implementing CSS Grid Layout continues with improved parsing and layouting capabilities. Rick started working on supporting -webkit-image-set() on cursors, too.

Other changes which occurred these weeks:

This will be the last update of 2012. Thank you for reading, have a Merry Christmas and a Happy New Year!!

Read more (10 comments) »

Blending on 2D canvas, :read-only for dates and times and work on Grid Layout

Published on in Google Chrome, Last Week, tech, WebKit.

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 landed several more 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.
  • It’s now possible to run WebKit’s performance tests on Chromium for Android.
  • In order to make performance profiling easier, the run-perf-tests script now accepts a –profile option.
  • A feature flag has been added for an implementation of the HTML <template> element.
  • The appearance of the Media Gallery dialog has been updated to a new style, as has print preview.
  • Partytime has been brought back to WebKit!

On to Rome for the weekend :).

Read more (4 comments) »

Telemetry, more DOM Exception renames and in-band subtitle tracks

Published on in Google Chrome, Last Week, tech, WebKit. Version: Chrome 25

Because of Thanksgiving, last week only saw a total of 1199 changes: 624 for Chromium, 575 for WebKit.

Marcus[1], Marja, Nat, Tony and others are working on a new cross-platform performance test framework in Chromium: Telemetry. Last week, support was added for running tests on multiple Android devices, recording replay files and several new benchmarks. Exciting stuff!

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.

Erik continued with his renaming of DOM Exception names. The CSS Device Adaptation implementation is now able to apply the resolved viewport rules and, when enabled, exposes an API to the DOM. Text Autosizing’s display of nested comments on reddit.com has been vastly improved, changing relatively positioned elements to being statically positioned now puts them in the right spot and CSS Exclusions’ shape-outside values are now accepted on shape-inside as well. Alexis landed CSS B&B3-compliant parsing support for the background-position property.

The IDBDatabaseException object has been removed in its entirety. Initial infrastructure has been created allowing ports to handle in-band subtitle tracks, a new layer stack has been added to accommodate the needs of both the Fullscreen API and the <dialog> element, and biquad filter nodes for the Web Audio API now have a “detune” attribute.

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.
  • Qt separated all their code that depends on QWidget in a separate static library.

Quite belated, but better late than never :)

Read more (2 comments) »

Better DOM Exception Names, Animatable Shapes and Recent Tabs

Published on in Google Chrome, Last Week, tech, WebKit. Version: Chrome 25

Last week yielded 932 WebKit commits and 1,111 Chromium commits, totaling up to 2,043 changes.

Within Web Inspector, several overrides have been moved out of the Settings panel. The Apple port now features a dock button in the top-right corner of the Web Inspector window. A checkbox has been added for toggling a visible FPS counter on the page, and a warning will now be shown in the console when invalid sandbox flags are encountered.

The feature flags for CSS Hierarchies have been removed again. Tab made parsing of the @charset rule stricter, the algorithm used for positioning <track> subtitles has been updated to better support multiple lines and the wrap-margin/padding properties have been renamed to shape-margin/padding. Various basic shapes, such as polygons, circles, rectangles and ellipses are now animatable with themselves, which can be used on both the clip-path and CSS Exclusions’ shape-inside properties.

Parsing for the text-align-last CSS property has landed. WebKit has also been updated to return the right value for <legend>.form, which should be in sync with an optional ancestor fieldset element. For Chromium, autocomplete=off will now be ignored when filling in an automatically created password. Finally, seven pseudo classes were updated to properly distribute in shadow trees.

Erik Arvidsson landed 17 out of a series of 25 patches renaming all the DOM Exception names. Examples include SYNTAX_ERR to SyntaxError, NOT_FOUND_ERR to NotFoundError and NOT_SUPPORTED_ERR to NotSupportedError.

Other changes which occurred last week:

 

Read more (no comments) »

Week and month date pickers, cSP and no more “desktop-width” viewport directive

Published on in Google Chrome, Last Week, tech, WebKit. Version: Chrome 25

1,652 changes landed to the projects last week, 889 to Chromium’s repository and 763 to WebKit’s. The v8 project received 77 commits, quite a few of which were related to implementing the new Object.observe() feature.

Web Inspector’s console messages now accept multiple formatting blocks by using %c multiple times. The new console.clear() method will, surprisingly, clear the console. An option has been added for disabling rulers, pressing Ctrl+A in the Network Panel now selects the resources rather than the entire panel and warning messages have been added for invalid cross-frame options and usage of the dpi and dpcm units outside of printed media stylesheets.

Within v8, Adam, Rafael and Andreas are working on implementing Object.observe(), various commits for which were made. While the implementation isn’t complete yet, it can be enabled by passing the –harmony-observation to v8. ECMAScript 6’s Map and Set collections now include the size and clear properties and JSON.stringify() is now better at handling proxies.

Canvas images reprojected using the -webkit-canvas() CSS function will now use the full backing store rather than the scaled ones, which improves quality on many mobile devices. Support for the “desktop-width” directive in the meta viewport element has been removed. Also newly supported are date pickers for <input type=month> and <input type=week>, and Skia is now able to use reference URL filters on composited layers.

It’s now possible to show a list of tracks available for media elements, an UI for which will be implemented soon. A touchEvent’s client{X,Y} attributes will have the right scrolling adjustments applied, proper escaping of quotes will now be applied in various HTML extension methods (String.prototype.anchor, link, etc) for JavaScriptCore and getUserMedia() will now throw a TypeError instead of a DOMException.

The Content Security Policy DOM implementation has been updated to match the specification. The interface is now called document.securityPolicy and various methods are now exposed as read-only properties.

Other changes which occurred last week:

Thanks for reading!

Read more (3 comments) »

HTTP Content-Security-Policy, the @viewport rule and Improved Performance

Published on in Google Chrome, Last Week, tech, WebKit. Version: Chrome 25

Today’s update talks about the 925 Chromium changes and 677 WebKit changes made during the past week.

The version number Google Chrome will be using is now equal to the value of a British Pony, as carefully described by Anthony. As usual, there’s a label for a rough overview of the changes that went in to Chrome 24.

The version of CodeMirror Web Inspector uses, which is available as an experimental editor, has been updated to version 3. Redoing an action can now be done by typing Ctrl+Y on non-Mac platforms. Furthermore, the CPU Activity feature of the Timeline panel has been promoted out of being experimental. A native memory usage overview has been implemented as well.

Quite a few performance improvements went in last week. Elliott improved performance of getElementsByTagName, among various other tests, by several percentages. Eric has been working on addressing RoboHornet(Pro) issues: rendering tables with column groups now is twice as fast, devirtualizing first- and lastChild() yielded another 30% speedup, and another 35% improvement which lowers the total test run-time from 8.2 seconds to just 5.3!

As there is no way to set them through CSS, vertex shaders with custom attributes used by CSS Shaders are now considered invalid. The -webkit-user-select property now accepts the “all” value, and -webkit-line-break has been updated to also understand “auto”, “strict” and “loose”. Thiago landed parsing for the @-webkit-viewport rule, together with the max-zoom, min-zoom, orientation and user-zoom CSS properties and their validation.

WebKit’s Content Security Policy implementation will now listen to unprefixed Content-Security-Policy headers included in the HTTP response. This header will be preferred to X-WebKit-CSP, which still must be used in case you’re supplying CSP 1.1 features to the browser. Development of the cross-site scripting protection has been picked up again. Malformed headers will now be reported, and report URLs can now be defined in the X-XSS-Protection header.

Other changes which occurred last week:

  • All code related to the experimental Undo Manager API has been removed, as it went unmaintained.
  • Touch adjustment scoring now normalizes with respect to the maximum possible overlap area.
  • Apple enabled support for sub-pixel layout positioning on the Mac port.
  • WebKit is now being built as C++11 code on Mac platforms.
  • Support for “user-select: all” has been enabled for all WebKit2 users.
  • An iOS builder has been added to Chromium’s commit queue, and can now close the tree on failures!
  • The Tab Capture Extension API may now also be enabled on Chrome OS and Windows.
  • The <webview> element and permissions are now available for platform apps on the dev channel.
  • Only the first Strict-Transport-Security header will be processed, as defined in its specification.
  • Support for Shadow DOM unfortunately has been delayed until Google Chrome 25..!

Published on a Monday, that’s been a while :)

Read more (no comments) »

Capturing a tab, Resolution Media Queries and timeouts for XMLHttpRequest

Published on in Google Chrome, Last Week, tech, WebKit. Version: Chrome 24

A lot has happened again last week, and this update covers the 739 WebKit and 995 Chromium commits which have occurred since. Highlights are the @host rule for Shadow DOM and resolution media queries.

A new extension API just landed in Chromium which adds support for capturing the contents of a tab through WebRTC. The API, tabCapture.capture(), works similar to getUserMedia() and also makes a LocalMediaStream JavaScript object available.

Resources using data: URIs in Web Inspector will now be trimmed at a reasonable point, increasing readability. Stylesheets will now also be reloaded when any in-use SASS resource has been saved in the Sources panel.

The @host CSS rule has been implemented, aiding in styling elements using Shadow DOM. The Flexible Box Module implementation now supports flex-wrap: nowrap, supports top and bottom margins for child nodes of flex items and now gracefully handles width definitions. Regions now support auto-height regions with region breaks and rendering support for text-decoration-style has been implemented.

A number of create*() methods of the Web Audio API’s AudioContext object have been renamed to match the latest specification. Pasted fragments will now always be parsed as HTML, even on XHTML pages, and the default action for the “dragover” event now prevents dropping when dragging files.

Kenneth added support for the “resolution” media query, most useful when used in conjunction with the dppx unit, and a feature flag for implementing features from CSS Device Adaption did land as well. John Mellor’s Text Autosizing implementation got the interest of Samsung, who are working on implementing the API in WebKit2, and timeout support for XMLHttpRequests has been implemented as well. Finally, all the compositing operators for CSS Shaders are now supported, with the exception of “destination” and “lighter”.

Other changes which occurred last week:

A really exciting patch to look out to is Renata’s work to sandbox the QtWebProcess, which will be a huge improvement for the Qt port of WebKit!

Read more (no comments) »

Conditional CSS, file-level CSP and shipping Shadow DOM and MathML

Published on in Google Chrome, Last Week, tech, WebKit. Version: Chrome 24

This update covers 1,921 Chromium changes and 1,426 WebKit changes which happened over the past two weeks, totaling up at 3,347 changes. Highlights are support for conditional CSS, support for polygonal shapes in CSS Exclusions and support for Shadow DOM, now shipping with Chrome.

Chromium has enabled both Shadow DOM and scoped stylesheets by default, and both features which will ship with Chrome 24. This also applies to MathML, which has been worked on by David Barton in the past year.

Web Inspector now supports styling console message output by using the %c modifier, together with a string of defined styles in the second parameter. HTML as part of XMLHttpRequest responses will now be previewed in the Network Panel, and hovering over console messages will now highlight them.

WebKit now supports the @supports rule from the CSS Conditional module. The orphaned units quirk has been removed, which would allow a space between the number and unit, such as “20 px”. Borders, margins and paddings of an inline’s inline ancestors won’t be counted twice anymore, and max-width can now override the width for CSS tables. For the Flexible Box implementation, stretched inputs won’t overflow anymore and images are being displayed again.

The experimental CSS Exclusions implementation now supports polygonal shapes, behavior of which is explained on Hans Muller’s blog. Elements utilizing CSS Regions now support automated height, and text decorations are now being properly applied when ::first-line styling is present. CSS variable names are now case insensitive.

Seven nodes of the Web Audio API have been renamed to be more consistent with other node types. A “force” parameter has been added to the DOMTokenList’s toggle() method, Content Security Policies now support paths at file-level granularity and text controls were given the setRangeText() method.

The vendor prefix of window.performance.now() has been removed. RequestAnimationFrame also had its vendor prefix removed, and a high-resolution timestamp is now being exposed as an argument for requestAnimationFrame’s callback.

Other changes which occurred in the last two weeks:

I know I’ve been out of it for a couple of weeks, but let’s get back on the weekly track! 🙂

Update: Scoped stylesheets will *not* be shipping with Chrome 24 yet, sorry!

Read more (2 comments) »

Canvas Line Dashing, MathML meets Flexbox and WebKit’s Cowhands

Published on in Google Chrome, Last Week, tech, WebKit. Version: Chrome 24

Sorry for the recent lack of updates, I’ve been really busy. This update discusses everything until the 24th of September, so two weeks, not including last week. Early next week I’ll publish an article covering last and this week, to get you fully up to date again.

In Web Inspector’s Style panel, the relevant selector that causes a rule to be applied to a certain element will now be highlighted. The XMLHttpRequest Replay feature has been added to the Network Panel, search and filtering features are now available in the Timeline panel and all named flows can now be displayed in the CSS Named Flows drawer.

The Flexbox implementation in WebKit now supports absolutely positioned flex items, and had two bugs fixed. Initial work for supporting exclusions for basic shapes has landed, and more work on CSS Exclusions’ shape-inside function has been done as well. Finally, the mask-type attribute on SVG’s <mask> element is now supported too.

Support for drawing dashed lines in the 2D Canvas APIs according to the specification landed, and introduced the getLineDash and setLineDash methods, and the lineDashOffset attribute. The prefixed version of Blob.slice() has been removed, and Chromium has removed support for the prefixed postMessage method. SVG’s appendItem method on path segment list has been sped up from linear to constant time. Support for creating a Shadow Root on replaced elements has been removed for now and CSS Region’s getRegionFlowRanges method on Elements has been implemented.

David Barton updated all of MathML’s rendering to be based on the Flexible Box module, simplifying the code significantly. Over the past number of months, he’s done quite a lot of work on improving WebKit’s implementation of MathML, which may ship with Chrome 24.

WebKit’s Content Security Policy implementation now features supports for paths in directives’ values. Blocked inline scripts will cause Web Inspector to pause, ignored directives due to non-ASCII values will now generate warnings and JavaScriptCore’s description when blocking eval() has been clarified.

Other changes which occurred in the last two weeks:

If you happen to be at Fronteers 2012 this Thursday and Friday, please come say hi! If you’re not: too bad, you’re missing out :).

Read more (no comments) »