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

Chromium OS tablet, GPU accelerated shadows and the new, simpler logo

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

Highlights among this week’s 1,291 commits are quite some Chrome OS touch-related changes, support for relatively positioned table-cells and a wider experiment for background pre-rendering in Chromium.

The Chrome OS team seems to be gearing up for a tablet release. Following some usability-related improvements for touch-based devices, the user-agent string will now indicate the usage of a touch-only device. Furthermore, a brand new New Tab Page landed which provides an iPad-like overview of the installed applications. For all those who want to get a sneak previous of the page, but don’t own a Chrome OS touch-device yet, enable the overview pagina using the “Experimental new tab page” setting on about:flags.

In light of improving specification-compliance, WebKit’s SVG implementation received a rather large commit which implements proper bi-directionality support for SVG Text. Rounding for non-integral percentages has been fixed and exporting WebGL-canvasses to an image, texture or Data URL will now honor the non-premultiplied-alpha attribute.

Relatively positioned table-cells have gained support from the engine and the maxlength attribute for textarea-elements will now take newlines into account. Finally, shadows are now supported for a canvas’ drawImage method and support for GPU-accelerated shadows has been added.

Other changes which occurred in the last week:

  • The prerendering experiment now applies to 30% of the Canary users.
  • Auto-filled form elements will now also force a specific text-color, ensuring visibility.
  • Multiple tab-selection has been enabled by default for Windows systems!
  • Chromium’s libwebp has been updated to the latest version.
  • The brightness and contrast for accelerated video’s in Chromium now meets BT.601.
  • Read-only form fields won’t be automatically filled with information anymore.
  • An API for getting the installed font families has been added to PPAPI, albeit unimplemented.
  • Images used by Web Inspector have been compressed, saving about 120 KB.
  • The default value for window.navigator.vendor has been updated to “Apple Inc.”
  • Various security-restrictions for entering full-screen mode have been implemented.
  • Timer-based events may now inherit the user gesture causing them to be set.
  • Chromium’s UI on Linux won’t paint anymore when the window isn’t visible.
  • All GPU-related features will be disabled for Linux users using either ATI or Intel cards.
  • Prefetches within a prerendered page will be disabled, due to infinite loops.
  • A quota database has been added to Chromium, for per-origin storage restraints.
  • Videos displayed on cnn.com are now a little bit more reliable.
  • Pre-rendering within Chromium will be throttled to once per 500 ms.
  • Syntax for the Content-Security-Policy header has been updated per a spec change.
  • Some great early results for the unified build-system being created for WebKit.
  • Accelerated compositing may now be forced through the “–force-compositing-mode” flag.
  • And of course some changes by the Web Inspector team.

And that’d be all again. You may be interested in following WebKit bug 56727, which talks about implementing the experimental CSS Mixins feature.

Read more (11 comments) »

Multiple-tab selection, tab title elision, animations API and a new Chromium logo

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

Another week passed, bringing a total of 1,350 change-sets to Chromium (796 commits) and WebKit (554 commits). Highlights include a new logo for Chromium, selecting multiple tabs, an Animation API, CSS’ new text-orientation property and an improved pale-violet-red color.

Scott Violet landed the first functional part of a new feature: multiple tab selection. Instead of being able to select just one tab, multiple tabs can be selected by using <shift>+click or <ctrl>+click. While the feature still needs work, including proper rendering of multiple tabs and a better dragging thumbnail, it’s already available for you to check out in nightlies: just launch Chromium with “–enable-multi-tab-selection“.

Another change for Chromium’s tab bar is that adjoined tabs sharing a common title prefix, such as “Chromium Blog”, will have their titles elided. This means that the shown title will be more relevant and that it will be easier to find the tab you’re looking for. Right now it’s only available for Chromium builds on Windows, but support for the other platforms is in the works.

Dean Jackson landed the first part of an API for managing animations which apply to a certain element. The API is available in both Chromium and WebKit nightlies and adds a new method to DOM HTML Elements: webkitGetAnimations. It returns an AnimationList which contains the active animations, as Animation objects. As is visible here, it provides access to most common settings for CSS-based animations. While the play() and pause() methods are being exposed, they’ll start functioning after an upcoming patch lands.

As for new features, an initial part of HTML5’s DataTransferItem and DataTransferItems interfaces landed, together with a partial implementation for Chromium. Dave Hyatt implemented the text-orientation property from the CSS3 Writing Modes module, although it hasn’t been implemented for Windows yet. Luiz Agostini landed the rendering part for the <details> and <summary> implementations.

