精品学习资料---收集网络如有侵权请联系网
站删除
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);
精品学习资料---收集网络如有侵权请联系网
站删除
瓜云互联一直主打超高性价比的海外vps产品,主要以美国cn2、香港cn2线路为主,100M以内高宽带,非常适合个人使用、企业等等!安全防护体系 弹性灵活,能为提供简单、 高效、智能、快速、低成本的云防护,帮助个人、企业从实现网络攻击防御,同时也承诺产品24H支持退换,不喜欢可以找客服退现,诚信自由交易!官方网站:点击访问瓜云互联官网活动方案:打折优惠策略:新老用户购买服务器统统9折优惠预存返款活动...
如今我们很多朋友做网站都比较多的采用站群模式,但是用站群模式我们很多人都知道要拆分到不同IP段。比如我们会选择不同的服务商,不同的机房,至少和我们每个服务器的IP地址差异化。于是,我们很多朋友会选择美国多IP站群VPS商家的产品。美国站群VPS主机商和我们普通的云服务器、VPS还是有区别的,比如站群服务器的IP分布情况,配置技术难度,以及我们成本是比普通的高,商家选择要靠谱的。我们在选择美国多IP...
bgpto怎么样?bgp.to日本机房、新加坡机房的独立服务器在搞特价促销,日本独立服务器低至6.5折优惠,新加坡独立服务器低至7.5折优惠,所有优惠都是循环的,终身不涨价。服务器不限制流量,支持升级带宽,免费支持Linux和Windows server中文版(还包括Windows 10). 特色:自动部署,无需人工干预,用户可以在后台自己重装系统、重启、关机等操作!bgpto主打日本(东京、大阪...