61 lines
1.7 KiB
C++
61 lines
1.7 KiB
C++
// Copyright (c) 2016 GitHub, Inc.
|
|
// Use of this source code is governed by the MIT license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "atom/renderer/atom_isolated_world.h"
|
|
|
|
#include "third_party/WebKit/public/web/WebLocalFrame.h"
|
|
#include "third_party/WebKit/public/web/WebScriptSource.h"
|
|
|
|
namespace atom {
|
|
|
|
NodeBindings* AtomIsolatedWorld::node_bindings_ = nullptr;
|
|
node::Environment* AtomIsolatedWorld::env_ = nullptr;
|
|
|
|
AtomIsolatedWorld::AtomIsolatedWorld(NodeBindings* node_bindings) :
|
|
v8::Extension("ElectronIsolatedWorldExtension",
|
|
"native function SetupNode();") {
|
|
node_bindings_ = node_bindings;
|
|
env_ = nullptr;
|
|
}
|
|
|
|
AtomIsolatedWorld::~AtomIsolatedWorld() {
|
|
node_bindings_ = nullptr;
|
|
env_ = nullptr;
|
|
}
|
|
|
|
node::Environment* AtomIsolatedWorld::CreateEnvironment(
|
|
content::RenderFrame* frame) {
|
|
blink::WebScriptSource source("SetupNode()");
|
|
frame->GetWebFrame()->executeScriptInIsolatedWorld(
|
|
1,
|
|
&source,
|
|
1,
|
|
1,
|
|
nullptr);
|
|
return env_;
|
|
}
|
|
|
|
v8::Local<v8::FunctionTemplate> AtomIsolatedWorld::GetNativeFunctionTemplate(
|
|
v8::Isolate* isolate,
|
|
v8::Local<v8::String> name) {
|
|
if (name->Equals(v8::String::NewFromUtf8(isolate, "SetupNode")))
|
|
return v8::FunctionTemplate::New(isolate, SetupNode);
|
|
return v8::Local<v8::FunctionTemplate>();
|
|
}
|
|
|
|
// static
|
|
void AtomIsolatedWorld::SetupNode(
|
|
const v8::FunctionCallbackInfo<v8::Value>& args) {
|
|
env_ = node_bindings_->CreateEnvironment(
|
|
args.GetIsolate()->GetCurrentContext());
|
|
}
|
|
|
|
// static
|
|
AtomIsolatedWorld* AtomIsolatedWorld::Create(NodeBindings* node_bindings) {
|
|
AtomIsolatedWorld* world = new AtomIsolatedWorld(node_bindings);
|
|
content::RenderThread::Get()->RegisterExtension(world);
|
|
return world;
|
|
}
|
|
|
|
} // namespace atom
|