In the effort to improve standard compliance, several commits addressed failures in the CSS 2.1 test-suite. Several issues with the ex unit have been solved, parsing for background position components has been rewritten and the ::before and ::after pseudo-elements may now be used on table rows. Furthermore, the values of the named “palevioletred” and “mediumpurple” colors have been fixed.

One not so significant, yet certainly interesting change, is the inclusion of the jQuery test-suite in the WebKit tree. Widely used as the library is, it’s a good thing to see that both parties will test on each other’s software to ensure full compatibility.

Other changes which occurred last week:

  • Chromium received a new logo, quite different from the previous one.
  • A minor change in preparation of Chromium’s registerProtocolHandler implementation.
  • Moving nodes across different documents in the DOM is now possible for certain methods.
  • JavaScriptCore fixed three issues with the RegExp prototype, improving conformance with ES5.
  • Through a minor Accept-header change, WebKit now properly indicates to prefer HTML over XML.
  • Safari on Mac OS X Lion will be able to use the AV Foundation framework for media playback.
  • Soft hyphens will now always be correctly rendered when a linebreak occurs.
  • A lookup-based approach for applying CSS properties has been introduced.
  • Warnings and errors for invalid viewport values are accurate again.
  • Following the announcement, Gears has been removed from the codebase. Thanks, @temp_01!
  • WebKit’s HTML parser will now yield for layout before running scripts, improving first-paint time.
  • Web Inspectors breakpoint sidebar-pane has been re-implemented in a more common format.
  • The prerender experiment will now be enabled for about 5% of the Chromium users.
  • Welcoming Google Chrome 12. Too bad about the same message was used for Chrome 11!
  • Search-box extensions may now choose how auto-complete should show: normal, delayed or never.
  • UDP sockets have been implemented for Windows, presumably for Chromium’s P2P API.
  • Chrome will be removing all languages except for English, with Scott Hess liaising for proper user support.

All the best to the people in Japan, I truly hope things will start getting better as soon as possible. Good luck!

Read more (15 comments) »

CSS Quotes, mock-ups of the HTML5 date-picker and the P2P API

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

With 617 commits at the WebKit side and 808 for Chromium, last week was another busy week. Highlights are that WebKit finally implements CSS 2.1 quotes and lots of work on several upcoming features, such as MHTML.

One feature a lot of people are looking out for is the inclusion of a date-picker in WebKit. Tamura Kent started implementing a calendar for several date-related input types exactly a month ago, which has now evolved in a graphical and usable date picker.

While the implementation is by no means complete, it’s a good thing that work is being done to finish support for Web Forms. Keep an eye out on bug 53961 to stay up-to-date.

Chromium users may have seen a new option appear on their about:flags page: “P2P API”. While not a lot is known about the team’s plans, it’s safe to assume that implementation of the HTML5 peer-to-peer connection API has been started, together with an interface for Pepper. So far, an implementation for Mac and Linux was added, a dispatcher for the renderer and initial work on the internal implementation.

The Web Inspector team improved performance of DOM search as it was extremely slow for GMail. The summary bar in the network panel’s item view won’t overlap the contents anymore. Furthermore, the fourth part of Detailed Heap Snapshots landed in WebKit as well, which implements displaying of different snapshot projections. While they’re not available yet, there are some screenshots available.

As for standard-related updates, Dave Hyatt made sure that positioned elements work with vertical text. Ruby text will now be expanded when it’s shorter than its base and the document.open implementation has been updated per the HTML5 specification.

Carol Szabo implemented full support for quotes in WebKit, following the CSS 2.1 specification. The -webkit-hyphenate-limit-{before,after} CSS properties have been added. Safari’s JavaScriptCore JavaScript Engine now implements the seal/freeze/preventExtensions methods for normal object types, except for arrays.

