chrome FindBar
简介
对常用的Ctrl+F弹出查找框进行查看,了解大致细节。
目录
1.在chrome浏览页面按下Ctrl+F后产生的动作
2.输入框输入内容后产生的动作
3.关闭按钮消息处理
4.查找框中内容的保留
findbar是每一个tab页面共享的,并且创建了findbar之后,就不会再销毁,直到退出浏览器
1.在chrome浏览页面按下Ctrl+F后产生的动作
BrowserCommandController::ExecuteCommandWithDisposition这个函数在前面的bookmark处已经碰到了,属于Browser的命令响应模块,后面连续的几个命令都在周转,到CreateFindBar处,才真正的调用new CreateHostView(browser_view)创建出实际的find_bar,FindBarHost会创建FindbarView,
创建完成FindBarHost后,BrowserView::CreateFindBar会接着创建一个FindBarController管理FindBarHost,同时使FindBarHost能够访问到FindTabHelper。
都创建完成完成之后就调用Show,就是我们看到的如下界面了。
值得注意的是FindBarHost是看不到的,我们看到FindBar慢慢的从顶部降下来的过程就是FindBarHost的作用,显示完成后,现在看到的内容就是FindBarView的信息了。
FindBarView的成员:
SearchTextfieldView* find_text_; views:: Label* match_count_text_; FocusForwarderView* focus_forwarder_view_; views:: ImageButton* find_previous_button_; views:: ImageButton* find_next_button_; views:: ImageButton* close_button_;
这几项信息,与显示框完全一致。
接下来看看初略的类图
这个图画的有点杂乱,将就着看吧,主要类容就FindBarView、FindBarHost、FindBarController和FindTabHelper,
其余内容都是辅助获取通知或者显示的,暂不关心
2.输入框输入内容后产生的动作
过程还是很简单,就是将输入的内容通过IPC的形式发送到Webkit(或者后来的Blink)进行渲染了。
3.关闭窗口
关闭的过程就隐藏当前的FindBar,然后发送消息给Webkit(或者Blink)Stop查找。
4.查找框的内容保留
这里值得注意的一点是,若当前页面已经弹出过findbar则显示的内容可能是上一次的,若没有则可能是别的tab的。
结论:
findbar能够看出很明显的MVC,同时官网也是这么说的,内容清晰、简洁。
参考
http://www.chromium.org/developers/design-documents/find-bar