chromium中提供了一个IME模块,作用就是用来处理在使用过程中与输入相关的事件,该模块的特殊性,要么处理事件,要么将事件抛到chromium的事件处理器。
过程如下:
页面上click事件发生--->系统得到事件--->传递到chromium的Platform Event Source模块--->Platform Event Dispatcher--->UI 或者页面。
chromium的事件传送机制通过观察者模式来实现:
PlatformEventSource :事件源,也就是chromium事件开始传递的起点;
EventDispatcher:事件传递者,具有传递事件的功能,提供了传递事件以及事件处理的接口,是所有事件传递类的基类;
事件处理过程:
1、在PlatformEventSource中维护一个EventDispatcher vector,每一个dispatcher创建时,通过该类的静态放法,注册到vector中;
2、当有事件到达时,开始遍历dispatcher列表:首先调用dispatcher的CanDispatchEvent方法,判断可以传递,则传递,否则,跳过当前dispatcher;
3、dispatcher的CanDispatchEvent方法返回true,则调用dispatcher的DispatchEvent方法,重写这个方法,就可以按照实际的需求处理事件了。
4、事件处理完成,返回事件不再继续传递的值,则此次事件处理流程结束,若返回的不是停止传送值,则PlatformEventSource则将事件传送到下一个dispatcher。
5、若最终事件没有得到处理,则被丢弃。