electron_extensions_client.cc 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. // Copyright 2014 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/common/extensions/electron_extensions_client.h"
  5. #include <memory>
  6. #include <string>
  7. #include "base/no_destructor.h"
  8. #include "components/version_info/version_info.h"
  9. #include "extensions/common/core_extensions_api_provider.h"
  10. #include "extensions/common/extension_urls.h"
  11. #include "extensions/common/features/simple_feature.h"
  12. #include "extensions/common/permissions/permission_message_provider.h"
  13. #include "extensions/common/url_pattern_set.h"
  14. #include "shell/common/extensions/electron_extensions_api_provider.h"
  15. using extensions::ExtensionsClient;
  16. namespace electron {
  17. namespace {
  18. // TODO(jamescook): Refactor ChromePermissionsMessageProvider so we can share
  19. // code. For now, this implementation does nothing.
  20. class ElectronPermissionMessageProvider
  21. : public extensions::PermissionMessageProvider {
  22. public:
  23. ElectronPermissionMessageProvider() = default;
  24. ~ElectronPermissionMessageProvider() override = default;
  25. // disable copy
  26. ElectronPermissionMessageProvider(const ElectronPermissionMessageProvider&) =
  27. delete;
  28. ElectronPermissionMessageProvider& operator=(
  29. const ElectronPermissionMessageProvider&) = delete;
  30. // PermissionMessageProvider implementation.
  31. [[nodiscard]] extensions::PermissionMessages GetPermissionMessages(
  32. const extensions::PermissionIDSet& permissions) const override {
  33. return extensions::PermissionMessages();
  34. }
  35. [[nodiscard]] bool IsPrivilegeIncrease(
  36. const extensions::PermissionSet& granted_permissions,
  37. const extensions::PermissionSet& requested_permissions,
  38. extensions::Manifest::Type extension_type) const override {
  39. // Ensure we implement this before shipping.
  40. NOTREACHED();
  41. }
  42. [[nodiscard]] extensions::PermissionIDSet GetAllPermissionIDs(
  43. const extensions::PermissionSet& permissions,
  44. extensions::Manifest::Type extension_type) const override {
  45. return {};
  46. }
  47. };
  48. } // namespace
  49. ElectronExtensionsClient::ElectronExtensionsClient()
  50. : webstore_base_url_(extension_urls::kChromeWebstoreBaseURL),
  51. new_webstore_base_url_(extension_urls::kNewChromeWebstoreBaseURL),
  52. webstore_update_url_(extension_urls::kChromeWebstoreUpdateURL) {
  53. AddAPIProvider(std::make_unique<extensions::CoreExtensionsAPIProvider>());
  54. AddAPIProvider(std::make_unique<ElectronExtensionsAPIProvider>());
  55. }
  56. ElectronExtensionsClient::~ElectronExtensionsClient() = default;
  57. void ElectronExtensionsClient::Initialize() {
  58. // TODO(jamescook): Do we need to whitelist any extensions?
  59. }
  60. void ElectronExtensionsClient::InitializeWebStoreUrls(
  61. base::CommandLine* command_line) {}
  62. const extensions::PermissionMessageProvider&
  63. ElectronExtensionsClient::GetPermissionMessageProvider() const {
  64. NOTIMPLEMENTED();
  65. static base::NoDestructor<ElectronPermissionMessageProvider> instance;
  66. return *instance;
  67. }
  68. const std::string ElectronExtensionsClient::GetProductName() {
  69. // TODO(samuelmaddock):
  70. return "app_shell";
  71. }
  72. void ElectronExtensionsClient::FilterHostPermissions(
  73. const extensions::URLPatternSet& hosts,
  74. extensions::URLPatternSet* new_hosts,
  75. extensions::PermissionIDSet* permissions) const {
  76. NOTIMPLEMENTED();
  77. }
  78. void ElectronExtensionsClient::SetScriptingAllowlist(
  79. const ExtensionsClient::ScriptingAllowlist& allowlist) {
  80. scripting_allowlist_ = allowlist;
  81. }
  82. const ExtensionsClient::ScriptingAllowlist&
  83. ElectronExtensionsClient::GetScriptingAllowlist() const {
  84. // TODO(jamescook): Real whitelist.
  85. return scripting_allowlist_;
  86. }
  87. extensions::URLPatternSet
  88. ElectronExtensionsClient::GetPermittedChromeSchemeHosts(
  89. const extensions::Extension* extension,
  90. const extensions::APIPermissionSet& api_permissions) const {
  91. return {};
  92. }
  93. bool ElectronExtensionsClient::IsScriptableURL(const GURL& url,
  94. std::string* error) const {
  95. // No restrictions on URLs.
  96. return true;
  97. }
  98. const GURL& ElectronExtensionsClient::GetWebstoreBaseURL() const {
  99. return webstore_base_url_;
  100. }
  101. const GURL& ElectronExtensionsClient::GetNewWebstoreBaseURL() const {
  102. return new_webstore_base_url_;
  103. }
  104. const GURL& ElectronExtensionsClient::GetWebstoreUpdateURL() const {
  105. return webstore_update_url_;
  106. }
  107. bool ElectronExtensionsClient::IsBlocklistUpdateURL(const GURL& url) const {
  108. return false;
  109. }
  110. } // namespace electron