From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Andy Locascio Date: Wed, 6 May 2020 16:37:54 -0700 Subject: allow in-process windows to have different web prefs Allow earlier access to newly created WebContents so that we can change WebPreferences of in-process child windows, rather than relying on process-level command line switches, as before. diff --git a/third_party/blink/common/web_preferences/web_preferences.cc b/third_party/blink/common/web_preferences/web_preferences.cc index effc18673a7f832352f427c9f4fb8b276fc28ad6..96b67b56002f88e0f4e2af9997aa6a78a1accd96 100644 --- a/third_party/blink/common/web_preferences/web_preferences.cc +++ b/third_party/blink/common/web_preferences/web_preferences.cc @@ -144,6 +144,20 @@ WebPreferences::WebPreferences() fake_no_alloc_direct_call_for_testing_enabled(false), v8_cache_options(blink::mojom::V8CacheOptions::kDefault), record_whole_document(false), + // Begin Electron-specific WebPreferences. + context_isolation(false), + is_webview(false), + hidden_page(false), + offscreen(false), + preload(base::FilePath::StringType()), + node_integration(false), + node_integration_in_worker(false), + node_integration_in_sub_frames(false), + enable_spellcheck(false), + enable_plugins(false), + enable_websql(false), + webview_tag(false), + // End Electron-specific WebPreferences. cookie_enabled(true), accelerated_video_decode_enabled(false), animation_policy( diff --git a/third_party/blink/common/web_preferences/web_preferences_mojom_traits.cc b/third_party/blink/common/web_preferences/web_preferences_mojom_traits.cc index a62792e0d484dc133f1df34a2c67dde838db203c..ef77424fc6778b047ac98700a5e18a3b6b161aba 100644 --- a/third_party/blink/common/web_preferences/web_preferences_mojom_traits.cc +++ b/third_party/blink/common/web_preferences/web_preferences_mojom_traits.cc @@ -22,6 +22,10 @@ bool StructTraitssans_serif_font_family_map) || !data.ReadCursiveFontFamilyMap(&out->cursive_font_family_map) || !data.ReadFantasyFontFamilyMap(&out->fantasy_font_family_map) || + // Begin Electron-specific WebPreferences. + !data.ReadPreloads(&out->preloads) || + !data.ReadPreload(&out->preload) || + // End Electron-specific WebPreferences. !data.ReadLazyFrameLoadingDistanceThresholdsPx( &out->lazy_frame_loading_distance_thresholds_px) || !data.ReadLazyImageLoadingDistanceThresholdsPx( @@ -150,6 +154,19 @@ bool StructTraitsv8_cache_options = data.v8_cache_options(); out->record_whole_document = data.record_whole_document(); + // Begin Electron-specific WebPreferences. + out->context_isolation = data.context_isolation(); + out->is_webview = data.is_webview(); + out->hidden_page = data.hidden_page(); + out->offscreen = data.offscreen(); + out->node_integration = data.node_integration(); + out->node_integration_in_worker = data.node_integration_in_worker(); + out->node_integration_in_sub_frames = data.node_integration_in_sub_frames(); + out->enable_spellcheck = data.enable_spellcheck(); + out->enable_plugins = data.enable_plugins(); + out->enable_websql = data.enable_websql(); + out->webview_tag = data.webview_tag(); + // End Electron-specific WebPreferences.s out->cookie_enabled = data.cookie_enabled(); out->accelerated_video_decode_enabled = data.accelerated_video_decode_enabled(); diff --git a/third_party/blink/public/common/web_preferences/web_preferences.h b/third_party/blink/public/common/web_preferences/web_preferences.h index 27d0bcc02a57b1a8f8f8e25df7af383d0e9a8c00..1cb920f4d0b01df012bc9b60eb3d9caa555d4e9e 100644 --- a/third_party/blink/public/common/web_preferences/web_preferences.h +++ b/third_party/blink/public/common/web_preferences/web_preferences.h @@ -10,6 +10,7 @@ #include #include "build/build_config.h" +#include "base/files/file_path.h" #include "net/nqe/effective_connection_type.h" #include "third_party/blink/public/common/common_export.h" #include "third_party/blink/public/mojom/css/preferred_color_scheme.mojom-shared.h" @@ -159,6 +160,22 @@ struct BLINK_COMMON_EXPORT WebPreferences { blink::mojom::V8CacheOptions v8_cache_options; bool record_whole_document; + // Begin Electron-specific WebPreferences. + std::vector preloads; + bool context_isolation; + bool is_webview; + bool hidden_page; + bool offscreen; + base::FilePath preload; + bool node_integration; + bool node_integration_in_worker; + bool node_integration_in_sub_frames; + bool enable_spellcheck; + bool enable_plugins; + bool enable_websql; + bool webview_tag; + // End Electron-specific WebPreferences. + // This flags corresponds to a Page's Settings' setCookieEnabled state. It // only controls whether or not the "document.cookie" field is properly // connected to the backing store, for instance if you wanted to be able to diff --git a/third_party/blink/public/common/web_preferences/web_preferences_mojom_traits.h b/third_party/blink/public/common/web_preferences/web_preferences_mojom_traits.h index 0f5ed102b071001acc566b258946b359d33f5d45..aac80b973e4622d2207b92fcd2537342a60c6909 100644 --- a/third_party/blink/public/common/web_preferences/web_preferences_mojom_traits.h +++ b/third_party/blink/public/common/web_preferences/web_preferences_mojom_traits.h @@ -6,6 +6,7 @@ #define THIRD_PARTY_BLINK_PUBLIC_COMMON_WEB_PREFERENCES_WEB_PREFERENCES_MOJOM_TRAITS_H_ #include "build/build_config.h" +#include "mojo/public/cpp/base/file_path_mojom_traits.h" #include "mojo/public/cpp/bindings/struct_traits.h" #include "net/nqe/effective_connection_type.h" #include "third_party/blink/public/common/common_export.h" @@ -436,6 +437,60 @@ struct BLINK_COMMON_EXPORT StructTraits& preloads(const blink::web_pref::WebPreferences& r) { + return r.preloads; + } + + static bool context_isolation(const blink::web_pref::WebPreferences& r) { + return r.context_isolation; + } + + static int is_webview(const blink::web_pref::WebPreferences& r) { + return r.is_webview; + } + + static bool hidden_page(const blink::web_pref::WebPreferences& r) { + return r.hidden_page; + } + + static bool offscreen(const blink::web_pref::WebPreferences& r) { + return r.offscreen; + } + + static const base::FilePath& preload(const blink::web_pref::WebPreferences& r) { + return r.preload; + } + + static bool node_integration(const blink::web_pref::WebPreferences& r) { + return r.node_integration; + } + + static bool node_integration_in_worker(const blink::web_pref::WebPreferences& r) { + return r.node_integration_in_worker; + } + + static bool node_integration_in_sub_frames(const blink::web_pref::WebPreferences& r) { + return r.node_integration_in_sub_frames; + } + + static bool enable_spellcheck(const blink::web_pref::WebPreferences& r) { + return r.enable_spellcheck; + } + + static bool enable_plugins(const blink::web_pref::WebPreferences& r) { + return r.enable_plugins; + } + + static bool enable_websql(const blink::web_pref::WebPreferences& r) { + return r.enable_websql; + } + + static bool webview_tag(const blink::web_pref::WebPreferences& r) { + return r.webview_tag; + } + // End Electron-specific WebPreferences. + static bool cookie_enabled(const blink::web_pref::WebPreferences& r) { return r.cookie_enabled; } diff --git a/third_party/blink/public/mojom/webpreferences/web_preferences.mojom b/third_party/blink/public/mojom/webpreferences/web_preferences.mojom index 4feef4089d59cef252ba73f49d4e490875f657ff..db92219655b824ca630edb6afe85d85e017a4a06 100644 --- a/third_party/blink/public/mojom/webpreferences/web_preferences.mojom +++ b/third_party/blink/public/mojom/webpreferences/web_preferences.mojom @@ -10,6 +10,7 @@ import "third_party/blink/public/mojom/v8_cache_options.mojom"; import "url/mojom/url.mojom"; import "url/mojom/origin.mojom"; import "mojo/public/mojom/base/string16.mojom"; +import "mojo/public/mojom/base/file_path.mojom"; enum PointerType { kPointerNone = 1, // 1 << 0 @@ -211,6 +212,22 @@ struct WebPreferences { V8CacheOptions v8_cache_options; bool record_whole_document; + // Begin Electron-specific WebPreferences. + array preloads; + bool context_isolation; + bool is_webview; + bool hidden_page; + bool offscreen; + mojo_base.mojom.FilePath preload; + bool node_integration; + bool node_integration_in_worker; + bool node_integration_in_sub_frames; + bool enable_spellcheck; + bool enable_plugins; + bool enable_websql; + bool webview_tag; + // End Electron-specific WebPreferences. + // This flags corresponds to a Page's Settings' setCookieEnabled state. It // only controls whether or not the "document.cookie" field is properly // connected to the backing store, for instance if you wanted to be able to