美文网首页chrome浏览器源码刨析
chrome中content_shell工程改造成多标签浏览器

chrome中content_shell工程改造成多标签浏览器

作者: chrome知识店铺 | 来源:发表于2021-04-12 09:13 被阅读0次

    content_shell工程是基于Chromium里面的content api封装了一个简单的UI的简易浏览器。

    1、将任务拆分成四个子功能

    1) 添加标签栏

    2) 新开网页在当前窗口展示

    3) 切换标签

    4) 关闭标签

    2 功能实现

    2.1 添加标签栏

    content shell的UI是通过ShellWindowDelegateView类来绘制的,实现了工具栏和网页展示区域的绘制。

    新增Tab和TabbarView两个类来实现标签和标签栏。设计到的主要类图如下:

    TabbarView的成员变量web_view_list_的作用是存储创建的的WebView对象。

    TabbarController和TabController是两个抽象类,TabController负责管理标签栏中的单个标签,TabbarController负责管理标签栏,主要处理标签的单击和关闭功能。

    2.2新开网页在当前窗口展示

    点击网页链接时,原生content shell的处理逻辑是创建新的Shell对象,通过其成员变量window_widget_创建新的窗口展示网页,相关代码如下:

    AddNewContents函数是对WebContentsDelegate类函数的重写,其它对象实现WebContentsDelegate接口可以获得WebContents中的更改的通知并提供对应的功能,使用WebContents的接口函数SetDelegate(WebContentsDelegate*

    delegate)来绑定接收消息的对象。

    根据window_widget_是否为空来判断如实展示新开的网页,代码如下:

    原生的content_shell工程的设计是一个Shell对象管理一个WebContents对象,本任务中需要改为一个Shell对象管理多个WebContents对象,在Shell类中web_contents_list_成员变量负责管理。

    ShellContent继承自content::WebContentsObserver这个抽象类,重写了TitleWasSet(NavigationEntry*

    entry)方法,作用是获取到网页标题之后,调用相关的函数设置标签标题和窗口标题。

    2.3切换标签

    Tab的鼠标点击事件逻辑通过重写View::OnMousePressed函数实现:

    时序图


    2.4关闭标签

    点击关闭按钮或者双击标签都可以关闭当前标签。Tab的双击双击事件逻辑通过重写View::OnMousePressed函数实现,关闭按钮的点击事件逻辑通过重写ButtonListener::ButtonPressed实现:

    关闭时序图

    关闭当前标签后,切换到下一个标签(如果是最后一个标签,切换到上一个标签);如果关闭的标签是唯一的标签,关闭主窗口。

    相关文章

      网友评论

        本文标题:chrome中content_shell工程改造成多标签浏览器

        本文链接:https://www.haomeiwen.com/subject/pakvkltx.html