2022.2.20日报:过年这几周研究了electron和linux

1,electron方面,重点研究了那个node隔离机制。其实就是

const mainWindow = new BrowserWindow({
  webPreferences: {
    contextIsolation: true
  }
})

这个其实就是利用chromium里很早很早就有的context隔离机制。

早在chromium30几版本的时候,chromium为了让extension可以操作dom,又不希望污染dom的context,就搞出了隔离机制。

具体来说,其实非常简单。就是electron::ElectronRenderFrameObserver::CreateIsolatedWorldContext -》

blink::WebLocalFrameImpl::ExecuteScriptInIsolatedWorld。

主要就是这个blink::WebLocalFrameImpl::ExecuteScriptInIsolatedWorld,如果参数isolate不为0,则会创建一个新的lsolate。值得注意的是,这个lsolate不是v8::lsolate。当时我被这个搞混淆了。

另外,这个electron::ElectronRenderFrameObserver::CreateIsolatedWorldContext一般都是在

LocalWindowProxy::Initialize里执行的,而调用了上面那个blink::WebLocalFrameImpl::ExecuteScriptInIsolatedWorld,也同样会进入LocalWindowProxy::Initialize。

这就导致LocalWindowProxy::Initialize这个函数可能会重入。

另外,LocalWindowProxy::Initialize就算不调用CreateIsolatedWorldContext,也会被调用两次(如果调用了CreateIsolatedWorldContext,就会不诶调用4次)。猜测可能第一次是初始化extension。

2,修复了https://e24f54ae35274e2b99bb4ac9302a52c7-paimai.dspaipai.com/login?type=individual icon-default.png?t=M1H3https://e24f54ae35274e2b99bb4ac9302a52c7-paimai.dspaipai.com/login?type=individual的崩溃。这是blob机制在miniblink没实现完整导致的。这个网页的send xhr blob类型,会获取一个大的blob,里面包含2张图片。这网页会切分这个blob,分离出两张图片出来用。miniblink没处理好这种情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值