Milan Burda 1 year ago
parent
commit
ab2bb3f8a7

+ 11 - 0
shell/renderer/electron_renderer_client.cc

@@ -62,6 +62,17 @@ void ElectronRendererClient::RunScriptsAtDocumentEnd(
                           "document-end");
 }
 
+void ElectronRendererClient::RunScriptsAtDocumentIdle(
+    content::RenderFrame* render_frame) {
+  RendererClientBase::RunScriptsAtDocumentIdle(render_frame);
+  // Inform the document end phase.
+  v8::HandleScope handle_scope(v8::Isolate::GetCurrent());
+  node::Environment* env = GetEnvironment(render_frame);
+  if (env)
+    gin_helper::EmitEvent(env->isolate(), env->process_object(),
+                          "document-idle");
+}
+
 void ElectronRendererClient::UndeferLoad(content::RenderFrame* render_frame) {
   render_frame->GetWebFrame()->GetDocumentLoader()->SetDefersLoading(
       blink::LoaderFreezeMode::kNone);

+ 1 - 0
shell/renderer/electron_renderer_client.h

@@ -41,6 +41,7 @@ class ElectronRendererClient : public RendererClientBase {
   void RenderFrameCreated(content::RenderFrame*) override;
   void RunScriptsAtDocumentStart(content::RenderFrame* render_frame) override;
   void RunScriptsAtDocumentEnd(content::RenderFrame* render_frame) override;
+  void RunScriptsAtDocumentIdle(content::RenderFrame* render_frame) override;
   void WorkerScriptReadyForEvaluationOnWorkerThread(
       v8::Local<v8::Context> context) override;
   void WillDestroyWorkerContextOnWorkerThread(

+ 6 - 0
shell/renderer/electron_sandboxed_renderer_client.cc

@@ -168,6 +168,12 @@ void ElectronSandboxedRendererClient::RunScriptsAtDocumentEnd(
   EmitProcessEvent(render_frame, "document-end");
 }
 
+void ElectronSandboxedRendererClient::RunScriptsAtDocumentIdle(
+    content::RenderFrame* render_frame) {
+  RendererClientBase::RunScriptsAtDocumentIdle(render_frame);
+  EmitProcessEvent(render_frame, "document-idle");
+}
+
 void ElectronSandboxedRendererClient::DidCreateScriptContext(
     v8::Handle<v8::Context> context,
     content::RenderFrame* render_frame) {

+ 1 - 0
shell/renderer/electron_sandboxed_renderer_client.h

@@ -42,6 +42,7 @@ class ElectronSandboxedRendererClient : public RendererClientBase {
   void RenderFrameCreated(content::RenderFrame*) override;
   void RunScriptsAtDocumentStart(content::RenderFrame* render_frame) override;
   void RunScriptsAtDocumentEnd(content::RenderFrame* render_frame) override;
+  void RunScriptsAtDocumentIdle(content::RenderFrame* render_frame) override;
 
  private:
   void EmitProcessEvent(content::RenderFrame* render_frame,

+ 1 - 0
typings/internal-ambient.d.ts

@@ -248,6 +248,7 @@ declare namespace NodeJS {
     // Additional events
     once(event: 'document-start', listener: () => any): this;
     once(event: 'document-end', listener: () => any): this;
+    once(event: 'document-idle', listener: () => any): this;
 
     // Additional properties
     _firstFileName?: string;