electron_messaging_delegate.cc 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. // Copyright 2017 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "shell/browser/extensions/electron_messaging_delegate.h"
  5. #include <memory>
  6. #include <utility>
  7. #include "base/functional/callback.h"
  8. #include "base/values.h"
  9. #include "components/prefs/pref_service.h"
  10. #include "content/public/browser/browser_context.h"
  11. #include "content/public/browser/browser_thread.h"
  12. #include "content/public/browser/render_frame_host.h"
  13. #include "content/public/browser/web_contents.h"
  14. #include "electron/shell/common/extensions/api/tabs.h"
  15. #include "extensions/browser/api/messaging/extension_message_port.h"
  16. #include "extensions/browser/api/messaging/native_message_host.h"
  17. #include "extensions/browser/extension_api_frame_id_map.h"
  18. #include "extensions/browser/pref_names.h"
  19. #include "extensions/common/api/messaging/port_id.h"
  20. #include "extensions/common/extension.h"
  21. #include "shell/browser/api/electron_api_web_contents.h"
  22. #include "ui/gfx/native_widget_types.h"
  23. #include "url/gurl.h"
  24. namespace extensions {
  25. ElectronMessagingDelegate::ElectronMessagingDelegate() = default;
  26. ElectronMessagingDelegate::~ElectronMessagingDelegate() = default;
  27. MessagingDelegate::PolicyPermission
  28. ElectronMessagingDelegate::IsNativeMessagingHostAllowed(
  29. content::BrowserContext* browser_context,
  30. const std::string& native_host_name) {
  31. DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
  32. return PolicyPermission::DISALLOW;
  33. }
  34. std::optional<base::Value::Dict> ElectronMessagingDelegate::MaybeGetTabInfo(
  35. content::WebContents* web_contents) {
  36. if (web_contents) {
  37. auto* api_contents = electron::api::WebContents::From(web_contents);
  38. if (api_contents) {
  39. api::tabs::Tab tab;
  40. tab.id = api_contents->ID();
  41. tab.url = api_contents->GetURL().spec();
  42. tab.title = base::UTF16ToUTF8(api_contents->GetTitle());
  43. tab.audible = api_contents->IsCurrentlyAudible();
  44. return tab.ToValue();
  45. }
  46. }
  47. return std::nullopt;
  48. }
  49. content::WebContents* ElectronMessagingDelegate::GetWebContentsByTabId(
  50. content::BrowserContext* browser_context,
  51. int tab_id) {
  52. auto* contents = electron::api::WebContents::FromID(tab_id);
  53. if (!contents) {
  54. return nullptr;
  55. }
  56. return contents->web_contents();
  57. }
  58. std::unique_ptr<MessagePort>
  59. ElectronMessagingDelegate::CreateReceiverForNativeApp(
  60. content::BrowserContext* browser_context,
  61. base::WeakPtr<MessagePort::ChannelDelegate> channel_delegate,
  62. content::RenderFrameHost* source,
  63. const std::string& extension_id,
  64. const PortId& receiver_port_id,
  65. const std::string& native_app_name,
  66. bool allow_user_level,
  67. std::string* error_out) {
  68. return nullptr;
  69. }
  70. void ElectronMessagingDelegate::QueryIncognitoConnectability(
  71. content::BrowserContext* context,
  72. const Extension* target_extension,
  73. content::WebContents* source_contents,
  74. const GURL& source_url,
  75. base::OnceCallback<void(bool)> callback) {
  76. DCHECK(context->IsOffTheRecord());
  77. std::move(callback).Run(false);
  78. }
  79. } // namespace extensions