'use strict'; const {app,session}=require('electron'); const {createBrokerCertificatePins}=require('../../apps/browser/broker-certificate-pins.cjs'); app.disableHardwareAcceleration(); let initialized=false; process.once('disconnect',()=>app.exit(0)); process.on('message',async input=>{ if(input?.type==='stop'){app.exit(0);return;} if(initialized||input?.type!=='start')return;initialized=true; try{ app.setPath('userData',input.profile);await app.whenReady(); const partition=session.fromPartition('certificate-pin-native',{cache:false}); const pins=createBrokerCertificatePins({generation:'synthetic-generation',policyVersion:4,current:()=>true,authorizedAuthority:authority=>authority===input.leaf.authority}); pins.accept({...input.leaf,generation:'synthetic-generation',policyVersion:4}); partition.setCertificateVerifyProc((request,callback)=>pins.verify(request,callback)); await partition.setProxy({mode:'direct'}); const allowed=await partition.fetch(input.publicURL,{signal:AbortSignal.timeout(10000)}); const publicBody=await allowed.text();let denied=false; try{await partition.fetch(input.untrustedURL,{signal:AbortSignal.timeout(10000)});}catch{denied=true;} await partition.closeAllConnections();pins.revoke(); process.send({type:'proof',publicStatus:allowed.status,publicBody,untrustedRejected:denied,electron:process.versions.electron,chromium:process.versions.chrome}); }catch{process.send({type:'fault',reason:'certificate-native-proof-failed'});} });