Other changes which occured last week include:

  • The -webkit-hyphenate-locale CSS property has been renamed to -webkit-locale.
  • Layout performance for pages with a lot of floating objects has been improved majorly.
  • Numeric input fields which have an initial value may be cleared again, and accept localized values.
  • Through an ICU update, Chrome now respects the new sorting rules for the French language.
  • WebKit’s GTK port now supports multiple threads for JavaScriptCore due to this change.
  • Handling of the currentColor color for SVG now follows the specification.
  • Support for handling quoted-printable strings has been added, in preparation of MHTML support.
  • CSS Outlines will now be drawn for table and table-cell elements.
  • The WebKit2 API now supports printing pages on Windows.
  • A redundant “Windows; ” has been dropped from the default User Agent string on Windows.
  • The fast-path for rgba() parsing now properly clamps out-of-range alpha values.
  • Another site for the hardcoded HSTS list; shouldn’t we try to avoid doing this?
  • Support for the WebKit Full-Screen API has been added to Chromium, hidden behind a flag.
  • The speech bubble volume indicator has been improved with an indicator for background noise.
  • Another flag has been added to trigger the multi-profile feature, no functionality yet either.
  • The grab and grabbing CSS cursors have been implemented for Mac/GTK.
  • Chromium’s GPU Process on Windows will now be sandboxed!
  • Speech input fields (<input x-webkit-speech>) have been enabled by default.
  • Multisampling will be disabled for all ATI/AMD GPU’s when using Mac OS X, due to buggy drivers.
  • The filesystem: URL scheme has been enabled by default.

And that’s it again. If you want to dig around in the updates from two weeks ago, check out all WebKit and Chromium commits. Upcoming work to keep an eye out for are the visibility API and an implementation of the text-orientation CSS property. Finally: Thanks, guys! 🙂

Read more (4 comments) »

Minimum DOM Timer intervals, hiding extension badges and a faster YouTube

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

With 611 commits at Chromium and 733 commits at WebKit, last week brought a total of 1,344 changesets. Highlights include dynamic minimum intervals for DOM Timers and the addition of a chrome://crashes page.

Web Inspector will now reflect style changes when they occur without the Inspector, e.g. though a piece of JavaScript code. Furthermore, work has been laid out for improving the Web Inspector debugging protocol. A document on Google Docs has been created, carefully drafting the JSON-based protocol.

One downside of having a tabbed browser is that websites often remain open while you aren’t using them. Normally this isn’t a problem, but sites with high frequency timers can continue to use a lot of CPU this way. Therefore Chromium intends to make the minimum DOM Timer interval dependent on the visibility of the tab.

Following this WebKit patch, Kenneth Russell landed both support for dynamic values and an experimental decrease from 4 milliseconds for foreground tabs to 1 second for background tabs. While it was reverted shortly after it landed (and thus not available anymore), it certainly is an experiment to keep an eye out for.

Other interesting Chromium changes include the feature for Mac OS X users to hide extension badges via their context menu, addition of a chrome://crashes page to display recently reported crashes and renewed information about the latest version of Adobe Reader, Flash, Shockwave and RealPlayer. The minimum version of Java has been increased to make sure that the user’s installation includes a critical patch.

As for specification-related updates, Luiz Agostini continued his work on implementing the HTML5 <details> and <summary> elements by supporting localized text for them. Right now a patch implementing the element’s rendering is up for review. Support for “dir=auto” has been added, the prepare a script section of the <script> element has been implemented and Chromium was taught how to handle elliptical gradients.

A special note for Dave Hyatt’s monster patch which changed WebKit’s entire line box tree from using integers to using floats. This allowed for the removal of many rounding hacks and opens up the path for features such as sub-pixel positioning for fonts.

Other changes which occurred last week:

  • Select elements may now be borderless on Chromium for Linux.
  • The IndexedDB team has finished up implementing the new event model.
  • Chromium’s WebDriver protocol gained support for manipulating cookies for a session.
  • Initial support for per-origin quotas has been added to the IndexedDB implementation.
  • The fast CSS selector path has been enabled for child and subselector combinators.
  • The third part or the detailed heap snapshot implementation for V8 has landed.
  • No more green pixels as the edges of certain GPU-accelerated videos due to this commit.
  • Opening Adobe Reader for PDFs can be enabled by default via an information bar again.
  • An initial version of the WebGL OES_vertex_array_object extension has been implemented.
  • The parser will now yield for layout before running scripts, which improves the first paint-time
    significantly for slower connection speeds (up to 20% on YouTube!).
  • The set and remove cookie methods from Chromium’s Cookie Extension API now support callbacks.
  • Displaying fixed elements on scaled pages has been improved.
  • Developers working on WebKit changes through Chromium can now access its debugging channels.
  • SVG Animations are now able to animate to or from “inherit” and “currentColor” values.
  • An initial implementation of the Pepper Transport API has landed for Chromium.
  • Chromoting has received various minor updates, but still is not accessible for end-users.
  • New icons have been committed for Chromium to indicate whether prerendering succeeded.
  • Badges have been added to Chromium OS to display what kind of mobile network is being used.

