renderer_client_base.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. // Copyright (c) 2017 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 SHELL_RENDERER_RENDERER_CLIENT_BASE_H_
  5. #define SHELL_RENDERER_RENDERER_CLIENT_BASE_H_
  6. #include <memory>
  7. #include <string>
  8. #include <vector>
  9. #include "content/public/renderer/content_renderer_client.h"
  10. #include "electron/buildflags/buildflags.h"
  11. #include "third_party/blink/public/web/web_local_frame.h"
  12. // In SHARED_INTERMEDIATE_DIR.
  13. #include "widevine_cdm_version.h" // NOLINT(build/include_directory)
  14. #if defined(WIDEVINE_CDM_AVAILABLE)
  15. #include "chrome/renderer/media/chrome_key_systems_provider.h" // nogncheck
  16. #endif
  17. namespace network_hints {
  18. class PrescientNetworkingDispatcher;
  19. }
  20. #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
  21. namespace extensions {
  22. class ExtensionsClient;
  23. }
  24. #endif
  25. namespace electron {
  26. #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
  27. class AtomExtensionsRendererClient;
  28. #endif
  29. class RendererClientBase : public content::ContentRendererClient {
  30. public:
  31. RendererClientBase();
  32. ~RendererClientBase() override;
  33. virtual void DidCreateScriptContext(v8::Handle<v8::Context> context,
  34. content::RenderFrame* render_frame);
  35. virtual void WillReleaseScriptContext(v8::Handle<v8::Context> context,
  36. content::RenderFrame* render_frame) = 0;
  37. virtual void DidClearWindowObject(content::RenderFrame* render_frame);
  38. virtual void SetupMainWorldOverrides(v8::Handle<v8::Context> context,
  39. content::RenderFrame* render_frame) = 0;
  40. virtual void SetupExtensionWorldOverrides(v8::Handle<v8::Context> context,
  41. content::RenderFrame* render_frame,
  42. int world_id) = 0;
  43. blink::WebPrescientNetworking* GetPrescientNetworking() override;
  44. bool isolated_world() const { return isolated_world_; }
  45. // Get the context that the Electron API is running in.
  46. v8::Local<v8::Context> GetContext(blink::WebLocalFrame* frame,
  47. v8::Isolate* isolate) const;
  48. // Executes a given v8 Script
  49. static v8::Local<v8::Value> RunScript(v8::Local<v8::Context> context,
  50. v8::Local<v8::String> source);
  51. // v8Util.getHiddenValue(window.frameElement, 'internal')
  52. bool IsWebViewFrame(v8::Handle<v8::Context> context,
  53. content::RenderFrame* render_frame) const;
  54. protected:
  55. void AddRenderBindings(v8::Isolate* isolate,
  56. v8::Local<v8::Object> binding_object);
  57. // content::ContentRendererClient:
  58. void RenderThreadStarted() override;
  59. void RenderFrameCreated(content::RenderFrame*) override;
  60. bool OverrideCreatePlugin(content::RenderFrame* render_frame,
  61. const blink::WebPluginParams& params,
  62. blink::WebPlugin** plugin) override;
  63. void AddSupportedKeySystems(
  64. std::vector<std::unique_ptr<::media::KeySystemProperties>>* key_systems)
  65. override;
  66. bool IsKeySystemsUpdateNeeded() override;
  67. void DidSetUserAgent(const std::string& user_agent) override;
  68. void RunScriptsAtDocumentStart(content::RenderFrame* render_frame) override;
  69. void RunScriptsAtDocumentEnd(content::RenderFrame* render_frame) override;
  70. void RunScriptsAtDocumentIdle(content::RenderFrame* render_frame) override;
  71. protected:
  72. #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
  73. // app_shell embedders may need custom extensions client interfaces.
  74. // This class takes ownership of the returned object.
  75. virtual extensions::ExtensionsClient* CreateExtensionsClient();
  76. #endif
  77. private:
  78. std::unique_ptr<network_hints::PrescientNetworkingDispatcher>
  79. prescient_networking_dispatcher_;
  80. #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
  81. std::unique_ptr<extensions::ExtensionsClient> extensions_client_;
  82. std::unique_ptr<AtomExtensionsRendererClient> extensions_renderer_client_;
  83. #endif
  84. #if defined(WIDEVINE_CDM_AVAILABLE)
  85. ChromeKeySystemsProvider key_systems_provider_;
  86. #endif
  87. bool isolated_world_;
  88. std::string renderer_client_id_;
  89. // An increasing ID used for indentifying an V8 context in this process.
  90. int64_t next_context_id_ = 0;
  91. };
  92. } // namespace electron
  93. #endif // SHELL_RENDERER_RENDERER_CLIENT_BASE_H_