electron/shell/renderer/electron_renderer_client.h

71 lines
2.5 KiB
C
Raw Normal View History

// Copyright (c) 2013 GitHub, Inc.
2014-04-25 09:49:37 +00:00
// Use of this source code is governed by the MIT license that can be
2013-04-12 01:46:58 +00:00
// found in the LICENSE file.
#ifndef ELECTRON_SHELL_RENDERER_ELECTRON_RENDERER_CLIENT_H_
#define ELECTRON_SHELL_RENDERER_ELECTRON_RENDERER_CLIENT_H_
2013-04-12 01:46:58 +00:00
#include <memory>
#include "base/containers/flat_set.h"
#include "shell/renderer/renderer_client_base.h"
2013-04-12 01:46:58 +00:00
namespace node {
class Environment;
}
namespace electron {
2013-04-12 01:46:58 +00:00
class ElectronBindings;
class NodeBindings;
class ElectronRendererClient : public RendererClientBase {
2013-04-12 15:16:16 +00:00
public:
ElectronRendererClient();
~ElectronRendererClient() override;
2013-04-12 01:46:58 +00:00
// disable copy
ElectronRendererClient(const ElectronRendererClient&) = delete;
ElectronRendererClient& operator=(const ElectronRendererClient&) = delete;
// electron::RendererClientBase:
void DidCreateScriptContext(v8::Local<v8::Context> context,
2018-04-18 01:44:10 +00:00
content::RenderFrame* render_frame) override;
void WillReleaseScriptContext(v8::Local<v8::Context> context,
2018-04-18 01:44:10 +00:00
content::RenderFrame* render_frame) override;
2013-04-12 15:16:16 +00:00
private:
feat: I guess it's esm (#37535) * fix: allow ESM loads from within ASAR files * fix: ensure that ESM entry points finish loading before app ready * fix: allow loading ESM entrypoints via default_app * fix: allow ESM loading for renderer preloads * docs: document current known limitations of esm * chore: add patches to support blending esm handlers * refactor: use SetDefersLoading instead of JoinAppCode in renderers Blink has it's own event loop so pumping the uv loop in the renderer is not enough, luckily in blink we can suspend the loading of the frame while we do additional work. * chore: add patch to expose SetDefersLoading * fix: use fileURLToPath instead of pathname * chore: update per PR feedback * fix: fs.exists/existsSync should never throw * fix: convert path to file url before importing * fix: oops * fix: oops * Update docs/tutorial/esm-limitations.md Co-authored-by: Jeremy Rose <jeremya@chromium.org> * windows... * windows... * chore: update patches * spec: fix tests and document empty body edge case * Apply suggestions from code review Co-authored-by: Daniel Scalzi <d_scalzi@yahoo.com> Co-authored-by: Jeremy Rose <jeremya@chromium.org> * spec: add tests for esm * spec: windows * chore: update per PR feedback * chore: update patches * Update shell/common/node_bindings.h Co-authored-by: Jeremy Rose <jeremya@chromium.org> * chore: update patches * rebase * use cjs loader by default for preload scripts * chore: fix lint * chore: update patches * chore: update patches * chore: fix patches * build: debug depshash * ? * Revert "build: debug depshash" This reverts commit 0de82523fb93f475226356b37418ce4b69acdcdf. * chore: allow electron as builtin protocol in esm loader * Revert "Revert "build: debug depshash"" This reverts commit ff86b1243ca6d05c9b3b38e0a6d717fb380343a4. * chore: fix esm doc * chore: update node patches --------- Co-authored-by: Jeremy Rose <jeremya@chromium.org> Co-authored-by: electron-patch-conflict-fixer[bot] <83340002+electron-patch-conflict-fixer[bot]@users.noreply.github.com> Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com> Co-authored-by: Daniel Scalzi <d_scalzi@yahoo.com>
2023-08-31 00:38:07 +00:00
void UndeferLoad(content::RenderFrame* render_frame);
// content::ContentRendererClient:
2015-04-28 15:45:58 +00:00
void RenderFrameCreated(content::RenderFrame*) override;
void RunScriptsAtDocumentStart(content::RenderFrame* render_frame) override;
2016-05-27 02:07:06 +00:00
void RunScriptsAtDocumentEnd(content::RenderFrame* render_frame) override;
void WorkerScriptReadyForEvaluationOnWorkerThread(
v8::Local<v8::Context> context) override;
void WillDestroyWorkerContextOnWorkerThread(
v8::Local<v8::Context> context) override;
2015-12-29 08:41:44 +00:00
node::Environment* GetEnvironment(content::RenderFrame* frame) const;
// Whether the node integration has been initialized.
bool node_integration_initialized_ = false;
const std::unique_ptr<NodeBindings> node_bindings_;
const std::unique_ptr<ElectronBindings> electron_bindings_;
// The node::Environment::GetCurrent API does not return nullptr when it
// is called for a context without node::Environment, so we have to keep
// a book of the environments created.
base::flat_set<std::shared_ptr<node::Environment>> environments_;
// Getting main script context from web frame would lazily initializes
// its script context. Doing so in a web page without scripts would trigger
// assertion, so we have to keep a book of injected web frames.
base::flat_set<content::RenderFrame*> injected_frames_;
2013-04-12 01:46:58 +00:00
};
} // namespace electron
2013-04-12 01:46:58 +00:00
#endif // ELECTRON_SHELL_RENDERER_ELECTRON_RENDERER_CLIENT_H_