injects window.ethereum object into all frames

This commit is contained in:
Serg
2021-03-24 15:27:42 -04:00
parent 3e04feb6fb
commit efc1f2c757
14 changed files with 268 additions and 4 deletions
+3
View File
@@ -110,4 +110,7 @@
"<(ROOT_GEN_DIR)/brave/web-ui-tor_internals/tor_internals.grd": {
"includes": [46500],
},
"<(ROOT_GEN_DIR)/brave/web-ui-brave_wallet_script/brave_wallet_script.grd": {
"includes": [46750]
},
}
+4 -1
View File
@@ -464,7 +464,10 @@ source_set("ui") {
"webui/brave_wallet_ui.cc",
"webui/brave_wallet_ui.h",
]
deps += [ "//brave/components/brave_wallet_ui:generated_resources" ]
deps += [
"//brave/components/brave_wallet_ui:generated_resources",
"//brave/components/brave_wallet/resources:generated_resources",
]
}
if (toolkit_views) {
+27
View File
@@ -0,0 +1,27 @@
import("//build/config/features.gni")
source_set("renderer") {
visibility = [
"//brave:child_dependencies",
"//brave/renderer/*",
"//chrome/renderer/*",
"//components/content_settings/renderer/*",
]
sources = [
"brave_wallet_js_handler.cc",
"brave_wallet_js_handler.h",
"brave_wallet_render_frame_observer.cc",
"brave_wallet_render_frame_observer.h",
]
deps = [
"//base",
"//brave/components/brave_wallet/resources:generated_resources",
"//content/public/renderer",
"//gin",
"//third_party/blink/public:blink",
"//third_party/blink/public/common",
"//v8",
]
}
+7
View File
@@ -0,0 +1,7 @@
include_rules = [
"+content/public/renderer",
"+gin",
"+third_party/blink/public",
"+v8/include",
"+ui/base",
]
@@ -0,0 +1,58 @@
/* Copyright (c) 2021 The Brave Authors. All rights reserved.
* 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/. */
#include "brave/components/brave_wallet/renderer/brave_wallet_js_handler.h"
#include <string>
#include "base/no_destructor.h"
#include "base/strings/utf_string_conversions.h"
#include "brave/components/brave_wallet/resources/grit/brave_wallet_script_generated_map.h"
#include "content/public/renderer/render_frame.h"
#include "ui/base/resource/resource_bundle.h"
#include "third_party/blink/public/web/blink.h"
#include "third_party/blink/public/web/web_local_frame.h"
#include "third_party/blink/public/web/web_script_source.h"
namespace {
static base::NoDestructor<std::string> g_provider_script("");
std::string LoadDataResource(const int id) {
auto& resource_bundle = ui::ResourceBundle::GetSharedInstance();
if (resource_bundle.IsGzipped(id)) {
return resource_bundle.LoadDataResourceString(id);
}
return resource_bundle.GetRawDataResource(id).as_string();
}
}
namespace brave_wallet {
BraveWalletJSHandler::BraveWalletJSHandler(
content::RenderFrame* render_frame)
: render_frame_(render_frame) {
if (g_provider_script->empty()) {
*g_provider_script = LoadDataResource(kBraveWalletScriptGenerated[0].value);
}
}
BraveWalletJSHandler::~BraveWalletJSHandler() = default;
void BraveWalletJSHandler::AddJavaScriptObjectToFrame(
v8::Local<v8::Context> context) {
}
void BraveWalletJSHandler::InjectScript() {
blink::WebLocalFrame* web_frame = render_frame_->GetWebFrame();
if (web_frame->IsProvisional())
return;
web_frame->ExecuteScript(blink::WebString::FromUTF8(*g_provider_script));
}
} // namespace brave_wallet
@@ -0,0 +1,29 @@
/* Copyright (c) 2021 The Brave Authors. All rights reserved.
* 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/. */
#ifndef BRAVE_COMPONENTS_BRAVE_WALLET_RENDERER_BRAVE_WALLET_JS_HANDLER_H_
#define BRAVE_COMPONENTS_BRAVE_WALLET_RENDERER_BRAVE_WALLET_JS_HANDLER_H_
#include "content/public/renderer/render_frame.h"
#include "url/gurl.h"
#include "v8/include/v8.h"
namespace brave_wallet {
class BraveWalletJSHandler {
public:
BraveWalletJSHandler(content::RenderFrame* render_frame);
~BraveWalletJSHandler();
void AddJavaScriptObjectToFrame(v8::Local<v8::Context> context);
void InjectScript();
private:
content::RenderFrame* render_frame_;
};
} // namespace brave_wallet
#endif // BRAVE_COMPONENTS_BRAVE_WALLET_RENDERER_BRAVE_WALLET_JS_HANDLER_H_
@@ -0,0 +1,47 @@
/* Copyright (c) 2021 The Brave Authors. All rights reserved.
* 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/. */
#include "brave/components/brave_wallet/renderer/brave_wallet_render_frame_observer.h"
#include "base/bind.h"
#include "content/public/renderer/render_frame.h"
#include "third_party/blink/public/web/web_local_frame.h"
namespace brave_wallet {
BraveWalletRenderFrameObserver::BraveWalletRenderFrameObserver(
content::RenderFrame* render_frame)
: RenderFrameObserver(render_frame) {}
BraveWalletRenderFrameObserver::~BraveWalletRenderFrameObserver() {}
void BraveWalletRenderFrameObserver::DidStartNavigation(
const GURL& url,
base::Optional<blink::WebNavigationType> navigation_type) {
url_ = url;
}
void BraveWalletRenderFrameObserver::DidCreateScriptContext(
v8::Local<v8::Context> context,
int32_t world_id) {
if (!native_javascript_handle_)
return;
native_javascript_handle_->AddJavaScriptObjectToFrame(context);
}
void BraveWalletRenderFrameObserver::DidCreateNewDocument() {
if (!native_javascript_handle_) {
native_javascript_handle_.reset(
new BraveWalletJSHandler(render_frame()));
}
native_javascript_handle_->InjectScript();
}
void BraveWalletRenderFrameObserver::OnDestruct() {
delete this;
}
} // namespace brave_wallet
@@ -0,0 +1,46 @@
/* Copyright (c) 2021 The Brave Authors. All rights reserved.
* 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/. */
#ifndef BRAVE_COMPONENTS_BRAVE_WALLET_RENDERER_BRAVE_WALLET_RENDER_FRAME_OBSERVER_H_
#define BRAVE_COMPONENTS_BRAVE_WALLET_RENDERER_BRAVE_WALLET_RENDER_FRAME_OBSERVER_H_
#include <memory>
#include "brave/components/brave_wallet/renderer/brave_wallet_js_handler.h"
#include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_frame_observer.h"
#include "third_party/blink/public/web/web_navigation_type.h"
#include "url/gurl.h"
#include "v8/include/v8.h"
namespace brave_wallet {
class BraveWalletRenderFrameObserver
: public content::RenderFrameObserver {
public:
BraveWalletRenderFrameObserver(content::RenderFrame* render_frame);
~BraveWalletRenderFrameObserver() override;
// RenderFrameObserver implementation.
void DidStartNavigation(
const GURL& url,
base::Optional<blink::WebNavigationType> navigation_type) override;
void DidCreateScriptContext(v8::Local<v8::Context> context,
int32_t world_id) override;
void DidCreateNewDocument() override;
private:
// RenderFrameObserver implementation.
void OnDestruct() override;
// Handle to "handler" JavaScript object functionality.
std::unique_ptr<BraveWalletJSHandler> native_javascript_handle_;
GURL url_;
};
} // namespace brave_wallet
#endif // BRAVE_COMPONENTS_BRAVE_WALLET_RENDERER_BRAVE_WALLET_RENDER_FRAME_OBSERVER_H_
@@ -0,0 +1,18 @@
import("//brave/components/common/typescript.gni")
import("//tools/grit/grit_rule.gni")
import("//tools/grit/repack.gni")
transpile_web_ui("brave_wallet_script_resources") {
entry_points = [ [
"brave_wallet_script",
rebase_path("brave_wallet_provider.js"),
] ]
resource_name = "brave_wallet_script"
}
pack_web_resources("generated_resources") {
resource_name = "brave_wallet_script"
output_dir = "$root_gen_dir/brave/components/brave_wallet/resources"
deps = [ ":brave_wallet_script_resources" ]
}
@@ -0,0 +1,12 @@
// Copyright (c) 2021 The Brave Authors. All rights reserved.
// 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/.
(function() {
window.ethereum = {
request: function(obj) {
return Promise.resolve()
}
}
})()
+7 -3
View File
@@ -89,9 +89,13 @@ repack("resources") {
]
}
if (brave_wallet_enabled && !is_android) {
deps += [ "//brave/components/brave_wallet_ui:generated_resources" ]
sources += [ "$root_gen_dir/brave/components/brave_wallet/resources/brave_wallet_generated.pak" ]
if (brave_wallet_enabled) {
if (!is_android) {
deps += [ "//brave/components/brave_wallet_ui:generated_resources" ]
sources += [ "$root_gen_dir/brave/components/brave_wallet/resources/brave_wallet_generated.pak" ]
}
deps += [ "//brave/components/brave_wallet/resources:generated_resources", ]
sources += [ "$root_gen_dir/brave/components/brave_wallet/resources/brave_wallet_script_generated.pak" ]
}
output = "$root_gen_dir/components/brave_components_resources.pak"
+1
View File
@@ -12,6 +12,7 @@ source_set("renderer") {
deps = [
"//brave/components/brave_shields/common",
"//brave/components/brave_wallet/renderer",
"//brave/components/cosmetic_filters/renderer",
]
}
@@ -7,6 +7,7 @@
#include "base/feature_list.h"
#include "brave/components/brave_shields/common/features.h"
#include "brave/components/brave_wallet/renderer/brave_wallet_render_frame_observer.h"
#include "brave/components/cosmetic_filters/renderer/cosmetic_filters_js_render_frame_observer.h"
#include "chrome/common/chrome_isolated_world_ids.h"
#include "third_party/blink/public/platform/web_runtime_features.h"
@@ -42,6 +43,8 @@ void BraveContentRendererClient::RenderFrameCreated(
#endif
new cosmetic_filters::CosmeticFiltersJsRenderFrameObserver(
render_frame, ISOLATED_WORLD_ID_BRAVE_INTERNAL);
new brave_wallet::BraveWalletRenderFrameObserver(render_frame);
}
void BraveContentRendererClient::RunScriptsAtDocumentStart(
+6
View File
@@ -3,6 +3,8 @@
# 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/.
import("//brave/components/brave_wallet/buildflags/buildflags.gni")
brave_chrome_renderer_sources = [
"//brave/renderer/brave_content_renderer_client.cc",
"//brave/renderer/brave_content_renderer_client.h",
@@ -12,3 +14,7 @@ brave_chrome_renderer_public_deps = [
"//brave/components/content_settings/renderer",
"//brave/components/cosmetic_filters/renderer",
]
if (brave_wallet_enabled) {
brave_chrome_renderer_public_deps += [ "//brave/components/brave_wallet/renderer" ]
}