Unfortunately, I won’t be around next week to write an update, so the next update will be two weeks from now. Check out Planet Chromium for updates in the meantime. See you on the 7th (or earlier elsewhere)!

Read more (3 comments) »

Random numbers, even better CSS performance and improving Google Search

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

Another busy week has passed with 673 commits to WebKit’s repository and 637 to Chromium’s, totaling up to 1,310 changes. Highlights include the availability of a method to get cryptographically strong pseudo-random numbers and more CSS Style Selector performance improvements.

The Google Web Search team just launched an extension which allows you to block websites from appearing in the search results. Using it won’t just improve the accuracy locally, but it’ll also share your blocked sites with Google. Eventually it may influence a website’s ranking, thus improving search quality as a whole.

The Web Inspector team landed quite some patches last week. Double clicking on an entry in the Network Panel will now open the resource in a new tab, full reloads (thus bypassing the cache) may be done by pressing <Ctrl/Cmd + Shift + R> within the Inspector and traversing between suggested values without entering anything is a possibility now as well. Finally, support for the File System View has been removed.

Following quite some discussion, Adam Barth announced he landed support for a cryptographically strong pseudo-random number generator. The feature is available as the window.crypto.getRandomValues method and can fill any integer-based Array Buffer with random values. Meanwhile, Brandan Eich expressed the intention to standardize a better random number generator at the EcmaScript level.

As for specification related changes, Adam Barth checked in a change which enables the Array Buffer objects, such as Float32Array, by default for every project using WebKit and the getComputedStyle method will now return the computed values for margins. Inset shadows with large offsets will now render correctly, as will repeated gradients and the ShadowBlur class has been taught how to tile inset shadows.

As for experimental features, part of a prototype implementation of the proposed LocaleInfo API in EcmaScript landed as a V8 extension in WebKit. The API aims to provide a consistent, rich internationalization API for doing anything from formatting currencies to getting information about the used region and calendar.

Antti Koivisto taught the CSS Style Selector to skip over sibling selectors and faster sorting, which bring some minor improvements, after which he landed two more awesome patches: one which enables ancestor identifier filtering for tree building, halving the remaining time in style matching over a typical page load, and a fast path for simple selectors that speed up matching up another 50% on some websites.

Other changes which occurred last week include:

  • The recent work on WebKit’s XSS Filter will be available on Chrome’s dev-channel shortly.
  • Support for PCRE Regular Expressions has been removed from WebKit entirely.
  • The about: URLs will now be auto-completed in Chromium, even if you never visited them before.
  • The filesystem: protocol has been implemented for usage with the File System API.
  • The clear method for IndexedDB’s IDBObjectStore has been implemented.
  • IndexedDB Cursors will now skip entries which have been deleted since the cursor was opened.
  • Support for Web Archive may be disabled during compile-time, which will be done for Qt and Chromium.
  • WebKit2 now features support for drag and drop on Windows.
  • The rest of the controls for an HTMLMediaElement will now also use the Shadow DOM.
  • Script elements pointing to external scripts will now be disabled when the X-WebKit-CSP has been set.
  • The UglifyJS Parser files have been updated to the latest version.
  • An implementation of Loop and Blinn’s GPU Accelerated Path Rendering algorithm has landed.
  • Shaders have been added for GPU Accelerated Path Rendering.
  • Visualizing borders around composited layers may now be enabled via about:flags.
  • The new HTML5 Parser in WebKit will now inform Web Inspector about parsing errors.
  • Three updates landed, improving WebKit’s consistency among browsers in terms of URL canonicalization.
  • chrome.google.com will now use Strict Transport Security, limiting communication to secure connections.
  • Link pre-rendering progress nicely continues. I added a few <link> elements on peter.sh as an experiment.

And that’s all again for this week. If you’re interested in web specifications as well, the W3C announced it extended the HTML Working Charter, together with a renewed timeline for HTML5: Last Call in May, to be followed by the Recommendation status in 2014.

Read more (4 comments) »

Unspoofable infobars, fast descendant selectors and the Web Inspector API

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

With Chromium and WebKit totalling at 1.372 commits in the last week, it certainly has been a busy one. Highlights include unspoofable information bars for Chromium, impressive CSS performance improvements for descendant selectors and the first signs of Web Inspector’s API for Chromium extensions.

