2020-02-07 09:45:13 -08:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
|
From: Jeremy Apthorp <nornagon@nornagon.net>
|
|
|
|
|
Date: Wed, 15 Jan 2020 16:35:18 -0800
|
|
|
|
|
Subject: add DidInstallConditionalFeatures
|
|
|
|
|
|
|
|
|
|
This adds a hook on script context creation _after conditional features
|
|
|
|
|
have been installed_. Electron uses this to run preload scripts and
|
|
|
|
|
various other initialization. This is necessary because at the time
|
|
|
|
|
DidCreateScriptContext is called, not all JS APIs are available in the
|
|
|
|
|
context, which can cause some preload scripts to trip.
|
|
|
|
|
|
|
|
|
|
diff --git a/content/public/renderer/render_frame_observer.h b/content/public/renderer/render_frame_observer.h
|
2025-10-14 11:25:30 -04:00
|
|
|
index 88a4c3167e2935a11fc50f4c147fef6b2253abc5..e9e88619c349d018abbf183b16339339c7fb29b6 100644
|
2020-02-07 09:45:13 -08:00
|
|
|
--- a/content/public/renderer/render_frame_observer.h
|
|
|
|
|
+++ b/content/public/renderer/render_frame_observer.h
|
2025-09-08 17:08:42 -04:00
|
|
|
@@ -139,6 +139,8 @@ class CONTENT_EXPORT RenderFrameObserver {
|
2020-02-07 09:45:13 -08:00
|
|
|
virtual void DidHandleOnloadEvents() {}
|
|
|
|
|
virtual void DidCreateScriptContext(v8::Local<v8::Context> context,
|
|
|
|
|
int32_t world_id) {}
|
|
|
|
|
+ virtual void DidInstallConditionalFeatures(v8::Local<v8::Context> context,
|
|
|
|
|
+ int32_t world_id) {}
|
|
|
|
|
virtual void WillReleaseScriptContext(v8::Local<v8::Context> context,
|
|
|
|
|
int32_t world_id) {}
|
|
|
|
|
virtual void DidClearWindowObject() {}
|
|
|
|
|
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
|
2025-10-14 11:25:30 -04:00
|
|
|
index 8603f912e83db5211f21701b2f08db07790ea4ba..4816cb344ee9474a663863a5c2668a112c299919 100644
|
2020-02-07 09:45:13 -08:00
|
|
|
--- a/content/renderer/render_frame_impl.cc
|
|
|
|
|
+++ b/content/renderer/render_frame_impl.cc
|
2025-10-14 11:25:30 -04:00
|
|
|
@@ -4700,6 +4700,12 @@ void RenderFrameImpl::DidCreateScriptContext(v8::Local<v8::Context> context,
|
2020-02-07 09:45:13 -08:00
|
|
|
observer.DidCreateScriptContext(context, world_id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
+void RenderFrameImpl::DidInstallConditionalFeatures(
|
|
|
|
|
+ v8::Local<v8::Context> context, int world_id) {
|
|
|
|
|
+ for (auto& observer : observers_)
|
|
|
|
|
+ observer.DidInstallConditionalFeatures(context, world_id);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
void RenderFrameImpl::WillReleaseScriptContext(v8::Local<v8::Context> context,
|
|
|
|
|
int world_id) {
|
|
|
|
|
for (auto& observer : observers_)
|
|
|
|
|
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
|
2025-10-14 11:25:30 -04:00
|
|
|
index 29c0e1703bb7e8e7bf53440a7f0cb7a6ceb4381b..155d2c3d9ce02fa02a655abf8bf7dbb1f83553f3 100644
|
2020-02-07 09:45:13 -08:00
|
|
|
--- a/content/renderer/render_frame_impl.h
|
|
|
|
|
+++ b/content/renderer/render_frame_impl.h
|
2025-09-08 17:08:42 -04:00
|
|
|
@@ -602,6 +602,8 @@ class CONTENT_EXPORT RenderFrameImpl
|
2023-01-05 21:35:34 -05:00
|
|
|
void DidObserveLayoutShift(double score, bool after_input_or_scroll) override;
|
2020-02-07 09:45:13 -08:00
|
|
|
void DidCreateScriptContext(v8::Local<v8::Context> context,
|
|
|
|
|
int world_id) override;
|
|
|
|
|
+ void DidInstallConditionalFeatures(v8::Local<v8::Context> context,
|
|
|
|
|
+ int world_id) override;
|
|
|
|
|
void WillReleaseScriptContext(v8::Local<v8::Context> context,
|
|
|
|
|
int world_id) override;
|
|
|
|
|
void DidChangeScrollOffset() override;
|
|
|
|
|
diff --git a/third_party/blink/public/web/web_local_frame_client.h b/third_party/blink/public/web/web_local_frame_client.h
|
2025-09-08 17:08:42 -04:00
|
|
|
index 101e727b3a97bc764315eb694dc3975f9a408f9c..52e8828d8fffaba8ab05436cb4d727595f18238a 100644
|
2020-02-07 09:45:13 -08:00
|
|
|
--- a/third_party/blink/public/web/web_local_frame_client.h
|
|
|
|
|
+++ b/third_party/blink/public/web/web_local_frame_client.h
|
2025-09-08 17:08:42 -04:00
|
|
|
@@ -661,6 +661,9 @@ class BLINK_EXPORT WebLocalFrameClient {
|
2020-02-07 09:45:13 -08:00
|
|
|
virtual void DidCreateScriptContext(v8::Local<v8::Context>,
|
|
|
|
|
int32_t world_id) {}
|
|
|
|
|
|
|
|
|
|
+ virtual void DidInstallConditionalFeatures(v8::Local<v8::Context>,
|
|
|
|
|
+ int32_t world_id) {}
|
|
|
|
|
+
|
|
|
|
|
// WebKit is about to release its reference to a v8 context for a frame.
|
|
|
|
|
virtual void WillReleaseScriptContext(v8::Local<v8::Context>,
|
|
|
|
|
int32_t world_id) {}
|
|
|
|
|
diff --git a/third_party/blink/renderer/bindings/core/v8/local_window_proxy.cc b/third_party/blink/renderer/bindings/core/v8/local_window_proxy.cc
|
2025-06-30 12:30:05 -04:00
|
|
|
index b963abd8c4bf6ffaea1930a8d1f647a8a8c266bc..2e8653654686f4fc775288f059ff27daa38e02d5 100644
|
2020-02-07 09:45:13 -08:00
|
|
|
--- a/third_party/blink/renderer/bindings/core/v8/local_window_proxy.cc
|
|
|
|
|
+++ b/third_party/blink/renderer/bindings/core/v8/local_window_proxy.cc
|
2025-06-30 12:30:05 -04:00
|
|
|
@@ -216,6 +216,7 @@ void LocalWindowProxy::Initialize() {
|
2020-02-07 09:45:13 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
InstallConditionalFeatures();
|
|
|
|
|
+ GetFrame()->Client()->DidInstallConditionalFeatures(context, world_->GetWorldId());
|
|
|
|
|
|
|
|
|
|
if (World().IsMainWorld()) {
|
2023-03-10 10:07:42 -06:00
|
|
|
probe::DidCreateMainWorldContext(GetFrame());
|
2020-10-27 17:33:04 -07:00
|
|
|
diff --git a/third_party/blink/renderer/core/frame/local_frame_client.h b/third_party/blink/renderer/core/frame/local_frame_client.h
|
2025-07-31 18:11:00 -04:00
|
|
|
index 36baf908d3be8aed44ff60b8de2cffe2eee15efe..8d73ddb12013ce195026b9f63050cf33f0bfb0fd 100644
|
2020-10-27 17:33:04 -07:00
|
|
|
--- a/third_party/blink/renderer/core/frame/local_frame_client.h
|
|
|
|
|
+++ b/third_party/blink/renderer/core/frame/local_frame_client.h
|
2025-07-31 18:11:00 -04:00
|
|
|
@@ -301,6 +301,8 @@ class CORE_EXPORT LocalFrameClient : public FrameClient {
|
2020-10-27 17:33:04 -07:00
|
|
|
|
|
|
|
|
virtual void DidCreateScriptContext(v8::Local<v8::Context>,
|
|
|
|
|
int32_t world_id) = 0;
|
|
|
|
|
+ virtual void DidInstallConditionalFeatures(v8::Local<v8::Context>,
|
|
|
|
|
+ int32_t world_id) = 0;
|
|
|
|
|
virtual void WillReleaseScriptContext(v8::Local<v8::Context>,
|
|
|
|
|
int32_t world_id) = 0;
|
|
|
|
|
virtual bool AllowScriptExtensions() = 0;
|
|
|
|
|
diff --git a/third_party/blink/renderer/core/frame/local_frame_client_impl.cc b/third_party/blink/renderer/core/frame/local_frame_client_impl.cc
|
2025-09-08 17:08:42 -04:00
|
|
|
index b02b60ff5f6650332c54ecc66f6fdb274b737aa7..1aacf6f66b543a4ede6ab5d885143dd4a0821e8a 100644
|
2020-10-27 17:33:04 -07:00
|
|
|
--- a/third_party/blink/renderer/core/frame/local_frame_client_impl.cc
|
|
|
|
|
+++ b/third_party/blink/renderer/core/frame/local_frame_client_impl.cc
|
2025-03-07 11:35:59 -06:00
|
|
|
@@ -295,6 +295,13 @@ void LocalFrameClientImpl::DidCreateScriptContext(
|
2020-02-07 09:45:13 -08:00
|
|
|
web_frame_->Client()->DidCreateScriptContext(context, world_id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
+void LocalFrameClientImpl::DidInstallConditionalFeatures(
|
|
|
|
|
+ v8::Local<v8::Context> context,
|
|
|
|
|
+ int32_t world_id) {
|
|
|
|
|
+ if (web_frame_->Client())
|
|
|
|
|
+ web_frame_->Client()->DidInstallConditionalFeatures(context, world_id);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
void LocalFrameClientImpl::WillReleaseScriptContext(
|
|
|
|
|
v8::Local<v8::Context> context,
|
|
|
|
|
int32_t world_id) {
|
2020-10-27 17:33:04 -07:00
|
|
|
diff --git a/third_party/blink/renderer/core/frame/local_frame_client_impl.h b/third_party/blink/renderer/core/frame/local_frame_client_impl.h
|
2025-09-08 17:08:42 -04:00
|
|
|
index fcc0928abbc454281b022e0451d993651ecba42f..16066fe34ee0335a0dabe00b6890e5844349c0b5 100644
|
2020-10-27 17:33:04 -07:00
|
|
|
--- a/third_party/blink/renderer/core/frame/local_frame_client_impl.h
|
|
|
|
|
+++ b/third_party/blink/renderer/core/frame/local_frame_client_impl.h
|
2025-07-31 18:11:00 -04:00
|
|
|
@@ -81,6 +81,8 @@ class CORE_EXPORT LocalFrameClientImpl final : public LocalFrameClient {
|
2020-02-07 09:45:13 -08:00
|
|
|
|
|
|
|
|
void DidCreateScriptContext(v8::Local<v8::Context>,
|
|
|
|
|
int32_t world_id) override;
|
|
|
|
|
+ void DidInstallConditionalFeatures(v8::Local<v8::Context>,
|
|
|
|
|
+ int32_t world_id) override;
|
|
|
|
|
void WillReleaseScriptContext(v8::Local<v8::Context>,
|
|
|
|
|
int32_t world_id) override;
|
|
|
|
|
|
|
|
|
|
diff --git a/third_party/blink/renderer/core/loader/empty_clients.h b/third_party/blink/renderer/core/loader/empty_clients.h
|
2025-06-30 12:30:05 -04:00
|
|
|
index 769b08ca081fe83c50babb2743fde6e8961b65ff..d8f3b11c98fd58baa9995762a29847b9fd760c84 100644
|
2020-02-07 09:45:13 -08:00
|
|
|
--- a/third_party/blink/renderer/core/loader/empty_clients.h
|
|
|
|
|
+++ b/third_party/blink/renderer/core/loader/empty_clients.h
|
2025-06-30 12:30:05 -04:00
|
|
|
@@ -420,6 +420,8 @@ class CORE_EXPORT EmptyLocalFrameClient : public LocalFrameClient {
|
2020-02-07 09:45:13 -08:00
|
|
|
|
|
|
|
|
void DidCreateScriptContext(v8::Local<v8::Context>,
|
|
|
|
|
int32_t world_id) override {}
|
|
|
|
|
+ void DidInstallConditionalFeatures(v8::Local<v8::Context>,
|
|
|
|
|
+ int32_t world_id) override {}
|
|
|
|
|
void WillReleaseScriptContext(v8::Local<v8::Context>,
|
|
|
|
|
int32_t world_id) override {}
|
|
|
|
|
bool AllowScriptExtensions() override { return false; }
|