feat: enable native extensions support (#21814)
This commit is contained in:
parent
bdf65a75d0
commit
a061c87e56
61 changed files with 1054 additions and 941 deletions
|
@ -2,7 +2,7 @@
|
|||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "shell/common/extensions/atom_extensions_api_provider.h"
|
||||
#include "shell/common/extensions/electron_extensions_api_provider.h"
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
@ -74,50 +74,51 @@ base::span<const Alias> GetPermissionAliases() {
|
|||
|
||||
namespace electron {
|
||||
|
||||
AtomExtensionsAPIProvider::AtomExtensionsAPIProvider() = default;
|
||||
AtomExtensionsAPIProvider::~AtomExtensionsAPIProvider() = default;
|
||||
ElectronExtensionsAPIProvider::ElectronExtensionsAPIProvider() = default;
|
||||
ElectronExtensionsAPIProvider::~ElectronExtensionsAPIProvider() = default;
|
||||
|
||||
void AtomExtensionsAPIProvider::AddAPIFeatures(
|
||||
void ElectronExtensionsAPIProvider::AddAPIFeatures(
|
||||
extensions::FeatureProvider* provider) {
|
||||
extensions::AddElectronAPIFeatures(provider);
|
||||
}
|
||||
|
||||
void AtomExtensionsAPIProvider::AddManifestFeatures(
|
||||
void ElectronExtensionsAPIProvider::AddManifestFeatures(
|
||||
extensions::FeatureProvider* provider) {
|
||||
extensions::AddElectronManifestFeatures(provider);
|
||||
}
|
||||
|
||||
void AtomExtensionsAPIProvider::AddPermissionFeatures(
|
||||
void ElectronExtensionsAPIProvider::AddPermissionFeatures(
|
||||
extensions::FeatureProvider* provider) {
|
||||
// No shell-specific permission features.
|
||||
}
|
||||
|
||||
void AtomExtensionsAPIProvider::AddBehaviorFeatures(
|
||||
void ElectronExtensionsAPIProvider::AddBehaviorFeatures(
|
||||
extensions::FeatureProvider* provider) {
|
||||
// No shell-specific behavior features.
|
||||
}
|
||||
|
||||
void AtomExtensionsAPIProvider::AddAPIJSONSources(
|
||||
void ElectronExtensionsAPIProvider::AddAPIJSONSources(
|
||||
extensions::JSONFeatureProviderSource* json_source) {
|
||||
// json_source->LoadJSON(IDR_SHELL_EXTENSION_API_FEATURES);
|
||||
}
|
||||
|
||||
bool AtomExtensionsAPIProvider::IsAPISchemaGenerated(const std::string& name) {
|
||||
bool ElectronExtensionsAPIProvider::IsAPISchemaGenerated(
|
||||
const std::string& name) {
|
||||
return extensions::api::ElectronGeneratedSchemas::IsGenerated(name);
|
||||
}
|
||||
|
||||
base::StringPiece AtomExtensionsAPIProvider::GetAPISchema(
|
||||
base::StringPiece ElectronExtensionsAPIProvider::GetAPISchema(
|
||||
const std::string& name) {
|
||||
return extensions::api::ElectronGeneratedSchemas::Get(name);
|
||||
}
|
||||
|
||||
void AtomExtensionsAPIProvider::RegisterPermissions(
|
||||
void ElectronExtensionsAPIProvider::RegisterPermissions(
|
||||
extensions::PermissionsInfo* permissions_info) {
|
||||
permissions_info->RegisterPermissions(extensions::GetPermissionInfos(),
|
||||
extensions::GetPermissionAliases());
|
||||
}
|
||||
|
||||
void AtomExtensionsAPIProvider::RegisterManifestHandlers() {
|
||||
void ElectronExtensionsAPIProvider::RegisterManifestHandlers() {
|
||||
extensions::ManifestHandlerRegistry* registry =
|
||||
extensions::ManifestHandlerRegistry::Get();
|
||||
registry->RegisterHandler(
|
|
@ -2,8 +2,8 @@
|
|||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef SHELL_COMMON_EXTENSIONS_ATOM_EXTENSIONS_API_PROVIDER_H_
|
||||
#define SHELL_COMMON_EXTENSIONS_ATOM_EXTENSIONS_API_PROVIDER_H_
|
||||
#ifndef SHELL_COMMON_EXTENSIONS_ELECTRON_EXTENSIONS_API_PROVIDER_H_
|
||||
#define SHELL_COMMON_EXTENSIONS_ELECTRON_EXTENSIONS_API_PROVIDER_H_
|
||||
|
||||
#include <string>
|
||||
|
||||
|
@ -12,10 +12,10 @@
|
|||
|
||||
namespace electron {
|
||||
|
||||
class AtomExtensionsAPIProvider : public extensions::ExtensionsAPIProvider {
|
||||
class ElectronExtensionsAPIProvider : public extensions::ExtensionsAPIProvider {
|
||||
public:
|
||||
AtomExtensionsAPIProvider();
|
||||
~AtomExtensionsAPIProvider() override;
|
||||
ElectronExtensionsAPIProvider();
|
||||
~ElectronExtensionsAPIProvider() override;
|
||||
|
||||
// ExtensionsAPIProvider:
|
||||
void AddAPIFeatures(extensions::FeatureProvider* provider) override;
|
||||
|
@ -31,9 +31,9 @@ class AtomExtensionsAPIProvider : public extensions::ExtensionsAPIProvider {
|
|||
void RegisterManifestHandlers() override;
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(AtomExtensionsAPIProvider);
|
||||
DISALLOW_COPY_AND_ASSIGN(ElectronExtensionsAPIProvider);
|
||||
};
|
||||
|
||||
} // namespace electron
|
||||
|
||||
#endif // SHELL_COMMON_EXTENSIONS_ATOM_EXTENSIONS_API_PROVIDER_H_
|
||||
#endif // SHELL_COMMON_EXTENSIONS_ELECTRON_EXTENSIONS_API_PROVIDER_H_
|
|
@ -2,7 +2,7 @@
|
|||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "shell/common/extensions/atom_extensions_client.h"
|
||||
#include "shell/common/extensions/electron_extensions_client.h"
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
@ -17,7 +17,7 @@
|
|||
#include "extensions/common/features/simple_feature.h"
|
||||
#include "extensions/common/permissions/permission_message_provider.h"
|
||||
#include "extensions/common/url_pattern_set.h"
|
||||
#include "shell/common/extensions/atom_extensions_api_provider.h"
|
||||
#include "shell/common/extensions/electron_extensions_api_provider.h"
|
||||
|
||||
using extensions::ExtensionsClient;
|
||||
|
||||
|
@ -27,11 +27,11 @@ namespace {
|
|||
|
||||
// TODO(jamescook): Refactor ChromePermissionsMessageProvider so we can share
|
||||
// code. For now, this implementation does nothing.
|
||||
class AtomPermissionMessageProvider
|
||||
class ElectronPermissionMessageProvider
|
||||
: public extensions::PermissionMessageProvider {
|
||||
public:
|
||||
AtomPermissionMessageProvider() {}
|
||||
~AtomPermissionMessageProvider() override {}
|
||||
ElectronPermissionMessageProvider() {}
|
||||
~ElectronPermissionMessageProvider() override {}
|
||||
|
||||
// PermissionMessageProvider implementation.
|
||||
extensions::PermissionMessages GetPermissionMessages(
|
||||
|
@ -60,81 +60,82 @@ class AtomPermissionMessageProvider
|
|||
}
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(AtomPermissionMessageProvider);
|
||||
DISALLOW_COPY_AND_ASSIGN(ElectronPermissionMessageProvider);
|
||||
};
|
||||
|
||||
base::LazyInstance<AtomPermissionMessageProvider>::DestructorAtExit
|
||||
base::LazyInstance<ElectronPermissionMessageProvider>::DestructorAtExit
|
||||
g_permission_message_provider = LAZY_INSTANCE_INITIALIZER;
|
||||
|
||||
} // namespace
|
||||
|
||||
AtomExtensionsClient::AtomExtensionsClient()
|
||||
ElectronExtensionsClient::ElectronExtensionsClient()
|
||||
: webstore_base_url_(extension_urls::kChromeWebstoreBaseURL),
|
||||
webstore_update_url_(extension_urls::kChromeWebstoreUpdateURL) {
|
||||
AddAPIProvider(std::make_unique<extensions::CoreExtensionsAPIProvider>());
|
||||
AddAPIProvider(std::make_unique<AtomExtensionsAPIProvider>());
|
||||
AddAPIProvider(std::make_unique<ElectronExtensionsAPIProvider>());
|
||||
}
|
||||
|
||||
AtomExtensionsClient::~AtomExtensionsClient() {}
|
||||
ElectronExtensionsClient::~ElectronExtensionsClient() {}
|
||||
|
||||
void AtomExtensionsClient::Initialize() {
|
||||
void ElectronExtensionsClient::Initialize() {
|
||||
// TODO(jamescook): Do we need to whitelist any extensions?
|
||||
}
|
||||
|
||||
void AtomExtensionsClient::InitializeWebStoreUrls(
|
||||
void ElectronExtensionsClient::InitializeWebStoreUrls(
|
||||
base::CommandLine* command_line) {}
|
||||
|
||||
const extensions::PermissionMessageProvider&
|
||||
AtomExtensionsClient::GetPermissionMessageProvider() const {
|
||||
ElectronExtensionsClient::GetPermissionMessageProvider() const {
|
||||
NOTIMPLEMENTED();
|
||||
return g_permission_message_provider.Get();
|
||||
}
|
||||
|
||||
const std::string AtomExtensionsClient::GetProductName() {
|
||||
const std::string ElectronExtensionsClient::GetProductName() {
|
||||
// TODO(samuelmaddock):
|
||||
return "app_shell";
|
||||
}
|
||||
|
||||
void AtomExtensionsClient::FilterHostPermissions(
|
||||
void ElectronExtensionsClient::FilterHostPermissions(
|
||||
const extensions::URLPatternSet& hosts,
|
||||
extensions::URLPatternSet* new_hosts,
|
||||
extensions::PermissionIDSet* permissions) const {
|
||||
NOTIMPLEMENTED();
|
||||
}
|
||||
|
||||
void AtomExtensionsClient::SetScriptingWhitelist(
|
||||
void ElectronExtensionsClient::SetScriptingWhitelist(
|
||||
const ExtensionsClient::ScriptingWhitelist& whitelist) {
|
||||
scripting_whitelist_ = whitelist;
|
||||
}
|
||||
|
||||
const ExtensionsClient::ScriptingWhitelist&
|
||||
AtomExtensionsClient::GetScriptingWhitelist() const {
|
||||
ElectronExtensionsClient::GetScriptingWhitelist() const {
|
||||
// TODO(jamescook): Real whitelist.
|
||||
return scripting_whitelist_;
|
||||
}
|
||||
|
||||
extensions::URLPatternSet AtomExtensionsClient::GetPermittedChromeSchemeHosts(
|
||||
extensions::URLPatternSet
|
||||
ElectronExtensionsClient::GetPermittedChromeSchemeHosts(
|
||||
const extensions::Extension* extension,
|
||||
const extensions::APIPermissionSet& api_permissions) const {
|
||||
NOTIMPLEMENTED();
|
||||
return extensions::URLPatternSet();
|
||||
}
|
||||
|
||||
bool AtomExtensionsClient::IsScriptableURL(const GURL& url,
|
||||
std::string* error) const {
|
||||
bool ElectronExtensionsClient::IsScriptableURL(const GURL& url,
|
||||
std::string* error) const {
|
||||
// No restrictions on URLs.
|
||||
return true;
|
||||
}
|
||||
|
||||
const GURL& AtomExtensionsClient::GetWebstoreBaseURL() const {
|
||||
const GURL& ElectronExtensionsClient::GetWebstoreBaseURL() const {
|
||||
return webstore_base_url_;
|
||||
}
|
||||
|
||||
const GURL& AtomExtensionsClient::GetWebstoreUpdateURL() const {
|
||||
const GURL& ElectronExtensionsClient::GetWebstoreUpdateURL() const {
|
||||
return webstore_update_url_;
|
||||
}
|
||||
|
||||
bool AtomExtensionsClient::IsBlacklistUpdateURL(const GURL& url) const {
|
||||
bool ElectronExtensionsClient::IsBlacklistUpdateURL(const GURL& url) const {
|
||||
// TODO(rockot): Maybe we want to do something else here. For now we accept
|
||||
// any URL as a blacklist URL because we don't really care.
|
||||
return true;
|
|
@ -2,8 +2,8 @@
|
|||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef SHELL_COMMON_EXTENSIONS_ATOM_EXTENSIONS_CLIENT_H_
|
||||
#define SHELL_COMMON_EXTENSIONS_ATOM_EXTENSIONS_CLIENT_H_
|
||||
#ifndef SHELL_COMMON_EXTENSIONS_ELECTRON_EXTENSIONS_CLIENT_H_
|
||||
#define SHELL_COMMON_EXTENSIONS_ELECTRON_EXTENSIONS_CLIENT_H_
|
||||
|
||||
#include <string>
|
||||
|
||||
|
@ -24,12 +24,12 @@ class URLPatternSet;
|
|||
namespace electron {
|
||||
|
||||
// The app_shell implementation of ExtensionsClient.
|
||||
class AtomExtensionsClient : public extensions::ExtensionsClient {
|
||||
class ElectronExtensionsClient : public extensions::ExtensionsClient {
|
||||
public:
|
||||
typedef extensions::ExtensionsClient::ScriptingWhitelist ScriptingWhitelist;
|
||||
|
||||
AtomExtensionsClient();
|
||||
~AtomExtensionsClient() override;
|
||||
ElectronExtensionsClient();
|
||||
~ElectronExtensionsClient() override;
|
||||
|
||||
// ExtensionsClient overrides:
|
||||
void Initialize() override;
|
||||
|
@ -57,9 +57,9 @@ class AtomExtensionsClient : public extensions::ExtensionsClient {
|
|||
const GURL webstore_base_url_;
|
||||
const GURL webstore_update_url_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(AtomExtensionsClient);
|
||||
DISALLOW_COPY_AND_ASSIGN(ElectronExtensionsClient);
|
||||
};
|
||||
|
||||
} // namespace electron
|
||||
|
||||
#endif // SHELL_COMMON_EXTENSIONS_ATOM_EXTENSIONS_CLIENT_H_
|
||||
#endif // SHELL_COMMON_EXTENSIONS_ELECTRON_EXTENSIONS_CLIENT_H_
|
Loading…
Add table
Add a link
Reference in a new issue