123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
- From: Jeremy Apthorp <[email protected]>
- 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
- index 5a733f2086ec10d3010da52a2758e1748d1178e1..d8c7ef2e3c03f5275c1ed58849ec892f811165ef 100644
- --- a/content/public/renderer/render_frame_observer.h
- +++ b/content/public/renderer/render_frame_observer.h
- @@ -128,6 +128,8 @@ class CONTENT_EXPORT RenderFrameObserver : public IPC::Listener,
- 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
- index dc954f7ddb115da018064437c485f91303ca9502..b04ffbc51f260e63c4217c060e87062eb301ead5 100644
- --- a/content/renderer/render_frame_impl.cc
- +++ b/content/renderer/render_frame_impl.cc
- @@ -4536,6 +4536,12 @@ void RenderFrameImpl::DidCreateScriptContext(v8::Local<v8::Context> context,
- 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
- index 4b9ab61b17e0fa277b00daebc71cd1cbc24ce5ce..77a5f522ba70780dedfc324abc98db6775b9eca5 100644
- --- a/content/renderer/render_frame_impl.h
- +++ b/content/renderer/render_frame_impl.h
- @@ -579,6 +579,8 @@ class CONTENT_EXPORT RenderFrameImpl
- blink::WebLocalFrameClient::LazyLoadBehavior lazy_load_behavior) override;
- 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
- index 883f83327a5b04ad56d82b91e1c7d8fa674324b1..2b7d8e13dcde8cd916c1d0a804883415b2b23a16 100644
- --- a/third_party/blink/public/web/web_local_frame_client.h
- +++ b/third_party/blink/public/web/web_local_frame_client.h
- @@ -570,6 +570,9 @@ class BLINK_EXPORT WebLocalFrameClient {
- 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
- index 50aa1b94ac6aab922f570d78f06096226d428c33..7af7ad0b7ed50dfc1ac061a915d3a99291afaec4 100644
- --- a/third_party/blink/renderer/bindings/core/v8/local_window_proxy.cc
- +++ b/third_party/blink/renderer/bindings/core/v8/local_window_proxy.cc
- @@ -188,6 +188,7 @@ void LocalWindowProxy::Initialize() {
- }
-
- InstallConditionalFeatures();
- + GetFrame()->Client()->DidInstallConditionalFeatures(context, world_->GetWorldId());
-
- if (World().IsMainWorld()) {
- GetFrame()->Loader().DispatchDidClearWindowObjectInMainWorld();
- diff --git a/third_party/blink/renderer/core/frame/local_frame_client.h b/third_party/blink/renderer/core/frame/local_frame_client.h
- index 6a581fd26b67097cf82d9cca9c11516db8c7ec04..8cdbacf5ce72faf0aaa034b36b824ce9c9235e31 100644
- --- a/third_party/blink/renderer/core/frame/local_frame_client.h
- +++ b/third_party/blink/renderer/core/frame/local_frame_client.h
- @@ -296,6 +296,8 @@ class CORE_EXPORT LocalFrameClient : public FrameClient {
-
- 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
- index 37698d003248e800d4312a2fa043b8124fc7848d..8d98d11a0f8da14a243e4eb0e0f1ac2a4eb56506 100644
- --- a/third_party/blink/renderer/core/frame/local_frame_client_impl.cc
- +++ b/third_party/blink/renderer/core/frame/local_frame_client_impl.cc
- @@ -272,6 +272,13 @@ void LocalFrameClientImpl::DidCreateScriptContext(
- 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) {
- 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
- index 92f875eafc84a46aff388a1164d45c6acee707c0..11845b9e14ccff6ef565f4bdc3af8924d6cb05a3 100644
- --- a/third_party/blink/renderer/core/frame/local_frame_client_impl.h
- +++ b/third_party/blink/renderer/core/frame/local_frame_client_impl.h
- @@ -77,6 +77,8 @@ class CORE_EXPORT LocalFrameClientImpl final : public LocalFrameClient {
-
- 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
- index 9f9e6c6188d1f108f584b1117a91fc3e9a5e38ab..05330ea84dc1555bcc9dd6fbbd63e97348b5664d 100644
- --- a/third_party/blink/renderer/core/loader/empty_clients.h
- +++ b/third_party/blink/renderer/core/loader/empty_clients.h
- @@ -343,6 +343,8 @@ class CORE_EXPORT EmptyLocalFrameClient : public LocalFrameClient {
-
- 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; }
|