On Jul 24, 2009, at 2:18 PM, Darin Adler wrote:

On Jul 24, 2009, at 11:05 AM, Adam Barth wrote:

Do you have specific areas you're concerned about that we can be on the lookout for?

I tried to think this through, but only had a few minutes free:

A minor concern is that Frame has a constellation of helper classes to help keep it simple, including ScriptController, but Document does not, so this change will add more non-“model” things to the Document header, muddying our architecture.

I think that long-term we need to have a class to represent all the state of a Frame that changes whenever the document changes. Right now the closest we have to that is DocumentLoader, but it doesn't really hold all of the per-document state, some needs to be swapped out separately.

I could imagine three plausible designs:

1) Document becomes the master class that owns everything which needs to change when the document changes, including the inner window and the DocumentLoader.

2) DocumentLoader becomes the master class that owns everything, and the relevant fields are moved from other classes, such as Frame, to DocumentLoader. Document gets a backpointer to DocumentLoader but otherwise can be mostly limited to its primary role of implementing the DOM document.

3) A new class becomes the master class and owns all three of DocumentLoader, Document and the inner window.

I personally like #2 or #3 better than #1, I think Document itself will be easier to understand if it remains primarily an implementation of the DOM Document interface. I think #2 is plausible and maybe a good idea, since a lot of the trickiness of when to swap documents relates to loading.

I think that even though this is the right long-term architectural direction, we should be very careful and do changes towards this design in steps. The reason is that it ties into document transition and central object lifetime, which are both areas that are somewhat fragile to compatibility, robustness and security bugs.

So probably I wouldn't make too much of this redesign a prerequisite for other changes.

Regards,
Maciej


There are dormant documents that are in the back/forward cache, and it’s important that we not do more work in these. At the moment, it’s possible that the fact that frame() is 0 is how certain operations are disabled in such things.

The same type of issue could apply to documents that are not in the back/forward cache, and no longer in the frame, but still alive for some reason.

Creation and teardown seem like the trickiest areas. The timing of creation of the global object vs. the document might end up being different than today.

The timing issues are likely to be different per-platform because of the excessive complexity of the FrameLoaderClient, so we would want to make the changes in small steps with a lot of testing.

   -- Darin

_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to