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

2022-05-10 12:48:53 浏览数 (1)

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

代码语言:javascript复制
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 

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

0 人点赞