To start off with some good news about the Web Audio API: Chris Rogers announced the availability of the API in Chromium for Mac OS X. If you’re a Mac user, download a snapshot, visit about:flags and enable the Web Audio API. Check out the proposal or some examples and start creating!

The XSS Filter was taught two new tricks by Adam Barth last week: dealing with javascript: and data: URLs. Performance was improved by skipping seemingly innocent pages, as well as by using a suffix tree, and websites can opt-out using the X-XSS-Protection header again. The filter replaces the XSS Auditor, which has been removed.

Antti Koivisto most definitely won the WebKit. After slightly improving performance by replacing a linked list with a vector last Wednesday, on Saturday he improved the performance of style recalculations by three to five times by optimizing matching of descendant selectors.

The reason descendant selectors are considered “bad” is that browser implementations have sucked. There is nothing inherently wrong with them.

Yesterday, he improved style matching by another 30% for websites using a lot of descendant selectors by switching the implementation to a Bloom Filter. Finally, Antti also fixed the adjacent sibling and :last-child:after selectors.

Great news for people who have an urge to extend Web Inspector: first drafts of the Web Inspector Audit, Inspected Window, Panel and Resources APIs are now available! While the APIs themselves have not been exposed to extensions yet, progress on this subject most definitely is a good thing. It may even indicate that we’ll be able to welcome Page Speed for Chrome not too long from now.

As for specification related updates, WebKit’s implementation of the -webkit-text-combine property is now complete. The background-clip property is now part of the background shorthand-property and CSS counters in anonymous renderers (e.g. for :before) now work properly.

Furthermore, Dave Hyatt implemented support for vertical text for printing and pagination. The font size for ruby-text will now default to 50% of its parent text and input elements using the placeholder attribute will continue to display it when focused on Mac OS X Lion, which is a willfull violation of the HTML5 specification.

Finally, the subset method for Typed Arrays has been renamed to subarray, asynchronous event handlers will be suspended when a modal dialog is being shown and Google has started on implementing media statistics.

Other changes last week include:

  • Reflections can now also be rendered through Chromium’s accelerated compositing path.
  • The frames in Web Inspector’s Resources panel will now remain visible after a refresh again.
  • The Web Audio API’s buffer size for Chromium on Mac has been decreased.
  • Auto-fill in Chromium now works with the new HTML5 input types (Chromium-side patch).
  • Canonicalized URLs will now get their schemes lowercased in Safari, matching other browsers.
  • Accounts on Chromium OS may now use +suffixes in their e-mail addresses.
  • The pink-video issue in Chromium when accelerated compositing has been enabled has been fixed.
  • Some performance tests were added for URL parsing, showing quite some differences among vendors.
  • Images using CMYK and color profiles in a JPEG file will be shown properly again on Chromium Mac.
  • The event model for IndexedDB has been overhauled, per TPAC discussion.
  • Support for cursor updates for IndexedDB Cursors has been implemented as well.
  • HTML5’s registerProtocolHandler method has been implemented, though is still disabled.
  • The options within a <keygen> element have been updated to use the Shadow DOM.
  • The background page badge which would appear over the wrench menu in Chromium has been removed.
  • Numerous SVG font-issues have been solved by calculating a font’s final display size before rendering it.
  • Unspoofable information bars have been implemented for Chromium, so mind the arrow!
  • Chromium will now save the view chosen on the about:plugins page (details or normal view).
  • Google Chrome Frame can now be installed in Internet Explorer 9 without needing admin privileges.
  • Separate proxy settings will now apply to Chromium’s Incognito mode.
  • The first part of changing the user agent via Web Inspector has landed.
  • Two more shadow-related issues have been fixed.

And that’s all for this week. See ya! 🙂

Read more (6 comments) »

Chrome 11, a renewed XSS Filter and vertical text for multiple-column layouts

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

A combined total of almost 1300 changes have made it a busy week for the Chromium and WebKit projects, with highlights such as work on two Chromium Extension APIs, a new XSS Filter and lots of work on shadows.

The Chromium team increased Chrome’s major version to 11. Google Chrome 10 will be using branch 648, which represents all WebKit commits up to r76408. Do keep in mind that important fixes will be merged with the branch, so these numbers aren’t entirely accurate.

