@@ -52,7 +52,7 @@ v8::Handle<v8::String> WrapSource(v8::Handle<v8::String> source) {
52
52
v8::Isolate* isolate = v8::Isolate::GetCurrent ();
53
53
v8::EscapableHandleScope handle_scope (isolate);
54
54
v8::Handle<v8::String> left =
55
- v8::String::NewFromUtf8 (isolate, " (function(nw, exports) {" );
55
+ v8::String::NewFromUtf8 (isolate, " (function(nw, exports, window ) {" );
56
56
v8::Handle<v8::String> right = v8::String::NewFromUtf8 (isolate, " \n })" );
57
57
return handle_scope.Escape (
58
58
v8::String::Concat (left, v8::String::Concat (source, right)));
@@ -61,6 +61,7 @@ v8::Handle<v8::String> WrapSource(v8::Handle<v8::String> source) {
61
61
// Similar to node's `require` function, save functions in `exports`.
62
62
void RequireFromResource (v8::Handle<v8::Object> root,
63
63
v8::Handle<v8::Object> gui,
64
+ v8::Handle<v8::Object> window,
64
65
v8::Handle<v8::String> name,
65
66
int resource_id) {
66
67
v8::Isolate* isolate = v8::Isolate::GetCurrent ();
@@ -75,8 +76,8 @@ void RequireFromResource(v8::Handle<v8::Object> root,
75
76
v8::TryCatch try_catch;
76
77
v8::Handle<v8::Script> script (v8::Script::Compile (wrapped_source, name));
77
78
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);
80
81
if (try_catch.HasCaught ()) {
81
82
v8::String::Utf8Value stack (try_catch.StackTrace ());
82
83
LOG (FATAL) << *stack;
@@ -174,28 +175,31 @@ DispatcherBindings::RequireNwGui(const v8::FunctionCallbackInfo<v8::Value>& args
174
175
return ;
175
176
}
176
177
178
+ v8::Local<v8::Context> context = isolate->GetEnteredContext ();
179
+ v8::Local<v8::Object> global = context->Global ();
180
+ ASSERT (!global->IsUndefined ());
177
181
v8::Local<v8::Context> g_context =
178
182
v8::Local<v8::Context>::New (isolate, node::g_context);
179
183
180
184
g_context->Enter ();
181
185
v8::Local<v8::Object> NwGui = v8::Object::New (isolate);
182
186
args.This ()->Set (NwGuiSymbol, NwGui);
183
187
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);
185
189
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);
187
191
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);
189
193
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);
191
195
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);
193
197
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);
195
199
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);
197
201
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);
199
203
200
204
g_context->Exit ();
201
205
args.GetReturnValue ().Set (handle_scope.Escape (NwGui));
0 commit comments