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