feat: add webContents.setWindowOpenHandler API (#24517)
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
This commit is contained in:
parent
6b222a2d8a
commit
0b85fdf26c
56 changed files with 2087 additions and 885 deletions
|
@ -20,6 +20,7 @@
|
|||
#include "shell/common/api/api.mojom.h"
|
||||
#include "shell/common/gin_converters/blink_converter.h"
|
||||
#include "shell/common/gin_converters/callback_converter.h"
|
||||
#include "shell/common/gin_converters/file_path_converter.h"
|
||||
#include "shell/common/gin_helper/dictionary.h"
|
||||
#include "shell/common/gin_helper/error_thrower.h"
|
||||
#include "shell/common/gin_helper/promise.h"
|
||||
|
@ -29,6 +30,7 @@
|
|||
#include "shell/renderer/electron_renderer_client.h"
|
||||
#include "third_party/blink/public/common/page/page_zoom.h"
|
||||
#include "third_party/blink/public/common/web_cache/web_cache_resource_type_stats.h"
|
||||
#include "third_party/blink/public/common/web_preferences/web_preferences.h"
|
||||
#include "third_party/blink/public/platform/web_cache.h"
|
||||
#include "third_party/blink/public/platform/web_isolated_world_info.h"
|
||||
#include "third_party/blink/public/web/web_custom_element.h"
|
||||
|
@ -395,6 +397,65 @@ double GetZoomFactor(gin_helper::ErrorThrower thrower,
|
|||
return blink::PageZoomLevelToZoomFactor(zoom_level);
|
||||
}
|
||||
|
||||
v8::Local<v8::Value> GetWebPreference(v8::Isolate* isolate,
|
||||
v8::Local<v8::Value> window,
|
||||
std::string pref_name) {
|
||||
content::RenderFrame* render_frame = GetRenderFrame(window);
|
||||
const auto& prefs = render_frame->GetBlinkPreferences();
|
||||
|
||||
if (pref_name == options::kPreloadScripts) {
|
||||
return gin::ConvertToV8(isolate, prefs.preloads);
|
||||
} else if (pref_name == options::kDisableElectronSiteInstanceOverrides) {
|
||||
return gin::ConvertToV8(isolate,
|
||||
prefs.disable_electron_site_instance_overrides);
|
||||
} else if (pref_name == options::kBackgroundColor) {
|
||||
return gin::ConvertToV8(isolate, prefs.background_color);
|
||||
} else if (pref_name == options::kOpenerID) {
|
||||
// NOTE: openerId is internal-only.
|
||||
return gin::ConvertToV8(isolate, prefs.opener_id);
|
||||
} else if (pref_name == options::kContextIsolation) {
|
||||
return gin::ConvertToV8(isolate, prefs.context_isolation);
|
||||
#if BUILDFLAG(ENABLE_REMOTE_MODULE)
|
||||
} else if (pref_name == options::kEnableRemoteModule) {
|
||||
return gin::ConvertToV8(isolate, prefs.enable_remote_module);
|
||||
#endif
|
||||
} else if (pref_name == options::kWorldSafeExecuteJavaScript) {
|
||||
return gin::ConvertToV8(isolate, prefs.world_safe_execute_javascript);
|
||||
} else if (pref_name == options::kGuestInstanceID) {
|
||||
// NOTE: guestInstanceId is internal-only.
|
||||
return gin::ConvertToV8(isolate, prefs.guest_instance_id);
|
||||
} else if (pref_name == options::kHiddenPage) {
|
||||
// NOTE: hiddenPage is internal-only.
|
||||
return gin::ConvertToV8(isolate, prefs.hidden_page);
|
||||
} else if (pref_name == options::kOffscreen) {
|
||||
return gin::ConvertToV8(isolate, prefs.offscreen);
|
||||
} else if (pref_name == options::kPreloadScript) {
|
||||
return gin::ConvertToV8(isolate, prefs.preload.value());
|
||||
} else if (pref_name == options::kNativeWindowOpen) {
|
||||
return gin::ConvertToV8(isolate, prefs.native_window_open);
|
||||
} else if (pref_name == options::kNodeIntegration) {
|
||||
return gin::ConvertToV8(isolate, prefs.node_integration);
|
||||
} else if (pref_name == options::kNodeIntegrationInWorker) {
|
||||
return gin::ConvertToV8(isolate, prefs.node_integration_in_worker);
|
||||
} else if (pref_name == options::kEnableNodeLeakageInRenderers) {
|
||||
// NOTE: enableNodeLeakageInRenderers is internal-only.
|
||||
return gin::ConvertToV8(isolate, prefs.node_leakage_in_renderers);
|
||||
} else if (pref_name == options::kNodeIntegrationInSubFrames) {
|
||||
return gin::ConvertToV8(isolate, true);
|
||||
#if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
|
||||
} else if (pref_name == options::kSpellcheck) {
|
||||
return gin::ConvertToV8(isolate, prefs.enable_spellcheck);
|
||||
#endif
|
||||
} else if (pref_name == options::kPlugins) {
|
||||
return gin::ConvertToV8(isolate, prefs.enable_plugins);
|
||||
} else if (pref_name == options::kEnableWebSQL) {
|
||||
return gin::ConvertToV8(isolate, prefs.enable_websql);
|
||||
} else if (pref_name == options::kWebviewTag) {
|
||||
return gin::ConvertToV8(isolate, prefs.webview_tag);
|
||||
}
|
||||
return v8::Null(isolate);
|
||||
}
|
||||
|
||||
void SetVisualZoomLevelLimits(gin_helper::ErrorThrower thrower,
|
||||
v8::Local<v8::Value> window,
|
||||
double min_level,
|
||||
|
@ -574,13 +635,13 @@ v8::Local<v8::Promise> ExecuteJavaScript(gin_helper::Arguments* args,
|
|||
ScriptExecutionCallback::CompletionCallback completion_callback;
|
||||
args->GetNext(&completion_callback);
|
||||
|
||||
bool world_safe_exec_js = base::CommandLine::ForCurrentProcess()->HasSwitch(
|
||||
switches::kWorldSafeExecuteJavaScript);
|
||||
auto& prefs = render_frame->GetBlinkPreferences();
|
||||
|
||||
render_frame->GetWebFrame()->RequestExecuteScriptAndReturnValue(
|
||||
blink::WebScriptSource(blink::WebString::FromUTF16(code)),
|
||||
has_user_gesture,
|
||||
new ScriptExecutionCallback(std::move(promise), world_safe_exec_js,
|
||||
new ScriptExecutionCallback(std::move(promise),
|
||||
prefs.world_safe_execute_javascript,
|
||||
std::move(completion_callback)));
|
||||
|
||||
return handle;
|
||||
|
@ -640,8 +701,7 @@ v8::Local<v8::Promise> ExecuteJavaScriptInIsolatedWorld(
|
|||
blink::WebURL(GURL(url)), start_line));
|
||||
}
|
||||
|
||||
bool world_safe_exec_js = base::CommandLine::ForCurrentProcess()->HasSwitch(
|
||||
switches::kWorldSafeExecuteJavaScript);
|
||||
auto& prefs = render_frame->GetBlinkPreferences();
|
||||
|
||||
// Debugging tip: if you see a crash stack trace beginning from this call,
|
||||
// then it is very likely that some exception happened when executing the
|
||||
|
@ -649,7 +709,8 @@ v8::Local<v8::Promise> ExecuteJavaScriptInIsolatedWorld(
|
|||
render_frame->GetWebFrame()->RequestExecuteScriptInIsolatedWorld(
|
||||
world_id, &sources.front(), sources.size(), has_user_gesture,
|
||||
scriptExecutionType,
|
||||
new ScriptExecutionCallback(std::move(promise), world_safe_exec_js,
|
||||
new ScriptExecutionCallback(std::move(promise),
|
||||
prefs.world_safe_execute_javascript,
|
||||
std::move(completion_callback)));
|
||||
|
||||
return handle;
|
||||
|
@ -852,6 +913,7 @@ void Initialize(v8::Local<v8::Object> exports,
|
|||
dict.SetMethod("allowGuestViewElementDefinition",
|
||||
&AllowGuestViewElementDefinition);
|
||||
dict.SetMethod("getWebFrameId", &GetWebFrameId);
|
||||
dict.SetMethod("getWebPreference", &GetWebPreference);
|
||||
dict.SetMethod("setSpellCheckProvider", &SetSpellCheckProvider);
|
||||
dict.SetMethod("insertText", &InsertText);
|
||||
dict.SetMethod("insertCSS", &InsertCSS);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue