Archive for February, 2011

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) »