Hi folks,

I posted a patch: https://bugs.webkit.org/show_bug.cgi?id=42612
Any feedbacks are appreciated.

--
morita

On Wed, Jul 21, 2010 at 2:33 PM, Hajime Morita <[email protected]> wrote:
> Hi Maciej, thanks much for sharing your thought.
> Overall, it totally makes sense.
> And we need an action as Ojan mentioned.
>
> Here is some ideas;
>
>> (1) It seems a little odd that we'll end up with two different objects that 
>> have similar names and a very similar purpose, but just differ in how they 
>> are implemented. Maybe there's a way to define layoutTestController in 
>> WebCore and have DumpRenderTree extend it.
>
> It looks fine. A prototype patch will come shortly.
>
>> (2) It does seem like for some test-specific methods, implementing then in 
>> WebCore would be simpler and would save the work of plumbing them through 
>> the WebKit layers.
>
> Yeah, it's the main point of this proposal!
>
>> (3) On the other hand, LayoutTestController seems like it has too much stuff 
>> in it. Originally DumpRenderTree exposed a very modest set of functionality, 
>> mostly to control output (dumpAsText) or to emulate things that you could do 
>> by hand when running the test in the browser (waitUntilDone, eventSender). 
>> Nowadays, there are dozens of methods. A lot of them are used in only one or 
>> two tests. And in many cases, the methods have no interactive equivalent, so 
>> a lot of our tests are not runnable in the browser at all. Those seem like 
>> bad trends. Maybe instead of making it easier to add to 
>> LayoutTestController, we should look at whether we can consolidate 
>> functionality, factor it into more objects, and find ways to test things 
>> that don't require quite so much custom functionality.
>
> Looks several points here and I think we can tackle them separetely:
> - (3-1): LayoutTestController is too large and need to be factored out
> - (3-2): We shoud allow our tests to run interactively in the browser.
>
> For (3-1), once we can implement test objects inside WebCore, it will
> become easier to do so because we can use our internal mechanism like
> IDL-based binding generation.
>
> As an example, defining WebSettings JS object to expose Settings
> parameter would be fine. 16 of 120 LayoutTestController APIs are
> Settings/WebPreferences setters. WebView and WebFrame also have
> several wrapper APIs on LayoutTestController.
>
> Tackling (3-2) looks harder than for (3-1).
> As WebKit grows, no single browser cannot (and doesn't need to) access
> all of WebKit features. Each of them uses different subset of features.
> Browsers themselves also behave differently.
> There are over 20 flags on LayoutTestController to control its
> behavior, which implies how our browsers collaborate WebKit in many
> different ways.
>
> So problem (3-2) is not always of LayoutTestController.
> It may just reflect the fact of, say, divergence of our codebase and 
> use-cases.
>
> On the other hand, I agree that we need to run our tests interactively.
> One possible idea is: Adding a switch to the inspector that make
> LayoutTestController (and associated objects) accessible from the page 
> context.
> Once we have LayoutTestController inside WebCore,
> these objects will be available without DRT.
> It might not solve the root problem.
> But it would provide the way to workround.
>
> --
> morita
>
> On Tue, Jul 20, 2010 at 2:51 PM, Maciej Stachowiak <[email protected]> wrote:
>>
>> Darin and I discussed this proposal, and we had a few thoughts to share:
>>
>> (1) It seems a little odd that we'll end up with two different objects that 
>> have similar names and a very similar purpose, but just differ in how they 
>> are implemented. Maybe there's a way to define layoutTestController in 
>> WebCore and have DumpRenderTree extend it.
>>
>> (2) It does seem like for some test-specific methods, implementing then in 
>> WebCore would be simpler and would save the work of plumbing them through 
>> the WebKit layers.
>>
>> (3) On the other hand, LayoutTestController seems like it has too much stuff 
>> in it. Originally DumpRenderTree exposed a very modest set of functionality, 
>> mostly to control output (dumpAsText) or to emulate things that you could do 
>> by hand when running the test in the browser (waitUntilDone, eventSender). 
>> Nowadays, there are dozens of methods. A lot of them are used in only one or 
>> two tests. And in many cases, the methods have no interactive equivalent, so 
>> a lot of our tests are not runnable in the browser at all. Those seem like 
>> bad trends. Maybe instead of making it easier to add to 
>> LayoutTestController, we should look at whether we can consolidate 
>> functionality, factor it into more objects, and find ways to test things 
>> that don't require quite so much custom functionality.
>>
>> I'll add on my own behalf that "layoutTestInspector" doesn't seem like a 
>> great name and doesn't express the relationship to layoutTestController. 
>> It's not used to examine layout tests.
>>
>> Regards,
>> Maciej
>>
>> On Jul 14, 2010, at 10:16 PM, Hajime Morita wrote:
>>
>> > Hi WebKit folks,
>> >
>> > I'm planning to add "window.layoutTestInspector" or something like that to 
>> > DRT.
>> > And I'd like to hear your opinions.
>> >
>> > Background:
>> >
>> > Adding new method to LayoutTestController is hard. It
>> > - requires to add new WebKit API to each ports, when the method is to
>> > access WebCore.
>> > - requires to export extra WebCore symbols to access it from WebKit
>> > API implementation.
>> > - cannot use WebIDL so we need to write binding code manually.
>> >
>> > In some case, these steps are unavoidable.
>> > But in some other case, especially when we just want to access WebCore
>> > from the test, we might be able to skip these steps.
>> >
>> > A concrete example (my first motivation) is to test DocumentMarker
>> > for http://webkit.org/b/41423.
>> > DocumentMarker is WebCore's internal state and cannot access neither
>> > from DOM nor LayoutTestController.
>> >
>> > To test it,
>> > - the first idea is to use a pixel test.
>> >  But it has some shortcomings as you know well.
>> > - The second idea is to extend render tree's dump format to
>> >  include markers. But it is also platform-specific,
>> >  and hard to interpret for humans.
>> > - The third idea is to add an API to LayoutTestController.
>> >  But it is hard as I mentioned above.
>> >
>> > Is there another way? DocumentMarker is
>> > - WebCore's internal state,
>> > - so we don't need to inspect it except for testing purpose,
>> > - so it's better to avoid an extra WebKit API for that.
>> >
>> > I think there are similar demands other than for DocumentMarker,
>> > and it might be worth to invest a common way to handle them.
>> >
>> > Plans:
>> >
>> > To deal with such cases, we can add a test-specific object named
>> > LayoutTestInspector to window object. (The name is tentative.)
>> > With this object, We'll be able to write a LayoutTest like:
>> >
>> > if (window.layoutTestInspector) {
>> >   var target = document.getElementById("target")
>> >   var markerStr = layoutTestInspector.nodeMarkerString(target);
>> >   if (markerStr == "Spelling:0:6")
>> >      log("PASS");
>> >   else
>> >      log("FAIL");
>> > }
>> >
>> > Here is a plan to do this:
>> >
>> > - LayoutTestInspector will be defined in WebCore,
>> >  and implemented as a usual DOM object using WebIDL.
>> >  (placed under, for example, WebCore/page/LayoutTestInspector.{idl,h,cpp})
>> > - window object will expose a non-enumerable
>> > windows.layoutTestInspector property
>> >  for that.
>> > - Settings::m_enableLayoutTestInspector will control 
>> > windows.layoutTestInspector
>> >  availability. This flag should be true only on DRT.
>> >
>> > Tests with LayoutTestInspector would have several advantages:
>> >
>> > - Compared to LayoutTestController,
>> >  we don't need to add new APIs to WebKit layer for test purpose.
>> > - Compared to LayoutTestController,
>> >  we don't need to export extra WebCore APIs to WebKit layer.
>> > - Compared to Render-tree dump,
>> >  the test can be more portable, focused and understandable.
>> >
>> > But there are some concerns:
>> >
>> > - WebCore need to have a test-specific code, that might be a waste of 
>> > space.
>> >  Test-specific WebKit APIs would have a same problem, though.
>> > - LayoutTestInspector may introduce some potential security risks.
>> >  I have no idea about this area.
>> >
>> > Do you have any other use-cases or better approaches?
>> > Are there concerns I've missed? Do we have similar discussions in the past?
>> > Any ideas/suggestions are welcome.
>> > If there are no strong objections, I'll start to work on this.
>> >
>> > Regards.
>> >
>> > --
>> > morita
>> > _______________________________________________
>> > webkit-dev mailing list
>> > [email protected]
>> > http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev
>>
>
>
>
> --
> morita
>



-- 
morita
_______________________________________________
webkit-dev mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to