谷歌浏览器的源码分析 4

关于对话框,主要实现了让用户查看当前软件的版本、软件信息和检查升级的功能。因此这个类主要继续ChromeViews::View类、ChromeViews::DialogDelegate和GoogleUpdateStatusListener。其中ChromeViews::View实现窗口的布局和显示问题,ChromeViews::DialogDelegate实现了事件响应,或者窗口某时是否可以显示按钮的问题,GoogleUpdateStatusListener是用来实现接收更新程序状态信息。

这个类的声明如下:

class AboutChromeView : public ChromeViews::View,

public ChromeViews::DialogDelegate,

public GoogleUpdateStatusListener {

public:

explicit AboutChromeView(Profile* profile);

virtual ~AboutChromeView();

// Initialize the controls on the dialog.

void Init();

// Overridden from ChromeViews::View:

virtual void GetPreferredSize(CSize *out);

virtual void Layout();

virtual void ViewHierarchyChanged(bool is_add,

ChromeViews::View* parent,

ChromeViews::View* child);

// Overridden from ChromeViews::DialogDelegate:

virtual int GetDialogButtons() const;

virtual std::wstring GetDialogButtonLabel(DialogButton button) const;

virtual bool IsDialogButtonEnabled(DialogButton button) const;

virtual bool IsDialogButtonVisible(DialogButton button) const;

virtual bool CanResize() const;

virtual bool CanMaximize() const;

virtual bool IsAlwaysOnTop() const;

virtual bool HasAlwaysOnTopMenu() const;

virtual bool IsModal() const;

virtual std::wstring GetWindowTitle() const;

virtual bool Accept();

virtual ChromeViews::View* GetContentsView();

// Overridden from GoogleUpdateStatusListener:

virtual void OnReportResults(GoogleUpdateUpgradeResult result,

GoogleUpdateErrorCode error_code,

const std::wstring& version);

private:

// The visible state of the Check For Updates button.

enum CheckButtonStatus {

CHECKBUTTON_HIDDEN = 0,

CHECKBUTTON_DISABLED,

CHECKBUTTON_ENABLED,

};

// Update the UI to show the status of the upgrade.

void UpdateStatus(GoogleUpdateUpgradeResult result,

GoogleUpdateErrorCode error_code);

Profile* profile_;

// UI elements on the dialog.

ChromeViews::ImageView* about_dlg_background_;

ChromeViews::Label* about_title_label_;

ChromeViews::TextField* version_label_;

ChromeViews::TextField* main_text_label_;

// UI elements we add to the parent view.

scoped_ptr<ChromeViews::Throbber> throbber_;

ChromeViews::ImageView success_indicator_;

ChromeViews::ImageView update_available_indicator_;

ChromeViews::ImageView timeout_indicator_;

ChromeViews::Label update_label_;

// Keeps track of the visible state of the Check For Updates button.

CheckButtonStatus check_button_status_;

// The class that communicates with Google Update to find out if an update is

// available and asks it to start an upgrade.

GoogleUpdate* google_updater_;

// Our current version.

std::wstring current_version_;

// The version Google Update reports is available to us.

std::wstring new_version_available_;

DISALLOW_EVIL_CONSTRUCTORS(AboutChromeView);

};

通过关于对话框的分析,可以理解到chrome浏览器窗口基本组成,以及窗口继承关系,还有事件的响应方式。前面三次分析,主要是入门的分析,也是了解这么一个大工程的一种手段。比如测试整个工程是否可以编译,是否可以修改代码等等。后面的分析会以浏览器输入HTTP连接开始,直到打开网页显示为一个主线,做一个基本的分析。

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://www.cnblogs.com/captainbed

原文地址:https://www.cnblogs.com/skiwnchh/p/10161802.html

时间: 2024-10-31 14:02:31

谷歌浏览器的源码分析 4的相关文章

谷歌浏览器的源码分析 21

