Commit 98ae35b6 authored by andersca@apple.com's avatar andersca@apple.com

Remove support for the viewsource attribute

https://bugs.webkit.org/show_bug.cgi?id=127232

Reviewed by Andreas Kling.

Source/WebCore:

The 'viewsource' attribute on frames is nonstandard, not used by anyone (the inspector has
its own syntax highlighting) and not audited.

This patch removes parsing of the viewsource attribute and the associated tests. A subsequent
patch will remove the code as well.

* html/HTMLFrameElementBase.cpp:
(WebCore::HTMLFrameElementBase::parseAttribute):

Source/WTF:

* wtf/FeatureDefines.h:

LayoutTests:

* .gitattributes:
* fast/frames/resources/viewsource-fake-image-file.png: Removed.
* fast/frames/resources/viewsource-frame-1.html: Removed.
* fast/frames/resources/viewsource-frame-2.html: Removed.
* fast/frames/resources/viewsource-frame-3.html: Removed.
* fast/frames/resources/viewsource-frame-4.html: Removed.
* fast/frames/resources/viewsource-frame-5.html: Removed.
* fast/frames/resources/viewsource-frame-unfinished-script.html: Removed.
* fast/frames/resources/viewsource-frame-unfinished-textarea.html: Removed.
* fast/frames/viewsource-attribute.html: Removed.
* fast/frames/viewsource-empty-attribute-value-expected.txt: Removed.
* fast/frames/viewsource-empty-attribute-value.html: Removed.
* fast/frames/viewsource-linebreak-expected.txt: Removed.
* fast/frames/viewsource-linebreak.html: Removed.
* fast/frames/viewsource-link-on-href-value-expected.txt: Removed.
* fast/frames/viewsource-link-on-href-value.html: Removed.
* fast/frames/viewsource-on-image-file.html: Removed.
* fast/frames/viewsource-plain-text-tags-expected.txt: Removed.
* fast/frames/viewsource-plain-text-tags.html: Removed.
* fast/frames/viewsource-unfinished-tags-expected.txt: Removed.
* fast/frames/viewsource-unfinished-tags.html: Removed.
* fast/frames/viewsource-xml-expected.txt: Removed.
* fast/frames/viewsource-xml.html: Removed.
* http/tests/security/resources/view-source-no-refresh.php: Removed.
* http/tests/security/view-source-javascript-url-in-document-expected.txt: Removed.
* http/tests/security/view-source-javascript-url-in-document.html: Removed.
* http/tests/security/view-source-no-javascript-url-expected.txt: Removed.
* http/tests/security/view-source-no-javascript-url.html: Removed.
* http/tests/security/view-source-no-refresh-expected.txt: Removed.
* http/tests/security/view-source-no-refresh.html: Removed.
* platform/efl/fast/frames/viewsource-attribute-expected.png: Removed.
* platform/efl/fast/frames/viewsource-attribute-expected.txt: Removed.
* platform/efl/fast/frames/viewsource-on-image-file-expected.png: Removed.
* platform/efl/fast/frames/viewsource-on-image-file-expected.txt: Removed.
* platform/mac/fast/frames/viewsource-attribute-expected.png: Removed.
* platform/mac/fast/frames/viewsource-attribute-expected.txt: Removed.
* platform/mac/fast/frames/viewsource-on-image-file-expected.png: Removed.
* platform/mac/fast/frames/viewsource-on-image-file-expected.txt: Removed.
* platform/win/TestExpectations:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@162272 268f45cc-cd09-0410-ab3c-d52691b4dbfc
parent f31e4690
......@@ -104,7 +104,6 @@ fast/frames/iframe-scroll-page-up-down.html-disabled -crlf
fast/frames/javascript-url-as-framesrc-crash.html -crlf
fast/frames/resources/iframe-scroll-page-up-down-1.html -crlf
fast/frames/resources/iframe-scroll-page-up-down-2.html -crlf
fast/frames/viewsource-attribute.html -crlf
fast/inline/inline-padding-disables-text-quirk.html -crlf
fast/loader/submit-form-while-parsing-1.xhtml -crlf
fast/overflow/dynamic-hidden.html -crlf
......
2014-01-18 Anders Carlsson <andersca@apple.com>
Remove support for the viewsource attribute
https://bugs.webkit.org/show_bug.cgi?id=127232
Reviewed by Andreas Kling.
* .gitattributes:
* fast/frames/resources/viewsource-fake-image-file.png: Removed.
* fast/frames/resources/viewsource-frame-1.html: Removed.
* fast/frames/resources/viewsource-frame-2.html: Removed.
* fast/frames/resources/viewsource-frame-3.html: Removed.
* fast/frames/resources/viewsource-frame-4.html: Removed.
* fast/frames/resources/viewsource-frame-5.html: Removed.
* fast/frames/resources/viewsource-frame-unfinished-script.html: Removed.
* fast/frames/resources/viewsource-frame-unfinished-textarea.html: Removed.
* fast/frames/viewsource-attribute.html: Removed.
* fast/frames/viewsource-empty-attribute-value-expected.txt: Removed.
* fast/frames/viewsource-empty-attribute-value.html: Removed.
* fast/frames/viewsource-linebreak-expected.txt: Removed.
* fast/frames/viewsource-linebreak.html: Removed.
* fast/frames/viewsource-link-on-href-value-expected.txt: Removed.
* fast/frames/viewsource-link-on-href-value.html: Removed.
* fast/frames/viewsource-on-image-file.html: Removed.
* fast/frames/viewsource-plain-text-tags-expected.txt: Removed.
* fast/frames/viewsource-plain-text-tags.html: Removed.
* fast/frames/viewsource-unfinished-tags-expected.txt: Removed.
* fast/frames/viewsource-unfinished-tags.html: Removed.
* fast/frames/viewsource-xml-expected.txt: Removed.
* fast/frames/viewsource-xml.html: Removed.
* http/tests/security/resources/view-source-no-refresh.php: Removed.
* http/tests/security/view-source-javascript-url-in-document-expected.txt: Removed.
* http/tests/security/view-source-javascript-url-in-document.html: Removed.
* http/tests/security/view-source-no-javascript-url-expected.txt: Removed.
* http/tests/security/view-source-no-javascript-url.html: Removed.
* http/tests/security/view-source-no-refresh-expected.txt: Removed.
* http/tests/security/view-source-no-refresh.html: Removed.
* platform/efl/fast/frames/viewsource-attribute-expected.png: Removed.
* platform/efl/fast/frames/viewsource-attribute-expected.txt: Removed.
* platform/efl/fast/frames/viewsource-on-image-file-expected.png: Removed.
* platform/efl/fast/frames/viewsource-on-image-file-expected.txt: Removed.
* platform/mac/fast/frames/viewsource-attribute-expected.png: Removed.
* platform/mac/fast/frames/viewsource-attribute-expected.txt: Removed.
* platform/mac/fast/frames/viewsource-on-image-file-expected.png: Removed.
* platform/mac/fast/frames/viewsource-on-image-file-expected.txt: Removed.
* platform/win/TestExpectations:
2014-01-18 Alexey Proskuryakov <ap@apple.com>
media/video-size.html is flaky
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<hr noshade width=75%>
<div align="center" title="" id="foo">
<p>hello world</p>
</div>
<script>
<testscript>
</script>
<style>
<teststyle>
</style>
<xmp>
<testxmp>
</xmp>
<textarea>
<testtextarea>
</textarea>
<head><base href="http://example.org/foo/"></head>
<body>
<a href="bar">http://example.org/foo/bar</a><br>
<a href="/bar">http://example.org/bar</a><br>
<a href="http://example.org/foobar">http://example.org/foobar</a><br>
<a href="bar?a&amp;b">http://example.org/foo/bar?a&b</a>
</body>
<HEAD><BASE HREF="http://example.org/foo/"></HEAD>
<BODY>
<A HREF="bar">http://example.org/foo/bar</A><BR>
<A HREF="/bar">http://example.org/bar</A><BR>
<A HREF="http://example.org/foobar">http://example.org/foobar</A><BR>
<A HREF="bar?a&amp;b">http://example.org/foo/bar?a&b</A>
</BODY>
<html>
<body>
<p>You should see two 'hello world' frames below, each in 'view source' mode.</p>
<hr>
<iframe viewsource src="data:text/html,<p>hello world</p>"></iframe>
<iframe src="data:text/html,<frameset><frame viewsource src='data:text/html,<p>hello world</p>'></frameset"></iframe>
</body>
</html>
You should see a frame in 'view source' mode below.
The attributes with no value or an empty value should be displayed correctly in 'view source' mode.
--------
Frame: 'sourceFrame'
--------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<hr noshade width=75%>
<div align="center" title="" id="foo">
<p>hello world</p>
</div>
<html>
<head>
<script>
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.dumpChildFramesAsText();
}
</script>
</head>
<body>
<p>You should see a frame in 'view source' mode below.</p>
<p>The attributes with no value or an empty value should be displayed correctly in 'view source' mode.</p>
<hr>
<iframe viewsource name="sourceFrame" src="resources/viewsource-frame-1.html"></iframe>
</body>
</html>
You should see a frame in 'view source' mode below.
There should be no additional space at end of line. Number of line breaks should match source file.
--------
Frame: 'sourceFrame'
--------
<p>
<input
type="text">
</p>
<html>
<head>
<script>
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.dumpChildFramesAsText();
}
</script>
</head>
<body>
<p>You should see a frame in 'view source' mode below.</p>
<p>There should be no additional space at end of line. Number of line breaks should match source file.</p>
<hr>
<iframe viewsource name="sourceFrame" src="resources/viewsource-frame-5.html"></iframe>
</body>
</html>
<html>
<!-- This tests that a base element is respected in rendering anchors on viewsource page. -->
<head>
<script>
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
function checkFrame(id) {
var frame = document.getElementById(id);
// Update this list when you modified resources/viewsource-frame-{3,4}.html .
var expected = [
// This will be matched with the href in the base element.
[ "http://example.org/foo/", "http://example.org/foo/" ],
[ "bar", "http://example.org/foo/bar" ],
[ "/bar", "http://example.org/bar" ],
// This shouldn't be affected.
[ "http://example.org/foobar", "http://example.org/foobar" ],
// We should interpret escape chars in the href.
// Note that innerHTML escapes '&'s (and other special characters) so
// this is saying we expect the text of the href to be "bar?a&amp;b"
// and the URL to be "http://example.org/foo/bar?a&b"
[ "bar?a&amp;amp;b", "http://example.org/foo/bar?a&b" ]
];
var elements = frame.contentDocument.documentElement.getElementsByTagName("a");
if (!elements || elements.length !== 5) {
return false;
}
var ok = true;
for (var i = 0; i < elements.length; ++i) {
var element = elements.item(i);
if (element.innerHTML !== expected[i][0] || element.href !== expected[i][1]) {
ok = false;
break;
}
}
return ok;
}
function report() {
var resultText = "FAIL";
// Check that links are added on href values regardless of the case of tag names.
if (checkFrame("lower") && checkFrame("upper")) {
resultText = "PASS";
}
if (window.testRunner) {
document.open();
document.write(resultText);
document.close();
testRunner.notifyDone();
} else {
document.getElementById("result").textContent = resultText;
}
}
</script>
</head>
<body onload="report()">
<p>
In a frame below which is in 'view source' mode, each link on the value of the
href attribute in anchor elements must have the same address as the anchor
element's contents.
</p>
<hr>
<iframe viewsource src="resources/viewsource-frame-3.html" width="600" id="lower"></iframe>
<iframe viewsource src="resources/viewsource-frame-4.html" width="600" id="upper"></iframe>
<hr>
<div id="result"></div>
</body>
</html>
<html>
<body>
<p>You should see 'hello world' in the frame below in 'view source' mode.</p>
<hr>
<iframe viewsource src="resources/viewsource-fake-image-file.png"></iframe>
</body>
</html>
script: PASS PASS PASS style: PASS PASS PASS xmp: PASS PASS PASS textarea: PASS PASS PASS
<html>
<head>
<script>
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
function found(text, regexString)
{
var matches = text.match(new RegExp(regexString, 'g'));
if (matches && matches.length === 1)
return 'PASS';
else
return 'FAIL';
}
function testSection(text, name) {
return name + ': ' +
found(text, '<span class="webkit-html-tag">&lt;' + name + '&gt;') + ' ' +
found(text, '<td class="webkit-line-content">&lt;test' + name + '&gt;') + ' ' +
found(text, '<span class="webkit-html-tag">&lt;/' + name + '&gt;') + '\n';
}
function report(frame)
{
var result = frame.contentDocument.documentElement.innerHTML;
var resultText = '';
resultText += testSection(result, 'script');
resultText += testSection(result, 'style');
resultText += testSection(result, 'xmp');
resultText += testSection(result, 'textarea');
if (window.testRunner) {
document.open();
document.write(resultText);
document.close();
testRunner.notifyDone();
} else {
document.getElementById("result").textContent = resultText;
}
}
</script>
</head>
<body>
<p>You should see a frame in 'view source' mode below.</p>
<p>None of the "&lt;testxxx&gt;" strings shown below should be colorized like HTML.</p>
<hr>
<div id="result"></div>
<hr>
<iframe viewsource src="resources/viewsource-frame-2.html" height="250" onload="report(this)"></iframe>
</body>
</html>
<html>
<head>
<script>
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
var results = {};
function report(frame, tag) {
var result = frame.contentDocument.documentElement.innerHTML;
var regex = new RegExp("foobar", "g");
matches = result.match(regex);
if (matches)
var resultText = "PASS";
else
var resultText = "FAIL";
results[tag] = resultText;
if (window.testRunner && results["script"] && results["textarea"]) {
document.open();
document.write("script: " + results["script"] + "<br>");
document.write("textarea: " + results["textarea"] + "<br>");
document.close();
testRunner.notifyDone();
} else {
document.getElementById(tag + "_result").textContent = resultText;
}
}
</script>
</head>
<body>
<p>You should see a frame in 'view source' mode below.</p>
<p>"foobar" should be seen after the &lt;script&gt; tag and &lt;textarea&gt; tag.</p>
<hr>
<div id="result">
<div id="script_result"></div>
<div id="textarea_result"></div>
<hr>
<iframe viewsource src="resources/viewsource-frame-unfinished-script.html" height="250" onload="report(this, 'script')"></iframe>
<iframe viewsource src="resources/viewsource-frame-unfinished-textarea.html" height="250" onload="report(this, 'textarea')"></iframe>
</div>
</body>
</html>
--------
Frame: '<!--framePath //<!--frame0-->-->'
--------
<?xml version="1.0"?><div><section/></div>
<!DOCTYPE html>
<script>
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.dumpChildFramesAsText();
}
</script>
<iframe viewsource src='data:text/html,<?xml version="1.0"?><div><section/></div>'></iframe>
<?php
header('HTTP/1.0 200 OK');
header('Content-type: text/html');
header('Refresh: 0;URL=javascript:window.top.location="about:blank"');
?>
<head>
<meta http-equiv='refresh' content='0;URL=javascript:window.top.location="about:blank"'/>
</head>
<body>
This is the viewsource iframe.
</body>
ALERT: PASS: Function called.
Adding 'viewsource' to a frame after a document has loaded should not block JavaScript URL execution in the already-loaded document.
<!DOCTYPE html>
<html>
<head>
<script>
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
</script>
</head>
<body>
<p>Adding 'viewsource' to a frame after a document has loaded should not
block JavaScript URL execution in the already-loaded document.</p>
<iframe srcdoc="
<script>
window.onload = function() {
window.parent.document.querySelector('iframe').setAttribute('viewsource', '');
document.querySelector('a').click();
alert(calledFunction ? 'PASS: Function called.' : 'FAIL: Function not called.');
if (window.testRunner)
testRunner.notifyDone();
};
var calledFunction = false;
function pass() {
calledFunction = true;
}
</script>
<a href='javascript:pass();'>Yay!</a>"></iframe>
</body>
</html>
CONSOLE MESSAGE: Blocked a frame with origin "http://127.0.0.1:8000" from accessing a frame with origin "null". The frame requesting access has a protocol of "http", the frame being accessed has a protocol of "http". Protocols must match.
This test passes if it does not alert FAIL.
<html>
<body>
<script>
if (window.testRunner)
testRunner.dumpAsText();
</script>
<script>
function loaded() {
frames[0].location = "javascript:alert('FAIL');";
}
</script>
<p>This test passes if it does not alert FAIL.</p>
<iframe viewsource src="resources/innocent-victim.html" onload="loaded()">
</iframe>
</body>
</html>
<html>
<body>
<script>
if (window.testRunner) {
testRunner.waitUntilDone();
testRunner.dumpAsText();
}
</script>
<script>
function done() {
if (window.testRunner)
testRunner.notifyDone();
}
function loaded() {
// Unfortunately need to wait a little to ensure the top level page
// transition occurs in the failure case.
setTimeout("done()", 1000);
}
</script>
<p>Success - did not redirect to Javascript</p>
<iframe viewsource src="resources/view-source-no-refresh.php" onload="loaded()">
</iframe>
</body>
</html>
layer at (0,0) size 800x600
RenderView at (0,0) size 800x600
layer at (0,0) size 800x600
RenderBlock {HTML} at (0,0) size 800x600
RenderBody {BODY} at (8,8) size 784x584
RenderBlock {P} at (0,0) size 784x18
RenderText {#text} at (0,0) size 479x17
text run at (0,0) width 479: "You should see two 'hello world' frames below, each in 'view source' mode."
RenderBlock {HR} at (0,34) size 784x2 [border: (1px inset #000000)]
RenderBlock (anonymous) at (0,44) size 784x158
RenderIFrame {IFRAME} at (0,0) size 304x154 [border: (2px inset #000000)]
layer at (0,0) size 300x150
RenderView at (0,0) size 300x150
layer at (0,0) size 300x150 layerType: background only
layer at (0,0) size 31x150
RenderBlock (positioned) zI: -1 {DIV} at (0,0) size 31x150 [bgcolor=#F0F0F0] [border: none (1px solid #BBBBBB) none]
layer at (0,0) size 300x150 layerType: foreground only
RenderBlock {HTML} at (0,0) size 300x150
RenderBody {BODY} at (0,0) size 300x150
RenderTable {TABLE} at (0,0) size 300x15
RenderTableSection {TBODY} at (0,0) size 300x15
RenderTableRow {TR} at (0,0) size 300x15
RenderTableCell {TD} at (0,3) size 31x10 [color=#808080] [bgcolor=#F0F0F0] [border: none (1px solid #BBBBBB) none] [r=0 c=0 rs=1 cs=1]
RenderInline (generated) at (0,0) size 5x10
RenderCounter at (21,0) size 5x10
text run at (21,0) width 5: "1"
RenderTableCell {TD} at (31,0) size 269x15 [r=0 c=1 rs=1 cs=1]
RenderInline {SPAN} at (0,0) size 24x15 [color=#881280]
RenderText {#text} at (5,0) size 24x15
text run at (5,0) width 24: "<p>"
RenderText {#text} at (29,0) size 88x15
text run at (29,0) width 88: "hello world"
RenderInline {SPAN} at (0,0) size 32x15 [color=#881280]
RenderText {#text} at (117,0) size 32x15
text run at (117,0) width 32: "</p>"
RenderText {#text} at (304,140) size 4x17
text run at (304,140) width 4: " "
RenderIFrame {IFRAME} at (308,0) size 304x154 [border: (2px inset #000000)]
layer at (0,0) size 300x150
RenderView at (0,0) size 300x150
layer at (0,0) size 300x150
RenderBlock {HTML} at (0,0) size 300x150
RenderFrameSet {FRAMESET} at (0,0) size 300x150
RenderFrame {FRAME} at (0,0) size 300x150
layer at (0,0) size 300x150
RenderView at (0,0) size 300x150
layer at (0,0) size 300x150 layerType: background only
layer at (0,0) size 31x150
RenderBlock (positioned) zI: -1 {DIV} at (0,0) size 31x150 [bgcolor=#F0F0F0] [border: none (1px solid #BBBBBB) none]
layer at (0,0) size 300x150 layerType: foreground only
RenderBlock {HTML} at (0,0) size 300x150
RenderBody {BODY} at (0,0) size 300x150
RenderTable {TABLE} at (0,0) size 300x15
RenderTableSection {TBODY} at (0,0) size 300x15
RenderTableRow {TR} at (0,0) size 300x15
RenderTableCell {TD} at (0,3) size 31x10 [color=#808080] [bgcolor=#F0F0F0] [border: none (1px solid #BBBBBB) none] [r=0 c=0 rs=1 cs=1]
RenderInline (generated) at (0,0) size 5x10
RenderCounter at (21,0) size 5x10
text run at (21,0) width 5: "1"
RenderTableCell {TD} at (31,0) size 269x15 [r=0 c=1 rs=1 cs=1]
RenderInline {SPAN} at (0,0) size 24x15 [color=#881280]
RenderText {#text} at (5,0) size 24x15
text run at (5,0) width 24: "<p>"
RenderText {#text} at (29,0) size 88x15
text run at (29,0) width 88: "hello world"
RenderInline {SPAN} at (0,0) size 32x15 [color=#881280]
RenderText {#text} at (117,0) size 32x15
text run at (117,0) width 32: "</p>"
RenderText {#text} at (0,0) size 0x0
layer at (0,0) size 800x600
RenderView at (0,0) size 800x600
layer at (0,0) size 800x600
RenderBlock {HTML} at (0,0) size 800x600
RenderBody {BODY} at (8,8) size 784x584
RenderBlock {P} at (0,0) size 784x18
RenderText {#text} at (0,0) size 447x17
text run at (0,0) width 447: "You should see 'hello world' in the frame below in 'view source' mode."
RenderBlock {HR} at (0,34) size 784x2 [border: (1px inset #000000)]
RenderBlock (anonymous) at (0,44) size 784x154
RenderIFrame {IFRAME} at (0,0) size 304x154 [border: (2px inset #000000)]
layer at (0,0) size 300x150
RenderView at (0,0) size 300x150
layer at (0,0) size 300x150 layerType: background only
layer at (0,0) size 31x150
RenderBlock (positioned) zI: -1 {DIV} at (0,0) size 31x150 [bgcolor=#F0F0F0] [border: none (1px solid #BBBBBB) none]
layer at (0,0) size 300x150 layerType: foreground only
RenderBlock {HTML} at (0,0) size 300x150
RenderBody {BODY} at (0,0) size 300x150
RenderTable {TABLE} at (0,0) size 300x15
RenderTableSection {TBODY} at (0,0) size 300x15
RenderTableRow {TR} at (0,0) size 300x15
RenderTableCell {TD} at (0,3) size 31x10 [color=#808080] [bgcolor=#F0F0F0] [border: none (1px solid #BBBBBB) none] [r=0 c=0 rs=1 cs=1]
RenderInline (generated) at (0,0) size 5x10
RenderCounter at (21,0) size 5x10
text run at (21,0) width 5: "1"
RenderTableCell {TD} at (31,0) size 269x15 [r=0 c=1 rs=1 cs=1]
RenderText {#text} at (5,0) size 88x15
text run at (5,0) width 88: "hello world"
RenderText {#text} at (0,0) size 0x0
layer at (0,0) size 800x600
RenderView at (0,0) size 800x600
layer at (0,0) size 800x600
RenderBlock {HTML} at (0,0) size 800x600
RenderBody {BODY} at (8,8) size 784x584
RenderBlock {P} at (0,0) size 784x18
RenderText {#text} at (0,0) size 479x18
text run at (0,0) width 479: "You should see two 'hello world' frames below, each in 'view source' mode."
RenderBlock {HR} at (0,34) size 784x2 [border: (1px inset #000000)]
RenderBlock (anonymous) at (0,44) size 784x158
RenderIFrame {IFRAME} at (0,0) size 304x154 [border: (2px inset #000000)]
layer at (0,0) size 300x150
RenderView at (0,0) size 300x150
layer at (0,0) size 300x150 layerType: background only
layer at (0,0) size 31x150
RenderBlock (positioned) zI: -1 {DIV} at (0,0) size 31x150 [bgcolor=#F0F0F0] [border: none (1px solid #BBBBBB) none]
layer at (0,0) size 300x150 layerType: foreground only
RenderBlock {HTML} at (0,0) size 300x150
RenderBody {BODY} at (0,0) size 300x150
RenderTable {TABLE} at (0,0) size 300x15
RenderTableSection {TBODY} at (0,0) size 300x15
RenderTableRow {TR} at (0,0) size 300x15
RenderTableCell {TD} at (0,4) size 31x10 [color=#808080] [bgcolor=#F0F0F0] [border: none (1px solid #BBBBBB) none] [r=0 c=0 rs=1 cs=1]
RenderInline (generated) at (0,0) size 5x10
RenderCounter at (21,0) size 5x10
text run at (21,0) width 5: "1"
RenderTableCell {TD} at (31,0) size 269x15 [r=0 c=1 rs=1 cs=1]
RenderInline {SPAN} at (0,0) size 24x15 [color=#881280]
RenderText {#text} at (5,0) size 24x15
text run at (5,0) width 24: "<p>"
RenderText {#text} at (29,0) size 88x15
text run at (29,0) width 88: "hello world"
RenderInline {SPAN} at (0,0) size 32x15 [color=#881280]
RenderText {#text} at (117,0) size 32x15
text run at (117,0) width 32: "</p>"
RenderText {#text} at (304,140) size 4x18
text run at (304,140) width 4: " "
RenderIFrame {IFRAME} at (308,0) size 304x154 [border: (2px inset #000000)]
layer at (0,0) size 300x150
RenderView at (0,0) size 300x150
layer at (0,0) size 300x150
RenderBlock {HTML} at (0,0) size 300x150
RenderFrameSet {FRAMESET} at (0,0) size 300x150
RenderFrame {FRAME} at (0,0) size 300x150
layer at (0,0) size 300x150
RenderView at (0,0) size 300x150
layer at (0,0) size 300x150 layerType: background only
layer at (0,0) size 31x150
RenderBlock (positioned) zI: -1 {DIV} at (0,0) size 31x150 [bgcolor=#F0F0F0] [border: none (1px solid #BBBBBB) none]
layer at (0,0) size 300x150 layerType: foreground only
RenderBlock {HTML} at (0,0) size 300x150
RenderBody {BODY} at (0,0) size 300x150
RenderTable {TABLE} at (0,0) size 300x15
RenderTableSection {TBODY} at (0,0) size 300x15
RenderTableRow {TR} at (0,0) size 300x15
RenderTableCell {TD} at (0,4) size 31x10 [color=#808080] [bgcolor=#F0F0F0] [border: none (1px solid #BBBBBB) none] [r=0 c=0 rs=1 cs=1]
RenderInline (generated) at (0,0) size 5x10
RenderCounter at (21,0) size 5x10
text run at (21,0) width 5: "1"
RenderTableCell {TD} at (31,0) size 269x15 [r=0 c=1 rs=1 cs=1]
RenderInline {SPAN} at (0,0) size 24x15 [color=#881280]
RenderText {#text} at (5,0) size 24x15