chrome源码之恢复上次打开的标签页的学习
startup_browser_creator_impl.cc
————————》打开任何页面或浏览器的入口函数
bool StartupBrowserCreatorImpl::ProcessStartupURLs(const std::vector<GURL>& urls_to_open)
————————》
Browser* browser = SessionRestore::RestoreSession(profile_, NULL, restore_behavior, adjusted_urls);
————————》session_restore.cc
Browser* SessionRestore::RestoreSession(Profile* profile,Browser* browser,uint32_t behavior,const std::vector<GURL>& urls_to_open)
————————》
Browser* Restore()
————————》
void OnGotSession(std::vector<std::unique_ptr<sessions::SessionWindow>> windows,SessionID::id_type active_window_id)
————————》
Browser* ProcessSessionWindowsAndNotify(std::vector<std::unique_ptr<sessions::SessionWindow>>* windows,SessionID::id_type active_window_id)
————————》
Browser* ProcessSessionWindows(std::vector<std::unique_ptr<sessions::SessionWindow>>* windows,SessionID::id_type active_window_id,std::vector<RestoredTab>* created_contents)
————————》在以下函数中将上次的标签页存储到created_contents中并通过RestoreTab一一保存
—》RestoreTabsToBrowser(*(*i), browser, initial_tab_count,selected_tab_index, created_contents);——》WebContents* contents = RestoreTab(tab, i, browser, is_selected_tab);
—》Browser* finished_browser = FinishedTabCreation(true, has_tabbed_browser, created_contents);
————————》之后是将上次保存的标签页全部打开
Browser* FinishedTabCreation(bool succeeded,bool created_tabbed_browser,std::vector<RestoredTab>* contents_created)
————————》session_restore_delegate.cc
SessionRestoreDelegate::RestoreTabs(*contents_created, restore_started_);
————————》
void SessionRestoreDelegate::RestoreTabs(const std::vector<RestoredTab>& tabs,const base::TimeTicks& restore_started)
————————》
void TabLoader::RestoreTabs(const std::vector<RestoredTab>& tabs,const base::TimeTicks& restore_started)
1.首次正常打开
Restore——》ProcessSessionWindowsAndNotify(Restore中调用)——》ProcessSessionWindows——》RestoreTabsToBrowser——》RestoreTab——》FinishedTabCreation——》RestoreTabs
2.非首次正常打开(之前有正常关闭的标签页)
Restore——》ProcessSessionWindowsAndNotify(Restore中调用)——》ProcessSessionWindows——》RestoreTabsToBrowser——》RestoreTab(n个:n为之前打开的标签页个数)——》FinishedTabCreation——》RestoreTabs
3.非首次非正常打开(之前有未正常关闭的标签页)
Restore——》OnGotSession——》ProcessSessionWindowsAndNotify(OnGotSession中调用)——》ProcessSessionWindows——》RestoreTabsToBrowser——》RestoreTab(n个:n为之前打开的标签页个数)——》FinishedTabCreation——》RestoreTabs
chrome源码之恢复上次打开的标签页的学习的更多相关文章
- 从Chrome源码看浏览器如何构建DOM树
.aligncenter { clear: both; display: block; margin-left: auto; margin-right: auto } p { font-size: 1 ...
- 从Chrome源码看audio/video流媒体实现二(转)
第一篇主要介绍了Chrome加载音视频的缓冲控制机制和编解码基础,本篇将比较深入地介绍解码播放的过程.以Chromium 69版本做研究. 由于Chromium默认不能播放Mp4,所以需要需要改一下源 ...
- 从Chrome源码看浏览器的事件机制
.aligncenter { clear: both; display: block; margin-left: auto; margin-right: auto } .crayon-line spa ...
- Google Chrome 源码下载地址 (Google Chrome Source Code Download)
1. Google Chrome 源码 SVN 地址:http://src.chromium.org/svn.包含有 Chrome.Gears.Webkit.GCC 等源码以及编译依赖工具.Chrom ...
- 从Chrome源码看JS Array的实现
.aligncenter { clear: both; display: block; margin-left: auto; margin-right: auto } .crayon-line spa ...
- 下载Spring4.1.x源码并用IntelliJ IDEA打开-----
下载Spring4.1.x源码并用IntelliJ IDEA打开-------https://blog.csdn.net/boling_cavalry/article/details/79426075 ...
- VSCode打开文件总是会覆盖上次打开的标签
在使用VSCode的时候,打开一个文件之后,如果没有修改的话,那么再打开下一个文件的时候,他总会替换上次打开的标签,那么怎么样才能每次都在新的标签打开文件呢? 实际上,这种情况的出现是因为我们点击文件 ...
- chrome打开新标签页插件
标签(空格分隔): 日常办公,chrome浏览器 一直被chrome浏览器打开新标签页困扰,每次点开一个新标签页还要再去点一下主页,才能打开搜索页面.如果直接点击主页,又会把当前的页面刷掉,实在是非常 ...
- spring源码深度解析— IOC 之 默认标签解析(下)
在spring源码深度解析— IOC 之 默认标签解析(上)中我们已经完成了从xml配置文件到BeanDefinition的转换,转换后的实例是GenericBeanDefinition的实例.本文主 ...
随机推荐
- Python破解压缩包密码问题
所用知识 1. Pool 进程池 2. try...except 异常处理 3.枚举的方式 4.生成器的运用 逻辑关系 通过生成假密码去碰撞!捕获异常,一直碰撞,直到生成的密码与压缩包建立的密码对应, ...
- shell 批量压缩指定目录及子目录内图片的方法
用户上传的图片,一般都没有经过压缩,造成空间浪费.因此需要编写一个程序,查找目录及子目录的图片文件(jpg,gif,png),将大于某值的图片进行压缩处理. 查看目录文件大小 du -h --max- ...
- 【JUC源码解析】AQS
简介 AQS,也即AbstractQueuedSynchronizer,抽象队列同步器,提供了一个框架,可以依赖它实现阻塞锁和相关同步器.有两种类型,独占式(Exclusive)和共享式(Share) ...
- katalon系列五:使用Katalon Studio手动编写WEB自动化脚本
上一篇主要讲了怎么录制脚本,这次我们看看怎么手动编写脚本,接下来就编写一个简单的用百度搜索的脚本. 1.我们先抓取页面上的元素,点击工具栏上的Spy Web按钮(地球上有个绿点),URL输入百度地址, ...
- Linux命令应用大词典-第 15章 文件、目录权限和属性
15.1 chmod:更改文件和目录的模式 15.2 chown:更改文件和目录的用户所有者和组群所有者 15.3 chgrp:更改文件或目录的所属组 15.4 umask:显示和设置文件及目录创建默 ...
- Java学习 · 初识 异常机制
异常机制 1. 程序中的异常 a) b) 面对异常如何解决 i. 由开发者通过if-else来解决 代码臃肿 程序员需要花费很大精力 ii. ...
- python读取日志,存入mysql
1.从 http://www.almhuette-raith.at/apache-log/access.log 下载 1万条日志记录,保存为一个文件,读取文件并解析日志,从日志中提取ip, time_ ...
- Elasticsearch 排序插件的开发
直接观察到的几个问题 简单expression脚本的执行效率 > java 插件,10000条数据可以测试出1ms左右的差距. Es会不断调用newScript来创建"足够多" ...
- 业务迁移---redis
以前也没怎么搞过redis 只知道他是一个nosql数据库很强大,这次迁移用到了~ 正好熟练一下并记录过程,还挺繁琐.. 记录一下在学习中的几个问题,总结加深一下印象,有可能会漏掉或者有误差的地方~ ...
- angularJS遇到的坑
最近在用angularjs做一些东西,由于学艺不精,对angularjs了解不够,导致经常会不小心掉进一些自己挖的坑里(⊙_⊙),在这里记下来,谨防又踩. 1.angularjs ng-show no ...