atom_renderer_client.h 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. }
  14. namespace atom {
  15. class AtomBindings;
  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. private:
  29. enum NodeIntegration {
  30. ALL,
  31. EXCEPT_IFRAME,
  32. MANUAL_ENABLE_IFRAME,
  33. DISABLE,
  34. };
  35. // content::ContentRendererClient:
  36. void RenderThreadStarted() override;
  37. void RenderFrameCreated(content::RenderFrame*) override;
  38. void RenderViewCreated(content::RenderView*) override;
  39. void RunScriptsAtDocumentStart(content::RenderFrame* render_frame) override;
  40. void RunScriptsAtDocumentEnd(content::RenderFrame* render_frame) override;
  41. bool ShouldFork(blink::WebLocalFrame* frame,
  42. const GURL& url,
  43. const std::string& http_method,
  44. bool is_initial_navigation,
  45. bool is_server_redirect,
  46. bool* send_referrer) override;
  47. void DidInitializeWorkerContextOnWorkerThread(
  48. v8::Local<v8::Context> context) override;
  49. void WillDestroyWorkerContextOnWorkerThread(
  50. v8::Local<v8::Context> context) override;
  51. node::Environment* GetEnvironment(content::RenderFrame* frame) const;
  52. // Whether the node integration has been initialized.
  53. bool node_integration_initialized_ = false;
  54. std::unique_ptr<NodeBindings> node_bindings_;
  55. std::unique_ptr<AtomBindings> atom_bindings_;
  56. // The node::Environment::GetCurrent API does not return nullptr when it
  57. // is called for a context without node::Environment, so we have to keep
  58. // a book of the environments created.
  59. std::set<node::Environment*> environments_;
  60. // Getting main script context from web frame would lazily initializes
  61. // its script context. Doing so in a web page without scripts would trigger
  62. // assertion, so we have to keep a book of injected web frames.
  63. std::set<content::RenderFrame*> injected_frames_;
  64. DISALLOW_COPY_AND_ASSIGN(AtomRendererClient);
  65. };
  66. } // namespace atom
  67. #endif // ATOM_RENDERER_ATOM_RENDERER_CLIENT_H_