function (child, parent, visited) {
  // Check for circular reference.
  if (visited == null) visited = new Set()
  if (visited.has(parent)) return

  visited.add(parent)
  for (const key in parent) {
    if (key === 'isBrowserView') continue
    if (!hasProp.call(parent, key)) continue
    if (key in child && key !== 'webPreferences') continue

    const value = parent[key]
    if (typeof value === 'object') {
      child[key] = mergeOptions(child[key] || {}, value, visited)
    } else {
      child[key] = value
    }
  }
  visited.delete(parent)

  return child
}
function (child, parent, visited) {
  // Check for circular reference.
  if (visited == null) visited = new Set()
  if (visited.has(parent)) return

  visited.add(parent)
  for (const key in parent) {
    if (key === 'isBrowserView') continue
    if (!hasProp.call(parent, key)) continue
    if (key in child && key !== 'webPreferences') continue

    const value = parent[key]
    if (typeof value === 'object') {
      child[key] = mergeOptions(child[key] || {}, value, visited)
    } else {
      child[key] = value
    }
  }
  visited.delete(parent)

  return child
}
function ( child , parent , visited ) { // Check for circular reference. if ( visited == null ) visited = new Set ( ) if ( visited . has ( parent ) ) return visited . add ( parent ) for ( const key in parent ) { if ( key === 'isBrowserView' ) continue if ( ! hasProp . call ( parent , key ) ) continue if ( key in child && key !== 'webPreferences' ) continue const value = parent [ key ] if ( typeof value === 'object' ) { child [ key ] = mergeOptions ( child [ key ] || { } , value , visited ) } else { child [ key ] = value } } visited . delete ( parent ) return child }
Copy attribute of |parent| to |child| if it is not defined in |child|.
Copy attribute of |parent| to |child| if it is not defined in |child| .
Merge child with parent