Let me summarize to make sure I understand the proposal: Expose a new object to layout tests that is entirely in WebCore instead of in the DRT layer. Then, only put things in layoutTestController that need to be at the WebKit layer, e.g. notifyDone, waitUntilDone, etc. APIs that only need to touch WebCore can live in WebCore.<div>

<br></div><div>Overall, I like the idea of making it easier to add bits exposed just for the sake of testing. Right now, it&#39;s really difficult to make simple extensions to layoutTestController because they need to be made many times over for each platform and there are many bits in layoutTestController that only need to touch WebCore. Spelling/grammer markers is a good example. setEditingBehavior is another good one.</div>

<div><br></div><div>Ojan<br><div><br><div class="gmail_quote">On Wed, Jul 14, 2010 at 10:16 PM, Hajime Morita <span dir="ltr">&lt;<a href="mailto:morrita@google.com">morrita@google.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Hi WebKit folks,<br>
<br>
I&#39;m planning to add &quot;window.layoutTestInspector&quot; or something like that to DRT.<br>
And I&#39;d like to hear your opinions.<br>
<br>
Background:<br>
<br>
Adding new method to LayoutTestController is hard. It<br>
- requires to add new WebKit API to each ports, when the method is to<br>
access WebCore.<br>
- requires to export extra WebCore symbols to access it from WebKit<br>
API implementation.<br>
- cannot use WebIDL so we need to write binding code manually.<br>
<br>
In some case, these steps are unavoidable.<br>
But in some other case, especially when we just want to access WebCore<br>
from the test, we might be able to skip these steps.<br>
<br>
A concrete example (my first motivation) is to test DocumentMarker<br>
for <a href="http://webkit.org/b/41423" target="_blank">http://webkit.org/b/41423</a>.<br>
DocumentMarker is WebCore&#39;s internal state and cannot access neither<br>
from DOM nor LayoutTestController.<br>
<br>
To test it,<br>
- the first idea is to use a pixel test.<br>
  But it has some shortcomings as you know well.<br>
- The second idea is to extend render tree&#39;s dump format to<br>
  include markers. But it is also platform-specific,<br>
  and hard to interpret for humans.<br>
- The third idea is to add an API to LayoutTestController.<br>
  But it is hard as I mentioned above.<br>
<br>
Is there another way? DocumentMarker is<br>
- WebCore&#39;s internal state,<br>
- so we don&#39;t need to inspect it except for testing purpose,<br>
- so it&#39;s better to avoid an extra WebKit API for that.<br>
<br>
I think there are similar demands other than for DocumentMarker,<br>
and it might be worth to invest a common way to handle them.<br>
<br>
Plans:<br>
<br>
To deal with such cases, we can add a test-specific object named<br>
LayoutTestInspector to window object. (The name is tentative.)<br>
With this object, We&#39;ll be able to write a LayoutTest like:<br>
<br>
if (window.layoutTestInspector) {<br>
   var target = document.getElementById(&quot;target&quot;)<br>
   var markerStr = layoutTestInspector.nodeMarkerString(target);<br>
   if (markerStr == &quot;Spelling:0:6&quot;)<br>
      log(&quot;PASS&quot;);<br>
   else<br>
      log(&quot;FAIL&quot;);<br>
}<br>
<br>
Here is a plan to do this:<br>
<br>
- LayoutTestInspector will be defined in WebCore,<br>
  and implemented as a usual DOM object using WebIDL.<br>
  (placed under, for example, WebCore/page/LayoutTestInspector.{idl,h,cpp})<br>
- window object will expose a non-enumerable<br>
windows.layoutTestInspector property<br>
  for that.<br>
- Settings::m_enableLayoutTestInspector will control windows.layoutTestInspector<br>
  availability. This flag should be true only on DRT.<br>
<br>
Tests with LayoutTestInspector would have several advantages:<br>
<br>
- Compared to LayoutTestController,<br>
  we don&#39;t need to add new APIs to WebKit layer for test purpose.<br>
- Compared to LayoutTestController,<br>
  we don&#39;t need to export extra WebCore APIs to WebKit layer.<br>
- Compared to Render-tree dump,<br>
  the test can be more portable, focused and understandable.<br>
<br>
But there are some concerns:<br>
<br>
- WebCore need to have a test-specific code, that might be a waste of space.<br>
  Test-specific WebKit APIs would have a same problem, though.<br>
- LayoutTestInspector may introduce some potential security risks.<br>
  I have no idea about this area.<br>
<br>
Do you have any other use-cases or better approaches?<br>
Are there concerns I&#39;ve missed? Do we have similar discussions in the past?<br>
Any ideas/suggestions are welcome.<br>
If there are no strong objections, I&#39;ll start to work on this.<br>
<br>
Regards.<br>
<font color="#888888"><br>
--<br>
morita<br>
_______________________________________________<br>
webkit-dev mailing list<br>
<a href="mailto:webkit-dev@lists.webkit.org">webkit-dev@lists.webkit.org</a><br>
<a href="http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev" target="_blank">http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev</a><br>
</font></blockquote></div><br></div></div>