As usual, there have been a number of changes in Web Inspector as well. In-line JavaScript and CSS content in HTML source-code will now be syntax highlighted and the render performance of the network panel has been improved. Exporting entries from the network panel to the HTTP Archive format will now copy the data to your clipboard, instead of downloading it to a random file.

While it’s already known that Web Inspector supports remote debugging, the front-end may now also be served from the cloud. No hints on the cloud itself yet, though. The first part of detailed heap snapshots landed as well, which will eventually enable you to more accurately trace down memory leaks by having access to a snapshot of each individual object in the JavaScript VM.

In terms of security, Adam Barth’s latest project is a new design for WebKit’s XSS filter. Rather than watching scripts as they execute, the tokens emitted by the HTML tokenizer will be analyzed. So far, the filter has been taught about processing the <script>, <object> and <embed>, <applet>, and the <meta> and <base> elements. A message will be added to Web Inspector’s console if anything gets blocked.

There has been lots of specification-related activity as well this week. The perspective property from the CSS 3D Transforms module now accepts lengths rather than a number, range and number inputs will reject event-based changes if they’re declared disabled or readonly and checkValidity will now return the correct result if an invalid event got cancelled.

Dave Hyatt continued his work on supporting vertical text, and landed a change which adds support for vertical text in multiple column layouts. Changing the unicode-bidi property will force a re-layout, as will changing font-sizes when the em-unit is used in a gradient.

Simon Fraser has done quite some work on shadows and introduced the ShadowBlur class, which will be used to unify shadow rendering across platforms. Two follow-up patches added support for inset box shadows, and the -webkit-box-shadow property has switched over to the new system as well, making people happy 🙂

Other changes from last week include:

And that’d be all again!

Read more (8 comments) »

CSS value autocompletion, window.onerror and Interactive Validation

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

Last week brought 649 commits to the Chromium repository, and 575 to the WebKit one. Among the changes are support for auto incrementing keys for IndexedDB and interactive validation which will now be available by default in Chromium. The Web Inspector team has been active again as well!

After a few weeks of behind-the-scenes work, Web Inspector has received some very interesting updates again. Following auto-completion for properties, many values will now be suggested and completed for you as well. The heap snapshot table may be sorted again, CPU profiles will survive refreshes and using the console.trace method won’t cause a crash anymore. Web Inspector has also been taught application/x-font-woff as a valid MIME type for WOFF fonts.

Furthermore, a change has been committed which is a first step in supporting breakpoints on arbitrary positions on a line, which would be convenient for compressed scripts. Additionally, UglifyJS will be assisting in that as well, considering it’ll be included with WebKit in preparation for a script beautifier feature!

There have been quite a few specification-related updates this week as well. Interactive Validation has been enabled by default for Chromium, color changes in <select multiple> will be visible immediately and clipping backgrounds to the content-box now is a possibility. Furthermore, keygen elements won’t identify themselves any more as select elements. Mozilla’s requestAnimationFrame has been implemented, including on the Chromium side.

As for HTML5, two new form-related events have been implemented: onformchange and onforminput. Per the request of Jeremy Keith, datalist elements will be visible by default again, and uncaught JavaScript exceptions will now trigger the onerror event on the window object.

One performance-related change by Stephen White is the implementation of accelerated path drawing and clipping for the 2D Canvas GPU-path, done using a simple curve interpolator and the GLU tesselator. It speeds up Microsoft’s Galactic demo by three to five times —quite impressive.

Other changes from last week include:

  • More efficient, in-browser thumbnail generation is now available via a command line flag.
  • The –remoting flag and setting in about:flags are now available for all platforms.
  • Basic printing routines have been implemented in the WebKit2 API.
  • Some revalidation checks have been removed from the pre-rendering conditionals.
  • The languages and spell-check pages are now available in the DOMUI Settings for Chromium.
  • Style sharing optimizations have been improved, with 25-40% of the styles being shared.
  • An onBeforeRetarget callback has been introduced to the Web Navigation Extension API.
  • Happy New Year to Chromium’s about:version page!
  • The state of  the set about:flags has been moved out of a user’s profile.
  • The about:version page in Chromium now reports the used WebKit branch and revision number.
  • Various matrix multiplications will now be done in the in a column-major order.
  • The OES standard derivatives WebGL extension has been implemented in WebCore.
  • The IndexedDB implementation now is capable of handling auto incrementing keys.
  • Regular Expression objects in JavaScript aren’t callable anymore in Safari.
  • Support for YV16-video frames has been added to Chromium’s WebKit port.
  • In preparation of accelerating more drawing via the GPU, Chrome has updated the Skia version.
  • Enforced throttling for URL requests has been disabled in Chromium, pending further analysis.
  • Loads of JavaScript stability fixes by Apple’s JavaScript team.
  • Password input fields will now show a warning when caps-lock is enabled, on GTK WebKit.
  • The -webkit-mask-* CSS properties can now be rendered using accelerated compositing.

