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) »
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) »
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) »
Happy New Year! Even though there were only 354 commits in total, there certainly were some interesting subjects to write about. Highlights include cleaner gradient syntax for WebKit, support for the :in-range and :out-of-range CSS Selectors and background extensions enabled by default.
There are two things which I’ll change with the weekly updates, starting at this article. Firstly, I’m no longer forcing external links to open up in new tabs/windows: clicking them will navigate away from the article. Furthermore, I have added tags indicating the latest Chromium version at the time of publishing, making it easier to determine what changed in a major Chrome release: version 7, 8, 9 and the latest: Chrome 10.
Following Tab Atkins’ promise that the gradient part of the CSS3 Images specification won’t change anymore, Simon Fraser was quick to jump in and implement the gradient syntax in WebKit. This is good news for the cutting-edge developer, as WebKit’s own proprietary syntax won’t be nessesary anymore in the near feature.
So far, two patches for supporting the new gradient syntax have landed. The first one implements the syntax for non-repeating linear gradients, including support for non-percent based and negative lengths. The second patch adds support for radial gradients through the -webkit-radial-gradient property, which includes shapes and sizing for the ellipse. Mind that only circular ellipses are supported for now.
Hopefully the new CSS3 Images module will be published as a Working Draft soon, as Tab Atkins is intending to request it. The new draft introduces the ability to use elements as backgrounds, as well as a more convenient way of cross fading background images.
The Web Inspector team didn’t seem to care about the New Year either and landed various patches. The protocol has been cleaned up and was enriched with Network, DOM Storage and Database domains. Disabled style properties get enabled when they’re edited and pasting a full property declaration will now split it up in a property and value automatically.
Other changes in this week include:
- Support for HTML5’s :in-range and :out-of-range CSS selectors has been added.
- Viewing the source of a pinned/app window won’t clone the tab’s state anymore.
- The JSON.parse method in JavaScriptCore now properly exists as a function taking two parameters.
- With the addition of the Surface3D class, the Pepper3D API is now complete, but not fully functional yet.
- JavaScriptCore now recognizes vertical tabs and form feeds as valid JSON whitespace characters.
- Accidental white-space for Chromium OS usernames will now be removed.
- Sandboxed iframes no longer have access to the top.history methods.
- Periods in Google Apps account names won’t be ignored anymore in Chromium OS.
- WebKit’s client-based GeoLocation has been enabled for Chromium.
- Background extensions have been enabled for all platforms, except for Chromium OS.
- Submitting forms using the GET method to the current location as its action won’t reload the page.
Where my first day of work in 2011 has already passed, yours might just be beginning. See you next week!
Read more (7 comments) »
With just 347 commits at WebKit, and 433 at Chromium, activity indeed has been down a bit. Nevertheless, there have been some interesting changes, including spatialization resources and Strict Mode fixes for Safari.
Matrices have been given some love within WebKit, with two more methods for the CSSMatrix class: skewX and skewY. Both normal 2D matrices and 3D matrices will now take the page’s zoom factor in account, and some additional tests have been added to ensure that behavior on CSSMatrix as well.
Specification support has been given quite some attention again. JavaScriptCore, the JavaScript engine used by Safari, no longer allows you to delete variables, functions or arguments per ECMAScript 5’s Strict Mode. Defining multiple font families for a CSS @font-face rule will discard the rule. The box-shadow property no longer requires a prefix, although -webkit-box-shadow remains available for non-standard blur radiuses.
Within Web Inspector, work is well on its way to support auto-completion for a property’s values. There still are some patches which need to be updated before the feature can be implemented, but the forecast is rather good. Meanwhile, Chris Rogers added spatialization resource files for the Web Audio API and landed an AudioBus for Chromium, bringing wider support for the API a step closer.
Other changes last week include:
- Borders with non-opaque alpha colors won’t break gradients anymore for Chromium.
- Support for listening sockets was added for Chromium, used for Cloud Print, Remoting and Automation.
- Five new commands have been implemented in Chromium’s Web Driver, for tracking a page’s elements.
- V8’s implementation of window.open has been moved to WebKit’s common one.
- The initial state for HTML5’s interactive validation on <select required> elements has been fixed.
- Rendering and script execution won’t block anymore on deferred stylesheets.
- Ryosuke Niwa has joined WebKit’s reviewers team, congratulations!
- Chromium’s timeline in media controls can now deal with widths less than 240 pixels.
- The performance of Chromium’s toDataURL for canvasses has been improved by 3 times.
- The root layer of a composited page will now be tiled as well.
- Some major directory reorganization work is underway within WebKit: don’t get lost!
Considering this year only counts four more days, I don’t think this week will bring much surprises, even though there are some interesting patches pending. Have a great New Year’s Eve and a happy New Year!
Read more (1 comment) »
With 611 commits to the Chromium repository last week, and 449 commits to the WebKit one, my guess is that last week was the last week this year with more than a thousand changes. Highlights include support for the text-emphasis property and Web Inspector’s style editing panes, which now support Firebug-like editing.
Good news for fans of Firebug: editing CSS properties in Web Inspector will now be done with separate fields for the property’s name and value. Using the arrow keys to increment or decrement a numeric value will cause immediate changes again. Furthermore, some more work was done on the Extension API. Specifically, support was added for adding and overriding HTTP request headers.
As for specification related changes, the endedPlayback property for HTML5 media elements won’t return true anymore if the media file couldn’t be loaded. The -webkit-appearance property no longer accepts the value caps-lock-indicator and the delete method for IndexedDB Cursors has been added.
Work on two text-related CSS properties has continued as well. Firstly, Dan Bernstein has been working on the text-emphasis property, the final part of which landed last Friday. This property allows you to include small symbols next to the text, which Eastern Asian documents may use to emphasize the run of the text. Takumi Takano updated the values for text-combine to match the current CSS proposal.
Other changes last week include:
- Kenneth Russell ported the Web Audio API’s FFTFrame implementation to MKL.
- Stylesheets defined under the “print” media will now be downloaded with a lowered priority.
- Chromium OS now also reports to accept the language “en”, following the Chromium browser.
- Chrome Frame will now ignore IE’s conditional comment tags when parsing a HTML stream.
- The –enable-page-prerender flag will now imply content prefetching as well.
- Hyphens are now allowed in the domain names of e-mail addresses for the Chrome OS users UI.
- The GTK WebKit port implemented two new accessibility roles: STATE_FOCUSED and STATE_FOCUSABLE.
- Inline flow layers are now able to paint floating descendants.
- Hooray! Inset box shadows will now render properly within Chromium.
- No access will be given anymore in Safari to existing databases in private browsing.
- The usual bits of work on the DOM UI / Web UI pages.
- WebKit2 is now capable of displaying an IME on Windows.
- The Qt port has implemented the File Reader API specification.
- More fine-tuning has been done for the Web Timing implementation.
Since the next article will take another seven days: Merry Christmas! I’m going to spend my time with family, so expect next week’s post to be rather short. However, I probably won’t be the only one. Enjoy!
Read more (7 comments) »
Even though there were just 1016 commits in the last seven days, the announcements from the Chrome team have certainly made it interesting. This week’s highlights include Crankshaft, extensive documentation for Web Inspector and quite some updates on specification support.
Tuesday, Google’s Sundar Pichai went on stage to make some announcements around the Chromium project. While it was rather obvious that the Chrome Web Store and Chrome OS would be announced, I did not expect free laptops for reviewing purposes to be given away. Neither did I expect the Crankshaft update to the V8 JavaScript engine, which significantly improves performance. Since I’m sure you’ve read most of it, I’ll just give a quick recap:
- The V8 team has introduced Crankshaft which uses adaptive compiling to focus optimizations on the areas that need it. It’s available on the Canary channel already.
- Chrome OS’ development has entered the stage at which it needs feedback from end-users. People living in the United States can apply for a notebook in the Pilot program.
- The Chrome Web Store has been launched! Already filled with a wide range of applications, it can strongly increase the capabilities of your browser.
The Google Chrome Developer Tools, or simply Web Inspector, is quite an extensive piece of software. Almost every developer will be familiar with the main screen: a clear overview of the elements available on the page and the CSS rules associated with them. But not everyone is aware that you can expand the Properties pane in the sidebar to see all the DOM properties, let alone the possibility to profile your JavaScript’s CPU usage, create memory heap snapshots or list the cookies which were sent when downloading an image.
Therefore excellent documentation has been published clearing up some of the most popular and useful features. Check out how the Profiles panel works, watch a video about debugging JavaScript or debug more efficiently by using keyboard shortcuts.
In terms of improved standards support, the marquee element will now stop scrolling if scrollAmount has been set to zero. The object element now is an associated form element. Furthermore, I’ve updated Maciej Stachowiak’s patch which allowed support for the HTML5 hidden attribute to land (despite my earlier thoughts) and added the default CSS definitions for the <figure> and <figcaption> elements, completing support. Dai Mikurube added support for the required attribute on the select element.
Other changes include:
- Web Inspector is now usable with the WebKit2 API on Windows.
- Pasted text will now be checked for spelling errors in Chromium as well.
- Layout flow for involving transforms in scrolling has been refactored.
- The border-radius property can now be used for CSS Animations.
- Spatial navigation is now available for map and area elements too.
- Some progress on implementing the search function in Chrome’s Web UI.
- Transitioning multiple shadows should now be working correctly again.
- Support for the validation API for <object> and <keygen> elements was improved.
- James Robinson fixed the blurred text issue on large accelerated layers!
- Reflected unsigned attributes in IDL files will now be trimmed to [0, 2^31].
- Chromium is on its way to switch their libjpeg implementation to libjpeg-turbo.
- A quick patch has landed to solve the infinite redirects on developer.apple.com pages.
- The WebKit GTK port has landed support for the viewport meta-tag.
- The Input Speech API will now be available by default on Chrome’s dev-channel.
- Chrome’s dangerous download algorithm has been modified.
And that’s it again. This week has been a bit Chromium-y due to the announcements, I’ll give WebKit a bit more attention next week again! I’m on stage right at this very moment giving a talk about the Audio APIs, I’ll certainly write some more articles on that in the near future as well!
Read more (1 comment) »
With the commit count being up 52 percent compared to last week, totaling 1,184 commits, activity has been a lot higher than two weeks ago. Highlights include Google Chrome 8, tomorrow’s announcement and lots of updates to standard support.
Exactly six weeks and over 8,472 commits after the release of Google Chrome 7, Google has updated the Stable channel to the 8th version of their browser. This release brings support for Element.classList, asynchronous script loading, support for the steps timing-function for transitions, the about:flags page and hyperlink auditing, enabled by default.
As a quick peek-ahead towards a feature for Google Chrome that’s currently scheduled for version 9, which would be around mid January: Google Cloud Printing. The idea is simple: connect your printer with GCP and you’ll be able to print to it from any computer or smart phone, regardless of where you are. Probably unrelated: an event will be happening in San Francisco tomorrow morning sharing some exciting news about Google Chrome. While I have a fair idea what it will be about, there is little point in more speculation.
WebKit has taken a huge leap forward in terms of support for various standards. ArrayBuffers may now be transmitted using XMLHttpRequest’s send-method, a form’s elements property now includes fieldset and keygen elements, getBoundingClientRect won’t truncate the coordinates to integers anymore and focussed <area> elements will no longer use the image’s focus-styles.
An <input type=color> will no longer accept named colors and the incremental property is now available on the DOM of all input elements. The toDataURL method of a canvas’ context in Chromium can now export the image as a JPEG, the marquee element’s properties have been updated per the HTML5 specification (besides the events) and, while they don’t have visual effects yet, support for the four text-emphasis properties from the CSS3 Text module was added.
Finally, support for both lower and upper Armenian list style types has been implemented and initial versions of the HTML5 <details> and <summary> elements have been added by Luiz Agostini. Even though they aren’t interactive yet, work has started!
Other interesting changes which occurred last week:
- Option elements will not be bold anymore for certain Chromium versions.
- The about:flags page will now show a drop-down for items where multiple values are possible.
- Hyperlink auditing (<a ping>) may now be disabled via the about:flags page.
- Two games have been made the default Apps: Entanglement and Poppit.
- A command line flag for accelerated layers is now available, from about:flags as well.
- data URLs within Chromium can now trigger downloads as well.
- The GTK WebKit port finished the implementation of the MSAA ROLE_COMBO_BOX.
- Pausing and resuming downloads now works for the WebKit2 architecture.
- A tab overflow problem with right-to-left text has been solved.
- The behavior of the decreasing outer-spin-button has been revised.
- The \s modifier for the YARR Regular Expression Engine now also matches BOMs.
- Safari on Mac OS X will be getting a panel for multiple suggestions for misspelled words.
- Intel’s Yuqiang Xian eliminated a large overhead for a certain way of writing to a canvas.
- The Qt port has enabled support for the Web Timing implementation.
- More fine-tuning for Chromium OS’ User Interface.
- Four more commits by Chris Rogers for the Web Audio API implementation.
No, of course I didn’t forget Web Inspector. The “revert to revision” system has been implemented for the revision-system in the Resources panel. The display name of an object will now equal its constructor rather than its type, copy(node) in the Console works again, the cookies tab for a Network resource will only show for Chromium, and, finally, the Inspector protocol has been cleaned up.
As already mentioned earlier in the post, the Google Chrome team scheduled an announcement for tomorrow. Be sure to keep an eye out for news and updates, I’ll certainly devote some tweets to the announcement!
Read more (8 comments) »