electron_extensions_api_client.cc 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. // Copyright (c) 2019 Slack Technologies, Inc.
  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.
  4. #include "shell/browser/extensions/electron_extensions_api_client.h"
  5. #include <memory>
  6. #include <string>
  7. #include "electron/buildflags/buildflags.h"
  8. #include "extensions/browser/guest_view/extensions_guest_view_manager_delegate.h"
  9. #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h"
  10. #include "printing/buildflags/buildflags.h"
  11. #include "shell/browser/api/electron_api_web_contents.h"
  12. #include "shell/browser/extensions/api/management/electron_management_api_delegate.h"
  13. #include "shell/browser/extensions/electron_extension_web_contents_observer.h"
  14. #include "shell/browser/extensions/electron_messaging_delegate.h"
  15. #include "v8/include/v8.h"
  16. #if BUILDFLAG(ENABLE_PRINTING)
  17. #include "components/printing/browser/print_manager_utils.h"
  18. #include "shell/browser/printing/print_view_manager_electron.h"
  19. #endif
  20. namespace extensions {
  21. class ElectronGuestViewManagerDelegate
  22. : public ExtensionsGuestViewManagerDelegate {
  23. public:
  24. ElectronGuestViewManagerDelegate() : ExtensionsGuestViewManagerDelegate() {}
  25. ~ElectronGuestViewManagerDelegate() override = default;
  26. // disable copy
  27. ElectronGuestViewManagerDelegate(const ElectronGuestViewManagerDelegate&) =
  28. delete;
  29. ElectronGuestViewManagerDelegate& operator=(
  30. const ElectronGuestViewManagerDelegate&) = delete;
  31. // GuestViewManagerDelegate:
  32. void OnGuestAdded(content::WebContents* guest_web_contents) const override {
  33. v8::Isolate* isolate = v8::Isolate::GetCurrent();
  34. v8::HandleScope scope(isolate);
  35. electron::api::WebContents::FromOrCreate(isolate, guest_web_contents);
  36. }
  37. };
  38. class ElectronMimeHandlerViewGuestDelegate
  39. : public MimeHandlerViewGuestDelegate {
  40. public:
  41. ElectronMimeHandlerViewGuestDelegate() = default;
  42. ~ElectronMimeHandlerViewGuestDelegate() override = default;
  43. // disable copy
  44. ElectronMimeHandlerViewGuestDelegate(
  45. const ElectronMimeHandlerViewGuestDelegate&) = delete;
  46. ElectronMimeHandlerViewGuestDelegate& operator=(
  47. const ElectronMimeHandlerViewGuestDelegate&) = delete;
  48. // MimeHandlerViewGuestDelegate.
  49. bool HandleContextMenu(content::RenderFrameHost& render_frame_host,
  50. const content::ContextMenuParams& params) override {
  51. auto* web_contents =
  52. content::WebContents::FromRenderFrameHost(&render_frame_host);
  53. if (!web_contents)
  54. return true;
  55. electron::api::WebContents* api_web_contents =
  56. electron::api::WebContents::From(
  57. web_contents->GetOutermostWebContents());
  58. if (api_web_contents)
  59. api_web_contents->HandleContextMenu(render_frame_host, params);
  60. return true;
  61. }
  62. void RecordLoadMetric(bool in_main_frame,
  63. const std::string& mime_type,
  64. content::BrowserContext* browser_context) override {}
  65. };
  66. ElectronExtensionsAPIClient::ElectronExtensionsAPIClient() = default;
  67. ElectronExtensionsAPIClient::~ElectronExtensionsAPIClient() = default;
  68. MessagingDelegate* ElectronExtensionsAPIClient::GetMessagingDelegate() {
  69. if (!messaging_delegate_)
  70. messaging_delegate_ = std::make_unique<ElectronMessagingDelegate>();
  71. return messaging_delegate_.get();
  72. }
  73. void ElectronExtensionsAPIClient::AttachWebContentsHelpers(
  74. content::WebContents* web_contents) const {
  75. #if BUILDFLAG(ENABLE_PRINTING)
  76. electron::PrintViewManagerElectron::CreateForWebContents(web_contents);
  77. printing::CreateCompositeClientIfNeeded(web_contents, std::string());
  78. #endif
  79. extensions::ElectronExtensionWebContentsObserver::CreateForWebContents(
  80. web_contents);
  81. }
  82. ManagementAPIDelegate*
  83. ElectronExtensionsAPIClient::CreateManagementAPIDelegate() const {
  84. return new ElectronManagementAPIDelegate;
  85. }
  86. std::unique_ptr<MimeHandlerViewGuestDelegate>
  87. ElectronExtensionsAPIClient::CreateMimeHandlerViewGuestDelegate(
  88. MimeHandlerViewGuest* guest) const {
  89. return std::make_unique<ElectronMimeHandlerViewGuestDelegate>();
  90. }
  91. std::unique_ptr<guest_view::GuestViewManagerDelegate>
  92. ElectronExtensionsAPIClient::CreateGuestViewManagerDelegate() const {
  93. return std::make_unique<ElectronGuestViewManagerDelegate>();
  94. }
  95. } // namespace extensions