#001
void Browser::ExecuteCommand(int id) {
#002
if (!IsCommandEnabled(id)) {
#003
NOTREACHED() << id;
#004
return;
#005
}
#006
// This might happen during QMU testing.
#007
if (!GetSelectedTabContents())
#008
return;
#009
#010
switch (id) {
#011
case IDC_BACK:
#012
UserMetrics::RecordAction(L"Back", profile_);
#013
GoBack();
#014
break;
#015
#016
...
#017
#018
#019
case IDC_OPENURL:
#020
UserMetrics::RecordAction(L"LoadURL", profile_);
#021
{
#022
LocationBarView* lbv = GetLocationBarView();
#023
if (lbv) {
#024
OpenURL(GURL(lbv->location_input()), lbv->disposition(),
#025
lbv->transition());
#026
} else {
#027
OpenURL(GURL(), CURRENT_TAB, PageTransition::TYPED);
#028
}
#029
}
#030
break;
#031
可以看到这段代码,第
19
行就是处理打开网页的命令处理,当然在这个函数里不仅仅处理打开网页的连接命令,还有很多其它的命令,目前先分析这个命令的代码。
第
20
行里先记录当前执行的动作。
第
22
行里查找到当前显示
BAR
窗口。
如果找到
LocationBarView
窗口,就把当前的输入连接生成
GURL
对象,从窗口获取显示位置,传送的类型。否则,就是使用空的连接,并打开当前页面。
下面再来分析函数
OpenURL
的实现,它是调用
TabContentsDelegate
类里的
OpenURL
函数:
#001
virtual void OpenURL(const GURL& url,
#002
WindowOpenDisposition disposition,
#003
PageTransition::Type transition) {
#004
OpenURLFromTab(NULL, url, disposition, transition, std::string());
#005
}
在这个函数继续调用
OpenURLFromTab
函数来实现打开网页的功能,这个函数比较复杂,下一次再来分析它。