renderer_client_base.h 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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 ATOM_RENDERER_RENDERER_CLIENT_BASE_H_
  5. #define ATOM_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 "third_party/blink/public/web/web_local_frame.h"
  11. // In SHARED_INTERMEDIATE_DIR.
  12. #include "widevine_cdm_version.h" // NOLINT(build/include_directory)
  13. #if defined(WIDEVINE_CDM_AVAILABLE)
  14. #include "chrome/renderer/media/chrome_key_systems_provider.h" // nogncheck
  15. #endif
  16. namespace atom {
  17. class PreferencesManager;
  18. class RendererClientBase : public content::ContentRendererClient {
  19. public:
  20. RendererClientBase();
  21. ~RendererClientBase() override;
  22. virtual void DidCreateScriptContext(v8::Handle<v8::Context> context,
  23. content::RenderFrame* render_frame);
  24. virtual void WillReleaseScriptContext(v8::Handle<v8::Context> context,
  25. content::RenderFrame* render_frame) = 0;
  26. virtual void DidClearWindowObject(content::RenderFrame* render_frame);
  27. virtual void SetupMainWorldOverrides(v8::Handle<v8::Context> context,
  28. content::RenderFrame* render_frame) = 0;
  29. virtual void SetupExtensionWorldOverrides(v8::Handle<v8::Context> context,
  30. content::RenderFrame* render_frame,
  31. int world_id) = 0;
  32. bool isolated_world() const { return isolated_world_; }
  33. // Get the context that the Electron API is running in.
  34. v8::Local<v8::Context> GetContext(blink::WebLocalFrame* frame,
  35. v8::Isolate* isolate) const;
  36. // Executes a given v8 Script
  37. static v8::Local<v8::Value> RunScript(v8::Local<v8::Context> context,
  38. v8::Local<v8::String> source);
  39. // v8Util.getHiddenValue(window.frameElement, 'internal')
  40. bool IsWebViewFrame(v8::Handle<v8::Context> context,
  41. content::RenderFrame* render_frame) const;
  42. protected:
  43. void AddRenderBindings(v8::Isolate* isolate,
  44. v8::Local<v8::Object> binding_object);
  45. // content::ContentRendererClient:
  46. void RenderThreadStarted() override;
  47. void RenderFrameCreated(content::RenderFrame*) override;
  48. std::unique_ptr<blink::WebSpeechSynthesizer> OverrideSpeechSynthesizer(
  49. blink::WebSpeechSynthesizerClient* client) override;
  50. bool OverrideCreatePlugin(content::RenderFrame* render_frame,
  51. const blink::WebPluginParams& params,
  52. blink::WebPlugin** plugin) override;
  53. void AddSupportedKeySystems(
  54. std::vector<std::unique_ptr<::media::KeySystemProperties>>* key_systems)
  55. override;
  56. bool IsKeySystemsUpdateNeeded() override;
  57. void DidSetUserAgent(const std::string& user_agent) override;
  58. private:
  59. std::unique_ptr<PreferencesManager> preferences_manager_;
  60. #if defined(WIDEVINE_CDM_AVAILABLE)
  61. ChromeKeySystemsProvider key_systems_provider_;
  62. #endif
  63. bool isolated_world_;
  64. std::string renderer_client_id_;
  65. // An increasing ID used for indentifying an V8 context in this process.
  66. int64_t next_context_id_ = 0;
  67. };
  68. } // namespace atom
  69. #endif // ATOM_RENDERER_RENDERER_CLIENT_BASE_H_