分享一下我老师大神的人工智能教程吧.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net 上一次说到类RenderThread和类RenderView把消息处理,那么这两个类是怎么样处理消息的呢?又是怎么样处理浏览的消息呢?现在就带着这两个问题去分析它的源码,理解它处理消息的方法.类RenderThread处理消息的代码如下:<?xml:namespace prefix = o ns = "urn:schemas-

谷歌浏览器的源码分析 6

前面已经介绍了这么引人的输入自动完成功能,并且可以在输入超级连接框里直接通过GOOGLE搜索所有的内容,这是比较大的创新,不但可以节省界面的占用面积,还很方便大家查询的需要,比如记不住的连接,根本不需要去记了,只要你记住需要的内容就行了.这样既不需要到什么门户网站去找连接,也不需要去记住众多的网站,这个功能是非常方便的. 这个输入框的自动完成的功能,是比较智能化的.因为它会根据以往的输入自动完成,或者智能提示所需要的连接或者内容. 下面就来先看这个类的定义: #001  // Provides

谷歌浏览器的源码分析 34

通过上一次的分析,我们看到所有网页数据经过HTML分析器之后,都会变成一个一个RenderObject对象,那么这些RenderObject对象又是怎么样显示到界面上面的呢?现在就带着这个疑问来分析下面的代码,这样肯定会找到解决方法的.怎么样找到入口呢?其实可以先从界面显示的类开始,可以看到显示界面的窗口类名称叫做Chrome_RenderWidgetHostHWND,有了这个类名称,就可以到代码里查看它在那里了. #001  class RenderWidgetHost; #002  clas

谷歌浏览器的源码分析 7

当我们键入字母或者文字开始时,那么类AutocompleteEdit就会从窗口消息里获取到相应的字母或者文字,然后根据输入的信息到本地或者网络上保存的信息库里查找相应的输入提示,这就是自动完成的实现.下面就来先分析输入的函数:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> #001  void AutocompleteEdit::OnChar(TCHAR ch, UIN

谷歌浏览器的源码分析 9

为了处理字符消息实现自动完成的功能,这是怎么样实现的呢?其实是先记录字符消息响应前的字符串以及选中状态,接着再处理消息,最后才查询可能的输入,做出智能提示.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> #001  void AutocompleteEdit::OnBeforePossibleChange() { #002    // Record our state.

谷歌浏览器的源码分析 13

分享一下我老师大神的人工智能教程吧.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net 上一次说到调用函数OpenURL来打开网络连接,这仅是网络浏览的开始,现在再来分析它怎么样去下载网页数据,然后再显示出来.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> #001  void Autocom

谷歌浏览器的源码分析 29

分享一下我老师大神的人工智能教程吧.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net 上一次说到通过WinHTTP来接收网络数据,但没有具体介绍怎么样接收,现在就来分析这方面的代码.首先是通过函数WinHttpQueryHeaders来查询HTTP协议头的大小,接着还是通过函数WinHttpQueryHeaders把数据接收到缓冲区里.下面这段代码,就是做这样的事情:<?xml:namespace prefix =

TeamTalk源码分析之login_server

login_server是TeamTalk的登录服务器,负责分配一个负载较小的MsgServer给客户端使用,按照新版TeamTalk完整部署教程来配置的话,login_server的服务端口就是8080,客户端登录服务器地址配置如下(这里是win版本客户端): 1.login_server启动流程 login_server的启动是从login_server.cpp中的main函数开始的,login_server.cpp所在工程路径为server\src\login_server.下表是logi

Android触摸屏事件派发机制详解与源码分析二(ViewGroup篇)

1 背景 还记得前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>中关于透过源码继续进阶实例验证模块中存在的点击Button却触发了LinearLayout的事件疑惑吗?当时说了,在那一篇咱们只讨论View的触摸事件派发机制,这个疑惑留在了这一篇解释,也就是ViewGroup的事件派发机制. PS:阅读本篇前建议先查看前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>,这一篇承接上一篇. 关于View与ViewGroup的区别在前一篇的A