diff --git a/BUILD.gn b/BUILD.gn index d23e5eed915b..b92141ef093e 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -8,6 +8,7 @@ group("child_dependencies") { group("browser_dependencies") { public_deps = [ "//brave/browser", + "//brave/common/extensions/api" ] } diff --git a/browser/resources/resource_ids b/browser/resources/resource_ids new file mode 100644 index 000000000000..efb9a371f655 --- /dev/null +++ b/browser/resources/resource_ids @@ -0,0 +1,7 @@ +# Resource ids starting at 31000 are reserved for projects built on Chromium. +{ + "SRCDIR": "../../..", + "brave/common/extensions/api/brave_api_resources.grd": { + "includes": [32000], + }, +} diff --git a/common/extensions/api/BUILD.gn b/common/extensions/api/BUILD.gn new file mode 100644 index 000000000000..8a1495fbd881 --- /dev/null +++ b/common/extensions/api/BUILD.gn @@ -0,0 +1,74 @@ +import("//tools/json_schema_compiler/json_features.gni") +import("//tools/json_schema_compiler/json_schema_api.gni") +import("//tools/grit/grit_rule.gni") +json_features("api_features") { + feature_type = "APIFeature" + provider_class = "BraveAPIFeatureProvider" + sources = [ + "//chrome/common/extensions/api/_api_features.json", + "//extensions/common/api/_api_features.json", + "_api_features.json", + ] +} + +json_features("permission_features") { + feature_type = "PermissionFeature" + provider_class = "BravePermissionFeatureProvider" + sources = [ + "//chrome/common/extensions/api/_permission_features.json", + "//extensions/common/api/_permission_features.json", + ] +} + +json_features("manifest_features") { + feature_type = "ManifestFeature" + provider_class = "BraveManifestFeatureProvider" + sources = [ + "//chrome/common/extensions/api/_manifest_features.json", + "//extensions/common/api/_manifest_features.json", + ] +} + +json_features("behavior_features") { + feature_type = "BehaviorFeature" + provider_class = "BraveBehaviorFeatureProvider" + sources = [ + "//extensions/common/api/_behavior_features.json", + ] +} + +grit("resources") { + source = "brave_api_resources.grd" + outputs = [ + "grit/brave_api_resources.h", + "brave_api_resources.pak", + ] + resource_ids = "//brave/browser/resources/resource_ids" +} + +json_schema_api("generated_api") { + sources = [ + "brave_shields.json" + ] + deps = [ + "//chrome/common/extensions/api", + "//extensions/common/api", + ":api_features", + ":permission_features", + ":manifest_features", + ":behavior_features", + ":resources", + ] + root_namespace = "extensions::api::%(namespace)s" + schemas = true + bundle = true + bundle_registration = true + bundle_name = "Brave" + impl_dir = "//brave/common/extensions/api" +} + +group("api") { + public_deps = [ + ":generated_api", + ] +} diff --git a/common/extensions/api/_api_features.json b/common/extensions/api/_api_features.json new file mode 100644 index 000000000000..d320aadde14e --- /dev/null +++ b/common/extensions/api/_api_features.json @@ -0,0 +1,11 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +{ + "braveShields": { + "channel": "stable", + "dependencies": [], + "contexts": ["blessed_extension"] + } +} diff --git a/common/extensions/api/brave_api_resources.grd b/common/extensions/api/brave_api_resources.grd new file mode 100644 index 000000000000..c1ef5c7ff833 --- /dev/null +++ b/common/extensions/api/brave_api_resources.grd @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/components/brave_shields/browser/brave_shields_web_contents_observer.cc b/components/brave_shields/browser/brave_shields_web_contents_observer.cc index 7b04e37247b4..f825da1770e9 100644 --- a/components/brave_shields/browser/brave_shields_web_contents_observer.cc +++ b/components/brave_shields/browser/brave_shields_web_contents_observer.cc @@ -6,7 +6,7 @@ #include "chrome/browser/extensions/extension_tab_util.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/common/extensions/api/brave_shields.h" +#include "brave/common/extensions/api/brave_shields.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" diff --git a/patches/master_patch.patch b/patches/master_patch.patch index 8a590732a64c..561d5c05182f 100644 --- a/patches/master_patch.patch +++ b/patches/master_patch.patch @@ -206,18 +206,28 @@ index 9361b28fb3ac91e61837d7c707e9f4a9ec73c7c6..c5eee899ae5f42b974645240f17aabeb friend class DisableWebRtcEncryptionFlagTest; friend class InProcessBrowserTest; -diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc -index 4161673ba0f9ec6a079436469e5a6579ff1e88cc..b1dfe5add2d5a69f8fc305610e591333e821ffdc 100644 ---- a/chrome/browser/io_thread.cc -+++ b/chrome/browser/io_thread.cc -@@ -30,6 +30,7 @@ - #include "base/threading/thread.h" - #include "base/time/time.h" - #include "base/trace_event/trace_event.h" -+#include "brave/browser/net/brave_network_delegate.h" +diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.cc b/chrome/browser/extensions/chrome_extensions_browser_client.cc +index 4398370da586e80f51b5e8517a49174236fa78c3..3b5d2a849aaa5c4d5bbd4feaaee640ccc0edefbd 100644 +--- a/chrome/browser/extensions/chrome_extensions_browser_client.cc ++++ b/chrome/browser/extensions/chrome_extensions_browser_client.cc +@@ -10,6 +10,7 @@ + #include "base/memory/ptr_util.h" + #include "base/version.h" #include "build/build_config.h" ++#include "brave/common/extensions/api/generated_api_registration.h" + #include "chrome/browser/app_mode/app_mode_utils.h" #include "chrome/browser/browser_process.h" - #include "chrome/browser/data_usage/tab_id_annotator.h" + #include "chrome/browser/extensions/activity_log/activity_log.h" +@@ -277,6 +278,9 @@ void ChromeExtensionsBrowserClient::RegisterExtensionFunctions( + + // Generated APIs from Chrome. + api::ChromeGeneratedFunctionRegistry::RegisterAll(registry); ++ ++ // Generated APIs from Brave. ++ api::BraveGeneratedFunctionRegistry::RegisterAll(registry); + } + + void ChromeExtensionsBrowserClient::RegisterExtensionInterfaces( diff --git a/chrome/browser/net/chrome_network_delegate.h b/chrome/browser/net/chrome_network_delegate.h index e055ef156da9ea78b1dee96ee04f9c061267c775..5ffcecf64f39f3ff593cd30d9c1ef551be5f1a27 100644 --- a/chrome/browser/net/chrome_network_delegate.h @@ -291,37 +301,89 @@ index 99a3f816756039a628dc3032cbda3971dd415138..2cf32156411bd3a28e8c8096e25dcee5 #error Unknown branding #endif diff --git a/chrome/common/extensions/api/BUILD.gn b/chrome/common/extensions/api/BUILD.gn -index ad3703177d68941b91d570bcfa001848ffa179a9..727d534ae2bce1e5f1105cf2c3a2318f10302b6d 100644 +index ad3703177d68941b91d570bcfa001848ffa179a9..deae657f78e081a46b551569e626d84d6cd76c2d 100644 --- a/chrome/common/extensions/api/BUILD.gn +++ b/chrome/common/extensions/api/BUILD.gn -@@ -84,6 +84,12 @@ schema_sources = [ +@@ -84,6 +84,7 @@ schema_sources = [ "webstore_widget_private.idl", "windows.json", ] -+ -+# Add Brave extension resources here -+schema_sources += [ -+ "brave_shields.json" -+] + if (!is_android) { schema_sources += [ "processes.idl" ] } -diff --git a/chrome/common/extensions/api/_api_features.json b/chrome/common/extensions/api/_api_features.json -index 8ec1de091af1a17127e66bc67c6ee7cb8b5c2be3..0686739f34df6198129d2a9a363fba00da4a537e 100644 ---- a/chrome/common/extensions/api/_api_features.json -+++ b/chrome/common/extensions/api/_api_features.json -@@ -826,5 +826,9 @@ - "matches": [ - "chrome://bookmarks/*" - ] -- }] -+ }], -+ "braveShields": { -+ "dependencies": ["permission:contentSettings"], -+ "contexts": ["blessed_extension"] -+ } +diff --git a/chrome/common/extensions/chrome_extensions_client.cc b/chrome/common/extensions/chrome_extensions_client.cc +index c4b6d014fe94d37a0e16802e7c644a990326d6f4..86e4cd06c08af21c7ff8b664010316e3f304959c 100644 +--- a/chrome/common/extensions/chrome_extensions_client.cc ++++ b/chrome/common/extensions/chrome_extensions_client.cc +@@ -13,6 +13,13 @@ + #include "base/metrics/histogram_macros.h" + #include "base/strings/string_util.h" + #include "base/values.h" ++#include "brave/common/extensions/api/api_features.h" ++#include "brave/common/extensions/api/behavior_features.h" ++#include "brave/common/extensions/api/generated_api_registration.h" ++#include "brave/common/extensions/api/generated_schemas.h" ++#include "brave/common/extensions/api/grit/brave_api_resources.h" ++#include "brave/common/extensions/api/manifest_features.h" ++#include "brave/common/extensions/api/permission_features.h" + #include "chrome/common/chrome_content_client.h" + #include "chrome/common/chrome_switches.h" + #include "chrome/common/extensions/api/api_features.h" +@@ -108,6 +115,7 @@ void ChromeExtensionsClient::Initialize() { + if (!ManifestHandler::IsRegistrationFinalized()) { + RegisterCommonManifestHandlers(); + RegisterChromeManifestHandlers(); ++ // RegisterBraveManifestHandlers(); + ManifestHandler::FinalizeRegistration(); + } + +@@ -142,13 +150,13 @@ std::unique_ptr ChromeExtensionsClient::CreateFeatureProvider( + const std::string& name) const { + std::unique_ptr provider; + if (name == "api") { +- provider.reset(new APIFeatureProvider()); ++ provider.reset(new BraveAPIFeatureProvider()); + } else if (name == "manifest") { +- provider.reset(new ManifestFeatureProvider()); ++ provider.reset(new BraveManifestFeatureProvider()); + } else if (name == "permission") { +- provider.reset(new PermissionFeatureProvider()); ++ provider.reset(new BravePermissionFeatureProvider()); + } else if (name == "behavior") { +- provider.reset(new BehaviorFeatureProvider()); ++ provider.reset(new BraveBehaviorFeatureProvider()); + } else { + NOTREACHED(); + } +@@ -161,6 +169,7 @@ ChromeExtensionsClient::CreateAPIFeatureSource() const { + new JSONFeatureProviderSource("api")); + source->LoadJSON(IDR_EXTENSION_API_FEATURES); + source->LoadJSON(IDR_CHROME_EXTENSION_API_FEATURES); ++ source->LoadJSON(IDR_BRAVE_EXTENSION_API_FEATURES); + return source; + } + +@@ -238,7 +247,8 @@ bool ChromeExtensionsClient::IsScriptableURL( + bool ChromeExtensionsClient::IsAPISchemaGenerated( + const std::string& name) const { + // Test from most common to least common. +- return api::ChromeGeneratedSchemas::IsGenerated(name) || ++ return api::BraveGeneratedSchemas::IsGenerated(name) || ++ api::ChromeGeneratedSchemas::IsGenerated(name) || + api::GeneratedSchemas::IsGenerated(name); + } + +@@ -248,6 +258,9 @@ base::StringPiece ChromeExtensionsClient::GetAPISchema( + if (api::ChromeGeneratedSchemas::IsGenerated(name)) + return api::ChromeGeneratedSchemas::Get(name); + ++ if (api::BraveGeneratedSchemas::IsGenerated(name)) ++ return api::BraveGeneratedSchemas::Get(name); ++ + return api::GeneratedSchemas::Get(name); } + diff --git a/chrome/common/mac/app_mode_chrome_locator.mm b/chrome/common/mac/app_mode_chrome_locator.mm index efd272e706ba56b748e4b76b96d76cbd03aa07ac..5ce343302a2ab3a18a9149a33203f5a2fe301b23 100644 --- a/chrome/common/mac/app_mode_chrome_locator.mm