如有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);

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

站删除

Sharktech:美国/荷兰独立服务器,10Gbps端口/不限流量/免费DDoS防护60G,319美元/月起

sharktech怎么样?sharktech (鲨鱼机房)是一家成立于 2003 年的知名美国老牌主机商,又称鲨鱼机房或者SK 机房,一直主打高防系列产品,提供独立服务器租用业务和 VPS 主机,自营机房在美国洛杉矶、丹佛、芝加哥和荷兰阿姆斯特丹,所有产品均提供 DDoS 防护。此文只整理他们家10Gbps专用服务器,此外该系列所有服务器都受到高达 60Gbps(可升级到 100Gbps)的保护。...

香港2GB内存DIYVM2核(¥50月)香港沙田CN2云服务器

DiyVM 香港沙田机房,也是采用的CN2优化线路,目前也有入手且在使用中,我个人感觉如果中文业务需要用到的话虽然日本机房也是CN2,但是线路的稳定性不如香港机房,所以我们在这篇文章中亲测看看香港机房,然后对比之前看到的日本机房。香港机房的配置信息。CPU内存 硬盘带宽IP价格购买地址2核2G50G2M1¥50/月选择方案4核4G60G3M1¥100/月选择方案4核8G70G3M4¥200/月选择...

UCloud云服务器低至年59元

最近我们是不是在讨论较多的是关于K12教育的问题,培训机构由于资本的介入确实让家长更为焦虑,对于这样的整改我们还是很支持的。实际上,在云服务器市场中,我们也看到内卷和资本的力量,各大云服务商竞争也是相当激烈,更不用说个人和小公司服务商日子确实不好过。今天有看到UCloud发布的夏季促销活动,直接提前和双十一保价挂钩。这就是说,人家直接在暑假的时候就上线双十一的活动。早年的双十一活动会提前一周到十天...

extension_dir为你推荐
安徽汽车网在安徽那个市的二手车最好?百度商城百度积分有什么用?杰景新特我准备在网上买杰普特711RBES长笛,10700元,这价格合理吗?还有,这是纯银的吗,是国内组装的吗?336.com求那个网站 你懂得 1552517773@qq789se.comwuwu8.com这个站长是谁?www.zjs.com.cn我的信用卡已经申请成功了,显示正在寄卡,怎么查询寄卡信息?lcoc.toptop weenie 是什么?bbs2.99nets.com天堂1单机版到底怎么做机器蜘蛛尼尔机械纪元机械蜘蛛怎么过 机械蜘蛛打法攻略解析www.175qq.com求带名字的情侣网名!
windows主机 香港托管 外国域名 英语简历模板word 回程路由 debian源 个人域名 刀片服务器的优势 789电视网 中国电信测网速 南通服务器 电信托管 登陆空间 空间登陆首页 网购分享 学生服务器 广州服务器托管 美国服务器 hosts文件修改 西部数码主机 更多