atom_renderer_client.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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 ATOM_RENDERER_ATOM_RENDERER_CLIENT_H_
  5. #define ATOM_RENDERER_ATOM_RENDERER_CLIENT_H_
  6. #include <memory>
  7. #include <set>
  8. #include <string>
  9. #include <vector>
  10. #include "atom/renderer/renderer_client_base.h"
  11. namespace node {
  12. class Environment;
  13. } // namespace node
  14. namespace atom {
  15. class ElectronBindings;
  16. class NodeBindings;
  17. class AtomRendererClient : public RendererClientBase {
  18. public:
  19. AtomRendererClient();
  20. ~AtomRendererClient() override;
  21. // atom::RendererClientBase:
  22. void DidCreateScriptContext(v8::Handle<v8::Context> context,
  23. content::RenderFrame* render_frame) override;
  24. void WillReleaseScriptContext(v8::Handle<v8::Context> context,
  25. content::RenderFrame* render_frame) override;
  26. void SetupMainWorldOverrides(v8::Handle<v8::Context> context,
  27. content::RenderFrame* render_frame) override;
  28. void SetupExtensionWorldOverrides(v8::Handle<v8::Context> context,
  29. content::RenderFrame* render_frame,
  30. int world_id) override;
  31. private:
  32. // content::ContentRendererClient:
  33. void RenderFrameCreated(content::RenderFrame*) override;
  34. void RunScriptsAtDocumentStart(content::RenderFrame* render_frame) override;
  35. void RunScriptsAtDocumentEnd(content::RenderFrame* render_frame) override;
  36. bool ShouldFork(blink::WebLocalFrame* frame,
  37. const GURL& url,
  38. const std::string& http_method,
  39. bool is_initial_navigation,
  40. bool is_server_redirect) override;
  41. void DidInitializeWorkerContextOnWorkerThread(
  42. v8::Local<v8::Context> context) override;
  43. void WillDestroyWorkerContextOnWorkerThread(
  44. v8::Local<v8::Context> context) override;
  45. node::Environment* GetEnvironment(content::RenderFrame* frame) const;
  46. // Whether the node integration has been initialized.
  47. bool node_integration_initialized_ = false;
  48. std::unique_ptr<NodeBindings> node_bindings_;
  49. std::unique_ptr<ElectronBindings> electron_bindings_;
  50. // The node::Environment::GetCurrent API does not return nullptr when it
  51. // is called for a context without node::Environment, so we have to keep
  52. // a book of the environments created.
  53. std::set<node::Environment*> environments_;
  54. // Getting main script context from web frame would lazily initializes
  55. // its script context. Doing so in a web page without scripts would trigger
  56. // assertion, so we have to keep a book of injected web frames.
  57. std::set<content::RenderFrame*> injected_frames_;
  58. DISALLOW_COPY_AND_ASSIGN(AtomRendererClient);
  59. };
  60. } // namespace atom
  61. #endif // ATOM_RENDERER_ATOM_RENDERER_CLIENT_H_