Hi there Anders,

I think this sounds pretty fine at least from a Qt perspective; and it
will also easily enable us to let some of our platforms override the
implementation using a plugin system. We already have such a system in
place (PlatformPlugin) so that platforms can re-implement the handling
of select popups, notifications etc. I think this new system will make
it a lot easier to extend this to other areas, as needed.

Cheers,
Kenneth


On Wed, Jun 16, 2010 at 9:30 PM, Anders Carlsson <[email protected]> wrote:
> Hi everyone,
>
> We've now reached the point in WebKit2 development where we need to be able 
> to override some global calls in WebCore so that we can funnel them through 
> to another process, in a similar way to what Chromium does. We also need to 
> be able to override the calls at run-time, so that we can use the same 
> WebCore framework with both current WebKit and WebKit2.
>
> Here's a proposal for something I call "Platform mechanisms" that I hope can 
> be used by other ports as well as replacing the Chromium bridge long term:
>
> The design pattern we use in WebCore for when a port wants to override 
> functionality is the "abstract client class" pattern. We have a 
> FrameLoaderClient per frame, a ChromeClient per Page etc. Some functionality 
> is global, and doesn't really belong to a specific object, for example:
>
> * Clipboard handling
> * File access
> * Plug-ins.
>
> I propose that we create an abstract class, "PlatformMechanism" which acts as 
> the starting point for accessing such functionality, something like:
>
> class PlatformMechanism {
>  virtual ClipboardMechanism* clipboardMechanism() = 0;
>  virtual FileAccessMechanism* fileAccessMechanism() = 0;
>  virtual PluginMechanism* pluginMechanism() = 0;
> };
>
> class PluginMechanism {
>   virtual void refreshPlugins() = 0;
>   virtual void getPluginInfo(Vector<PluginInfo>&) = 0;
> };
>
> The various ports would subclass PlatformMechanism, implement the various 
> mechanism classes and then call into WebCore to set the PlatformMechanism. 
> This approach gives a natural separation of the functionality. (There's of 
> course nothing stopping you from having a single class inherit from all of 
> the mechanism classes). We could also consider adding some functions to 
> PlatformMechanism directly, for example if a mechanism class would end up 
> with just a single function.
>
> The advantage of having a single "PlatformMechanism" aggregator class is that 
> we don't need lots of setFooMechanism calls that ports would need, and if 
> someone adds a new mechanism class, ports will fail to build instead of 
> mysteriously crash when it turns out someone has forgotten to add a call to 
> set the mechanism.
>
> We would also provide WebCore implementations of the various mechanisms, so 
> that ports that don't want to override anything would just return the WebCore 
> mechanisms. We could even have a WebCorePlatformMechanism class that you 
> could set as the default class. This would enable ports to pick where WebCore 
> should be used.
>
> I would very much appreciate any comments on this, and if I don't hear any 
> major objections I will start landing parts of this, conditionally compiled 
> by a WTF_USE_PLATFORM_MECHANISM define that's turned on for Mac WebKit.
>
> Thanks,
> Anders
>
> _______________________________________________
> webkit-dev mailing list
> [email protected]
> http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev
>



-- 
Kenneth Rohde Christiansen
Technical Lead / Senior Software Engineer
Qt Labs Americas, Nokia Technology Institute, INdT
Phone  +55 81 8895 6002 / E-mail kenneth.christiansen at openbossa.org
_______________________________________________
webkit-dev mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to