And that’d be all again! Be sure to have a peek at this week’s update on the WHATWG blog, with topics like a proposal for XSS mitigation in browsers and a Change Proposal for a muted attribute for media elements.

Read more (5 comments) »

CSS Variables and mixins, Interactive Validation and pre-rendering

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

With 1,134 commits in the last week, development certainly is getting back on track after the holidays. This week’s highlights include some plans for improving the CSSOM, implementation plans for CSS Variables and the landing of Interactive Validation within WebKit. I won’t address H.264. Enough people have done that.

If you’re interested in updates related to HTML, Anne van Kesteren published an item on recent changes happening around the WHATWG. The article mostly covers discussions which took place on the whatwg@whatwg.org mailing list, and certainly is an interesting read!

Tab Atkins, member of the CSS Working Group and the Google Chrome team, has published the slides of a presentation he hosted last Wednesday. It talks about how the CSSOM, the interface between JavaScript and CSS, basically sucks. The presentation demonstrates four relatively new concepts:

  • CSS Variables
    By declaring a variable through the @var rule, its type and the value, anything from colors to lengths, rotations and functions can be defined and will be available to all CSS used in the document. Support for local variables will be available as well, through the @local at-rule.

@var petersh-paragraph-size length 12px;
@var petersh-paragraph-color color rgba(0,0,0,0);
p {
. color: var(petersh-paragraph-color);
. font-size: var(petersh-paragraph-size);
}

  • CSS Mixins
    Mixins come down to being able to extend any rule with certain, common properties. They take parameters similarly to CSS Variables, including the ability to have default values for them.
  • CSS Nesting
    Nesting in CSS, especially when used without classes or IDs, can be a pain. The @this at-rule will be introduced for usage in CSS rules. The selector you supply behind it will apply only to descendants of elements matched by the current rule. That clears the way for structures like this:

header {
. color: red;
. @this a {
. . color: blue;
. }
}

  • CSS Modules
    No, not the CSS Modules which make up CSS Level 3. CSS Modules basically are namespaces for CSS Variables and Mixins. Mixins and variables can still be referred to by prepending their name with the namespace’s name, or by including the @use at-rule to have the parser include all of them.

    While the idea is fine, I personally think this shouldn’t be part of the specification. The use-case is easily obtainable by advocating authors to prefix their variable names, like “petersh-header-color” instead of “header-color”. Two types of namespacing, sharing similar syntax, is just going to cause confusion.

While the current code is only available on a few machines in Sydney, Google is planning to publish an initial specification this quarter, and implement the changes before the end of the year. Considering neither these plans for CSS Variables nor the CSS Mixins and Nesting have been shared on the www-style mailing list yet, it’ll be interesting to see how it will be received by other vendors. Related discussion from a few years ago has shown that it’s a fairly controversial issue, with many opinions being far apart.

Last Thursday, Kent Tamura landed support for the Interactive Validation UI using the new Shadow DOM model. With most bugs out of the way, messages and an –albeit internal– API being available for Chromium to enable the feature, it won’t be long before it becomes available in the nightlies.

In other specification-related news, the scroll event will now be fired asynchronously. The WebKitCSSMatrix object in the DOM now accepts none as a valid keyword, and using the toDataURL method for a canvas on Chromium will now composite onto a black surface when the destination format does not support an alpha channel.

Other changes which happened last week:

  • Tony Gentilcore now is a WebKit reviewer, congratulations!
  • Adam Barth is working on a proposal for embedding a security policy in an HTML document.
  • He also announced to have finished moving WebKit’s source files to a separate directory.
  • The about:sync page has been updated to use the new DOM UI displaying system.
  • The media player from WebKit’s GTK port now features a slider to change the volume.
  • Simon Fraser wrote an excellent article on his CSS3 Gradients implementation.
  • Support for dropping data to WebKit2 has been implemented for Mac OS systems.
  • Password synchronization has been enabled by default for Google Chrome.
  • Some issues with Safari’s strict mode implementations have been fixed.
  • The security model used chrome://-URLs has been updated, as described in this message.
  • Three fixes in Safari’s JavaScript engine found via Mozilla’s jsfunfuzz.
  • Crashed extensions will now be visible on the chrome://extensions page.
  • Following this very commit, the –enable-page-prerender will now actually pre-render your pages.
  • Chris Rogers added part of the Chromium-side for low-latency output for the Web Audio API.

