The native window.open system has been better for quite a while now, and it resolves a lot of issues. We should make it the default and deprecate the old `BrowserWindowProxy`-based method.
shell/browser/web_contents_preferences.cc
IsEnabled(options::kNodeIntegrationInSubFrames);
#if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
  prefs->enable_spellcheck = IsEnabled(options::kSpellcheck);
#endif
  
  prefs->enable_plugins = IsEnabled(options::kPlugins);
  
  prefs->webview_tag = IsEnabled(options::kWebviewTag);
  
  prefs->enable_websql = IsEnabled(options::kEnableWebSQL);
  std::string v8_cache_options;
  if (GetAsString(&preference_, "v8CacheOptions", &v8_cache_options)) {
    if (v8_cache_options == "none") {
      prefs->v8_cache_options = blink::mojom::V8CacheOptions::kNone;
    } else if (v8_cache_options == "code") {
      prefs->v8_cache_options = blink::mojom::V8CacheOptions::kCode;
    } else if (v8_cache_options == "bypassHeatCheck") {
      prefs->v8_cache_options =
          blink::mojom::V8CacheOptions::kCodeWithoutHeatCheck;
    } else if (v8_cache_options == "bypassHeatCheckAndEagerCompile") {
      prefs->v8_cache_options =
          blink::mojom::V8CacheOptions::kFullCodeWithoutHeatCheck;
    } else {
      prefs->v8_cache_options = blink::mojom::V8CacheOptions::kDefault;
    }
  }
}
WEB_CONTENTS_USER_DATA_KEY_IMPL(WebContentsPreferences)
}