electron_extensions_client.cc 4.5 KB

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