And that’s all for this week!

Read more (7 comments) »

JavaScript Full Screen API, Navigation Timing and repeating CSS Gradients

Published on in Google Chrome, Last Week, Standards, tech, Trident, WebKit. Version: Chrome 10

Development is slowly getting back on track with the 851 commits which were done last week. This week’s highlights include the availability of a per element JavaScript full screen API, a prefixless Navigation Timing implementation and the addition of support for repeating CSS gradients.

With both Microsoft and Google strongly pushing the Navigation Timing specification, both vendors finished most of their implementation and a Last Call specification will be published tomorrow. Because of this, WebKit has dropped the vendor prefix and Microsoft is very likely to do the same. Opera and Mozilla have expressed concerns, but seem supportive as well. It’ll certainly become an interesting Last Call phase.

As for other specification-related changes, text emphasis marks won’t appear over characters that have ruby annotations anymore. Support for repeating gradients has been added as well, completing the set of gradient related CSS properties. Negated selectors will be given the specificity of the selector they’re negating, and parsing of the argument for the :nth-child CSS selector has been updated and now accepts whitespace, but rejects invalid values.

...
var elem = document.getElementById("my-element");
elem.onwebkitfullscreenchange = function () {
console.log ("We went fullscreen!");
};
elem.webkitRequestFullScreen ();
..

After several months of writing and updating patches, Jer Noble landed the final part of his work on supporting per-element full screen last Friday. While the implementation is only available in WebKit nightlies on Mac OS systems so far, I’d expect a Windows nightly rather soon and Chromium is interested as well.

WebKit’s implementation follows Mozilla’s proposal with only a few exceptions: instead of accepting flags for requestFullScreen, an additional method called requestFullScreenWithKeys has been made available. The following three methods have been added for the Document and all Elements in the DOM:

void webkitRequestFullScreen();
void webkitRequestFullScreenWithKeys();
void webkitCancelFullScreen(); // only on Document

Furthermore, a new attribute called allowFullScreen has been introduced for iframe elements, the fullScreenChange event has been added and three CSS pseudo-classes have been added, namely :full-screen, :full-screen-doc and :full-screen-root-with-target. Mind that each of these additions has been prefixed with “webkit” or “-webkit-“, depending on the context.

Want to try the feature yourself?
All you need is a Mac OS X system on which you can run WebKit nightlies. Download and install the latest one and open up Terminal. Within it, execute the following command to enable the feature:

defaults write com.apple.Safari WebKitFullScreenEnabled 1

After (re)starting the nightly, the exposed API will actually launch an element in full screen. Click on the icon to the left of this paragraph to display this very article in full screen. Using it to display a single element in full screen can be done too, but still is a bit unstable at the time of writing.

Other changes which occurred last week:

  • The disabled property on stylesheet elements will now disable the sheet altogether.
  • Adam Barth moved the WebCore directory, containing most of WebKit’s code, to Source.
  • A memory sampler has been added to WebKit, primarily for usage in Safari on Mac OS X.
  • The onbeforeunload event is now available for framesets as well.
  • SGML-style comments within <style> elements will now be ignored when using XHTML.
  • Tabbed options (also known as WebUI) have been enabled by default in Chromium.
  • Per an update in the HTML5 specification, framesets will now be allowed after hidden inputs.
  • The Web Audio API received some more work for the Chromium port.
  • Mihai Parparita now is a WebKit reviewer, congratulations!
  • The PNG compression settings for Chromium have been optimized for performance.
  • Inline script execution will now block on pending stylesheet loads, as other browsers do.
  • The O3D Plugin API will now work with Opera 11 as well.
  • Web Inspector has been enabled for all internal chrome:// pages.
  • The icon for active background extensions over the wrench menu in Chrome has been updated.
  • The position of Notifications can now be changed via a notification’s option menu.

This week might bring four times faster JavaScript to Samsung’s EFL port, support for the object-fit CSS property and, hopefully, much more patches from the Web Inspector team. Have a good week!

Read more (19 comments) »