You mention some refactoring.
But the thing you mention here with the biggest significance is creating a
WebKit-internal clipboard to augment the platform-specific clipboard mechanisms
that work between processes and between WebKit and non-WebKit within a process.
I think that’s OK, but it does have a significant downside. If done in the most
obvious way we will no longer have an easy way to test the system clipboard
code paths. And those are used a lot, for example to copy from Safari to Mail
on Mac OS X. I’m not sure that having duplicate code paths to optimize behavior
inside the WebKit process is worth it, but it might be a worthwhile feature.
My main advice would be to do refactoring separately from behavior changes. And
in steps that are as small as possible.
But clipboard is an area where we have some messy code so some work on it could
help. Not the work you mentioned, but some even more basic refactoring and
redesign. We have a major architecture mistake in our current Clipboard that
should be fixed.
The Clipboard object itself is a DOM object, in dom/Clipboard.idl and
dom/Clipboard.h. Unfortunately, this DOM object has platform-specific bits in
the wrong directory. They are in the platform directory instead of being in the
dom directory or per-platform dom subdirectories. The platform directory holds
a separate module, which should have no knowledge of DOM at all. It’s not
appropriate to have the platform-specific implementation of a dom class in the
platform directory.
What we need is a lower level clipboard abstraction in the platform directory
that the DOM Clipboard object can use. Think of this relationship as analogous
to the relationship of the DOM Canvas graphics context to the platform
directory GraphicsContext class. The new object should be in the platform
directory and the one in the dom directory should use it. Most platform
specifics could be factored out completely from the dom directory and the need
for per-platform source files in that directory would be minimal.
Another cross-platform clipboard abstraction is in platform/Pasteboard.h.
Unfortunately, it too does not belong in the platform directory in its current
form. It has code that deals with the DOM and editing machinery that is not
allowed in the platform module.
Straightening out these classes would be an important part of refactoring to
clean up clipboard-related code. Code to map DOM to various platform-specific
pasteboard formats belongs in the editing subdirectory in platform-specific
files so we can cope with platform-specific formats, perhaps using code from
the platform directory to help with other aspects of the platform-specific
clipboard machinery. Code to implement the DOM clipboard object should remain
in a directory other than platform, either the dom, editing, or html directory.
A platform-independent abstraction to allow these other classes to be written
cleanly with a minimum of platform-specific code should be in the platform
directory.
-- Darin
_______________________________________________
webkit-dev mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev