如有Chromium扩展(Extension)的页面(Page)加载过程分析

extension_dir  时间:2021-03-15  阅读:()

精品学习资料---收集网络如有侵权请联系网

站删除

Chromium扩展Extension的页面

 P a g e  加载过程分析Chromium的ExtensionPage其实就是网页因此它们的加载过程与普通网页相同。常见的ExtensionPage有BackgroundPage和PopupPage。其中B ackgroundPage在浏览器窗口初始化完成后自动加载之后运行在后台中。 PopupPage在用户点击地址栏右边的按钮时加载并且显示在弹窗中。本文接下来就分析ExtensionPage的加载过程。

ExtensionPage是加载在ExtensionProcess中的如图1所示

ExtensionProcess实际上就是RenderProcess。精品学习资料---收集网络如有侵权请联系网

站删除

精品学习资料---收集网络如有侵权请联系网

站删除

Chromium的 Content层向外提供了一个WebContents类通过调用这个类的静态成员函数Create就可以在一个ExtensionProcess加载一个指定的ExtensionPage。

B ackgroundPage是一个特殊的网页它的内容是空的 不过包含有一个background.j s。这个background.j s是在Extension的清单文件中指定的。 PopupPage则与普通网页是一样的它既可以包含有UI元素也可以包含Java S crip t脚本。接下来 我们就结合源代码 先分析BackgroundPage的加载过程再分析PopupPage的加载过程。

Chro mium 的 chro me模块会创建一个ChromeNotificationOb server对象用来监听每一个 新 打 开 的 浏 览 器 窗 口 的NOT IFIC AT ION_B ROWS ER_WINDOW_READ

Y事件。这时候上述ChromeNotificationOb server

精品学习资料---收集网络如有侵权请联系网

站删除

精品学习资料---收集网络如有侵权请联系网站删除

对象的成员函数OnBrowserWindowReady会被调用如下所示

[cpp]viewplaincopy在CODE上查看代码片派生到我的代码片voidChromeNotificationOb server: :OnBrowserWindowReady(Browser*browser){

Profile*profile=browser->profile();

. . . . . .extensions: :ProcessManager*manager=

ExtensionSystem: :Get(profile)->process_manager();

. . . . . .manager->OnBrowserWindowReady();

. . . . . .

}

这 个 函 数 定 义 在 文 件精品学习资料---收集网络如有侵权请联系网站删除

精品学习资料---收集网络如有侵权请联系网

站删除

external/chromium_org/chrome/browser/extensions/chrome_notification_ob server.cc中。

参数browser指向的是一个Browser对象。这个Browser对象描述的就是一个新打开的浏览器窗口 ChromeNotificationOb server类的成员函数OnBrowserWindowReady首先调用它的成员函数profile获得浏览器在启动过程中创建的Profile然后再根据这个Profile获得一个ProcessManager对象。有了这个ProcessManager对象之后就可以调用它的成员函数OnBrowserWindowRe ady用来通知它有一个新的浏览器窗口打开了。浏览器启动时创建Profile的过程 以及根据Profile创建ProcessManager对象的过程可以参考前面Chromium扩展Extension加载过程分析一文。ProcessManager 类 的 成 员 函 数OnBrowserWindowReady在执行的过程中就会为当前加载的Extension创建BackgroundPage如下所示

精品学习资料---收集网络如有侵权请联系网

站删除

精品学习资料---收集网络如有侵权请联系网

站删除

[cpp]viewplaincopy在CODE上查看代码片派生到我的代码片voidPro cessManager: :OnBrowserWindowReady(){. . . . . .

CreateBackgroundHo stsForPro fileStartup();

}

这 个 函 数 定 义 在 文 件external/chromium_org/extensions/browser/process中。

ProcessManager 类 的 成 员 函 数OnBrowserWindowReady调用另外一个成员函数CreateBackgroundHo stsForPro fileStartup为当前加载的Extension创建B ackgroundPage如下所示

[cpp]viewplaincopy在CODE上查看代码片派生到我的代码片voidProcessManager: :CreateBackgroundHo stsForPro fil e S tartup(){

精品学习资料---收集网络如有侵权请联系网

站删除

精品学习资料---收集网络如有侵权请联系网

站删除

. . . . . .constExtensionSet&enabled_extensions=

ExtensionRegistry: :Get(GetBrowserContext())->enabled_extensions();for(ExtensionSet: :const_iteratorextension=enabled_extensions.begin();extension!=enabled_extensions.end();

++exten sion){

CreateB ackgroundHo stForExtensionLo ad(this,extension->get());

. . . . . .

}

. . . . . .

}

这 个 函 数 定 义 在 文 件external/chromium_org/extensions/browser/process中。

精品学习资料---收集网络如有侵权请联系网

站删除

精品学习资料---收集网络如有侵权请联系网

站删除

在前面Chro mium扩展Exten sion加载过程分析一文提到 Chromium的Browser进程在启动的时候 会将那些状态设置为Enabled的Exten sion保存在一个Exten sionRegistry 的EnabledList中。 ProcessManager类的成员函数CreateBackgroundHo stsForPro fileStartup主要就是遍历这个EnabledList中的每一个Extension并 且 调 用 函 数CreateB ackgroundHo stForExtensionLoad检查它们是否指定了BackgroundPage。如果指定了那么就会进行加载。

