renderer_client_base.h 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  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 "printing/buildflags/buildflags.h"
  12. #include "shell/common/gin_helper/dictionary.h"
  13. // In SHARED_INTERMEDIATE_DIR.
  14. #include "widevine_cdm_version.h" // NOLINT(build/include_directory)
  15. #if defined(WIDEVINE_CDM_AVAILABLE)
  16. #include "chrome/renderer/media/chrome_key_systems_provider.h" // nogncheck
  17. #endif
  18. #if BUILDFLAG(ENABLE_PDF_VIEWER)
  19. #include "chrome/renderer/pepper/chrome_pdf_print_client.h" // nogncheck
  20. #endif // BUILDFLAG(ENABLE_PDF_VIEWER)
  21. #if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
  22. #include "services/service_manager/public/cpp/binder_registry.h"
  23. #include "services/service_manager/public/cpp/local_interface_provider.h"
  24. class SpellCheck;
  25. #endif
  26. namespace blink {
  27. class WebLocalFrame;
  28. }
  29. #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
  30. namespace extensions {
  31. class ExtensionsClient;
  32. }
  33. #endif
  34. namespace electron {
  35. #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
  36. class ElectronExtensionsRendererClient;
  37. #endif
  38. class RendererClientBase : public content::ContentRendererClient
  39. #if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
  40. ,
  41. public service_manager::LocalInterfaceProvider
  42. #endif
  43. {
  44. public:
  45. RendererClientBase();
  46. ~RendererClientBase() override;
  47. static RendererClientBase* Get();
  48. #if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
  49. // service_manager::LocalInterfaceProvider implementation.
  50. void GetInterface(const std::string& name,
  51. mojo::ScopedMessagePipeHandle interface_pipe) override;
  52. #endif
  53. virtual void DidCreateScriptContext(v8::Handle<v8::Context> context,
  54. content::RenderFrame* render_frame) = 0;
  55. virtual void WillReleaseScriptContext(v8::Handle<v8::Context> context,
  56. content::RenderFrame* render_frame) = 0;
  57. virtual void DidClearWindowObject(content::RenderFrame* render_frame);
  58. virtual void SetupMainWorldOverrides(v8::Handle<v8::Context> context,
  59. content::RenderFrame* render_frame);
  60. std::unique_ptr<blink::WebPrescientNetworking> CreatePrescientNetworking(
  61. content::RenderFrame* render_frame) override;
  62. // Get the context that the Electron API is running in.
  63. v8::Local<v8::Context> GetContext(blink::WebLocalFrame* frame,
  64. v8::Isolate* isolate) const;
  65. static void AllowGuestViewElementDefinition(
  66. v8::Isolate* isolate,
  67. v8::Local<v8::Object> context,
  68. v8::Local<v8::Function> register_cb);
  69. bool IsWebViewFrame(v8::Handle<v8::Context> context,
  70. content::RenderFrame* render_frame) const;
  71. #if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
  72. SpellCheck* GetSpellCheck() { return spellcheck_.get(); }
  73. #endif
  74. protected:
  75. void BindProcess(v8::Isolate* isolate,
  76. gin_helper::Dictionary* process,
  77. content::RenderFrame* render_frame);
  78. // content::ContentRendererClient:
  79. void RenderThreadStarted() override;
  80. void ExposeInterfacesToBrowser(mojo::BinderMap* binders) override;
  81. void RenderFrameCreated(content::RenderFrame*) override;
  82. bool OverrideCreatePlugin(content::RenderFrame* render_frame,
  83. const blink::WebPluginParams& params,
  84. blink::WebPlugin** plugin) override;
  85. void AddSupportedKeySystems(
  86. std::vector<std::unique_ptr<::media::KeySystemProperties>>* key_systems)
  87. override;
  88. bool IsKeySystemsUpdateNeeded() override;
  89. void DidSetUserAgent(const std::string& user_agent) override;
  90. bool IsPluginHandledExternally(content::RenderFrame* render_frame,
  91. const blink::WebElement& plugin_element,
  92. const GURL& original_url,
  93. const std::string& mime_type) override;
  94. bool IsOriginIsolatedPepperPlugin(const base::FilePath& plugin_path) override;
  95. void RunScriptsAtDocumentStart(content::RenderFrame* render_frame) override;
  96. void RunScriptsAtDocumentEnd(content::RenderFrame* render_frame) override;
  97. void RunScriptsAtDocumentIdle(content::RenderFrame* render_frame) override;
  98. bool AllowScriptExtensionForServiceWorker(
  99. const url::Origin& script_origin) override;
  100. void DidInitializeServiceWorkerContextOnWorkerThread(
  101. blink::WebServiceWorkerContextProxy* context_proxy,
  102. const GURL& service_worker_scope,
  103. const GURL& script_url) override;
  104. void WillEvaluateServiceWorkerOnWorkerThread(
  105. blink::WebServiceWorkerContextProxy* context_proxy,
  106. v8::Local<v8::Context> v8_context,
  107. int64_t service_worker_version_id,
  108. const GURL& service_worker_scope,
  109. const GURL& script_url) override;
  110. void DidStartServiceWorkerContextOnWorkerThread(
  111. int64_t service_worker_version_id,
  112. const GURL& service_worker_scope,
  113. const GURL& script_url) override;
  114. void WillDestroyServiceWorkerContextOnWorkerThread(
  115. v8::Local<v8::Context> context,
  116. int64_t service_worker_version_id,
  117. const GURL& service_worker_scope,
  118. const GURL& script_url) override;
  119. protected:
  120. #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
  121. // app_shell embedders may need custom extensions client interfaces.
  122. // This class takes ownership of the returned object.
  123. virtual extensions::ExtensionsClient* CreateExtensionsClient();
  124. #endif
  125. private:
  126. #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
  127. std::unique_ptr<extensions::ExtensionsClient> extensions_client_;
  128. std::unique_ptr<ElectronExtensionsRendererClient> extensions_renderer_client_;
  129. #endif
  130. #if defined(WIDEVINE_CDM_AVAILABLE)
  131. ChromeKeySystemsProvider key_systems_provider_;
  132. #endif
  133. std::string renderer_client_id_;
  134. // An increasing ID used for identifying an V8 context in this process.
  135. int64_t next_context_id_ = 0;
  136. #if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
  137. std::unique_ptr<SpellCheck> spellcheck_;
  138. #endif
  139. #if BUILDFLAG(ENABLE_PDF_VIEWER)
  140. std::unique_ptr<ChromePDFPrintClient> pdf_print_client_;
  141. #endif
  142. };
  143. } // namespace electron
  144. #endif // SHELL_RENDERER_RENDERER_CLIENT_BASE_H_