add proper support for typed arrays in remote (#13055)

This commit is contained in:
Milan Burda 2018-05-24 14:05:46 +02:00 committed by Cheng Zhao
parent a798a40026
commit 4cfe5ecaa4
6 changed files with 174 additions and 22 deletions

View file

@ -1,13 +1,11 @@
'use strict'
// Note: Don't use destructuring assignment for `Buffer`, or we'll hit a
// browserify bug that makes the statement invalid, throwing an error in
// sandboxed renderer.
const Buffer = require('buffer').Buffer
const v8Util = process.atomBinding('v8_util')
const {ipcRenderer, isPromise, CallbacksRegistry} = require('electron')
const resolvePromise = Promise.resolve.bind(Promise)
const bufferUtils = require('../../common/buffer-utils')
const callbacksRegistry = new CallbacksRegistry()
const remoteObjectCache = v8Util.createIDWeakMap()
@ -30,10 +28,10 @@ function wrapArgs (args, visited = new Set()) {
}
visited.delete(value)
return meta
} else if (ArrayBuffer.isView(value)) {
} else if (bufferUtils.isBuffer(value)) {
return {
type: 'buffer',
value: Buffer.from(value)
value: bufferUtils.bufferToMeta(value)
}
} else if (value instanceof Date) {
return {
@ -202,7 +200,7 @@ function metaToValue (meta) {
const types = {
value: () => meta.value,
array: () => meta.members.map((member) => metaToValue(member)),
buffer: () => Buffer.from(meta.value),
buffer: () => bufferUtils.metaToBuffer(meta.value),
promise: () => resolvePromise({then: metaToValue(meta.then)}),
error: () => metaToPlainObject(meta),
date: () => new Date(meta.value),