injects window.ethereum object into all frames
This commit is contained in:
@@ -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
@@ -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) {
|
||||
|
||||
@@ -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",
|
||||
]
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
})()
|
||||
@@ -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"
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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" ]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user