electron_renderer_client.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // Copyright (c) 2013 GitHub, Inc.
  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.
  4. #ifndef ELECTRON_SHELL_RENDERER_ELECTRON_RENDERER_CLIENT_H_
  5. #define ELECTRON_SHELL_RENDERER_ELECTRON_RENDERER_CLIENT_H_
  6. #include <memory>
  7. #include <set>
  8. #include "shell/renderer/renderer_client_base.h"
  9. namespace node {
  10. class Environment;
  11. }
  12. namespace electron {
  13. class ElectronBindings;
  14. class NodeBindings;
  15. class ElectronRendererClient : public RendererClientBase {
  16. public:
  17. ElectronRendererClient();
  18. ~ElectronRendererClient() override;
  19. // disable copy
  20. ElectronRendererClient(const ElectronRendererClient&) = delete;
  21. ElectronRendererClient& operator=(const ElectronRendererClient&) = delete;
  22. // electron::RendererClientBase:
  23. void DidCreateScriptContext(v8::Handle<v8::Context> context,
  24. content::RenderFrame* render_frame) override;
  25. void WillReleaseScriptContext(v8::Handle<v8::Context> context,
  26. content::RenderFrame* render_frame) override;
  27. private:
  28. void UndeferLoad(content::RenderFrame* render_frame);
  29. // content::ContentRendererClient:
  30. void RenderFrameCreated(content::RenderFrame*) override;
  31. void RunScriptsAtDocumentStart(content::RenderFrame* render_frame) override;
  32. void RunScriptsAtDocumentEnd(content::RenderFrame* render_frame) override;
  33. void WorkerScriptReadyForEvaluationOnWorkerThread(
  34. v8::Local<v8::Context> context) override;
  35. void WillDestroyWorkerContextOnWorkerThread(
  36. v8::Local<v8::Context> context) override;
  37. node::Environment* GetEnvironment(content::RenderFrame* frame) const;
  38. // Whether the node integration has been initialized.
  39. bool node_integration_initialized_ = false;
  40. std::unique_ptr<NodeBindings> node_bindings_;
  41. std::unique_ptr<ElectronBindings> electron_bindings_;
  42. // The node::Environment::GetCurrent API does not return nullptr when it
  43. // is called for a context without node::Environment, so we have to keep
  44. // a book of the environments created.
  45. std::set<std::shared_ptr<node::Environment>> environments_;
  46. // Getting main script context from web frame would lazily initializes
  47. // its script context. Doing so in a web page without scripts would trigger
  48. // assertion, so we have to keep a book of injected web frames.
  49. std::set<content::RenderFrame*> injected_frames_;
  50. };
  51. } // namespace electron
  52. #endif // ELECTRON_SHELL_RENDERER_ELECTRON_RENDERER_CLIENT_H_