<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Surfin&#039; Safari</title>
	<atom:link href="http://www.webkit.org/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.webkit.org/blog</link>
	<description>All about WebKit development</description>
	<lastBuildDate>Fri, 27 Jan 2012 13:08:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Vsevolod Vlasov is a WebKit Reviewer!</title>
		<link>http://www.webkit.org/blog/1785/vsevolod-vlasov-is-a-webkit-reviewer/</link>
		<comments>http://www.webkit.org/blog/1785/vsevolod-vlasov-is-a-webkit-reviewer/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 13:08:02 +0000</pubDate>
		<dc:creator>Pavel Feldman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.webkit.org/blog/?p=1785</guid>
		<description><![CDATA[Vsevolod Vlasov has been a major contributor to the recent improvements to the Web Inspector. Please join me in congratulating Vsevolod on his new role as a WebKit reviewer!]]></description>
			<content:encoded><![CDATA[<p>Vsevolod Vlasov has been a major contributor to the recent improvements to the Web Inspector. Please join me in congratulating Vsevolod on his new role as a WebKit reviewer!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkit.org/blog/1785/vsevolod-vlasov-is-a-webkit-reviewer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Filip Pizlo is a WebKit Reviewer!</title>
		<link>http://www.webkit.org/blog/1780/filip-pizlo-is-a-webkit-reviewer/</link>
		<comments>http://www.webkit.org/blog/1780/filip-pizlo-is-a-webkit-reviewer/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 00:13:19 +0000</pubDate>
		<dc:creator>Oliver Hunt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.webkit.org/blog/?p=1780</guid>
		<description><![CDATA[Filip Pizlo has been a major contributor to the recent improvements to the JavaScriptCore JIT and Garbage Collector. Please join me in congratulating Filip on his new role as a WebKit reviewer!]]></description>
			<content:encoded><![CDATA[<p>Filip Pizlo has been a major contributor to the recent improvements to the JavaScriptCore JIT and Garbage Collector.  Please join me in congratulating Filip on his new role as a WebKit reviewer!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkit.org/blog/1780/filip-pizlo-is-a-webkit-reviewer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Julien Chaffraix is a WebKit Reviewer!</title>
		<link>http://www.webkit.org/blog/1773/julien-chaffraix-is-a-webkit-reviewer/</link>
		<comments>http://www.webkit.org/blog/1773/julien-chaffraix-is-a-webkit-reviewer/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 07:52:33 +0000</pubDate>
		<dc:creator>Ryosuke Niwa</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.webkit.org/blog/?p=1773</guid>
		<description><![CDATA[Julien Chaffraix has been a very long time contributor to the WebKit project. He started by improving XMLHttpRequest. After that, he switched to different areas over the years (DOM, network stack, &#8230;). Lately he has been doing some rendering work aimed at improving &#60;table&#62; performance &#38; memory footprint. Please join me in congratulating Julien!]]></description>
			<content:encoded><![CDATA[<p>Julien Chaffraix has been a very long time contributor to the WebKit project. He started by improving XMLHttpRequest. After that, he switched to different areas over the years (DOM, network stack, &#8230;). Lately he has been doing some rendering work aimed at improving &lt;table&gt; performance &amp; memory footprint. Please join me in congratulating Julien!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkit.org/blog/1773/julien-chaffraix-is-a-webkit-reviewer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Andy Estes is a WebKit Reviewer!</title>
		<link>http://www.webkit.org/blog/1767/andy-estes-is-a-webkit-reviewer/</link>
		<comments>http://www.webkit.org/blog/1767/andy-estes-is-a-webkit-reviewer/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 22:36:39 +0000</pubDate>
		<dc:creator>Beth Dakin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.webkit.org/blog/?p=1767</guid>
		<description><![CDATA[I am delighted to announce that Andy Estes is now a WebKit reviewer. Andy works primarily on web site compatibility, which means that he has become familiar with many aspects of WebCore. You can thank Andy for keeping your favorite sites working in WebKit, and now you can ask him to review your patches too! [...]]]></description>
			<content:encoded><![CDATA[<p>I am delighted to announce that Andy Estes is now a WebKit reviewer. Andy works primarily on web site compatibility, which means that he has become familiar with many aspects of WebCore. You can thank Andy for keeping your favorite sites working in WebKit, and now you can ask him to review your patches too!</p>
<p>Congratulations, Andy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkit.org/blog/1767/andy-estes-is-a-webkit-reviewer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Luiz Agostini is now a WebKit reviewer!</title>
		<link>http://www.webkit.org/blog/1764/luiz-agostini-is-now-a-webkit-reviewer/</link>
		<comments>http://www.webkit.org/blog/1764/luiz-agostini-is-now-a-webkit-reviewer/#comments</comments>
		<pubDate>Sat, 10 Sep 2011 12:57:28 +0000</pubDate>
		<dc:creator>Andreas Kling</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[reviewers]]></category>

		<guid isPermaLink="false">http://www.webkit.org/blog/?p=1764</guid>
		<description><![CDATA[Luiz is a long-time WebKit contributor. He has been working on maintaining and fixing bugs in the Qt port, on the implementation of the details and summary elements, on media query listeners for which he also helped writing the spec, as well as many other things. He has been an extraordinary help for the Qt [...]]]></description>
			<content:encoded><![CDATA[<p>Luiz is a long-time WebKit contributor. He has been working on maintaining and fixing bugs in the Qt port, on the implementation of the details and summary elements, on media query listeners for which he also helped writing the spec, as well as many other things. He has been an extraordinary help for the Qt port, and I am today pleased to announce that Luiz is our newest WebKit reviewer. Please join me in congratulating Luiz!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkit.org/blog/1764/luiz-agostini-is-now-a-webkit-reviewer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Apple style span is gone</title>
		<link>http://www.webkit.org/blog/1737/apple-style-span-is-gone/</link>
		<comments>http://www.webkit.org/blog/1737/apple-style-span-is-gone/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 05:38:03 +0000</pubDate>
		<dc:creator>Ryosuke Niwa</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.webkit.org/blog/?p=1737</guid>
		<description><![CDATA[This week, I committed WebKit changes r92823 and r93001. They&#8217;re perhaps the most important changesets I&#8217;ve ever committed to the WebKit codebase because these changesets made WebKit no longer produce wrapping style spans on copy and paste and class="Apple-style-span" anymore. In fact, these are two changes I&#8217;ve always wanted to make ever since I started [...]]]></description>
			<content:encoded><![CDATA[<p>This week, I committed WebKit changes <a href="http://trac.webkit.org/changeset/92823">r92823</a> and <a href="http://trac.webkit.org/changeset/93001">r93001</a>. They&#8217;re perhaps the most important changesets I&#8217;ve ever committed to the WebKit codebase because these changesets made WebKit no longer produce wrapping style spans on copy and paste and <code>class="Apple-style-span"</code> anymore. In fact, these are two changes I&#8217;ve always wanted to make ever since I started working on the WebKit&#8217;s editing component in the summer of 2009.<span id="more-1737"></span></p>
<h3>Introduction to Apple style spans</h3>
<p>Apple-style-span is a HTML span element with the class &#8220;Apple-style-span&#8221;.  It is created whenever WebKit applies style on text by CSS.  For example, <code>document.execCommand('HiliteColor', false, 'blue');</code> may produce:</p>
<pre><code>&lt;span style="background-color: #0000ff;"&gt;hello world&lt;/span&gt;</code></pre>
<p>if &#8220;hello world&#8221; was selected.  The initial intent of this was so that WebKit can avoid removing or modifying elements created by the authors and meant to stay by differentiating spans added by WebKit itself and those created by the authors.</p>
<p>We also use an Apple-style-span to wrap the copied contents to preserve the style of the copied content.  If you copy &#8220;hello world&#8221; on this page, for example, WebKit puts the following markup into the pasteboard on Mac:</p>
<pre style="white-space: pre-wrap;"><code>&lt;span style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Times; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "&gt;&lt;span style="color: rgb(51, 51, 51); font-family: 'Lucida Grande', Verdana, Arial; font-size: 12px; line-height: 18px; "&gt;hello world&lt;/span&gt;&lt;/span&gt;</code></pre>
<h3>Problems with Apple style spans</h3>
<p>However, avoiding the modification of spans not created by WebKit turned out to be ineffective at best because the editing component had to add and remove so many other elements and WebKit also had to work with elements generated by other browsers and CMS editors.  Also, avoiding the removal of spans without <code>class="Apple-style-span"</code> caused the markup to get progressively verbose over time because sometimes we had to cancel the style added by those elements e.g. (<code>&lt;b&gt;&lt;span style="font-weight: normal;"&gt;unbolded text&lt;/span&gt;&lt;/b&gt;</code>). This was particularly apparent on mail clients that used WebKit as the editor such as Apple&#8217;s Mail or Gmail (if the user happens to use a WebKit-based browser).  In some case, an e-email consisting of 3 lines of text consumed 3MB in HTML because of nested spans created by WebKit and other mail clients.</p>
<p>An Apple-style-span that wraps the copied contents can get far worse if the copied contents include block nodes.  Consider the following markup which annotates &#8220;This is title&#8221; to be a level-1 header:</p>
<pre style="white-space: pre-wrap;"><code>&lt;h1&gt;This is title&lt;/h1&gt;</code></pre>
<p>When &#8220;This is title&#8221; is copied, WebKit puts the following markup in the pasteboard:</p>
<pre style="white-space: pre-wrap;"><code>&lt;span style="color: #000000; font-family: Times; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "&gt;&lt;h1&gt;This is title&lt;/h1&gt;&lt;/span&gt;</code></pre>
<p>Notice that the h1 is wrapped in a span!  In addition, WebKit used to wrap contents in two spans to retain the document&#8217;s style separately prior to <a href="http://trac.webkit.org/changeset/86983">r86983</a>.  Here, <code>font-family: sans-serif</code> was set on the body element and therefore stored in a separate span below:</p>
<pre style="white-space: pre-wrap;"><code>&lt;span style="border-collapse: separate; color: #000000; font-family: Times; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "&gt;l;&lt;span style="font-family: sans-serif; "&gt;&lt;h1&gt;This is title&lt;/h1&gt;&lt;/span&gt;&lt;/span&gt;</code></pre>
<p>If we paste the above example into right where the br element is in the following markup:</p>
<pre style="white-space: pre-wrap;"><code>&lt;h1&gt;&lt;br&gt;&lt;/h1&gt;</code></pre>
<p>WebKit produces this:</p>
<pre style="white-space: pre-wrap;"><code>&lt;h1&gt;&lt;span style="font-weight: normal; font-size: medium; "&gt;&lt;h1&gt;This is title&lt;/h1&gt;&lt;/span&gt;&lt;/h1&gt;</code></pre>
<p>Here, the span between two nested h1 is canceling the style of the outer h1 because the span is preserving the style of the container from which contents were copied; i.e. immediately outside of <code>&lt;h1&gt;This is title&lt;/h1&gt;</code>.  This is horrible because neither the spans nor the h1 add any semantic or visual information to the page, and it is invalid under any one of HTML4.01, XHTML1.0, and HTML5.</p>
<h3>A Two-Year Project to Remove Apple style spans</h3>
<p>When I started working as an intern at Google in the summer of 2009, this problem caught my attention and I decided to investigate the ways to fix it.  However, <a href="http://trac.webkit.org/browser/trunk/WebCore/editing/ApplyStyleCommand.cpp?rev=45747">ApplyStyleCommand</a> which implements inline style application commands such as <code>execCommand('bold')</code> and <code>execCommand('italitc')</code>, and <a href="http://trac.webkit.org/browser/trunk/WebCore/editing/markup.cpp?rev=44818">markup.cpp</a> and <a href="http://trac.webkit.org/browser/trunk/WebCore/editing/ReplaceSelectionCommand.cpp?rev=46280">ReplaceSelectionCommand</a> which are  responsible for copy and paste respectively all heavily relied on the classname &#8220;<code>Apple-style-span</code>&#8220;.  In particular, <a href="http://trac.webkit.org/browser/trunk/WebCore/editing/ReplaceSelectionCommand.cpp?rev=46280">ReplaceSelectionCommand</a> detected and treated the wrapping spans generated by <a href="http://trac.webkit.org/browser/trunk/WebCore/editing/markup.cpp?rev=44818">markup.cpp</a> on copy very differently from other elements. I soon realized that removing Apple style spans require the following 3 steps:</p>
<ol>
<li>Improve ApplyStyleCommand not to depend on Apple style spans</li>
<li>Improve copy and paste code not to use Apple style spans</li>
<li>Remove Apple style spans</li>
</ol>
<p>Since I was an intern at the time and I had only a couple of weeks left, I decided to focus on the step 1. So I fixed various bugs in ApplyStyleCommand and refactored the code.</p>
<p>When I came back to Google as a full-time employee, a year later, I continued to fix and refactor this class.  As a result, I have devised a <a href="https://rniwa.com/2010-08-31/pushing-inline-styles-in-webkit/">style application algorithm</a> which is now partially adopted by <a href="http://aryeh.name/spec/editing/editing.html">Aryeh&#8217;s editing spec</a>.  It&#8217;s a three-phase algorithm described as below:</p>
<ol>
<li>Remove conflicting styles (e.g. if we&#8217;re italicizing text, then remove all instances of font-style properties with values other than italic).</li>
<li>For each inline runs, remove all styles that match the style being applied (e.g. if we&#8217;re italicizing text, then we remove all font-style properties, em, and i).</li>
<li>Wrap each inline runs with appropriate element or a span with style appropriate attribute; or add appropriate properties to an existing element that wraps each run.</li>
</ol>
<p>I&#8217;m quite proud of this algorithm myself since it produces very clean markup at the end (current WebKit implementation has a bug in pushing down styles).</p>
<p>After I had made some progress in refactoring ApplyStyleCommand, I started cleaning up DOM serialization code in markup.cpp as well which is responsible for generating two wrapping spans.  But there were a couple of obstacles I had to deal with:</p>
<ol>
<li>There are two conflicting createMarkup functions <a href="http://trac.webkit.org/browser/trunk/WebCore/editing/markup.cpp?rev=44818#L768">one used for copy</a> and <a href="http://trac.webkit.org/browser/trunk/WebCore/editing/markup.cpp?rev=44818#L1072">another one used for innerHTML</a>, and they shared code by means of calling functions instead of a class hierarchy.  This made it hard to modify the interface of each function and do the necessary refactoring to avoid adding wrapping style spans.</li>
<li><a href="http://trac.webkit.org/browser/trunk/WebCore/editing/markup.cpp?rev=44818#L768">createMarkup used for copy</a> was a 250-line long function that serialized range, determined the highest ancestor to serialize, and added wrapping spans.  It made it extremely hard to see which variable or condition depends on what.</li>
<li>Various functions in markup.cpp manipulated CSSMutableStyleDeclaration but the intentions of them and implications on paste code were not obvious.</li>
</ol>
<p>To address points 1 and 2, I decided to do a massive refactoring of markup.cpp.  Since <a href="http://trac.webkit.org/changeset/41791">darin had already introduced MarkupAccumulator</a> (Darin always has the best idea for refactoring!) for the innerHTML version of createMarkup, I decided to introduce StylizedMarkupAccumulator that inherits from MarkupAccumulator for the copy version of createMarkup.  After the refactoring, <a href="http://trac.webkit.org/browser/trunk/WebCore/editing/markup.cpp?rev=69994">markup.cpp started looking really clean and nice</a> (Note that <a href="http://trac.webkit.org/changeset/69880">abarth extracted MarkupAccumulator.cpp</a> shortly before I finished all the refactoring).  In fact, StylizedMarkupAccumulator provided a perfect abstraction for getting rid of wrapping spans, and various refactoring made clear that this is feasible.</p>
<p>Now I had to address point 3.  For me to get rid of &#8220;Apple-style-span&#8221;, I had to fully understand how WebKit preserves styles and how various parts of the editing component manipulate and interpret the style information.  Meanwhile, I had realized the fact that various parts of editing component directly manipulate CSSMutableStyleDeclaration is problematic because of tricky properties like background-color and text-decoration from my prior experience with ApplyStyleCommand.  Even seemingly simple font-weight is hard to deal with because it can take numeric values such as 700 and 400 or keywords such as bold and normal.  So I introduced a new layer of abstraction, so called EditingStyle, between the editing component and the CSS component to centralizes all style manipulation code in one place. I&#8217;ve been extremely happy about this on-going refactoring effort as it has been reducing the code duplication and caught many hidden bugs.</p>
<p>Now, it was about time.  I had addressed all 3 points that blocked me from getting rid of wrapping style spans on copy.  So I started my epic attempt to get rid of wrapping style spans in May, 2011. This was not an easy job because we use copy and paste code as a part of some other editing commands, and in fact, I spent almost an entire week just to create a prototype.  Since I normally submit 5 or more patches a week, spending an entire week on one patch that can&#8217;t even be submitted for a review was very unusual. But it paid off at the end.  I was able to come up with a patch that gets rid of wrapping spans and does not regress a single test. Now, recall my list of things to do in order to remove Apple style spans:</p>
<ol>
<li><del>Improve ApplyStyleCommand not to depend on Apple style spans</del></li>
<li><del>Improve copy and paste code not to use Apple style spans</del></li>
<li>Remove Apple style spans</li>
</ol>
<p>Yes, I was only left with step 3 when I landed the <a href="http://trac.webkit.org/changeset/92823">patch for 34564</a> this Wednesday. So I went ahead and finished off step 3 of this two-year project:</p>
<ul>
<li>Bug 66091 &#8211; Share code between isStyleSpanOrSpanWithOnlyStyleAttribute, isUnstyledStyleSpan, isSpanWithoutAttributesOrUnstyleStyleSpan and replaceWithSpanOrRemoveIfWithoutAttributes</li>
<li>Bug 12248 &#8211; Apple-style-span class seems unnecessary</li>
</ul>
<p>And there you go.  WebKit revision 93001 that no longer produces Apple style spans.  My (and perhaps your) dream has come true.</p>
<h3>Acknowledgements</h3>
<p>Of course, all of this could not happen without support from the following people and the entire WebKit community, whom I sincerely thank:</p>
<ul>
<li>Darin Adler</li>
<li>Enrica Casucci</li>
<li>Eric Seidel</li>
<li>Julie Parent</li>
<li>Justin Garcia</li>
<li>Levi Weintraub</li>
<li>Ojan Vafai</li>
<li>Tony Chang</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.webkit.org/blog/1737/apple-style-span-is-gone/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Dean Jackson is a WebKit Reviewer</title>
		<link>http://www.webkit.org/blog/1734/dean-jackson-is-a-webkit-reviewer/</link>
		<comments>http://www.webkit.org/blog/1734/dean-jackson-is-a-webkit-reviewer/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 19:34:28 +0000</pubDate>
		<dc:creator>Simon Fraser</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.webkit.org/blog/?p=1734</guid>
		<description><![CDATA[It is my great pleasure to announce that Dean Jackson is now a WebKit reviewer. Dean has great knowledge of transforms, transitions and animations, and is active both in the code, and in developing the relevant standards. Congratulations, Dean!]]></description>
			<content:encoded><![CDATA[<p>It is my great pleasure to announce that Dean Jackson is now a WebKit reviewer. Dean has great knowledge of transforms, transitions and animations, and is active both in the code, and in developing the relevant standards. Congratulations, Dean!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkit.org/blog/1734/dean-jackson-is-a-webkit-reviewer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>4 new WebKit reviewers!</title>
		<link>http://www.webkit.org/blog/1730/4-new-webkit-reviewers/</link>
		<comments>http://www.webkit.org/blog/1730/4-new-webkit-reviewers/#comments</comments>
		<pubDate>Wed, 13 Jul 2011 15:40:15 +0000</pubDate>
		<dc:creator>Andreas Kling</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[reviewers]]></category>

		<guid isPermaLink="false">http://www.webkit.org/blog/?p=1730</guid>
		<description><![CDATA[I&#8217;m happy to announce that we&#8217;ve added 4 new reviewers to the roster: Chang Shu, No&#8217;am Rosenthal, Zoltan Herczeg and Philippe Normand. They are all long-time WebKit contributors, each with their own areas of expertise. Chang (Boston, US) is well versed in the HTML editing code and spatial navigation. No&#8217;am (Sunnyvale, US) is a QtWebKit [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m happy to announce that we&#8217;ve added 4 new reviewers to the roster: Chang Shu, No&#8217;am Rosenthal, Zoltan Herczeg and Philippe Normand. They are all long-time WebKit contributors, each with their own areas of expertise.</p>
<p>Chang (Boston, US) is well versed in the HTML editing code and spatial navigation.</p>
<p>No&#8217;am (Sunnyvale, US) is a QtWebKit wizard, responsible for accelerated compositing, the QObject/JavaScript bridge, and countless other things.</p>
<p>Zoltan (Szeged, Hungary) is working on improving the performance of JavaScript and SVG filters.</p>
<p>Philippe (Barcelona, Spain) is one of the most active WebKitGTK+ developers, and the go-to guy for GStreamer multimedia in WebKit.</p>
<p>Please join me in welcoming them!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkit.org/blog/1730/4-new-webkit-reviewers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>5 new WebKit reviewers!</title>
		<link>http://www.webkit.org/blog/1715/5-new-webkit-reviewers/</link>
		<comments>http://www.webkit.org/blog/1715/5-new-webkit-reviewers/#comments</comments>
		<pubDate>Tue, 10 May 2011 18:59:53 +0000</pubDate>
		<dc:creator>David Levin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[reviewers]]></category>

		<guid isPermaLink="false">http://www.webkit.org/blog/?p=1715</guid>
		<description><![CDATA[I&#8217;m very pleased to announce 5 new WebKit reviewers: Brent Fulgham, Dirk Pranke, Enrica Casucci, Hajime Morita, and Stephen White. Looking at how they have contributed gives some perspective on the many areas where progress is being made in WebKit. For years, Brent has been the driving force behind the redistributable Windows WebKit port, helping [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m very pleased to announce 5 new WebKit reviewers: Brent Fulgham, Dirk Pranke, Enrica Casucci, Hajime Morita, and Stephen White. Looking at how they have contributed gives some perspective on the many areas where progress is being made in WebKit.</p>
<p>For years, Brent has been the driving force behind the redistributable Windows WebKit port, helping to improve and maintain the Cairo drawing layer as well as the cURL networking layer. He also unified the internal platform font classes, improved the WebKit printing APIs on Windows, and upstreamed code from other forks of WebKit.</p>
<p>Dirk has been rewriting the test tooling (run-webkit-tests) so the suite of over 20,000 tests can be run in parallel, drastically cutting down the time needed to run all the tests.  In the process, he has redesigned run-webkit-tests and added a large number of tests to help ensure that it works properly on Windows, Mac, and Linux.</p>
<p>Over the past year and a half, Enrica has made fantastic improvements to HTML Editing where she has developed a particular expertise.  In addition, she has contributed to a plethora of other areas including drag and drop, input methods, WebKit2, scrolling, and accelerated compositing.</p>
<p>Hailing from Tokyo, Morrita-san has hacked on &lt;progress&gt; and &lt;meter&gt; elements, upstreamed Chromium&#8217;s DumpRenderTree, fixed forms and spell-checking and editing bugs, and most recently, implemented large chunks of the shadow DOM and the nascent Web Component Model (the artist formerly known as XBL 2.0).</p>
<p>Stephen has been implementing HTML5 correctness fixes and improvements in graphics and rendering performance.  Recently, he has been working on GPU-accelerated 2D rendering.</p>
<p>I&#8217;m looking forward to their future contributions as well.</p>
<p>Please join me in welcoming them!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkit.org/blog/1715/5-new-webkit-reviewers/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WebKit Remote Debugging</title>
		<link>http://www.webkit.org/blog/1620/webkit-remote-debugging/</link>
		<comments>http://www.webkit.org/blog/1620/webkit-remote-debugging/#comments</comments>
		<pubDate>Mon, 09 May 2011 15:13:15 +0000</pubDate>
		<dc:creator>Pavel Feldman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.webkit.org/blog/?p=1620</guid>
		<description><![CDATA[As you might know, WebKit Web Inspector is implemented as an HTML + CSS + JavaScript web application. What you might not know is that Web Inspector can run outside of the browser environment and still provide complete set of its features to the end user. Debugging over the wire Running debugger outside the browser [...]]]></description>
			<content:encoded><![CDATA[<p>As you might know, WebKit Web Inspector is implemented as an HTML + CSS + JavaScript web application. What you might not know is that Web Inspector can run outside of the browser environment and still provide complete set of its features to the end user.</p>
<h3>Debugging over the wire</h3>
<p></p>
<p>Running debugger outside the browser is interesting because mobile platforms do not often provide enough screen real estate for quality debugging; they have network stack and CPU specifics that often affect page load and runtime. Still, they are based on the WebCore rendering engine, they could have Web Inspector instrumentation running and hence expose valuable debugging information to the end user. Now that Web Inspector is functioning out-of-process over the serialized-message-channel, attaching Web Inspector window to the remote browser is possible. Here is an example of the remote debugging session using Chromium:</p>
<p>1. Start your target browser with the remote-debugging-port command line switch:</p>
<p><code>Chromium --remote-debugging-port=9222</code></p>
<p>2. Open several pages there.</p>
<p>3. Navigate to the given port from your client browser instance (WebKit nightly will do) and it will list inspectable pages opened in the browser as web links.<br />
<img style="margin-bottom: -20px;" src="/blog-files/inspector/remote-debugging-discovery.png" alt="Tab discovery page"/></p>
<p>4. Follow any of these links to start remote debugging session for the corresponding page.<br />
<img style="margin-bottom: -20px;" src="/blog-files/inspector/remote-debugging-attached.png" alt="Tab attached page"/></p>
<p>You will find remote debugging interface very similar to the Web Inspector and here is why:</p>
<ul>
<li>Target browser acts as a web server bound to the port 9222 on the localhost.</li>
<li>Once you follow the link, your client browser fetches HTML, JavaScript and CSS files of the Web Inspector front-end over HTTP. Chromium serves as a web server in this case.</li>
<li>Upon load event, Web Inspector establishes Web Socket connection back to the target browser and starts interchanging JSON messages with it.</li>
</ul>
<p>In fact, pretty much the same scenario takes place within any WebKit-based browser when user opens Web Inspector. The only difference is that the transports being used for the JSON message interchange may vary. Note, that in case of mobile devices, front-end files can also be served from the cloud.</p>
<h3>Remote Debugging Protocol</h3>
<p></p>
<p>Another scenario for remote debugging is IDE integration. Web IDEs would like to provide seamless debugging experience integrated into their environments to the end user. Exposing unified WebKit remote debugging protocol would allow them to use alternate front-ends for the WebKit debugging.</p>
<p>Under the hood, Web Inspector front-end is talking to the browser backend by means of the Remote Debugging Protocol. This protocol is based on the <a href="http://groups.google.com/group/json-rpc/web/json-rpc-2-0">JSON-RPC 2.0</a> specification. It is bidirectional: clients send asynchronous requests to the server, server responds to these requests and/or generates notifications. Since API surface for general purpose web debugging is huge, we divided it into a number of domains. Each domain contains requests and notifications specific to some area. Here is the list of the domains supported so far:</p>
<ul>
<li><b>Console</b> &#8211; defines methods and events for interaction with the JavaScript console.</li>
<li><b>CSS</b> &#8211; exposes low level CSS read / write operations.</li>
<li><b>Debugger</b> &#8211; exposes JavaScript debugging functions; allows setting and removing breakpoints, stepping through execution, exploring stack traces, etc.</li>
<li><b>DOM</b> &#8211; This domain exposes DOM read/write operations.</li>
<li><b>DOM Debugger</b> &#8211; allows setting breakpoints on particular DOM operations and events. JavaScript execution will stop on these operations as if there was a regular breakpoint set.</li>
<li><b>Network</b> &#8211; allows tracking network activities of the page; exposes information about HTTP and WebSocket requests and responses, their headers, bodies, raw timing, etc.</li>
<li><b>Page</b> &#8211; actions and events related to the inspected page.</li>
<li><b>Runtime</b> &#8211; exposes JavaScript runtime by means of remote evaluation and mirror objects.</li>
<li><b>Timeline</b> &#8211; provides its clients with instrumentation records that are generated during the page runtime.</li>
</ul>
<p>You can find JSON schema defining the protocol <a href="http://trac.webkit.org/browser/trunk/Source/WebCore/inspector/Inspector.json">here</a>. For your convenience, we generated documentation from this schema and published it on the <a href="http://code.google.com/chrome/devtools/docs/remote-debugging.html">Chrome DevTools page</a>. Note that there are few unlisted domains such as Application Cache, DOM Storage, and Database, but they are not ready for the prime time yet.
</p>
<h3>What&#8217;s next</h3>
<p></p>
<p>We are now open to the feedback on the WebKit Remote Debugging Protocol. We will collect all the feedback in the form of the Web Inspector <a href="http://webkit.org/new-inspector-bug">bug reports</a> and the Chrome Developer Tools <a href="http://groups.google.com/group/google-chrome-developer-tools">forum messages</a>. We will then address initial feedback, polish the protocol a bit and publish its first draft with a specific version. Once we have the protocol defined, developers can come up with the alternate front-ends (IDEs and such) that will interact with the WebKit instrumentation running in various browsers. We also expect all the WebKit ports to expose WebSocket interfaces similar to explained above or to come up with any other transport and bridge it with the Web Inspector front-end. Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webkit.org/blog/1620/webkit-remote-debugging/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