函数CreateBackgroundHostForExtensionLoad的实现如下所示

[cpp]viewplaincopy在CODE上查看代码片派生到我的代码片staticvoidCreateBackgroundHostForExtensionLoad(

ProcessManager*manager,constExtension*extensio精品学习资料---收集网络如有侵权请联系网

站删除

精品学习资料---收集网络如有侵权请联系网

站删除

n){

DVLOG(1)<<"CreateBackgroundHo stForExtensionLoad";if(BackgroundInfo: :HasPersistentBackgroundPage(extension))manager->CreateBackgroundHo st(extension,

B ackgroundInfo: :GetB ackgroundURL(extension));}

这 个 函 数 定 义 在 文 件external/chromium_org/extensions/browser/process中。

函数CreateBackgroundHostForExtensionLoad首先检查参数extension描述的Extension是否指定了类型为persitent的BackgroundPage。如果指定了那么就会调用参数man a ge r指向的一个ProcessManager 对 象 的 成 员 函 数CreateB ackgroundHo st对它进行加载。对于非persitent的BackgroundPage它们只会在特定事件发生时才会被加载。本文主要以类型为persitent的B ackgroundPage为例说明它们的加精品学习资料---收集网络如有侵权请联系网

站删除

精品学习资料---收集网络如有侵权请联系网

站删除

载过程。非persitent的BackgroundPage的加载过程也是类似的。

函数CreateBackgroundHostForExtensionLoad在调用 ProcessManager 类的成员 函数CreateB ackgroundHo st加载一个BackgroundPage之前首先要获得这个B ackgroundPage的URL。这个URL是通过调用B ackgroundIn fo类的静态成员函数GetB ackgroundURL获得的如下所示[cpp]viewplaincopy在CODE上查看代码片派生到我的代码片

GURLB ackgroundInfo: :GetB ackgroundURL(con stExtension*extension){constBackgroundInfo&info=GetBackgroundInfo(extension);if(info.b ackground_scripts_.empty())returninfo.b ackground_url_;returnextension->GetResourceURL(kGeneratedB ackgroundPageFilename);

精品学习资料---收集网络如有侵权请联系网

站删除

香港 1核 1G 5M 22元/月 美国 1核 512M 15M 19.36元/月 轻云互联

轻云互联成立于2018年的国人商家,广州轻云互联网络科技有限公司旗下品牌,主要从事VPS、虚拟主机等云计算产品业务,适合建站、新手上车的值得选择,香港三网直连(电信CN2GIA联通移动CN2直连);美国圣何塞(回程三网CN2GIA)线路,所有产品均采用KVM虚拟技术架构,高效售后保障,稳定多年,高性能可用,网络优质,为您的业务保驾护航。官方网站:点击进入广州轻云网络科技有限公司活动规则:用户购买任...

CloudCone:$14/年KVM-512MB/10GB/3TB/洛杉矶机房

CloudCone发布了2021年的闪售活动,提供了几款年付VPS套餐,基于KVM架构,采用Intel® Xeon® Silver 4214 or Xeon® E5s CPU及SSD硬盘组RAID10,最低每年14.02美元起,支持PayPal或者支付宝付款。这是一家成立于2017年的国外VPS主机商,提供VPS和独立服务器租用,数据中心为美国洛杉矶MC机房。下面列出几款年付套餐配置信息。CPU:...

Megalayer(48元)新增 美国CN2优化线路特价服务器和VPS方案

Megalayer 商家算是新晋的服务商,商家才开始的时候主要是以香港、美国独立服务器。后来有新增菲律宾机房,包括有VPS云服务器、独立服务器、站群服务器等产品。线路上有CN2优化带宽、全向带宽和国际带宽,这里有看到商家的特价方案有增加至9个,之前是四个的。在这篇文章中,我来整理看看。第一、香港服务器系列这里香港服务器会根据带宽的不同区别。我这里将香港机房的都整理到一个系列里。核心内存硬盘IP带宽...

extension_dir为你推荐
云爆发养兵千日用兵千日这个说法对不对www.hao360.cn主页设置为http://hao.360.cn/,但打开360浏览器先显示www.yes125.com后转换为www.2345.com,搜索注册表和百度关键词价格查询百度关键字如何设定竟价价格?地陷裂口天上顿时露出一个大窟窿地上也裂开了,一到黑幽幽的深沟可以用什么四字词语来?陈嘉垣大家觉得陈嘉桓漂亮还是钟嘉欣漂亮?百度关键词工具常见百度关键词挖掘方法分别是什么请列举?杨丽晓博客杨丽晓是如何进入娱乐圈的?dadi.tv海信电视机上出现英文tvservice是什么意思?66smsm.com【回家的欲望(回家的诱惑)大结局】 回家的诱惑全集66 67 68 69 70集QOVD快播观看地址??sodu.tw台湾的可以看小说的网站
怎样申请域名 网络星期一 日志分析软件 天猫双十一抢红包 微信收钱 工作站服务器 免费防火墙 1g内存 100m独享 昆明蜗牛家 789电视剧 怎么建立邮箱 网站加速软件 上海电信测速 免费个人主页 免费稳定空间 阿里dns apache启动失败 优惠服务器 美国西雅图独立 更多