谷歌浏览器的源码分析(12)
2008-09-23 00:22
295 查看
当我们根据自动提示,或者完全自己输入连接后,再按下回车键,这时浏览器就会去打开网页,或者去查找内容。那么浏览器是怎么样实现这些功能的呢?又是怎么判断去打开网页,还是去打开GOOGLE的搜索引擎的呢?下面就来分析这部份的代码,如下:
#001 bool
AutocompleteEdit::OnKeyDownOnlyWritable(TCHAR key,
#002
UINT repeat_count,
#003
UINT flags) {
#004 // NOTE: Annoyingly,
ctrl-alt-<key> generates WM_KEYDOWN rather than
#005 // WM_SYSKEYDOWN, so we
need to check (flags & KF_ALTDOWN) in various places
#006 // in this function even
with a WM_SYSKEYDOWN handler.
#007
#008 int count = repeat_count;
#009 switch (key) {[/b]
#010 case VK_RETURN:[/b]
#011 AcceptInput((flags & KF_ALTDOWN) ?
NEW_FOREGROUND_TAB : CURRENT_TAB,[/b]
#012 false);[/b]
#013 return true;[/b]
#014
#015 case VK_UP:
#016 count = -count;
#017 // FALL THROUGH
#018 case VK_DOWN:
当用户按下回车键,就会调用上面的函数OnKeyDownOnlyWritable,并且在VK_RETURN[/b]按键处理回车的事件,接着就是调用函数AcceptInput[/b]来处理。
这个函数的代码如下:
#001 void
AutocompleteEdit::AcceptInput(WindowOpenDisposition disposition,
#002
bool for_drop) {
#003 // Get the URL and
transition type for the selected entry.
#004 PageTransition::Type
transition;
#005 bool
is_history_what_you_typed_match;
#006 std::wstring
alternate_nav_url;
保存当前获取的URL连接串。
#007 const std::wstring
url(GetURLForCurrentText(&transition,
#008
&is_history_what_you_typed_match,
#009
&alternate_nav_url));
#010 if (url.empty())
#011 return;
#012
判断是否重新加载当前的网页。
#013 if (url ==
permanent_text_) {
#014 // When the user hit enter on the existing
permanent URL, treat it like a
#015 // reload for scoring
purposes. We could detect this by just
checking
#016 //
user_input_in_progress_, but it seems better to treat "edits" that
end
#017 // up leaving the URL
unchanged (e.g. deleting the last character and then
#018 // retyping it) as
reloads too.
#019 transition =
PageTransition::RELOAD;
#020 } else if (for_drop ||
((paste_state_ != NONE) &&
#021
is_history_what_you_typed_match)) {
下面是打开一个新的连接。
#022 // When the user pasted
in a URL and hit enter, score it like a link click
#023 // rather than a normal
typed URL, so it doesn't get inline autocompleted
#024 // as aggressively
later.
#025 transition =
PageTransition::LINK;
#026 }
#027
这里是调用OpenURL函数打开这个连接的内容。
#028 OpenURL(url, disposition,
transition, alternate_nav_url,
#029
AutocompletePopupModel::kNoMatch,
#030 is_keyword_hint_ ?
std::wstring() : keyword_);
#031 }
这段代码的流程很清楚,就是先通过判断按键输入,是否按下回车键,如果是回车键就调用函数AcceptInput[/b]处理,然后在这个函数就判断这个连接是否已经打开了,如果已经打开,只需要重新加载就行了,如果不是当前的,就是打开一个新的连接。下一次再来分析OpenURL函数是怎么样通过连接来重新加载,还是打开一个新网页。
#001 bool
AutocompleteEdit::OnKeyDownOnlyWritable(TCHAR key,
#002
UINT repeat_count,
#003
UINT flags) {
#004 // NOTE: Annoyingly,
ctrl-alt-<key> generates WM_KEYDOWN rather than
#005 // WM_SYSKEYDOWN, so we
need to check (flags & KF_ALTDOWN) in various places
#006 // in this function even
with a WM_SYSKEYDOWN handler.
#007
#008 int count = repeat_count;
#009 switch (key) {[/b]
#010 case VK_RETURN:[/b]
#011 AcceptInput((flags & KF_ALTDOWN) ?
NEW_FOREGROUND_TAB : CURRENT_TAB,[/b]
#012 false);[/b]
#013 return true;[/b]
#014
#015 case VK_UP:
#016 count = -count;
#017 // FALL THROUGH
#018 case VK_DOWN:
当用户按下回车键,就会调用上面的函数OnKeyDownOnlyWritable,并且在VK_RETURN[/b]按键处理回车的事件,接着就是调用函数AcceptInput[/b]来处理。
这个函数的代码如下:
#001 void
AutocompleteEdit::AcceptInput(WindowOpenDisposition disposition,
#002
bool for_drop) {
#003 // Get the URL and
transition type for the selected entry.
#004 PageTransition::Type
transition;
#005 bool
is_history_what_you_typed_match;
#006 std::wstring
alternate_nav_url;
保存当前获取的URL连接串。
#007 const std::wstring
url(GetURLForCurrentText(&transition,
#008
&is_history_what_you_typed_match,
#009
&alternate_nav_url));
#010 if (url.empty())
#011 return;
#012
判断是否重新加载当前的网页。
#013 if (url ==
permanent_text_) {
#014 // When the user hit enter on the existing
permanent URL, treat it like a
#015 // reload for scoring
purposes. We could detect this by just
checking
#016 //
user_input_in_progress_, but it seems better to treat "edits" that
end
#017 // up leaving the URL
unchanged (e.g. deleting the last character and then
#018 // retyping it) as
reloads too.
#019 transition =
PageTransition::RELOAD;
#020 } else if (for_drop ||
((paste_state_ != NONE) &&
#021
is_history_what_you_typed_match)) {
下面是打开一个新的连接。
#022 // When the user pasted
in a URL and hit enter, score it like a link click
#023 // rather than a normal
typed URL, so it doesn't get inline autocompleted
#024 // as aggressively
later.
#025 transition =
PageTransition::LINK;
#026 }
#027
这里是调用OpenURL函数打开这个连接的内容。
#028 OpenURL(url, disposition,
transition, alternate_nav_url,
#029
AutocompletePopupModel::kNoMatch,
#030 is_keyword_hint_ ?
std::wstring() : keyword_);
#031 }
这段代码的流程很清楚,就是先通过判断按键输入,是否按下回车键,如果是回车键就调用函数AcceptInput[/b]处理,然后在这个函数就判断这个连接是否已经打开了,如果已经打开,只需要重新加载就行了,如果不是当前的,就是打开一个新的连接。下一次再来分析OpenURL函数是怎么样通过连接来重新加载,还是打开一个新网页。
相关文章推荐
- 谷歌浏览器的源码分析(12)
- 谷歌浏览器的源码分析(12)
- 第二人生的源码分析(12)天空显示的实现
- Leveldb源码分析--12
- showlog监控慢日志查询以及源码分析笔记(12)
- 谷歌浏览器的源码分析(4)
- 谷歌浏览器的源码分析(5)
- 谷歌浏览器的源码分析(7)
- 谷歌浏览器的源码分析(8)
- 谷歌浏览器的源码分析(10)
- 谷歌浏览器的源码分析(11)
- 谷歌浏览器的源码分析(15)
- 谷歌浏览器的源码分析(16)
- 谷歌浏览器的源码分析(21)
- 谷歌浏览器的源码分析(22)
- 谷歌浏览器的源码分析(23)
- 谷歌浏览器的源码分析(25)
- 谷歌浏览器的源码分析(29)
- 谷歌浏览器的源码分析(30)
- 谷歌浏览器的源码分析(32)