Skip to content

Commit 20f2ad7

Browse files
committed
passing window object to API JS
API JS is now executing from Node context so window ref is needed
1 parent e243822 commit 20f2ad7

File tree

1 file changed

+15
-11
lines changed

1 file changed

+15
-11
lines changed

src/api/dispatcher_bindings.cc

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ v8::Handle<v8::String> WrapSource(v8::Handle<v8::String> source) {
5252
v8::Isolate* isolate = v8::Isolate::GetCurrent();
5353
v8::EscapableHandleScope handle_scope(isolate);
5454
v8::Handle<v8::String> left =
55-
v8::String::NewFromUtf8(isolate, "(function(nw, exports) {");
55+
v8::String::NewFromUtf8(isolate, "(function(nw, exports, window) {");
5656
v8::Handle<v8::String> right = v8::String::NewFromUtf8(isolate, "\n})");
5757
return handle_scope.Escape(
5858
v8::String::Concat(left, v8::String::Concat(source, right)));
@@ -61,6 +61,7 @@ v8::Handle<v8::String> WrapSource(v8::Handle<v8::String> source) {
6161
// Similar to node's `require` function, save functions in `exports`.
6262
void RequireFromResource(v8::Handle<v8::Object> root,
6363
v8::Handle<v8::Object> gui,
64+
v8::Handle<v8::Object> window,
6465
v8::Handle<v8::String> name,
6566
int resource_id) {
6667
v8::Isolate* isolate = v8::Isolate::GetCurrent();
@@ -75,8 +76,8 @@ void RequireFromResource(v8::Handle<v8::Object> root,
7576
v8::TryCatch try_catch;
7677
v8::Handle<v8::Script> script(v8::Script::Compile(wrapped_source, name));
7778
v8::Handle<v8::Function> func = v8::Handle<v8::Function>::Cast(script->Run());
78-
v8::Handle<v8::Value> args[] = { root, gui };
79-
func->Call(root, 2, args);
79+
v8::Handle<v8::Value> args[] = { root, gui, window };
80+
func->Call(root, 3, args);
8081
if (try_catch.HasCaught()) {
8182
v8::String::Utf8Value stack(try_catch.StackTrace());
8283
LOG(FATAL) << *stack;
@@ -174,28 +175,31 @@ DispatcherBindings::RequireNwGui(const v8::FunctionCallbackInfo<v8::Value>& args
174175
return;
175176
}
176177

178+
v8::Local<v8::Context> context = isolate->GetEnteredContext();
179+
v8::Local<v8::Object> global = context->Global();
180+
ASSERT(!global->IsUndefined());
177181
v8::Local<v8::Context> g_context =
178182
v8::Local<v8::Context>::New(isolate, node::g_context);
179183

180184
g_context->Enter();
181185
v8::Local<v8::Object> NwGui = v8::Object::New(isolate);
182186
args.This()->Set(NwGuiSymbol, NwGui);
183187
RequireFromResource(args.This(),
184-
NwGui, v8::String::NewFromUtf8(isolate, "base.js"), IDR_NW_API_BASE_JS);
188+
NwGui, global, v8::String::NewFromUtf8(isolate, "base.js"), IDR_NW_API_BASE_JS);
185189
RequireFromResource(args.This(),
186-
NwGui, v8::String::NewFromUtf8(isolate, "menuitem.js"), IDR_NW_API_MENUITEM_JS);
190+
NwGui, global, v8::String::NewFromUtf8(isolate, "menuitem.js"), IDR_NW_API_MENUITEM_JS);
187191
RequireFromResource(args.This(),
188-
NwGui, v8::String::NewFromUtf8(isolate, "menu.js"), IDR_NW_API_MENU_JS);
192+
NwGui, global, v8::String::NewFromUtf8(isolate, "menu.js"), IDR_NW_API_MENU_JS);
189193
RequireFromResource(args.This(),
190-
NwGui, v8::String::NewFromUtf8(isolate, "tray.js"), IDR_NW_API_TRAY_JS);
194+
NwGui, global, v8::String::NewFromUtf8(isolate, "tray.js"), IDR_NW_API_TRAY_JS);
191195
RequireFromResource(args.This(),
192-
NwGui, v8::String::NewFromUtf8(isolate, "clipboard.js"), IDR_NW_API_CLIPBOARD_JS);
196+
NwGui, global, v8::String::NewFromUtf8(isolate, "clipboard.js"), IDR_NW_API_CLIPBOARD_JS);
193197
RequireFromResource(args.This(),
194-
NwGui, v8::String::NewFromUtf8(isolate, "window.js"), IDR_NW_API_WINDOW_JS);
198+
NwGui, global, v8::String::NewFromUtf8(isolate, "window.js"), IDR_NW_API_WINDOW_JS);
195199
RequireFromResource(args.This(),
196-
NwGui, v8::String::NewFromUtf8(isolate, "shell.js"), IDR_NW_API_SHELL_JS);
200+
NwGui, global, v8::String::NewFromUtf8(isolate, "shell.js"), IDR_NW_API_SHELL_JS);
197201
RequireFromResource(args.This(),
198-
NwGui, v8::String::NewFromUtf8(isolate, "app.js"), IDR_NW_API_APP_JS);
202+
NwGui, global, v8::String::NewFromUtf8(isolate, "app.js"), IDR_NW_API_APP_JS);
199203

200204
g_context->Exit();
201205
args.GetReturnValue().Set(handle_scope.Escape(NwGui));

0 commit comments

Comments
 (0)