atom_renderer_client.h 2.7 KB

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